enforces maximum tag length with (in)appropriate messaging
authorCaleb Forbes Davis V <caldavis@gmail.com>
Wed, 13 Jul 2011 04:58:25 +0000 (23:58 -0500)
committerCaleb Forbes Davis V <caldavis@gmail.com>
Wed, 13 Jul 2011 05:03:49 +0000 (00:03 -0500)
mediagoblin/edit/views.py
mediagoblin/submit/views.py
mediagoblin/util.py

index 0432024ee970da27590d117b4f9934a96bfc7c2b..df0a0d52b6aa0dc0a62c7f22e625270952448d5d 100644 (file)
@@ -63,7 +63,9 @@ def edit_media(request, media):
                     media['description']))
 
             media['slug'] = request.POST['slug']
-            media['tags'] = convert_to_tag_list(request.POST['tags'])
+
+            # Process the user's folksonomy "tags"
+            media['tags'] = convert_to_tag_list(request)
             media.save()
 
             return redirect(request, "mediagoblin.user_pages.media_home",
index 46ec4cea8700720d4e1b16df5906e9b1b80bdbb2..bda77b1d8a5a3846512c74a1525dd1e95a5058a8 100644 (file)
@@ -60,7 +60,9 @@ def submit_start(request):
             
             entry['media_type'] = u'image' # heh
             entry['uploader'] = request.user['_id']
-            entry['tags'] = convert_to_tag_list(request.POST.get('tags'))
+
+            # Process the user's folksonomy "tags"
+            entry['tags'] = convert_to_tag_list(request)
 
             # Save, just so we can get the entry id for the sake of using
             # it to generate the file path
index 951bdd512f8a70207b7c1542640cb684783eb612..44e642586694d9cae34050633aa48ad74d0151e1 100644 (file)
@@ -372,19 +372,39 @@ def clean_html(html):
 
 TAGS_DELIMITER = u' '
 TAGS_CASE_SENSITIVE = False
+TAGS_MAX_LENGTH = 50
 
-def convert_to_tag_list(tag_string):
+def convert_to_tag_list(request):
     """
-    Filter input from a "tags" field,
+    Filter input from any "tags" field in the session,
 
     Strips trailing, leading, and internal whitespace, and also converts
-    the user input into an array of tags
+    the "tags" text into an array of tags
     """
+    tag_string = request.POST.get('tags')
     taglist = []
     if tag_string:
+
+        # Strip out internal, trailing, and leading whitespace
         stripped_tag_string = u' '.join(tag_string.strip().split())
+
+        # Split the tag string into a list of tags
         for tag in stripped_tag_string.split(TAGS_DELIMITER):
+
+            # Do not permit duplicate tags
             if tag.strip() and tag not in taglist:
+
+                # Enforce maximum tag length
+                if len(tag) > TAGS_MAX_LENGTH:
+                    tag = tag[:TAGS_MAX_LENGTH] + u'...'
+                    messages.add_message(
+                             request, messages.WARNING, \
+                             u'Tag truncated to ' + unicode(TAGS_MAX_LENGTH) + \
+                             u' characters.')
+                    messages.add_message(
+                       request, messages.INFO, \
+                       u'Why the long tag? Seriously.')
+
                 if TAGS_CASE_SENSITIVE:
                     taglist.append(tag.strip())
                 else: