app/soc/views/user/profile.py
author Todd Larsen <tlarsen@google.com>
Fri, 29 Aug 2008 04:24:31 +0000
changeset 124 051afb721c22
parent 118 d2e61a490969
child 131 3db97cf7f2c7
permissions -rw-r--r--
Refactor soc/views/user/profile.py to make use of several of the new views available in soc/views/simple.py. Patch by: Todd Larsen Review by: to-be-reviewed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     2
#
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     3
# Copyright 2008 the Melange authors.
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     4
#
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     8
#
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    10
#
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    16
118
d2e61a490969 Clean up User Model and User profile edit view now that soc.logic.site.id_user
Todd Larsen <tlarsen@google.com>
parents: 99
diff changeset
    17
"""Views for editing and examining User profiles.
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    18
"""
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    19
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    20
__authors__ = [
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    21
  '"Pawel Solyga" <pawel.solyga@gmail.com>',
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    22
  ]
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    23
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    24
import re
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    25
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    26
from google.appengine.api import users
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    27
from django import http
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    28
from django import shortcuts
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    29
from django import newforms as forms
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    30
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    31
from soc.logic import out_of_band
118
d2e61a490969 Clean up User Model and User profile edit view now that soc.logic.site.id_user
Todd Larsen <tlarsen@google.com>
parents: 99
diff changeset
    32
from soc.logic.site import id_user
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    33
from soc.views import simple
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    34
from soc.views.helpers import forms_helpers
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    35
from soc.views.helpers import response_helpers
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    36
from soc.views.helpers import template_helpers
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    37
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    38
import soc.models.user
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    39
118
d2e61a490969 Clean up User Model and User profile edit view now that soc.logic.site.id_user
Todd Larsen <tlarsen@google.com>
parents: 99
diff changeset
    40
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    41
class UserForm(forms_helpers.DbModelForm):
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    42
  """Django form displayed when creating or editing a User.
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    43
  """
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    44
  LINKNAME_PATTERN = r'''(?x)
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    45
      ^
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    46
      [0-9a-z]  # start with ASCII digit or lowercase
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    47
      (
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    48
      [0-9a-z]  # additional ASCII digit or lowercase
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    49
      |         # -OR-
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    50
      _[0-9a-z] # underscore and ASCII digit or lowercase
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    51
      )*        # zero or more of OR group
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    52
      $'''
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    53
  LINKNAME_REGEX = re.compile(LINKNAME_PATTERN)
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    54
  
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    55
  class Meta:
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    56
    """Inner Meta class that defines some behavior for the form.
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    57
    """
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    58
    #: db.Model subclass for which the form will gather information
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    59
    model = soc.models.user.User
99
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 98
diff changeset
    60
    
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    61
    #: list of model fields which will *not* be gathered by the form
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    62
    exclude = ['id']
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    63
  
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    64
  def clean_link_name(self):
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    65
    linkname = self.cleaned_data.get('link_name')
118
d2e61a490969 Clean up User Model and User profile edit view now that soc.logic.site.id_user
Todd Larsen <tlarsen@google.com>
parents: 99
diff changeset
    66
    linkname_user = id_user.getUserFromLinkName(linkname)
d2e61a490969 Clean up User Model and User profile edit view now that soc.logic.site.id_user
Todd Larsen <tlarsen@google.com>
parents: 99
diff changeset
    67
    id = users.get_current_user()
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    68
    # if linkname exist in datastore and doesn't belong to current user
