app/soc/views/site/user/profile.py
author Pawel Solyga <Pawel.Solyga@gmail.com>
Fri, 07 Nov 2008 22:24:01 +0000
changeset 448 075360be6743
parent 445 31927f21970d
child 481 94834a1e6c01
permissions -rw-r--r--
Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing). Patch by: Pawel Solyga
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     2
#
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     3
# Copyright 2008 the Melange authors.
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     4
#
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     8
#
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    10
#
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    15
# limitations under the License.
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    16
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    17
"""Developer views for editing and examining User profiles.
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    18
"""
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    19
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    20
__authors__ = [
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    21
  '"Todd Larsen" <tlarsen@google.com>',
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    22
  ]
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    23
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    24
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    25
from google.appengine.api import users
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    26
324
05e21c089be6 Add missing import in soc/views/site/sponsor/list.py which caused exception when app was deployed and first site you visited was "List Site Sponsors". Update files according to recent django update and django backwards incompatibility (for example newforms is changed to forms).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 321
diff changeset
    27
from django import forms
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    28
from django import http
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    29
from django.utils.translation import ugettext_lazy
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    30
309
7190b224c701 Made the existing code use the new soc.logic.models
Sverre Rabbelier <srabbelier@gmail.com>
parents: 305
diff changeset
    31
from soc.logic import models
316
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 311
diff changeset
    32
from soc.logic import out_of_band
249
325fb70c61a9 Replace common module with validate module. Move validation function from feed module to validate module and remove feed.py. Correct any usage of validation functions from common and feed modules into validate module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 245
diff changeset
    33
from soc.logic import validate
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    34
from soc.logic.site import id_user
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    35
from soc.views import simple
268
af1d7f48b361 Move helpers/list.py to helper/lists.py to avoid conflict with built-in type
Todd Larsen <tlarsen@google.com>
parents: 267
diff changeset
    36
from soc.views import helper
303
4f1bb54ddae5 Moved soc/logic/helper/access to soc/views/helper/access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 299
diff changeset
    37
from soc.views.helper import access
365
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
    38
from soc.views.helper import decorators
316
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 311
diff changeset
    39
from soc.views.user import profile
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 311
diff changeset
    40
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 311
diff changeset
    41
import soc.logic
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 311
diff changeset
    42
import soc.models.user
274
56e1c1721299 Move helpers/forms_helpers.py to helper/forms.py.
Todd Larsen <tlarsen@google.com>
parents: 272
diff changeset
    43
import soc.views.helper.forms
268
af1d7f48b361 Move helpers/list.py to helper/lists.py to avoid conflict with built-in type
Todd Larsen <tlarsen@google.com>
parents: 267
diff changeset
    44
import soc.views.helper.lists
269
0f1acc4c3e1e Move helpers/request.py to helper/requests.py to avoid conflict with common
Todd Larsen <tlarsen@google.com>
parents: 268
diff changeset
    45
import soc.views.helper.requests
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 269
diff changeset
    46
import soc.views.helper.responses
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    47
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    48
408
7cd6bdfbf95c Inherit from BaseForm in all forms instead of from DbModelForm. This change doesn't include changes to templates and usage of as_table everywhere (work in progress).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 389
diff changeset
    49
class LookupForm(helper.forms.BaseForm):
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    50
  """Django form displayed for a Developer to look up a User.
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    51
  
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    52
  This form is manually specified, instead of using
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    53
    model = soc.models.user.User
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    54
  in the Meta class, because the form behavior is unusual and normally
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    55
  required Properties of the User model need to sometimes be omitted.
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    56
  
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    57
  Also, this form only permits entry and editing  of some of the User entity
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    58
  Properties, not all of them.
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    59
  """
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    60
  id = forms.EmailField(required=False,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    61
      label=soc.models.user.User.id.verbose_name,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    62
      help_text=soc.models.user.User.id.help_text)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    63
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    64
  link_name = forms.CharField(required=False,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    65
      label=soc.models.user.User.link_name.verbose_name,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
    66
      help_text=soc.models.user.User.link_name.help_text)
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    67
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    68
  class Meta:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    69
    model = None
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    70
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    71
  def clean_link_name(self):
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    72
    link_name = self.cleaned_data.get('link_name')
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    73
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    74
    if not link_name:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    75
      # link name not supplied (which is OK), so do not try to validate it
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    76
      return None
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    77
249
325fb70c61a9 Replace common module with validate module. Move validation function from feed module to validate module and remove feed.py. Correct any usage of validation functions from common and feed modules into validate module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 245
diff changeset
    78
    if not validate.isLinkNameFormatValid(link_name):
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    79
      raise forms.ValidationError('This link name is in wrong format.')
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    80
    
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    81
    return link_name
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    82
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    83
  def clean_id(self):
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    84
    email = self.cleaned_data.get('id')
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    85
    
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    86
    if not email:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    87
      # email not supplied (which is OK), so do not try to convert it
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    88
      return None
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    89
  
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    90
    try:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    91
      return users.User(email=email)
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    92
    except users.UserNotFoundError:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    93
      raise forms.ValidationError('Account not found.')
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    94
    
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    95
445
31927f21970d Major site restructuring, also deleting of many unused or obsolete documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 435
diff changeset
    96
DEF_SITE_USER_PROFILE_LOOKUP_TMPL = 'soc/user/lookup.html'
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    97
365
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
    98
@decorators.view
358
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
    99
def lookup(request, page=None, template=DEF_SITE_USER_PROFILE_LOOKUP_TMPL):
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   100
  """View for a Developer to look up a User Model entity.
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   101
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   102
  Args:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   103
    request: the standard django request object
358
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
   104
    page: a soc.logic.site.page.Page object which is abstraction that combines 
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
   105
      a Django view with sidebar menu info
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   106
    template: the "sibling" template (or a search list of such templates)
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   107
      from which to construct the public.html template name (or names)
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   108
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   109
  Returns:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   110
    A subclass of django.http.HttpResponse which either contains the form to
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   111
    be filled out, or a redirect to the correct view in the interface.
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   112
  """
294
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   113
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   114
  try:
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   115
    access.checkIsDeveloper(request)
303
4f1bb54ddae5 Moved soc/logic/helper/access to soc/views/helper/access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 299
diff changeset
   116
  except  soc.views.out_of_band.AccessViolationResponse, alt_response:
294
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   117
    return alt_response.response()
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   118
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   119
  # create default template context for use with any templates
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 269
diff changeset
   120
  context = helper.responses.getUniversalContext(request)
374
9363b9dc2983 Add the Page object to the context of each view. Update templates to make
Todd Larsen <tlarsen@google.com>
parents: 365
diff changeset
   121
  context['page'] = page
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   122
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   123
  user = None  # assume that no User entity will be found
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   124
  form = None  # assume blank form needs to be displayed
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   125
  lookup_message = ugettext_lazy('Enter information to look up a User.')
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   126
  email_error = None  # assume no email look-up errors
325
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   127
  context['lookup_link'] = None
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   128
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   129
  if request.method == 'POST':
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   130
    form = LookupForm(request.POST)
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   131
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   132
    if form.is_valid():
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   133
      form_id = form.cleaned_data.get('id')
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   134
      
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   135
      if form_id:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   136
        # email provided, so attempt to look up user by email
448
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   137
        user = models.user.logic.getForFields({'id': form_id}, unique=True)
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   138
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   139
        if user:
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   140
          lookup_message = ugettext_lazy('User found by email.')
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   141
        else:
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   142
          email_error = ugettext_lazy('User with that email not found.')
268
af1d7f48b361 Move helpers/list.py to helper/lists.py to avoid conflict with built-in type
Todd Larsen <tlarsen@google.com>
parents: 267
diff changeset
   143
          range_width = helper.lists.getPreferredListPagination()
