app/soc/views/models/survey.py
author Lennard de Rijk <ljvderijk@gmail.com>
Wed, 01 Jul 2009 21:53:20 +0200
changeset 2477 e5629995d118
parent 2476 c27c21beba35
child 2478 985fd974e095
permissions -rw-r--r--
Implemented the takeGet view for Surveys.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     2
#
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     3
# Copyright 2009 the Melange authors.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     4
#
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     8
#
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    10
#
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    16
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    17
"""Views for Surveys.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    18
"""
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    19
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    20
__authors__ = [
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    21
  '"Daniel Diniz" <ajaksu@gmail.com>',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    22
  '"James Levy" <jamesalexanderlevy@gmail.com>',
2463
05af53239799 Add more flexibility to the Survey helper for use with the new Survey types.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
    23
  '"Lennard de Rijk" <ljvderijk@gmail.com>',
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    24
  ]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    25
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    26
import csv
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    27
import datetime
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    28
import re
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    29
import StringIO
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    30
import string
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
    31
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
    32
from google.appengine.ext import db
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
    33
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    34
from django import forms
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    35
from django import http
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    36
from django.utils import simplejson
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    37
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    38
from soc.logic import cleaning
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    39
from soc.logic import dicts
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
    40
from soc.logic.models.survey import GRADES
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
    41
