diff --git a/apps/documents/forms.py b/apps/documents/forms.py
index 39404dedc1..1a41729708 100644
--- a/apps/documents/forms.py
+++ b/apps/documents/forms.py
@@ -356,7 +356,7 @@ class MetaDataImageWidget(forms.widgets.Widget):
%(text)s
''' % {
- 'famfam': link.get('famfam', 'link'),
+ 'famfam': link.get('famfam', u'link'),
'text': capfirst(link['text']),
'action': reverse('metadatagroup_view', args=[value['current_document'].pk, value['group'].pk])
})
@@ -365,13 +365,16 @@ class MetaDataImageWidget(forms.widgets.Widget):
output.append(u'
')
for document in value['group_data']:
tags_template = []
+ tag_block_template = u'
%s
'
tag_count = document.tags.count()
if tag_count:
tags_template.append(u'
')
- tags_template.append(u'%(tag_string)s (%(tag_count)s): ' % {
+ tags_template.append(u'
%(tag_string)s: %(tag_count)s
' % {
'tag_string': _(u'Tags'), 'tag_count': tag_count})
- tags_template.append(u', '.join(document.tags.values_list('name', flat=True)))
+ for tag in document.tags.all():
+ tags_template.append(tag_block_template % (tag.tagproperties_set.get().get_color_code(), tag.name))
+
tags_template.append(u'
')
output.append(
diff --git a/apps/documents/locale/es/LC_MESSAGES/django.mo b/apps/documents/locale/es/LC_MESSAGES/django.mo
index 5e6edc37c8..f96508f90c 100644
Binary files a/apps/documents/locale/es/LC_MESSAGES/django.mo and b/apps/documents/locale/es/LC_MESSAGES/django.mo differ
diff --git a/apps/documents/locale/es/LC_MESSAGES/django.po b/apps/documents/locale/es/LC_MESSAGES/django.po
index 6325495d21..8810486df1 100644
--- a/apps/documents/locale/es/LC_MESSAGES/django.po
+++ b/apps/documents/locale/es/LC_MESSAGES/django.po
@@ -2,20 +2,20 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR
, YEAR.
-#
+#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-27 14:35-0400\n"
-"PO-Revision-Date: 2011-04-27 14:43\n"
+"POT-Creation-Date: 2011-04-28 00:37-0400\n"
+"PO-Revision-Date: 2011-04-28 00:17\n"
"Last-Translator: Roberto Rosario \n"
"Language-Team: LANGUAGE \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
"X-Translated-Using: django-rosetta 0.5.6\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -195,11 +195,11 @@ msgstr "Documentos"
msgid "thumbnail"
msgstr "miniatura"
-#: __init__.py:136 views.py:295 views.py:839
+#: __init__.py:136 views.py:295 views.py:852
msgid "metadata"
msgstr "metadatos"
-#: __init__.py:143 __init__.py:149 models.py:62 views.py:76
+#: __init__.py:143 __init__.py:149 models.py:65 views.py:76
msgid "documents"
msgstr "documentos"
@@ -240,7 +240,7 @@ msgstr "Páginas del documento (%s)"
msgid "Staging file"
msgstr "Archivo de ensayo"
-#: forms.py:258 models.py:205
+#: forms.py:258 models.py:208
msgid "required"
msgstr "requerido"
@@ -264,330 +264,350 @@ msgstr "paso 1 de 2: Tipo de documento"
msgid "step 2 of 2: Document metadata"
msgstr "paso 2 de 2: Metadatos de documento"
-#: forms.py:388 views.py:277
+#: forms.py:373
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: forms.py:406 views.py:277
msgid "Pages"
msgstr "Páginas"
-#: forms.py:389
+#: forms.py:407
msgid "Select"
msgstr "Seleccionar"
-#: forms.py:397
+#: forms.py:416
msgid "Click on the image for full size view of the first page."
msgstr "Haga clic en la imagen para ver la primera página en tamaño completo"
-#: models.py:38 models.py:184 models.py:344
+#: models.py:39 models.py:187 models.py:347
msgid "name"
msgstr "nombre"
-#: models.py:47 models.py:203 models.py:220 models.py:248 models.py:343
+#: models.py:48 models.py:206 models.py:223 models.py:251 models.py:346
msgid "document type"
msgstr "tipo de documento"
-#: models.py:48
+#: models.py:49
msgid "file"
msgstr "archivo"
-#: models.py:55
+#: models.py:56
msgid "added"
msgstr "agregado"
-#: models.py:56
+#: models.py:57
msgid "updated"
msgstr "actualizado"
-#: models.py:57
+#: models.py:58
msgid "checksum"
msgstr "suma de comprobación"
-#: models.py:58
+#: models.py:59
msgid "description"
msgstr "descripción"
-#: models.py:61 models.py:235 models.py:262 models.py:433 models.py:447
-#: views.py:370
+#: models.py:64 models.py:238 models.py:265 models.py:436 models.py:450
+#: views.py:383
msgid "document"
msgstr "documento"
-#: models.py:179 models.py:216
+#: models.py:182 models.py:219
#, python-format
msgid " Available functions: %s"
msgstr "Funciones disponibles: %s"
-#: models.py:180
+#: models.py:183
#, python-format
msgid " Available models: %s"
msgstr "Modelos disponibles: %s"
-#: models.py:184
+#: models.py:187
msgid "Do not use python reserved words."
msgstr "No utilice palabras reservadas de Python."
-#: models.py:185
+#: models.py:188
msgid "title"
msgstr "título"
-#: models.py:187
+#: models.py:190
msgid "default"
msgstr "por defecto"
-#: models.py:188
+#: models.py:191
#, python-format
msgid "Enter a string to be evaluated.%s"
msgstr "Introduzca una cadena para ser evaluada.%s"
-#: models.py:190
+#: models.py:193
msgid "lookup"
msgstr "búsqueda"
-#: models.py:191
+#: models.py:194
#, python-format
-msgid "Enter a string to be evaluated. Example: [user.get_full_name() for user in User.objects.all()].%s"
-msgstr "Introduzca una cadena para ser evaluada. Ejemplo: [user.get_full_name () for user in User.objects.all ()].%s"
+msgid ""
+"Enter a string to be evaluated. Example: [user.get_full_name() for user in "
+"User.objects.all()].%s"
+msgstr ""
+"Introduzca una cadena para ser evaluada. Ejemplo: [user.get_full_name () for "
+"user in User.objects.all ()].%s"
-#: models.py:198 models.py:204 models.py:236 models.py:388
+#: models.py:201 models.py:207 models.py:239 models.py:391
msgid "metadata type"
msgstr "tipo de metadatos"
-#: models.py:199
+#: models.py:202
msgid "metadata types"
msgstr "tipos de metadatos"
-#: models.py:212
+#: models.py:215
msgid "document type metadata type connector"
msgstr "conector tipo de documento y tipo de metadatos "
-#: models.py:213
+#: models.py:216
msgid "document type metadata type connectors"
msgstr "conectores de tipos de documentos y tipos de metadatos"
-#: models.py:222
+#: models.py:225
msgid "indexing expression"
msgstr "expresión de indexación"
-#: models.py:223
+#: models.py:226
#, python-format
-msgid "Enter a python string expression to be evaluated. The slash caracter \"/\" acts as a directory delimiter.%s"
-msgstr "Introduzca una expresión de cadena de python para ser evaluada. El caracter barra \"/\" actúa como un delimitador de directorio. %s"
+msgid ""
+"Enter a python string expression to be evaluated. The slash caracter \"/\" "
+"acts as a directory delimiter.%s"
+msgstr ""
+"Introduzca una expresión de cadena de python para ser evaluada. El caracter "
+"barra \"/\" actúa como un delimitador de directorio. %s"
-#: models.py:224 models.py:250 models.py:346 models.py:393
+#: models.py:227 models.py:253 models.py:349 models.py:396
msgid "enabled"
msgstr "habilitado"
-#: models.py:230
+#: models.py:233
msgid "metadata index"
msgstr "índice de metadatos"
-#: models.py:231
+#: models.py:234
msgid "metadata indexes"
msgstr "índices de metadatos"
-#: models.py:237
+#: models.py:240
msgid "metadata value"
msgstr "datos de metadato"
-#: models.py:243 models.py:244 views.py:91
+#: models.py:246 models.py:247 views.py:91
msgid "document metadata"
msgstr "metadatos de documento"
-#: models.py:249
+#: models.py:252
msgid "filename"
msgstr "nombre de archivo"
-#: models.py:257
+#: models.py:260
msgid "document type quick rename filename"
msgstr "nombre de archivo para cambio rápido de nombre para tipo de documento"
-#: models.py:258
+#: models.py:261
msgid "document types quick rename filenames"
-msgstr "nombres de archivos para cambio rápido de nombre para tipo de documentos"
+msgstr ""
+"nombres de archivos para cambio rápido de nombre para tipo de documentos"
-#: models.py:263
+#: models.py:266
msgid "content"
msgstr "contenido"
-#: models.py:264
+#: models.py:267
msgid "page label"
msgstr "etiqueta de la página"
-#: models.py:265
+#: models.py:268
msgid "page number"
msgstr "número de página"
-#: models.py:268
+#: models.py:271
#, python-format
msgid "Page %(page_num)d of %(document)s"
msgstr "Page %(page_num)d de %(document)s "
-#: models.py:273 models.py:407
+#: models.py:276 models.py:410
msgid "document page"
msgstr "página de documento"
-#: models.py:274
+#: models.py:277
msgid "document pages"
msgstr "páginas de documentos"
-#: models.py:343
+#: models.py:346
msgid "If left blank, all document types will be matched."
msgstr "Si deja en blanco, todos los tipos de documentos será igualado."
-#: models.py:345
+#: models.py:348
msgid "label"
msgstr "etiqueta"
-#: models.py:354
+#: models.py:357
msgid "document group"
msgstr "grupo de documentos"
-#: models.py:355
+#: models.py:358
msgid "document groups"
msgstr "grupos de documentos"
-#: models.py:362
+#: models.py:365
msgid "and"
msgstr "y"
-#: models.py:363
+#: models.py:366
msgid "or"
msgstr "o"
-#: models.py:367
+#: models.py:370
msgid "is equal"
msgstr "es igual"
-#: models.py:368
+#: models.py:371
msgid "is equal (case insensitive)"
msgstr "es igual (mayúsculas y minúsculas)"
-#: models.py:369
+#: models.py:372
msgid "contains"
msgstr "contiene"
-#: models.py:370
+#: models.py:373
msgid "contains (case insensitive)"
msgstr "contiene (mayúsculas y minúsculas)"
-#: models.py:371
+#: models.py:374
msgid "is in"
msgstr "está en"
-#: models.py:372
+#: models.py:375
msgid "is greater than"
msgstr "es mayor que"
-#: models.py:373
+#: models.py:376
msgid "is greater than or equal"
msgstr "es mayor o igual"
-#: models.py:374
+#: models.py:377
msgid "is less than"
msgstr "es menor que"
-#: models.py:375
+#: models.py:378
msgid "is less than or equal"
msgstr "es menor o igual"
-#: models.py:376
+#: models.py:379
msgid "starts with"
msgstr "comienza con"
-#: models.py:377
+#: models.py:380
msgid "starts with (case insensitive)"
msgstr "comienza con (mayúsculas y minúsculas)"
-#: models.py:378
+#: models.py:381
msgid "ends with"
msgstr "termina con"
-#: models.py:379
+#: models.py:382
msgid "ends with (case insensitive)"
msgstr "termina con (mayúsculas y minúsculas)"
-#: models.py:380
+#: models.py:383
msgid "is in regular expression"
msgstr "está en la expresion regular"
-#: models.py:381
+#: models.py:384
msgid "is in regular expression (case insensitive)"
msgstr "está en la expresión regular (mayúsculas y minúsculas)"
-#: models.py:386
+#: models.py:389
msgid "metadata group"
msgstr "grupo de metadatos"
-#: models.py:387
+#: models.py:390
msgid "The inclusion is ignored for the first item."
msgstr "La inclusión es ignorada para el primer artículo."
-#: models.py:388
+#: models.py:391
msgid "This represents the metadata of all other documents."
msgstr "Esto representa los metadatos de todos los demás documentos."
-#: models.py:391
+#: models.py:394
msgid "expression"
msgstr "expresión"
-#: models.py:391
-msgid "This expression will be evaluated against the current selected document. The document metadata is available as variables of the same name but with the \"metadata_\" prefix added their name."
-msgstr "Esta expresión se evalúa con respecto al documento actual seleccionado. Los metadatos del documento están disponible como variables del mismo nombre pero con prefijo \"metadata_\" agregado al nombre."
+#: models.py:394
+msgid ""
+"This expression will be evaluated against the current selected document. "
+"The document metadata is available as variables of the same name but with "
+"the \"metadata_\" prefix added their name."
+msgstr ""
+"Esta expresión se evalúa con respecto al documento actual seleccionado. Los "
+"metadatos del documento están disponible como variables del mismo nombre "
+"pero con prefijo \"metadata_\" agregado al nombre."
-#: models.py:392
+#: models.py:395
msgid "negated"
msgstr "negada"
-#: models.py:392
+#: models.py:395
msgid "Inverts the logic of the operator."
msgstr "Invierte la lógica del operador."
-#: models.py:396
+#: models.py:399
msgid "not"
msgstr "not"
-#: models.py:399
+#: models.py:402
msgid "group item"
msgstr "artículo de grupo de documentos"
-#: models.py:400
+#: models.py:403
msgid "group items"
msgstr "artículos de grupos de documentos"
-#: models.py:408 views.py:655
+#: models.py:411 views.py:668
msgid "order"
msgstr "orden"
-#: models.py:409 views.py:656 views.py:696
+#: models.py:412 views.py:669 views.py:709
msgid "transformation"
msgstr "transformación"
-#: models.py:410 views.py:657
+#: models.py:413 views.py:670
msgid "arguments"
msgstr "argumentos"
-#: models.py:410
+#: models.py:413
msgid "Use dictionaries to indentify arguments, example: {'degrees':90}"
-msgstr "Use diccionarios para identificar los argumentos, por ejemplo: {'grados': 90}"
+msgstr ""
+"Use diccionarios para identificar los argumentos, por ejemplo: {'grados': 90}"
-#: models.py:417
+#: models.py:420
msgid "document page transformation"
msgstr "transformación de página de documento"
-#: models.py:418
+#: models.py:421
msgid "document page transformations"
msgstr "transformaciones de páginas de documentos"
-#: models.py:432
+#: models.py:435
msgid "user"
msgstr "usuario"
-#: models.py:434
+#: models.py:437
msgid "accessed"
msgstr "accesado"
-#: models.py:443
+#: models.py:446
msgid "recent document"
msgstr "documento reciente"
-#: models.py:444 views.py:1015
+#: models.py:447 views.py:1041
msgid "recent documents"
msgstr "documentos recientes"
@@ -623,8 +643,12 @@ msgstr "Documentos en almacenamiento: %d"
#: statistics.py:45
#, python-format
-msgid "Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d bytes"
-msgstr "Espacio utilizado en el almacenamiento: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d bytes"
+msgid ""
+"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d "
+"bytes"
+msgstr ""
+"Espacio utilizado en el almacenamiento: %(base_2)s (base 2), %(base_10)s "
+"(base 10), %(bytes)d bytes"
#: statistics.py:54
#, python-format
@@ -714,192 +738,228 @@ msgstr "Suma de comprobación"
msgid "UUID"
msgstr "UUID"
-#: views.py:287 views.py:830
+#: views.py:287 views.py:843
msgid "document properties"
msgstr "propiedades del documento"
-#: views.py:297 views.py:841
+#: views.py:297 views.py:854
msgid "value"
msgstr "valor"
-#: views.py:305 views.py:849
+#: views.py:305 views.py:862
#, python-format
msgid "Document group query error: %s"
msgstr "Drror de consulta de grupo de documentos: %s"
-#: views.py:315 views.py:859
+#: views.py:315 views.py:872
#, python-format
msgid "document groups (%s)"
msgstr "grupo de documentos (%s)"
-#: views.py:328
+#: views.py:328 views.py:888
+msgid "tags"
+msgstr "etiquetas"
+
+#: views.py:331 views.py:891
+msgid "color"
+msgstr "color"
+
+#: views.py:340
msgid "index links"
msgstr "enlaces de índice"
-#: views.py:350 views.py:454 views.py:774
+#: views.py:363 views.py:467 views.py:787
msgid "Must provide at least one document."
msgstr "Debe proveer al menos un documento."
-#: views.py:361
+#: views.py:374
#, python-format
msgid "Document: %s deleted successfully."
msgstr "Documento: %s eliminado con éxito."
-#: views.py:363
+#: views.py:376
#, python-format
msgid "Document: %(document)s delete error: %(error)s"
msgstr "Documento: %(document)s, error de eliminación: %(error)s "
-#: views.py:377
+#: views.py:390
#, python-format
msgid "Are you sure you wish to delete the document: %s?"
msgstr "¿Está seguro que desea eliminar el documento: %s?"
-#: views.py:379
+#: views.py:392
#, python-format
msgid "Are you sure you wish to delete the documents: %s?"
msgstr "¿Está seguro que desea eliminar los documentos: %s?"
-#: views.py:418
+#: views.py:431
#, python-format
msgid "Document %s edited successfully."
msgstr "Documento %s editado con éxito."
-#: views.py:427
+#: views.py:440
msgid "Document filesystem links updated successfully."
msgstr "Enlaces del documento actualizados con éxito."
-#: views.py:451
+#: views.py:464
msgid "All documents must be from the same type."
msgstr "Todos los documentos deben ser del mismo tipo."
-#: views.py:486
+#: views.py:499
#, python-format
msgid "Error deleting filesystem links for document: %(document)s; %(error)s"
-msgstr "Error al eliminar los enlaces del sistema de archivos para el documento: %(document)s; %(error)s "
+msgstr ""
+"Error al eliminar los enlaces del sistema de archivos para el documento: "
+"%(document)s; %(error)s "
-#: views.py:489
+#: views.py:502
#, python-format
msgid "Metadata for document %s edited successfully."
msgstr "Metadatos para documento %s editado con éxito."
-#: views.py:498
+#: views.py:511
#, python-format
msgid "Filesystem links updated successfully for document: %s."
-msgstr "Enlaces del sistema de archivos actualizados con éxito para el documento: %s."
+msgstr ""
+"Enlaces del sistema de archivos actualizados con éxito para el documento: %s."
-#: views.py:500
+#: views.py:513
#, python-format
msgid "Error creating filesystem links for document: %(document)s; %(error)s"
-msgstr "Error al crear vínculos de sistema de archivos para el documento: %(document)s; %(error)s "
+msgstr ""
+"Error al crear vínculos de sistema de archivos para el documento: "
+"%(document)s; %(error)s "
-#: views.py:514
+#: views.py:527
#, python-format
msgid "Edit metadata for document: %s"
msgstr "Editar de metadatos para el documento: %s"
-#: views.py:516
+#: views.py:529
#, python-format
msgid "Edit metadata for documents: %s"
msgstr "Editar metadatos para los documentos: %s"
-#: views.py:538
+#: views.py:551
#, python-format
msgid "Page transformation error: %s"
msgstr "Error de transformación de página: %s"
-#: views.py:599
+#: views.py:612
#, python-format
msgid "Staging file transformation error: %(error)s"
msgstr "Error de transformación de archivo de ensayo: %(error)s "
-#: views.py:628
+#: views.py:641
msgid "Staging file delete successfully."
msgstr "Archivo de ensayo eliminado con éxito."
-#: views.py:652
+#: views.py:665
#, python-format
msgid "transformations for: %s"
msgstr "transformaciones para: %s"
-#: views.py:681
+#: views.py:694
#, python-format
msgid "Create new transformation for page: %(page)s of document: %(document)s"
-msgstr "Crear nueva transformación de la página: %(page)s del documento: %(document)s "
+msgstr ""
+"Crear nueva transformación de la página: %(page)s del documento: "
+"%(document)s "
-#: views.py:697
+#: views.py:710
#, python-format
msgid "Edit transformation \"%(transformation)s\" for: %(document_page)s"
msgstr "Editar transformación \" %(transformation)s\" para: %(document_page)s"
-#: views.py:718 views.py:794
+#: views.py:731 views.py:807
msgid "document transformation"
msgstr "transformación de documento"
-#: views.py:719
+#: views.py:732
#, python-format
-msgid "Are you sure you wish to delete transformation \"%(transformation)s\" for: %(document_page)s"
-msgstr "¿Está seguro que desea eliminar la transformación \"%(transformation)s\" para: %(document_page)s"
+msgid ""
+"Are you sure you wish to delete transformation \"%(transformation)s\" for: "
+"%(document_page)s"
+msgstr ""
+"¿Está seguro que desea eliminar la transformación \"%(transformation)s\" "
+"para: %(document_page)s"
-#: views.py:740 views.py:887
+#: views.py:753 views.py:913
msgid "On large databases this operation may take some time to execute."
-msgstr "En bases de datos de gran tamaño esta operación puede tardar algún tiempo en ejecutarse."
+msgstr ""
+"En bases de datos de gran tamaño esta operación puede tardar algún tiempo en "
+"ejecutarse."
-#: views.py:754
+#: views.py:767
msgid "duplicated documents"
msgstr "documentos duplicados"
-#: views.py:786
+#: views.py:799
#, python-format
-msgid "All the page transformations for document: %s, have been deleted successfully."
-msgstr "Todas las transformaciones de la página de documento: %s, se han eliminado con éxito."
+msgid ""
+"All the page transformations for document: %s, have been deleted "
+"successfully."
+msgstr ""
+"Todas las transformaciones de la página de documento: %s, se han eliminado "
+"con éxito."
-#: views.py:788
+#: views.py:801
#, python-format
-msgid "Error deleting the page transformations for document: %(document)s; %(error)s."
-msgstr "Error al eliminar las transformaciones de página para el documento: %(document)s; %(error)s."
+msgid ""
+"Error deleting the page transformations for document: %(document)s; "
+"%(error)s."
+msgstr ""
+"Error al eliminar las transformaciones de página para el documento: "
+"%(document)s; %(error)s."
-#: views.py:802
+#: views.py:815
#, python-format
-msgid "Are you sure you wish to clear all the page transformations for document: %s?"
-msgstr "¿Está seguro que desea eliminar todas las transformaciones de página del documento: %s?"
+msgid ""
+"Are you sure you wish to clear all the page transformations for document: %s?"
+msgstr ""
+"¿Está seguro que desea eliminar todas las transformaciones de página del "
+"documento: %s?"
-#: views.py:804
+#: views.py:817
#, python-format
-msgid "Are you sure you wish to clear all the page transformations for documents: %s?"
-msgstr "¿Está seguro que desea eliminar las transformaciones de página de los documentos: %s?"
+msgid ""
+"Are you sure you wish to clear all the page transformations for documents: "
+"%s?"
+msgstr ""
+"¿Está seguro que desea eliminar las transformaciones de página de los "
+"documentos: %s?"
-#: views.py:897
+#: views.py:923
msgid "missing documents"
msgstr "documentos perdidos"
-#: views.py:913 views.py:932
+#: views.py:939 views.py:958
#, python-format
msgid "details for: %s"
msgstr "detalles para: %s"
-#: views.py:953
+#: views.py:979
msgid "Document page edited successfully."
msgstr "Página del documento se ha editado correctamente."
-#: views.py:961
+#: views.py:987
#, python-format
msgid "edit: %s"
msgstr "editar: %s"
-#: views.py:972
+#: views.py:998
msgid "There are no more pages in this document"
msgstr "No hay más páginas en este documento"
-#: views.py:985
+#: views.py:1011
msgid "You are already at the first page of this document"
msgstr "Usted ya está en la primera página de este documento"
-#: views.py:1083
+#: views.py:1109
msgid "No action selected."
msgstr "Ninguna acción seleccionada."
-#: views.py:1099
+#: views.py:1125
#, python-format
msgid "documents in group: %(group)s, for document: %(document)s"
msgstr "grupo de documentos: %(group)s, para el documento: %(document)s "
@@ -924,31 +984,45 @@ msgstr "Rotar [degrees]"
#~ msgstr "muestra del documento"
#~ msgid "Show document thumbnail in metadata group list"
-#~ msgstr "Mostrar imagen de muestra del documento en la lista de grupos de metadatos"
+#~ msgstr ""
+#~ "Mostrar imagen de muestra del documento en la lista de grupos de metadatos"
#~ msgid "exists"
#~ msgstr "existe"
#~ msgid "Document: %(document)s was added to the OCR queue: %(queue)s."
-#~ msgstr "Documento: %(document)s ha sido añadido a la cola de reconocimiento óptico de caracteres: %(queue)s."
+#~ msgstr ""
+#~ "Documento: %(document)s ha sido añadido a la cola de reconocimiento "
+#~ "óptico de caracteres: %(queue)s."
-#~ msgid "Not creating metadata indexing, document not found in document storage"
-#~ msgstr "No se creó la indexación de metadatos, el documento no se encuentran en almacenamiento de documentos"
+#~ msgid ""
+#~ "Not creating metadata indexing, document not found in document storage"
+#~ msgstr ""
+#~ "No se creó la indexación de metadatos, el documento no se encuentran en "
+#~ "almacenamiento de documentos"
#~ msgid "Unable to create metadata indexing directory: %s"
#~ msgstr "No se puede crear el directorio de indexación de metadatos: %s"
#~ msgid "Unable to delete metadata indexing symbolic link: %s"
-#~ msgstr "No se puede eliminar el enlace simbólico de indexación de metadatos: %s"
+#~ msgstr ""
+#~ "No se puede eliminar el enlace simbólico de indexación de metadatos: %s"
-#~ msgid "Unable to create symbolic link, filename clash: %(filepath)s; %(exc)s"
-#~ msgstr "No se puede crear un enlace simbólico, choque de nombre de archivo: %(filepath)s; %(exc)s "
+#~ msgid ""
+#~ "Unable to create symbolic link, filename clash: %(filepath)s; %(exc)s"
+#~ msgstr ""
+#~ "No se puede crear un enlace simbólico, choque de nombre de archivo: "
+#~ "%(filepath)s; %(exc)s "
#~ msgid "Unable to create symbolic link: %(filepath)s; %(exc)s"
-#~ msgstr "No se puede crear un enlace simbólico de indexación de metadatos %(filepath)s; %(exc)s"
+#~ msgstr ""
+#~ "No se puede crear un enlace simbólico de indexación de metadatos "
+#~ "%(filepath)s; %(exc)s"
#~ msgid "Maximum rename count reached, not creating symbolic link"
-#~ msgstr "Conteo de cambio de nombre llego al máximo, no se va a crear el enlaces simbólico"
+#~ msgstr ""
+#~ "Conteo de cambio de nombre llego al máximo, no se va a crear el enlaces "
+#~ "simbólico"
#~ msgid "suffix"
#~ msgstr "sufijo"
diff --git a/apps/documents/views.py b/apps/documents/views.py
index 03c73ec269..a574ca343b 100644
--- a/apps/documents/views.py
+++ b/apps/documents/views.py
@@ -289,15 +289,30 @@ def document_view(request, document_id):
'object': document,
},
]
- subtemplates_dict = [
+
+ subtemplates_dict = []
+ if document.tags.count():
+ subtemplates_dict.append(
{
'name': 'generic_list_subtemplate.html',
- 'title': _(u'metadata'),
- 'object_list': document.documentmetadata_set.all(),
- 'extra_columns': [{'name':_(u'value'), 'attribute':'value'}],
+ 'title': _(u'tags'),
+ 'object_list': document.tags.all(),
+ 'extra_columns': [
+ {'name': _(u'color'), 'attribute': lambda x: u'' % x.tagproperties_set.get().get_color_code()}
+ ],
'hide_link': True,
- },
- ]
+ }
+ )
+
+ subtemplates_dict.append(
+ {
+ 'name': 'generic_list_subtemplate.html',
+ 'title': _(u'metadata'),
+ 'object_list': document.documentmetadata_set.all(),
+ 'extra_columns': [{'name': _(u'value'), 'attribute': 'value'}],
+ 'hide_link': True,
+ },
+ )
metadata_groups, errors = document.get_metadata_groups()
if (request.user.is_staff or request.user.is_superuser) and errors:
@@ -333,6 +348,7 @@ def document_view(request, document_id):
return render_to_response('generic_detail.html', {
'form_list': form_list,
'object': document,
+ 'document': document,
'subtemplates_dict': subtemplates_dict,
}, context_instance=RequestContext(request))
@@ -832,8 +848,22 @@ def document_view_simple(request, document_id):
'object': document,
},
]
+
+ subtemplates_dict = []
+ if document.tags.count():
+ subtemplates_dict.append(
+ {
+ 'name': 'generic_list_subtemplate.html',
+ 'title': _(u'tags'),
+ 'object_list': document.tags.all(),
+ 'extra_columns': [
+ {'name': _(u'color'), 'attribute': lambda x: u'' % x.tagproperties_set.get().get_color_code()}
+ ],
+ 'hide_link': True,
+ }
+ )
- subtemplates_dict = [
+ subtemplates_dict.append(
{
'name': 'generic_list_subtemplate.html',
'title': _(u'metadata'),
@@ -841,7 +871,7 @@ def document_view_simple(request, document_id):
'extra_columns': [{'name': _(u'value'), 'attribute': 'value'}],
'hide_link': True,
},
- ]
+ )
metadata_groups, errors = document.get_metadata_groups()
if (request.user.is_staff or request.user.is_superuser) and errors:
@@ -869,16 +899,6 @@ def document_view_simple(request, document_id):
}
)
- subtemplates_dict.append(
- {
- 'name': 'generic_list_subtemplate.html',
- 'title': _(u'tags'),
- 'object_list': document.tags.all(),
- #'extra_columns': [{'name': _(u'value'), 'attribute': 'value'}],
- 'hide_link': True,
- }
- )
-
return render_to_response('generic_detail.html', {
'form_list': form_list,
'object': document,
diff --git a/apps/folders/locale/es/LC_MESSAGES/django.mo b/apps/folders/locale/es/LC_MESSAGES/django.mo
index e465cd2062..dbf6e2fdf9 100644
Binary files a/apps/folders/locale/es/LC_MESSAGES/django.mo and b/apps/folders/locale/es/LC_MESSAGES/django.mo differ
diff --git a/apps/folders/locale/es/LC_MESSAGES/django.po b/apps/folders/locale/es/LC_MESSAGES/django.po
index 5054b8f093..3541d02d7b 100644
--- a/apps/folders/locale/es/LC_MESSAGES/django.po
+++ b/apps/folders/locale/es/LC_MESSAGES/django.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-21 04:25-0400\n"
-"PO-Revision-Date: 2011-04-21 04:29\n"
+"POT-Creation-Date: 2011-04-28 00:38-0400\n"
+"PO-Revision-Date: 2011-04-28 00:38\n"
"Last-Translator: Roberto Rosario \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
@@ -19,31 +19,35 @@ msgstr ""
"X-Translated-Using: django-rosetta 0.5.6\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: __init__.py:10
+#: __init__.py:9
msgid "folder list"
msgstr "lista de carpetas"
-#: __init__.py:11 views.py:49
+#: __init__.py:10 views.py:48
msgid "create folder"
msgstr "crear una carpeta"
-#: __init__.py:12
+#: __init__.py:11
msgid "edit"
msgstr "editar"
-#: __init__.py:13
+#: __init__.py:12
msgid "delete"
msgstr "eliminar"
-#: __init__.py:14
+#: __init__.py:13
msgid "remove"
msgstr "quitar"
-#: __init__.py:23 models.py:31 views.py:25
+#: __init__.py:22 models.py:31 views.py:24
msgid "folders"
msgstr "carpetas"
-#: forms.py:19
+#: forms.py:20
+msgid "Existing folders"
+msgstr "Carpetas existentes"
+
+#: forms.py:22
msgid "New folder"
msgstr "Nueva carpeta"
@@ -59,15 +63,15 @@ msgstr "usuario"
msgid "datetime created"
msgstr "fecha y hora creados"
-#: models.py:30 models.py:35 views.py:104 views.py:138
+#: models.py:30 models.py:35 views.py:103 views.py:137
msgid "folder"
msgstr "carpeta"
-#: models.py:36 views.py:125
+#: models.py:36 views.py:124
msgid "document"
msgstr "documento"
-#: models.py:42 views.py:200
+#: models.py:42 views.py:199
msgid "folder document"
msgstr "documento de carpeta"
@@ -75,95 +79,95 @@ msgstr "documento de carpeta"
msgid "folders documents"
msgstr "documentos de carpeta"
-#: views.py:28
+#: views.py:27
msgid "created"
msgstr "creado"
-#: views.py:29
+#: views.py:28
msgid "documents"
msgstr "documentos"
-#: views.py:41 views.py:155
+#: views.py:40 views.py:154
msgid "Folder created successfully"
msgstr "Carpeta creada con éxito"
-#: views.py:44 views.py:157
+#: views.py:43 views.py:156
#, python-format
msgid "A folder named: %s, already exists."
msgstr "Una carpeta con el nombre: %s, ya existe."
-#: views.py:67
+#: views.py:66
msgid "Folder edited successfully"
msgstr "Carpeta editada con éxito"
-#: views.py:70
+#: views.py:69
#, python-format
msgid "Error editing folder; %s"
msgstr "Error editando carpeta; %s"
-#: views.py:75
+#: views.py:74
#, python-format
msgid "edit folder: %s"
msgstr "editar carpeta: %s"
-#: views.py:96
+#: views.py:95
#, python-format
msgid "Folder: %s deleted successfully."
msgstr "Carpeta: %s eliminada con éxito."
-#: views.py:98
+#: views.py:97
#, python-format
msgid "Folder: %(folder)s delete error: %(error)s"
msgstr "Carpeta: %(folder)s error de eliminación: %(error)s "
-#: views.py:109
+#: views.py:108
#, python-format
msgid "Are you sure you with to delete the folder: %s?"
msgstr "¿Está seguro de que desea eliminar la carpeta: %s?"
-#: views.py:128
+#: views.py:127
msgid "thumbnail"
msgstr "miniatura"
-#: views.py:135
+#: views.py:134
#, python-format
msgid "documents in folder: %s"
msgstr "documentos en la carpeta: %s"
-#: views.py:160
+#: views.py:159
msgid "Must specify a new folder or an existing one."
msgstr "Debe especificar una carpeta nueva o una ya existente."
-#: views.py:165
+#: views.py:164
#, python-format
msgid "Document: %(document)s added to folder: %(folder)s successfully."
msgstr "Documento: %(document)s agregado a la carpeta: %(folder)s exitosamente."
-#: views.py:168
+#: views.py:167
#, python-format
msgid "Document: %(document)s is already in folder: %(folder)s."
msgstr "Documento: %(document)s ya está en la carpeta: %(folder)s."
-#: views.py:182
+#: views.py:181
msgid "Must provide at least one folder document."
msgstr "Debe proveer al menos un documento de carpeta."
-#: views.py:192
+#: views.py:191
#, python-format
msgid "Document: %s removed successfully."
msgstr "Documento: %s removido exitosamente."
-#: views.py:194
+#: views.py:193
#, python-format
msgid "Document: %(document)s delete error: %(error)s"
msgstr "Documento: %(document)s error de remoción: %(error)s "
-#: views.py:206
+#: views.py:205
#, python-format
msgid "Are you sure you wish to remove the document: %s?"
msgstr "¿Está seguro que desea remover el documento: %s?"
-#: views.py:208
+#: views.py:207
#, python-format
msgid "Are you sure you wish to remove the documents: %s?"
msgstr "¿Está seguro que desea eliminar los documentos: %s?"
diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py
index 6b7842aa2d..97188c1ec0 100644
--- a/apps/ocr/__init__.py
+++ b/apps/ocr/__init__.py
@@ -47,7 +47,7 @@ register_multi_item_links(['queue_document_list'], [re_queue_multiple_document,
register_menu([
{'text': _('OCR'), 'view': 'queue_document_list', 'links':[
queue_document_list, node_active_list
- ], 'famfam': 'hourglass', 'position': 4}])
+ ], 'famfam': 'hourglass', 'position': 5}])
try:
diff --git a/apps/tags/__init__.py b/apps/tags/__init__.py
index 0284a1b4ac..c9b9afa995 100644
--- a/apps/tags/__init__.py
+++ b/apps/tags/__init__.py
@@ -7,9 +7,29 @@ from navigation.api import register_sidebar_template
from taggit.models import Tag
-tag_delete = {'text': _('delete'), 'view': 'tag_remove', 'args': ['object.id', 'document.id'], 'famfam': 'tag_blue_delete'}#, 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_DELETE]}}
+PERMISSION_TAG_CREATE = 'tag_create'
+PERMISSION_TAG_ATTACH = 'tag_attach'
+PERMISSION_TAG_DELETE = 'tag_delete'
+register_permissions('tags', [
+ {'name': PERMISSION_TAG_CREATE, 'label': _(u'Can create new tags')},
+ {'name': PERMISSION_TAG_ATTACH, 'label': _(u'Can attach exising tags')},
+ {'name': PERMISSION_TAG_DELETE, 'label': _(u'Can delete tags')},
+])
+
+tag_list = {'text': _('tags'), 'view': 'tag_list', 'famfam': 'tag_blue'}
+tag_delete = {'text': _('delete'), 'view': 'tag_remove', 'args': ['object.id', 'document.id'], 'famfam': 'tag_blue_delete', 'permissions': {'namespace': 'tags', 'permissions': [PERMISSION_TAG_DELETE]}}
register_links(Tag, [tag_delete])
register_sidebar_template(['document_view', 'document_view_simple'], 'tags_sidebar_template.html')
+
+tags_menu = [
+ {
+ 'text': _(u'tags'), 'view': 'tag_list', 'famfam': 'tag_blue', 'position': 4, 'links': [
+ tag_list
+ ]
+ },
+]
+
+#register_menu(tags_menu)
diff --git a/apps/tags/admin.py b/apps/tags/admin.py
new file mode 100644
index 0000000000..bac2c25369
--- /dev/null
+++ b/apps/tags/admin.py
@@ -0,0 +1,11 @@
+from django.contrib import admin
+
+from tags.models import TagProperties
+
+
+#class PermissionAdmin(admin.ModelAdmin):
+# inlines = [PermissionHolderInline]
+# list_display = ('namespace', 'name', 'label')
+# list_display_links = list_display
+
+admin.site.register(TagProperties)
diff --git a/apps/tags/forms.py b/apps/tags/forms.py
index 0a4a01b835..1a7371d90d 100644
--- a/apps/tags/forms.py
+++ b/apps/tags/forms.py
@@ -1,29 +1,12 @@
from django import forms
-from django.utils.translation import ugettext as _
+from django.utils.translation import ugettext_lazy as _
from taggit.models import Tag
-
-#class FolderForm(forms.ModelForm):
-# class Meta:
-# model = Folder
-# fields = ('title',)
+from models import COLOR_CHOICES
-class AddTagForm(forms.ModelForm):
- def __init__(self, *args, **kwargs):
- #user = kwargs.pop('user', None)
- super(AddTagForm, self).__init__(*args, **kwargs)
- #self.fields['title'].required = False
- #self.fields['title'].label = _(u'New folder')
-
- self.fields['existing_tags'] = forms.ModelChoiceField(
- required=False,
- queryset=Tag.objects.all(), #(user=user),
- label=_(u'Existing tags'))
- self.fields['name'].required = False
- self.fields['name'].label = _(u'New tag')
-
- class Meta:
- model = Tag
- fields = ('name',)
+class AddTagForm(forms.Form):
+ new_tag = forms.CharField(required=False, label=_(u'New tag'))
+ color = forms.ChoiceField(choices=COLOR_CHOICES, required=False, label=_(u'Color'))
+ existing_tags = forms.ModelChoiceField(required=False, queryset=Tag.objects.all(), label=_(u'Existing tags'))
diff --git a/apps/tags/locale/es/LC_MESSAGES/django.mo b/apps/tags/locale/es/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..47d45cc0e7
Binary files /dev/null and b/apps/tags/locale/es/LC_MESSAGES/django.mo differ
diff --git a/apps/tags/locale/es/LC_MESSAGES/django.po b/apps/tags/locale/es/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..036487f8ce
--- /dev/null
+++ b/apps/tags/locale/es/LC_MESSAGES/django.po
@@ -0,0 +1,95 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-04-28 00:14-0400\n"
+"PO-Revision-Date: 2011-04-28 00:17\n"
+"Last-Translator: Roberto Rosario \n"
+"Language-Team: LANGUAGE \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: \n"
+"X-Translated-Using: django-rosetta 0.5.6\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: __init__.py:10
+msgid "delete"
+msgstr "eliminar"
+
+#: forms.py:15
+msgid "New tag"
+msgstr "Nueva etiqueta"
+
+#: forms.py:16
+msgid "Color"
+msgstr "Color"
+
+#: forms.py:17
+msgid "Existing tags"
+msgstr "Etiquetas existentes"
+
+#: models.py:14
+msgid "Blue"
+msgstr "Azul"
+
+#: models.py:15
+msgid "Cyan"
+msgstr "Cian"
+
+#: models.py:16
+msgid "Green-Yellow"
+msgstr "Verde-Amarillo"
+
+#: models.py:17
+msgid "Magenta"
+msgstr "Magenta"
+
+#: models.py:18
+msgid "Red"
+msgstr "Rojo"
+
+#: models.py:19
+msgid "Yellow"
+msgstr "Amarillo"
+
+#: models.py:33
+msgid "tag"
+msgstr "etiqueta"
+
+#: models.py:34
+msgid "color"
+msgstr "color"
+
+#: models.py:37
+msgid "tag properties"
+msgstr "propiedades de etiqueta"
+
+#: models.py:38
+msgid "tags properties"
+msgstr "propiedades de etiquetas"
+
+#: views.py:25
+#, python-format
+msgid "Tag \"%s\" removed successfully."
+msgstr "Etiqueta \"%s\" eliminada exitosamente."
+
+#: views.py:52
+#, python-format
+msgid "Document is already tagged as \"%s\""
+msgstr "Documento ya está etiquetado como \"%s\""
+
+#: views.py:61
+#, python-format
+msgid "Tag \"%s\" added successfully."
+msgstr "Etiqueta \"%s\", agregada exitosamente."
+
+#: templatetags/tags_tags.py:17
+msgid "Add tag to document"
+msgstr "Agregar etiqueta al documento"
diff --git a/apps/tags/models.py b/apps/tags/models.py
index 33b9aba3d5..18251e7682 100644
--- a/apps/tags/models.py
+++ b/apps/tags/models.py
@@ -1,5 +1,5 @@
from django.db import models
-from django.utils.translation import ugettext as _
+from django.utils.translation import ugettext_lazy as _
from taggit.models import Tag
@@ -8,21 +8,24 @@ COLOR_BLUE = u'blu'
COLOR_MAGENTA = u'mag'
COLOR_CYAN = u'cya'
COLOR_YELLOW = u'yel'
+COLOR_GREENYELLOW = u'gry'
COLOR_CHOICES = (
- (COLOR_RED, _(u'red')),
- (COLOR_BLUE, _(u'blue')),
-# (COLOR_MAGENTA, _(u'magenta')),
-# (COLOR_CYAN, _(u'cyan')),
- (COLOR_YELLOW, _(u'yellow'))
+ (COLOR_BLUE, _(u'Blue')),
+ (COLOR_CYAN, _(u'Cyan')),
+ (COLOR_GREENYELLOW, _(u'Green-Yellow')),
+ (COLOR_MAGENTA, _(u'Magenta')),
+ (COLOR_RED, _(u'Red')),
+ (COLOR_YELLOW, _(u'Yellow'))
)
COLOR_CODES = (
- (COLOR_RED, u'FF0000'),
- (COLOR_BLUE, u'0000FF'),
-# (COLOR_MAGENTA, u'FF0000'),
-# (COLOR_CYAN, u'FF0000'),
- (COLOR_YELLOW, u'00FFFF')
+ (COLOR_RED, u'red'),
+ (COLOR_BLUE, u'blue'),
+ (COLOR_MAGENTA, u'magenta'),
+ (COLOR_CYAN, u'cyan'),
+ (COLOR_YELLOW, u'yellow'),
+ (COLOR_GREENYELLOW, u'greenyellow '),
)
@@ -35,4 +38,7 @@ class TagProperties(models.Model):
verbose_name_plural = _(u'tags properties')
def __unicode__(self):
- return self.tag
+ return unicode(self.tag)
+
+ def get_color_code(self):
+ return dict(COLOR_CODES)[self.color]
diff --git a/apps/tags/templatetags/tags_tags.py b/apps/tags/templatetags/tags_tags.py
index 9f111d9d8e..630a028508 100644
--- a/apps/tags/templatetags/tags_tags.py
+++ b/apps/tags/templatetags/tags_tags.py
@@ -11,7 +11,7 @@ register = Library()
@register.inclusion_tag('generic_form_subtemplate.html', takes_context=True)
def get_add_tag_to_document_form(context):
context.update({
- 'form': AddTagForm(),#user=context['request'].user),
+ 'form': AddTagForm(),
'request': context['request'],
'form_action': reverse('tag_add', args=[context['document'].pk]),
'title': _('Add tag to document')
diff --git a/apps/tags/urls.py b/apps/tags/urls.py
index d25430cce6..3a7b0dfd30 100644
--- a/apps/tags/urls.py
+++ b/apps/tags/urls.py
@@ -1,17 +1,7 @@
from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('tags.views',
- url(r'^(?P\d+)/remove_from_document/(?P\d+)$', 'tag_remove', (), 'tag_remove'),
- url(r'^add_to_document/(?P\d+)$', 'tag_add', (), 'tag_add'),
-# url(r'^ocr/queue/document/list/$', 'queue_document_list', (), 'queue_document_list'),
-# url(r'^ocr/queue/document/(?P\d+)/delete/$', 'queue_document_delete', (), 'queue_document_delete'),
-# url(r'^ocr/queue/document/multiple/delete/$', 'queue_document_multiple_delete', (), 'queue_document_multiple_delete'),
-# url(r'^ocr/queue/document/(?P\d+)/re-queue/$', 're_queue_document', (), 're_queue_document'),
-# url(r'^ocr/queue/document/multiple/re-queue/$', 're_queue_multiple_document', (), 're_queue_multiple_document'),#
-
-# url(r'^ocr/queue/(?P\d+)/enable/$', 'document_queue_enable', (), 'document_queue_enable'),#
-# url(r'^ocr/queue/(?P\d+)/disable/$', 'document_queue_disable', (), 'document_queue_disable'),
-
-# url(r'^ocr/document/all/clean_up/$', 'all_document_ocr_cleanup', (), 'all_document_ocr_cleanup'),
-# url(r'^ocr/node/active/list/$', 'node_active_list', (), 'node_active_list'),
+ url(r'^list/$', 'tag_list', (), 'tag_list'),
+ url(r'^(?P\d+)/remove_from_document/(?P\d+)/$', 'tag_remove', (), 'tag_remove'),
+ url(r'^add_to_document/(?P\d+)/$', 'tag_add', (), 'tag_add'),
)
diff --git a/apps/tags/views.py b/apps/tags/views.py
index 569f5c5f4c..bd7ac68c5e 100644
--- a/apps/tags/views.py
+++ b/apps/tags/views.py
@@ -11,43 +11,67 @@ from taggit.models import Tag
from documents.models import Document
from tags.forms import AddTagForm
-
+from tags.models import TagProperties
+from tags import PERMISSION_TAG_CREATE, PERMISSION_TAG_ATTACH, \
+ PERMISSION_TAG_DELETE
+
def tag_remove(request, tag_id, document_id):
-# check_permissions(request.user, 'ocr', [PERMISSION_OCR_DOCUMENT])
+ check_permissions(request.user, 'tags', [PERMISSION_TAG_DELETE])
tag = get_object_or_404(Tag, pk=tag_id)
document = get_object_or_404(Document, pk=document_id)
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None)))
tag.delete()
- messages.success(request, _(u'Tag: %s, removed successfully.') % tag)
+ messages.success(request, _(u'Tag "%s" removed successfully.') % tag)
return HttpResponseRedirect(previous)
def tag_add(request, document_id):
-# check_permissions(request.user, 'ocr', [PERMISSION_OCR_DOCUMENT])
-
document = get_object_or_404(Document, pk=document_id)
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None)))
- #document.tags.add(tag)
- #messages.success(request, _(u'Tag: %s, removed successfully.') % tag)
- #tag = get_object_or_404(Tag, pk=tag_id)
-
- #return HttpResponseRedirect(previous)
-
if request.method == 'POST':
previous = request.META.get('HTTP_REFERER', '/')
- form = AddTagForm(request.POST)#, user=request.user)
+ form = AddTagForm(request.POST)
if form.is_valid():
- if form.cleaned_data['existing_tags']:
- tag = form.cleaned_data['existing_tags']
- elif form.cleaned_data['name']:
- tag = form.cleaned_data['name']
+ if form.cleaned_data['new_tag']:
+ check_permissions(request.user, 'tags', [PERMISSION_TAG_CREATE])
+ tag_name = form.cleaned_data['new_tag']
+ if Tag.objects.filter(name=tag_name):
+ is_new = False
+ else:
+ is_new = True
+ elif form.cleaned_data['existing_tags']:
+ check_permissions(request.user, 'tags', [PERMISSION_TAG_ATTACH])
+ tag_name = form.cleaned_data['existing_tags']
+ is_new = False
+ else:
+ messages.error(request, _(u'Must choose either a new tag or an existing one.'))
+ return HttpResponseRedirect(previous)
+
+ if tag_name in document.tags.values_list('name', flat=True):
+ messages.warning(request, _(u'Document is already tagged as "%s"') % tag_name)
+ return HttpResponseRedirect(previous)
- document.tags.add(tag)
-
+ document.tags.add(tag_name)
+
+ if is_new:
+ tag = Tag.objects.get(name=tag_name)
+ TagProperties(tag=tag, color=form.cleaned_data['color']).save()
+
+ messages.success(request, _(u'Tag "%s" added successfully.') % tag_name)
+
return HttpResponseRedirect(previous)
+
+
+def tag_list(request):
+
+ return render_to_response('generic_list.html', {
+ 'object_list': Tag.objects.all(),
+ 'title': _(u'tags'),
+ 'hide_link': True,
+ }, context_instance=RequestContext(request))