229
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   144
          nearest_user_range_start = id_user.findNearestUsersOffset(
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   145
              range_width, id=form_id)
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   146
            
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   147
          if nearest_user_range_start is not None:            
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   148
            context['lookup_link'] = './list?offset=%s&limit=%s' % (
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   149
                nearest_user_range_start, range_width)
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   150
      if not user:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   151
        # user not found yet, so see if link name was provided
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   152
        link_name = form.cleaned_data.get('link_name')
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   153
        
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   154
        if link_name:
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   155
          # link name provided, so try to look up by link name 
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   156
          user = id_user.getUserFromLinkName(link_name)
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   157
        
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   158
          if user:
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   159
            lookup_message = ugettext_lazy('User found by link name.')
325
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   160
            # clear previous error, since User was found
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   161
            email_error = None
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   162
            # clear previous lookup_link, since User was found, the lookup_link
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   163
            # is not needed to display.
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   164
            context['lookup_link'] = None
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   165
          else:
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   166
            context['link_name_error'] = ugettext_lazy(
229
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   167
                'User with that link name not found.')
325
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   168
            if context['lookup_link'] is None:
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   169
              range_width = helper.lists.getPreferredListPagination()
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   170
              nearest_user_range_start = id_user.findNearestUsersOffset(
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   171
                  range_width, link_name=link_name)
229
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   172
            
325
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   173
              if nearest_user_range_start is not None:
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   174
                context['lookup_link'] = './list?offset=%s&limit=%s' % (
1469eff8f59e Fix some defects for lookup user view. More information about the patch can be found under the link below.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 324
diff changeset
   175
                    nearest_user_range_start, range_width)
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   176
    # else: form was not valid
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   177
  # else:  # method == 'GET'
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   178
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   179
  if user:
215
d020c95b17b1 Clean up too long lines in profile.py. Add ReadOnlyInput widget to custom_widgets module, it can be used to display read-only form fields. Display read-only "Id" field in LookUp view if user has been found and in User Edit Developer view.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 210
diff changeset
   180
    # User entity found, so populate form with existing User information
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   181
    # context['found_user'] = user
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   182
    form = LookupForm(initial={'id': user.id.email(),
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   183
                               'link_name': user.link_name})
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   184
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   185
    if request.path.endswith('lookup'):
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   186
      # convert /lookup path into /profile/link_name path
269
0f1acc4c3e1e Move helpers/request.py to helper/requests.py to avoid conflict with common
Todd Larsen <tlarsen@google.com>
parents: 268
diff changeset
   187
      context['edit_link'] = helper.requests.replaceSuffix(
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   188
          request.path, 'lookup', 'profile/%s' % user.link_name)
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   189
    # else: URL is not one that was expected, so do not display edit link
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   190
  elif not form:
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   191
    # no pre-populated form was constructed, so show the empty look-up form
134
1f64d7a4d82d Fixed wrong user variable in lookup.html template for edit link (was user should be found_user).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 132
diff changeset
   192
    form = LookupForm()
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   193
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   194
  context.update({'form': form,
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   195
                  'found_user': user,
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   196
                  'email_error': email_error,
132
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   197
                  'lookup_message': lookup_message})
15d89c284106 Add a /site/user/lookup view that provides Developers with a form to look up
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
   198
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 269
diff changeset
   199
  return helper.responses.respond(request, template, context)
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   200
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   201
408
7cd6bdfbf95c Inherit from BaseForm in all forms instead of from DbModelForm. This change doesn't include changes to templates and usage of as_table everywhere (work in progress).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 389
diff changeset
   202
class EditForm(helper.forms.BaseForm):
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   203
  """Django form displayed when Developer edits a User.
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   204
  
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   205
  This form is manually specified, instead of using
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   206
    model = soc.models.user.User
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   207
  in the Meta class, because the form behavior is unusual and normally
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   208
  required Properties of the User model need to sometimes be omitted.
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   209
  """
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   210
  id = forms.EmailField(
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   211
      label=soc.models.user.User.id.verbose_name,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   212
      help_text=soc.models.user.User.id.help_text)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   213
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   214
  link_name = forms.CharField(
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   215
      label=soc.models.user.User.link_name.verbose_name,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   216
      help_text=soc.models.user.User.link_name.help_text)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   217
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   218
  nick_name = forms.CharField(
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   219
      label=soc.models.user.User.nick_name.verbose_name)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   220
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   221
  is_developer = forms.BooleanField(required=False,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   222
      label=soc.models.user.User.is_developer.verbose_name,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   223
      help_text=soc.models.user.User.is_developer.help_text)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   224