from soc.logic.models.survey import logic as survey_logic
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    42
from soc.logic.models.user import logic as user_logic
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    43
from soc.models.survey import Survey
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    44
from soc.models.survey_record import SurveyRecord
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    45
from soc.models.user import User
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    46
from soc.views import out_of_band
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    47
from soc.views.helper import access
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    48
from soc.views.helper import decorators
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    49
from soc.views.helper import redirects
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    50
from soc.views.helper import responses
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    51
from soc.views.helper import surveys
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    52
from soc.views.helper import widgets
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    53
from soc.views.models import base
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    54
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    55
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    56
CHOICE_TYPES = set(('selection', 'pick_multi', 'choice', 'pick_quant'))
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    57
TEXT_TYPES = set(('long_answer', 'short_answer'))
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    58
PROPERTY_TYPES = tuple(CHOICE_TYPES) + tuple(TEXT_TYPES)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    59
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    60
_short_answer = ("Short Answer",
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    61
                "Less than 40 characters. Rendered as a text input. "
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    62
                "It's possible to add a free form question (Content) "
2476
c27c21beba35 Fixed multiple typos in Survey tooltips strings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2475
diff changeset
    63
                "and a in-input prompt/example text.")
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    64
_choice = ("Selection",
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    65
           "Can be set as a single choice (selection) or multiple choice "
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    66
           "(pick_multi) question. Rendered as a select (single choice) "
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    67
           "or a group of checkboxes (multiple choice). It's possible to "
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    68
           "add a free form question (Content) and as many free form options "
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    69
           "as wanted. Each option can be edited (double-click), deleted "
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    70
           "(click on (-) button) or reordered (drag and drop).")
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    71
_long_answer = ("Long Answer",
2476
c27c21beba35 Fixed multiple typos in Survey tooltips strings.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2475
diff changeset
    72
                "Unlimited length, auto-growing field. Rendered as a textarea. "
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    73
                 "It's possible to add a free form question (Content) and "
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    74
                 "an in-input prompt/example text.")
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    75
QUESTION_TYPES = dict(short_answer=_short_answer, long_answer=_long_answer,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    76
                      choice=_choice)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    77
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    78
# for to_csv and View.exportSerialized
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    79
FIELDS = 'author modified_by'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    80
PLAIN = 'is_featured content created modified'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    81
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    82
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    83
class View(base.View):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    84
  """View methods for the Survey model.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    85
  """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    86
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    87
  def __init__(self, params=None):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    88
    """Defines the fields and methods required for the base View class
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    89
    to provide the user with list, public, create, edit and delete views.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    90
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    91
    Params:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    92
      params: a dict with params for this View
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    93
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    94
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    95
    # TODO: read/write access needs to match survey
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    96
    # TODO: usage requirements
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    97
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    98
    rights = access.Checker(params)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    99
    rights['any_access'] = ['allow']
2473
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   100
    rights['show'] = [('checkIsSurveyWritable', survey_logic)]
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   101
    rights['create'] = ['checkIsUser']
2471
04f13163c1e8 Brown paper bag "without tea" morning typo fix in Survey View.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2469
diff changeset
   102
    rights['edit'] = [('checkIsSurveyWritable', survey_logic)]
2473
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   103
    rights['delete'] = ['checkIsDeveloper'] # TODO: fix deletion of Surveys
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   104
    rights['list'] = ['checkDocumentList']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   105
    rights['pick'] = ['checkDocumentPick']
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   106
    rights['take'] = ['checkIsDeveloper'] # TODO(ljvderijk) test proper check
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   107
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   108
    new_params = {}
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   109
    new_params['logic'] = survey_logic
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   110
    new_params['rights'] = rights
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   111
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   112
    new_params['name'] = "Survey"
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   113
    new_params['pickable'] = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   114
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   115
    new_params['extra_django_patterns'] = [
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   116
         (r'^%(url_name)s/(?P<access_type>take)/%(key_fields)s$',
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   117
         'soc.views.models.%(module_name)s.take',
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   118
         'Take %(module_name)s'),
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   119
         (r'^%(url_name)s/(?P<access_type>json)/%(scope)s$',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   120
         'soc.views.models.%(module_name)s.json',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   121
         'Export %(name)s as JSON'),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   122
        (r'^%(url_name)s/(?P<access_type>results)/%(scope)s$',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   123
         'soc.views.models.%(module_name)s.results',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   124
         'View survey results for %(name)s'),
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   125
        (r'^%(url_name)s/(?P<access_type>show)/user/(?P<link_id>)\w+$',
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   126
         'soc.views.models.%(module_name)s.results',
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   127
         'View survey results for user'),
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   128
        ]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   129
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   130
    new_params['export_content_type'] = 'text/text'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   131
    new_params['export_extension'] = '.csv'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   132
    new_params['export_function'] = to_csv
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   133
    new_params['delete_redirect'] = '/'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   134
    new_params['list_key_order'] = [
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   135
        'link_id', 'scope_path', 'name', 'short_name', 'title',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   136
        'content', 'prefix','read_access','write_access']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   137
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   138
    new_params['edit_template'] = 'soc/survey/edit.html'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   139
    new_params['create_template'] = 'soc/survey/edit.html'
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   140
    new_params['take_template'] = 'soc/survey/take.html'
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   141
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   142
    # TODO which one of these are leftovers from Document?
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   143
    new_params['no_create_raw'] = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   144
    new_params['no_create_with_scope'] = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   145
    new_params['no_create_with_key_fields'] = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   146
    new_params['no_list_raw'] = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   147
    new_params['sans_link_id_create'] = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   148
    new_params['sans_link_id_list'] = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   149
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   150
    new_params['create_dynafields'] = [
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   151
        {'name': 'link_id',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   152
         'base': forms.fields.CharField,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   153
         'label': 'Survey Link ID',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   154
         },
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   155
        ]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   156
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   157
    # survey_html: save form content if POST fails, so fields remain in UI
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   158
    new_params['create_extra_dynaproperties'] = {
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   159
        #'survey_content': forms.fields.CharField(widget=surveys.EditSurvey(),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   160
                                                 #required=False),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   161
        'survey_html': forms.fields.CharField(widget=forms.HiddenInput,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   162
                                              required=False),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   163
        'scope_path': forms.fields.CharField(widget=forms.HiddenInput,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   164
                                             required=True),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   165
        'prefix': forms.fields.CharField(widget=widgets.ReadOnlyInput(),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   166
                                        required=True),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   167
        'clean_content': cleaning.clean_html_content('content'),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   168
        'clean_link_id': cleaning.clean_link_id('link_id'),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   169
        'clean_scope_path': cleaning.clean_scope_path('scope_path'),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   170
        'clean': cleaning.validate_document_acl(self, True),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   171
        }
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   172
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   173
    new_params['extra_dynaexclude'] = ['author', 'created', 'content',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   174
                                       'home_for', 'modified_by', 'modified',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   175
                                       'take_survey', 'survey_content']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   176
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   177
    new_params['edit_extra_dynaproperties'] = {
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   178
        'doc_key_name': forms.fields.CharField(widget=forms.HiddenInput),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   179
        'created_by': forms.fields.CharField(widget=widgets.ReadOnlyInput(),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   180
                                             required=False),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   181
        'last_modified_by': forms.fields.CharField(
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   182
                                widget=widgets.ReadOnlyInput(), required=False),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   183
        'clean': cleaning.validate_document_acl(self),
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   184
        }
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   185
2464
64b241a237b2 Merge params from inheriting Survey views so functionality can be reused.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2463
diff changeset
   186
    params = dicts.merge(params, new_params, sub_merge=True)
2463
05af53239799 Add more flexibility to the Survey helper for use with the new Survey types.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   187
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   188
    super(View, self).__init__(params=params)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   189
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   190
  def list(self, request, access_type, page_name=None, params=None,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   191
           filter=None, order=None, **kwargs):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   192
    """See base.View.list.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   193
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   194
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   195
    return super(View, self).list(request, access_type, page_name=page_name,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   196
                                  params=params, filter=kwargs)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   197
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   198
  def _public(self, request, entity, context):
