app/soc/views/models/user_self.py
changeset 1634 85bbf50038b8
parent 1584 d8ba8c917f37
child 1647 8bbe06730867
equal deleted inserted replaced
1633:6b65707f4248 1634:85bbf50038b8
    27 import datetime
    27 import datetime
    28 
    28 
    29 from google.appengine.api import users
    29 from google.appengine.api import users
    30 
    30 
    31 from django import forms
    31 from django import forms
    32 from django import http
       
    33 from django.utils.encoding import force_unicode
    32 from django.utils.encoding import force_unicode
    34 from django.utils.safestring import mark_safe
    33 from django.utils.safestring import mark_safe
    35 from django.utils.translation import ugettext
    34 from django.utils.translation import ugettext
    36 
    35 
    37 from soc.logic import cleaning
    36 from soc.logic import cleaning
    40 from soc.logic.models.user import logic as user_logic
    39 from soc.logic.models.user import logic as user_logic
    41 from soc.logic.models.site import logic as site_logic
    40 from soc.logic.models.site import logic as site_logic
    42 from soc.views import helper
    41 from soc.views import helper
    43 from soc.views.helper import access
    42 from soc.views.helper import access
    44 from soc.views.helper import decorators
    43 from soc.views.helper import decorators
    45 from soc.views.helper import dynaform
       
    46 from soc.views.helper import redirects
    44 from soc.views.helper import redirects
    47 from soc.views.helper import widgets
    45 from soc.views.helper import widgets
    48 from soc.views.models import base
    46 from soc.views.models import base
    49 from soc.views.models import user as user_view
       
    50 from soc.views.models import role as role_view
    47 from soc.views.models import role as role_view
    51 
       
    52 import soc.models.user
       
    53 
    48 
    54 
    49 
    55 class View(base.View):
    50 class View(base.View):
    56   """Views for User own profiles.
    51   """Views for User own profiles.
    57   """
    52   """
   106         }
   101         }
   107 
   102 
   108     new_params['sidebar_heading'] = 'User (self)'
   103     new_params['sidebar_heading'] = 'User (self)'
   109     new_params['sidebar'] = [
   104     new_params['sidebar'] = [
   110         (users.create_login_url("/"), 'Sign In', 'signIn'),
   105         (users.create_login_url("/"), 'Sign In', 'signIn'),
   111         ('/' + new_params['url_name'] + '/create_profile', 'Create Profile', 'create_profile'),
   106         ('/' + new_params['url_name'] + '/create_profile', 
   112         ('/' + new_params['url_name'] + '/edit_profile', 'Edit Profile', 'edit_profile'),
   107             'Create Profile', 'create_profile'),
       
   108         ('/' + new_params['url_name'] + '/edit_profile', 
       
   109             'Edit Profile', 'edit_profile'),
   113         ('/' + new_params['url_name'] + '/roles', 'Roles', 'roles'),
   110         ('/' + new_params['url_name'] + '/roles', 'Roles', 'roles'),
   114         ('/' + new_params['url_name'] + '/requests', 'Requests', 'requests'),
   111         ('/' + new_params['url_name'] + '/requests', 'Requests', 'requests'),
   115         ]
   112         ]
   116 
   113 
   117     patterns = []
   114     patterns = []
   153 
   150 
   154     # set the link_id to the current user's link_id
   151     # set the link_id to the current user's link_id
   155     user_entity = user_logic.getForCurrentAccount()
   152     user_entity = user_logic.getForCurrentAccount()
   156     link_id = user_entity.link_id
   153     link_id = user_entity.link_id
   157 
   154 
   158     return self.edit(request, access_type,
   155     return self.edit(request, access_type, page_name=page_name, 
   159          page_name=page_name, params=params, seed=seed, link_id=link_id, **kwargs)
   156         params=params, seed=seed, link_id=link_id, **kwargs)
   160 
   157 
   161   def editGet(self, request, entity, context, seed, params=None):
   158   def editGet(self, request, entity, context, seed, params=None):
   162     """Overwrite so we can add the contents of the ToS.
   159     """Overwrite so we can add the contents of the ToS.
   163     For params see base.View.editGet().
   160     For params see base.View.editGet().
   164     """
   161     """
   166     s_logic = model_logic.site.logic
   163     s_logic = model_logic.site.logic
   167     site_tos = s_logic.getToS(s_logic.getSingleton())
   164     site_tos = s_logic.getToS(s_logic.getSingleton())
   168     if site_tos:
   165     if site_tos:
   169       context['tos_contents'] = site_tos.content
   166       context['tos_contents'] = site_tos.content
   170 
   167 
   171     return super(View, self).editGet(request, entity, context, seed, params=params)
   168     return super(View, self).editGet(request, entity, context, 
       
   169         seed, params=params)
   172 
   170 
   173   def _editGet(self, request, entity, form):
   171   def _editGet(self, request, entity, form):
   174     """Sets the content of the agreed_to_tos_on field and replaces.
   172     """Sets the content of the agreed_to_tos_on field and replaces.
   175 
   173 
   176     Also replaces the agreed_to_tos field with a hidden field when the ToS has been signed.
   174     Also replaces the agreed_to_tos field with a hidden field when the ToS has been signed.
   179 
   177 
   180     if entity.agreed_to_tos:
   178     if entity.agreed_to_tos:
   181       form.fields['agreed_to_tos_on'].initial = entity.agreed_to_tos_on
   179       form.fields['agreed_to_tos_on'].initial = entity.agreed_to_tos_on
   182       # replace the 'agreed_to_tos' field with a hidden field so 
   180       # replace the 'agreed_to_tos' field with a hidden field so 
   183       # that the form checks still pass
   181       # that the form checks still pass
   184       form.fields['agreed_to_tos'] = forms.fields.BooleanField(widget=forms.HiddenInput,
   182       form.fields['agreed_to_tos'] = forms.fields.BooleanField(
   185       initial=entity.agreed_to_tos, required=True)
   183           widget=forms.HiddenInput, initial=entity.agreed_to_tos, required=True)
   186 
   184 
   187   def editPost(self, request, entity, context, params=None):
   185   def editPost(self, request, entity, context, params=None):
   188     """Overwrite so we can add the contents of the ToS.
   186     """Overwrite so we can add the contents of the ToS.
   189     For params see base.View.editPost().
   187     For params see base.View.editPost().
   190     """
   188     """
   244 
   242 
   245     contents = []
   243     contents = []
   246 
   244 
   247     i = 0
   245     i = 0
   248 
   246 
   249     for name, view in sorted(role_view.ROLE_VIEWS.iteritems()):
   247     for name, loop_view in sorted(role_view.ROLE_VIEWS.iteritems()):
   250       list_params = view.getParams().copy()
   248       list_params = loop_view.getParams().copy()
   251       list_params['list_action'] = (redirects.getEditRedirect, list_params)
   249       list_params['list_action'] = (redirects.getEditRedirect, list_params)
   252       list_params['list_description'] = self.DEF_ROLE_LIST_MSG_FMT % list_params
   250       list_params['list_description'] = self.DEF_ROLE_LIST_MSG_FMT % list_params
   253 
   251 
   254       list = helper.lists.getListContent(request, list_params, filter, i, True)
   252       list = helper.lists.getListContent(request, list_params, filter, i, True)
   255 
   253 
   278 
   276 
   279     notifications = model_logic.notification.logic.getForFields(filter)
   277     notifications = model_logic.notification.logic.getForFields(filter)
   280     count = len(list(notifications))
   278     count = len(list(notifications))
   281 
   279 
   282     if count > 0:
   280     if count > 0:
   283       link_title = '<span class="unread">%s (%d)</span>' % (force_unicode(link_title), count)
   281       link_title = '<span class="unread">%s (%d)</span>' % (
       
   282           force_unicode(link_title), count)
   284       link_title = mark_safe(link_title)
   283       link_title = mark_safe(link_title)
   285 
   284 
   286     items = [('/' + 'notification/list', link_title, 'notification')]
   285     items = [('/' + 'notification/list', link_title, 'notification')]
   287     if user:
   286     if user:
   288       items += [(redirects.getCreateDocumentRedirect(user, 'user'),
   287       items += [(redirects.getCreateDocumentRedirect(user, 'user'),