summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/admin.py2
-rw-r--r--chimere/locale/fr/LC_MESSAGES/django.po396
-rw-r--r--chimere/migrations/0032_auto__add_field_subcategory_submission.py227
-rw-r--r--chimere/models.py51
-rw-r--r--chimere/static/chimere/css/styles.css18
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js4
-rw-r--r--chimere/static/chimere/js/textareas.js2
-rw-r--r--chimere/tasks.py7
-rw-r--r--chimere/templates/chimere/blocks/map.html (renamed from chimere/templates/chimere/blocks/map_params.html)10
-rw-r--r--chimere/templates/chimere/blocks/welcome.html4
-rw-r--r--chimere/templates/chimere/detail.html4
-rw-r--r--chimere/templates/chimere/feeds/rss_descr.html4
-rw-r--r--chimere/templates/chimere/main_map.html2
-rw-r--r--chimere/templatetags/chimere_tags.py8
-rw-r--r--chimere/utils.py6
-rw-r--r--chimere/views.py6
16 files changed, 550 insertions, 201 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index 977a9b4..ae6fbc4 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -117,7 +117,7 @@ class MarkerAdmin(admin.ModelAdmin):
exclude = ['submiter_session_key', 'import_key', 'import_version',
'available_date', 'ref_item']
readonly_fields = ['submiter_email', 'submiter_comment', 'import_source',
- 'submiter_name']
+ 'submiter_name', 'ref_item', 'modified_since_import']
form = MarkerAdminForm
inlines = [MultimediaInline, PictureInline]
diff --git a/chimere/locale/fr/LC_MESSAGES/django.po b/chimere/locale/fr/LC_MESSAGES/django.po
index 9a3c975..9973efb 100644
--- a/chimere/locale/fr/LC_MESSAGES/django.po
+++ b/chimere/locale/fr/LC_MESSAGES/django.po
@@ -7,17 +7,17 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-09-05 19:08+0200\n"
+"POT-Creation-Date: 2012-10-02 19:08+0200\n"
"Last-Translator: Étienne Loks <etienne.loks@peacefrogs.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: __init__.py:8 models.py:586
+#: __init__.py:8 models.py:677
msgid "Multimedia files"
msgstr "Fichiers multimedias"
-#: __init__.py:9 models.py:643
+#: __init__.py:9 models.py:733
msgid "Picture files"
msgstr "Fichiers d'image"
@@ -45,31 +45,35 @@ msgstr "Flux RSS"
msgid "Contact us"
msgstr "Nous contacter"
-#: admin.py:62 templates/chimere/feeds/rss.html:69
+#: admin.py:64 templates/chimere/feeds/rss.html:69
msgid "Validate"
msgstr "Valider"
-#: admin.py:73
+#: admin.py:75
msgid "Export to KML"
msgstr "Exporter en KML"
-#: admin.py:87
+#: admin.py:89
msgid "Export to Shapefile"
msgstr "Exporter en Shapefile"
-#: admin.py:173
+#: admin.py:99
+msgid "Export to CSV"
+msgstr "Exporter en CSV"
+
+#: admin.py:182
msgid "Import"
msgstr "Import"
-#: admin.py:179
+#: admin.py:188
msgid "Cancel import"
msgstr "Annuler l'import"
-#: admin.py:185
+#: admin.py:194
msgid "Cancel export"
msgstr "Annuler l'export"
-#: admin.py:193
+#: admin.py:202
msgid "Export to osm"
msgstr "Exporter vers osm"
@@ -106,43 +110,44 @@ msgstr "Courriel (optionnel) "
msgid "Object"
msgstr "Objet"
-#: forms.py:173
+#: forms.py:183
msgid "End date has been set with no start date"
msgstr "Une date de fin a été donnée sans date de début"
-#: forms.py:184
+#: forms.py:194
msgid "This field is mandatory for the selected categories"
msgstr "Ce champ est obligatoire pour les catégories sélectionnées"
-#: forms.py:445
+#: forms.py:441
msgid "File"
msgstr "Fichier"
-#: forms.py:451
+#: forms.py:447
msgid "Bad file format: this must be a GPX or KML file"
msgstr "Mauvais format de fichier : KML et GPX sont supportés"
-#: forms.py:456 models.py:50 models.py:98 models.py:158 models.py:179
-#: models.py:192 models.py:206 models.py:298 models.py:520 models.py:576
-#: models.py:620 models.py:737 models.py:975 models.py:987 models.py:1072
-#: templates/chimere/edit.html:39 templates/chimere/edit_route.html:36
+#: forms.py:452 models.py:50 models.py:98 models.py:158 models.py:179
+#: models.py:192 models.py:206 models.py:324 models.py:611 models.py:667
+#: models.py:710 models.py:826 models.py:1119 models.py:1131 models.py:1216
+#: utils.py:444 templates/chimere/edit.html:39
+#: templates/chimere/edit_route.html:36
#: templates/chimere/blocks/alternate_multimedia.html:39
msgid "Name"
msgstr "Nom"
-#: forms.py:465 models.py:1024
+#: forms.py:461 models.py:1168
msgid "Area"
msgstr "Zone"
-#: forms.py:524
+#: forms.py:520
msgid "Start"
msgstr "Départ"
-#: forms.py:525
+#: forms.py:521
msgid "Finish"
msgstr "Arrivée :"
-#: forms.py:526
+#: forms.py:522
msgid "Speed"
msgstr "Vitesse"
@@ -150,13 +155,13 @@ msgstr "Vitesse"
msgid "Mnemonic"
msgstr "Mnémonique"
-#: models.py:53 models.py:99 models.py:180 models.py:207 models.py:309
-#: models.py:524 models.py:993 models.py:1074 models.py:1110
+#: models.py:53 models.py:99 models.py:180 models.py:207 models.py:335
+#: models.py:615 models.py:1137 models.py:1218 models.py:1259
msgid "Available"
msgstr "Disponible"
-#: models.py:54 models.py:168 models.py:181 models.py:211 models.py:578
-#: models.py:635 models.py:992 models.py:1061 models.py:1073
+#: models.py:54 models.py:168 models.py:181 models.py:215 models.py:669
+#: models.py:725 models.py:1136 models.py:1205 models.py:1217
msgid "Order"
msgstr "Ordre"
@@ -168,15 +173,15 @@ msgstr "Chemin du patron"
msgid "Page"
msgstr "Page"
-#: models.py:100 models.py:367
+#: models.py:100 models.py:401
msgid "Is front page"
msgstr "Est en page principale"
-#: models.py:102 models.py:1083
+#: models.py:102 models.py:1227
msgid "Date"
msgstr "Date"
-#: models.py:104 models.py:577
+#: models.py:104 models.py:668
msgid "Url"
msgstr "Url"
@@ -193,7 +198,7 @@ msgstr "Paramètres"
msgid "TinyUrl"
msgstr "Mini-url"
-#: models.py:162 models.py:169 models.py:209
+#: models.py:162 models.py:169 models.py:213
msgid "Color theme"
msgstr "Thème de couleur"
@@ -209,321 +214,341 @@ msgstr "Couleur"
msgid "Category"
msgstr "Catégorie"
-#: models.py:193 models.py:516 models.py:621 models.py:802
+#: models.py:193 models.py:607 models.py:711 models.py:891
#: templates/chimere/blocks/alternate_multimedia.html:43
msgid "Image"
msgstr "Image"
-#: models.py:195 models.py:623 models.py:804
+#: models.py:195 models.py:713 models.py:893
msgid "Height"
msgstr "Hauteur"
-#: models.py:196 models.py:624 models.py:805
+#: models.py:196 models.py:714 models.py:894
msgid "Width"
msgstr "Largeur"
-#: models.py:200 models.py:208
+#: models.py:200 models.py:210
msgid "Icon"
msgstr "Icône"
-#: models.py:212
+#: models.py:208
+msgid "Available for submission"
+msgstr "Disponible pour soumission"
+
+#: models.py:211
+msgid "Hover icon"
+msgstr "Icône en survol"
+
+#: models.py:216
msgid "Is dated"
msgstr "Est daté"
-#: models.py:213
+#: models.py:217
msgid "Marker"
msgstr "Point d'intérêt"
-#: models.py:214 models.py:798 models.py:813
+#: models.py:218 models.py:887 models.py:902
#: templates/chimere/edit_route.html:27
msgid "Route"
msgstr "Trajet"
-#: models.py:215
+#: models.py:219
msgid "Both"
msgstr "Mixte"
-#: models.py:216
+#: models.py:220
msgid "Item type"
msgstr "Type d'élément"
-#: models.py:221
+#: models.py:226
msgid "Sub-category"
msgstr "Sous-catégorie"
-#: models.py:222
+#: models.py:227
msgid "Sub-categories"
msgstr "Sous-catégories"
-#: models.py:276
+#: models.py:297
msgid "Importer type"
msgstr "Type d'import"
-#: models.py:279 models.py:320
+#: models.py:300 models.py:346
msgid "Source"
msgstr "Source"
-#: models.py:281
+#: models.py:302
msgid "Filter"
msgstr "Filtre"
-#: models.py:284
+#: models.py:304
+msgid "Name by default"
+msgstr "Nom par défaut"
+
+#: models.py:307
msgid "Associated subcategories"
msgstr "Sous-catégories associées"
-#: models.py:285
+#: models.py:308 utils.py:447
msgid "State"
msgstr "État"
-#: models.py:287
+#: models.py:310
msgid "SRID"
msgstr "SRID"
-#: models.py:288
+#: models.py:311
msgid "Zipped file"
msgstr "Fichier zippé"
-#: models.py:291
+#: models.py:314
msgid "Importer"
msgstr "Import"
-#: models.py:300
+#: models.py:326
msgid "Submitter session key"
msgstr "Clé de session du demandeur"
-#: models.py:302
+#: models.py:328
msgid "Submitter name or nickname"
msgstr "Nom ou pseudo du demandeur"
-#: models.py:304
+#: models.py:330
msgid "Submitter email"
msgstr "Courriel du demandeur"
-#: models.py:306
+#: models.py:332
msgid "Submitter comment"
msgstr "Commentaire du demandeur"
-#: models.py:308
+#: models.py:334
msgid "Submited"
msgstr "Soumis"
-#: models.py:310
+#: models.py:336
msgid "Modified"
msgstr "Modifié"
-#: models.py:311
+#: models.py:337
msgid "Disabled"
msgstr "Désactivé"
-#: models.py:312
+#: models.py:338
msgid "Imported"
msgstr "Importé"
-#: models.py:313
+#: models.py:339
msgid "Excluded"
msgstr "Exclu"
-#: models.py:315
+#: models.py:341
msgid "Status"
msgstr "État"
-#: models.py:316
+#: models.py:342
msgid "Import key"
msgstr "Clé d'import"
-#: models.py:318
+#: models.py:344
msgid "Import version"
msgstr "Version de l'import"
-#: models.py:323 templates/chimere/edit.html:56
+#: models.py:348
+msgid "Modified since last import"
+msgstr "Modifié depuis le dernier import"
+
+#: models.py:350
+msgid "Not to be imported inside OSM"
+msgstr "Ne pas importer dans OSM"
+
+#: models.py:353 templates/chimere/edit.html:56
#: templates/chimere/edit_route.html:52
msgid "Start date"
msgstr "Date de début"
-#: models.py:324
+#: models.py:354
msgid "Not mandatory. Set it for dated item such as event. Format YYYY-MM-DD"
msgstr ""
"Optionnel. Précisez ce champ pour les éléments datés comme un événement. "
"Format du champ : AAAA-MM-JJ"
-#: models.py:326 templates/chimere/edit.html:62
+#: models.py:356 templates/chimere/edit.html:62
#: templates/chimere/edit_route.html:58
msgid "End date"
msgstr "Date de fin"
-#: models.py:327
+#: models.py:357
msgid ""
"Not mandatory. Set it only if you have a multi-day event. Format YYYY-MM-DD"
msgstr ""
"Optionnel. Précisez ce champ seulement pour des événements durant plusieurs "
"jours. Format du champ : AAAA-MM-JJ"
-#: models.py:359
+#: models.py:393
msgid "Reference marker"
msgstr "Point d'intérêt de référence"
-#: models.py:360
+#: models.py:394 utils.py:449 utils.py:450
msgid "Localisation"
msgstr "Localisation"
-#: models.py:362
+#: models.py:396
msgid "Available Date"
msgstr "Date de mise en disponibilité"
-#: models.py:366 templates/chimere/edit.html:49
+#: models.py:400 utils.py:448 templates/chimere/edit.html:49
#: templates/chimere/edit_route.html:46
msgid "Description"
msgstr "Description"
-#: models.py:420 models.py:1120
+#: models.py:461 models.py:1269
msgid "Point of interest"
msgstr "Point d'intérêt"
-#: models.py:514
+#: models.py:605
msgid "Audio"
msgstr "Audio"
-#: models.py:515
+#: models.py:606
msgid "Video"
msgstr "Vidéo"
-#: models.py:517
+#: models.py:608
msgid "Other"
msgstr "Autre"
-#: models.py:518
+#: models.py:609
msgid "Media type"
msgstr "Type de media"
-#: models.py:521
+#: models.py:612
msgid "Mime type"
msgstr "Type mime"
-#: models.py:523
+#: models.py:614
msgid "Inside an iframe"
msgstr "À l'intérieur d'un iframe"
-#: models.py:527
+#: models.py:618
msgid "Multimedia type"
msgstr "Type de multimedia"
-#: models.py:528
+#: models.py:619
msgid "Multimedia types"
msgstr "Types de multimedia"
-#: models.py:563
+#: models.py:654
msgid "Extension name"
msgstr "Nom de l'extension"
-#: models.py:565
+#: models.py:656
msgid "Associated multimedia type"
msgstr "Type de multimedia associé"
-#: models.py:569
+#: models.py:660
msgid "Multimedia extension"
msgstr "Extension de fichier multimedia"
-#: models.py:570
+#: models.py:661
msgid "Multimedia extensions"
msgstr "Extensions de fichier multimedia"
-#: models.py:580 models.py:625
+#: models.py:671 models.py:715
msgid "Display inside the description?"
msgstr "Apparaît dans la description ?"
-#: models.py:585
+#: models.py:676
msgid "Multimedia file"
msgstr "Fichier multimedia"
-#: models.py:627
+#: models.py:717
msgid "Thumbnail"
msgstr "Miniature"
-#: models.py:631
+#: models.py:721
msgid "Thumbnail height"
msgstr "Hauteur de la miniature"
-#: models.py:633
+#: models.py:723
msgid "Thumbnail width"
msgstr "Largeur de la miniature"
-#: models.py:642
+#: models.py:732
msgid "Picture file"
msgstr "Fichier d'image"
-#: models.py:738
+#: models.py:827
msgid "Raw file (gpx or kml)"
msgstr "Fichier brut (gpx ou kml)"
-#: models.py:739
+#: models.py:828
msgid "Simplified file"
msgstr "Fichier simplifié"
-#: models.py:741
+#: models.py:830
msgid "KML"
msgstr "KML"
-#: models.py:741
+#: models.py:830
msgid "GPX"
msgstr "GPX"
-#: models.py:746
+#: models.py:835
msgid "Route file"
msgstr "Fichier de trajet"
-#: models.py:747
+#: models.py:836
msgid "Route files"
msgstr "Fichiers de trajet"
-#: models.py:797
+#: models.py:886
msgid "Reference route"
msgstr "Trajet de référence"
-#: models.py:801
+#: models.py:890
msgid "Associated file"
msgstr "Fichier associé"
-#: models.py:976
+#: models.py:1120
msgid "Layer code"
msgstr "Code pour la couche"
-#: models.py:982
+#: models.py:1126
msgid "Layer"
msgstr "Couche"
-#: models.py:988
+#: models.py:1132
msgid "Area urn"
msgstr "Urn de la zone"
-#: models.py:990 templates/chimere/blocks/welcome.html:3
+#: models.py:1134 templates/chimere/blocks/welcome.html:3
msgid "Welcome message"
msgstr "Message d'accueil"
-#: models.py:994
+#: models.py:1138
msgid "Upper left corner"
msgstr "Coin en haut à gauche"
-#: models.py:996
+#: models.py:1140
msgid "Lower right corner"
msgstr "Coin en bas à droite"
-#: models.py:998
+#: models.py:1142
msgid "Default area"
msgstr "Zone par défaut"
-#: models.py:999
+#: models.py:1143
msgid "Only one area is set by default"
msgstr "Seule une zone est définie par défaut"
-#: models.py:1003
+#: models.py:1147
msgid "Sub-categories checked by default"
msgstr "Sous-catégories cochées par défaut"
-#: models.py:1005
+#: models.py:1149
msgid "Sub-categories dynamicaly displayed"
msgstr "Sous-categories affichées dynamiquement"
-#: models.py:1006
+#: models.py:1150
msgid ""
"If checked, categories are only displayed in the menu if they are available "
"on the current extent."
@@ -531,164 +556,169 @@ msgstr ""
"Si coché, les catégories sont disponibles sur le menu seulement si elles "
"apparaissent sur la zone affichée."
-#: models.py:1010 models.py:1077
+#: models.py:1154 models.py:1221
msgid "Restricted to theses sub-categories"
msgstr "Restreindre à ces sous-categories"
-#: models.py:1011
+#: models.py:1155
msgid "If no sub-category is set all sub-categories are available"
msgstr ""
"Si aucune sous-catégorie n'est définie toutes les sous-catégories sont "
"disponibles"
-#: models.py:1013
+#: models.py:1157
msgid "Link to an external CSS"
msgstr "Lien vers une feuille de style externe"
-#: models.py:1015
+#: models.py:1159
msgid "Restrict to the area extent"
msgstr "Restreindre à l'étendue de la zone"
-#: models.py:1062
+#: models.py:1206
msgid "Default layer"
msgstr "Couche par défaut"
-#: models.py:1066 models.py:1067
+#: models.py:1210 models.py:1211
msgid "Layers"
msgstr "Couches"
-#: models.py:1075
+#: models.py:1219
msgid "Mandatory"
msgstr "Obligatoire"
-#: models.py:1078
+#: models.py:1222
msgid ""
"If no sub-category is set all the property applies to all sub-categories"
msgstr ""
"Si aucune sous-catégorie n'est précisée, cette propriété est disponible pour "
"toutes les sous-catégories"
-#: models.py:1080
+#: models.py:1224
msgid "Text"
msgstr "Texte"
-#: models.py:1081
+#: models.py:1225
msgid "Long text"
msgstr "Texte long"
-#: models.py:1082
+#: models.py:1226
msgid "Password"
msgstr "Mot de passe"
-#: models.py:1084
+#: models.py:1228
msgid "Choices"
msgstr "Choix"
-#: models.py:1092
+#: models.py:1236
msgid "Type"
msgstr "Type"
-#: models.py:1097 models.py:1108 models.py:1122
+#: models.py:1241 models.py:1257 models.py:1271
msgid "Property model"
msgstr "Modèle de propriété"
-#: models.py:1109 models.py:1123
+#: models.py:1258 models.py:1272
msgid "Value"
msgstr "Valeur"
-#: models.py:1115
+#: models.py:1264
msgid "Model property choice"
msgstr "Choix pour les modèles de propriété"
-#: models.py:1134
+#: models.py:1283
msgid "Property"
msgstr "Propriété"
-#: tasks.py:61
+#: tasks.py:63
msgid "Import pending"
msgstr "Import en attente"
-#: tasks.py:62
+#: tasks.py:64
msgid "Import processing"
msgstr "Import en cours"
-#: tasks.py:63
+#: tasks.py:65
msgid "Import successfuly done"
msgstr "Import fait avec succès"
-#: tasks.py:64
+#: tasks.py:66
#, python-format
msgid " %(new)d new item(s), %(updated)d updated item(s)"
msgstr " %(new)d nouveau(x) élément(s), %(updated)d élément(s) mis à jour"
-#: tasks.py:65
+#: tasks.py:67
msgid "Import failed"
msgstr "Import échoué"
-#: tasks.py:66
+#: tasks.py:68
msgid "Import canceled"
msgstr "Import annulé"
-#: tasks.py:67
+#: tasks.py:69
msgid "Export pending"
msgstr "Export en attente"
-#: tasks.py:68
+#: tasks.py:70
msgid "Export processing"
msgstr "Export en cours"
-#: tasks.py:69
+#: tasks.py:71
msgid "Export successfuly done"
msgstr "Export réalisé avec succès"
-#: tasks.py:70
+#: tasks.py:72
#, python-format
msgid " %(updated)d updated item(s)"
msgstr " %(updated)d éléments mis à jour"
-#: tasks.py:71
+#: tasks.py:73
msgid "Export failed"
msgstr "Export échoué"
-#: tasks.py:72
+#: tasks.py:74
msgid "Export canceled"
msgstr "Export annulé"
-#: utils.py:113 utils.py:161
+#: utils.py:118 utils.py:166
msgid "Bad zip file"
msgstr "Mauvais fichier zip"
-#: utils.py:164
+#: utils.py:169
msgid "Missing file(s) inside the zip file"
msgstr "Fichier(s) manquant(s) dans l'archive zip"
-#: utils.py:293
+#: utils.py:301
msgid "Error while reading the data source."
msgstr "Erreur lors de la lecture de la source."
-#: utils.py:328
+#: utils.py:336
msgid "Type of geographic item of this shapefile is not managed by Chimère."
msgstr ""
"Les types des éléments géographiques de ce fichier Shapefile ne sont pas "
"gérés par Chimère."
-#: utils.py:385
+#: utils.py:393
msgid "Could not create file!"
msgstr "Ne peut pas créer le fichier !"
-#: utils.py:396
+#: utils.py:404
msgid "Failed to create field"
msgstr "Ne peut pas créer un champ"
-#: utils.py:467
+#: utils.py:445 templates/chimere/edit.html:44
+#: templates/chimere/edit_route.html:41
+msgid "Categories"
+msgstr "Catégories"
+
+#: utils.py:509
msgid "Nothing to import"
msgstr "Rien à importer"
-#: utils.py:547
+#: utils.py:589
msgid "New items imported - validate them before exporting"
msgstr "Nouveaux éléments importés - valider ceux-ci avant d'exporter"
-#: utils.py:549
+#: utils.py:591
msgid ""
"There are items from a former import not yet validated - validate them "
"before exporting"
@@ -696,23 +726,36 @@ msgstr ""
"Il y a des éléments d'un import précédent pas encore validé - Validez les "
"avant d'exporter"
-#: utils.py:559
+#: utils.py:601
msgid "Bad param"
msgstr "Mauvais paramètre"
-#: views.py:241
+#: utils.py:616
+msgid "No non ambigious tag is defined in the XAPI request"
+msgstr "Aucun « tag » non ambigu n'est défini dans la requête XAPI"
+
+#: utils.py:618
+msgid ""
+"No bounding box is defined in the XAPI request.If you are sure to manage the "
+"entire planet set the bounding box to -180,-90,180,90"
+msgstr ""
+"Aucune « bounding box » définie dans la requête XAPI. Si vous êtes sûr de "
+"vouloir lancer la requête sur la planète entière fixez la « bounding box » "
+"à -180,-90,180,90"
+
+#: views.py:268
msgid "There are missing field(s) and/or errors in the submited form."
msgstr "Il y a des champs manquants ou des erreurs dans ce formulaire."
-#: views.py:323
+#: views.py:350
msgid "Bad file. Please check it with an external software."
msgstr "Fichier incohérent. Merci de le vérifier avec un logiciel externe."
-#: views.py:455
+#: views.py:482
msgid "Comments/request on the map"
msgstr "Commentaires/requètes sur la carte"
-#: views.py:458
+#: views.py:485
msgid ""
"Thank you for your contribution. It will be taken into account. If you have "
"left your email you may be contacted soon for more details."
@@ -721,15 +764,15 @@ msgstr ""
"laissé votre courriel vous serez peut-être contacté bientôt pour plus de "
"détails."
-#: views.py:462
+#: views.py:489
msgid "Temporary error. Renew your message later."
msgstr "Erreur temporaire. Réenvoyez votre message plus tard."
-#: views.py:620
+#: views.py:641
msgid "No category available in this area."
msgstr "Pas de catégorie disponible sur cette zone."
-#: views.py:753
+#: views.py:785
msgid "Incorrect choice in the list"
msgstr "Choix incorrect dans la liste"
@@ -851,7 +894,7 @@ msgstr "Erreur interne du serveur"
msgid "Administration de Chimère"
msgstr "Administration de Chimère"
-#: templates/chimere/base.html:18
+#: templates/chimere/base.html:19
msgid "You must enable JavaScript in your browser to display Chimère."
msgstr ""
"Vous devez activer le JavaScript dans votre navigateur pour afficher Chimère."
@@ -875,15 +918,7 @@ msgstr "Date :"
msgid "Show multimedia gallery"
msgstr "Montrer la galerie multimedia"
-#: templates/chimere/detail.html:29
-msgid "Share on"
-msgstr "Partager sur"
-
-#: templates/chimere/detail.html:33
-msgid "Share"
-msgstr "Partager"
-
-#: templates/chimere/detail.html:36
+#: templates/chimere/detail.html:30
msgid "Propose a modification"
msgstr "Proposer une modification"
@@ -907,10 +942,6 @@ msgstr "Choisissez une localisation pour ce nouveau site"
msgid "indicates a mandatory field"
msgstr "indique un champ obligatoire"
-#: templates/chimere/edit.html:44 templates/chimere/edit_route.html:41
-msgid "Categories"
-msgstr "Catégories"
-
#: templates/chimere/edit.html:113
msgid "Personal information"
msgstr "Informations personnelles"
@@ -1043,6 +1074,14 @@ msgstr "Ce site utilise Chimère"
msgid "Map"
msgstr "Carte"
+#: templates/chimere/blocks/map.html:9
+msgid "Loading of the map in progress"
+msgstr "Chargement de la carte en cours"
+
+#: templates/chimere/blocks/map.html:18
+msgid "Permalink"
+msgstr "Lien permanent"
+
#: templates/chimere/blocks/map_menu.html:5
msgctxt "routing"
msgid "From"
@@ -1075,10 +1114,6 @@ msgstr "Zoomer en arrière"
msgid "Center the map here"
msgstr "Centrer la carte ici"
-#: templates/chimere/blocks/map_params.html:8
-msgid "Permalink"
-msgstr "Lien permanent"
-
#: templates/chimere/blocks/multimedia_file.html:19
msgid "Please use a modern browser or install the non free Flash-Plugin."
msgstr ""
@@ -1122,6 +1157,14 @@ msgstr "Arrivée :"
msgid "Step"
msgstr "Étape"
+#: templates/chimere/blocks/share_bar.html:3
+msgid "Share on"
+msgstr "Partager sur"
+
+#: templates/chimere/blocks/share_bar.html:7
+msgid "Share"
+msgstr "Partager"
+
#: templates/chimere/blocks/submited.html:3
msgid ""
"Your new proposition/modification has been submited. A moderator will treat "
@@ -1182,6 +1225,15 @@ msgstr "Choisir une zone pré-définie"
msgid "Or select the area by zooming and panning this map"
msgstr "Ou sélectionner une zone en zoomant et en se déplaçant sur cette carte"
-#: templatetags/chimere_tags.py:64
+#: templates/chimere/feeds/rss_descr.html:6
+msgid "Description:"
+msgstr "Description :"
+
+#: templates/chimere/feeds/rss_descr.html:8
+msgid ":"
+msgstr " :"
+
+#: templatetags/chimere_tags.py:65
+#, python-format
msgid "Welcome to the %s"
msgstr "Bienvenue sur %s"
diff --git a/chimere/migrations/0032_auto__add_field_subcategory_submission.py b/chimere/migrations/0032_auto__add_field_subcategory_submission.py
new file mode 100644
index 0000000..d96e5bb
--- /dev/null
+++ b/chimere/migrations/0032_auto__add_field_subcategory_submission.py
@@ -0,0 +1,227 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'SubCategory.submission'
+ db.add_column('chimere_subcategory', 'submission',
+ self.gf('django.db.models.fields.BooleanField')(default=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'SubCategory.submission'
+ db.delete_column('chimere_subcategory', 'submission')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1000'}),
+ 'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/models.py b/chimere/models.py
index c11a115..e44b43c 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -204,7 +204,9 @@ class SubCategory(models.Model):
'''
category = models.ForeignKey(Category, verbose_name=_(u"Category"))
name = models.CharField(_(u"Name"), max_length=150)
- available = models.BooleanField(_(u"Available"))
+ available = models.BooleanField(_(u"Available"), default=True)
+ submission = models.BooleanField(_(u"Available for submission"),
+ default=True)
icon = models.ForeignKey(Icon, verbose_name=_(u"Icon"))
hover_icon = models.ForeignKey(Icon, verbose_name=_(u"Hover icon"),
blank=True, null=True, related_name='subcat_hovered')
@@ -225,7 +227,7 @@ class SubCategory(models.Model):
verbose_name_plural = _(u"Sub-categories")
@classmethod
- def getAvailable(cls, item_types=None, area_name=None):
+ def getAvailable(cls, item_types=None, area_name=None, public=False):
'''Get list of tuples with first the category and second the associated
subcategories
'''
@@ -235,6 +237,8 @@ class SubCategory(models.Model):
subcategories = subcategories.filter(available=True)
else:
subcategories = subcategories.filter(item_type__in=item_types)
+ if public:
+ subcategories = subcategories.filter(submission=True)
selected_cats = []
if area_name:
area = Area.objects.get(urn=area_name)
@@ -448,6 +452,10 @@ class Marker(GeographicItem):
def short_desc(self):
return shortify(self.description)
+ @property
+ def geometry(self):
+ return self.point.wkt
+
class Meta:
ordering = ('status', 'name')
verbose_name = _(u"Point of interest")
@@ -549,21 +557,33 @@ class Marker(GeographicItem):
url = reverse('chimere:tiny', args=[area_name, urn])
return url
+def geometry_pre_save(cls, pre_save_geom_values):
+ def geom_pre_save(sender, **kwargs):
+ if not kwargs['instance'] or not kwargs['instance'].pk:
+ return
+ instance = kwargs['instance']
+ try:
+ instance = cls.objects.get(pk=instance.pk)
+ pre_save_geom_values[instance.pk] = (instance.name,
+ instance.geometry, instance.import_version)
+ except ObjectDoesNotExist:
+ pass
+ return geom_pre_save
+
pre_save_marker_values = {}
def marker_pre_save(sender, **kwargs):
if not kwargs['instance']:
return
- instance = kwargs['instance']
- pre_save_marker_values[instance.pk] = (instance.name, instance.point,
- instance.import_version)
+ geometry_pre_save(Marker, pre_save_marker_values)(sender, **kwargs)
pre_save.connect(marker_pre_save, sender=Marker)
def geometry_post_save(pre_save_geom_values):
def geom_post_save(sender, **kwargs):
- if not kwargs['instance']:
+ if not kwargs['instance'] \
+ or kwargs['instance'].pk not in pre_save_geom_values:
return
instance = kwargs['instance']
- name, geometry, import_version = pre_save_geom_values[instance]
+ name, geometry, import_version = pre_save_geom_values[instance.pk]
if (instance.import_version != import_version
and instance.modified_since_import):
instance.modified_since_import = False
@@ -573,8 +593,13 @@ def geometry_post_save(pre_save_geom_values):
return
if instance.name != name or instance.geometry != geometry:
instance.modified_since_import = True
+ instance.save()
return geom_post_save
-post_save.connect(geometry_post_save(pre_save_marker_values), sender=Marker)
+def marker_post_save(sender, **kwargs):
+ if not kwargs['instance']:
+ return
+ geometry_post_save(pre_save_marker_values)(sender, **kwargs)
+post_save.connect(marker_post_save, sender=Marker)
class MultimediaType(models.Model):
MEDIA_TYPES = (('A', _(u"Audio")),
@@ -876,6 +901,10 @@ class Route(GeographicItem):
ordering = ('status', 'name')
verbose_name = _(u"Route")
+ @property
+ def geometry(self):
+ return self.point.wkt
+
def get_init_multi(self):
if not self.associated_marker.count():
return []
@@ -933,15 +962,13 @@ pre_save_route_values = {}
def route_pre_save(sender, **kwargs):
if not kwargs['instance']:
return
- instance = kwargs['instance']
- pre_save_route_values[instance.pk] = (instance.name, instance.route,
- instance.import_version)
+ geometry_pre_save(Route, pre_save_route_values)(sender, **kwargs)
pre_save.connect(route_pre_save, sender=Route)
def route_post_save(sender, **kwargs):
if not kwargs['instance']:
return
- geometry_post_save(pre_save_route_values)
+ geometry_post_save(pre_save_route_values)(sender, **kwargs)
instance = kwargs['instance']
marker_fields = [f.attname for f in Marker._meta.fields]
route_fields = [f.attname for f in Route._meta.fields]
diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css
index 630818f..c8825d4 100644
--- a/chimere/static/chimere/css/styles.css
+++ b/chimere/static/chimere/css/styles.css
@@ -739,6 +739,24 @@ ul#multimedia_list_content li.multimedia{
background-repeat:no-repeat;
}
+#waiting{ /* Fixed position to provide the vertical offset */
+ position:fixed;
+ top:40%;
+ width:100%;
+ z-index:40002;
+ display:none;
+}
+
+#waiting-content {
+ width:95px;
+ position:relative;
+ margin:0 auto;
+ background-color:white;
+ padding:10px 5px 0 5px;
+ border:1px solid black;
+ text-align:center;
+}
+
/* openlayer customisation */
.olControlPermalink {
display: block;
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index 4c899bb..28da31e 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -499,6 +499,7 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
* Load markers and route from DB
*/
loadGeoObjects: function () {
+ if($('#waiting').length){$('#waiting').show();}
helpers.retrieve_checked_categories();
var ids = settings.checked_categories.join('_');
if (!ids) ids = '0';
@@ -529,6 +530,9 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
error: function (data) {
settings.layerMarkers.clearMarkers();
settings.layerVectors.removeAllFeatures();
+ },
+ complete: function () {
+ if($('#waiting').length){$('#waiting').hide();}
}
});
},
diff --git a/chimere/static/chimere/js/textareas.js b/chimere/static/chimere/js/textareas.js
index 048718d..e15e7f2 100644
--- a/chimere/static/chimere/js/textareas.js
+++ b/chimere/static/chimere/js/textareas.js
@@ -22,7 +22,7 @@ tinyMCE.init({
theme : "advanced",
editor_selector : "mceEditor",
relative_urls : false,
- theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,bullist,numlist,separator,hr,separator,link",
+ theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,bullist,numlist,separator,hr,separator,link,image",
theme_advanced_buttons2 : "",
theme_advanced_buttons3 : ""
});
diff --git a/chimere/tasks.py b/chimere/tasks.py
index 2d55bfd..d457f6a 100644
--- a/chimere/tasks.py
+++ b/chimere/tasks.py
@@ -27,6 +27,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.utils.translation import ugettext_lazy as _
from chimere.models import Importer
+from external_utils import OsmApi
def single_instance_task(timeout):
@@ -110,7 +111,11 @@ def exporting(importer_pk):
return
importer.state = unicode(IMPORT_MESSAGES['export_process'][0])
importer.save()
- updated_item, error = importer.manager.put()
+ error = None
+ try:
+ updated_item, error = importer.manager.put()
+ except OsmApi.ApiError, error:
+ pass
if error:
importer.state = unicode(IMPORT_MESSAGES['export_failed'][0]) \
+ u" - " + unicode(IMPORT_MESSAGES['export_failed'][1]) % error
diff --git a/chimere/templates/chimere/blocks/map_params.html b/chimere/templates/chimere/blocks/map.html
index 7608180..f41d9d7 100644
--- a/chimere/templates/chimere/blocks/map_params.html
+++ b/chimere/templates/chimere/blocks/map.html
@@ -1,4 +1,14 @@
{% load i18n %}
+<div id='{{map_id}}'></div>
+<script type="text/javascript">
+ $("#{{map_id}}").show();
+</script>
+<div id="waiting">
+ <div id="waiting-content">
+ <img src='{{STATIC_URL}}chimere/img/ajax-loader.gif'/>
+ <p>{% trans "Loading of the map in progress" %}</p>
+ </div>
+</div>
<script type="text/javascript">
{% if single_category %}
$(function() {$('#panel').hide()});{% endif %}
diff --git a/chimere/templates/chimere/blocks/welcome.html b/chimere/templates/chimere/blocks/welcome.html
index 95ad1ac..72d37b3 100644
--- a/chimere/templates/chimere/blocks/welcome.html
+++ b/chimere/templates/chimere/blocks/welcome.html
@@ -39,10 +39,10 @@ $(function(){
</div>
{%endif%}
{% if news.description %}
- <p class='description'>{{news.description|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4 table td th tr"|safe}}</p>
+ <p class='description'>{{news.description|sanitize:"p b i br hr strong em img:src:alt span:style a:href:target ul li ol h1 h2 h3 h4 table td th tr"|safe}}</p>
{% endif %}
{% for property in news.getProperties %}
- <p class='{{news.propertymodel.getNamedId}}'>{{ property.value|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4 table td th tr"|safe }}</p>
+ <p class='{{news.propertymodel.getNamedId}}'>{{ property.value|sanitize:"p b i br hr strong em img:src:alt span:style a:href:target ul li ol h1 h2 h3 h4 table td th tr"|safe }}</p>
{% endfor %}
<p class='marker_link'><a href='{% get_tinyfied_url news area_name %}'>{% trans "See it on the map"%}</a></p>
{% endif %}
diff --git a/chimere/templates/chimere/detail.html b/chimere/templates/chimere/detail.html
index 94270cb..b03dcf2 100644
--- a/chimere/templates/chimere/detail.html
+++ b/chimere/templates/chimere/detail.html
@@ -17,10 +17,10 @@
{% if marker.end_date %} - {{marker.end_date|date:"D d M Y"}}</p>{% endif %}</span>
{% endif %}
{% if marker.description %}
- <p class='description'>{{ marker.description|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4 table td tr th"|safe}}</p>
+ <p class='description'>{{ marker.description|sanitize:"p b i br hr strong em img:src:alt span:style a:href:target ul li ol h1 h2 h3 h4 table td tr th"|safe}}</p>
{% endif %}
{% for property in marker.getProperties %}
- <p id='{{property.propertymodel.getNamedId}}'>{{ property.value|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4 table td tr th"|safe}}</p>
+ <p id='{{property.propertymodel.getNamedId}}'>{{ property.value|sanitize:"p b i br hr strong em img:src:alt span:style a:href:target ul li ol h1 h2 h3 h4 table td tr th"|safe}}</p>
{% endfor %}
{% if marker.multimedia_items %}
<a href='#' id='show_gallery_link'>{% trans "Show multimedia gallery" %}</a>
diff --git a/chimere/templates/chimere/feeds/rss_descr.html b/chimere/templates/chimere/feeds/rss_descr.html
index 48f72df..b157c56 100644
--- a/chimere/templates/chimere/feeds/rss_descr.html
+++ b/chimere/templates/chimere/feeds/rss_descr.html
@@ -3,9 +3,9 @@
<div id='detail_content'>
{% for picture in obj.pictures.all %}<a href='{{picture.picture.url}}'><img src='{{picture.thumbnailfile.url}}' alt="{{picture.name}}"/></a>{% endfor %}
<ul>
-{% if obj.description %}<li class='description'><strong>{% trans "Description:" %}</strong> {{ obj.description|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4"|safe }}</li>{% endif %}
+{% if obj.description %}<li class='description'><strong>{% trans "Description:" %}</strong> {{ obj.description|sanitize:"p b i br hr strong em img:src:alt span:style a:href:target ul li ol h1 h2 h3 h4"|safe }}</li>{% endif %}
{% for property in obj.getProperties %}
-{% if property.value %}<li id='{{property.propertymodel.getNamedId}}'><strong>{{property.propertymodel.name}}{% trans ":"%}</strong> {{ property.value|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4"|safe }}</li>{% endif %}
+{% if property.value %}<li id='{{property.propertymodel.getNamedId}}'><strong>{{property.propertymodel.name}}{% trans ":"%}</strong> {{ property.value|sanitize:"p b i br hr strong em img:src:alt span:style a:href:target ul li ol h1 h2 h3 h4"|safe }}</li>{% endif %}
{% endfor %}
</ul>
</div>
diff --git a/chimere/templates/chimere/main_map.html b/chimere/templates/chimere/main_map.html
index a0ecffc..70e8850 100644
--- a/chimere/templates/chimere/main_map.html
+++ b/chimere/templates/chimere/main_map.html
@@ -42,7 +42,7 @@
$("#main-map").show();
</script>
{% map_menu %}
- {% map_params %}
+ {% map 'main-map' %}
{% endblock %}
{% block footer %}
<p class='map-footer'>{% include "chimere/blocks/footer.html" %}</p>
diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py
index f2221b2..dce4c4d 100644
--- a/chimere/templatetags/chimere_tags.py
+++ b/chimere/templatetags/chimere_tags.py
@@ -153,10 +153,10 @@ def routing(context):
context_data['STATIC_URL'] = settings.STATIC_URL
return context_data
-@register.inclusion_tag('chimere/blocks/map_params.html', takes_context=True)
-def map_params(context):
- context_data = {}
- context_data['STATIC_URL'] = settings.STATIC_URL
+@register.inclusion_tag('chimere/blocks/map.html', takes_context=True)
+def map(context, map_id='map'):
+ context_data = {'map_id':map_id,
+ "STATIC_URL": settings.STATIC_URL}
context_data['icon_offset_x'] = settings.CHIMERE_ICON_OFFSET_X
context_data['icon_offset_y'] = settings.CHIMERE_ICON_OFFSET_Y
context_data['icon_width'] = settings.CHIMERE_ICON_WIDTH
diff --git a/chimere/utils.py b/chimere/utils.py
index 423ea85..4cd6f45 100644
--- a/chimere/utils.py
+++ b/chimere/utils.py
@@ -222,6 +222,9 @@ class KMLManager(ImportManager):
for item in placemark:
if item.tag == ns + 'name':
name = item.text
+ if not pl_id:
+ # if no ID is provided assume that name is a key
+ pl_id = name
elif item.tag == ns + 'description':
description = item.text
elif item.tag == ns + 'Point':
@@ -621,7 +624,8 @@ class OSMManager(ImportManager):
for idx, item in enumerate(Marker.objects.filter(status='A',
point__contained=bbox,
categories=self.importer_instance.categories.all(),
- not_for_osm=False, modified_since_import=True).all()):
+ not_for_osm=False, modified_since_import=True,
+ route=None).all()):
dct = default_dct.copy()
dct.update({'lon':item.point.x,
'lat':item.point.y})
diff --git a/chimere/views.py b/chimere/views.py
index fd8f927..7c983a3 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -26,7 +26,7 @@ Views of the project
import datetime
from itertools import groupby
-import simplejson
+import re
from django.conf import settings
from django.core import serializers
@@ -182,7 +182,8 @@ def get_edit_page(redirect_url, item_cls, item_form,
return redir, None, None
if 'area_name' in response_dct:
area_name = response_dct['area_name']
- subcategories = SubCategory.getAvailable(cat_type, area_name)
+ subcategories = SubCategory.getAvailable(cat_type, area_name,
+ public=True)
listed_subcats = []
if subcategories:
for cat, subcats in subcategories:
@@ -688,6 +689,7 @@ def getTinyfiedUrl(request, parameters, area_name=''):
if response_dct['area_name'] else '') + '/', urn])
if not url.startswith('http'):
url = get_base_uri(request) + url
+ url = re.sub("([^:])\/\/", "\g<1>/", url)
text = settings.PROJECT_NAME
if 'current_feature' in parameters:
for item in parameters.split('&'):