2473
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   199
    """Add a preview version of the Survey to the page's context.
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   200
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   201
    Args:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   202
      request: the django request object
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   203
      entity: the entity to make public
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   204
      context: the context object
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   205
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   206
2473
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   207
    # construct the form to be shown on the page
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   208
    # TODO(ljvderijk) Generate SurveyForm without passing along the logic
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   209
    survey_form = surveys.SurveyForm(survey_content=entity.survey_content,
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   210
                                     survey_logic=self._params['logic'])
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   211
2473
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   212
    # TOOD(ljvderijk) pose question about the getFields method name and working
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   213
    survey_form.getFields()
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   214
2473
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   215
    context['survey_form'] = survey_form
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   216
2473
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   217
    # return True to signal that the page may be displayed
5cf0625dfa73 Changed the Survey public view to give a preview of the Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2472
diff changeset
   218
    return True
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   219
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   220
  def _editContext(self, request, context):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   221
    """Performs any required processing on the context for edit pages.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   222
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   223
    Args:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   224
      request: the django request object
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   225
      context: the context dictionary that will be used
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   226
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   227
      Adds list of SurveyRecord results as supplement to view.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   228
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   229
      See surveys.SurveyResults for details.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   230
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   231
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   232
    if not getattr(self, '_entity', None):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   233
      return
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   234
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   235
    results = surveys.SurveyResults()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   236
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   237
    context['survey_records'] = results.render(self._entity, self._params,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   238
                                               filter={})
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   239
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   240
    super(View, self)._editContext(request, context)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   241
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   242
  def _editPost(self, request, entity, fields):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   243
    """See base.View._editPost().
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   244
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   245
    Processes POST request items to add new dynamic field names,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   246
    question types, and default prompt values to SurveyContent model.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   247
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   248
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   249
    user = user_logic.getForCurrentAccount()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   250
    schema = {}
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   251
    survey_fields = {}
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   252
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   253
    if not entity:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   254
      # new Survey
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   255
      if 'serialized' in request.POST:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   256
        fields, schema, survey_fields = self.importSerialized(request, fields, user)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   257
      fields['author'] = user
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   258
    else:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   259
      fields['author'] = entity.author
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   260
      schema = self.loadSurveyContent(schema, survey_fields, entity)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   261
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   262
    # remove deleted properties from the model
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   263
    self.deleteQuestions(schema, survey_fields, request.POST)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   264
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   265
    # add new text questions and re-build choice questions
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   266
    self.getRequestQuestions(schema, survey_fields, request.POST)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   267
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   268
    # get schema options for choice questions
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   269
    self.getSchemaOptions(schema, survey_fields, request.POST)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   270
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   271
    survey_content = getattr(entity,'survey_content', None)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   272
    # create or update a SurveyContent for this Survey
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   273
    survey_content = survey_logic.createSurvey(survey_fields, schema,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   274
                                                survey_content=survey_content)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   275
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   276
    # save survey_content for existent survey or pass for creating a new one
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   277
    if entity:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   278
      entity.modified_by = user
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   279
      entity.survey_content = survey_content
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   280
      db.put(entity)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   281
    else:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   282
      fields['survey_content'] = survey_content
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   283
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   284
    fields['modified_by'] = user
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   285
    super(View, self)._editPost(request, entity, fields)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   286
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   287
  def loadSurveyContent(self, schema, survey_fields, entity):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   288
    """Populate the schema dict and get text survey questions.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   289
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   290
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   291
    if hasattr(entity, 'survey_content'):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   292
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   293
      # there is a SurveyContent already
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   294
      survey_content = entity.survey_content
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   295
      schema = eval(survey_content.schema)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   296
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   297
      for question_name in survey_content.dynamic_properties():
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   298
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   299
        # get the current questions from the SurveyContent
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   300
        if question_name not in schema:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   301
          continue
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   302
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   303
        if schema[question_name]['type'] not in CHOICE_TYPES:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   304
          # Choice questions are always regenerated from request, see
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   305
          # self.get_request_questions()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   306
          question = getattr(survey_content, question_name)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   307
          survey_fields[question_name] = question
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   308
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   309
    return schema
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   310
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   311
  def deleteQuestions(self, schema, survey_fields, POST):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   312
    """Process the list of questions to delete, from a hidden input.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   313
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   314
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   315
    deleted = POST.get('__deleted__', '')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   316
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   317
    if deleted:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   318
      deleted = deleted.split(',')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   319
      for field in deleted:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   320
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   321
        if field in schema:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   322
          del schema[field]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   323
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   324
        if field in survey_fields:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   325
          del survey_fields[field]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   326
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   327
  def getRequestQuestions(self, schema, survey_fields, POST):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   328
    """Get fields from request.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   329
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   330
    We use two field/question naming and processing schemes:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   331
      - Choice questions consist of <input/>s with a common name, being rebuilt
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   332
        anew on every edit POST so we can gather ordering, text changes,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   333
        deletions and additions.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   334
      - Text questions only have special survey__* names on creation, afterwards
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   335
        they are loaded from the SurveyContent dynamic properties.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   336
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   337
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   338
    for key, value in POST.items():
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   339
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   340
      if key.startswith('id_'):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   341
        # Choice question fields, they are always generated from POST contents,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   342
        # as their 'content' is editable and they're reorderable. Also get
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   343
        # its field index for handling reordering fields later.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   344
        name, number = key[3:].replace('__field', '').rsplit('_', 1)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   345
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   346
        if name not in schema:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   347
          if 'NEW_' + name in POST:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   348
            # new Choice question, set generic type and get its index
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   349
            schema[name] = {'type': 'choice'}
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   350
            schema[name]['index'] = int(POST['index_for_' + name])
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   351
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   352
        if name in schema and schema[name]['type'] in CHOICE_TYPES:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   353
          # build an index:content dictionary
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   354
          if name in survey_fields:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   355
            if value not in survey_fields[name]:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   356
              survey_fields[name][int(number)] = value
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   357
          else:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   358
            survey_fields[name] = {int(number): value}
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   359
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   360
      elif key.startswith('survey__'): # new Text question
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   361
        # this is super ugly but unless data is serialized the regex is needed
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   362
        prefix = re.compile('survey__([0-9]{1,3})__')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   363
        prefix_match = re.match(prefix, key)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   364
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   365
        index = prefix_match.group(0).replace('survey', '').replace('__','')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   366
        index = int(index)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   367
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   368
        field_name = prefix.sub('', key)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   369
        field = 'id_' + key
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   370
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   371
        for ptype in PROPERTY_TYPES:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   372
          # should only match one
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   373
          if ptype + "__" in field_name:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   374
            field_name = field_name.replace(ptype + "__", "")
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   375
            schema[field_name] = {}
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   376
            schema[field_name]["index"] = index
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   377
            schema[field_name]["type"] = ptype
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   378
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   379
        survey_fields[field_name] = value
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   380
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   381
  def getSchemaOptions(self, schema, survey_fields, POST):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   382
    """Get question, type, rendering and option order for choice questions.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   383
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   384
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   385
    RENDER = {'checkboxes': 'multi_checkbox', 'select': 'single_select',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   386
              'radio_buttons': 'quant_radio'}
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   387
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   388
    RENDER_TYPES = {'select': 'selection',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   389
                    'checkboxes': 'pick_multi',
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   390
                    'radio_buttons': 'pick_quant' }
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   391
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   392
    for key in schema:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   393
      if schema[key]['type'] in CHOICE_TYPES and key in survey_fields:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   394
        render_for = 'render_for_' + key
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   395
        if render_for in POST:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   396
          schema[key]['render'] = RENDER[POST[render_for]]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   397
          schema[key]['type'] = RENDER_TYPES[POST[render_for]]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   398
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   399
        # handle reordering fields
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   400
        ordered = False
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   401
        order = 'order_for_' + key
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   402
        if order in POST and isinstance(survey_fields[key], dict):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   403
          order = POST[order]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   404
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   405
          # 'order_for_name' is jquery serialized from a sortable, so it's in
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   406
          # a 'name[]=1&name[]=2&name[]=0' format ('id-li-' is set in our JS)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   407
          order = order.replace('id-li-%s[]=' % key, '')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   408
          order = order.split('&')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   409
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   410
          if len(order) == len(survey_fields[key]) and order[0]:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   411
            order = [int(number) for number in order]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   412
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   413
            if set(order) == set(survey_fields[key]):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   414
              survey_fields[key] = [survey_fields[key][i] for i in order]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   415
              ordered = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   416
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   417
          if not ordered:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   418
            # we don't have a good ordering to use
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   419
            ordered = sorted(survey_fields[key].items())
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   420
            survey_fields[key] = [value for index, value in ordered]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   421
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   422
      # set 'question' entry (free text label for question) in schema
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   423
      question_for = 'NEW_' + key
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   424
      if question_for in POST:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   425
        schema[key]["question"] = POST[question_for]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   426
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   427
  def createGet(self, request, context, params, seed):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   428
    """Pass the question types for the survey creation template.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   429
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   430
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   431
    context['question_types'] = QUESTION_TYPES
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   432
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   433
    # avoid spurious results from showing on creation
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   434
    context['new_survey'] = True
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   435
    return super(View, self).createGet(request, context, params, seed)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   436
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   437
  def editGet(self, request, entity, context, params=None):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   438
    """Process GET requests for the specified entity.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   439
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   440
    Builds the SurveyForm that represents the Survey question contents.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   441
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   442
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   443
    # TODO(ajaksu) Move CHOOSE_A_PROJECT_FIELD and CHOOSE_A_GRADE_FIELD
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   444
    # to template.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   445
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   446
    CHOOSE_A_PROJECT_FIELD = """<tr class="role-specific">
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   447
    <th><label>Choose Project:</label></th>
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   448
    <td>
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   449
      <select disabled="TRUE" id="id_survey__NA__selection__project"
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   450
        name="survey__1__selection__see">
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   451
          <option>Survey Taker's Projects For This Program</option></select>
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   452
     </td></tr>
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   453
     """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   454
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   455
    CHOOSE_A_GRADE_FIELD = """<tr class="role-specific">
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   456
    <th><label>Assign Grade:</label></th>
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   457
    <td>
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   458
      <select disabled=TRUE id="id_survey__NA__selection__grade"
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   459
       name="survey__1__selection__see">
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   460
        <option>Pass/Fail</option>
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   461
      </select></td></tr>
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   462
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   463
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   464
    self._entity = entity
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   465
    survey_content = entity.survey_content
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   466
    user = user_logic.getForCurrentAccount()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   467
    # no project or survey_record needed for survey prototype
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   468
    project = None
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   469
    survey_record = None
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   470
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   471
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   472
    survey_form = surveys.SurveyForm(survey_content=survey_content,
2463
05af53239799 Add more flexibility to the Survey helper for use with the new Survey types.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   473
                                     this_user=user, project=project,
05af53239799 Add more flexibility to the Survey helper for use with the new Survey types.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   474
                                     survey_logic=params['logic'],
05af53239799 Add more flexibility to the Survey helper for use with the new Survey types.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   475
                                     survey_record=survey_record,
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   476
                                     editing=True, read_only=False)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   477
    survey_form.getFields()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   478
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   479
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   480
    # activate grades flag -- TODO: Can't configure notice on edit page
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   481
    if request._get.get('activate'):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   482
      context['notice'] = "Evaluation Grades Have Been Activated"
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   483
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   484
    local = dict(survey_form=survey_form, question_types=QUESTION_TYPES,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   485
                survey_h=entity.survey_content)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   486
    context.update(local)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   487
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   488
    params['edit_form'] = HelperForm(params['edit_form'])