184
7c0b42aecd9b Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 179
diff changeset
   225
  key_name = forms.CharField(widget=forms.HiddenInput)
7c0b42aecd9b Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 179
diff changeset
   226
  
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   227
  class Meta:
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   228
    model = None
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   229
 
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   230
  def clean_link_name(self):
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   231
    link_name = self.cleaned_data.get('link_name')
249
325fb70c61a9 Replace common module with validate module. Move validation function from feed module to validate module and remove feed.py. Correct any usage of validation functions from common and feed modules into validate module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 245
diff changeset
   232
    if not validate.isLinkNameFormatValid(link_name):
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   233
      raise forms.ValidationError("This link name is in wrong format.")
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   234
305
972d28056d9d Minor style and import fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 303
diff changeset
   235
    key_name = self.data.get('key_name')
309
7190b224c701 Made the existing code use the new soc.logic.models
Sverre Rabbelier <srabbelier@gmail.com>
parents: 305
diff changeset
   236
    user = models.user.logic.getFromKeyName(key_name)
448
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   237
    
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   238
    linkname_user_exist = id_user.getUserFromLinkName(link_name)
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   239
    if (user and user.link_name != link_name) and linkname_user_exist:
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   240
      raise forms.ValidationError("This link name is already in use.")
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   241
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   242
    return link_name
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   243
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   244
  def clean_id(self):
262
52a42831d9d6 Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents: 260
diff changeset
   245
    form_id = users.User(email=self.cleaned_data.get('id'))
52a42831d9d6 Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents: 260
diff changeset
   246
    if not id_user.isIdAvailable(
52a42831d9d6 Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents: 260
diff changeset
   247
        form_id, existing_key_name=self.data.get('key_name')):
52a42831d9d6 Factor out an isIdAvailable() function from EditForm.clean_id() in
Todd Larsen <tlarsen@google.com>
parents: 260
diff changeset
   248
      raise forms.ValidationError("This account is already in use.")
448
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   249
    if models.user.logic.isFormerId(form_id):
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   250
      raise forms.ValidationError("This account is invalid. "
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   251
          "It exists as former id.")
184
7c0b42aecd9b Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 179
diff changeset
   252
    return form_id
7c0b42aecd9b Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 179
diff changeset
   253
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   254
445
31927f21970d Major site restructuring, also deleting of many unused or obsolete documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 435
diff changeset
   255
DEF_SITE_USER_PROFILE_EDIT_TMPL = 'soc/user/edit.html'
179
4882d6c5630d Add custom 404 error message with link to "Create a New User" which is displayed when linkname in User Profile Developer view URL (/site/user/profile/<linkname>) doesn't exist. Add default value (None) to new_suffix parameter of template_helpers replaceSuffix and redirectToChangedSuffix functions.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 171
diff changeset
   256
DEF_CREATE_NEW_USER_MSG = ' You can create a new user by visiting' \
4882d6c5630d Add custom 404 error message with link to "Create a New User" which is displayed when linkname in User Profile Developer view URL (/site/user/profile/<linkname>) doesn't exist. Add default value (None) to new_suffix parameter of template_helpers replaceSuffix and redirectToChangedSuffix functions.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 171
diff changeset
   257
                          ' <a href="/site/user/profile">Create ' \
4882d6c5630d Add custom 404 error message with link to "Create a New User" which is displayed when linkname in User Profile Developer view URL (/site/user/profile/<linkname>) doesn't exist. Add default value (None) to new_suffix parameter of template_helpers replaceSuffix and redirectToChangedSuffix functions.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 171
diff changeset
   258
                          'a New User</a> page.'
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   259
365
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
   260
@decorators.view
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
   261