118
d2e61a490969 Clean up User Model and User profile edit view now that soc.logic.site.id_user
Todd Larsen <tlarsen@google.com>
parents: 99
diff changeset
    69
    if linkname_user and (linkname_user.id != id):
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    70
      raise forms.ValidationError("This link name is already in use.")
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    71
    elif not self.LINKNAME_REGEX.match(linkname):
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    72
      raise forms.ValidationError("This link name is in wrong format.")
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    73
    return linkname
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    74
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    75
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    76
DEF_USER_PROFILE_EDIT_TMPL = 'soc/user/profile/edit.html'
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    77
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    78
def edit(request, linkname=None, template=DEF_USER_PROFILE_EDIT_TMPL):
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    79
  """View for a User to modify the properties of a User Model entity.
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    80
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    81
  Args:
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    82
    request: the standard django request object.
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
    83
    linkname: the User's site-unique "linkname" extracted from the URL
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    84
    template: the template path to use for rendering the template.
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    85
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    86
  Returns:
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    87
    A subclass of django.http.HttpResponse which either contains the form to
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    88
    be filled out, or a redirect to the correct view in the interface.
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
    89
  """
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    90
  id = users.get_current_user()
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    91
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    92
  # create default template context for use with any templates
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    93
  context = response_helpers.getUniversalContext(request)
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    94
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    95
  if (not id) and (not linkname):
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    96
    # not logged in, and no link name, so request that the user sign in 
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    97
    return simple.requestLogin(request, template, context,
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    98
        # TODO(tlarsen): /user/profile could be a link to a help page instead
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
    99
        login_message_fmt='To create a new'
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   100
                          ' <a href="/user/profile">User Profile</a>'
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   101
                          ' or modify an existing one, you must first'
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   102
                          ' <a href="%(sign_in)s">sign in</a>.')
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   103
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   104
  if (not id) and linkname:
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   105
    # not logged in, so show read-only public profile for linkname user
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   106
    return simple.public(request, template, linkname, context)
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   107
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   108
  # try to fetch User entity corresponding to linkname if one exists    
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   109
  try:
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   110
    linkname_user = id_user.getUserIfLinkName(linkname)
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   111
  except out_of_band.ErrorResponse, error:
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   112
    # show custom 404 page when linkname doesn't exist in Datastore
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   113
    return simple.errorResponse(request, error, template, context)
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
   114
  
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   115
  # linkname_user will be None here if linkname was already None...
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   116
  if linkname_user and (linkname_user.id != id):
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   117
    # linkname_user exists but is not the currently logged in Google Account,
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   118
    # so show public view for that (other) User entity
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   119
    return simple.public(request, template, linkname, context)
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
   120
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   121
  user = id_user.getUserFromId(id)
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
   122
  
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
   123
  if request.method == 'POST':
83
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
   124
    form = UserForm(request.POST)
3f4f7c540b75 Created response helper respond() function that is used to generate base templates and it's child templates (handles sign in/out links, user name etc).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents:
diff changeset
   125
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
   126
    if form.is_valid():
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
   127
      linkname = form.cleaned_data.get('link_name')
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
   128
      nickname = form.cleaned_data.get("nick_name")
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   129
99
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 98
diff changeset
   130
      if not user:
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   131
        user = soc.models.user.User(id=id, link_name=linkname,
118
d2e61a490969 Clean up User Model and User profile edit view now that soc.logic.site.id_user
Todd Larsen <tlarsen@google.com>
parents: 99
diff changeset
   132
                                    nick_name=nickname)
98
b2b823466a8b User Profile view (without controller yet).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 85
diff changeset
   133
      else:
99
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 98
diff changeset
   134
        user.nick_name = nickname
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 98
diff changeset
   135
        user.link_name = linkname
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 98
diff changeset
   136
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   137
      user.put()
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   138
      # TODO(tlarsen):
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   139
      # if old_linkname:  redirect to new /user/profile/new_linkname
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   140
      #   (how to preserve displaying the "Profile saved" message?)
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   141
      context.update({'submit_message': 'Profile saved.'})
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   142
  else: # request.method == 'GET'
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   143
    if user:
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   144
      # populate form with the existing User entity
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   145
      form = UserForm(instance=user)
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   146
    else:
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   147
      # no User entity exists for this Google Account, so show a blank form
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   148
      form = UserForm()
99
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 98
diff changeset
   149
124
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   150
  context.update({'form': form})
051afb721c22 Refactor soc/views/user/profile.py to make use of several of the new views
Todd Larsen <tlarsen@google.com>
parents: 118
diff changeset
   151
  return response_helpers.respond(request, template, context)