def compose(request, recipient=None, form_class=ComposeForm, template_name='messages/compose.html', success_url=None, recipient_filter=None): """ Displays and handles the ``form_class`` form to compose new messages. Required Arguments: None Optional Arguments: ``recipient``: username of a `django.contrib.auth` User, who should receive the message, optionally multiple usernames could be separated by a '+' ``form_class``: the form-class to use ``template_name``: the template to use ``success_url``: where to redirect after successfull submission """ if request.method == "POST": sender = request.user form = form_class(request.POST, recipient_filter=recipient_filter) if form.is_valid(): form.save(sender=request.user) request.user.message_set.create( message=_(u"Message successfully sent.")) if success_url is None: success_url = reverse('messages_inbox') if request.GET.has_key('next'): success_url = request.GET['next'] return HttpResponseRedirect(success_url) else: form = form_class() if recipient is not None: recipients = [u for u in User.objects.filter(username__in=[r.strip() for r in recipient.split('+')])] if recipients and is_mutual(request.user,recipients[0]): form.fields['recipient'].initial = recipients else: raise Http404 return render_to_response(template_name, { 'form': form, }, context_instance=RequestContext(request))
def profile_detail(request, username, public_profile_field=None, template_name='profiles/profile_detail.html', extra_context=None): """ Detail view of a user's profile. If no profile model has been specified in the ``AUTH_PROFILE_MODULE`` setting, ``django.contrib.auth.models.SiteProfileNotAvailable`` will be raised. If the user has not yet created a profile, ``Http404`` will be raised. **Required arguments:** ``username`` The username of the user whose profile is being displayed. **Optional arguments:** ``extra_context`` A dictionary of variables to add to the template context. Any callable object in this dictionary will be called to produce the end result which appears in the context. ``public_profile_field`` The name of a ``BooleanField`` on the profile model; if the value of that field on the user's profile is ``False``, the ``profile`` variable in the template will be ``None``. Use this feature to allow users to mark their profiles as not being publicly viewable. If this argument is not specified, it will be assumed that all users' profiles are publicly viewable. ``template_name`` The name of the template to use for displaying the profile. If not specified, this will default to :template:`profiles/profile_detail.html`. **Context:** ``profile`` The user's profile, or ``None`` if the user's profile is not publicly viewable (see the description of ``public_profile_field`` above). **Template:** ``template_name`` keyword argument or :template:`profiles/profile_detail.html`. """ user = get_object_or_404(User, username=username) try: profile_obj = user.get_profile() except ObjectDoesNotExist: raise Http404 if public_profile_field is not None and \ not getattr(profile_obj, public_profile_field): profile_obj = None if extra_context is None: extra_context = {} context = RequestContext(request) for key, value in extra_context.items(): context[key] = callable(value) and value() or value if request.user.is_authenticated(): visitor = request.user is_friend = friends_utils.is_friend(visitor, user) is_mutual = friends_utils.is_mutual(visitor, user) else: is_friend = False is_mutual = False follower_list = friends_utils.get_follower_set(user) following_list = friends_utils.get_following_set(user) mutual_list = friends_utils.get_mutual_set(user) favorite_projects = projects_utils.get_favorite_projects(user) user_projects = projects_utils.get_user_projects(user.get_profile()) if profile_obj.is_active: return render_to_response(template_name, { 'profile': profile_obj, 'is_friend': is_friend, 'is_mutual': is_mutual, 'follower_list': follower_list, 'following_list': following_list, 'mutual_list': mutual_list, 'favorite_projects': favorite_projects, 'user_projects': user_projects, }, context_instance=context) else: raise Http404