def edit(request, page=None, link_name=None,
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
   262
         template=DEF_SITE_USER_PROFILE_EDIT_TMPL):
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   263
  """View for a Developer to modify the properties of a User Model entity.
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   264
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   265
  Args:
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   266
    request: the standard django request object
358
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
   267
    page: a soc.logic.site.page.Page object which is abstraction that combines 
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
   268
      a Django view with sidebar menu info
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   269
    link_name: the User's site-unique "link_name" extracted from the URL
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   270
    template: the "sibling" template (or a search list of such templates)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   271
      from which to construct the public.html template name (or names)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   272
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   273
  Returns:
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   274
    A subclass of django.http.HttpResponse which either contains the form to
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   275
    be filled out, or a redirect to the correct view in the interface.
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   276
  """
294
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   277
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   278
  try:
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   279
    access.checkIsDeveloper(request)
303
4f1bb54ddae5 Moved soc/logic/helper/access to soc/views/helper/access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 299
diff changeset
   280
  except  soc.views.out_of_band.AccessViolationResponse, alt_response:
294
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   281
    return alt_response.response()
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   282
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   283
  # create default template context for use with any templates
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 269
diff changeset
   284
  context = helper.responses.getUniversalContext(request)
374
9363b9dc2983 Add the Page object to the context of each view. Update templates to make
Todd Larsen <tlarsen@google.com>
parents: 365
diff changeset
   285
  context['page'] = page
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   286
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   287
  user = None  # assume that no User entity will be found
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   288
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   289
  # try to fetch User entity corresponding to link_name if one exists
