From 7ca77e22ed201c859ac6d3ed7a97624a9c965ea9 Mon Sep 17 00:00:00 2001 From: Leif Johansson Date: Fri, 4 Mar 2011 19:37:32 +0100 Subject: tagging works now --- coip/apps/entity/models.py | 2 +- coip/apps/tag/views.py | 22 ++++++++++++++-------- coip/urls.py | 4 ++-- site-media/js/tag-it.js | 16 ++++++++++++++-- templates/apps/name/acls.html | 3 +++ templates/apps/name/name.html | 24 ++++++++++++++---------- templates/apps/tag/add.html | 34 ---------------------------------- templates/apps/tag/modify.html | 23 +++++++++++++++++++++++ templates/base.html | 2 -- 9 files changed, 71 insertions(+), 59 deletions(-) delete mode 100644 templates/apps/tag/add.html create mode 100644 templates/apps/tag/modify.html diff --git a/coip/apps/entity/models.py b/coip/apps/entity/models.py index 7cafa24..abb8e09 100644 --- a/coip/apps/entity/models.py +++ b/coip/apps/entity/models.py @@ -17,7 +17,7 @@ class Entity(models.Model): entityId = CharField(max_length=1024,unique=True,editable=False) display_name = CharField(max_length=1024,blank=True,null=True) - type = SmallIntegerField(blank=False,editable=False,choices=((IDP,"Identity Provider"),(SP,"Entity Provider"))) + type = SmallIntegerField(blank=False,editable=False,choices=((IDP,"Identity Provider"),(SP,"Service Provider"))) timecreated = models.DateTimeField(auto_now_add=True) lastupdated = models.DateTimeField(auto_now=True) diff --git a/coip/apps/tag/views.py b/coip/apps/tag/views.py index a08d696..6cee91d 100644 --- a/coip/apps/tag/views.py +++ b/coip/apps/tag/views.py @@ -11,16 +11,22 @@ import logging from django.shortcuts import get_object_or_404 from django.contrib.auth.models import User from coip.apps.membership.models import Membership -from forms import * from tagging.models import Tag -def add(request, type, id): +def modify(request, type, id): if type == "membership": tagobj = get_object_or_404(Membership, pk=id) - else: return HttpResponseNotFound() + name = tagobj.name + tagtype = "roles" + else: + return HttpResponseNotFound() + + if not name.has_permission(request.user,'w'): + return render403("You do not have permission to modify roles on members of %s" % (name)) + if request.method == 'POST': - if tagobj.user == request.user: - for tag in request.POST.getlist('item[tags][]'): - Tag.objects.add_tag(tagobj, tag) - return HttpResponseRedirect(request.META["HTTP_REFERER"]) - return respond_to(request,{'text/html': 'apps/tag/add.html'},{'tagobj': tagobj, 'type': type, 'name': tagobj.name}) \ No newline at end of file + to_tags = request.POST.getlist('tags[]') + Tag.objects.update_tags(tagobj,' '.join(to_tags)) + return HttpResponseRedirect(name.url()) + + return respond_to(request,{'text/html': 'apps/tag/modify.html'},{'tagobj': tagobj, 'tagtype': tagtype, 'type': type, 'name': tagobj.name}) \ No newline at end of file diff --git a/coip/urls.py b/coip/urls.py index 2b30391..6df5442 100644 --- a/coip/urls.py +++ b/coip/urls.py @@ -55,8 +55,8 @@ urlpatterns = patterns('', (r'^link/(?P[0-9]+)/remove$', 'coip.apps.link.views.remove'), # Membership (r'^membership/(?P[0-9]+)$', 'coip.apps.membership.views.show'), - # Tag - (r'^tag/(?P(\S+))/(?P[0-9]+)/add$', 'coip.apps.tag.views.add'), + # Tags (eg roles on memberships and invitations) + (r'^tag/(?P(\S+))/(?P[0-9]+)/modify$', 'coip.apps.tag.views.modify'), # JSON Tree (r'^ctree.json$', 'coip.apps.name.views.ctree'), (r'^ctree/(?P[0-9]+).json$', 'coip.apps.name.views.ctree'), diff --git a/site-media/js/tag-it.js b/site-media/js/tag-it.js index 040cef4..9930a05 100644 --- a/site-media/js/tag-it.js +++ b/site-media/js/tag-it.js @@ -1,5 +1,10 @@ (function($) { + /** Available options are: + * availableTags (Array) -- Used as tag suggestions + * existingTags (Array) *optional -- Used to prefill the tag selector with tags + * namePrefix (String) *optional -- Used as input name attribute, default to "item[tags]" + */ $.fn.tagit = function(options) { var el = this; @@ -17,6 +22,12 @@ el.html (html_input_field); tag_input = el.children(".tagit-new").children(".tagit-input"); + + if (typeof options.existingTags != 'undefined' && typeof options.existingTags == 'object') { + for(var i in options.existingTags) { + create_choice(options.existingTags[i]); + } + } $(this).click(function(e){ if (e.target.tagName == 'A') { @@ -48,7 +59,7 @@ if (typed != "") { if (is_new (typed)) { - create_choice (typed); + create_choice(typed); } // Cleaning the input. tag_input.val(""); @@ -81,11 +92,12 @@ return is_new; } function create_choice (value){ + name_prefix = (typeof(options.namePrefix) == 'undefined') ? 'item[tags]' : options.namePrefix; var el = ""; el = "
  • \n"; el += value + "\n"; el += "x\n"; - el += "\n"; + el += "\n"; el += "
  • \n"; var li_search_tags = this.tag_input.parent(); $(el).insertBefore (li_search_tags); diff --git a/templates/apps/name/acls.html b/templates/apps/name/acls.html index 7fe8250..a514b91 100644 --- a/templates/apps/name/acls.html +++ b/templates/apps/name/acls.html @@ -27,6 +27,9 @@
    {% endblock %} \ No newline at end of file diff --git a/templates/apps/name/name.html b/templates/apps/name/name.html index e00a887..01de064 100644 --- a/templates/apps/name/name.html +++ b/templates/apps/name/name.html @@ -59,18 +59,22 @@

    {{m.user|lastidentifier}}

    -
    {{m.user|userdisplay}} ({{m.user|lastidentifier}}) became a member of {{name.shortname}} {{m.timecreated|datehumanize}}.
    -
    +
    + {{m.user|userdisplay}} ({{m.user|lastidentifier}}) became a member of {{name.shortname}} {{m.timecreated|datehumanize}} + and has the following role{{m.tags|pluralize}}: +
      + {% for tag in m.tags %} +
    • {{ tag|escape }}
    • + {% endfor %} +
    +
    +
    diff --git a/templates/apps/tag/add.html b/templates/apps/tag/add.html deleted file mode 100644 index 1325929..0000000 --- a/templates/apps/tag/add.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "tree.html" %} -{% block js %} - -{% endblock %} - -{% block content %} -

    Add role to {{ type|escape }} {{ name }}

    -
    -

    Current role{{ tagobj.tags|pluralize }} in this group

    - {% for tag in tagobj.tags %}{{ tag|escape }} {% endfor %} -

    Add

    -
    -
    {% csrf_token %} -
    -
      -
      -
      -
      - - -
      -
      -
      -
      - - -{% endblock %} \ No newline at end of file diff --git a/templates/apps/tag/modify.html b/templates/apps/tag/modify.html new file mode 100644 index 0000000..8218889 --- /dev/null +++ b/templates/apps/tag/modify.html @@ -0,0 +1,23 @@ +{% extends "tree.html" %} +{% block widgets %} + $("#taglist").tagit({ + existingTags: [{% for t in tagobj.tags %}'{{t}}',{% endfor %}], + namePrefix: 'tags' + }); +{% endblock %} +{% block content %} +
      +

      Modify {{tagtype|escape}} on {{type|escape}} {{name.short|escape}}

      +
      +
      +
        +
        +
        +
          +
        • +
        • +
        +
        +
        +
        +{% endblock %} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index fddbc95..bb59dda 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,7 +4,6 @@ @@ -17,7 +16,6 @@ - -- cgit v1.1