2440
05c430d1c147 Renamed opening to survey_start and deadline to survey_end.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2439
diff changeset
   489
    if entity.survey_end and datetime.datetime.now() > entity.survey_end:
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   490
      # are we already passed the survey_end?
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   491
      context["passed_survey_end"] = True
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   492
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   493
    return super(View, self).editGet(request, entity, context, params=params)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   494
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   495
  @decorators.merge_params
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   496
  @decorators.check_access
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   497
  def take(self, request, access_type, page_name=None,
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   498
           params=None, **kwargs):
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   499
    """View for taking a Survey.
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   500
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   501
    For Args see base.View().public().
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   502
    """
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   503
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   504
    survey_logic = params['logic']
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   505
    record_logic = survey_logic.getRecordLogic()
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   506
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   507
    try:
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   508
      entity = self._logic.getFromKeyFieldsOr404(kwargs)
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   509
    except out_of_band.Error, error:
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   510
      return responses.errorResponse(
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   511
          error, request, template=params['error_public'])
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   512
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   513
    template = params['take_template']
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   514
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   515
    # get the context for this webpage
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   516
    context = responses.getUniversalContext(request)
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   517
    responses.useJavaScript(context, params['js_uses_all'])
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   518
    context['page_name'] = "%s titled '%s'" % (page_name, entity.title)
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   519
    context['entity'] = entity
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   520
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   521
    user_entity = user_logic.getForCurrentAccount()
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   522
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   523
    # try to get an existing SurveyRecord for the current user
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   524
    # TODO(ljvderijk) deal with the SurveyProperty name in subclasses
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   525
    filter = {'survey': entity,
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   526
              'user': user_entity}
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   527
    survey_record = record_logic.getForFields(filter, unique=True)
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   528
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   529
    if request.POST:
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   530
      return self.takePost(request, template, context, params, entity,
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   531
                           survey_record, **kwargs)
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   532
    else: #request.GET
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   533
      return self.takeGet(request, template, context, params, entity,
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   534
                          survey_record, **kwargs)
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   535
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   536
  def takeGet(self, request, template, context, params, entity, record,
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   537
              **kwargs):
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   538
    """Handles the GET request for the Survey's take page.
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   539
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   540
    Args:
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   541
        template: the template used for this view
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   542
        entity: the Survey entity
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   543
        rest: see base.View.public()
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   544
    """
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   545
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   546
    survey_form = surveys.SurveyForm(survey_content=entity.survey_content,
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   547
                                     survey_record=record,
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   548
                                     survey_logic=self._params['logic'])
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   549
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   550
    survey_form.getFields()
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   551
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   552
    # fill context with the survey and additional information
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   553
    context['survey_form'] = survey_form
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   554
    self.setHelpAndStatus(context, entity, record)
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   555
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   556
    return responses.respond(request, template, context)
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   557
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   558
  def takePost(self, request, template, context, params, entity, record,
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   559
               **kwargs):
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   560
    """Handles the POST request for the Survey's take page.
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   561
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   562
    Args:
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   563
        template: the template used for this view
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   564
        entity: the Survey entity
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   565
        rest: see base.View.public()
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   566
    """
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   567
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   568
    # TODO(ljvderijk) implement takePost
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   569
2477
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   570
    return http.HttpResponse("Work in Progress")
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   571
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   572
  def setHelpAndStatus(self, context, survey, survey_record):
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   573
    """Get help_text and status for template use.
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   574
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   575
    Args:
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   576
        context: the context for the view to update
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   577
        survey: a Survey entity
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   578
        survey_record: a SurveyRecordEntity 
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   579
    """
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   580
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   581
    if not survey.survey_end:
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   582
      survey_end_text = ""
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   583
    else:
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   584
      survey_end_text = " by " + str(
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   585
          survey.survey_end.strftime("%A, %d. %B %Y %I:%M%p"))
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   586
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   587
    if survey_record:
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   588
      help_text = "Edit and re-submit this survey" + survey_end_text + "."
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   589
      status = "edit"
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   590
    else:
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   591
      help_text = "Please complete this survey" + survey_end_text + "."
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   592
      status = "create"
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   593
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   594
    # update the context with the help_text and status
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   595
    context_update = dict(status=status, help_text=help_text)
