diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-06-08 18:30:15 +0200 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-06-08 18:30:15 +0200 |
| commit | 8486380780073057736944ac6e6ef0aca9a52eec (patch) | |
| tree | 83ab0b4fd2b1356f1e03d72f9562e730efcca165 /ishtar_common | |
| parent | bbed42d3287dcbb47fadf1ed926dfdfe5fb3d93f (diff) | |
| parent | 3714f0d1f3e8610d1fa789c8ea33e7fc9f773f25 (diff) | |
| download | Ishtar-8486380780073057736944ac6e6ef0aca9a52eec.tar.bz2 Ishtar-8486380780073057736944ac6e6ef0aca9a52eec.zip | |
Merge branch 'master' into v0.9
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/locale/django.pot | 629 | ||||
| -rw-r--r-- | ishtar_common/migrations/0051_auto__add_field_ishtarsiteprofile_homepage.py | 404 | ||||
| -rw-r--r-- | ishtar_common/models.py | 46 | ||||
| -rw-r--r-- | ishtar_common/static/js/grid.tbltogrid.js | 106 | ||||
| -rw-r--r-- | ishtar_common/static/media/style.css | 41 | ||||
| -rw-r--r-- | ishtar_common/static/media/style_basic.css | 4 | ||||
| -rw-r--r-- | ishtar_common/templates/base.html | 3 | ||||
| -rw-r--r-- | ishtar_common/templates/index.html | 1 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/blocks/window_field.html | 6 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/blocks/window_field_detail.html | 3 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/blocks/window_field_multiple.html | 6 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/blocks/window_field_url.html | 6 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/sheet_toolbar.html | 2 | ||||
| -rw-r--r-- | ishtar_common/templates/welcome.html | 11 | ||||
| -rw-r--r-- | ishtar_common/templatetags/link_to_window.py | 8 | ||||
| -rw-r--r-- | ishtar_common/templatetags/window_field.py | 39 | ||||
| -rw-r--r-- | ishtar_common/views.py | 8 |
17 files changed, 1001 insertions, 322 deletions
diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot index 303c03ace..b3ceeddda 100644 --- a/ishtar_common/locale/django.pot +++ b/ishtar_common/locale/django.pot @@ -24,7 +24,7 @@ msgstr "" msgid "Archaeological file" msgstr "" -#: context_processors.py:38 models.py:1281 +#: context_processors.py:38 models.py:1322 msgid "Operation" msgstr "" @@ -171,12 +171,12 @@ msgstr "" msgid "Add a new item" msgstr "" -#: forms.py:171 models.py:1058 +#: forms.py:174 models.py:1099 msgid "Template" msgstr "" #: forms_common.py:39 forms_common.py:57 forms_common.py:169 -#: forms_common.py:289 models.py:1124 models.py:2377 +#: forms_common.py:289 models.py:1165 models.py:2420 #: templates/blocks/JQueryAdvancedTown.html:19 #: templates/ishtar/sheet_organization.html:17 msgid "Town" @@ -192,110 +192,110 @@ msgid "" "french town Saint-Denis in the Seine-Saint-Denis department.</p>" msgstr "" -#: forms_common.py:66 forms_common.py:669 ishtar_menu.py:42 models.py:1279 -#: models.py:2076 models.py:2205 models.py:2259 -#: templates/ishtar/sheet_person.html:6 +#: forms_common.py:66 forms_common.py:669 ishtar_menu.py:42 models.py:1320 +#: models.py:2119 models.py:2248 models.py:2302 +#: templates/ishtar/sheet_person.html:4 msgid "Person" msgstr "" -#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1280 -#: models.py:1995 templates/ishtar/sheet_organization.html:6 +#: forms_common.py:157 forms_common.py:231 ishtar_menu.py:66 models.py:1321 +#: models.py:2036 templates/ishtar/sheet_organization.html:6 msgid "Organization" msgstr "" #: forms_common.py:160 forms_common.py:196 forms_common.py:226 -#: forms_common.py:259 models.py:775 models.py:1057 models.py:1325 -#: models.py:1543 models.py:1989 models.py:2063 models.py:2363 +#: forms_common.py:259 models.py:812 models.py:1098 models.py:1366 +#: models.py:1584 models.py:2030 models.py:2106 models.py:2406 #: templates/ishtar/sheet_organization.html:12 #: templates/ishtar/sheet_organization.html:25 msgid "Name" msgstr "" -#: forms_common.py:161 models.py:1266 models.py:1674 +#: forms_common.py:161 models.py:1307 models.py:1715 msgid "Organization type" msgstr "" -#: forms_common.py:163 forms_common.py:283 models.py:1119 +#: forms_common.py:163 forms_common.py:283 models.py:1160 #: templates/ishtar/sheet_organization.html:14 msgid "Address" msgstr "" -#: forms_common.py:165 forms_common.py:286 models.py:1120 +#: forms_common.py:165 forms_common.py:286 models.py:1161 #: templates/ishtar/sheet_organization.html:15 msgid "Address complement" msgstr "" -#: forms_common.py:167 forms_common.py:287 models.py:1122 +#: forms_common.py:167 forms_common.py:287 models.py:1163 #: templates/ishtar/sheet_organization.html:16 msgid "Postal code" msgstr "" -#: forms_common.py:170 forms_common.py:290 models.py:1125 +#: forms_common.py:170 forms_common.py:290 models.py:1166 msgid "Country" msgstr "" #: forms_common.py:172 forms_common.py:228 forms_common.py:263 -#: forms_common.py:397 models.py:1152 +#: forms_common.py:397 models.py:1193 msgid "Email" msgstr "" -#: forms_common.py:173 forms_common.py:266 models.py:1137 +#: forms_common.py:173 forms_common.py:266 models.py:1178 #: templates/ishtar/sheet_organization.html:18 -#: templates/ishtar/sheet_person.html:23 +#: templates/ishtar/sheet_person.html:19 #: templates/ishtar/wizard/wizard_person.html:17 msgid "Phone" msgstr "" -#: forms_common.py:174 forms_common.py:275 models.py:1149 +#: forms_common.py:174 forms_common.py:275 models.py:1190 #: templates/ishtar/sheet_organization.html:19 -#: templates/ishtar/sheet_person.html:41 +#: templates/ishtar/sheet_person.html:37 #: templates/ishtar/wizard/wizard_person.html:35 msgid "Mobile phone" msgstr "" -#: forms_common.py:197 forms_common.py:229 models.py:1700 models.py:1991 -#: models.py:2300 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105 +#: forms_common.py:197 forms_common.py:229 models.py:1741 models.py:2032 +#: models.py:2343 templates/sheet_ope.html:85 templates/sheet_ope.html.py:105 #: templates/sheet_ope.html:126 templates/ishtar/import_list.html:13 #: templates/ishtar/sheet_organization.html:27 -#: templates/ishtar/sheet_person.html:95 +#: templates/ishtar/sheet_person.html:91 #: templates/ishtar/blocks/window_tables/documents.html:6 msgid "Type" msgstr "" -#: forms_common.py:206 views.py:114 +#: forms_common.py:206 views.py:128 msgid "Organization search" msgstr "" -#: forms_common.py:227 forms_common.py:257 models.py:2061 +#: forms_common.py:227 forms_common.py:257 models.py:2104 #: templates/ishtar/sheet_organization.html:26 msgid "Surname" msgstr "" -#: forms_common.py:243 views.py:88 +#: forms_common.py:243 views.py:93 msgid "Person search" msgstr "" -#: forms_common.py:254 templates/ishtar/sheet_person.html:12 +#: forms_common.py:254 templates/ishtar/sheet_person.html:8 #: templates/ishtar/wizard/wizard_person.html:6 msgid "Identity" msgstr "" -#: forms_common.py:256 forms_common.py:595 forms_common.py:636 models.py:2059 -#: models.py:2297 templates/sheet_ope.html:104 -#: templates/ishtar/sheet_person.html:94 +#: forms_common.py:256 forms_common.py:595 forms_common.py:636 models.py:2102 +#: models.py:2340 templates/sheet_ope.html:104 +#: templates/ishtar/sheet_person.html:90 #: templates/ishtar/blocks/window_tables/documents.html:5 msgid "Title" msgstr "" -#: forms_common.py:261 models.py:2065 +#: forms_common.py:261 models.py:2108 msgid "Raw name" msgstr "" -#: forms_common.py:264 models.py:1138 +#: forms_common.py:264 models.py:1179 msgid "Phone description" msgstr "" -#: forms_common.py:267 models.py:1140 models.py:1142 +#: forms_common.py:267 models.py:1181 models.py:1183 msgid "Phone description 2" msgstr "" @@ -303,11 +303,11 @@ msgstr "" msgid "Phone 2" msgstr "" -#: forms_common.py:271 models.py:1146 +#: forms_common.py:271 models.py:1187 msgid "Phone description 3" msgstr "" -#: forms_common.py:273 models.py:1144 +#: forms_common.py:273 models.py:1185 msgid "Phone 3" msgstr "" @@ -315,27 +315,27 @@ msgstr "" msgid "Current organization" msgstr "" -#: forms_common.py:292 models.py:1127 +#: forms_common.py:292 models.py:1168 msgid "Other address: address" msgstr "" -#: forms_common.py:295 models.py:1130 +#: forms_common.py:295 models.py:1171 msgid "Other address: address complement" msgstr "" -#: forms_common.py:297 models.py:1131 +#: forms_common.py:297 models.py:1172 msgid "Other address: postal code" msgstr "" -#: forms_common.py:299 models.py:1133 +#: forms_common.py:299 models.py:1174 msgid "Other address: town" msgstr "" -#: forms_common.py:301 models.py:1135 +#: forms_common.py:301 models.py:1176 msgid "Other address: country" msgstr "" -#: forms_common.py:346 forms_common.py:376 forms_common.py:380 models.py:2043 +#: forms_common.py:346 forms_common.py:376 forms_common.py:380 models.py:2084 msgid "Person type" msgstr "" @@ -367,7 +367,7 @@ msgstr "" msgid "Send the new password by email?" msgstr "" -#: forms_common.py:451 forms_common.py:464 models.py:2378 +#: forms_common.py:451 forms_common.py:464 models.py:2421 msgid "Towns" msgstr "" @@ -383,7 +383,7 @@ msgstr "" msgid "Documentation informations" msgstr "" -#: forms_common.py:597 forms_common.py:637 models.py:1675 models.py:2280 +#: forms_common.py:597 forms_common.py:637 models.py:1716 models.py:2323 msgid "Source type" msgstr "" @@ -395,41 +395,41 @@ msgstr "" msgid "Internal reference" msgstr "" -#: forms_common.py:605 models.py:2311 +#: forms_common.py:605 models.py:2354 msgid "Numerical ressource (web address)" msgstr "" -#: forms_common.py:606 models.py:2313 +#: forms_common.py:606 models.py:2356 msgid "Receipt date" msgstr "" -#: forms_common.py:608 models.py:1827 models.py:2315 +#: forms_common.py:608 models.py:1868 models.py:2358 msgid "Creation date" msgstr "" -#: forms_common.py:611 models.py:2318 +#: forms_common.py:611 models.py:2361 msgid "Receipt date in documentation" msgstr "" -#: forms_common.py:613 forms_common.py:641 models.py:277 models.py:1570 -#: models.py:2069 models.py:2325 +#: forms_common.py:613 forms_common.py:641 models.py:282 models.py:490 +#: models.py:1611 models.py:2112 models.py:2368 msgid "Comment" msgstr "" -#: forms_common.py:615 forms_common.py:640 models.py:777 models.py:1329 -#: models.py:1502 models.py:1544 models.py:2324 templates/sheet_ope.html:128 +#: forms_common.py:615 forms_common.py:640 models.py:814 models.py:1370 +#: models.py:1543 models.py:1585 models.py:2367 templates/sheet_ope.html:128 msgid "Description" msgstr "" -#: forms_common.py:618 models.py:2326 +#: forms_common.py:618 models.py:2369 msgid "Additional information" msgstr "" -#: forms_common.py:620 forms_common.py:644 models.py:2328 +#: forms_common.py:620 forms_common.py:644 models.py:2371 msgid "Has a duplicate" msgstr "" -#: forms_common.py:633 forms_common.py:662 forms_common.py:695 models.py:2264 +#: forms_common.py:633 forms_common.py:662 forms_common.py:695 models.py:2307 #: templates/ishtar/wizard/wizard_person_deletion.html:124 msgid "Author" msgstr "" @@ -442,7 +442,7 @@ msgstr "" msgid "Would you like to delete this documentation?" msgstr "" -#: forms_common.py:670 models.py:1676 models.py:2254 models.py:2261 +#: forms_common.py:670 models.py:1717 models.py:2297 models.py:2304 msgid "Author type" msgstr "" @@ -454,7 +454,7 @@ msgstr "" msgid "There are identical authors." msgstr "" -#: forms_common.py:706 models.py:2265 models.py:2307 +#: forms_common.py:706 models.py:2308 models.py:2350 #: templates/sheet_ope.html:106 #: templates/ishtar/blocks/window_tables/documents.html:7 msgid "Authors" @@ -464,11 +464,11 @@ msgstr "" msgid "Administration" msgstr "" -#: ishtar_menu.py:31 views.py:140 +#: ishtar_menu.py:31 views.py:154 msgid "Account management" msgstr "" -#: ishtar_menu.py:34 models.py:853 views.py:1120 +#: ishtar_menu.py:34 models.py:894 views.py:1140 msgid "Global variables" msgstr "" @@ -492,19 +492,20 @@ msgstr "" msgid "Merge" msgstr "" -#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1864 widgets.py:110 +#: ishtar_menu.py:61 ishtar_menu.py:88 models.py:1905 widgets.py:110 +#: templates/ishtar/form_delete.html:11 msgid "Delete" msgstr "" -#: ishtar_menu.py:96 models.py:1838 +#: ishtar_menu.py:96 models.py:1879 msgid "Imports" msgstr "" -#: ishtar_menu.py:99 views.py:1128 +#: ishtar_menu.py:99 views.py:1148 msgid "New import" msgstr "" -#: ishtar_menu.py:103 views.py:1142 +#: ishtar_menu.py:103 views.py:1162 msgid "Current imports" msgstr "" @@ -524,682 +525,692 @@ msgstr "" msgid "This item already exists." msgstr "" -#: models.py:273 models.py:1092 models.py:1104 +#: models.py:278 models.py:489 models.py:1133 models.py:1145 msgid "Label" msgstr "" -#: models.py:275 +#: models.py:280 msgid "Textual ID" msgstr "" -#: models.py:278 models.py:1061 +#: models.py:283 models.py:492 models.py:1102 msgid "Available" msgstr "" -#: models.py:479 models.py:1616 +#: models.py:511 models.py:1657 msgid "Key" msgstr "" -#: models.py:485 +#: models.py:517 msgid "Specific key to an import" msgstr "" -#: models.py:556 +#: models.py:593 msgid "Last editor" msgstr "" -#: models.py:559 +#: models.py:596 msgid "Creator" msgstr "" -#: models.py:692 models.py:2389 +#: models.py:729 models.py:2432 msgid "Order" msgstr "" -#: models.py:693 +#: models.py:730 msgid "Symmetrical" msgstr "" -#: models.py:706 +#: models.py:743 msgid "Cannot have symmetrical and an inverse_relation" msgstr "" -#: models.py:776 models.py:1327 +#: models.py:813 models.py:1368 msgid "Slug" msgstr "" -#: models.py:778 +#: models.py:815 msgid "Files module" msgstr "" -#: models.py:779 +#: models.py:816 msgid "Context records module" msgstr "" -#: models.py:781 +#: models.py:818 msgid "Finds module" msgstr "" -#: models.py:782 +#: models.py:819 msgid "Need context records module" msgstr "" -#: models.py:784 +#: models.py:821 msgid "Warehouses module" msgstr "" -#: models.py:785 +#: models.py:822 msgid "Need finds module" msgstr "" -#: models.py:786 +#: models.py:824 +msgid "Home page" +msgstr "" + +#: models.py:825 +msgid "" +"Homepage of Ishtar - if not defined a default homepage will appear. Use the " +"markdown syntax." +msgstr "" + +#: models.py:827 msgid "Current active" msgstr "" -#: models.py:789 +#: models.py:830 msgid "Ishtar site profile" msgstr "" -#: models.py:790 +#: models.py:831 msgid "Ishtar site profiles" msgstr "" -#: models.py:846 +#: models.py:887 msgid "Variable name" msgstr "" -#: models.py:847 +#: models.py:888 msgid "Description of the variable" msgstr "" -#: models.py:849 models.py:1617 +#: models.py:890 models.py:1658 msgid "Value" msgstr "" -#: models.py:852 +#: models.py:893 msgid "Global variable" msgstr "" -#: models.py:962 models.py:992 +#: models.py:1003 models.py:1033 msgid "Total" msgstr "" -#: models.py:969 models.py:1093 models.py:1105 -#: templates/ishtar/sheet_person.html:26 +#: models.py:1010 models.py:1134 models.py:1146 +#: templates/ishtar/sheet_person.html:22 #: templates/ishtar/dashboards/dashboard_main_detail.html:135 #: templates/ishtar/dashboards/dashboard_main_detail_users.html:26 #: templates/ishtar/wizard/wizard_person.html:20 msgid "Number" msgstr "" -#: models.py:1056 +#: models.py:1097 msgid "Administrative Act" msgstr "" -#: models.py:1060 +#: models.py:1101 msgid "Associated object" msgstr "" -#: models.py:1064 +#: models.py:1105 msgid "Document template" msgstr "" -#: models.py:1065 +#: models.py:1106 msgid "Document templates" msgstr "" -#: models.py:1096 models.py:1106 models.py:1822 +#: models.py:1137 models.py:1147 models.py:1863 msgid "State" msgstr "" -#: models.py:1110 templates/blocks/JQueryAdvancedTown.html:12 +#: models.py:1151 templates/blocks/JQueryAdvancedTown.html:12 msgid "Department" msgstr "" -#: models.py:1111 +#: models.py:1152 msgid "Departments" msgstr "" -#: models.py:1148 +#: models.py:1189 msgid "Raw phone" msgstr "" -#: models.py:1154 +#: models.py:1195 msgid "Alternative address is prefered" msgstr "" -#: models.py:1193 +#: models.py:1234 msgid "Tel: " msgstr "" -#: models.py:1197 +#: models.py:1238 msgid "Mobile: " msgstr "" -#: models.py:1201 +#: models.py:1242 msgid "Email: " msgstr "" -#: models.py:1206 +#: models.py:1247 msgid "Merge key" msgstr "" -#: models.py:1267 +#: models.py:1308 msgid "Organization types" msgstr "" -#: models.py:1283 +#: models.py:1324 msgid "Archaeological site" msgstr "" -#: models.py:1284 +#: models.py:1325 msgid "Parcels" msgstr "" -#: models.py:1286 +#: models.py:1327 msgid "Operation source" msgstr "" -#: models.py:1289 views.py:945 views.py:996 +#: models.py:1330 views.py:965 views.py:1016 msgid "Archaeological files" msgstr "" -#: models.py:1291 views.py:948 views.py:1004 +#: models.py:1332 views.py:968 views.py:1024 msgid "Context records" msgstr "" -#: models.py:1293 +#: models.py:1334 msgid "Context record relations" msgstr "" -#: models.py:1295 views.py:950 views.py:1007 +#: models.py:1336 views.py:970 views.py:1027 msgid "Finds" msgstr "" -#: models.py:1331 templates/ishtar/dashboards/dashboard_main.html:26 +#: models.py:1372 templates/ishtar/dashboards/dashboard_main.html:26 msgid "Users" msgstr "" -#: models.py:1333 +#: models.py:1374 msgid "Associated model" msgstr "" -#: models.py:1336 +#: models.py:1377 msgid "Is template" msgstr "" -#: models.py:1337 +#: models.py:1378 msgid "Unicity keys (separator \";\")" msgstr "" -#: models.py:1341 +#: models.py:1382 msgid "Importer - Type" msgstr "" -#: models.py:1342 +#: models.py:1383 msgid "Importer - Types" msgstr "" -#: models.py:1432 +#: models.py:1473 msgid "Importer - Default" msgstr "" -#: models.py:1433 +#: models.py:1474 msgid "Importer - Defaults" msgstr "" -#: models.py:1468 +#: models.py:1509 msgid "Importer - Default value" msgstr "" -#: models.py:1469 +#: models.py:1510 msgid "Importer - Default values" msgstr "" -#: models.py:1501 +#: models.py:1542 msgid "Column number" msgstr "" -#: models.py:1504 +#: models.py:1545 msgid "Required" msgstr "" -#: models.py:1507 +#: models.py:1548 msgid "Importer - Column" msgstr "" -#: models.py:1508 +#: models.py:1549 msgid "Importer - Columns" msgstr "" -#: models.py:1528 +#: models.py:1569 msgid "Field name" msgstr "" -#: models.py:1530 models.py:1564 +#: models.py:1571 models.py:1605 msgid "Force creation of new items" msgstr "" -#: models.py:1532 models.py:1566 +#: models.py:1573 models.py:1607 msgid "Concatenate with existing" msgstr "" -#: models.py:1534 models.py:1568 +#: models.py:1575 models.py:1609 msgid "Concatenate character" msgstr "" -#: models.py:1538 +#: models.py:1579 msgid "Importer - Duplicate field" msgstr "" -#: models.py:1539 +#: models.py:1580 msgid "Importer - Duplicate fields" msgstr "" -#: models.py:1546 +#: models.py:1587 msgid "Regular expression" msgstr "" -#: models.py:1549 +#: models.py:1590 msgid "Importer - Regular expression" msgstr "" -#: models.py:1550 +#: models.py:1591 msgid "Importer - Regular expressions" msgstr "" -#: models.py:1573 +#: models.py:1614 msgid "Importer - Target" msgstr "" -#: models.py:1574 +#: models.py:1615 msgid "Importer - Targets" msgstr "" -#: models.py:1598 views.py:311 +#: models.py:1639 views.py:325 msgid "True" msgstr "" -#: models.py:1599 views.py:313 +#: models.py:1640 views.py:327 msgid "False" msgstr "" -#: models.py:1618 +#: models.py:1659 msgid "Is set" msgstr "" -#: models.py:1625 +#: models.py:1666 msgid "Importer - Target key" msgstr "" -#: models.py:1626 +#: models.py:1667 msgid "Importer - Targets keys" msgstr "" -#: models.py:1677 models.py:2292 models.py:2303 +#: models.py:1718 models.py:2335 models.py:2346 msgid "Format" msgstr "" -#: models.py:1678 models.py:2393 +#: models.py:1719 models.py:2436 msgid "Operation type" msgstr "" -#: models.py:1679 +#: models.py:1720 msgid "Period" msgstr "" -#: models.py:1680 +#: models.py:1721 msgid "Unit" msgstr "" -#: models.py:1681 +#: models.py:1722 msgid "Material" msgstr "" -#: models.py:1683 +#: models.py:1724 msgid "Conservatory state" msgstr "" -#: models.py:1684 +#: models.py:1725 msgid "Preservation type" msgstr "" -#: models.py:1685 +#: models.py:1726 msgid "Object type" msgstr "" -#: models.py:1687 +#: models.py:1728 msgid "Identification type" msgstr "" -#: models.py:1689 +#: models.py:1730 msgid "Context record relation type" msgstr "" -#: models.py:1690 models.py:2286 +#: models.py:1731 models.py:2329 msgid "Support type" msgstr "" -#: models.py:1696 +#: models.py:1737 msgid "Integer" msgstr "" -#: models.py:1697 +#: models.py:1738 msgid "Float" msgstr "" -#: models.py:1698 +#: models.py:1739 msgid "String" msgstr "" -#: models.py:1699 templates/sheet_ope.html:86 +#: models.py:1740 templates/sheet_ope.html:86 msgid "Date" msgstr "" -#: models.py:1701 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 -#: templates/ishtar/sheet_person.html:93 +#: models.py:1742 templates/sheet_ope.html:61 templates/sheet_ope.html.py:83 +#: templates/ishtar/sheet_person.html:89 #: templates/ishtar/dashboards/dashboard_main_detail.html:120 msgid "Year" msgstr "" -#: models.py:1702 +#: models.py:1743 msgid "String to boolean" msgstr "" -#: models.py:1703 +#: models.py:1744 msgctxt "filesystem" msgid "File" msgstr "" -#: models.py:1704 +#: models.py:1745 msgid "Unknow type" msgstr "" -#: models.py:1720 +#: models.py:1761 msgid "4 digit year. e.g.: \"2015\"" msgstr "" -#: models.py:1721 +#: models.py:1762 msgid "4 digit year/month/day. e.g.: \"2015/02/04\"" msgstr "" -#: models.py:1722 +#: models.py:1763 msgid "Day/month/4 digit year. e.g.: \"04/02/2015\"" msgstr "" -#: models.py:1732 +#: models.py:1773 msgid "Options" msgstr "" -#: models.py:1734 +#: models.py:1775 msgid "Split character(s)" msgstr "" -#: models.py:1738 +#: models.py:1779 msgid "Importer - Formater type" msgstr "" -#: models.py:1739 +#: models.py:1780 msgid "Importer - Formater types" msgstr "" -#: models.py:1786 templates/ishtar/dashboards/dashboard_main_detail.html:61 +#: models.py:1827 templates/ishtar/dashboards/dashboard_main_detail.html:61 msgid "Created" msgstr "" -#: models.py:1787 +#: models.py:1828 msgid "Analyse in progress" msgstr "" -#: models.py:1788 +#: models.py:1829 msgid "Analysed" msgstr "" -#: models.py:1789 +#: models.py:1830 msgid "Import pending" msgstr "" -#: models.py:1790 +#: models.py:1831 msgid "Import in progress" msgstr "" -#: models.py:1791 +#: models.py:1832 msgid "Finished with errors" msgstr "" -#: models.py:1792 +#: models.py:1833 msgid "Finished" msgstr "" -#: models.py:1793 +#: models.py:1834 msgid "Archived" msgstr "" -#: models.py:1805 +#: models.py:1846 msgid "Imported file" msgstr "" -#: models.py:1808 +#: models.py:1849 msgid "Associated images (zip file)" msgstr "" -#: models.py:1810 +#: models.py:1851 msgid "Encoding" msgstr "" -#: models.py:1812 +#: models.py:1853 msgid "Skip lines" msgstr "" -#: models.py:1813 templates/ishtar/import_list.html:47 +#: models.py:1854 templates/ishtar/import_list.html:47 msgid "Error file" msgstr "" -#: models.py:1816 +#: models.py:1857 msgid "Result file" msgstr "" -#: models.py:1819 templates/ishtar/import_list.html:53 +#: models.py:1860 templates/ishtar/import_list.html:53 msgid "Match file" msgstr "" -#: models.py:1825 +#: models.py:1866 msgid "Conservative import" msgstr "" -#: models.py:1830 +#: models.py:1871 msgid "End date" msgstr "" -#: models.py:1832 +#: models.py:1873 msgid "Remaining seconds" msgstr "" -#: models.py:1837 +#: models.py:1878 msgid "Import" msgstr "" -#: models.py:1854 +#: models.py:1895 msgid "Analyse" msgstr "" -#: models.py:1856 models.py:1859 +#: models.py:1897 models.py:1900 msgid "Re-analyse" msgstr "" -#: models.py:1857 +#: models.py:1898 msgid "Launch import" msgstr "" -#: models.py:1860 +#: models.py:1901 msgid "Re-import" msgstr "" -#: models.py:1861 +#: models.py:1902 msgid "Archive" msgstr "" -#: models.py:1863 +#: models.py:1904 msgid "Unarchive" msgstr "" -#: models.py:1996 +#: models.py:2037 msgid "Organizations" msgstr "" -#: models.py:1998 +#: models.py:2039 msgid "Can view all Organizations" msgstr "" -#: models.py:1999 +#: models.py:2040 msgid "Can view own Organization" msgstr "" -#: models.py:2000 +#: models.py:2041 msgid "Can add own Organization" msgstr "" -#: models.py:2002 +#: models.py:2043 msgid "Can change own Organization" msgstr "" -#: models.py:2004 +#: models.py:2045 msgid "Can delete own Organization" msgstr "" -#: models.py:2039 +#: models.py:2080 msgid "Groups" msgstr "" -#: models.py:2044 +#: models.py:2085 msgid "Person types" msgstr "" -#: models.py:2051 +#: models.py:2092 msgid "Mr" msgstr "" -#: models.py:2052 +#: models.py:2093 msgid "Miss" msgstr "" -#: models.py:2053 +#: models.py:2094 msgid "Mr and Mrs" msgstr "" -#: models.py:2054 +#: models.py:2095 msgid "Mrs" msgstr "" -#: models.py:2055 +#: models.py:2096 msgid "Doctor" msgstr "" -#: models.py:2067 +#: models.py:2110 msgid "Contact type" msgstr "" -#: models.py:2070 models.py:2117 +#: models.py:2113 models.py:2160 msgid "Types" msgstr "" -#: models.py:2073 +#: models.py:2116 msgid "Is attached to" msgstr "" -#: models.py:2077 +#: models.py:2120 msgid "Persons" msgstr "" -#: models.py:2079 +#: models.py:2122 msgid "Can view all Persons" msgstr "" -#: models.py:2080 +#: models.py:2123 msgid "Can view own Person" msgstr "" -#: models.py:2081 +#: models.py:2124 msgid "Can add own Person" msgstr "" -#: models.py:2082 +#: models.py:2125 msgid "Can change own Person" msgstr "" -#: models.py:2083 +#: models.py:2126 msgid "Can delete own Person" msgstr "" -#: models.py:2209 +#: models.py:2252 msgid "Ishtar user" msgstr "" -#: models.py:2210 +#: models.py:2253 msgid "Ishtar users" msgstr "" -#: models.py:2255 +#: models.py:2298 msgid "Author types" msgstr "" -#: models.py:2281 +#: models.py:2324 msgid "Source types" msgstr "" -#: models.py:2287 +#: models.py:2330 msgid "Support types" msgstr "" -#: models.py:2293 +#: models.py:2336 msgid "Formats" msgstr "" -#: models.py:2298 +#: models.py:2341 msgid "External ID" msgstr "" -#: models.py:2301 +#: models.py:2344 msgid "Support" msgstr "" -#: models.py:2305 +#: models.py:2348 msgid "Scale" msgstr "" -#: models.py:2319 +#: models.py:2362 msgid "Item number" msgstr "" -#: models.py:2320 +#: models.py:2363 msgid "Ref." msgstr "" -#: models.py:2323 +#: models.py:2366 msgid "Internal ref." msgstr "" -#: models.py:2364 +#: models.py:2407 msgid "Surface (m2)" msgstr "" -#: models.py:2365 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 +#: models.py:2408 templates/sheet_ope.html:46 templates/sheet_ope.html.py:107 msgid "Localisation" msgstr "" -#: models.py:2390 +#: models.py:2433 msgid "Is preventive" msgstr "" -#: models.py:2394 +#: models.py:2437 msgid "Operation types" msgstr "" -#: models.py:2420 +#: models.py:2463 msgid "Preventive" msgstr "" -#: models.py:2421 +#: models.py:2464 msgid "Research" msgstr "" @@ -1207,58 +1218,58 @@ msgstr "" msgid " (...)" msgstr "" -#: views.py:95 +#: views.py:100 msgid "New person" msgstr "" -#: views.py:103 +#: views.py:108 msgid "Person modification" msgstr "" -#: views.py:109 +#: views.py:123 msgid "Person deletion" msgstr "" -#: views.py:120 +#: views.py:134 msgid "New organization" msgstr "" -#: views.py:127 +#: views.py:141 msgid "Organization modification" msgstr "" -#: views.py:133 +#: views.py:147 msgid "Organization deletion" msgstr "" -#: views.py:642 templates/base.html:80 +#: views.py:662 templates/base.html:81 templates/ishtar/basket_list.html:4 #: templates/ishtar/sheet_organization.html:35 -#: templatetags/link_to_window.py:16 +#: templatetags/link_to_window.py:18 msgid "Details" msgstr "" -#: views.py:873 views.py:927 +#: views.py:893 views.py:947 msgid "Operation not permitted." msgstr "" -#: views.py:875 +#: views.py:895 #, python-format msgid "New %s" msgstr "" -#: views.py:946 views.py:1000 +#: views.py:966 views.py:1020 msgid "Operations" msgstr "" -#: views.py:1189 templates/ishtar/import_list.html:43 +#: views.py:1209 templates/ishtar/import_list.html:43 msgid "Link unmatched items" msgstr "" -#: views.py:1204 +#: views.py:1224 msgid "Delete import" msgstr "" -#: views.py:1263 views.py:1279 +#: views.py:1283 views.py:1299 msgid "Corporation manager" msgstr "" @@ -1266,15 +1277,15 @@ msgstr "" msgid "Search..." msgstr "" -#: widgets.py:602 templatetags/window_tables.py:68 +#: widgets.py:604 templatetags/window_tables.py:71 msgid "No results" msgstr "" -#: widgets.py:603 templatetags/window_tables.py:69 +#: widgets.py:605 templatetags/window_tables.py:72 msgid "Loading..." msgstr "" -#: widgets.py:604 +#: widgets.py:606 msgid "Remove" msgstr "" @@ -1325,55 +1336,58 @@ msgstr "" msgid "The %(app_name)s team" msgstr "" -#: templates/base.html:34 +#: templates/base.html:35 msgid "Logged in" msgstr "" -#: templates/base.html:35 +#: templates/base.html:36 msgid "Log out" msgstr "" -#: templates/base.html:36 +#: templates/base.html:37 msgid "Change password" msgstr "" -#: templates/base.html:38 templates/registration/activate.html:10 +#: templates/base.html:39 templates/registration/activate.html:10 #: templates/registration/login.html:8 templates/registration/login.html:10 #: templates/registration/password_reset_complete.html:8 msgid "Log in" msgstr "" -#: templates/base.html:44 +#: templates/base.html:45 msgid "Lang" msgstr "" -#: templates/base.html:44 templates/base.html.py:91 -#: templates/ishtar/blocks/window_field.html:2 -#: templates/ishtar/blocks/window_field_multiple.html:2 -#: templates/ishtar/blocks/window_field_url.html:2 +#: templates/base.html:45 templates/base.html.py:92 templates/welcome.html:7 +#: templates/welcome.html.py:8 templates/welcome.html:9 +#: templates/welcome.html.py:10 templates/ishtar/manage_basket.html:4 +#: templates/ishtar/blocks/window_field.html:1 +#: templates/ishtar/blocks/window_field_detail.html:1 +#: templates/ishtar/blocks/window_field_multiple.html:1 +#: templates/ishtar/blocks/window_field_url.html:1 msgid ":" msgstr "" -#: templates/base.html:69 +#: templates/base.html:70 msgid "Default selected items" msgstr "" -#: templates/base.html:89 +#: templates/base.html:90 msgid "Current items" msgstr "" #: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10 -#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1 +#: templates/ishtar/sheet_toolbar.html:1 msgid "Export as:" msgstr "" #: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10 -#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1 +#: templates/ishtar/sheet_toolbar.html:1 msgid "OpenOffice.org file" msgstr "" #: templates/sheet_ope.html:4 templates/ishtar/sheet_organization.html:10 -#: templates/ishtar/sheet_person.html:10 templates/ishtar/sheet_toolbar.html:1 +#: templates/ishtar/sheet_toolbar.html:1 msgid "PDF file" msgstr "" @@ -1561,7 +1575,7 @@ msgstr "" msgid "Documentation" msgstr "" -#: templates/sheet_ope.html:102 templates/ishtar/sheet_person.html:91 +#: templates/sheet_ope.html:102 templates/ishtar/sheet_person.html:87 msgid "Documents" msgstr "" @@ -1585,7 +1599,56 @@ msgstr "" msgid "No context record associated to this operation" msgstr "" +#: templates/welcome.html:4 +msgid "" +"Welcome in Ishtar, open source software for management and inventory of " +"archaeological data" +msgstr "" + +#: templates/welcome.html:5 +msgid "Some useful links:" +msgstr "" + +#: templates/welcome.html:7 +msgid "Presentation site and blog" +msgstr "" + +#: templates/welcome.html:7 +msgid "stay tuned with Ishtar news!" +msgstr "" + +#: templates/welcome.html:8 +msgid "Admin interface" +msgstr "" + +#: templates/welcome.html:8 +msgid "for admin only." +msgstr "" + +#: templates/welcome.html:9 +msgid "Forum" +msgstr "" + +#: templates/welcome.html:9 +msgid "" +"need help? find a new bug? a fantastic feature to propose? Here is the place " +"to go." +msgstr "" + +#: templates/welcome.html:10 +msgid "Source code" +msgstr "" + +#: templates/welcome.html:10 +msgid "tickets" +msgstr "" + +#: templates/welcome.html:10 +msgid "where the magic happens." +msgstr "" + #: templates/window.html:38 templates/blocks/JQueryJqGrid.html:25 +#: templates/ishtar/manage_basket.html:9 msgid "Add" msgstr "" @@ -1622,7 +1685,7 @@ msgstr "" msgid "full" msgstr "" -#: templates/blocks/JQueryJqGrid.html:95 +#: templates/blocks/JQueryJqGrid.html:96 #: templates/ishtar/blocks/window_tables/dynamic_documents.html:42 msgid "An error as occured during search. Check your query fields." msgstr "" @@ -1648,8 +1711,13 @@ msgstr "" msgid "Help" msgstr "" +#: templates/ishtar/basket_list.html:6 +msgid "remove" +msgstr "" + #: templates/ishtar/form.html:10 templates/ishtar/formset.html:8 #: templates/ishtar/import_list.html:58 templates/ishtar/merge.html:31 +#: templates/ishtar/simple_form.html:7 #: templates/ishtar/wizard/confirm_wizard.html:42 #: templates/ishtar/wizard/default_wizard.html:30 #: templates/ishtar/wizard/search.html:13 @@ -1698,6 +1766,14 @@ msgstr "" msgid "Control file" msgstr "" +#: templates/ishtar/manage_basket.html:7 +msgid "Checking \"Select all\" only select the current page." +msgstr "" + +#: templates/ishtar/manage_basket.html:10 +msgid "Basket content" +msgstr "" + #: templates/ishtar/merge.html:7 msgid "Every operation on this form is irreversible" msgstr "" @@ -1729,6 +1805,7 @@ msgstr "" #: templates/ishtar/organization_form.html:37 #: templates/ishtar/organization_person_form.html:32 #: templates/ishtar/person_form.html:43 +#: templates/ishtar/blocks/modify_toolbar.html:1 msgid "Modify" msgstr "" @@ -1788,49 +1865,49 @@ msgstr "" msgid "No person in this organization" msgstr "" -#: templates/ishtar/sheet_person.html:25 +#: templates/ishtar/sheet_person.html:21 #: templates/ishtar/wizard/wizard_person.html:19 msgid "Phone type" msgstr "" -#: templates/ishtar/sheet_person.html:48 +#: templates/ishtar/sheet_person.html:44 #: templates/ishtar/wizard/wizard_person.html:42 msgid "Business address" msgstr "" -#: templates/ishtar/sheet_person.html:56 +#: templates/ishtar/sheet_person.html:52 #: templates/ishtar/wizard/wizard_person.html:51 msgid "Other address" msgstr "" -#: templates/ishtar/sheet_person.html:64 +#: templates/ishtar/sheet_person.html:60 msgid "Associated organization" msgstr "" -#: templates/ishtar/sheet_person.html:75 +#: templates/ishtar/sheet_person.html:71 msgid "Associated operations as scientist" msgstr "" -#: templates/ishtar/sheet_person.html:79 +#: templates/ishtar/sheet_person.html:75 msgid "Associated operations as responsible" msgstr "" -#: templates/ishtar/sheet_person.html:85 +#: templates/ishtar/sheet_person.html:81 msgid "Associated archaelogical files" msgstr "" -#: templates/ishtar/sheet_person.html:96 -#: templates/ishtar/sheet_person.html:104 +#: templates/ishtar/sheet_person.html:92 +#: templates/ishtar/sheet_person.html:100 #: templates/ishtar/blocks/window_tables/documents.html:9 #: templates/ishtar/blocks/window_tables/documents.html:17 msgid "Link" msgstr "" -#: templates/ishtar/sheet_person.html:108 +#: templates/ishtar/sheet_person.html:104 msgid "No document associated to this person" msgstr "" -#: templates/ishtar/blocks/window_field_url.html:3 +#: templates/ishtar/blocks/window_field_url.html:2 msgid "link" msgstr "" diff --git a/ishtar_common/migrations/0051_auto__add_field_ishtarsiteprofile_homepage.py b/ishtar_common/migrations/0051_auto__add_field_ishtarsiteprofile_homepage.py new file mode 100644 index 000000000..7f8c65857 --- /dev/null +++ b/ishtar_common/migrations/0051_auto__add_field_ishtarsiteprofile_homepage.py @@ -0,0 +1,404 @@ +# -*- 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 'IshtarSiteProfile.homepage' + db.add_column('ishtar_common_ishtarsiteprofile', 'homepage', + self.gf('django.db.models.fields.TextField')(null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'IshtarSiteProfile.homepage' + db.delete_column('ishtar_common_ishtarsiteprofile', 'homepage') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'ishtar_common.arrondissement': { + 'Meta': {'object_name': 'Arrondissement'}, + 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.author': { + 'Meta': {'object_name': 'Author'}, + 'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'author'", 'to': "orm['ishtar_common.Person']"}) + }, + 'ishtar_common.authortype': { + 'Meta': {'object_name': 'AuthorType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.canton': { + 'Meta': {'object_name': 'Canton'}, + 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.department': { + 'Meta': {'ordering': "['number']", 'object_name': 'Department'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}), + 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.State']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.documenttemplate': { + 'Meta': {'ordering': "['associated_object_name', 'name']", 'object_name': 'DocumentTemplate'}, + 'associated_object_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'template': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'ishtar_common.format': { + 'Meta': {'object_name': 'Format'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.formatertype': { + 'Meta': {'ordering': "('formater_type', 'options')", 'unique_together': "(('formater_type', 'options', 'many_split'),)", 'object_name': 'FormaterType'}, + 'formater_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'many_split': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'options': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.globalvar': { + 'Meta': {'ordering': "['slug']", 'object_name': 'GlobalVar'}, + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.historicalorganization': { + 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOrganization'}, + 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}), + 'history_creator_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}), + 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'organization_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.import': { + 'Meta': {'object_name': 'Import'}, + 'conservative_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "'utf-8'", 'max_length': '15'}), + 'end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'error_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imported_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'imported_images': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.ImporterType']"}), + 'match_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'result_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'seconds_remaining': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skip_lines': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']"}) + }, + 'ishtar_common.importercolumn': { + 'Meta': {'ordering': "('importer_type', 'col_number')", 'unique_together': "(('importer_type', 'col_number'),)", 'object_name': 'ImporterColumn'}, + 'col_number': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'columns'", 'to': "orm['ishtar_common.ImporterType']"}), + 'regexp_pre_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}), + 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'ishtar_common.importerdefault': { + 'Meta': {'object_name': 'ImporterDefault'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'importer_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'defaults'", 'to': "orm['ishtar_common.ImporterType']"}), + 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}) + }, + 'ishtar_common.importerdefaultvalues': { + 'Meta': {'object_name': 'ImporterDefaultValues'}, + 'default_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_values'", 'to': "orm['ishtar_common.ImporterDefault']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '500'}) + }, + 'ishtar_common.importerduplicatefield': { + 'Meta': {'object_name': 'ImporterDuplicateField'}, + 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'duplicate_fields'", 'to': "orm['ishtar_common.ImporterColumn']"}), + 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}), + 'field_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'ishtar_common.importertype': { + 'Meta': {'object_name': 'ImporterType'}, + 'associated_models': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_template': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '100', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'unicity_keys': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.importtarget': { + 'Meta': {'object_name': 'ImportTarget'}, + 'column': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'targets'", 'to': "orm['ishtar_common.ImporterColumn']"}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'concat': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'concat_str': ('django.db.models.fields.CharField', [], {'max_length': '5', 'null': 'True', 'blank': 'True'}), + 'force_new': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'formater_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.FormaterType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'regexp_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Regexp']", 'null': 'True', 'blank': 'True'}), + 'target': ('django.db.models.fields.CharField', [], {'max_length': '500'}) + }, + 'ishtar_common.ishtarsiteprofile': { + 'Meta': {'ordering': "['label']", 'object_name': 'IshtarSiteProfile'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'context_record': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'files': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'find': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'homepage': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.TextField', [], {}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'warehouse': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'ishtar_common.ishtaruser': { + 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']}, + 'person': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ishtaruser'", 'unique': 'True', 'to': "orm['ishtar_common.Person']"}), + 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'ishtar_common.itemkey': { + 'Meta': {'object_name': 'ItemKey'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'importer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}) + }, + 'ishtar_common.operationtype': { + 'Meta': {'ordering': "['-preventive', 'order', 'label']", 'object_name': 'OperationType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'preventive': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.organization': { + 'Meta': {'object_name': 'Organization'}, + 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}), + 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}), + 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_organization'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}), + 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}), + 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Organization']"}), + 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.organizationtype': { + 'Meta': {'ordering': "('label',)", 'object_name': 'OrganizationType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.person': { + 'Meta': {'object_name': 'Person'}, + 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'alt_address_is_prefered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'alt_country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'alt_postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'alt_town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}), + 'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'members'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['ishtar_common.Organization']"}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'contact_type': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'exclude_from_merge': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}), + 'history_creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}), + 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['auth.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imports': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'imported_ishtar_common_person'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['ishtar_common.Import']"}), + 'merge_candidate': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_candidate_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}), + 'merge_exclusion': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'merge_exclusion_rel_+'", 'null': 'True', 'to': "orm['ishtar_common.Person']"}), + 'merge_key': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'person_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.PersonType']", 'symmetrical': 'False'}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone2': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone3': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'phone_desc': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'phone_desc2': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'phone_desc3': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'raw_name': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True', 'blank': 'True'}), + 'raw_phone': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'surname': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'town': ('django.db.models.fields.CharField', [], {'max_length': '70', 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.persontype': { + 'Meta': {'ordering': "('label',)", 'object_name': 'PersonType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.regexp': { + 'Meta': {'object_name': 'Regexp'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'regexp': ('django.db.models.fields.CharField', [], {'max_length': '500'}) + }, + 'ishtar_common.sourcetype': { + 'Meta': {'object_name': 'SourceType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.state': { + 'Meta': {'ordering': "['number']", 'object_name': 'State'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}) + }, + 'ishtar_common.supporttype': { + 'Meta': {'object_name': 'SupportType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}) + }, + 'ishtar_common.targetkey': { + 'Meta': {'unique_together': "(('target', 'key', 'associated_user', 'associated_import'),)", 'object_name': 'TargetKey'}, + 'associated_import': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Import']", 'null': 'True', 'blank': 'True'}), + 'associated_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.IshtarUser']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_set': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'key': ('django.db.models.fields.TextField', [], {}), + 'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'keys'", 'to': "orm['ishtar_common.ImportTarget']"}), + 'value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.town': { + 'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'}, + 'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}), + 'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}), + 'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}), + 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['ishtar_common']
\ No newline at end of file diff --git a/ishtar_common/models.py b/ishtar_common/models.py index f3974d04d..d8948d3e3 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -552,25 +552,27 @@ class ImageModel(models.Model): filename = os.path.splitext(os.path.split(self.image.name)[-1])[0] old_path = self.image.path filename = "%s.jpg" % filename - image = Image.open(self.image.file) - - # convert to RGB - if image.mode not in ('L', 'RGB'): - image = image.convert('RGB') - - # resize if necessary - self.image.save(filename, - self.create_thumb(image, self.IMAGE_MAX_SIZE), - save=False) - - if old_path != self.image.path: - os.remove(old_path) - - # save the thumbnail - self.thumbnail.save( - '_%s' % filename, - self.create_thumb(image, self.THUMB_MAX_SIZE), - save=False) + try: + image = Image.open(self.image.file) + # convert to RGB + if image.mode not in ('L', 'RGB'): + image = image.convert('RGB') + + # resize if necessary + self.image.save(filename, + self.create_thumb(image, self.IMAGE_MAX_SIZE), + save=False) + + if old_path != self.image.path: + os.remove(old_path) + + # save the thumbnail + self.thumbnail.save( + '_%s' % filename, + self.create_thumb(image, self.THUMB_MAX_SIZE), + save=False) + except IOError: + pass super(ImageModel, self).save(*args, **kwargs) @@ -581,6 +583,8 @@ class HistoryError(Exception): def __str__(self): return repr(self.value) +PRIVATE_FIELDS = ('id', 'history_modifier', 'order') + class BaseHistorizedItem(Imported): IS_BASKET = False @@ -816,6 +820,10 @@ class IshtarSiteProfile(models.Model, Cached): warehouse = models.BooleanField( _(u"Warehouses module"), default=False, help_text=_(u"Need finds module")) + homepage = models.TextField( + _(u"Home page"), null=True, blank=True, + help_text=_(u"Homepage of Ishtar - if not defined a default homepage " + u"will appear. Use the markdown syntax.")) active = models.BooleanField(_(u"Current active"), default=False) class Meta: diff --git a/ishtar_common/static/js/grid.tbltogrid.js b/ishtar_common/static/js/grid.tbltogrid.js new file mode 100644 index 000000000..addab1e48 --- /dev/null +++ b/ishtar_common/static/js/grid.tbltogrid.js @@ -0,0 +1,106 @@ +/* + Transform a table to a jqGrid. + Peter Romianowski <peter.romianowski@optivo.de> + If the first column of the table contains checkboxes or + radiobuttons then the jqGrid is made selectable. +*/ +// Addition - selector can be a class or id +function tableToGrid(selector, options) { +jQuery(selector).each(function() { + if(this.grid) {return;} //Adedd from Tony Tomov + // This is a small "hack" to make the width of the jqGrid 100% + jQuery(this).width("99%"); + var w = jQuery(this).width(); + + // Text whether we have single or multi select + var inputCheckbox = jQuery('tr td:first-child input[type=checkbox]:first', jQuery(this)); + var inputRadio = jQuery('tr td:first-child input[type=radio]:first', jQuery(this)); + var selectMultiple = inputCheckbox.length > 0; + var selectSingle = !selectMultiple && inputRadio.length > 0; + var selectable = selectMultiple || selectSingle; + //var inputName = inputCheckbox.attr("name") || inputRadio.attr("name"); + + // Build up the columnModel and the data + var colModel = []; + var colNames = []; + jQuery('th', jQuery(this)).each(function() { + if (colModel.length === 0 && selectable) { + colModel.push({ + name: '__selection__', + index: '__selection__', + width: 0, + hidden: true + }); + colNames.push('__selection__'); + } else { + colModel.push({ + name: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'), + index: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'), + width: jQuery(this).width() || 150 + }); + colNames.push(jQuery(this).html()); + } + }); + var data = []; + var rowIds = []; + var rowChecked = []; + jQuery('tbody > tr', jQuery(this)).each(function() { + var row = {}; + var rowPos = 0; + jQuery('td', jQuery(this)).each(function() { + if (rowPos === 0 && selectable) { + var input = jQuery('input', jQuery(this)); + var rowId = input.attr("value"); + rowIds.push(rowId || data.length); + if (input.is(":checked")) { + rowChecked.push(rowId); + } + row[colModel[rowPos].name] = input.attr("value"); + } else { + row[colModel[rowPos].name] = jQuery(this).html(); + } + rowPos++; + }); + if(rowPos >0) { data.push(row); } + }); + + // Clear the original HTML table + jQuery(this).empty(); + + // Mark it as jqGrid + jQuery(this).addClass("scroll"); + + jQuery(this).jqGrid(jQuery.extend({ + datatype: "local", + width: w, + colNames: colNames, + colModel: colModel, + multiselect: selectMultiple + //inputName: inputName, + //inputValueCol: imputName != null ? "__selection__" : null + }, options || {})); + + // Add data + var a; + for (a = 0; a < data.length; a++) { + var id = null; + if (rowIds.length > 0) { + id = rowIds[a]; + if (id && id.replace) { + // We have to do this since the value of a checkbox + // or radio button can be anything + id = encodeURIComponent(id).replace(/[.\-%]/g, "_"); + } + } + if (id === null) { + id = a + 1; + } + jQuery(this).jqGrid("addRowData",id, data[a]); + } + + // Set the selection + for (a = 0; a < rowChecked.length; a++) { + jQuery(this).jqGrid("setSelection",rowChecked[a]); + } +}); +}; diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css index 1d47bcbd9..e74a6d205 100644 --- a/ishtar_common/static/media/style.css +++ b/ishtar_common/static/media/style.css @@ -45,7 +45,7 @@ a.add-button, color:#000; } -#context_menu .basket{ +#context_menu option.basket{ color:#000; font-weight: bold; font-style: italic; @@ -434,6 +434,11 @@ div#main_menu > ul > li{ } */ +div#welcome{ + text-align:left; + font-size: 1.2em; +} + div#content{ clear:both; margin-top:190px ; @@ -546,21 +551,20 @@ ul.form-flex { margin: 0; } - ul.form-flex li{ width: 395px; } @media screen and (min-width: 1051px) { div.form, - ul.form-flex { + ul.form-flex{ width: 800px; } } @media screen and (min-width: 1400px) { div.form, - ul.form-flex { + ul.form-flex{ width: 1200px; } } @@ -571,6 +575,10 @@ ul.form-flex label { padding-left: 10px; } +#window ul.form-flex label { + width: 150px; +} + .form table{ padding:0.2em; margin-left:auto; @@ -750,6 +758,10 @@ table.confirm tr.spacer td:last-child{ right:135px; } +a.photo{ + padding: 0.5em; +} + #global-vars textarea{ width:220px; } @@ -898,6 +910,22 @@ table.confirm tr.spacer td:last-child{ font-style:italic; } +#window table.simple td.item-list{ + text-align:left; +} + +table td.item-list span{ + padding: 4px 4px; + background-color: #eee; + margin: 0.2em; + line-height: 26px; + border-radius: 4px; +} + +#window table.simple td.item-list .display_details{ + vertical-align: middle; +} + #window .head{ text-align:center; background-color:#f1f2f6; @@ -946,6 +974,11 @@ table.confirm tr.spacer td:last-child{ width:465px; } +#window ul.form-flex span.value { + display: inline-table; + width: 230px; +} + .strong{ font-weight:bold; } diff --git a/ishtar_common/static/media/style_basic.css b/ishtar_common/static/media/style_basic.css index d624ae09c..1d92928dc 100644 --- a/ishtar_common/static/media/style_basic.css +++ b/ishtar_common/static/media/style_basic.css @@ -85,3 +85,7 @@ p{ width:100%; border-bottom:1px solid #922; } + +.display_details, .display_details_inline{ + display: none; +} diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html index 1bab3d647..8cd3c7793 100644 --- a/ishtar_common/templates/base.html +++ b/ishtar_common/templates/base.html @@ -17,6 +17,7 @@ <script language="javascript" type="text/javascript" src="{{STATIC_URL}}/js/prettyPhoto/js/jquery.prettyPhoto.js"></script> <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/i18n/grid.locale-{{COUNTRY}}.js"></script> <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jquery.jqGrid.min.js"></script> + <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/grid.tbltogrid.js"></script> <script language="javascript" type="text/javascript" src="{{STATIC_URL}}/js/ishtar.js"></script> <link type="text/css" href="{{JQUERY_UI_URL}}jquery-ui.css" rel="stylesheet" /> <link rel="stylesheet" href="{{STATIC_URL}}/js/prettyPhoto/css/prettyPhoto.css" /> @@ -74,7 +75,7 @@ <td> <select class='{{main_cls}}' id='current_{{model_name}}'> <option class='normal' value=''>--</option> - {% for val, label, selected, cls in items %}<option class='{{cls}}' value='{{val}}'{% if selected %} selected="selected"{%endif%}>{{label}}</option> + {% for val, label, selected, cls in items %}<option{% if cls %} class='{{cls}}'{% endif %} value='{{val}}'{% if selected %} selected="selected"{%endif%}>{{label}}</option> {% endfor %}</select> </td>{% with 'show-'|add:model_name as model_url%} <td><a href='#' onclick='load_current_window("{% url model_url 0 %}", "{{model_name}}");' class='display_details'>{% trans "Details" %}</a></td> diff --git a/ishtar_common/templates/index.html b/ishtar_common/templates/index.html index c4c0b0f2a..2b6d7004e 100644 --- a/ishtar_common/templates/index.html +++ b/ishtar_common/templates/index.html @@ -1,2 +1,3 @@ {% extends "base.html" %} {% load i18n %} +{% block content %}<div id='welcome'>{% if homepage %}{{homepage|safe}}{% else %}{% include "welcome.html" %}{% endif %}</div>{% endblock %} diff --git a/ishtar_common/templates/ishtar/blocks/window_field.html b/ishtar_common/templates/ishtar/blocks/window_field.html index 14cf1c21e..969f32dbb 100644 --- a/ishtar_common/templates/ishtar/blocks/window_field.html +++ b/ishtar_common/templates/ishtar/blocks/window_field.html @@ -1,3 +1,3 @@ -{% load i18n %} -{% if data %}<p><label>{% trans caption %}{% trans ":"%}</label> -<span class='value'>{{pre_data|safe}}{{data|linebreaksbr}}{{post_data|safe}}</span></p>{% endif%} +{% load i18n %}{% if data %}{% if li %}<li>{% else %}<p>{% endif %}<label>{% trans caption %}{% trans ":"%}</label> +<span class='value'>{{pre_data|safe}}{{data|linebreaksbr}}{{post_data|safe}}</span>{% if li %}</li>{% else %}</p>{% endif %} +{% endif %} diff --git a/ishtar_common/templates/ishtar/blocks/window_field_detail.html b/ishtar_common/templates/ishtar/blocks/window_field_detail.html new file mode 100644 index 000000000..2be9c5ec4 --- /dev/null +++ b/ishtar_common/templates/ishtar/blocks/window_field_detail.html @@ -0,0 +1,3 @@ +{% load i18n %}{% if item %}{% if li %}<li>{% else %}<p>{% endif %}<label>{% trans caption %}{% trans ":"%}</label> +<span class='value'>{{item}}{{link}}</span>{% if li %}</li>{% else %}</p>{% endif %} +{% endif %} diff --git a/ishtar_common/templates/ishtar/blocks/window_field_multiple.html b/ishtar_common/templates/ishtar/blocks/window_field_multiple.html index 30903b0d5..d1ee25c7b 100644 --- a/ishtar_common/templates/ishtar/blocks/window_field_multiple.html +++ b/ishtar_common/templates/ishtar/blocks/window_field_multiple.html @@ -1,8 +1,6 @@ -{% load i18n %} -{% if data.count %}<p><label>{% trans caption %}{% trans ":"%}</label> +{% load i18n %}{% if data.count %}{% if li %}<li>{% else %}<p>{% endif %}<label>{% trans caption %}{% trans ":"%}</label> <span class='value'>{% for d in data.all %} {% if forloop.counter0 %}, {% endif %}{{ d }} {% endfor %}</span> -</p> +{% if li %}</li>{% else %}</p>{% endif %} {% endif %} - diff --git a/ishtar_common/templates/ishtar/blocks/window_field_url.html b/ishtar_common/templates/ishtar/blocks/window_field_url.html index b91f318b6..637366d1d 100644 --- a/ishtar_common/templates/ishtar/blocks/window_field_url.html +++ b/ishtar_common/templates/ishtar/blocks/window_field_url.html @@ -1,3 +1,3 @@ -{% load i18n %} -{% if link %}<p><label>{% trans caption %}{% trans ":"%}</label> -<span class='value'><a target="_blank" href='{{link|safe}}'>{% if link_name %}{{link_name}}{% else %}{% trans "link" %}{% endif %}</a></span></p>{% endif%} +{% load i18n %}{% if link %}{% if li %}<li>{% else %}<p>{% endif %}<p><label>{% trans caption %}{% trans ":"%}</label> +<span class='value'><a target="_blank" href='{{link|safe}}'>{% if link_name %}{{link_name}}{% else %}{% trans "link" %}{% endif %}</a></span>{% if li %}</li>{% else %}</p>{% endif %} +{% endif%} diff --git a/ishtar_common/templates/ishtar/sheet_toolbar.html b/ishtar_common/templates/ishtar/sheet_toolbar.html index 7e2c1659a..a6736b6cc 100644 --- a/ishtar_common/templates/ishtar/sheet_toolbar.html +++ b/ishtar_common/templates/ishtar/sheet_toolbar.html @@ -1,2 +1,2 @@ -{% load i18n link_to_window %}<div class='tool'>{%trans "Export as:"%} <a href='{{item|link_to_odt}}'>{%trans "OpenOffice.org file"%}</a>, <a href='{{item|link_to_pdf}}'>{%trans "PDF file"%}</a></div> +{% load i18n link_to_window %}<div class='tool'>{% trans "Export as:" %} <a href='{{item|link_to_odt}}'>{%trans "OpenOffice.org file"%}</a>, <a href='{{item|link_to_pdf}}'>{%trans "PDF file"%}</a></div> {% modify_toolbar item "person_modification" %} diff --git a/ishtar_common/templates/welcome.html b/ishtar_common/templates/welcome.html new file mode 100644 index 000000000..42935d8f9 --- /dev/null +++ b/ishtar_common/templates/welcome.html @@ -0,0 +1,11 @@ +{% load i18n %} +{% load url from future %} + +<h2>{% trans "Welcome in Ishtar, open source software for management and inventory of archaeological data" %}</h2> +<p>{% trans "Some useful links:" %}</p> +<ul> + <li><a href='https://ishtar-archeo.net' target="_blank">{% trans "Presentation site and blog" %}</a>{% trans ":"%} {% trans "stay tuned with Ishtar news!" %}</li> + <li><a href='{% url 'admin:index' %}' target="_blank">{% trans "Admin interface" %}</a>{% trans ":"%} {% trans "for admin only." %}</li> + <li><a href="https://forum.ishtar-archeo.net/" target="_blank">{% trans "Forum" %}</a>{% trans ":"%} {% trans "need help? find a new bug? a fantastic feature to propose? Here is the place to go." %}</li> + <li><a href="https://gitlab.com/ishtar/ishtar" target="_blank">{% trans "Source code" %}</a> – <a href="https://tickets.iggdrasil.net/projects/ishtar" target="_blank">{% trans "tickets" %}</a>{% trans ":"%} {% trans "where the magic happens." %}</li> +</ul> diff --git a/ishtar_common/templatetags/link_to_window.py b/ishtar_common/templatetags/link_to_window.py index 5ff928bb1..009a089d2 100644 --- a/ishtar_common/templatetags/link_to_window.py +++ b/ishtar_common/templatetags/link_to_window.py @@ -3,6 +3,7 @@ from django.core.urlresolvers import reverse from django.template import Library +from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ register = Library() @@ -10,10 +11,11 @@ register = Library() @register.filter def link_to_window(item): - return u' <a class="display_details" href="#" '\ - 'onclick="load_window(\'{}\')">{}</a>'.format( + return mark_safe( + u' <a class="display_details" href="#" ' + u'onclick="load_window(\'{}\')">{}</a>'.format( reverse(item.SHOW_URL, args=[item.pk, '']), - _("Details")) + _("Details"))) @register.filter diff --git a/ishtar_common/templatetags/window_field.py b/ishtar_common/templatetags/window_field.py index 34071f60f..9ce2cf6b6 100644 --- a/ishtar_common/templatetags/window_field.py +++ b/ishtar_common/templatetags/window_field.py @@ -1,26 +1,53 @@ from django import template from django.utils.translation import ugettext_lazy as _ +from ishtar_common.templatetags.link_to_window import link_to_window register = template.Library() @register.inclusion_tag('ishtar/blocks/window_field.html') -def field(caption, data, pre_data='', post_data=''): +def field(caption, data, pre_data='', post_data='', li=False): if data in (True, False): data = _(unicode(data)) return {'caption': caption, 'data': data, "pre_data": pre_data, - 'post_data': post_data} + 'post_data': post_data, 'li': li} + + +@register.inclusion_tag('ishtar/blocks/window_field.html') +def field_li(caption, data, pre_data='', post_data=''): + return field(caption, data, pre_data, post_data, li=True) @register.inclusion_tag('ishtar/blocks/window_field_url.html') -def field_url(caption, link, link_name=''): +def field_url(caption, link, link_name='', li=False): if not link: return u'' if not link.startswith('http://'): link = 'http://' + link - return {'caption': caption, 'link': link, "link_name": link_name} + return {'caption': caption, 'link': link, "link_name": link_name, 'li': li} + + +@register.inclusion_tag('ishtar/blocks/window_field_url.html') +def field_li_url(caption, link, link_name=''): + return field_url(caption, link, link_name, li=True) @register.inclusion_tag('ishtar/blocks/window_field_multiple.html') -def field_multiple(caption, data): - return {'caption': caption, 'data': data} +def field_multiple(caption, data, li=False): + return {'caption': caption, 'data': data, 'li': li} + + +@register.inclusion_tag('ishtar/blocks/window_field_multiple.html') +def field_li_multiple(caption, data): + return field_multiple(caption, data, li=True) + + +@register.inclusion_tag('ishtar/blocks/window_field_detail.html') +def field_detail(caption, item, li=False): + return {'caption': caption, 'item': item, 'link': link_to_window(item), + 'li': li} + + +@register.inclusion_tag('ishtar/blocks/window_field_detail.html') +def field_li_detail(caption, item): + return field_detail(caption, item, li=True) diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 59cfe6321..d508444a4 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -24,6 +24,7 @@ import cStringIO as StringIO import datetime import ho.pisa as pisa import json +from markdown import markdown import optparse import re from tempfile import NamedTemporaryFile @@ -61,7 +62,8 @@ from archaeological_files.forms import DashboardForm as DashboardFormFile from ishtar_common.forms import FinalForm, FinalDeleteForm from ishtar_common import forms_common as forms from ishtar_common import wizards -from ishtar_common.models import HistoryError +from ishtar_common.models import HistoryError, PRIVATE_FIELDS, \ + get_current_profile import models @@ -74,6 +76,9 @@ def index(request): Main page """ dct = {} + profile = get_current_profile() + if hasattr(profile, 'homepage') and profile.homepage: + dct['homepage'] = markdown(profile.homepage) try: return render_to_response('index.html', dct, context_instance=RequestContext(request)) @@ -325,7 +330,6 @@ def format_val(val): HIERARCHIC_LEVELS = 5 HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_types', 'material_type', 'conservatory_state'] -PRIVATE_FIELDS = ('id', 'history_modifier', 'order') def get_item(model, func_name, default_name, extra_request_keys=[], |
