1 from forum.modules import ui, get_modules_script
 
   2 from django.utils.translation import ugettext as _
 
   3 from django.utils.encoding import smart_unicode
 
   4 from django.core.urlresolvers import reverse
 
   5 from django.template.defaultfilters import slugify
 
   7 from forum.models import User
 
   8 from forum.templatetags.extra_tags import get_score_badge
 
   9 from forum.utils.html import cleanup_urls
 
  10 from forum import settings
 
  14     from django.template import get_templatetags_modules
 
  15     modules_template_tags = get_modules_script('templatetags')
 
  16     django_template_tags = get_templatetags_modules()
 
  18     for m in modules_template_tags:
 
  19         django_template_tags.append(m.__name__)
 
  23 ui.register(ui.HEADER_LINKS,
 
  24             ui.Link(_('faq'), ui.Url('faq'), weight=400, name='FAQ'),
 
  25             ui.Link(_('about'), ui.Url('about'), weight=300, name='ABOUT'),
 
  28 #                    visibility=ui.Visibility.ANONYMOUS,
 
  30 #                    url=lambda u, c: reverse('auth_signin'),
 
  31 #                    weight=200, name='LOGIN'),
 
  33                     visibility=ui.Visibility.AUTHENTICATED,
 
  35                     url=lambda u, c: reverse('logout'),
 
  36                     weight=200, name='LOGOUT'),
 
  38                     visibility=ui.Visibility.AUTHENTICATED,
 
  39                     text=lambda u, c: smart_unicode(u.username),
 
  40                     url=lambda u, c: u.get_profile_url(),
 
  41                     post_code=lambda u, c: get_score_badge(u),
 
  42                     weight=100, name='ACCOUNT'),
 
  45                     visibility=ui.Visibility.SUPERUSER,
 
  46                     text=_('administration'),
 
  47                     url=lambda u, c: reverse('admin_index'),
 
  48                     weight=0, name='ADMINISTRATION')
 
  52 class SupportLink(ui.Link):
 
  53     def can_render(self, context):
 
  54         return bool(settings.SUPPORT_URL)
 
  57 ui.register(ui.FOOTER_LINKS,
 
  60                     url=lambda u, c: settings.CONTACT_URL and settings.CONTACT_URL or "%s?next=%s" % (reverse('feedback'), cleanup_urls( c['request'].path)),
 
  62             SupportLink(_('support'), settings.SUPPORT_URL, attrs={'target': '_blank'}, weight=300),
 
  63             ui.Link(_('privacy'), ui.Url('privacy'), weight=200),
 
  64             ui.Link(_('faq'), ui.Url('faq'), weight=100),
 
  65             ui.Link(_('about'), ui.Url('about'), weight=0),
 
  68 class ModerationMenuGroup(ui.AjaxMenuGroup):
 
  69     def can_render(self, context):
 
  70         return context['user'] != context['viewer'] and super(ModerationMenuGroup, self).can_render(context)
 
  72 class SuperUserSwitchMenuItem(ui.UserMenuItem):
 
  73     def can_render(self, context):
 
  74         return context['viewer'].is_siteowner or not context['user'].is_superuser
 
  76 ui.register(ui.USER_MENU,
 
  78                 label=_("edit profile"),
 
  79                 url=lambda u, c: reverse('edit_user', kwargs={
 
  81                     'slug' : slugify(c['user'].username)
 
  83                 span_attrs={'class': 'user-edit'},
 
  88                 label=_("authentication settings"),
 
  89                 url=lambda u, c: reverse('user_authsettings', kwargs={'id': c['user'].id}),
 
  90                 span_attrs={'class': 'user-auth'},
 
  95                 label=_("email notification settings"),
 
  96                 url=lambda u, c: User.objects.get(id=int(c['user'].id)).get_user_subscriptions_url(),
 
  97                 span_attrs={'class': 'user-subscriptions'},
 
 102                 label=_("other preferences"),
 
 103                 url=lambda u, c: reverse('user_preferences', kwargs={'id': c['user'].id, 'slug': slugify(c['user'].username)}),
 
 107             ModerationMenuGroup(_("Moderation tools"), items=(
 
 109                     label=lambda u, c: c['user'].is_suspended() and _("withdraw suspension") or _("suspend this user"),
 
 110                     url=lambda u, c: reverse('user_suspend', kwargs={'id': c['user'].id}),
 
 111                     a_attrs=lambda u, c: {'class': c['user'].is_suspended() and 'ajax-command confirm' or 'ajax-command withprompt'},
 
 112                     render_to=lambda u: not u.is_superuser,
 
 116                     label=lambda u, c: _("give/take karma"),
 
 117                     url=lambda u, c: reverse('user_award_points', kwargs={'id': c['user'].id}),
 
 118                     a_attrs=lambda u, c: {'id': 'award-rep-points', 'class': 'ajax-command withprompt'},
 
 119                     span_attrs={'class': 'user-award_rep'},
 
 120                     render_to=lambda u: not u.is_suspended(),
 
 124                     label=lambda u, c: c['user'].is_staff and _("remove moderator status") or _("grant moderator status"),
 
 125                     url=lambda u, c: reverse('user_powers', kwargs={'id': c['user'].id, 'action':c['user'].is_staff and 'remove' or 'grant', 'status': 'staff'}),
 
 126                     a_attrs=lambda u, c: {'class': 'ajax-command confirm'},
 
 127                     span_attrs={'class': 'user-moderator'},
 
 130                 SuperUserSwitchMenuItem(
 
 131                     label=lambda u, c: c['user'].is_superuser and _("remove super user status") or _("grant super user status"),
 
 132                     url=lambda u, c: reverse('user_powers', kwargs={'id': c['user'].id, 'action':c['user'].is_superuser and 'remove' or 'grant', 'status': 'super'}),
 
 133                     a_attrs=lambda u, c: {'class': 'ajax-command confirm'},
 
 134                     span_attrs={'class': 'user-superuser'},
 
 137             ), visibility=ui.Visibility.SUPERUSER, weight=500, name='MOD_TOOLS')