e5629995d118 Implemented the takeGet view for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2476
diff changeset
   596
    context.update(context_update)
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   597
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   598
  def activate(self, request, **kwargs):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   599
    """This is a hack to support the 'Enable grades' button.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   600
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   601
    self.activateGrades(request)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   602
    redirect_path = request.path.replace('/activate/', '/edit/') + '?activate=1'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   603
    return http.HttpResponseRedirect(redirect_path)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   604
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   605
  def activateGrades(self, request, **kwargs):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   606
    """Updates SurveyRecord's grades for a given Survey.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   607
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   608
    survey_key_name = survey_logic.getKeyNameFromPath(request.path)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   609
    survey = Survey.get_by_key_name(survey_key_name)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   610
    survey_logic.activateGrades(survey)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   611
    return
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   612
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   613
  @decorators.merge_params
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   614
  @decorators.check_access
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   615
  def viewResults(self, request, access_type, page_name=None,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   616
                  params=None, **kwargs):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   617
    """View for SurveyRecord and SurveyRecordGroup.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   618
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   619
2467
f46cff8d676b Solved some merging problems and use the getRecordLogic where needed.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2464
diff changeset
   620
    results_logic = params['logic'].getRecordLogic()
f46cff8d676b Solved some merging problems and use the getRecordLogic where needed.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2464
diff changeset
   621
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   622
    user = user_logic.getForCurrentAccount()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   623
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   624
    # TODO(ajaksu) use the named parameter link_id from the re
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   625
    if request.path == '/survey/show/user/' + user.link_id:
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   626
      records = tuple(user.surveys_taken.run())
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   627
      context = responses.getUniversalContext(request)
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   628
      context['content'] = records[0].survey.survey_content
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   629
      responses.useJavaScript(context, params['js_uses_all'])
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   630
      context['page_name'] = u'Your survey records.'
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   631
    else:
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   632
      entity, context = self.getContextEntity(request, page_name,
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   633
                                              params, kwargs)
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   634
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   635
      if context is None:
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   636
        # user cannot see this page, return error response
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   637
        return entity
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   638
      context['content'] = entity.survey_content
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   639
      can_write = False
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   640
      rights = self._params['rights']
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   641
      try:
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   642
        rights.checkIsSurveyWritable({'key_name': entity.key().name(),
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   643
                                      'prefix': entity.prefix,
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   644
                                      'scope_path': entity.scope_path,
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   645
                                      'link_id': entity.link_id,},
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   646
                                     'key_name')
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   647
        can_write = True
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   648
      except out_of_band.AccessViolation:
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   649
        pass
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   650
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   651
      filter = self._params.get('filter') or {}
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   652
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   653
      # if user can edit the survey, show everyone's results
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   654
      if can_write:
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   655
        filter['survey'] = entity
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   656
      else:
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   657
        filter.update({'user': user, 'survey': entity})
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   658
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   659
      limit = self._params.get('limit') or 1000
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   660
      offset = self._params.get('offset') or 0
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   661
      order = self._params.get('order') or []
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   662
      idx = self._params.get('idx') or 0
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   663
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   664
      records = results_logic.getForFields(filter=filter, limit=limit,
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   665
                                        offset=offset, order=order)
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   666
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   667
    updates = dicts.rename(params, params['list_params'])
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   668
    context.update(updates)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   669
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   670
    context['results'] = records, records
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   671
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   672
    template = 'soc/survey/results_page.html'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   673
    return responses.respond(request, template, context=context)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   674
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   675
  @decorators.merge_params
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   676
  @decorators.check_access
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   677
  def exportSerialized(self, request, access_type, page_name=None,
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   678
                       params=None, **kwargs):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   679
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   680
    sur, context = self.getContextEntity(request, page_name, params, kwargs)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   681
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   682
    if context is None:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   683
      # user cannot see this page, return error response
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   684
      return sur
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   685
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   686
    json = sur.toDict()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   687
    json.update(dict((f, str(getattr(sur, f))) for f in PLAIN.split()))
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   688
    static = ((f, str(getattr(sur, f).link_id)) for f in FIELDS.split())
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   689
    json.update(dict(static))
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   690
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   691
    dynamic = sur.survey_content.dynamic_properties()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   692
    content = ((prop, getattr(sur.survey_content, prop)) for prop in dynamic)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   693
    json['survey_content'] = dict(content)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   694
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   695
    schema =  sur.survey_content.schema
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   696
    json['survey_content']['schema'] = eval(sur.survey_content.schema)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   697
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   698
    data = simplejson.dumps(json, indent=2)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   699
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   700
    return self.json(request, data=json)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   701
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   702
  def importSerialized(self, request, fields, user):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   703
    json = request.POST['serialized']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   704
    json = simplejson.loads(json)['data']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   705
    survey_content = json.pop('survey_content')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   706
    schema = survey_content.pop('schema')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   707
    del json['author']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   708
    del json['created']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   709
    del json['modified']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   710
    #del json['is_featured']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   711
    # keywords can't be unicode
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   712
    keywords = {}
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   713
    for key, val in json.items():
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   714
      keywords[str(key)] = val
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   715
    if 'is_featured' in keywords:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   716
      keywords['is_featured'] = eval(keywords['is_featured'])
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   717
    return keywords, schema, survey_content
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   718
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   719
  def getContextEntity(self, request, page_name, params, kwargs):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   720
    context = responses.getUniversalContext(request)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   721
    responses.useJavaScript(context, params['js_uses_all'])
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   722
    context['page_name'] = page_name
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   723
    entity = None
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   724
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   725
    # TODO(ajaksu) there has to be a better way in this universe to get these
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   726
    kwargs['prefix'] = 'program'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   727
    kwargs['link_id'] = request.path.split('/')[-1]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   728
    kwargs['scope_path'] = '/'.join(request.path.split('/')[4:-1])
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   729
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   730
    entity = survey_logic.getFromKeyFieldsOr404(kwargs)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   731
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   732
    if not self._public(request, entity, context):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   733
      error = out_of_band.Error('')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   734
      error = responses.errorResponse(
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   735
          error, request, template=params['error_public'], context=context)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   736
      return error, None
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   737
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   738
    return entity, context
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   739
2474
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   740
  def getMenusForScope(self, entity, params):
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   741
    """List featured surveys if after the survey_start date and before survey_end.
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   742
    """
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   743
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   744
    # only list surveys for registered users
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   745
    user = user_logic.getForCurrentAccount()
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   746
    if not user:
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   747
      return []
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   748
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   749
    filter = {
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   750
        'prefix' : params['url_name'],
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   751
        'scope_path': entity.key().id_or_name(),
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   752
        'is_featured': True,
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   753
        }
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   754
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   755
    entities = self._logic.getForFields(filter)
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   756
    submenus = []
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   757
    now = datetime.datetime.now()
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   758
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   759
    # cache ACL
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   760
    survey_rights = {}
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   761
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   762
    # add a link to all featured documents
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   763
    for entity in entities:
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   764
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   765
      # only list those surveys the user can read
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   766
      if entity.read_access not in survey_rights:
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   767
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   768
        params = dict(prefix=entity.prefix, scope_path=entity.scope_path,
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   769
                      link_id=entity.link_id, user=user)
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   770
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   771
        # TODO(ajaksu) use access.Checker.checkIsSurveyReadable
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   772
        checker = access.rights_logic.Checker(entity.prefix)
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   773
        roles = checker.getMembership(entity.read_access)
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   774
        rights = self._params['rights']
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   775
        can_read = access.Checker.hasMembership(rights, roles, params)
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   776
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   777
        # cache ACL for a given entity.read_access
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   778
        survey_rights[entity.read_access] = can_read
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   779
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   780
        if not can_read:
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   781
          pass#continue
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   782
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   783
      elif not survey_rights[entity.read_access]:
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   784
        pass#continue
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   785
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   786
      # omit if either before survey_start or after survey_end
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   787
      if entity.survey_start and entity.survey_start > now:
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   788
        pass#continue
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   789
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   790
      if entity.survey_end and entity.survey_end < now:
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   791
        pass#continue
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   792
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   793
      taken_status = ""
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   794
      taken_status = "(new)"
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   795
      #TODO only if a document is readable it might be added
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   796
      submenu = (redirects.getPublicRedirect(entity, self._params),
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   797
      'Survey ' +  taken_status + ': ' + entity.short_name,
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   798
      'show')
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   799
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   800
      submenus.append(submenu)
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   801
    return submenus
b8e25769880d Move getMenusForScope to the end of the View class.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2473
diff changeset
   802
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   803
class HelperForm(object):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   804
  """Thin wrapper for adding values to params['edit_form'].fields.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   805
  """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   806
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   807
  def __init__(self, form=None):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   808
    """Store the edit_form.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   809
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   810
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   811
    self.form = form
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   812
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   813
  def __call__(self, instance=None):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   814
    """Transparently instantiate and add initial values to the edit_form.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   815
    """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   816
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   817
    form = self.form(instance=instance)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   818
    form.fields['created_by'].initial = instance.author.name
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   819
    form.fields['last_modified_by'].initial = instance.modified_by.name
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   820
    form.fields['doc_key_name'].initial = instance.key().id_or_name()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   821
    return form
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   822
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   823
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   824
def _get_csv_header(sur):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   825
  """CSV header helper, needs support for comment lines in CSV.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   826
  """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   827
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   828
  tpl = '# %s: %s\n'
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   829
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   830
  # add static properties
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   831
  fields = ['# Melange Survey export for \n#  %s\n#\n' % sur.title]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   832
  fields += [tpl % (k,v) for k,v in sur.toDict().items()]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   833
  fields += [tpl % (f, str(getattr(sur, f))) for f in PLAIN.split()]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   834
  fields += [tpl % (f, str(getattr(sur, f).link_id)) for f in FIELDS.split()]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   835
  fields.sort()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   836
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   837
  # add dynamic properties
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   838
  fields += ['#\n#---\n#\n']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   839
  dynamic = sur.survey_content.dynamic_properties()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   840
  dynamic = [(prop, getattr(sur.survey_content, prop)) for prop in dynamic]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   841
  fields += [tpl % (k,v) for k,v in sorted(dynamic)]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   842
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   843
  # add schema
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   844
  fields += ['#\n#---\n#\n']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   845
  schema =  sur.survey_content.schema
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   846
  indent = '},\n#' + ' ' * 9
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   847
  fields += [tpl % ('Schema', schema.replace('},', indent)) + '#\n']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   848
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   849
  return ''.join(fields).replace('\n', '\r\n')
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   850
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   851
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   852
def _get_records(recs, props):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   853
  """Fetch properties from SurveyRecords for CSV export.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   854
  """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   855
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   856
  records = []
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   857
  props = props[1:]
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   858
  for rec in recs:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   859
    values = tuple(getattr(rec, prop, None) for prop in props)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   860
    leading = (rec.user.link_id,)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   861
    records.append(leading + values)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   862
  return records
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   863
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   864
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   865
def to_csv(survey):
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   866
  """CSV exporter.
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   867
  """
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   868
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   869
  # get header and properties
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   870
  header = _get_csv_header(survey)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   871
  leading = ['user', 'created', 'modified']
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   872
  properties = leading + survey.survey_content.orderedProperties()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   873
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   874
  try:
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   875
    first = survey.survey_records.run().next()
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   876
  except StopIteration:
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   877
    # bail out early if survey_records.run() is empty
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   878
    return header, survey.link_id
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   879
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   880
  # generate results list
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2448
diff changeset
   881
  recs = survey.survey_records.run()
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   882
  recs = _get_records(recs, properties)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   883
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   884
  # write results to CSV
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   885
  output = StringIO.StringIO()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   886
  writer = csv.writer(output)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   887
  writer.writerow(properties)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   888
  writer.writerows(recs)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   889
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   890
  return header + output.getvalue(), survey.link_id
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   891
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   892
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   893
view = View()
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   894
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   895
admin = decorators.view(view.admin)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   896
create = decorators.view(view.create)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   897
edit = decorators.view(view.edit)
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   898
export = decorators.view(view.export)
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   899
delete = decorators.view(view.delete)
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   900
json = decorators.view(view.exportSerialized)
2435
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   901
list = decorators.view(view.list)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   902
public = decorators.view(view.public)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   903
pick = decorators.view(view.pick)
dd16e9b3c2d0 Added View for Surveys.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   904
results = decorators.view(view.viewResults)
2475
dfb9249d91b6 Added skeleton for the take view and its template.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2474
diff changeset
   905
take = decorators.view(view.take)