331
24edc648ad3f Add deleted in r732 (don't know why) functionality that displays custom Error page when linkname in Developer User Profile url doesn't exist (/site/user/profile/<not_existing_linkname>).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 325
diff changeset
   290
  try:
24edc648ad3f Add deleted in r732 (don't know why) functionality that displays custom Error page when linkname in Developer User Profile url doesn't exist (/site/user/profile/<not_existing_linkname>).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 325
diff changeset
   291
    if link_name:
355
9b3f26057f74 Change name of getUserFromLinkNameOrDie function to getUserFromLinkNameOr404 and apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 332
diff changeset
   292
      user = id_user.getUserFromLinkNameOr404(link_name)
331
24edc648ad3f Add deleted in r732 (don't know why) functionality that displays custom Error page when linkname in Developer User Profile url doesn't exist (/site/user/profile/<not_existing_linkname>).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 325
diff changeset
   293
  except out_of_band.ErrorResponse, error:
24edc648ad3f Add deleted in r732 (don't know why) functionality that displays custom Error page when linkname in Developer User Profile url doesn't exist (/site/user/profile/<not_existing_linkname>).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 325
diff changeset
   294
    # show custom 404 page when link name doesn't exist in Datastore
24edc648ad3f Add deleted in r732 (don't know why) functionality that displays custom Error page when linkname in Developer User Profile url doesn't exist (/site/user/profile/<not_existing_linkname>).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 325
diff changeset
   295
    error.message = error.message + DEF_CREATE_NEW_USER_MSG
361
465e4df617de Make page argument required for errorResponse and requestLogin functions in simple.py and update affected files. Some keyword argument changes to in user/profile.py. All the changes are based on comments to r817.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 358
diff changeset
   296
    return simple.errorResponse(request, page, error, template, context)
331
24edc648ad3f Add deleted in r732 (don't know why) functionality that displays custom Error page when linkname in Developer User Profile url doesn't exist (/site/user/profile/<not_existing_linkname>).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 325
diff changeset
   297
171
b62f1cf5e878 Bug fixes to revision r596. User Account field in Developer User Profile view needs to be an email not a login name. Header title of User Profile Developer view, when form validation failes is now showing correct value ("Modify existing ..." instead of "Create new user ...").
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 170
diff changeset
   298
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   299
  if request.method == 'POST':
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   300
    form = EditForm(request.POST)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   301
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   302
    if form.is_valid():
184
7c0b42aecd9b Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 179
diff changeset
   303
      key_name = form.cleaned_data.get('key_name')
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   304
      new_link_name = form.cleaned_data.get('link_name')
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   305
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   306
      properties = {}
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   307
      properties['id'] = form.cleaned_data.get('id')
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   308
      properties['link_name']  = new_link_name
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   309
      properties['nick_name']  = form.cleaned_data.get('nick_name')
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   310
      properties['is_developer'] = form.cleaned_data.get('is_developer')
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   311
      
309
7190b224c701 Made the existing code use the new soc.logic.models
Sverre Rabbelier <srabbelier@gmail.com>
parents: 305
diff changeset
   312
      user = models.user.logic.updateOrCreateFromKeyName(properties, key_name)
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   313
184
7c0b42aecd9b Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 179
diff changeset
   314
      if not user:
7c0b42aecd9b Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 179
diff changeset
   315
        return http.HttpResponseRedirect('/')
7c0b42aecd9b Add support for changing User id (Google Account email) in User Profile Developer view. Now user profile developer edit view includes hidden key_name field. Fix typo in user/profile.py. Show former user ids in lookup and edit User Profile Developer views.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 179
diff changeset
   316
        
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   317
      # redirect to new /site/user/profile/new_link_name?s=0
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   318
      # (causes 'Profile saved' message to be displayed)
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 269
diff changeset
   319
      return helper.responses.redirectToChangedSuffix(
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   320
          request, link_name, new_link_name,
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   321
          params=profile.SUBMIT_PROFILE_SAVED_PARAMS)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   322
  else: # method == 'GET':
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   323
    # try to fetch User entity corresponding to link name if one exists
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   324
    if link_name:
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   325
      if user:
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   326
        # is 'Profile saved' parameter present, but referrer was not ourself?
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   327
        # (e.g. someone bookmarked the GET that followed the POST submit) 
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   328
        if (request.GET.get(profile.SUBMIT_MSG_PARAM_NAME)
269
0f1acc4c3e1e Move helpers/request.py to helper/requests.py to avoid conflict with common
Todd Larsen <tlarsen@google.com>
parents: 268
diff changeset
   329
            and (not helper.requests.isReferrerSelf(request,
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   330
                                                    suffix=link_name))):
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   331
          # redirect to aggressively remove 'Profile saved' query parameter
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   332
          return http.HttpResponseRedirect(request.path)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   333
    
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   334
        # referrer was us, so select which submit message to display
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   335
        # (may display no message if ?s=0 parameter is not present)
290
2a92b866ed40 Create a submit_buttons block in group edit profile template so that submit buttons can be customized. Replace submit_message usage with new notice block (still work in progress in Lookup User views). Add customized edit profile template for Sponsor with delete button (not used yet, upcoming commit). Add delete Sponsor request handler.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 274
diff changeset
   336
        context['notice'] = (
269
0f1acc4c3e1e Move helpers/request.py to helper/requests.py to avoid conflict with common
Todd Larsen <tlarsen@google.com>
parents: 268
diff changeset
   337
            helper.requests.getSingleIndexedParamValue(
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   338
                request, profile.SUBMIT_MSG_PARAM_NAME,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   339
                values=profile.SUBMIT_MESSAGES))
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   340
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   341
        # populate form with the existing User entity
229
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   342
        form = EditForm(initial={'key_name': user.key().name(),
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   343
            'id': user.id.email(), 'link_name': user.link_name,
215
d020c95b17b1 Clean up too long lines in profile.py. Add ReadOnlyInput widget to custom_widgets module, it can be used to display read-only form fields. Display read-only "Id" field in LookUp view if user has been found and in User Edit Developer view.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 210
diff changeset
   344
            'nick_name': user.nick_name, 'is_developer': user.is_developer})
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   345
      else:
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   346
        if request.GET.get(profile.SUBMIT_MSG_PARAM_NAME):
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   347
          # redirect to aggressively remove 'Profile saved' query parameter
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   348
          return http.HttpResponseRedirect(request.path)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   349
          
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   350
        context['lookup_error'] = ugettext_lazy(
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   351
            'User with that link name not found.')
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 294
diff changeset
   352
        form = EditForm(initial={'link_name': link_name})
170
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   353
    else:  # no link name specified in the URL
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   354
      if request.GET.get(profile.SUBMIT_MSG_PARAM_NAME):
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   355
        # redirect to aggressively remove 'Profile saved' query parameter
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   356
        return http.HttpResponseRedirect(request.path)
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   357
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   358
      # no link name specified, so start with an empty form
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   359
      form = EditForm()
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   360
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   361
  context.update({'form': form,
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   362
                  'existing_user': user})
1fadf6e0348d Add /site/user/profile Developer view for editing arbitrary User entities.
Todd Larsen <tlarsen@google.com>
parents: 141
diff changeset
   363
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 269
diff changeset
   364
  return helper.responses.respond(request, template, context)
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   365
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   366
408
7cd6bdfbf95c Inherit from BaseForm in all forms instead of from DbModelForm. This change doesn't include changes to templates and usage of as_table everywhere (work in progress).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 389
diff changeset
   367
class CreateForm(helper.forms.BaseForm):
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   368
  """Django form displayed when Developer creates a User.
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   369
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   370
  This form is manually specified, instead of using
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   371
    model = soc.models.user.User
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   372
  in the Meta class, because the form behavior is unusual and normally
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   373
  required Properties of the User model need to sometimes be omitted.
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   374
  """
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   375
  id = forms.EmailField(
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   376
      label=soc.models.user.User.id.verbose_name,
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   377
      help_text=soc.models.user.User.id.help_text)
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   378
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   379
  link_name = forms.CharField(
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   380
      label=soc.models.user.User.link_name.verbose_name,
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   381
      help_text=soc.models.user.User.link_name.help_text)
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   382
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   383
  nick_name = forms.CharField(
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   384
      label=soc.models.user.User.nick_name.verbose_name)
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   385
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   386
  is_developer = forms.BooleanField(required=False,
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   387
      label=soc.models.user.User.is_developer.verbose_name,
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   388
      help_text=soc.models.user.User.is_developer.help_text)
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   389
  
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   390
  class Meta:
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   391
    model = None
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   392
  
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   393
  def clean_link_name(self):
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   394
    link_name = self.cleaned_data.get('link_name')
260
8b393bef717a Fix typo in recent validate.py changes (r682).
Todd Larsen <tlarsen@google.com>
parents: 249
diff changeset
   395
    if not validate.isLinkNameFormatValid(link_name):
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   396
      raise forms.ValidationError("This link name is in wrong format.")
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   397
    else:
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   398
      if id_user.getUserFromLinkName(link_name):
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   399
        raise forms.ValidationError("This link name is already in use.")
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   400
    return link_name
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   401
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   402
  def clean_id(self):
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   403
    new_email = self.cleaned_data.get('id')
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   404
    form_id = users.User(email=new_email)
448
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   405
    if models.user.logic.getForFields({'id': form_id}, unique=True):
389
9b873166d7d5 Fix identions, too long lines, unused imports and some other mistakes.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 374
diff changeset
   406
      raise forms.ValidationError("This account is already in use.")
448
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   407
    if models.user.logic.isFormerId(form_id):
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   408
      raise forms.ValidationError("This account is invalid. "
075360be6743 Fix not working former_ids. Add support for "Invalid accounts". Now when id from former_ids tries to create a profile "This account is invalid." error message is displayed. Compare emails in lower cases to prevent changing User email to the same email with different character casing (needs some more testing).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 445
diff changeset
   409
          "It exists as former id.")
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   410
    return form_id
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   411
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   412
445
31927f21970d Major site restructuring, also deleting of many unused or obsolete documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 435
diff changeset
   413
DEF_SITE_CREATE_USER_PROFILE_TMPL = 'soc/user/edit.html'
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   414
365
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
   415
@decorators.view
358
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
   416
def create(request, page=None, template=DEF_SITE_CREATE_USER_PROFILE_TMPL):
229
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 215
diff changeset
   417
  """View for a Developer to create a new User Model entity.
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   418
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   419
  Args:
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   420
    request: the standard django request object
358
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
   421
    page: a soc.logic.site.page.Page object which is abstraction that combines 
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
   422
      a Django view with sidebar menu info
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   423
    template: the "sibling" template (or a search list of such templates)
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   424
      from which to construct the public.html template name (or names)
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   425
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   426
  Returns:
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   427
    A subclass of django.http.HttpResponse which either contains the form to
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   428
    be filled out, or a redirect to the correct view in the interface.
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   429
  """
294
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   430
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   431
  try:
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   432
    access.checkIsDeveloper(request)
303
4f1bb54ddae5 Moved soc/logic/helper/access to soc/views/helper/access
Sverre Rabbelier <srabbelier@gmail.com>
parents: 299
diff changeset
   433
  except  soc.views.out_of_band.AccessViolationResponse, alt_response:
294
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   434
    return alt_response.response()
1fdaab4a6ef2 Refactor existing code to use the new access module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 290
diff changeset
   435
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   436
  # create default template context for use with any templates
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 269
diff changeset
   437
  context = helper.responses.getUniversalContext(request)
374
9363b9dc2983 Add the Page object to the context of each view. Update templates to make
Todd Larsen <tlarsen@google.com>
parents: 365
diff changeset
   438
  context['page'] = page
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   439
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   440
  if request.method == 'POST':
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   441
    form = CreateForm(request.POST)
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   442
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   443
    if form.is_valid():
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   444
      form_id = form.cleaned_data.get('id')
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   445
      link_name = form.cleaned_data.get('link_name')
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   446
305
972d28056d9d Minor style and import fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 303
diff changeset
   447
      properties = {
317
87215136c268 Remove spaces between dict key name and colon. Fix some typos based on comments http://code.google.com/p/soc/source/detail?r=739.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
   448
        'id': form_id,
87215136c268 Remove spaces between dict key name and colon. Fix some typos based on comments http://code.google.com/p/soc/source/detail?r=739.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
   449
        'link_name': link_name,
87215136c268 Remove spaces between dict key name and colon. Fix some typos based on comments http://code.google.com/p/soc/source/detail?r=739.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
   450
        'nick_name': form.cleaned_data.get('nick_name'),
87215136c268 Remove spaces between dict key name and colon. Fix some typos based on comments http://code.google.com/p/soc/source/detail?r=739.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
   451
        'is_developer': form.cleaned_data.get('is_developer'),
305
972d28056d9d Minor style and import fixes
Sverre Rabbelier <srabbelier@gmail.com>
parents: 303
diff changeset
   452
      }
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   453
435
829fe8302a8b Refactor out the abundance of dictionary (un)packing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 408
diff changeset
   454
      key_fields = {'email': form_id.email()}
829fe8302a8b Refactor out the abundance of dictionary (un)packing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 408
diff changeset
   455
      user = models.user.logic.updateOrCreateFromFields(properties,
829fe8302a8b Refactor out the abundance of dictionary (un)packing
Sverre Rabbelier <srabbelier@gmail.com>
parents: 408
diff changeset
   456
                                                        key_fields)
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   457
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   458
      if not user:
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   459
        return http.HttpResponseRedirect('/')
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   460
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 298
diff changeset
   461
      # redirect to new /site/user/profile/new_link_name?s=0
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   462
      # (causes 'Profile saved' message to be displayed)
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 269
diff changeset
   463
      return helper.responses.redirectToChangedSuffix(
445
31927f21970d Major site restructuring, also deleting of many unused or obsolete documents
Sverre Rabbelier <srabbelier@gmail.com>
parents: 435
diff changeset
   464
          request, 'create', 'edit/' + link_name,
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   465
          params=profile.SUBMIT_PROFILE_SAVED_PARAMS)
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   466
  else: # method == 'GET':
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   467
    # no link name specified, so start with an empty form
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   468
    form = CreateForm()
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   469
210
d05444cf4641 Replaced context.update call to simple value assignment in site.user.profile.create view function.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 205
diff changeset
   470
  context['form'] = form
205
4a86df751222 Fixed not working "Create New User" view which was caused by adding key_name into User Edit Developer view. This commit divides edit() view function in soc.views.site.user.profile into edit() and create() request handlers. New create() request handler is used only in "Create New User" view and has specific form validation functions and uses updateOrCreateUserFromId() instead of updateUserForKeyName().
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 190
diff changeset
   471
365
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
   472
  return helper.responses.respond(request, template, context)