Changeset 404:96b0ab786888


Ignore:
Timestamp:
Mar 5, 2012 3:51:00 AM (16 months ago)
Author:
Igor Yanchenko <yanchenko.igor@…>
Branch:
default
Message:

profile editor refactored

Location:
djangobb_forum
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • djangobb_forum/forms.py

    r392 r404  
    161161 
    162162    def __init__(self, *args, **kwargs): 
    163         self.user_view = kwargs.pop('user_view', None) 
    164         self.user_request = kwargs.pop('user_request', None) 
     163        extra_args = kwargs.pop('extra_args', {}) 
     164        self.user_view = extra_args.pop('user_view', None) 
     165        self.user_request = extra_args.pop('user_request', None) 
    165166        self.profile = kwargs['instance'] 
    166167        super(EssentialsProfileForm, self).__init__(*args, **kwargs) 
     
    191192 
    192193    def __init__(self, *args, **kwargs): 
    193         self.user = kwargs.pop('user', None) 
     194        extra_args = kwargs.pop('extra_args', {}) 
     195        self.user = extra_args.pop('user_view', None) 
    194196        self.profile = kwargs['instance'] 
    195197        super(PersonalProfileForm, self).__init__(*args, **kwargs) 
     
    218220        fields = ['jabber', 'icq', 'msn', 'aim', 'yahoo'] 
    219221 
     222    def __init__(self, *args, **kwargs): 
     223        extra_args = kwargs.pop('extra_args', {}) 
     224        super(MessagingProfileForm, self).__init__(*args, **kwargs) 
     225 
    220226 
    221227class PersonalityProfileForm(forms.ModelForm): 
     
    225231         
    226232    def __init__(self, *args, **kwargs): 
    227         self.markup = kwargs.pop('markup', None) 
     233        extra_args = kwargs.pop('extra_args', {}) 
     234        self.markup = extra_args.pop('markup', None) 
    228235        super(PersonalityProfileForm, self).__init__(*args, **kwargs) 
    229236        self.fields['signature'].widget = forms.Textarea(attrs={'class':'markup', 'rows':'10', 'cols':'75'}) 
     
    242249        fields = ['theme', 'markup', 'show_smilies'] 
    243250 
     251    def __init__(self, *args, **kwargs): 
     252        extra_args = kwargs.pop('extra_args', {}) 
     253        super(DisplayProfileForm, self).__init__(*args, **kwargs) 
     254 
    244255 
    245256class PrivacyProfileForm(forms.ModelForm): 
     
    249260 
    250261    def __init__(self, *args, **kwargs): 
     262        extra_args = kwargs.pop('extra_args', {}) 
    251263        super(PrivacyProfileForm, self).__init__(*args, **kwargs) 
    252264        self.fields['privacy_permission'].widget = forms.RadioSelect(   
     
    259271        model = Profile 
    260272        fields = ['avatar'] 
     273 
     274    def __init__(self, *args, **kwargs): 
     275        extra_args = kwargs.pop('extra_args', {}) 
     276        super(UploadAvatarForm, self).__init__(*args, **kwargs) 
    261277 
    262278 
  • djangobb_forum/templates/djangobb_forum/profile/profile_menu.html

    r371 r404  
    55                        <div class="inbox"> 
    66                                <ul> 
    7                                         <li {%if active_menu == "essentials" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile profile %}?section=essentials">{% trans "Essentials" %}</a></li> 
    8                                         <li {%if active_menu == "personal" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile profile %}?section=personal">{% trans "Personal" %}</a></li> 
    9                                         <li {%if active_menu == "messaging" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile profile %}?section=messaging">{% trans "Messaging" %}</a></li> 
    10                                         <li {%if active_menu == "personality" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile profile %}?section=personality">{% trans "Personality" %}</a></li> 
    11                                         <li {%if active_menu == "display" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile profile %}?section=display">{% trans "Display" %}</a></li> 
    12                                         <li {%if active_menu == "privacy" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile profile %}?section=privacy">{% trans "Privacy" %}</a></li> 
     7                                        <li {%if active_menu == "essentials" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile_essentials profile %}">{% trans "Essentials" %}</a></li> 
     8                                        <li {%if active_menu == "personal" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile_personal profile %}">{% trans "Personal" %}</a></li> 
     9                                        <li {%if active_menu == "messaging" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile_messaging profile %}">{% trans "Messaging" %}</a></li> 
     10                                        <li {%if active_menu == "personality" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile_personality profile %}">{% trans "Personality" %}</a></li> 
     11                                        <li {%if active_menu == "display" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile_display profile %}">{% trans "Display" %}</a></li> 
     12                                        <li {%if active_menu == "privacy" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile_privacy profile %}">{% trans "Privacy" %}</a></li> 
    1313                                        {# if request.user.is_superuser #} 
    1414                                        <!--li {% if active_menu == "admin" %}class="isactive"{% endif %}><a href="{% url djangobb:forum_profile profile %}?section=admin">{% trans "Administration" %}</a></li--> 
  • djangobb_forum/templates/djangobb_forum/profile/profile_personality.html

    r392 r404  
    2525                                                        </div> 
    2626                                                        {% if profile.forum_profile.avatar %} 
    27                                                                 <p class="clearb"><a href="{% url djangobb:forum_profile profile.username %}?action=upload_avatar">{% trans "Upload avatar" %}</a> 
    28                                                                 &nbsp;&nbsp;&nbsp;<a href="{% url djangobb:forum_profile profile.username %}?action=delete_avatar">{% trans "Delete avatar" %}</a></p> 
     27                                                                <p class="clearb"><a href="{% url djangobb:forum_profile_upload_avatar profile.username %}">{% trans "Upload avatar" %}</a> 
     28                                                                &nbsp;&nbsp;&nbsp;<a href="{% url djangobb:forum_profile_delete_avatar profile.username %}">{% trans "Delete avatar" %}</a></p> 
    2929                                                        {% else %} 
    30                                                                 <p class="clearb"><a href="{% url djangobb:forum_profile profile.username %}?action=upload_avatar">{% trans "Upload avatar" %}</a> 
     30                                                                <p class="clearb"><a href="{% url djangobb:forum_profile_upload_avatar profile.username %}">{% trans "Upload avatar" %}</a> 
    3131                                                        {% endif %} 
    3232                                                </div> 
  • djangobb_forum/urls.py

    r376 r404  
    55from djangobb_forum.feeds import LastPosts, LastTopics, LastPostsOnForum,\ 
    66     LastPostsOnCategory, LastPostsOnTopic 
     7from djangobb_forum.forms import EssentialsProfileForm,\ 
     8    PersonalProfileForm, MessagingProfileForm, PersonalityProfileForm,\ 
     9    DisplayProfileForm, PrivacyProfileForm, UploadAvatarForm 
    710      
    811 
     
    1720 
    1821    # User 
    19     url('^user/(?P<username>.*)/$', forum_views.user, name='forum_profile'), 
     22    url('^user/(?P<username>.*)/delete_avatar/$', forum_views.user,{ 
     23        'action': 'delete_avatar' 
     24        }, name='forum_profile_delete_avatar'), 
     25    url('^user/(?P<username>.*)/upload_avatar/$', forum_views.user, { 
     26        'action': 'upload_avatar', 
     27        'form_class': UploadAvatarForm, 
     28        'template': 'djangobb_forum/upload_avatar.html' 
     29        }, name='forum_profile_upload_avatar'), 
     30    url('^user/(?P<username>.*)/privacy/$', forum_views.user, { 
     31        'section': 'privacy', 
     32        'form_class': PrivacyProfileForm, 
     33        'template': 'djangobb_forum/profile/profile_privacy.html' 
     34        }, name='forum_profile_privacy'), 
     35    url('^user/(?P<username>.*)/display/$', forum_views.user, { 
     36        'section': 'display', 
     37        'form_class': DisplayProfileForm, 
     38        'template': 'djangobb_forum/profile/profile_display.html' 
     39        }, name='forum_profile_display'), 
     40    url('^user/(?P<username>.*)/personality/$', forum_views.user, { 
     41        'section': 'personality', 
     42        'form_class': PersonalityProfileForm, 
     43        'template': 'djangobb_forum/profile/profile_personality.html' 
     44        }, name='forum_profile_personality'), 
     45    url('^user/(?P<username>.*)/messaging/$', forum_views.user, { 
     46        'section': 'messaging', 
     47        'form_class': MessagingProfileForm, 
     48        'template': 'djangobb_forum/profile/profile_messaging.html' 
     49        }, name='forum_profile_messaging'), 
     50    url('^user/(?P<username>.*)/personal/$', forum_views.user, { 
     51        'section': 'personal', 
     52        'form_class': PersonalProfileForm, 
     53        'template': 'djangobb_forum/profile/profile_personal.html' 
     54        }, name='forum_profile_personal'), 
     55    url('^user/(?P<username>.*)/essentials/$', forum_views.user, { 
     56        'section': 'essentials', 
     57        'form_class': EssentialsProfileForm, 
     58        'template': 'djangobb_forum/profile/profile_essentials.html' 
     59        }, name='forum_profile_essentials'), 
     60    url('^user/(?P<username>.*)/$', forum_views.user, { 
     61        'section': 'essentials', 
     62        'form_class': EssentialsProfileForm, 
     63        'template': 'djangobb_forum/profile/profile_essentials.html' 
     64        }, name='forum_profile'), 
    2065    url('^users/$', forum_views.users, name='forum_users'), 
    2166 
  • djangobb_forum/views.py

    r399 r404  
    335335 
    336336@transaction.commit_on_success 
    337 def user(request, username): 
     337def user(request, username, section=None, action=None, template=None, form_class=None): 
    338338    user = get_object_or_404(User, username=username) 
    339339    if request.user.is_authenticated() and user == request.user or request.user.is_superuser: 
    340         if 'section' in request.GET: 
    341             section = request.GET['section'] 
    342             profile_url = reverse('djangobb:forum_profile', args=[user.username]) + '?section=' + section   
    343             if section == 'privacy': 
    344                 form = build_form(PrivacyProfileForm, request, instance=user.forum_profile) 
    345                 if request.method == 'POST' and form.is_valid(): 
    346                     form.save() 
    347                     return HttpResponseRedirect(profile_url) 
    348                 return render(request, 'djangobb_forum/profile/profile_privacy.html', {'active_menu':'privacy', 
    349                         'profile': user, 
    350                         'form': form, 
    351                        }) 
    352             elif section == 'display': 
    353                 form = build_form(DisplayProfileForm, request, instance=user.forum_profile) 
    354                 if request.method == 'POST' and form.is_valid(): 
    355                     form.save() 
    356                     return HttpResponseRedirect(profile_url) 
    357                 return render(request, 'djangobb_forum/profile/profile_display.html', {'active_menu':'display', 
    358                         'profile': user, 
    359                         'form': form, 
    360                        }) 
    361             elif section == 'personality': 
    362                 form = build_form(PersonalityProfileForm, request, markup=user.forum_profile.markup, instance=user.forum_profile) 
    363                 if request.method == 'POST' and form.is_valid(): 
    364                     form.save() 
    365                     return HttpResponseRedirect(profile_url) 
    366                 return render(request, 'djangobb_forum/profile/profile_personality.html', {'active_menu':'personality', 
    367                         'profile': user, 
    368                         'form': form, 
     340        if section: 
     341            profile_url = reverse('djangobb:forum_profile_%s' % section, args=[user.username]) 
     342            form = build_form(form_class, request, instance=user.forum_profile, 
     343                    extra_args={ 
     344                        'user_view': user, 
     345                        'user_request': request.user, 
     346                        'markup': user.forum_profile.markup, 
    369347                        }) 
    370             elif section == 'messaging': 
    371                 form = build_form(MessagingProfileForm, request, instance=user.forum_profile) 
    372                 if request.method == 'POST' and form.is_valid(): 
    373                     form.save() 
    374                     return HttpResponseRedirect(profile_url) 
    375                 return render(request, 'djangobb_forum/profile/profile_messaging.html', {'active_menu':'messaging', 
    376                         'profile': user, 
    377                         'form': form, 
    378                        }) 
    379             elif section == 'personal': 
    380                 form = build_form(PersonalProfileForm, request, instance=user.forum_profile, user=user) 
    381                 if request.method == 'POST' and form.is_valid(): 
    382                     form.save() 
    383                     return HttpResponseRedirect(profile_url) 
    384                 return render(request, 'djangobb_forum/profile/profile_personal.html', {'active_menu':'personal', 
    385                         'profile': user, 
    386                         'form': form, 
    387                        }) 
    388             elif section == 'essentials': 
    389                 form = build_form(EssentialsProfileForm, request, instance=user.forum_profile, 
    390                                   user_view=user, user_request=request.user) 
    391                 if request.method == 'POST' and form.is_valid(): 
    392                     profile = form.save() 
     348            if request.method == 'POST' and form.is_valid(): 
     349                form.save() 
     350                #TODO any way to remove next two lines? 
     351                if section=='essentials': 
    393352                    set_language(request, profile.language) 
    394                     return HttpResponseRedirect(profile_url) 
    395  
    396                 return render(request, 'djangobb_forum/profile/profile_essentials.html', {'active_menu':'essentials', 
    397                         'profile': user, 
    398                         'form': form, 
    399                         }) 
    400  
    401         elif 'action' in request.GET: 
    402             action = request.GET['action'] 
     353                return HttpResponseRedirect(profile_url) 
     354            return render(request, template, {'active_menu': section, 
     355                    'profile': user, 
     356                    'form': form, 
     357                   }) 
     358        elif action: 
    403359            if action == 'upload_avatar': 
    404                 form = build_form(UploadAvatarForm, request, instance=user.forum_profile) 
     360                form = build_form(form_class, request, instance=user.forum_profile) 
    405361                if request.method == 'POST' and form.is_valid(): 
    406362                    form.save() 
    407363                    return HttpResponseRedirect(reverse('djangobb:forum_profile', args=[user.username])) 
    408                 return render(request, 'djangobb_forum/upload_avatar.html', {'form': form, 
     364                return render(request, template, {'form': form, 
    409365                        'avatar_width': forum_settings.AVATAR_WIDTH, 
    410366                        'avatar_height': forum_settings.AVATAR_HEIGHT, 
     
    415371                profile.save() 
    416372                return HttpResponseRedirect(reverse('djangobb:forum_profile', args=[user.username])) 
    417  
    418         else: 
    419             form = build_form(EssentialsProfileForm, request, instance=user.forum_profile, 
    420                                   user_view=user, user_request=request.user) 
    421             if request.method == 'POST' and form.is_valid(): 
    422                 profile = form.save() 
    423                 set_language(request, profile.language) 
    424                 return HttpResponseRedirect(reverse('djangobb:forum_profile', args=[user.username])) 
    425             return render(request, 'djangobb_forum/profile/profile_essentials.html', {'active_menu':'essentials', 
    426                     'profile': user, 
    427                     'form': form, 
    428                    }) 
    429         raise Http404 
    430373    else: 
    431374        topic_count = Topic.objects.filter(user__id=user.id).count() 
    432375        if user.forum_profile.post_count < forum_settings.POST_USER_SEARCH and not request.user.is_authenticated(): 
    433376            return HttpResponseRedirect(reverse('user_signin') + '?next=%s' % request.path) 
    434         return render(request, 'djangobb_forum/user.html', {'profile': user, 
     377        return render(request, template, {'profile': user, 
    435378                'topic_count': topic_count, 
    436379               }) 
Note: See TracChangeset for help on using the changeset viewer.