summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-03-04 19:37:32 +0100
committerLeif Johansson <leifj@sunet.se>2011-03-04 19:37:32 +0100
commit7ca77e22ed201c859ac6d3ed7a97624a9c965ea9 (patch)
tree30ae9e735561b2dc64bc98786ecdd95fac53d9f5
parent613ab889ea717c86cda5b61332027581d6eb61e8 (diff)
tagging works now
-rw-r--r--coip/apps/entity/models.py2
-rw-r--r--coip/apps/tag/views.py22
-rw-r--r--coip/urls.py4
-rw-r--r--site-media/js/tag-it.js16
-rw-r--r--templates/apps/name/acls.html3
-rw-r--r--templates/apps/name/name.html24
-rw-r--r--templates/apps/tag/add.html34
-rw-r--r--templates/apps/tag/modify.html23
-rw-r--r--templates/base.html2
9 files changed, 71 insertions, 59 deletions
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<id>[0-9]+)/remove$', 'coip.apps.link.views.remove'),
# Membership
(r'^membership/(?P<id>[0-9]+)$', 'coip.apps.membership.views.show'),
- # Tag
- (r'^tag/(?P<type>(\S+))/(?P<id>[0-9]+)/add$', 'coip.apps.tag.views.add'),
+ # Tags (eg roles on memberships and invitations)
+ (r'^tag/(?P<type>(\S+))/(?P<id>[0-9]+)/modify$', 'coip.apps.tag.views.modify'),
# JSON Tree
(r'^ctree.json$', 'coip.apps.name.views.ctree'),
(r'^ctree/(?P<id>[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 = "<li class=\"tagit-choice\">\n";
el += value + "\n";
el += "<a class=\"close\">x</a>\n";
- el += "<input type=\"hidden\" style=\"display:none;\" value=\""+value+"\" name=\"item[tags][]\">\n";
+ el += "<input type=\"hidden\" style=\"display:none;\" value=\""+value+"\" name=\""+name_prefix+"[]\">\n";
el += "</li>\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 @@
<div class="ilist button">
<ul>
<li><a href="/name/{{name.id}}/acl/0/add">Add Permission</a></li>
+ {% if name %}
+ <li style="float: right;"><input type="button" onClick="document.location='{{name.url}}'" value="Cancel"/></li>
+ {% endif %}
</ul>
</div>
{% 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 @@
<div id="m{{m.id}}" class="{{m.status}}">
<h3 class="listheader">{{m.user|lastidentifier}}</h3>
<div>
- <div>{{m.user|userdisplay}} ({{m.user|lastidentifier}}) became a member of {{name.shortname}} {{m.timecreated|datehumanize}}.</div>
- <div class="rlist">
+ <div>
+ {{m.user|userdisplay}} ({{m.user|lastidentifier}}) became a member of {{name.shortname}} {{m.timecreated|datehumanize}}
+ and has the following role{{m.tags|pluralize}}:
+ <ul>
+ {% for tag in m.tags %}
+ <li>{{ tag|escape }}</li>
+ {% endfor %}
+ </ul>
+ </div>
+ <div class="rlist button">
<ul>
- {% if user == m.user %}
- <b>Role{{ m.tags|pluralize }} in this group</b><br>
- {% for tag in m.tags %}<ul>{{ tag|escape }}</ul>{% endfor %}
- <li class="button"><a href="/name/{{name.id}}/leave/{{m.user.username}}">Leave Group</a></li>
- <li class="button"><a href="/tag/membership/{{m.id}}/add">Add role</a></li>
- {% else %}
- {% if render.kick %}
- <li class="button"><a href="/name/{{name.id}}/leave/{{m.user.username}}">Remove from Group</a></li>
+ {% if render.edit %}
+ <li><a href="/tag/membership/{{m.id}}/modify">Modify Roles</a></li>
{% endif %}
+ {% if render.kick %}
+ <li><a href="/name/{{name.id}}/leave/{{m.user.username}}">{% if m.user == user %}Leave{% else %}Remove from{% endif %} Group</a></li>
{% endif %}
</ul>
</div>
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 %}
-<script>
- $(document).ready(function(){
- $("#taglist").tagit({
- existingTags: [{% for t in tagobj.tags %}'{{t}}',{% endfor%}],
- namePrefix: 'tags'
- });
- });
-</script>
-{% endblock %}
-
-{% block content %}
- <h1>Add role to {{ type|escape }} {{ name }}</h1>
- <div class="ui-widget ui-widget-content ui-helper-reset ui-corner-all infopanel">
- <h3 class="altheader">Current role{{ tagobj.tags|pluralize }} in this group</h3>
- {% for tag in tagobj.tags %}<b>{{ tag|escape }} </b>{% endfor %}
- <h3>Add</h3>
- <div class="altcontent">
- <form method="POST" action="">{% csrf_token %}
- <div style="margin-top: 20px;">
- <ul id="taglist"></ul>
- </div>
- <br/>
- <div class="button">
- <input type="submit" value="Save Changes" />
- <input type="button" onClick="history.go(-1)" value="Cancel"/>
- </div>
- </form>
- </div>
- </div>
-
-
-{% 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 %}
+ <div>
+ <h1>Modify {{tagtype|escape}} on {{type|escape}} {{name.short|escape}}</h1>
+ <form method="POST" class="bbq ui-helper-reset ui-widget ui-widget-content ui-corner-all formpadding">
+ <div style="margin-top: 20px;">
+ <ul id="taglist"></ul>
+ </div>
+ <div class="ilist button" style="padding-bottom: 10px;" >
+ <ul>
+ <li><input type="submit" value="Save Changes" /></li>
+ <li style="float: right;"><input type="button" onClick="history.go(-1)" value="Cancel"/></li>
+ </ul>
+ </div>
+ </form>
+ </div>
+{% 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 @@
<link type="text/css" href="/site-media/css/flick/jquery-ui-1.8.10.custom.css" rel="stylesheet" />
<!-- link type="text/css" href="/site-media/css/jquery.jnotify.css" rel="stylesheet" />
<link type="text/css" href="/site-media/css/jquery.tooltip.css" rel="stylesheet" />
- <link type="text/css" href="/site-media/css/jquery.tagInput.css" rel="stylesheet" />
<link type="text/css" href="/site-media/css/jquery.multiselect2side.css" rel="stylesheet" /-->
<link type="text/css" href="/site-media/css/jquery.ui.autocomplete.custom.css" rel="stylesheet" />
<link type="text/css" href="/site-media/css/jquery.wysiwyg.css" rel="stylesheet" />
@@ -17,7 +16,6 @@
<!-- script type="text/javascript" src="/site-media/js/jquery.jnotify.js"></script>
<script type="text/javascript" src="/site-media/js/jquery.cookie.js"></script>
<script type="text/javascript" src="/site-media/js/jquery.timers.js"></script -->
- <!-- script type="text/javascript" src="/site-media/js/jquery.tagInput.js"></script-->
<!-- script type="text/javascript" src="/site-media/js/jquery.multiselect2side.js"></script -->
<script type="text/javascript" src="/site-media/js/jquery.jstree.js"></script>
<script type="text/javascript" src="/site-media/js/jquery.wysiwyg.js"></script>