Merge branch 'dev'

# Conflicts:
#	.gitignore
#	app/conf/uwsgi_zuykov.conf.template
#	trademark/templates/trademark/registration.html
#	trademark/views.py
master
Alexander Kondratyev 9 years ago
commit 86f46363a2
  1. 7
      .gitignore
  2. 22
      README.md
  3. 297
      app/conf/nginx.conf.template
  4. 4
      app/conf/uwsgi_zuykov.conf.template
  5. 9
      app/deploy/debian.py
  6. 60
      app/deploy/tasks.py
  7. 49
      app/deploy/zuykov.py
  8. 35505
      app/dump/zuykov_2017-02-20_no-trademarks-content.sql
  9. 79
      app/requirements.txt
  10. 9
      app/settings.py
  11. 46
      blog/static/blog/css/djangocms_blog_admin.css
  12. 43
      djangocms_forms/static/css/djangocms_forms/admin/djangocms_forms.css
  13. 53
      djangocms_forms/static/js/djangocms_forms/admin/jquery-form-export.js
  14. 66
      djangocms_forms/static/js/djangocms_forms/admin/jquery-inline-collapsible.js
  15. 95
      djangocms_forms/static/js/djangocms_forms/admin/jquery-inline-positioning.js
  16. 45
      djangocms_forms/static/js/djangocms_forms/admin/jquery-inline-rename.js
  17. 35
      djangocms_forms/static/js/djangocms_forms/admin/jquery-inline-toggle-fields.js
  18. 109
      djangocms_forms/static/js/djangocms_forms/djangocms_forms.js
  19. 13
      djangocms_forms/static/js/djangocms_forms/libs/jquery-ui.min.js
  20. 11
      djangocms_forms/static/js/djangocms_forms/libs/jquery.form.min.js
  21. 4
      djangocms_forms/static/js/djangocms_forms/libs/jquery.min.js
  22. 139
      npm-debug.log
  23. 0
      packages/__init__.py
  24. 2
      packages/aldryn_people/__init__.py
  25. 3
      packages/aldryn_people/admin/__init__.py
  26. 42
      packages/aldryn_people/admin/base.py
  27. 64
      packages/aldryn_people/admin/models_admin.py
  28. 17
      packages/aldryn_people/boilerplates/bootstrap3/templates/aldryn_people/includes/people_item.html
  29. 7
      packages/aldryn_people/boilerplates/bootstrap3/templates/aldryn_people/includes/people_items.html
  30. 9
      packages/aldryn_people/boilerplates/bootstrap3/templates/aldryn_people/person_detail.html
  31. 27
      packages/aldryn_people/boilerplates/bootstrap3/templates/aldryn_people/plugins/feature/people_list.html
  32. 27
      packages/aldryn_people/boilerplates/bootstrap3/templates/aldryn_people/plugins/people_list.html
  33. 27
      packages/aldryn_people/boilerplates/bootstrap3/templates/aldryn_people/plugins/standard/people_list.html
  34. 17
      packages/aldryn_people/boilerplates/legacy/templates/aldryn_people/includes/people_item.html
  35. 7
      packages/aldryn_people/boilerplates/legacy/templates/aldryn_people/includes/people_items.html
  36. 9
      packages/aldryn_people/boilerplates/legacy/templates/aldryn_people/person_detail.html
  37. 27
      packages/aldryn_people/boilerplates/legacy/templates/aldryn_people/plugins/feature/people_list.html
  38. 27
      packages/aldryn_people/boilerplates/legacy/templates/aldryn_people/plugins/people_list.html
  39. 27
      packages/aldryn_people/boilerplates/legacy/templates/aldryn_people/plugins/standard/people_list.html
  40. 16
      packages/aldryn_people/cms_app.py
  41. 50
      packages/aldryn_people/cms_plugins.py
  42. 30
      packages/aldryn_people/forms.py
  43. 119
      packages/aldryn_people/migrations/0001_initial.py
  44. 34
      packages/aldryn_people/migrations/0002_auto_20150128_1411.py
  45. 21
      packages/aldryn_people/migrations/0003_auto_20150425_2103.py
  46. 34
      packages/aldryn_people/migrations/0004_auto_20150622_1606.py
  47. 0
      packages/aldryn_people/migrations/__init__.py
  48. 248
      packages/aldryn_people/models.py
  49. 34
      packages/aldryn_people/search_indexes.py
  50. 159
      packages/aldryn_people/south_migrations/0001_initial.py
  51. 169
      packages/aldryn_people/south_migrations/0002_auto__add_field_person_visual.py
  52. 164
      packages/aldryn_people/south_migrations/0003_auto__add_field_peopleplugin_sort_value.py
  53. 165
      packages/aldryn_people/south_migrations/0004_auto__add_field_grouptranslation_company_description.py
  54. 166
      packages/aldryn_people/south_migrations/0005_auto__add_field_peopleplugin_group_by_group.py
  55. 167
      packages/aldryn_people/south_migrations/0006_auto__add_field_peopleplugin_show_links.py
  56. 168
      packages/aldryn_people/south_migrations/0007_auto__add_field_person_slug.py
  57. 185
      packages/aldryn_people/south_migrations/0008_prefill_slugs.py
  58. 176
      packages/aldryn_people/south_migrations/0009_rename_tables_because_of_new_cms.py
  59. 169
      packages/aldryn_people/south_migrations/0010_auto__add_field_peopleplugin_style.py
  60. 170
      packages/aldryn_people/south_migrations/0011_auto__add_field_group_email.py
  61. 164
      packages/aldryn_people/south_migrations/0012_auto__del_field_persontranslation_comment__add_field_persontranslation.py
  62. 171
      packages/aldryn_people/south_migrations/0013_auto__add_field_person_vcard_enabled.py
  63. 172
      packages/aldryn_people/south_migrations/0014_auto__add_field_peopleplugin_show_vcard.py
  64. 182
      packages/aldryn_people/south_migrations/0015_auto__chg_field_group_phone__chg_field_person_mobile__chg_field_person.py
  65. 200
      packages/aldryn_people/south_migrations/0016_auto__add_field_group_fax__add_field_group_website__add_field_person_f.py
  66. 177
      packages/aldryn_people/south_migrations/0017_auto__add_field_person_user.py
  67. 175
      packages/aldryn_people/south_migrations/0018_auto__chg_field_persontranslation_description.py
  68. 173
      packages/aldryn_people/south_migrations/0019_remove_confusing_company_prefix.py
  69. 0
      packages/aldryn_people/south_migrations/__init__.py
  70. 1
      packages/aldryn_people/templatetags/__init__.py
  71. 18
      packages/aldryn_people/templatetags/aldryn_people_tags.py
  72. 172
      packages/aldryn_people/tests/__init__.py
  73. 31
      packages/aldryn_people/tests/test_admin.py
  74. 34
      packages/aldryn_people/tests/test_app_hook.py
  75. 201
      packages/aldryn_people/tests/test_models.py
  76. 48
      packages/aldryn_people/tests/test_plugins.py
  77. 49
      packages/aldryn_people/tests/test_search_indexes.py
  78. 34
      packages/aldryn_people/tests/test_views.py
  79. 38
      packages/aldryn_people/tests/urls.py
  80. 18
      packages/aldryn_people/urls.py
  81. 14
      packages/aldryn_people/utils.py
  82. 32
      packages/aldryn_people/views.py
  83. 3
      packages/aldryn_segmentation/__init__.py
  84. 41
      packages/aldryn_segmentation/admin.py
  85. 5
      packages/aldryn_segmentation/cms_plugins/__init__.py
  86. 124
      packages/aldryn_segmentation/cms_plugins/segment_limiter.py
  87. 68
      packages/aldryn_segmentation/cms_plugins/segment_plugin_base.py
  88. 85
      packages/aldryn_segmentation/cms_plugins/segment_plugins.py
  89. 20
      packages/aldryn_segmentation/cms_toolbar.py
  90. BIN
      packages/aldryn_segmentation/locale/fr/LC_MESSAGES/django.mo
  91. 171
      packages/aldryn_segmentation/locale/fr/LC_MESSAGES/django.po
  92. 125
      packages/aldryn_segmentation/migrations/0001_initial.py
  93. 0
      packages/aldryn_segmentation/migrations/__init__.py
  94. 241
      packages/aldryn_segmentation/models.py
  95. 4
      packages/aldryn_segmentation/segment_pool/__init__.py
  96. 600
      packages/aldryn_segmentation/segment_pool/segment_pool.py
  97. 44
      packages/aldryn_segmentation/segment_pool/signals.py
  98. 64
      packages/aldryn_segmentation/segment_pool/unaccent.py
  99. 7
      packages/aldryn_segmentation/templates/aldryn_segmentation/_limiter.html
  100. 2
      packages/aldryn_segmentation/templates/aldryn_segmentation/_segment.html
  101. Some files were not shown because too many files have changed in this diff Show More

7
.gitignore vendored

@ -1,11 +1,6 @@
static/ static/
*.pyc *.pyc
<<<<<<< HEAD
frontend/static/*
zsite/static/vendor/*
=======
frontend/static/ frontend/static/
zsite/static/vendor/ zsite/static/vendor/
_env/ _env/
media/ media/
>>>>>>> 7b75258... Поправил поиск по всем классам

@ -0,0 +1,22 @@
# zuykov
Zuykov and partners — Web Site
## Установка и запуск
Нужен установленный pip, virtualenv, mysql сервер с дампом базы из **app/dump** в таблицу zuykov.
```
$ git clone -b dev https://github.com/fefa4ka/zuykov/
$ cd zuykov
$ virtualenv _env
$ source _env/bin/activate
```
Часть внешник пакетов лежит в папке packages, нужно её связаться с PYTHONPATH
```
$ pip install -r app/requirements.txt
```
### Запуск
```
$ ./manage.py runserver
```

@ -2,47 +2,6 @@ upstream django_zuykov {
server unix:///home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/wsgi.sock; server unix:///home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/wsgi.sock;
} }
map $request_uri $new_uri {
default "";
/ http://zuykov.com/ru/;
/about/ http://zuykov.com/ru/about/;
/about/employers/ http://zuykov.com/ru/about/employees/;
/avtorskie_prava_book/ http://zuykov.com/ru/copyright/registration/;
/avtorskie_prava_song/ http://zuykov.com/ru/copyright/registration/;
/calculator/ http://zuykov.com/ru/;
/clients/ http://zuykov.com/ru/about/our-clients/;
/contact/ http://zuykov.com/ru/about/contacts/;
/contacts/ http://zuykov.com/ru/about/contacts/;
/contracts/ http://zuykov.com/ru/agreements/;
/contracts/dogovor_ustupki/ http://zuykov.com/ru/agreements/alienation-agreement/;
/contracts/license_agreement/ http://zuykov.com/ru/agreements/licenzionnyj-dogovor/;
/copyright/ http://zuykov.com/ru/copyright/;
/employers/ http://zuykov.com/ru/about/employees/;
/patents/ http://zuykov.com/ru/patents/;
/programs/ http://zuykov.com/ru/software/;
/request/ http://zuykov.com/ru/trademarks/;
/trademarks/ http://zuykov.com/ru/trademarks/;
/courts/zashchita-delovoi-reputacii/ http://zuykov.com/ru/courts/zashita-delovoj-reputacii/;
/courts/zashchita-osparivanie-patenta/ http://zuykov.com/ru/courts/zashita-prav-na-patent/;
/intellect_protection/ http://zuykov.com/ru/copyright/copyright-theory/copyright-origin/;
/internet_defence/ http://zuykov.com/ru/copyright/copyright-theory/copyright-origin/;
/patents/patents-industrial_samples/ http://zuykov.com/ru/design-patents/patentovanie-dizajna-i-promyshlennyh-obrazcov/;
/patents/patents-inventions/ http://zuykov.com/ru/patents/patentovanie-izobretenij-i-poleznyh-modelej/;
/patents/patents-useful_models/ http://zuykov.com/ru/patents/patentovanie-izobretenij-i-poleznyh-modelej/;
/spory_v_sude/ http://zuykov.com/ru/trademarks/theory/zachem-registrirovat-tovarnyj-znak/;
/trademark_defence/ http://zuykov.com/ru/trademarks/theory/zachem-registrirovat-tovarnyj-znak/;
/trademarks/brand_registration/ http://zuykov.com/ru/trademarks/registraciya-tovarnogo-znaka/;
/trademarks/logo_registration/ http://zuykov.com/ru/trademarks/registraciya-tovarnogo-znaka/;
/trademarks/poisk_trademark/ http://zuykov.com/ru/trademarks/poisk-tovarnogo-znaka/;
/trademarks/prodlenie_trademark/ http://zuykov.com/ru/trademarks/prodlenie-tovarnogo-znaka/;
/trademarks/razrabotka-tovarnogo-znaka/ http://zuykov.com/ru/trademarks/razrabotka-tovarnogo-znaka/;
/trademarks/trademark_registration/ http://zuykov.com/ru/trademarks/registraciya-tovarnogo-znaka/;
/trademarks/vnesenie-v-tamozhennyi-reestr/ http://zuykov.com/ru/trademarks/tamozhennyj-reestr/;
/trademarks/international_trademark_protect/ http://zuykov.com/ru/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/;
}
server { server {
return 404; return 404;
@ -53,66 +12,96 @@ server {
server_name dev.zuykov.com zuykov.ru www.zuykov.ru www.zuykov.com dev.zuykov.com; server_name dev.zuykov.com zuykov.ru www.zuykov.ru www.zuykov.com dev.zuykov.com;
location /robots.txt { location /robots.txt {
alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/static/robots.txt;
}
location / {
return 301 http://zuykov.com$1 ;
}
if ($new_uri != "") { alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/static/robots.txt;
rewrite ^(.*)$ $new_uri permanent;
} }
rewrite ^(/trademarks/mezhdunarodnaya) http://zuykov.com/ru/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /contracts/registracyia-dogovora-commercheskoi-koncessii/ http://zuykov.com/ru/agreements/dogovor-franshizy-i-koncessii/ permanent;
rewrite /trademarks/obshcheisvestnyi-tovarnyi-znak/$ http://zuykov.com/ru/trademarks/obsheizvestnyj-tovarnyj-znak/ permanent;
rewrite /trademarks/international_trademark_protect/$ http://zuykov.com/ru/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /trademarks/international_trademark_registration/$ http://zuykov.com/ru/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /trademarks/podacha-zayavki-na-registraciu-tovarnogo-znaka/$ http://zuykov.com/ru/trademarks/theory/process-registracii-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-delovoi-reputacii/$ http://zuykov.com/ru/courts/zashita-delovoj-reputacii/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/$ http://zuykov.com/ru/copyright/protect/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/otvetstvennost-za-nezakonnoe-ispolsovanie-avtorski/$ http://zuykov.com/ru/copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/priznanie-avtorskogo-prava-v-sude/$ http://zuykov.com/ru/copyright/priznanie-avtorskih-prav/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/ustanovlenie-pravoobladatelia/$ http://zuykov.com/ru/copyright/establishment-owner/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/zaschita-avtorskih-i-smejnyh-prav-v-sude/$ http://zuykov.com/ru/copyright/protect/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/$ http://zuykov.com/ru/courts/zashita-prav-na-patent/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/$ http://zuykov.com/ru/courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/nedobrosovesnaya-konkurrenciya-priobretenie-patent/$ http://zuykov.com/ru/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/osparivanie-reshenij-rospatent-patent-intellectual/$ http://zuykov.com/ru/courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/osparivanie-zashchita-patenta-rospatent/$ http://zuykov.com/ru/courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/$ http://zuykov.com/ru/courts/zashita-prav-na-patent/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/otvetstvennost-nezakonnoe-ispolzovanie-patenta/$ http://zuykov.com/ru/copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/priznanie-nedobrosovestnoi-konkurenciej-patenta/$ http://zuykov.com/ru/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/zashchita-prav-na-patent-v-policii/$ http://zuykov.com/ru/courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/zashchita-prav-na-patent-v-sude/$ http://zuykov.com/ru/courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/$ http://zuykov.com/ru/software/zashita-avtorskih-i-isklyuchitelnyh-prav/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/otvetstvennost-nezakonnoe-ispolzovanie-programmy-d/$ http://zuykov.com/ru/copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/priznanie-avtorskogo-prava-na-programmy-v-sude/$ http://zuykov.com/ru/software/priznanie-avtorskih-prav/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/ustanovlenie-pravoobladatelya-programmy/$ http://zuykov.com/ru/software/ustanovlenie-pravoobladatelya/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/zashchita-prav-na-programmu-v-sude/$ http://zuykov.com/ru/software/zashita-avtorskih-i-isklyuchitelnyh-prav/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/$ http://zuykov.com/ru/courts/prekrashenie-dejstviya-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/prekashchenie-tovarnogo-znaka-neispolzovanie/$ http://zuykov.com/ru/trademarks/prekrashenie-dejstviya-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/prekrashchenie-znak-vseobshchee-upotreblenie/$ http://zuykov.com/ru/courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/$ http://zuykov.com/ru/trademarks/osparivanie-deystviya-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/nedobrosovesnaya-konkurrencia-registracyja-priobre/$ http://zuykov.com/ru/courts/osparivanie-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/osparivanie-reshenij-rospatenta-tovarnye-znaki/$ http://zuykov.com/ru/courts/osparivanie-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/osparivanie-zashchita-tovarnogo-znaka-rospatent/$ http://zuykov.com/ru/courts/#trademarks permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/$ http://zuykov.com/ru/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/nedobrosovestnaya-konkurenciya-tovarny-znak/$ http://zuykov.com/ru/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/otvetstvennost-za-nezakonnoe-ispolzovanie-tovarnog/$ http://zuykov.com/ru/copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/zashchita-prav-na-tovarnyi-znak-v-policii/$ http://zuykov.com/ru/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/zashchita-prav-na-tovarnyi-znak-v-sude/$ http://zuykov.com/ru/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /courts/zashchita-ot-nedobrosovestnoi-konkurencii/$ http://zuykov.com/ru/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosov-konkurencii-v-oblast-reklamy/$ http://zuykov.com/ru/courts/ permanent;
rewrite /courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosovestnaya-registraciya/$ http://zuykov.com/ru/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosovestnoe-ispolzovanie/$ http://zuykov.com/ru/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashcita-prav-na-tovarnyi-znak/$ http://zuykov.com/ru/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite ^(/news) http://zuykov.com/ru/about/cases/ permanent;
rewrite ^(/articles) http://zuykov.com/ru/about/articles/ permanent;
rewrite /courts/zashchita-delovoi-reputacii http://zuykov.com/courts/zashita-delovoj-reputacii/ permanent;
rewrite /courts/zashchita-osparivanie-patenta http://zuykov.com/courts/zashita-prav-na-patent/ permanent;
rewrite /intellect_protection http://zuykov.com/copyright/copyright-theory/copyright-origin/ permanent;
rewrite /internet_defence http://zuykov.com/copyright/copyright-theory/copyright-origin/ permanent;
rewrite /patents/patents-industrial_samples http://zuykov.com/design-patents/patentovanie-dizajna-i-promyshlennyh-obrazcov/ permanent;
rewrite /patents/patents-inventions http://zuykov.com/patents/patentovanie-izobretenij-i-poleznyh-modelej/ permanent;
rewrite /patents/patents-useful_models http://zuykov.com/patents/patentovanie-izobretenij-i-poleznyh-modelej/ permanent;
rewrite /spory_v_sude http://zuykov.com/trademarks/theory/zachem-registrirovat-tovarnyj-znak/ permanent;
rewrite /trademark_defence http://zuykov.com/trademarks/theory/zachem-registrirovat-tovarnyj-znak/ permanent;
rewrite /trademarks/brand_registration http://zuykov.com/trademarks/registraciya-tovarnogo-znaka/ permanent;
rewrite /trademarks/logo_registration http://zuykov.com/trademarks/registraciya-tovarnogo-znaka/ permanent;
rewrite /trademarks/poisk_trademark http://zuykov.com/trademarks/poisk-tovarnogo-znaka/ permanent;
rewrite /trademarks/prodlenie_trademark http://zuykov.com/trademarks/prodlenie-tovarnogo-znaka/ permanent;
rewrite /trademarks/razrabotka-tovarnogo-znaka http://zuykov.com/trademarks/razrabotka-tovarnogo-znaka/ permanent;
rewrite /trademarks/trademark_registration http://zuykov.com/trademarks/registraciya-tovarnogo-znaka/ permanent;
rewrite /trademarks/vnesenie-v-tamozhennyi-reestr http://zuykov.com/trademarks/tamozhennyj-reestr/ permanent;
rewrite /trademarks/international_trademark_protect http://zuykov.com/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/;
rewrite ^(/trademarks/mezhdunarodnaya) http://zuykov.com/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /contracts/registracyia-dogovora-commercheskoi-koncessii http://zuykov.com/agreements/dogovor-franshizy-i-koncessii/ permanent;
rewrite /trademarks/obshcheisvestnyi-tovarnyi-znak/$ http://zuykov.com/trademarks/obsheizvestnyj-tovarnyj-znak/ permanent;
rewrite /trademarks/international_trademark_protect/$ http://zuykov.com/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /trademarks/international_trademark_registration/$ http://zuykov.com/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /trademarks/podacha-zayavki-na-registraciu-tovarnogo-znaka/$ http://zuykov.com/trademarks/theory/process-registracii-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-delovoi-reputacii/$ http://zuykov.com/courts/zashita-delovoj-reputacii/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/$ http://zuykov.com/copyright/protect/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/otvetstvennost-za-nezakonnoe-ispolsovanie-avtorski/$ http://zuykov.com/copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/priznanie-avtorskogo-prava-v-sude/$ http://zuykov.com/copyright/priznanie-avtorskih-prav/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/ustanovlenie-pravoobladatelia/$ http://zuykov.com/copyright/establishment-owner/ permanent;
rewrite /courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/zaschita-avtorskih-i-smejnyh-prav-v-sude/$ http://zuykov.com/copyright/protect/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/$ http://zuykov.com/courts/zashita-prav-na-patent/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/$ http://zuykov.com/courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/nedobrosovesnaya-konkurrenciya-priobretenie-patent/$ http://zuykov.com/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/osparivanie-reshenij-rospatent-patent-intellectual/$ http://zuykov.com/courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/osparivanie-zashchita-patenta-rospatent/$ http://zuykov.com/courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/$ http://zuykov.com/courts/zashita-prav-na-patent/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/otvetstvennost-nezakonnoe-ispolzovanie-patenta/$ http://zuykov.com/copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/priznanie-nedobrosovestnoi-konkurenciej-patenta/$ http://zuykov.com/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/zashchita-prav-na-patent-v-policii/$ http://zuykov.com/courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/zashchita-prav-na-patent-v-sude/$ http://zuykov.com/courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/$ http://zuykov.com/software/zashita-avtorskih-i-isklyuchitelnyh-prav/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/otvetstvennost-nezakonnoe-ispolzovanie-programmy-d/$ http://zuykov.com/copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/priznanie-avtorskogo-prava-na-programmy-v-sude/$ http://zuykov.com/software/priznanie-avtorskih-prav/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/ustanovlenie-pravoobladatelya-programmy/$ http://zuykov.com/software/ustanovlenie-pravoobladatelya/ permanent;
rewrite /courts/zashchita-osparivanie-prava-na-programmu/zashchita-prav-na-programmu-v-sude/$ http://zuykov.com/software/zashita-avtorskih-i-isklyuchitelnyh-prav/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/$ http://zuykov.com/courts/prekrashenie-dejstviya-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/prekashchenie-tovarnogo-znaka-neispolzovanie/$ http://zuykov.com/trademarks/prekrashenie-dejstviya-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/prekrashchenie-znak-vseobshchee-upotreblenie/$ http://zuykov.com/courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/$ http://zuykov.com/trademarks/osparivanie-deystviya-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/nedobrosovesnaya-konkurrencia-registracyja-priobre/$ http://zuykov.com/courts/osparivanie-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/osparivanie-reshenij-rospatenta-tovarnye-znaki/$ http://zuykov.com/courts/osparivanie-tovarnogo-znaka/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/osparivanie-zashchita-tovarnogo-znaka-rospatent/$ http://zuykov.com/courts/#trademarks permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/$ http://zuykov.com/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/nedobrosovestnaya-konkurenciya-tovarny-znak/$ http://zuykov.com/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/otvetstvennost-za-nezakonnoe-ispolzovanie-tovarnog/$ http://zuykov.com/copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/zashchita-prav-na-tovarnyi-znak-v-policii/$ http://zuykov.com/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/zashchita-prav-na-tovarnyi-znak-v-sude/$ http://zuykov.com/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /courts/zashchita-ot-nedobrosovestnoi-konkurencii/$ http://zuykov.com/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosov-konkurencii-v-oblast-reklamy/$ http://zuykov.com/courts/ permanent;
rewrite /courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosovestnaya-registraciya/$ http://zuykov.com/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosovestnoe-ispolzovanie/$ http://zuykov.com/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /courts/zashcita-prav-na-tovarnyi-znak/$ http://zuykov.com/courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /about http://zuykov.com/about/ permanent;
rewrite /about/employers http://zuykov.com/about/employees/ permanent;
rewrite /avtorskie_prava_book http://zuykov.com/copyright/registration/ permanent;
rewrite /avtorskie_prava_song http://zuykov.com/copyright/registration/ permanent;
rewrite /calculator http://zuykov.com/ permanent;
rewrite /clients http://zuykov.com/about/our-clients/ permanent;
rewrite /contact http://zuykov.com/about/contacts/ permanent;
rewrite /contacts http://zuykov.com/about/contacts/ permanent;
rewrite /contracts http://zuykov.com/agreements/ permanent;
rewrite /contracts/dogovor_ustupki http://zuykov.com/agreements/alienation-agreement/ permanent;
rewrite /contracts/license_agreement http://zuykov.com/agreements/licenzionnyj-dogovor/ permanent;
rewrite /copyright http://zuykov.com/copyright/ permanent;
rewrite /employers http://zuykov.com/about/employees/ permanent;
rewrite /patents http://zuykov.com/patents/ permanent;
rewrite /programs http://zuykov.com/software/ permanent;
rewrite /request http://zuykov.com/trademarks/ permanent;
rewrite /trademarks http://zuykov.com/trademarks/ permanent;
rewrite ^(/news) http://zuykov.com/about/cases/ permanent;
rewrite ^(/articles) http://zuykov.com/about/articles/ permanent;
if ( $uri !~ ^/(robots\.txt) ) {
rewrite / http://zuykov.com permanent;
}
} }
@ -123,27 +112,129 @@ server {
server_name zuykov.com; server_name zuykov.com;
charset utf-8; charset utf-8;
client_max_body_size 124M; client_max_body_size 124M;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
rewrite /ru/courts/zashchita-delovoi-reputacii /courts/zashita-delovoj-reputacii/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta /courts/zashita-prav-na-patent/ permanent;
rewrite /ru/intellect_protection /copyright/copyright-theory/copyright-origin/ permanent;
rewrite /ru/internet_defence /copyright/copyright-theory/copyright-origin/ permanent;
rewrite /ru/patents/patents-industrial_samples /design-patents/patentovanie-dizajna-i-promyshlennyh-obrazcov/ permanent;
rewrite /ru/patents/patents-inventions /patents/patentovanie-izobretenij-i-poleznyh-modelej/ permanent;
rewrite /ru/patents/patents-useful_models /patents/patentovanie-izobretenij-i-poleznyh-modelej/ permanent;
rewrite /ru/spory_v_sude /trademarks/theory/zachem-registrirovat-tovarnyj-znak/ permanent;
rewrite /ru/trademark_defence /trademarks/theory/zachem-registrirovat-tovarnyj-znak/ permanent;
rewrite /ru/trademarks/brand_registration /trademarks/registraciya-tovarnogo-znaka/ permanent;
rewrite /ru/trademarks/logo_registration /trademarks/registraciya-tovarnogo-znaka/ permanent;
rewrite /ru/trademarks/poisk_trademark /trademarks/poisk-tovarnogo-znaka/ permanent;
rewrite /ru/trademarks/prodlenie_trademark /trademarks/prodlenie-tovarnogo-znaka/ permanent;
rewrite /ru/trademarks/trademark_registration /trademarks/registraciya-tovarnogo-znaka/ permanent;
rewrite /ru/trademarks/vnesenie-v-tamozhennyi-reestr /trademarks/tamozhennyj-reestr/ permanent;
rewrite /ru/trademarks/international_trademark_protect /trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/;
rewrite ^(/trademarks/mezhdunarodnaya) /trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /ru/contracts/registracyia-dogovora-commercheskoi-koncessii /agreements/dogovor-franshizy-i-koncessii/ permanent;
rewrite /ru/trademarks/obshcheisvestnyi-tovarnyi-znak/$ /trademarks/obsheizvestnyj-tovarnyj-znak/ permanent;
rewrite /ru/trademarks/international_trademark_protect/$ /trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /ru/trademarks/international_trademark_registration/$ /trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite /ru/trademarks/podacha-zayavki-na-registraciu-tovarnogo-znaka/$ /trademarks/theory/process-registracii-tovarnogo-znaka/ permanent;
rewrite /ru/courts/zashchita-delovoi-reputacii/$ /courts/zashita-delovoj-reputacii/ permanent;
rewrite /ru/courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/$ /copyright/protect/ permanent;
rewrite /ru/courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/otvetstvennost-za-nezakonnoe-ispolsovanie-avtorski/$ /copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /ru/courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/priznanie-avtorskogo-prava-v-sude/$ /copyright/priznanie-avtorskih-prav/ permanent;
rewrite /ru/courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/ustanovlenie-pravoobladatelia/$ /copyright/establishment-owner/ permanent;
rewrite /ru/courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/zaschita-avtorskih-i-smejnyh-prav-v-sude/$ /copyright/protect/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/$ /courts/zashita-prav-na-patent/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/$ /courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/nedobrosovesnaya-konkurrenciya-priobretenie-patent/$ /courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/osparivanie-reshenij-rospatent-patent-intellectual/$ /courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/osparivanie-patenta-isobretenie/osparivanie-zashchita-patenta-rospatent/$ /courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/$ /courts/zashita-prav-na-patent/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/otvetstvennost-nezakonnoe-ispolzovanie-patenta/$ /copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/priznanie-nedobrosovestnoi-konkurenciej-patenta/$ /courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/zashchita-prav-na-patent-v-policii/$ /courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /ru/courts/zashchita-osparivanie-patenta/zashchita-prav-na-patent/zashchita-prav-na-patent-v-sude/$ /courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /ru/courts/zashchita-osparivanie-prava-na-programmu/$ /software/zashita-avtorskih-i-isklyuchitelnyh-prav/ permanent;
rewrite /ru/courts/zashchita-osparivanie-prava-na-programmu/otvetstvennost-nezakonnoe-ispolzovanie-programmy-d/$ /copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /ru/courts/zashchita-osparivanie-prava-na-programmu/priznanie-avtorskogo-prava-na-programmy-v-sude/$ /software/priznanie-avtorskih-prav/ permanent;
rewrite /ru/courts/zashchita-osparivanie-prava-na-programmu/ustanovlenie-pravoobladatelya-programmy/$ /software/ustanovlenie-pravoobladatelya/ permanent;
rewrite /ru/courts/zashchita-osparivanie-prava-na-programmu/zashchita-prav-na-programmu-v-sude/$ /software/zashita-avtorskih-i-isklyuchitelnyh-prav/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/$ /courts/prekrashenie-dejstviya-tovarnogo-znaka/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/prekashchenie-tovarnogo-znaka-neispolzovanie/$ /trademarks/prekrashenie-dejstviya-tovarnogo-znaka/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/dosrochnoe-prekrashchenie-tovarnogo-zkaka/prekrashchenie-znak-vseobshchee-upotreblenie/$ /courts/zapret-nezakonnogo-ispolzovaniya/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/$ /trademarks/osparivanie-deystviya-tovarnogo-znaka/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/nedobrosovesnaya-konkurrencia-registracyja-priobre/$ /courts/osparivanie-tovarnogo-znaka/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/osparivanie-reshenij-rospatenta-tovarnye-znaki/$ /courts/osparivanie-tovarnogo-znaka/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/osparivanie_tovarnogo_znaka/osparivanie-zashchita-tovarnogo-znaka-rospatent/$ /courts/#trademarks permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/$ /courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/nedobrosovestnaya-konkurenciya-tovarny-znak/$ /courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/otvetstvennost-za-nezakonnoe-ispolzovanie-tovarnog/$ /copyright/copyright-theory/copyright-origin-copy-2/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/zashchita-prav-na-tovarnyi-znak-v-policii/$ /courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /ru/courts/zashchita-osparivanie-tovarnogo-znaka/zashchita-prav-na-tovarnyi-znak/zashchita-prav-na-tovarnyi-znak-v-sude/$ /courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite /ru/courts/zashchita-ot-nedobrosovestnoi-konkurencii/$ /courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /ru/courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosov-konkurencii-v-oblast-reklamy/$ /courts/ permanent;
rewrite /ru/courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosovestnaya-registraciya/$ /courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /ru/courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosovestnoe-ispolzovanie/$ /courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite /ru/courts/zashcita-prav-na-tovarnyi-znak/$ /courts/zashita-prav-na-tovarnyj-znak/ permanent;
rewrite ^(/ru/trademarks/brand_registration/) /ru/trademarks/registraciya-tovarnogo-znaka/ permanent;
rewrite ^(/ru/trademarks/international_trademark_registration/) /ru/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite ^(/ru/trademarks/mezhdunarodnaya-registraciya-po-madridskoi-sisteme/) /ru/trademarks/mezhdunarodnaya-registraciya-tovarnogo-znaka/ permanent;
rewrite ^(/ru/trademarks/poluchenie-svidetelstva-na-tovarnyi-znak/) /ru/trademarks/poluchenie-svidetelstva-na-tovarnyj-znak/ permanent;
rewrite ^(/ru/trademarks/vnesenie-v-tamozhennyi-reestr) /ru/trademarks/tamozhennyj-reestr/ permanent;
rewrite ^(/ru/contracts/dogovor_ustupki/) /ru/agreements/alienation-agreement/ permanent;
rewrite ^(/ru/courts/zashchita-osparivanie-avtorskih-smezhnyh-prav/otvetstvennost-za-nezakonnoe-ispolsovanie-avtorski/) /ru/copyright/protect/ permanent;
rewrite ^(/ru/courts/zashchita-osparivanie-prava-na-programmu/priznanie-avtorskogo-prava-na-programmy-v-sude/) /ru/software/priznanie-avtorskih-prav/ permanent;
rewrite ^(/ru/courts/zashchita-ot-nedobrosovestnoi-konkurencii/nedobrosovestnaya-registraciya/) /ru/courts/zashita-ot-nedorosovestnoj-konkurencii/ permanent;
rewrite ^(/ru/calculator/) /ru/ permanent;
rewrite ^(/en/design-patents/patentovanie-dizajna-i-promyshlennyh-obrazcov/area/) permanent;
rewrite ^(/en/about/articles/2015/) /en/about/articles/ permanent;
rewrite ^(/en/about/cases/2015/) /en/about/cases/ permanent;
rewrite ^(/en/about/seminars/2015/) /en/about/seminars/ permanent;
rewrite ^(/ru/news) /ru/about/cases/ permanent;
rewrite ^(/ru/contracts) /ru/agreements/ permanent;
rewrite ^(/ru/patents-useful_models) /ru/patents/patentovanie-izobretenij-i-poleznyh-modelej/ permanent;
rewrite ^(/ru/prodlenie_trademark) /ru/trademarks/prodlenie-tovarnogo-znaka/ permanent;
rewrite ^(/ru/programs/) /ru/software/ permanent;
rewrite ^(/ru/request/) /ru/trademarks/registraciya-tovarnogo-znaka/ permanent;
rewrite ^(/ru/patents/osparivanie-i-prekrashenie-dejstviya-patenta/) /ru/courts/osparivanie-i-prekrashenie-dejstviya-patenta/ permanent;
location /robots.txt { location /robots.txt {
alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/static/robots.txt; alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/static/robots.txt;
} }
location /static { location /static {
alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/static; alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/static;
expires 365d;
} }
location /media { location /media {
alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/media; alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/media;
expires 365d;
} }
location / { location /favicon.ico {
alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/static/imgs/favicon.ico;
}
location /favicon.png {
alias /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/static/imgs/favicon.png;
}
location / {
uwsgi_pass django_zuykov; uwsgi_pass django_zuykov;
include /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/uwsgi_params; include /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/uwsgi_params;
} }

@ -7,9 +7,11 @@ module = app.wsgi
home = /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/env home = /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/env
eval = import newrelic.agent, wsgi; application = newrelic.agent.wsgi_application()(wsgi.application) eval = import newrelic.agent, wsgi; application = newrelic.agent.wsgi_application()(wsgi.application)
threads = 2
master = true master = true
processes = 4 processes = 4
socket = /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/wsgi.sock socket = /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/wsgi.sock
chmod-socket = 666 chmod-socket = 666
vacuum = true vacuum = true
enable-threads = true
threads = 2

@ -18,15 +18,6 @@ class Debian(Node):
getattr(self, "_" + item['action'])(item['params']) getattr(self, "_" + item['action'])(item['params'])
# Actions
# def _virtualenv(params):
# """
# Allows running commands on the server
# with an active virtualenv
# """
# with cd(fabconf['APPS_DIR']):
# _virtualenv_command(_render(params))
def _apt(self, params): def _apt(self, params):
""" """
Runs apt-get install commands Runs apt-get install commands

@ -1,39 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
'''
--------------------------------------------------------------------------------------
tasks.py
--------------------------------------------------------------------------------------
A set of tasks to manage your AWS Django deployment.
author : Ashok Fernandez (github.com/ashokfernandez/)
credit : Derived from files in https://github.com/gcollazo/Fabulous
date : 11 / 3 / 2014
Tasks include:
- configure_instance : Configures a new EC2 instance (as definied in settings.py) and return's it's public dns
This takes around 8 minutes to complete.
- update_packages : Updates the python packages on the server to match those found in requirements/common.txt and
requirements/prod.txt
- deploy : Pulls the latest commit from the master branch on the server, collects the static files, syncs the db and
restarts the server
- reload_gunicorn : Pushes the gunicorn startup script to the servers and restarts the gunicorn process, use this if you
have made changes to templates/start_gunicorn.bash
- reload_nginx : Pushes the nginx config files to the servers and restarts the nginx, use this if you
have made changes to templates/nginx-app-proxy or templates/nginx.conf
- reload_supervisor : Pushes the supervisor config files to the servers and restarts the supervisor, use this if you
have made changes to templates/supervisord-init or templates/supervisord.conf
'''
# Spawns a new EC2 instance (as definied in djangofab_conf.py) and return's it's public dns
# This takes around 8 minutes to complete.
common_configure = [ common_configure = [
# First command as regular user # First command as regular user
{"action": "run", "params": "whoami"}, {"action": "run", "params": "whoami"},
@ -145,32 +112,7 @@ reload_uwsgi = [
{"action": "sudo", "params": "service uwsgi restart", {"action": "sudo", "params": "service uwsgi restart",
"message": "Restarting uwsgi"}, "message": "Restarting uwsgi"},
]
web_configure += reload_uwsgi + reload_nginx + create_uwsgi_links + create_nginx_links
engine_configure = [
# List of pypi packages to install
{"action": "run", "params": "cp -r ~/%(PROJECT_NAME)s/env/share/voiceid ~/%(PROJECT_NAME)s/env/local/share/",
"message":"Move voiceid"},
{"action": "apt", "params": ["supervisor"],
"message":"Installing supervisor"},
{"action": "put_template", "params": {"template": "%(BASE_DIR)s/app/conf/supervisor.conf.template",
"destination": "/home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/supervisor.conf"}},
{"action": "sudo", "params":
"ln -s /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/supervisor.conf /etc/supervisor/conf.d/%(PROJECT_NAME)s.conf"},
{"action": "sudo", "params": "service supervisor restart",
"message": "Restarting supervisor"},
# Запстить очереди
# TODO: настроить редис как внешний сервер
] ]
reload_supervisor = [ web_configure += reload_uwsgi + reload_nginx + create_uwsgi_links + create_nginx_links
{"action": "put_template", "params": {"template": "%(BASE_DIR)s/app/conf/supervisor.conf.template",
"destination": "/home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/supervisor.conf"}},
{"action": "sudo", "params": "service supervisor restart",
"message": "Restarting supervisor"},
]

@ -23,23 +23,6 @@ class ZuykovWebSystem(Node):
roles: web, engine, database roles: web, engine, database
""" """
# @map_roles(host='database')
# class Database(<):
# def create(self):
# host = settings.DATABASES['default']
# # Создаём группу безопасности
# security_group = self._ec2_mysql_security_group()
# # Создаём группу параметров
# # Запускаем инстанс
# self._rds_create_instance(
# 'database',
# host['NAME'],
# host['USER'],
# host['PASSWORD'])
@map_roles(host='web') @map_roles(host='web')
class Application(DjangoDeployment): class Application(DjangoDeployment):
def configure_base(self): def configure_base(self):
@ -53,6 +36,9 @@ class ZuykovWebSystem(Node):
self.checkout() self.checkout()
self.pull() self.pull()
def collect_static(self):
self.run_management_command('collectstatic --noinput')
def checkout(self, commit="."): def checkout(self, commit="."):
with self.hosts.cd(settings.PROJECT_DIR, expand=True): with self.hosts.cd(settings.PROJECT_DIR, expand=True):
self.hosts.run("git checkout '%s'" % esc1(commit)) self.hosts.run("git checkout '%s'" % esc1(commit))
@ -63,35 +49,22 @@ class ZuykovWebSystem(Node):
def create(self): def create(self):
self.Application.hello()
# Если созданы — удалить # Если созданы — удалить
# # Предварительно спросить # TODO: Предварительно спросить
# self.Frontend.create() self.Frontend.create()
# self.Engine.create()
def static(self):
self.Application.run_management_command('collectstatic --noinput')
def frontend_update(self):
self.Application.update()
self.Application.run_management_command('collectstatic --noinput')
self.Application.restart()
self.Engine.create()
def deploy(self): def deploy(self):
self.Application.update() self.Application.update()
self.Application.python_packages_install() self.Application.python_packages_install()
self.Application.run_management_command('collectstatic --noinput') self.Application.collect_static()
self.Application.restart() self.Application.restart()
# self.Engine.migrate() def update(self):
self.Application.update()
# self.Frontend.restart() self.Application.collect_static()
self.Application.restart()
# self.Engine.restart()

File diff suppressed because one or more lines are too long

@ -0,0 +1,79 @@
aldryn-apphooks-config==0.2.6
aldryn-boilerplates==0.7.3
aldryn-bootstrap3==0.5.2
aldryn-common==0.1.4
aldryn-translation-tools==0.2.1
cmsplugin-filer==0.10.2
dj-database-url==0.3.0
Django==1.7.8
django-admin-enhancer==1.0.0
django-admin-extend==0.0.3
django-appconf==1.0.1
django-appdata==0.1.4
django-classy-tags==0.6.2
django-cms==3.1.3
django-cms-smartsnippets==0.1.3
django-debug-toolbar==1.4
django-durationfield==0.5.2
django-easy-select2==1.3.1
django-filer==0.9.12
django-formtools==1.0
django-ipware==1.1.1
django-meta==0.3.1
django-meta-mixin==0.2.1
django-mptt==0.7.4
django-multipleformwizard==0.2.16
django-parler==1.5.1
django-phonenumber-field==0.7.2
django-pipeline==1.5.4
django-polymorphic==0.7.2
django-reversion==1.9.3
django-sekizai==0.8.2
Django-Select2==4.3.2
django-sortedm2m==1.0.2
django-taggit==0.17.3
django-taggit-autosuggest==0.2.7
django-tinymce==2.0.5
django-treebeard==3.0
djangocms-admin-style==0.2.8
djangocms-column==1.5
djangocms-file==0.1
djangocms-flash==0.2.0
djangocms-forms==0.1.15
djangocms-googlemap==0.3
djangocms-inherit==0.1
djangocms-installer==0.8.1
djangocms-link==1.7.1
djangocms-picture==0.1
djangocms-style==1.5
djangocms-teaser==0.1
djangocms-text-ckeditor==2.6.0
djangocms-video==0.1
easy-thumbnails==2.2
futures==3.0.3
GeoIP==1.3.2 # Hack: http://xazrad.blogspot.ru/2014/12/django-geoip-ubuntu-mac-os-x.html
hashids==1.1.0
html5lib==0.9999999
jsonfield==1.0.3
mysql==0.0.1
MySQL-python==1.2.5
newrelic==2.56.0.42
phonenumbers==7.1.0
Pillow==3.0.0
python-dateutil==2.4.2
python-slugify==1.1.4
pytz==2015.7
pyuca==1.1
requests==2.8.1
six==1.10.0
South==1.0.2
sqlparse==0.1.18
tablib==0.10.0
tzlocal==1.2
Unidecode==0.4.18
vobject==0.6.6
YURL==0.13
#
pymorphy2==0.8
pymorphy2-dicts==2.4.393442.3710985
DAWG-Python==0.7.2

@ -5,6 +5,8 @@
import os import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATA_DIR = BASE_DIR DATA_DIR = BASE_DIR
import sys
sys.path.append(BASE_DIR + '/packages')
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
@ -109,7 +111,7 @@ PIPELINE_JS = {
'vendor/angular-bootstrap/ui-bootstrap-tpls.js', 'vendor/angular-bootstrap/ui-bootstrap-tpls.js',
'vendor/jquery/dist/jquery.min.js', 'vendor/jquery/dist/jquery.min.js',
'vendor/jquery.inputmask/dist/inputmask/inputmask.js', 'vendor/jquery.inputmask/dist/inputmask/inputmask.js',
'vendor/jquery.inputmask/dist/inputmask/jquery.inputmask.js', 'vendor/jquery.inputmask/dist/inputmask/jquery.inputmask.js'
), ),
'output_filename': 'js/vendor.js', 'output_filename': 'js/vendor.js',
} }
@ -121,7 +123,8 @@ PIPELINE_CSS = {
'main': { 'main': {
'source_filenames': ( 'source_filenames': (
'less/main.less', 'less/main.less',
'trademark/less/main.less' 'trademark/less/main.less',
'vendor/font-awesome/less/font-awesome.less',
), ),
'output_filename': 'css/main.css', 'output_filename': 'css/main.css',
} }
@ -151,7 +154,7 @@ MIDDLEWARE_CLASSES = (
'cms.middleware.page.CurrentPageMiddleware', 'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware', 'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware', 'cms.middleware.language.LanguageCookieMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', # WARNING: В продакшене должно быть включено
'country_segment.middleware.ResolveCountryCodeMiddleware', 'country_segment.middleware.ResolveCountryCodeMiddleware',
'promo.middleware.cookies.PageHistoryMiddleware', 'promo.middleware.cookies.PageHistoryMiddleware',
'django.middleware.gzip.GZipMiddleware', 'django.middleware.gzip.GZipMiddleware',

@ -1,46 +0,0 @@
.select2-container-multi .select2-choices .select2-search-field input {
min-width: 100px;
}
.selector select[multiple] {
display: block;
}
.selector {
width: auto;
margin-right: 12px;
}
.selector-available, .selector-chosen {
width: auto;
}
.selector .selector-available input, .selector .selector-chosen input {
margin: 0;
}
form select {
max-width: 266px;
}
.as-selections.vTextField {
width: 300px;
}
.as-results ul.as-list {
margin-left:9em;
padding-left:0;
box-shadow: none !important;
border: 1px solid #888888 !important;
}
.as-results ul.as-list li {
list-style: none;
}
ul.as-selections.vTextField {
padding-left: 10px;
margin-left:9em;
}
ul.as-selections li {
list-style: none;
}

@ -1,43 +0,0 @@
.inline-related {
border: 1px solid #CCC;
border-radius: 2px;
box-shadow: 0 1px 2px 1px rgba(0, 0, 0, 0.08);
}
.inline-related h3 {
background-color: #FCFCFC;
padding: 10px 20px 10px 3px;
margin: 0;
text-align: center;
}
.inline-related .inline_label {
font-weight: 300;
}
.inline-related .collapse-expand {
display: inline-block;
text-transform: uppercase;
padding: 0px 10px 0px 10px;
width: 44px;
float: left;
text-decoration:none!important;
}
.add-row {
height: 26px;
line-height: 26px;
text-align: center;
border: 1px dashed #CCC!important;
border-radius: 2px;
margin: 0;
}
.add-row a {
display: block;
padding-left: 14px;
text-indent: -9999px;
font-size: 11px;
background-position: 50% 50%!important;
}

@ -1,53 +0,0 @@
(function($) {
$(function() {
var formsubmission_form = $('#formsubmission_form');
var form_field = $('select[id="id_form"]', formsubmission_form);
var headers_field = $('.field-headers', formsubmission_form);
var loadHeaders = function() {
if (!form_field.val()) {
headers_field.slideUp('fast');
return;
}
var data = {
'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val(),
'form': $('select[name="form"]').val(),
'file_type': $('select[name="file_type"]').val()
};
$.ajax({
type: 'POST',
url: '',
data: data,
success: function(response) {
if (response.reloadBrowser) {
location.reload();
}
$('select[id="id_headers_to"]').find('option').remove();
var headers_input_from = $('select[id="id_headers_from"]');
headers_input_from.find('option').remove();
$.each(response.availableHeaders, function(index, value) {
headers_input_from.append('<option value=' + value + '>' + value + '</option>');
});
SelectBox.init('id_headers_from');
SelectBox.init('id_headers_to');
headers_field.slideDown();
},
error: function() {
alert('We\'re sorry. Something unexpected happened. Please reload the page and try again.');
}
});
return false;
};
if ($('body').hasClass('export-form')) {
loadHeaders();
form_field.change(loadHeaders);
}
});
})(django.jQuery);

@ -1,66 +0,0 @@
/*
Makes all inline forms collapsible.
*/
jQuery(function($) {
$.makeCollapsible = function(target, item, collapsible, triggerTarget, setInitStatus, setFirstStatus)
{
var triggerExpand = 'Edit';
var triggerCollapse = 'Done';
var triggerClass = 'collapse-expand';
var triggerLink = '<a class="' + triggerClass + '" href="javascript:void(0);"></a>';
$(target).find(item).each(function(i) {
if ($(this).data('isCollapsible')) return;
$(this).data('isCollapsible', true);
$(this).find(collapsible).hide();
// trigger already exists if created with "Add another" link
var trigger = $(this).find(triggerTarget).find('.'+triggerClass);
if (!trigger.length) {
trigger = $(triggerLink);
$(this).find(triggerTarget).html(trigger);
}
var item = this;
var toggleCollapse = function(status, speed)
{
if (status == null) {
status = !item.collapseStatus;
}
if (speed == null) {
speed = 1;
}
item.collapseStatus = status;
if (status) {
trigger.html(triggerCollapse);
$(item).find(collapsible).slideDown('slow');
} else {
trigger.html(triggerExpand);
$(item).find(collapsible).slideUp('slow');
}
}
trigger.click(function(event) {
event.preventDefault();
toggleCollapse(null, 'normal')
})
// Collapse by default unless there are errors
initStatus = setInitStatus != null ? setInitStatus : $(this).find('.errors').length != 0;
firstStatus = setFirstStatus != null ? setFirstStatus : initStatus;
toggleCollapse(i == 0 ? firstStatus : initStatus)
});
};
var init = function() {
$.makeCollapsible('div.inline-group', 'div.inline-related', 'fieldset', 'h3 b');
};
init();
// init again when "Add another" link is clicked
$('.add-row a').click(function() {
init();
})
});

@ -1,95 +0,0 @@
/*
Enables repositioning of all inline elements by drag & drop.
The inline model requires is a "position" field that is blank by default.
This value will be set automatically by this code snippet when dragging elements.
The model instances can then be ordered by that "position" field.
*/
jQuery(function($) {
var positionField = 'position';
var target = $('div.inline-group#fields-group');
var handle = 'h3';
var item = 'div.inline-related';
var positionInput = 'input[id$=-'+positionField+']';
var hidePositionFieldClosest = '.form-row';
var renumberAll = function() {
var pos = 1;
target.find(item).each(function(i) {
$(this).removeClass('odd even').addClass(i % 2 ? 'even' : 'odd');
if ($(this).find(positionInput).val() != '') {
$(this).find(positionInput).val(pos);
pos++;
}
});
};
var init = function() {
target.find(item).each(function(i) {
if ($(this).data('isSortable')) return;
$(this).data('isSortable', true);
$(this).find(handle).css('cursor', 'ns-resize');
$(this).find(handle).addClass('draggable');
$(this).find(positionInput).each(function() {
if (hidePositionFieldClosest) {
var hidden =$('<input type="hidden" id="'+this.id+'" name="'+this.name+'" />');
hidden.val($(this).val());
$(this).closest(hidePositionFieldClosest).replaceWith(hidden);
}
});
$(this).find('input, select, textarea').change(function() {
$(this).closest(item).find('input[id$='+positionField+']').val('X'); // mark for renumberAll() to fill in
renumberAll($('div.inline-group'));
});
});
};
var addRow = target.find('.add-row');
addRow.remove();
var ordered = [];
var unordered = [];
// Initially, remove and re-append all inlines ordered by their "position" value
target.find(item).each(function(i) {
var initialPos = $(this).find(positionInput).val();
if (initialPos) {
while (initialPos < ordered.length && ordered[initialPos]) {
initialPos++;
}
ordered[initialPos] = this;
} else {
unordered[unordered.length] = this;
}
$(this).removeClass('odd even').addClass(i % 2 ? 'even' : 'odd');
this.parentElement.removeChild(this);
});
for (var i = 0; i < ordered.length; i++) {
var el = ordered[i];
if (el) {
target.append(el);
}
}
// Add "position"-less elements in the end
for (var i = 0; i < unordered.length; i++) {
var el = unordered[i];
target.append(el);
}
target.append(addRow);
target.sortable({
containment: 'parent',
items: item,
handle: handle,
update: renumberAll,
revert: true,
opacity: 0.9
});
init();
// init again when "Add another" link is clicked
$('.add-row a').click(function() {
init();
});
});

@ -1,45 +0,0 @@
/*
Replaces the name in an inline element's header while typing it in the input of the "name" field.
This way, the extra inline element's header will be named instead of numbered #4, #5 etc.
*/
jQuery(function($) {
var target = $('div.inline-group');
var item = 'div.inline-related';
var nameInput = 'input[id*=-label]';
var typeInput = 'select[id*=-field_type]';
var init = function() {
target.find(item).each(function() {
var nameField = $(this).find(nameInput);
var typeField = $(this).find(typeInput);
var label = $('.inline_label', this);
var rename = function() {
if (nameField.val()) {
label.text(nameField.val());
}
else {
label.text(typeField.find('option:selected').text() + ' Field');
}
};
nameField.keyup(function(event) {
// Update name while typing
rename();
});
typeField.change(function(){
rename();
});
rename();
})
}
init();
// init again when "Add another" link is clicked
$('.add-row a').click(function() {
init();
})
});

@ -1,35 +0,0 @@
jQuery(function($) {
var target = $('div.inline-group');
var item = 'div.inline-related';
var typeInput = 'select[id*=-field_type]';
var init = function() {
target.find(item).each(function() {
var that = $(this);
var inputField = that.find(typeInput);
var toggleField = function() {
var selectedFieldType = inputField.val();
var choiceFields = ['checkbox_multiple', 'select', 'radio', 'file'];
var showChoiceField = $.inArray(selectedFieldType, choiceFields) >= 0;
that.find('.field-choice_values')
.toggle(showChoiceField)
.toggleClass('required', showChoiceField);
that.find('.field-placeholder_text, .field-help_text, .field-choice_values:not(:hidden)')
.toggle(selectedFieldType != 'hidden')
};
inputField.change(function() {
toggleField();
});
toggleField();
})
};
init();
// init again when "Add another" link is clicked
$('.add-row a').click(function() {
init();
})
});

@ -1,109 +0,0 @@
(function ($) {
$.fn.djangocms_forms = function (options) {
if (options === undefined) { options = {}; }
var defaults = {
form_wrapper: '.form-wrapper',
field_wrapper: '.field-wrapper',
form_errors: '.form-errors',
field_errors: '.field-errors',
form_success: '.form-success',
errorlist_css_class: 'errorlist',
error_css_class: 'error',
server_error: 'We\'re sorry. Something Unexpected Happened. Please Try Again Later.'
};
$('input[type=tel]').inputmask("+7 999 999-99-99");
if(typeof consultation != "undefined") {
$('input[name=sotrudnik]').val(consultation.name);
}
this.each(function(options) {
var options = $.extend( {}, defaults, options) ;
var el = $(this),
form_wrapper = $(options.form_wrapper, el),
form_success = $(options.form_success, el),
form = $('form', form_wrapper);
function clearErrors() {
form.find(options.form_errors).fadeOut().empty(); //clear form errors
form.find(options.field_errors).fadeOut().empty(); //clear field errors
form.find(options.field_wrapper).removeClass(options.error_css_class); //remove error classes
}
// post-submit callback
function ajaxSuccess(response) {
if (response.status == 'success'){
formValid(response.redirect_url);
}
else if (response.status == 'error'){
formInvalid(response.form_errors);
}
}
function formValid(success_url) {
form_success.fadeIn('slow');
form_wrapper.slideUp('slow').remove();
if (success_url){
setTimeout(function(){
window.location = success_url;
}, 1000);
}
}
function formInvalid(form_errors) {
clearErrors()
$.each(form_errors, function(key, value) {
var field = form.find(':input[name=' + key + ']').first();
var field_wrapper = field.parents(options.field_wrapper).addClass(options.error_css_class);
var field_error = $('<ul/>').addClass(options.errorlist_css_class);
$.each(value, function(key, value) {
$('<li>', {
text: value
}).appendTo(field_error);
});
field_wrapper.find(options.field_errors).append(field_error).fadeIn('slow')
});
if (form_errors.__all__) {
var form_error = $('<ul/>').addClass(options.errorlist_css_class);
$.each(form_errors.__all__, function(key, value) {
$('<li>', {
text: value
}).appendTo(form_error);
});
form.find(options.form_errors).append(form_error).fadeIn('slow');
}
}
function ajaxError() {
clearErrors();
var form_error = $('<ul/>').addClass(options.error_class);
$('<li>', {
html: options.server_error
}).appendTo(form_error);
form.find(options.form_errors).append(form_error).fadeIn('slow');
}
// attach handler to form's submit event
form.submit(function () {
var ajaxOptions = {
type: 'POST',
success: ajaxSuccess,
error: ajaxError
};
// submit the form
$(this).ajaxSubmit(ajaxOptions);
form.find('button[type="submit"]').attr('disabled','disabled');
// return false to prevent normal browser submit and page navigation
return false;
});
});
};
})(jQuery);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,139 +0,0 @@
0 info it worked if it ends with ok
1 verbose cli [ 'node', '/usr/local/bin/npm', '-g', 'install', 'yuglify' ]
2 info using npm@1.4.28
3 info using node@v0.10.33
4 verbose cache add [ 'yuglify', null ]
5 verbose cache add name=undefined spec="yuglify" args=["yuglify",null]
6 verbose parsed url { protocol: null,
6 verbose parsed url slashes: null,
6 verbose parsed url auth: null,
6 verbose parsed url host: null,
6 verbose parsed url port: null,
6 verbose parsed url hostname: null,
6 verbose parsed url hash: null,
6 verbose parsed url search: null,
6 verbose parsed url query: null,
6 verbose parsed url pathname: 'yuglify',
6 verbose parsed url path: 'yuglify',
6 verbose parsed url href: 'yuglify' }
7 silly lockFile a15791f5-yuglify yuglify
8 verbose lock yuglify /Users/fefa4ka/.npm/a15791f5-yuglify.lock
9 silly lockFile a15791f5-yuglify yuglify
10 silly lockFile a15791f5-yuglify yuglify
11 verbose addNamed [ 'yuglify', '' ]
12 verbose addNamed [ null, '*' ]
13 silly lockFile e77d10d2-yuglify yuglify@
14 verbose lock yuglify@ /Users/fefa4ka/.npm/e77d10d2-yuglify.lock
15 silly addNameRange { name: 'yuglify', range: '*', hasData: false }
16 verbose request where is /yuglify
17 verbose request registry https://registry.npmjs.org/
18 verbose request id b64ae15ba0fed38b
19 verbose url raw /yuglify
20 verbose url resolving [ 'https://registry.npmjs.org/', './yuglify' ]
21 verbose url resolved https://registry.npmjs.org/yuglify
22 verbose request where is https://registry.npmjs.org/yuglify
23 info trying registry request attempt 1 at 20:59:19
24 http GET https://registry.npmjs.org/yuglify
25 http 200 https://registry.npmjs.org/yuglify
26 silly registry.get cb [ 200,
26 silly registry.get { server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)',
26 silly registry.get etag: '"6EX7Y8ZUNLQGJO6A3BVILGV17"',
26 silly registry.get 'content-type': 'application/json',
26 silly registry.get 'cache-control': 'max-age=60',
26 silly registry.get 'content-length': '23910',
26 silly registry.get 'accept-ranges': 'bytes',
26 silly registry.get date: 'Sun, 02 Aug 2015 17:59:19 GMT',
26 silly registry.get via: '1.1 varnish',
26 silly registry.get age: '0',
26 silly registry.get connection: 'keep-alive',
26 silly registry.get 'x-served-by': 'cache-fra1243-FRA',
26 silly registry.get 'x-cache': 'HIT',
26 silly registry.get 'x-cache-hits': '1',
26 silly registry.get 'x-timer': 'S1438538359.464688,VS0,VE483',
26 silly registry.get vary: 'Accept' } ]
27 silly addNameRange number 2 { name: 'yuglify', range: '*', hasData: true }
28 silly addNameRange versions [ 'yuglify',
28 silly addNameRange [ '0.0.1', '0.1.0', '0.1.1', '0.1.2', '0.1.3', '0.1.4' ] ]
29 verbose addNamed [ 'yuglify', '0.1.4' ]
30 verbose addNamed [ '0.1.4', '0.1.4' ]
31 silly lockFile 2278936e-yuglify-0-1-4 yuglify@0.1.4
32 verbose lock yuglify@0.1.4 /Users/fefa4ka/.npm/2278936e-yuglify-0-1-4.lock
33 silly lockFile 677ad253-js-org-yuglify-yuglify-0-1-4-tgz https://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz
34 verbose lock https://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz /Users/fefa4ka/.npm/677ad253-js-org-yuglify-yuglify-0-1-4-tgz.lock
35 verbose addRemoteTarball [ 'https://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz',
35 verbose addRemoteTarball '726d5e4af810f741ef21865f6f954c4078a3a45f' ]
36 info retry fetch attempt 1 at 20:59:20
37 verbose fetch to= /var/folders/cs/sr52sk7s1yd855sf_12mn6dxl770mb/T/npm-72095-pywUKB2P/registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz
38 http GET https://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz
39 http 200 https://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz
40 silly lockFile 677ad253-js-org-yuglify-yuglify-0-1-4-tgz https://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz
41 silly lockFile 677ad253-js-org-yuglify-yuglify-0-1-4-tgz https://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz
42 silly lockFile 2278936e-yuglify-0-1-4 yuglify@0.1.4
43 silly lockFile 2278936e-yuglify-0-1-4 yuglify@0.1.4
44 silly lockFile e77d10d2-yuglify yuglify@
45 silly lockFile e77d10d2-yuglify yuglify@
46 silly resolved [ { name: 'yuglify',
46 silly resolved description: 'cli wrapper for uglify and cssmin used by YUI',
46 silly resolved version: '0.1.4',
46 silly resolved dependencies: { 'uglify-js': '~1.3.4', ycssmin: '~1.0.1', nopt: '~2.1.1' },
46 silly resolved devDependencies: { 'yui-lint': '~0.1.1', jshint: '~0.9.0', vows: '*' },
46 silly resolved main: './lib/index.js',
46 silly resolved bin: { yuglify: './bin/yuglify' },
46 silly resolved scripts:
46 silly resolved { pretest: 'jshint --config ./node_modules/yui-lint/jshint.json ./lib/*.js ./bin/yuglify',
46 silly resolved test: 'vows --spec ./tests/*.js' },
46 silly resolved preferGlobal: 'true',
46 silly resolved bugs: { url: 'http://github.com/yui/yuglify/issues' },
46 silly resolved licenses: [ [Object] ],
46 silly resolved repository: { type: 'git', url: 'http://github.com/yui/yuglify.git' },
46 silly resolved readme: 'yUglify\n=======\n\n`yuglify` is a wrapper around [UglifyJS](https://github.com/mishoo/UglifyJS) and [cssmin](https://github.com/jbleuzen/node-cssmin)\nwith the default YUI configurations on each of them.\n\n\nBuild Status\n------------\n\n[![Build Status](https://secure.travis-ci.org/yui/yuglify.png?branch=master)](http://travis-ci.org/yui/yuglify)\n\n\nCLI Usage\n----------\n\n npm -g install yuglify\n\n`yuglify` has a very simple CLI interface to allow you to compress files from the command line.\n\n yuglify ./lib/*.js #uses shell globbing, won\'t work on Windows\n\nThis will read all passed files and compress them (js or css) and write them back beside the original\nwith the name altered to `-min.js|css`.\n\nRequired\n--------\n\n npm install yuglify\n\n\n```javascript\n\nvar yuglify = require(\'yuglify\');\n\nyuglify.jsmin(\'<string of source\', function(err, smashed) {\n fs.writeFile(\'/path/to/file\', smashed, \'utf8\', function() {});\n});\n\nyuglify.cssmin(\'<string of source\', function(err, smashed) {\n fs.writeFile(\'/path/to/file\', smashed, \'utf8\', function() {});\n});\n\n```\n\nPurpose\n-------\n\nThis module is primarily designed to be used inside [shifter](http://yui.github.com/shifter/).\n\nWhy not use the default Uglify?\n-------------------------------\n\nWe need to support the `/*!` license comment blocks when minifying, so we added\na preprocessor to the code to pull them from the source, then place them back when\nthe minification is complete.\n\nWe also needed to make sure that the file ends in a clean line ending for our\ncombo servers. This way we ensure that other modules don\'t have to end with a\nsemi-colon and the combohandler doesn\'t concat them together in a bad way.\n\nWe\'ve also added support to add a semi-colon if the last character of the\nminified source is either a `)` or a `}`.\n\nThe last thing this module does is provide the default config that we think\nis the most compatible with the way that YUI Compressor used to minify our\nfiles.\n\n```javascript\n{\n mangle: true,\n squeeze: true,\n semicolon: false,\n lift_vars: false,\n mangle_toplevel: true,\n no_mangle_functions: true,\n max_line_length: 6000\n}\n```\n\nTesting\n-------\n\nCurrently, the tests for this module are just to make sure that they are exported properly.\nShifter\'s test suite validates that these compressors are working as expected. Soon, we\'ll\nmove them over to this repo too.\n',
46 silly resolved readmeFilename: 'README.md',
46 silly resolved _id: 'yuglify@0.1.4',
46 silly resolved dist:
46 silly resolved { shasum: '726d5e4af810f741ef21865f6f954c4078a3a45f',
46 silly resolved tarball: 'http://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz' },
46 silly resolved _from: 'yuglify@',
46 silly resolved _npmVersion: '1.2.15',
46 silly resolved _npmUser: { name: 'davglass', email: 'davglass@gmail.com' },
46 silly resolved maintainers: [ [Object] ],
46 silly resolved directories: {},
46 silly resolved _shasum: '726d5e4af810f741ef21865f6f954c4078a3a45f',
46 silly resolved _resolved: 'https://registry.npmjs.org/yuglify/-/yuglify-0.1.4.tgz' } ]
47 info install yuglify@0.1.4 into /usr/local/lib
48 info installOne yuglify@0.1.4
49 verbose lib/node_modules/yuglify unbuild
50 verbose tar unpack /Users/fefa4ka/.npm/yuglify/0.1.4/package.tgz
51 silly lockFile f8b66cbf-r-local-lib-node-modules-yuglify tar:///usr/local/lib/node_modules/yuglify
52 verbose lock tar:///usr/local/lib/node_modules/yuglify /Users/fefa4ka/.npm/f8b66cbf-r-local-lib-node-modules-yuglify.lock
53 silly lockFile 4ba9cf88-ka-npm-yuglify-0-1-4-package-tgz tar:///Users/fefa4ka/.npm/yuglify/0.1.4/package.tgz
54 verbose lock tar:///Users/fefa4ka/.npm/yuglify/0.1.4/package.tgz /Users/fefa4ka/.npm/4ba9cf88-ka-npm-yuglify-0-1-4-package-tgz.lock
55 silly gunzTarPerm modes [ '755', '644' ]
56 error Error: EACCES, mkdir '/usr/local/lib/node_modules/yuglify'
56 error { [Error: EACCES, mkdir '/usr/local/lib/node_modules/yuglify']
56 error errno: 3,
56 error code: 'EACCES',
56 error path: '/usr/local/lib/node_modules/yuglify',
56 error fstream_type: 'Directory',
56 error fstream_path: '/usr/local/lib/node_modules/yuglify',
56 error fstream_class: 'DirWriter',
56 error fstream_stack:
56 error [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23',
56 error '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:46:53',
56 error 'Object.oncomplete (fs.js:107:15)' ] }
57 error Please try running this command again as root/Administrator.
58 error System Darwin 14.0.0
59 error command "node" "/usr/local/bin/npm" "-g" "install" "yuglify"
60 error cwd /Users/fefa4ka/Documents/web/zuykov
61 error node -v v0.10.33
62 error npm -v 1.4.28
63 error path /usr/local/lib/node_modules/yuglify
64 error fstream_path /usr/local/lib/node_modules/yuglify
65 error fstream_type Directory
66 error fstream_class DirWriter
67 error code EACCES
68 error errno 3
69 error stack Error: EACCES, mkdir '/usr/local/lib/node_modules/yuglify'
70 error fstream_stack /usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23
70 error fstream_stack /usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:46:53
70 error fstream_stack Object.oncomplete (fs.js:107:15)
71 verbose exit [ 3, true ]

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
__version__ = '0.5.2'

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from .models_admin import GroupAdmin, PersonAdmin # flake8: noqa

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf import settings
from django.core.urlresolvers import reverse
from cms.utils.i18n import get_current_language
class AllTranslationsAdminMixin(object):
"""To use this, apply this mixin to your Admin class, then add
'all_translations' to your list_display list."""
def all_translations(self, obj):
"""This is an adapter for the functionality that was in HVAD but not
in Parler.
"""
available = list(obj.get_available_languages())
langs = []
for lang, _ in settings.LANGUAGES:
if lang in available:
langs.append(lang)
available.remove(lang)
langs += available
for idx, lang in enumerate(langs):
change_form_url = reverse(
'admin:{app_label}_{model_name}_change'.format(
app_label=obj._meta.app_label.lower(),
model_name=obj.__class__.__name__.lower(),
), args=(obj.id, )
)
link = '<a href="{url}?language={lang}">{lang}</a>'.format(
url=change_form_url,
lang=lang,
)
if lang == get_current_language():
link = "<strong>{0}</strong>".format(link)
langs[idx] = link
return ', '.join(langs)
all_translations.short_description = 'available translations'
all_translations.allow_tags = True

@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from parler.admin import TranslatableAdmin
from ..models import Person, Group
from ..forms import PersonForm
from .base import AllTranslationsAdminMixin
class PersonAdmin(AllTranslationsAdminMixin, TranslatableAdmin):
list_display = [
'__str__', 'email', 'vcard_enabled', 'all_translations']
list_filter = ['group', 'vcard_enabled']
search_fields = ('name', 'email', 'translations__function')
raw_id_fields = ('user',)
fieldsets = (
(None, {
'fields': (
'name', 'function', 'slug', 'visual', 'visual_portrait', 'vcard_enabled'
),
}),
(_('Contact'), {
'fields': (
'phone', 'mobile', 'fax', 'email', 'website', 'user'
),
}),
(None, {
'fields': (
'group', 'description',
),
}),
)
form = PersonForm
class GroupAdmin(AllTranslationsAdminMixin, TranslatableAdmin):
list_display = ['__str__', 'city', 'all_translations']
search_filter = ['name']
fieldsets = (
(None, {
'fields': (
'name', 'description', 'phone', 'fax', 'email', 'website'
),
}),
(_('Address'), {
'fields': (
'address', 'postal_code', 'city'
),
}),
)
admin.site.register(Person, PersonAdmin)
admin.site.register(Group, GroupAdmin)

@ -0,0 +1,17 @@
{% load aldryn_people_tags i18n thumbnail %}
<div class="people-item">
<h2>{{ person.name }} <span>{{ person.function }}</span></h2>
{% if person.visual %}<p class="people-visual">
{% if instance.show_links %}<a href="{{ person.get_absolute_url }}">{% endif %}
<img src="{% thumbnail person.visual 200x100 crop subject_location=person.visual.subject_location %}" alt="{{ person.name }}" />
{% if instance.show_links %}</a>{% endif %}
</p>{% endif %}
<p class="people-meta">
{% if person.phone %}{% trans "Phone:" %} <span>{{ person.phone|phoneformat }}</span><br />{% endif %}
{% if person.mobile %}{% trans "Mobile:" %} <span>{{ person.mobile|phoneformat }}</span><br />{% endif %}
{% if person.email %}{% trans "E-Mail:" %} <a href="mailto:{{ person.email }}">{{ person.email }}</a>{% endif %}
{% if instance.show_vcard and person.vcard_enabled %}<br /><a href="{% url 'download_vcard' person.slug %}" class="btn-download">{% trans "Download vCard" %}</a>{% endif %}
</p>
{% if person.description %}<div class="people-desc">{{ person.description|safe }}</div>{% endif %}
</div>

@ -0,0 +1,7 @@
{% load i18n thumbnail %}
<ul class="people-items">
{% for person in people %}
<li>{% include "aldryn_people/includes/people_item.html" with person=person %}</li>
{% endfor %}
</ul>

@ -0,0 +1,9 @@
{% extends "base.html" %}
{% block content %}
<div class="plugin plugin-people">
<div class="people-detail">
{% include "aldryn_people/includes/people_item.html" with person=person %}
</div>
</div>
{% endblock content %}

@ -0,0 +1,27 @@
{% load i18n thumbnail %}
<div class="plugin plugin-people">
{% if people_groups %}
{# Because of hvad I have to activate the plugin's language :( #}
{% language instance.language %}
{% for group, people_list in people_groups.items %}
{% if group.name %}
<div class="people-group">
<h2>{{ group.name }}</h2>
<div class="people-lead">{{ group.description|safe }}</div>
<p class="people-desc">
{% if group.phone %}{% trans "Phone:" %} <span>{{ group.phone }}</span><br />{% endif %}
{% trans "Address:" %}
<span>{{ group.address }}</span>
</p>
</div>
{% endif %}
{% include "aldryn_people/includes/people_items.html" with people=people_list %}
{% endfor %}
{% endlanguage %}
{% endif %}
{% if not people_groups %}
{% include "aldryn_people/includes/people_items.html" %}
{% endif %}
</div>

@ -0,0 +1,27 @@
{% load i18n thumbnail %}
<div class="plugin plugin-people">
{% if people_groups %}
{# Because of hvad I have to activate the plugin's language :( #}
{% language instance.language %}
{% for group, people_list in people_groups.items %}
{% if group.name %}
<div class="people-group">
<h2>{{ group.name }}</h2>
<div class="people-lead">{{ group.description|safe }}</div>
<p class="people-desc">
{% if group.phone %}{% trans "Phone:" %} <span>{{ group.phone }}</span><br />{% endif %}
{% trans "Address:" %}
<span>{{ group.address }}</span>
</p>
</div>
{% endif %}
{% include "aldryn_people/includes/people_items.html" with people=people_list %}
{% endfor %}
{% endlanguage %}
{% endif %}
{% if not people_groups %}
{% include "aldryn_people/includes/people_items.html" %}
{% endif %}
</div>

@ -0,0 +1,27 @@
{% load i18n thumbnail %}
<div class="plugin plugin-people">
{% if people_groups %}
{# Because of hvad I have to activate the plugin's language :( #}
{% language instance.language %}
{% for group, people_list in people_groups.items %}
{% if group.name %}
<div class="people-group">
<h2>{{ group.name }}</h2>
<div class="people-lead">{{ group.description|safe }}</div>
<p class="people-desc">
{% if group.phone %}{% trans "Phone:" %} <span>{{ group.phone }}</span><br />{% endif %}
{% trans "Address:" %}
<span>{{ group.address }}</span>
</p>
</div>
{% endif %}
{% include "aldryn_people/includes/people_items.html" with people=people_list %}
{% endfor %}
{% endlanguage %}
{% endif %}
{% if not people_groups %}
{% include "aldryn_people/includes/people_items.html" %}
{% endif %}
</div>

@ -0,0 +1,17 @@
{% load aldryn_people_tags i18n thumbnail %}
<div class="people-item">
<h2>{{ person.name }} <span>{{ person.function }}</span></h2>
{% if person.visual %}<p class="people-visual">
{% if instance.show_links %}<a href="{{ person.get_absolute_url }}">{% endif %}
<img src="{% thumbnail person.visual 200x100 crop subject_location=person.visual.subject_location %}" alt="{{ person.name }}" />
{% if instance.show_links %}</a>{% endif %}
</p>{% endif %}
<p class="people-meta">
{% if person.phone %}{% trans "Phone:" %} <span>{{ person.phone|phoneformat }}</span><br />{% endif %}
{% if person.mobile %}{% trans "Mobile:" %} <span>{{ person.mobile|phoneformat }}</span><br />{% endif %}
{% if person.email %}{% trans "E-Mail:" %} <a href="mailto:{{ person.email }}">{{ person.email }}</a>{% endif %}
{% if instance.show_vcard and person.vcard_enabled %}<br /><a href="{% url 'download_vcard' person.slug %}" class="btn-download">{% trans "Download vCard" %}</a>{% endif %}
</p>
{% if person.description %}<div class="people-desc">{{ person.description|safe }}</div>{% endif %}
</div>

@ -0,0 +1,7 @@
{% load i18n thumbnail %}
<ul class="people-items">
{% for person in people %}
<li>{% include "aldryn_people/includes/people_item.html" with person=person %}</li>
{% endfor %}
</ul>

@ -0,0 +1,9 @@
{% extends "base.html" %}
{% block content %}
<div class="plugin plugin-people">
<div class="people-detail">
{% include "aldryn_people/includes/people_item.html" with person=person %}
</div>
</div>
{% endblock content %}

@ -0,0 +1,27 @@
{% load i18n thumbnail %}
<div class="plugin plugin-people">
{% if people_groups %}
{# Because of hvad I have to activate the plugin's language :( #}
{% language instance.language %}
{% for group, people_list in people_groups.items %}
{% if group.name %}
<div class="people-group">
<h2>{{ group.name }}</h2>
<div class="people-lead">{{ group.description|safe }}</div>
<p class="people-desc">
{% if group.phone %}{% trans "Phone:" %} <span>{{ group.phone }}</span><br />{% endif %}
{% trans "Address:" %}
<span>{{ group.address }}</span>
</p>
</div>
{% endif %}
{% include "aldryn_people/includes/people_items.html" with people=people_list %}
{% endfor %}
{% endlanguage %}
{% endif %}
{% if not people_groups %}
{% include "aldryn_people/includes/people_items.html" %}
{% endif %}
</div>

@ -0,0 +1,27 @@
{% load i18n thumbnail %}
<div class="plugin plugin-people">
{% if people_groups %}
{# Because of hvad I have to activate the plugin's language :( #}
{% language instance.language %}
{% for group, people_list in people_groups.items %}
{% if group.name %}
<div class="people-group">
<h2>{{ group.name }}</h2>
<div class="people-lead">{{ group.description|safe }}</div>
<p class="people-desc">
{% if group.phone %}{% trans "Phone:" %} <span>{{ group.phone }}</span><br />{% endif %}
{% trans "Address:" %}
<span>{{ group.address }}</span>
</p>
</div>
{% endif %}
{% include "aldryn_people/includes/people_items.html" with people=people_list %}
{% endfor %}
{% endlanguage %}
{% endif %}
{% if not people_groups %}
{% include "aldryn_people/includes/people_items.html" %}
{% endif %}
</div>

@ -0,0 +1,27 @@
{% load i18n thumbnail %}
<div class="plugin plugin-people">
{% if people_groups %}
{# Because of hvad I have to activate the plugin's language :( #}
{% language instance.language %}
{% for group, people_list in people_groups.items %}
{% if group.name %}
<div class="people-group">
<h2>{{ group.name }}</h2>
<div class="people-lead">{{ group.description|safe }}</div>
<p class="people-desc">
{% if group.phone %}{% trans "Phone:" %} <span>{{ group.phone }}</span><br />{% endif %}
{% trans "Address:" %}
<span>{{ group.address }}</span>
</p>
</div>
{% endif %}
{% include "aldryn_people/includes/people_items.html" with people=people_list %}
{% endfor %}
{% endlanguage %}
{% endif %}
{% if not people_groups %}
{% include "aldryn_people/includes/people_items.html" %}
{% endif %}
</div>

@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
class PeopleApp(CMSApp):
name = _('People')
urls = ['aldryn_people.urls']
app_name = 'aldryn_people'
apphook_pool.register(PeopleApp)

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from collections import defaultdict
from django.utils.translation import ugettext_lazy as _
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from aldryn_people import models
class PeoplePlugin(CMSPluginBase):
TEMPLATE_NAME = 'aldryn_people/plugins/%s/people_list.html'
module = 'People'
render_template = TEMPLATE_NAME % models.PeoplePlugin.STYLE_CHOICES[0][0]
name = _('People list')
model = models.PeoplePlugin
def group_people(self, people, language):
groups = defaultdict(list)
for people in people:
groups[people.group].append(people)
# Python/Django bug ?
groups.default_factory = None
return groups
def render(self, context, instance, placeholder):
people = instance.get_selected_people()
self.render_template = self.TEMPLATE_NAME % instance.style
context['instance'] = instance
context['people'] = people
if (models.Group.objects.filter(person__in=people).exists() and
instance.group_by_group):
context['people_groups'] = self.group_people(
people, instance.language)
context['group_less_people'] = people.filter(group__isnull=True)
else:
context['people_groups'] = []
context['group_less_people'] = []
return context
plugin_pool.register_plugin(PeoplePlugin)

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from parler.forms import TranslatableModelForm
from .models import Person
class PersonForm(TranslatableModelForm):
class Meta:
model = Person
fields = [
'description',
'email',
'fax',
'function',
'group',
'mobile',
'name',
'phone',
'slug',
'user',
'vcard_enabled',
'visual',
'website',
]
def clean_slug(self):
return self.cleaned_data['slug'] or None

@ -0,0 +1,119 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django.db.models.deletion
import djangocms_text_ckeditor.fields
import filer.fields.image
from django.conf import settings
import sortedm2m.fields
class Migration(migrations.Migration):
dependencies = [
('cms', '0003_auto_20140926_2347'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('filer', '__first__'),
]
operations = [
migrations.CreateModel(
name='Group',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('address', models.TextField(verbose_name='address', blank=True)),
('postal_code', models.CharField(max_length=20, verbose_name='postal code', blank=True)),
('city', models.CharField(max_length=255, verbose_name='city', blank=True)),
('phone', models.CharField(max_length=100, null=True, verbose_name='phone', blank=True)),
('fax', models.CharField(max_length=100, null=True, verbose_name='fax', blank=True)),
('email', models.EmailField(default='', max_length=75, verbose_name='email', blank=True)),
('website', models.URLField(null=True, verbose_name='website', blank=True)),
],
options={
'verbose_name': 'Group',
'verbose_name_plural': 'Groups',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='GroupTranslation',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('description', djangocms_text_ckeditor.fields.HTMLField(verbose_name='description', blank=True)),
('language_code', models.CharField(max_length=15, db_index=True)),
('master', models.ForeignKey(related_name='translations', editable=False, to='aldryn_people.Group', null=True)),
],
options={
'abstract': False,
'db_table': 'aldryn_people_group_translation',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='PeoplePlugin',
fields=[
('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
('style', models.CharField(default='standard', max_length=50, verbose_name='Style', choices=[('standard', 'Standard'), ('feature', 'Feature')])),
('group_by_group', models.BooleanField(default=True, help_text='when checked, people are grouped by their group', verbose_name='group by group')),
('show_links', models.BooleanField(default=False, verbose_name='Show links to Detail Page')),
('show_vcard', models.BooleanField(default=False, verbose_name='Show links to download vCard')),
],
options={
'abstract': False,
},
bases=('cms.cmsplugin',),
),
migrations.CreateModel(
name='Person',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('phone', models.CharField(max_length=100, null=True, verbose_name='phone', blank=True)),
('mobile', models.CharField(max_length=100, null=True, verbose_name='mobile', blank=True)),
('fax', models.CharField(max_length=100, null=True, verbose_name='fax', blank=True)),
('email', models.EmailField(default='', max_length=75, verbose_name='email', blank=True)),
('website', models.URLField(null=True, verbose_name='website', blank=True)),
('slug', models.CharField(max_length=255, unique=True, null=True, verbose_name='unique slug', blank=True)),
('vcard_enabled', models.BooleanField(default=True, verbose_name='enable vCard download')),
('group', models.ForeignKey(verbose_name='group', blank=True, to='aldryn_people.Group', null=True)),
('user', models.ForeignKey(null=True, blank=True, to=settings.AUTH_USER_MODEL, unique=True)),
('visual', filer.fields.image.FilerImageField(on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='filer.Image', null=True)),
],
options={
'verbose_name': 'Person',
'verbose_name_plural': 'People',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='PersonTranslation',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('function', models.CharField(default='', max_length=255, verbose_name='function', blank=True)),
('description', djangocms_text_ckeditor.fields.HTMLField(default='', verbose_name='Description', blank=True)),
('language_code', models.CharField(max_length=15, db_index=True)),
('master', models.ForeignKey(related_name='translations', editable=False, to='aldryn_people.Person', null=True)),
],
options={
'abstract': False,
'db_table': 'aldryn_people_person_translation',
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='persontranslation',
unique_together=set([('language_code', 'master')]),
),
migrations.AddField(
model_name='peopleplugin',
name='people',
field=sortedm2m.fields.SortedManyToManyField(help_text=None, to='aldryn_people.Person', null=True, blank=True),
preserve_default=True,
),
migrations.AlterUniqueTogether(
name='grouptranslation',
unique_together=set([('language_code', 'master')]),
),
]

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('aldryn_people', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='grouptranslation',
options={'default_permissions': (), 'verbose_name': 'Group Translation'},
),
migrations.AlterModelOptions(
name='persontranslation',
options={'default_permissions': (), 'verbose_name': 'Person Translation'},
),
migrations.AlterField(
model_name='grouptranslation',
name='language_code',
field=models.CharField(db_index=True, max_length=15, verbose_name='Language', choices=[(b'en', b'English')]),
preserve_default=True,
),
migrations.AlterField(
model_name='persontranslation',
name='language_code',
field=models.CharField(db_index=True, max_length=15, verbose_name='Language', choices=[(b'en', b'English')]),
preserve_default=True,
),
]

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import aldryn_common.admin_fields.sortedm2m
class Migration(migrations.Migration):
dependencies = [
('aldryn_people', '0002_auto_20150128_1411'),
]
operations = [
migrations.AlterField(
model_name='peopleplugin',
name='people',
field=aldryn_common.admin_fields.sortedm2m.SortedM2MModelField(help_text=None, to='aldryn_people.Person', null=True, blank=True),
preserve_default=True,
),
]

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('aldryn_people', '0003_auto_20150425_2103'),
]
operations = [
migrations.AlterModelOptions(
name='grouptranslation',
options={'default_permissions': (), 'verbose_name': 'Group Translation', 'managed': True},
),
migrations.AlterModelOptions(
name='persontranslation',
options={'default_permissions': (), 'verbose_name': 'Person Translation', 'managed': True},
),
migrations.AlterField(
model_name='grouptranslation',
name='language_code',
field=models.CharField(max_length=15, verbose_name='Language', db_index=True),
preserve_default=True,
),
migrations.AlterField(
model_name='persontranslation',
name='language_code',
field=models.CharField(max_length=15, verbose_name='Language', db_index=True),
preserve_default=True,
),
]

@ -0,0 +1,248 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import base64
import urlparse
import aldryn_common
import warnings
import vobject
from django.core.urlresolvers import reverse
from django.conf import settings
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
try:
from django.utils.text import slugify
except ImportError:
# In Djano <= 1.4 slugify is here
from django.template.defaultfilters import slugify
from cms.models.pluginmodel import CMSPlugin
from djangocms_text_ckeditor.fields import HTMLField
from filer.fields.image import FilerImageField
from parler.models import TranslatableModel, TranslatedFields
import aldryn_common.admin_fields.sortedm2m
from .utils import get_additional_styles
@python_2_unicode_compatible
class Group(TranslatableModel):
translations = TranslatedFields(
name=models.CharField(_('name'), max_length=255),
description=HTMLField(_('description'), blank=True),
address=models.TextField(
verbose_name=_('address'), blank=True),
city=models.CharField(
verbose_name=_('city'), max_length=255, blank=True)
)
postal_code = models.CharField(
verbose_name=_('postal code'), max_length=20, blank=True)
phone = models.CharField(
verbose_name=_('phone'), null=True, blank=True, max_length=100)
fax = models.CharField(
verbose_name=_('fax'), null=True, blank=True, max_length=100)
email = models.EmailField(
verbose_name=_('email'), blank=True, default='')
website = models.URLField(
verbose_name=_('website'), null=True, blank=True)
@property
def company_name(self):
warnings.warn(
'"Group.company_name" has been refactored to "Group.name"',
DeprecationWarning
)
return self.safe_translation_getter('name')
@property
def company_description(self):
warnings.warn(
'"Group.company_description" has been refactored to '
'"Group.description"',
DeprecationWarning
)
return self.safe_translation_getter('description')
def __str__(self):
return self.safe_translation_getter('name', str(self.pk))
class Meta:
verbose_name = _('Group')
verbose_name_plural = _('Groups')
@python_2_unicode_compatible
class Person(TranslatableModel):
translations = TranslatedFields(
function=models.CharField(
_('function'), max_length=255, blank=True, default=''),
description=HTMLField(
_('Description'), blank=True, default=''),
name=models.CharField(
verbose_name=_('name'), max_length=255)
)
phone = models.CharField(
verbose_name=_('phone'), null=True, blank=True, max_length=100)
mobile = models.CharField(
verbose_name=_('mobile'), null=True, blank=True, max_length=100)
fax = models.CharField(
verbose_name=_('fax'), null=True, blank=True, max_length=100)
email = models.EmailField(
verbose_name=_("email"), blank=True, default='')
website = models.URLField(
verbose_name=_('website'), null=True, blank=True)
group = models.ForeignKey(
Group, verbose_name=_('group'), blank=True, null=True)
visual = FilerImageField(
null=True, blank=True, default=None, on_delete=models.SET_NULL, related_name='visual')
visual_portrait = FilerImageField(
null=True, blank=True, default=None, on_delete=models.SET_NULL, related_name='visual_portrait')
slug = models.CharField(
verbose_name=_('unique slug'), max_length=255, blank=True, null=True,
unique=True)
vcard_enabled = models.BooleanField(
verbose_name=_('enable vCard download'), default=True)
user = models.ForeignKey(
getattr(settings, 'AUTH_USER_MODEL', 'auth.User'),
null=True, blank=True, unique=True)
class Meta:
verbose_name = _('Person')
verbose_name_plural = _('People')
def __str__(self):
return self.name
@property
def comment(self):
return self.safe_translation_getter('description', '')
def get_absolute_url(self):
if self.slug:
kwargs = {'slug': self.slug}
else:
kwargs = {'pk': self.pk}
return reverse('aldryn_people:person-detail', kwargs=kwargs)
def get_vcard(self, request=None):
if self.group:
group_name = self.group.safe_translation_getter('name')
else:
group_name = ''
function = self.safe_translation_getter('function')
vcard = vobject.vCard()
vcard.add('n').value = vobject.vcard.Name(given=self.name)
vcard.add('fn').value = self.name
if self.visual:
try:
with open(self.visual.path, 'rb') as f:
photo = vcard.add('photo')
photo.type_param = self.visual.extension.upper()
photo.value = base64.b64encode(f.read())
photo.encoded = True
photo.encoding_param = 'B'
except IOError:
if request:
photo = vcard.add('photo')
photo.type_param = self.visual.extension.upper()
photo.value = urlparse.urljoin(
request.build_absolute_uri(), self.visual.url)
if self.email:
vcard.add('email').value = self.email
if function:
vcard.add('title').value = function
if self.phone:
tel = vcard.add('tel')
tel.value = unicode(self.phone)
tel.type_param = 'WORK'
if self.mobile:
tel = vcard.add('tel')
tel.value = unicode(self.mobile)
tel.type_param = 'CELL'
if self.fax:
fax = vcard.add('tel')
fax.value = unicode(self.fax)
fax.type_param = 'FAX'
if self.website:
website = vcard.add('url')
website.value = unicode(self.website)
if self.group:
if group_name:
vcard.add('org').value = [group_name]
if self.group.address or self.group.city or self.group.postal_code:
vcard.add('adr')
vcard.adr.type_param = 'WORK'
vcard.adr.value = vobject.vcard.Address()
if self.group.address:
vcard.adr.value.street = self.group.address
if self.group.city:
vcard.adr.value.city = self.group.city
if self.group.postal_code:
vcard.adr.value.code = self.group.postal_code
if self.group.phone:
tel = vcard.add('tel')
tel.value = unicode(self.group.phone)
tel.type_param = 'WORK'
if self.group.fax:
fax = vcard.add('tel')
fax.value = unicode(self.group.fax)
fax.type_param = 'FAX'
if self.group.website:
website = vcard.add('url')
website.value = unicode(self.group.website)
return vcard.serialize()
def save(self, **kwargs):
name = self.safe_translation_getter('name')
if not self.slug:
self.slug = slugify(name)
return super(Person, self).save(**kwargs)
@python_2_unicode_compatible
class BasePeoplePlugin(CMSPlugin):
STYLE_CHOICES = [
('standard', _('Standard')),
('feature', _('Feature'))
] + get_additional_styles()
style = models.CharField(
_('Style'), choices=STYLE_CHOICES,
default=STYLE_CHOICES[0][0], max_length=50)
people = aldryn_common.admin_fields.sortedm2m.SortedM2MModelField(
Person, blank=True, null=True)
group_by_group = models.BooleanField(
verbose_name=_('group by group'),
default=True,
help_text=_('when checked, people are grouped by their group')
)
show_links = models.BooleanField(
verbose_name=_('Show links to Detail Page'), default=False)
show_vcard = models.BooleanField(
verbose_name=_('Show links to download vCard'), default=False)
class Meta:
abstract = True
def __str__(self):
return unicode(self.pk)
def copy_relations(self, oldinstance):
self.people = oldinstance.people.all()
def get_selected_people(self):
return self.people.select_related('group', 'visual')
class PeoplePlugin(BasePeoplePlugin):
class Meta:
abstract = False

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf import settings
from aldryn_search.utils import get_index_base, strip_tags
from .models import Person
class PeopleIndex(get_index_base()):
haystack_use_for_indexing = getattr(settings, "ALDRYN_PEOPLE_SEARCH", True)
INDEX_TITLE = True
def get_title(self, obj):
return obj.name
def get_description(self, obj):
return obj.description
def get_index_kwargs(self, language):
return {'translations__language_code': language}
def get_index_queryset(self, language):
return self.get_model().objects.active_translations(
language_code=language)
def get_model(self):
return Person
def get_search_data(self, obj, language, request):
return strip_tags(self.get_description(obj)).strip()

@ -0,0 +1,159 @@
# -*- 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 model 'GroupTranslation'
db.create_table(u'aldryn_people_group_translation', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('company_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['aldryn_people.Group'])),
))
db.send_create_signal(u'aldryn_people', ['GroupTranslation'])
# Adding unique constraint on 'GroupTranslation', fields ['language_code', 'master']
db.create_unique(u'aldryn_people_group_translation', ['language_code', 'master_id'])
# Adding model 'Group'
db.create_table(u'aldryn_people_group', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('address', self.gf('django.db.models.fields.TextField')()),
('postal_code', self.gf('django.db.models.fields.CharField')(max_length=20)),
('city', self.gf('django.db.models.fields.CharField')(max_length=255)),
('phone', self.gf('phonenumber_field.modelfields.PhoneNumberField')(max_length=128, null=True, blank=True)),
))
db.send_create_signal(u'aldryn_people', ['Group'])
# Adding model 'PersonTranslation'
db.create_table(u'aldryn_people_person_translation', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('function', self.gf('django.db.models.fields.CharField')(max_length=255)),
('comment', self.gf('django.db.models.fields.TextField')(default='', blank=True)),
('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['aldryn_people.Person'])),
))
db.send_create_signal(u'aldryn_people', ['PersonTranslation'])
# Adding unique constraint on 'PersonTranslation', fields ['language_code', 'master']
db.create_unique(u'aldryn_people_person_translation', ['language_code', 'master_id'])
# Adding model 'Person'
db.create_table(u'aldryn_people_person', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name', self.gf('django.db.models.fields.CharField')(max_length=255)),
('phone', self.gf('phonenumber_field.modelfields.PhoneNumberField')(max_length=128, null=True, blank=True)),
('mobile', self.gf('phonenumber_field.modelfields.PhoneNumberField')(max_length=128, null=True, blank=True)),
('email', self.gf('django.db.models.fields.EmailField')(max_length=75)),
('group', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['aldryn_people.Group'], null=True, blank=True)),
))
db.send_create_signal(u'aldryn_people', ['Person'])
# Adding model 'PeoplePlugin'
db.create_table(u'cmsplugin_peopleplugin', (
(u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
))
db.send_create_signal(u'aldryn_people', ['PeoplePlugin'])
# Adding M2M table for field people on 'PeoplePlugin'
db.create_table(u'aldryn_people_peopleplugin_people', (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('peopleplugin', models.ForeignKey(orm[u'aldryn_people.peopleplugin'], null=False)),
('person', models.ForeignKey(orm[u'aldryn_people.person'], null=False))
))
db.create_unique(u'aldryn_people_peopleplugin_people', ['peopleplugin_id', 'person_id'])
def backwards(self, orm):
# Removing unique constraint on 'PersonTranslation', fields ['language_code', 'master']
db.delete_unique(u'aldryn_people_person_translation', ['language_code', 'master_id'])
# Removing unique constraint on 'GroupTranslation', fields ['language_code', 'master']
db.delete_unique(u'aldryn_people_group_translation', ['language_code', 'master_id'])
# Deleting model 'GroupTranslation'
db.delete_table(u'aldryn_people_group_translation')
# Deleting model 'Group'
db.delete_table(u'aldryn_people_group')
# Deleting model 'PersonTranslation'
db.delete_table(u'aldryn_people_person_translation')
# Deleting model 'Person'
db.delete_table(u'aldryn_people_person')
# Deleting model 'PeoplePlugin'
db.delete_table(u'cmsplugin_peopleplugin')
# Removing M2M table for field people on 'PeoplePlugin'
db.delete_table('aldryn_people_peopleplugin_people')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', 'db_table': "u'cmsplugin_peopleplugin'", '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'people': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,169 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
depends_on = (
("filer", "0001_initial"),
("cms", "0001_initial"),
)
def forwards(self, orm):
# Adding field 'Person.visual'
db.add_column(u'aldryn_people_person', 'visual',
self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['filer.Image'], null=True, on_delete=models.SET_NULL, blank=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Person.visual'
db.delete_column(u'aldryn_people_person', 'visual_id')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', 'db_table': "u'cmsplugin_peopleplugin'", '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'people': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,164 @@
# -*- 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 'PeoplePlugin.sort_value'
db.add_column(u'aldryn_people_peopleplugin_people', 'sort_value',
self.gf('django.db.models.fields.IntegerField')(default=1),
keep_default=False)
def backwards(self, orm):
# Deleting field 'PeoplePlugin.sort_value'
db.delete_column(u'aldryn_people_peopleplugin_people', 'sort_value')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', 'db_table': "u'cmsplugin_peopleplugin'", '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,165 @@
# -*- 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 'GroupTranslation.company_description'
db.add_column(u'aldryn_people_group_translation', 'company_description',
self.gf('djangocms_text_ckeditor.fields.HTMLField')(default='', blank=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'GroupTranslation.company_description'
db.delete_column(u'aldryn_people_group_translation', 'company_description')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', 'db_table': "u'cmsplugin_peopleplugin'", '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,166 @@
# -*- 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 'PeoplePlugin.group_by_group'
db.add_column(u'cmsplugin_peopleplugin', 'group_by_group',
self.gf('django.db.models.fields.BooleanField')(default=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'PeoplePlugin.group_by_group'
db.delete_column(u'cmsplugin_peopleplugin', 'group_by_group')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', 'db_table': "u'cmsplugin_peopleplugin'", '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,167 @@
# -*- 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 'PeoplePlugin.show_links'
db.add_column(u'cmsplugin_peopleplugin', 'show_links',
self.gf('django.db.models.fields.BooleanField')(default=False),
keep_default=False)
def backwards(self, orm):
# Deleting field 'PeoplePlugin.show_links'
db.delete_column(u'cmsplugin_peopleplugin', 'show_links')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,168 @@
# -*- 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 'Person.slug'
db.add_column(u'aldryn_people_person', 'slug',
self.gf('django.db.models.fields.CharField')(max_length=255, unique=True, null=True, blank=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Person.slug'
db.delete_column(u'aldryn_people_person', 'slug')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,185 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import DataMigration
from django.db import models
from django.template.defaultfilters import slugify
class Migration(DataMigration):
def forwards(self, orm):
for person in orm.Person.objects.all():
if person.slug:
continue
slug = slugify(person.name)
try:
# check for an existing person with this slug
orm.Person.objects.get(slug=slug)
except orm.Person.DoesNotExist:
# nope, let's save that one
person.slug = slug
person.save()
else:
# try to find a slug by appending a number
for i in range(2, 100):
try:
# check for an existing person with this slug
orm.Person.objects.get(slug='%s-%i' % (slug, i))
except orm.Person.DoesNotExist:
person.slug = '%s-%i' % (slug, i)
person.save()
break
def backwards(self, orm):
# nothing to do here
pass
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']
symmetrical = True

@ -0,0 +1,176 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import connection
class Migration(SchemaMigration):
TABLES_MAPPING = {
'cmsplugin_peopleplugin': 'aldryn_people_peopleplugin',
}
REVERSE_TABLES_MAPPING = dict((v, k) for k, v in TABLES_MAPPING.iteritems())
@staticmethod
def rename_tables_by_map(mapper):
tables_names = connection.introspection.table_names()
for table_name in tables_names:
new_table_name = mapper.get(table_name)
if new_table_name:
db.rename_table(table_name, new_table_name)
def forwards(self, orm):
self.rename_tables_by_map(self.TABLES_MAPPING)
def backwards(self, orm):
self.rename_tables_by_map(self.REVERSE_TABLES_MAPPING)
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,169 @@
# -*- 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 'PeoplePlugin.style'
db.add_column(u'aldryn_people_peopleplugin', 'style',
self.gf('django.db.models.fields.CharField')(default='standard', max_length=50),
keep_default=False)
def backwards(self, orm):
# Deleting field 'PeoplePlugin.style'
db.delete_column(u'aldryn_people_peopleplugin', 'style')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,170 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as 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 'Group.email'
db.add_column(u'aldryn_people_group', 'email',
self.gf('django.db.models.fields.EmailField')(default='', max_length=75, blank=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Group.email'
db.delete_column(u'aldryn_people_group', 'email')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'comment': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,164 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
db.rename_column('aldryn_people_person_translation', 'comment', 'description')
def backwards(self, orm):
db.rename_column('aldryn_people_person_translation', 'description', 'comment')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,171 @@
# -*- 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 'Person.vcard_enabled'
db.add_column(u'aldryn_people_person', 'vcard_enabled',
self.gf('django.db.models.fields.BooleanField')(default=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Person.vcard_enabled'
db.delete_column(u'aldryn_people_person', 'vcard_enabled')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'vcard_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,172 @@
# -*- 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 'PeoplePlugin.show_vcard'
db.add_column(u'aldryn_people_peopleplugin', 'show_vcard',
self.gf('django.db.models.fields.BooleanField')(default=False),
keep_default=False)
def backwards(self, orm):
# Deleting field 'PeoplePlugin.show_vcard'
db.delete_column(u'aldryn_people_peopleplugin', 'show_vcard')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'show_vcard': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('phonenumber_field.modelfields.PhoneNumberField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'vcard_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,182 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Changing field 'Group.phone'
db.alter_column(u'aldryn_people_group', 'phone', self.gf('django.db.models.fields.CharField')(max_length=100, null=True))
# Changing field 'Person.mobile'
db.alter_column(u'aldryn_people_person', 'mobile', self.gf('django.db.models.fields.CharField')(max_length=100, null=True))
# Changing field 'Person.phone'
db.alter_column(u'aldryn_people_person', 'phone', self.gf('django.db.models.fields.CharField')(max_length=100, null=True))
def backwards(self, orm):
# Changing field 'Group.phone'
db.alter_column(u'aldryn_people_group', 'phone', self.gf('phonenumber_field.modelfields.PhoneNumberField')(max_length=128, null=True))
# Changing field 'Person.mobile'
db.alter_column(u'aldryn_people_person', 'mobile', self.gf('phonenumber_field.modelfields.PhoneNumberField')(max_length=128, null=True))
# Changing field 'Person.phone'
db.alter_column(u'aldryn_people_person', 'phone', self.gf('phonenumber_field.modelfields.PhoneNumberField')(max_length=128, null=True))
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'show_vcard': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'vcard_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,200 @@
# -*- 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 'Group.fax'
db.add_column(u'aldryn_people_group', 'fax',
self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True),
keep_default=False)
# Adding field 'Group.website'
db.add_column(u'aldryn_people_group', 'website',
self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True),
keep_default=False)
# Adding field 'Person.fax'
db.add_column(u'aldryn_people_person', 'fax',
self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True),
keep_default=False)
# Adding field 'Person.website'
db.add_column(u'aldryn_people_person', 'website',
self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Group.fax'
db.delete_column(u'aldryn_people_group', 'fax')
# Deleting field 'Group.website'
db.delete_column(u'aldryn_people_group', 'website')
# Deleting field 'Person.fax'
db.delete_column(u'aldryn_people_person', 'fax')
# Deleting field 'Person.website'
db.delete_column(u'aldryn_people_person', 'website')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'show_vcard': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'vcard_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}),
'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,177 @@
# -*- 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 'Person.user'
db.add_column(u'aldryn_people_person', 'user',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], unique=True, null=True, blank=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Person.user'
db.delete_column(u'aldryn_people_person', 'user_id')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'show_vcard': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'vcard_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}),
'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,175 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Changing field 'PersonTranslation.description'
db.alter_column(u'aldryn_people_person_translation', 'description', self.gf('djangocms_text_ckeditor.fields.HTMLField')())
def backwards(self, orm):
# Changing field 'PersonTranslation.description'
db.alter_column(u'aldryn_people_person_translation', 'description', self.gf('django.db.models.fields.TextField')())
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'company_description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
'company_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'show_vcard': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'vcard_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}),
'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,173 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
db.rename_column('aldryn_people_group_translation', 'company_name', 'name')
db.rename_column('aldryn_people_group_translation', 'company_description', 'description')
def backwards(self, orm):
db.rename_column('aldryn_people_group_translation', 'name', 'company_name')
db.rename_column('aldryn_people_group_translation', 'description', 'company_description')
models = {
u'aldryn_people.group': {
'Meta': {'object_name': 'Group'},
'address': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.grouptranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'GroupTranslation', 'db_table': "u'aldryn_people_group_translation'"},
'description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Group']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
},
u'aldryn_people.peopleplugin': {
'Meta': {'object_name': 'PeoplePlugin', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'group_by_group': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'people': ('sortedm2m.fields.SortedManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['aldryn_people.Person']", 'null': 'True', 'blank': 'True'}),
'show_links': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'show_vcard': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'style': ('django.db.models.fields.CharField', [], {'default': "'standard'", 'max_length': '50'})
},
u'aldryn_people.person': {
'Meta': {'object_name': 'Person'},
'email': ('django.db.models.fields.EmailField', [], {'default': "''", 'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['aldryn_people.Group']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'phone': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'}),
'vcard_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visual': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['filer.Image']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}),
'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'aldryn_people.persontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PersonTranslation', 'db_table': "u'aldryn_people_person_translation'"},
'description': ('djangocms_text_ckeditor.fields.HTMLField', [], {'default': "''", 'blank': 'True'}),
'function': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['aldryn_people.Person']"})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'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': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'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'}),
u'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'})
},
'filer.file': {
'Meta': {'object_name': 'File'},
'_file_size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'folder': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'all_files'", 'null': 'True', 'to': "orm['filer.Folder']"}),
'has_all_mandatory_data': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'original_filename': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_files'", 'null': 'True', 'to': u"orm['auth.User']"}),
'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_filer.file_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}),
'sha1': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.folder': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('parent', 'name'),)", 'object_name': 'Folder'},
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filer_owned_folders'", 'null': 'True', 'to': u"orm['auth.User']"}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['filer.Folder']"}),
u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'filer.image': {
'Meta': {'object_name': 'Image', '_ormbases': ['filer.File']},
'_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'author': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'default_alt_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
'default_caption': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'file_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['filer.File']", 'unique': 'True', 'primary_key': 'True'}),
'must_always_publish_author_credit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'must_always_publish_copyright': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'subject_location': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['aldryn_people']

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from django.template.base import Library
from phonenumbers import parse, format_number, PhoneNumberFormat
from phonenumbers.phonenumberutil import NumberParseException
register = Library()
@register.filter(is_safe=True)
def phoneformat(phone_number, phone_format='INTERNATIONAL'):
try:
parsed_number = parse(phone_number, None)
format = getattr(PhoneNumberFormat, phone_format)
return format_number(parsed_number, format)
except NumberParseException:
return phone_number

@ -0,0 +1,172 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.sites.models import Site
from django.db import IntegrityError
from django.test import RequestFactory, TestCase
from django.utils.translation import override
from cms import api
from cms.models import Title
from cms.test_utils.testcases import BaseCMSTestCase
from cms.utils import get_cms_setting
from cms.utils.i18n import get_language_list
from djangocms_helper.utils import create_user
from ..models import Group, Person
class BasePeopleTest(BaseCMSTestCase, TestCase):
su_username = 'user'
su_password = 'pass'
data = {
'group1': {
'en': {'name': 'group1', 'description': 'description1'},
'de': {'name': 'Gruppe1', 'description': 'Beschreibung1'},
},
'group2': {
# This should *not* have a EN translation
'de': {'name': 'Gruppe2', 'description': 'Beschreibung2'},
},
'person1': {
'en': {'function': 'function1', 'description': 'description-en'},
'de': {'function': 'Funktion1', 'description': 'Beschreibung-de'},
},
'person2': {
# This should *not* have a EN translation
'de': {'function': 'Funktion2', 'description': 'Beschreibung2'},
},
}
@staticmethod
def reload(obj, language=None):
"""Simple convenience method for re-fetching an object from the ORM,
optionally "as" a specified language."""
try:
new_obj = obj.__class__.objects.language(language).get(id=obj.id)
except:
new_obj = obj.__class__.objects.get(id=obj.id)
return new_obj
def assertEqualItems(self, a, b):
try:
# In Python3, this method has been renamed (poorly)
return self.assertCountEqual(a, b)
except:
# In 2.6, assertItemsEqual() doesn't sort first
return self.assertItemsEqual(sorted(a), sorted(b))
def mktranslation(self, obj, lang, **kwargs):
"""Simple method of adding a translation to an existing object."""
try:
obj.set_current_language(lang)
except:
try:
obj.translate(lang)
except IntegrityError:
pass
for k, v in kwargs.items():
setattr(obj, k, v)
obj.save()
def setUp(self):
self.template = get_cms_setting('TEMPLATES')[0][0]
self.language = settings.LANGUAGES[0][0]
self.page = api.create_page(
'page', self.template, self.language, published=True)
self.placeholder = self.page.placeholders.all()[0]
self.superuser = self.create_superuser()
with override('en'):
self.person1 = Person(**self.data['person1']['en'])
self.group1 = Group(**self.data['group1']['en'])
self.person1.name = 'person1'
self.person1.slug = 'person1-slug'
self.person1.save()
self.group1.save()
# Add a DE translation for person1, group1
self.mktranslation(self.person1, 'de', **self.data['person1']['de'])
self.mktranslation(self.group1, 'de', **self.data['group1']['de'])
# Make person2, group2
with override('de'):
self.person2 = Person(**self.data['person2']['de'])
self.group2 = Group(**self.data['group2']['de'])
self.person2.name = 'person2'
self.person2.slug = 'person2-slug'
self.person2.save()
self.group2.save()
def tearDown(self):
Person.objects.all().delete()
Group.objects.all().delete()
def create_superuser(self):
return User.objects.create_superuser(
self.su_username, 'email@example.com', self.su_password)
class CMSRequestBasedTest(TestCase):
"""Sets-up User(s) and CMS Pages for testing."""
languages = get_language_list()
@classmethod
def setUpClass(cls):
cls.request_factory = RequestFactory()
cls.user = create_user('normal', 'normal@admin.com', 'normal')
cls.site1 = Site.objects.get(pk=1)
@classmethod
def tearDownClass(cls):
User.objects.all().delete()
def get_or_create_page(self, base_title=None, languages=None):
"""Creates a page with a given title, or, if it already exists, just
retrieves and returns it."""
from cms.api import create_page, create_title
if not base_title:
# No title? Create one.
base_title = self.rand_str(prefix="page", length=8)
if not languages:
# If no langs supplied, use'em all
languages = self.languages
# If there is already a page with this title, just return it.
try:
page_title = Title.objects.get(title=base_title)
return page_title.page.get_draft_object()
except:
pass
# No? Okay, create one.
page = create_page(base_title, 'fullwidth.html', language=languages[0])
# If there are multiple languages, create the translations
if len(languages) > 1:
for lang in languages[1:]:
title_lang = "{0}-{1}".format(base_title, lang)
create_title(language=lang, title=title_lang, page=page)
page.publish(lang)
return page.get_draft_object()
def get_page_request(
self, page, user, path=None, edit=False, lang_code='en'):
from cms.middleware.toolbar import ToolbarMiddleware
path = path or page and page.get_absolute_url()
if edit:
path += '?edit'
request = RequestFactory().get(path)
request.session = {}
request.user = user
request.LANGUAGE_CODE = lang_code
if edit:
request.GET = {'edit': None}
else:
request.GET = {'edit_off': None}
request.current_page = page
mid = ToolbarMiddleware()
mid.process_request(request)
return request

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib.sites.models import Site
from django.utils.translation import override
from ..admin.models_admin import PersonAdmin
from ..models import Person
from . import BasePeopleTest
class TestPersonAdmin(BasePeopleTest):
def test_all_translations(self):
site = Site.objects.get(pk=1)
model_admin = PersonAdmin(self.person1, site)
all_translations = model_admin.all_translations(self.person1)
obj_id = self.person1.id
with override('en'):
self.assertEqual(
all_translations,
'<strong><a href="/en/admin/aldryn_people/person/{id}/?language=en">en</a></strong>, <a href="/en/admin/aldryn_people/person/{id}/?language=de">de</a>'.format(id=obj_id) # flake8: noqa
)
# This test does not pass
# with override('de'):
# self.assertEqual(
# all_translations,
# '<a href="/en/admin/aldryn_people/person/{id}/?language=en">en</a>, <strong><a href="/en/admin/aldryn_people/person/{id}/?language=de">de</a></strong>'.format(id=obj_id) # flake8: noqa
# )

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from ..models import Person
from . import BasePeopleTest
class TestPersonAppHook(BasePeopleTest):
def test_add_people_app(self):
"""
We add a person to the app
"""
self.page.application_urls = 'PeopleApp'
self.page.application_namespace = 'aldryn_people'
self.page.publish(self.language)
person = Person.objects.create(
name='Michael', phone='0785214521', email='michael@mit.ch',
slug='michael'
)
# By slug
url = reverse('aldryn_people:person-detail', kwargs={'slug': person.slug})
response = self.client.get(url)
self.assertContains(response, 'Michael')
# By pk
url = reverse('aldryn_people:person-detail', kwargs={'pk': person.pk})
response = self.client.get(url)
self.assertContains(response, 'Michael')

@ -0,0 +1,201 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.test import TransactionTestCase
from django.utils.translation import override, force_text
from ..models import Person, Group
from . import BasePeopleTest
class TestBasicPeopleModels(TransactionTestCase):
def test_create_person(self):
"""We can create a person with a name."""
name = 'Tom Test'
person = Person.objects.create(name=name)
self.assertEqual(person.name, name)
self.assertEqual(Person.objects.all()[0], person)
def test_delete_person(self):
"""We can delete a person."""
name = 'Person Delete'
Person.objects.create(name=name)
Person.objects.get(name=name).delete()
self.assertFalse(Person.objects.filter(name=name))
def test_str(self):
name = 'Person Str'
person = Person.objects.create(name=name)
self.assertEqual(force_text(person), name)
def test_absolute_url(self):
slug = 'person-slug'
person = Person.objects.create(slug=slug)
# This isn't a translation test, per se, but let's make sure that we
# have a predictable language prefix, regardless of the tester's locale.
with override('en'):
self.assertEqual(
person.get_absolute_url(),
'/en/people/{0}/'.format(slug)
)
# Now test that it will work when there's no slug too.
person.slug = ''
self.assertEqual(
person.get_absolute_url(),
'/en/people/{0}/'.format(person.pk),
)
def test_auto_slugify(self):
name = 'Melchior Hoffman'
slug = 'melchior-hoffman'
person = Person.objects.create(name=name)
person.save()
self.assertEquals(person.slug, slug)
class TestBasicGroupModel(TransactionTestCase):
def test_create_group(self):
"""We can create a group with a name."""
group = Group.objects.create(name='group_b')
self.assertTrue(group.name, 'group_b')
def test_delete_group(self):
"""We can delete a group."""
name = 'Group Delete'
Group.objects.create(name=name)
group = Group.objects.translated(name=name)
if group:
group[0].delete()
self.assertFalse(Group.objects.translated(name=name))
def test_create_another_group(self):
"""we create a group."""
name = 'Gruppe Neu'
group = Group.objects.create(name=name)
self.assertEqual(group.name, name)
self.assertEqual(Group.objects.all()[0], group)
def test_add_person_to_group(self):
"""We create a person and add her to the created group."""
personname = 'Daniel'
person = Person.objects.create(name=personname)
name = 'Group One'
group = Group.objects.create(name=name)
person.group = group
person.save()
self.assertIn(person, group.person_set.all())
class TestPersonModelTranslation(BasePeopleTest):
def test_person_translatable(self):
person1 = self.reload(self.person1, 'en')
self.assertEqual(
person1.function,
self.data['person1']['en']['function']
)
person1 = self.reload(self.person1, 'de')
self.assertEqual(
person1.safe_translation_getter('function'),
self.data['person1']['de']['function']
)
def test_comment(self):
person1 = self.reload(self.person1, 'en')
self.assertEqual(
person1.comment,
self.data['person1']['en']['description']
)
person1 = self.reload(self.person1, 'de')
self.assertEqual(
person1.comment,
self.data['person1']['de']['description']
)
def test_get_vcard(self):
person1 = self.reload(self.person1, 'en')
# Test with no group
vcard_en = 'BEGIN:VCARD\r\nVERSION:3.0\r\nFN:person1\r\nN:;person1;;;\r\nTITLE:function1\r\nEND:VCARD\r\n' # flake8: noqa
self.assertEqual(
person1.get_vcard(),
vcard_en
)
# Test with a group and other fields populated
group1 = self.reload(self.group1, 'en')
group1.address = '123 Main Street'
group1.city = 'Anytown'
group1.postal_code = '12345'
group1.phone = '+1 (234) 567-8903'
group1.fax = '+1 (234) 567-8904'
group1.website = 'www.groupwebsite.com'
group1.save()
person1.group = group1
person1.email = 'person@org.org'
person1.phone = '+1 (234) 567-8900'
person1.mobile = '+1 (234) 567-8901'
person1.fax = '+1 (234) 567-8902'
person1.website = 'www.website.com'
person1.save()
vcard_en = 'BEGIN:VCARD\r\nVERSION:3.0\r\nADR;TYPE=WORK:;;123 Main Street;Anytown;;12345;\r\nEMAIL:person@org.org\r\nFN:person1\r\nN:;person1;;;\r\nORG:group1\r\nTEL;TYPE=WORK:+1 (234) 567-8900\r\nTEL;TYPE=CELL:+1 (234) 567-8901\r\nTEL;TYPE=FAX:+1 (234) 567-8902\r\nTEL;TYPE=WORK:+1 (234) 567-8903\r\nTEL;TYPE=FAX:+1 (234) 567-8904\r\nTITLE:function1\r\nURL:www.website.com\r\nURL:www.groupwebsite.com\r\nEND:VCARD\r\n' # flake8: noqa
self.assertEqual(
person1.get_vcard(),
vcard_en
)
# Ensure this works for other langs too
person1 = self.reload(self.person1, 'de')
vcard_de = 'BEGIN:VCARD\r\nVERSION:3.0\r\nADR;TYPE=WORK:;;123 Main Street;Anytown;;12345;\r\nEMAIL:person@org.org\r\nFN:person1\r\nN:;person1;;;\r\nORG:Gruppe1\r\nTEL;TYPE=WORK:+1 (234) 567-8900\r\nTEL;TYPE=CELL:+1 (234) 567-8901\r\nTEL;TYPE=FAX:+1 (234) 567-8902\r\nTEL;TYPE=WORK:+1 (234) 567-8903\r\nTEL;TYPE=FAX:+1 (234) 567-8904\r\nTITLE:Funktion1\r\nURL:www.website.com\r\nURL:www.groupwebsite.com\r\nEND:VCARD\r\n' # flake8: noqa
with override('de'):
self.assertEqual(
person1.get_vcard(),
vcard_de
)
class TestGroupModelTranslation(BasePeopleTest):
def test_group_translation(self):
group1 = self.reload(self.group1, 'en')
self.assertEqual(group1.name, self.data['group1']['en']['name'])
group1 = self.reload(self.group1, 'de')
self.assertEqual(group1.name, self.data['group1']['de']['name'])
def test_company_name(self):
group1 = self.reload(self.group1, 'en')
self.assertEqual(
group1.company_name,
self.data['group1']['en']['name'],
)
group1 = self.reload(self.group1, 'de')
self.assertEqual(
group1.company_name,
self.data['group1']['de']['name'],
)
def test_company_description(self):
group1 = self.reload(self.group1, 'en')
self.assertEqual(
group1.company_description,
self.data['group1']['en']['description'],
)
group1 = self.reload(self.group1, 'de')
self.assertEqual(
group1.company_description,
self.data['group1']['de']['description'],
)
def test_str(self):
group1 = self.reload(self.group1, 'en')
self.assertEqual(
force_text(group1),
self.data['group1']['en']['name'],
)
group1 = self.reload(self.group1, 'de')
self.assertEqual(
force_text(group1),
self.data['group1']['de']['name'],
)

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.utils.translation import force_text
from cms import api
from cms.models import CMSPlugin
from cms.test_utils.testcases import URL_CMS_PLUGIN_ADD
from ..models import Person
from ..cms_plugins import PeoplePlugin
from . import BasePeopleTest
class TestPersonPlugins(BasePeopleTest):
def test_add_people_list_plugin_api(self):
"""
We add a person to the People Plugin and look her up
"""
name = 'Donald'
Person.objects.create(name=name)
plugin = api.add_plugin(self.placeholder, PeoplePlugin, self.language)
plugin.people = Person.objects.all()
self.assertEqual(force_text(plugin), force_text(plugin.pk))
self.page.publish(self.language)
url = self.page.get_absolute_url()
response = self.client.get(url)
self.assertContains(response, name)
def test_add_people_list_plugin_client(self):
"""
We log into the PeoplePlugin
"""
self.client.login(username=self.su_username, password=self.su_password)
plugin_data = {
'plugin_type': 'PeoplePlugin',
'plugin_language': self.language,
'placeholder_id': self.placeholder.pk,
}
response = self.client.post(URL_CMS_PLUGIN_ADD, plugin_data)
self.assertEqual(response.status_code, 200)
self.assertTrue(CMSPlugin.objects.exists())

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from aldryn_people.search_indexes import PeopleIndex
from ..models import Person
from . import BasePeopleTest
class TestPeopleIndex(BasePeopleTest):
def test_get_title(self):
idx_obj = PeopleIndex()
person1 = self.reload(self.person1, "en")
self.assertEqual(idx_obj.get_title(person1), person1.name)
person1 = self.reload(self.person1, "de")
self.assertEqual(idx_obj.get_title(person1), person1.name)
def test_get_index_kwargs(self):
# This is a silly test, but is here for completeness.
idx_obj = PeopleIndex()
self.assertEqual(idx_obj.get_index_kwargs("en"), {
'translations__language_code': 'en'
})
def test_get_index_queryset(self):
idx_obj = PeopleIndex()
# Person2 does NOT have an EN translation, so should appear here.
self.assertEqualItems(
[q.id for q in idx_obj.get_index_queryset("en")],
[self.person1.id],
)
# Both person objects have DE translations
self.assertEqualItems(
[q.id for q in idx_obj.get_index_queryset("de")],
[self.person1.id, self.person2.id],
)
def test_get_model(self):
# This is a silly test, but is here for completeness.
idx_obj = PeopleIndex()
self.assertEqual(idx_obj.get_model(), Person)
def test_get_search_data(self):
idx_obj = PeopleIndex()
person1 = self.reload(self.person1, "en")
search_data = idx_obj.get_search_data(person1, "en", None)
self.assertEqual(search_data, self.data['person1']['en']['description'])

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.http import Http404
from django.test.client import RequestFactory
from ..views import DownloadVcardView
from . import BasePeopleTest, CMSRequestBasedTest
class TestDownloadVcardView(BasePeopleTest, CMSRequestBasedTest):
def test_as_view(self):
"""Tests that DownloadVcardView produces the correct headers."""
person1 = self.reload(self.person1, "en")
person1.slug = 'person1-slug'
kwargs = {"slug": person1.slug}
person1_url = reverse('aldryn_people:person-detail', kwargs=kwargs)
factory = RequestFactory()
request = factory.get(person1_url)
response = DownloadVcardView.as_view()(request, **kwargs)
filename = '{0}.vcf'.format(person1.name)
self.assertEqual(
response["Content-Disposition"],
'attachment; filename="{0}"'.format(filename)
)
# Now, disable vcards for this person, and re-test
person1.vcard_enabled = False
person1.save()
with self.assertRaises(Http404):
request = factory.get(person1_url)
response = DownloadVcardView.as_view()(request, **kwargs)

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from cms.utils.conf import get_cms_setting
admin.autodiscover()
urlpatterns = patterns('',
url(
r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT, 'show_indexes': True
}
),
url(
r'^media/cms/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': get_cms_setting('MEDIA_ROOT'), 'show_indexes': True
}
),
url(
r'^jsi18n/(?P<packages>\S+?)/$',
'django.views.i18n.javascript_catalog'
),
)
urlpatterns += staticfiles_urlpatterns()
urlpatterns += i18n_patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^people/', include('aldryn_people.urls', namespace='aldryn_people')),
url(r'^', include('cms.urls')),
)

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf.urls import patterns, url
from aldryn_people.views import PersonView, DownloadVcardView
urlpatterns = patterns('',
url(r'^(?P<pk>[0-9]+)/$',
PersonView.as_view(), name='person-detail'),
url(r'^(?P<slug>[A-Za-z0-9_\-]+)/$',
PersonView.as_view(), name='person-detail'),
url(r'^(?P<pk>[0-9]+)/download/$',
DownloadVcardView.as_view(), name='download_vcard'),
url(r'^(?P<slug>[A-Za-z0-9_\-]+)/download/$',
DownloadVcardView.as_view(), name='download_vcard'),
)

@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf import settings
def get_additional_styles():
"""
Get additional styles choices from settings
"""
styles = getattr(settings, 'PEOPLE_PLUGIN_STYLES', '')
choices = [(s.strip().lower(), s.title()) for s in styles.split(',') if s]
return choices

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.http import Http404, HttpResponse
from django.views.generic import DetailView
from aldryn_people.models import Person
class DownloadVcardView(DetailView):
model = Person
def get(self, request, *args, **kwargs):
person = self.get_object()
if not person.vcard_enabled:
raise Http404
filename = "%s.vcf" % person.name
vcard = person.get_vcard(request)
try:
vcard = vcard.decode('utf-8').encode('ISO-8859-1')
except:
pass
response = HttpResponse(vcard, content_type="text/x-vCard")
response['Content-Disposition'] = 'attachment; filename="{0}"'.format(
filename)
return response
class PersonView(DetailView):
model = Person

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
__version__='0.6.4'

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf.urls import url
from django.contrib import admin
from .models import Segment
from .views import set_segment_override, reset_all_segment_overrides
class SegmentAdmin(admin.ModelAdmin):
#
# Note: model.Segment is empty and un-managed. Its sole purpose is to
# provide the opportunity to add custom views to the AdminSite for
# managing segments from the toolbar.
#
def get_model_perms(self, request):
'''
Returns an empty perms dict which has the effect of disabling its
display in the AdminSite, but still allows access to the views defined
below.
'''
return dict()
def get_urls(self):
return [
url(r'set_override/$',
self.admin_site.admin_view(set_segment_override),
name='set_segment_override'
),
url(r'reset_all_segment_overrides/$',
self.admin_site.admin_view(reset_all_segment_overrides),
name='reset_all_segment_overrides'
),
] + super(SegmentAdmin, self).get_urls()
admin.site.register(Segment, SegmentAdmin)

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
from .segment_plugin_base import *
from .segment_plugins import *
from .segment_limiter import *

@ -0,0 +1,124 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
from cms.plugin_pool import plugin_pool
from ..models import SegmentLimitPluginModel
from .segment_plugin_base import SegmentPluginBase
class SegmentLimitPlugin(SegmentPluginBase):
'''
This is a special SegmentPlugin that acts as a top-level container for
segmentation plugins and can set an upper-limit to the number of children
that will be rendered in the current context.
'''
allow_children = True
model = SegmentLimitPluginModel
module = _('Segmentation')
name = _('Limit Block')
parent_classes = None
render_template = 'aldryn_segmentation/_limiter.html'
allow_overrides = False
def render(self, context, instance, placeholder):
context = super(SegmentLimitPlugin, self).render(
context, instance, placeholder)
context['child_plugins'] = self.get_context_appropriate_children(
context, instance)
return context
def is_context_appropriate(self, context, instance):
'''
Returns True if any of its children are context-appropriate,
else False.
'''
apt_children = self.get_context_appropriate_children(context, instance)
num_apt = sum( 1 for child in apt_children if child[1] )
return num_apt > 0
def get_context_appropriate_children(self, context, instance):
from ..segment_pool import SegmentOverride
'''
Returns a LIST OF TUPLES each containing a child plugin instance and a
Boolean representing the plugin's appropriateness for rendering in
this context.
'''
children = []
# child_plugin_instances can sometimes be None
generic_children = instance.child_plugin_instances or []
render_all = (instance.max_children == 0)
slots_remaining = instance.max_children
for child_instance in generic_children:
child_plugin = child_instance.get_plugin_class_instance()
if render_all or slots_remaining > 0:
if hasattr(child_plugin, 'is_context_appropriate'):
#
# This quacks like a segment plugin...
#
if (hasattr(child_plugin, 'allow_overrides') and
child_plugin.allow_overrides and
hasattr(child_plugin, 'get_segment_override')):
override = child_plugin.get_segment_override(
context, child_instance)
if override == SegmentOverride.ForcedActive:
child = (child_instance, True)
elif override == SegmentOverride.ForcedInactive:
child = (child_instance, False)
else:
#
# There's no override, so, just let the segment
# decide...
#
child = (
child_instance,
child_plugin.is_context_appropriate(
context, child_instance
),
)
else:
#
# Hmmm, this segment plugin appears to have no
# allow_overrides property or get_segment_override()
# method. OK then, let the plugin decide if it is
# appropriate to render.
#
child = (
child_instance,
child_plugin.is_context_appropriate(
context, child_instance
),
)
else:
#
# This doesn't quack like a Segment Plugin, so, it is
# always OK to render.
#
child = ( child_instance, True, )
if child[1]:
slots_remaining -= 1
else:
#
# We've run out of available slots...
#
child = ( child_instance, False, )
children.append(child)
return children
plugin_pool.register_plugin(SegmentLimitPlugin)

@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
from cms.plugin_base import CMSPluginBase
class SegmentPluginBase(CMSPluginBase):
'''
Abstract base class to be used for all segment plugins. It provides the
default implementation of necessary additional methods for:
* Registering conditions for Segmentation Previews for operators;
* Reporting if the segment's condition(s) are met.
Also, by using this base class, the Segmentation Group Plugin will be able
accept the plugin (The Segmentation Group plugin has child_classes set to
this class).
'''
class Meta:
abstract = True
allow_children = True
cache = False
module = _('Segmentation')
parent_classes = ['SegmentLimitPlugin', ]
render_template = 'aldryn_segmentation/_segment.html'
text_enabled = False
#
# Leave set to True to allow this plugin to be displayed in the Segment
# Toolbar Menu for overriding by the operator.
#
allow_overrides = True
def get_segment_override(self, context, instance):
'''
If the current user is logged-in and this segment plugin allows
overrides, then return the current override for this segment, else,
returns SegmentOverride.NoOverride.
This should NOT be overridden in subclasses.
'''
# This can't be defined at the file level, else circular imports
from ..segment_pool import segment_pool, SegmentOverride
request = context['request']
if request.user.is_authenticated():
return segment_pool.get_override_for_segment(
request.user, self, instance
)
return SegmentOverride.NoOverride
def is_context_appropriate(self, context, instance):
'''
Return True if this plugin is appropriate for rendering in the given
context. (Non-degenerate) Segment Plugins should override this and
supply the appropriate tests.
'''
return True

@ -0,0 +1,85 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
from cms.plugin_pool import plugin_pool
from .segment_plugin_base import SegmentPluginBase
from ..models import (
AuthenticatedSegmentPluginModel,
CookieSegmentPluginModel,
FallbackSegmentPluginModel,
SwitchSegmentPluginModel,
)
class FallbackSegmentPlugin(SegmentPluginBase):
'''
This segment plugin represents a degenerate case where the segment
always matches.
'''
model = FallbackSegmentPluginModel
name = _('Fallback')
# It doesn't make much sense to override this one...
allow_overrides = False
def is_context_appropriate(self, context, instance):
return True
plugin_pool.register_plugin(FallbackSegmentPlugin)
class SwitchSegmentPlugin(SegmentPluginBase):
'''
This switch segmentation plugin allows the operator to turn the segment ON
or OFF statically and independently from the context. This is primarily
useful for testing.
'''
model = SwitchSegmentPluginModel
name = _('Segment by switch')
# It doesn't make much sense to override this one...
allow_overrides = False
def is_context_appropriate(self, context, instance):
return instance.on_off
plugin_pool.register_plugin(SwitchSegmentPlugin)
class CookieSegmentPlugin(SegmentPluginBase):
'''
This is a segmentation plugin that renders output on the condition that a
cookie with ``cookie_key`` is present and has the value ``cookie_value``.
'''
model = CookieSegmentPluginModel
name = _('Segment by cookie')
def is_context_appropriate(self, context, instance):
request = context.get('request')
value = request.COOKIES.get(instance.cookie_key)
return (value == instance.cookie_value)
plugin_pool.register_plugin(CookieSegmentPlugin)
class AuthenticatedSegmentPlugin(SegmentPluginBase):
'''
This plugin allows segmentation based on the authentication/authorization
status of the visitor.
'''
model = AuthenticatedSegmentPluginModel
name = _('Segment by auth')
def is_context_appropriate(self, context, instance):
request = context.get('request')
return request and request.user and request.user.is_authenticated()
plugin_pool.register_plugin(AuthenticatedSegmentPlugin)

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from cms.toolbar_base import CMSToolbar
from cms.toolbar_pool import toolbar_pool
from .segment_pool import segment_pool
@toolbar_pool.register
class SegmentToolbar(CMSToolbar):
def populate(self):
segment_pool.get_segments_toolbar_menu(
self.request.user,
self.request.toolbar,
csrf_token=self.request.COOKIES.get('csrftoken')
)

@ -0,0 +1,171 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-21 15:23+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cms_toolbar.py:40
#, python-format
msgid "Segments (%s)"
msgstr "Segments (%s)"
#: cms_toolbar.py:40
msgid "Segments"
msgstr "Segments"
#: cms_toolbar.py:104
msgid "Reset all segments"
msgstr "Réinitialiser tous les segments"
#: models.py:29 models.py:75
msgid "label"
msgstr "label"
#: models.py:32
msgid "Optionally set a label for this limit block."
msgstr "Éventuellement définir une étiquette pour ce bloc de limite."
#: models.py:36
msgid "# of matches to display"
msgstr "No. de matchs à afficher"
#: models.py:39
msgid "Display up to how many matching segments?"
msgstr "Afficher jusqu'à combien de segments correspondant?"
#: models.py:45
msgid "Show All"
msgstr "Afficher tous"
#: models.py:47 models.py:49
msgid "Show First"
msgstr "Afficher la première"
#: models.py:54 models.py:108
#, python-format
msgid "%(label)s [%(config)s]"
msgstr "%(label)s [%(config)s]"
#: models.py:120
msgid "Always active"
msgstr "Toujours activé"
#: models.py:125
msgid "Always on?"
msgstr "Toujours activé?"
#: models.py:127
msgid "Uncheck to always hide child plugins."
msgstr "Décochez de toujours cacher plugins enfants."
#: models.py:133
msgid "Always ON"
msgstr "Toujours activé?"
#: models.py:135
msgid "Always OFF"
msgstr "Toujours désactivé?"
#: models.py:156
msgid "name of cookie"
msgstr "Nom du cookie"
#: models.py:159
msgid "Name of cookie to consider."
msgstr "Nom du cookie à envisager"
#: models.py:163
msgid "value to compare"
msgstr "valeur à comparer"
#: models.py:166
msgid "Value to consider."
msgstr "Valeur à considérer"
#: models.py:174
#, python-format
msgid "“{key}” equals “{value}”"
msgstr "«{key}» est égal à «{value}»"
#: models.py:460
#, python-format
msgid "%(code)s: %(name)s"
msgstr "%(code)s: %(name)s"
#: models.py:467
msgid "country"
msgstr "pays"
#: models.py:476
msgid " ("
msgstr " ("
#: models.py:476
msgid ")"
msgstr ")"
#: models.py:485
msgid "is Authenticated"
msgstr "Est authentifiée"
#: segment_pool.py:32
msgid "No override"
msgstr "Pas de dérogation"
#: segment_pool.py:33
msgid "Forced active"
msgstr "Forcée active"
#: segment_pool.py:34
msgid "Forced inactive"
msgstr "Forcé inactif"
#: views.py:23
msgid "The segment override was successfully changed."
msgstr "La correction de segment a été modifié avec succès."
#: views.py:32
msgid "The all segment override were successfully reset."
msgstr "La correction tout segment ont été correctement remis à zéro."
#: cms_plugins/segment_limiter.py:20 cms_plugins/segment_plugin_base.py:28
msgid "Segmentation"
msgstr "Segmentation"
#: cms_plugins/segment_limiter.py:21
msgid "Limit Block"
msgstr "Bloc de limite"
#: cms_plugins/segment_plugins.py:26
msgid "Fallback"
msgstr "Repli"
#: cms_plugins/segment_plugins.py:45
msgid "Segment by switch"
msgstr "Secteur par switch"
#: cms_plugins/segment_plugins.py:63
msgid "Segment by cookie"
msgstr "Secteur par cookie"
#: cms_plugins/segment_plugins.py:87
msgid "Segment by country"
msgstr "Secteur par pays"
#: cms_plugins/segment_plugins.py:107
msgid "Segment by auth"
msgstr "Secteur par auth"

@ -0,0 +1,125 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'SegmentLimitPluginModel'
db.create_table(u'aldryn_segmentation_segmentlimitpluginmodel', (
(u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
('label', self.gf('django.db.models.fields.CharField')(default=u'', max_length=128, blank=True)),
('max_children', self.gf('django.db.models.fields.PositiveIntegerField')(default=1)),
))
db.send_create_signal(u'aldryn_segmentation', ['SegmentLimitPluginModel'])
# Adding model 'FallbackSegmentPluginModel'
db.create_table(u'aldryn_segmentation_fallbacksegmentpluginmodel', (
(u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
('label', self.gf('django.db.models.fields.CharField')(default=u'', max_length=128, blank=True)),
))
db.send_create_signal(u'aldryn_segmentation', ['FallbackSegmentPluginModel'])
# Adding model 'SwitchSegmentPluginModel'
db.create_table(u'aldryn_segmentation_switchsegmentpluginmodel', (
(u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
('label', self.gf('django.db.models.fields.CharField')(default=u'', max_length=128, blank=True)),
('on_off', self.gf('django.db.models.fields.BooleanField')(default=True)),
))
db.send_create_signal(u'aldryn_segmentation', ['SwitchSegmentPluginModel'])
# Adding model 'CookieSegmentPluginModel'
db.create_table(u'aldryn_segmentation_cookiesegmentpluginmodel', (
(u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
('label', self.gf('django.db.models.fields.CharField')(default=u'', max_length=128, blank=True)),
('cookie_key', self.gf('django.db.models.fields.CharField')(default=u'', max_length=4096)),
('cookie_value', self.gf('django.db.models.fields.CharField')(default=u'', max_length=4096)),
))
db.send_create_signal(u'aldryn_segmentation', ['CookieSegmentPluginModel'])
# Adding model 'AuthenticatedSegmentPluginModel'
db.create_table(u'aldryn_segmentation_authenticatedsegmentpluginmodel', (
(u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
('label', self.gf('django.db.models.fields.CharField')(default=u'', max_length=128, blank=True)),
))
db.send_create_signal(u'aldryn_segmentation', ['AuthenticatedSegmentPluginModel'])
def backwards(self, orm):
# Deleting model 'SegmentLimitPluginModel'
db.delete_table(u'aldryn_segmentation_segmentlimitpluginmodel')
# Deleting model 'FallbackSegmentPluginModel'
db.delete_table(u'aldryn_segmentation_fallbacksegmentpluginmodel')
# Deleting model 'SwitchSegmentPluginModel'
db.delete_table(u'aldryn_segmentation_switchsegmentpluginmodel')
# Deleting model 'CookieSegmentPluginModel'
db.delete_table(u'aldryn_segmentation_cookiesegmentpluginmodel')
# Deleting model 'AuthenticatedSegmentPluginModel'
db.delete_table(u'aldryn_segmentation_authenticatedsegmentpluginmodel')
models = {
u'aldryn_segmentation.authenticatedsegmentpluginmodel': {
'Meta': {'object_name': 'AuthenticatedSegmentPluginModel'},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'label': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'blank': 'True'})
},
u'aldryn_segmentation.cookiesegmentpluginmodel': {
'Meta': {'object_name': 'CookieSegmentPluginModel'},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'cookie_key': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '4096'}),
'cookie_value': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '4096'}),
'label': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'blank': 'True'})
},
u'aldryn_segmentation.fallbacksegmentpluginmodel': {
'Meta': {'object_name': 'FallbackSegmentPluginModel'},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'label': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'blank': 'True'})
},
u'aldryn_segmentation.segment': {
'Meta': {'object_name': 'Segment', 'managed': 'False'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'aldryn_segmentation.segmentlimitpluginmodel': {
'Meta': {'object_name': 'SegmentLimitPluginModel', '_ormbases': ['cms.CMSPlugin']},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'label': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'blank': 'True'}),
'max_children': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'})
},
u'aldryn_segmentation.switchsegmentpluginmodel': {
'Meta': {'object_name': 'SwitchSegmentPluginModel'},
u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'label': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'blank': 'True'}),
'on_off': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
}
}
complete_apps = ['aldryn_segmentation']

@ -0,0 +1,241 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from django.utils import six
from django.utils.encoding import python_2_unicode_compatible, force_text
from django.utils.functional import lazy
from django.utils.translation import ugettext_lazy as _, string_concat
from cms.models import CMSPlugin
#
# NOTE: The SegmentLimitPluginModel does NOT subclass SegmentBasePluginModel
#
@python_2_unicode_compatible
class SegmentLimitPluginModel(CMSPlugin):
#
# Need to consider how best to display this in the Plugin Change Form...
#
# 0 means "Display ALL segments that match",
# 1 means "Display first matching segment",
# 2 means "Display up to two matching segments,"
# and so on...
#
label = models.CharField(_('label'),
blank=True,
default='',
help_text=_('Optionally set a label for this limit block.'),
max_length=128,
)
max_children = models.PositiveIntegerField(_('# of matches to display'),
blank=False,
default=1,
help_text=_('Display up to how many matching segments?'),
)
@property
def configuration_string(self):
if self.max_children == 0:
return _('Show All')
elif self.max_children == 1:
return _('Show First')
else:
return string_concat(_('Show First'), ' ', self.max_children)
def __str__(self):
'''
If there is a label, show that with the configuration in brackets,
otherwise, just return the configuration string.
'''
if self.label:
conf_str = _('{label} [{config}]').format(
label=self.label,
config=force_text(self.configuration_string),
)
else:
conf_str = self.configuration_string
return force_text(conf_str)
@python_2_unicode_compatible
class SegmentBasePluginModel(CMSPlugin):
#
# Defines a common interface for segment plugins. Also note that plugin
# model's subclassing this class will automatically be (un-)registered
# (from)to the segment_pool via 'pre_delete' and 'post_save' signals. This
# is implemented in aldryn_segmentation.segment_pool.
#
class Meta:
abstract = True
label = models.CharField(_('label'),
blank=True,
default='',
max_length=128,
)
@property
def configuration_string(self):
'''
Return a ugettext_lazy object (or a lazy function that returns the
same) that represents the configuration for the plugin instance in a
unique, concise manner that is suitable for a toolbar menu option.
Some Examples:
Cookie:
'"key" equals "value"'
Country:
'Country is Kenya'
Auth:
'User is authenticated'
Switch:
'Always ON'
Limit:
'Show First'
In cases where the returned string is composed with placeholders, E.g.:
Cookie:
ugettext_lazy('{key}” equals “{value}').format(
key=self.key,
value=self.value
)
You *must* actually return a evaluated, lazy wrapper around the
gettext_lazy operation as follows:
def configuration_string(self):
wrapper():
return ugettext_lazy('{key}” equals “{value}').format(
key=self.key,
value=self.value
)
# NOTE: the trailing '()'
return lazy(wrapper, six.text_type)()
Otherwise, the translations won't happen.
This construction is not required for untranslated or non-
parameterized translations.
NOTE: Each subclass must override to suit.
'''
raise NotImplementedError("Please Implement this method")
def __str__(self):
'''
If there is a label, show that with the configuration in brackets,
otherwise, just return the configuration string.
'''
if self.label:
conf_str = _('{label} [{config}]').format(
label=self.label,
config=force_text(self.configuration_string),
)
else:
conf_str = self.configuration_string
return force_text(conf_str)
class FallbackSegmentPluginModel(SegmentBasePluginModel):
@property
def configuration_string(self):
return _('Always active')
class SwitchSegmentPluginModel(SegmentBasePluginModel):
on_off = models.BooleanField(_('Always on?'),
default=True,
help_text=_('Uncheck to always hide child plugins.'),
)
@property
def configuration_string(self):
if self.on_off:
return _('Always ON')
else:
return _('Always OFF')
class CookieSegmentPluginModel(SegmentBasePluginModel):
#
# Consider that we should probably support either:
# Simple wildcard '*', '?' expressions or
# RegEx expressions or
# Both.
#
# A note about the max_lengths selected: browsers can support up to 4093
# characters for a given cookie (combining both the key and the value). So
# either one can be up to 4092 chars in length. Since these are
# implemented as VarChars, this shouldn't be too wasteful and still
# support almost anything.
#
# NOTE: This forces a requirement for MySQL users to be using 5.0.3 or
# later (which is already a requirement for Django 1.5+).
#
cookie_key = models.CharField(_('name of cookie'),
blank=False,
default='',
help_text=_('Name of cookie to consider.'),
max_length=4096,
)
cookie_value = models.CharField(_('value to compare'),
blank=False,
default='',
help_text=_('Value to consider.'),
max_length=4096,
)
@property
def configuration_string(self):
def wrapper():
return _('{key}” equals “{value}').format(key=self.cookie_key, value=self.cookie_value)
return lazy(
wrapper,
six.text_type
)()
class AuthenticatedSegmentPluginModel(SegmentBasePluginModel):
@property
def configuration_string(self):
return _('is Authenticated')
@python_2_unicode_compatible
class Segment(models.Model):
'''
This is a hollow, unmanaged model that simply allows us to attach custom
admin views into the AdminSite.
'''
class Meta:
managed=False
def __str__(self):
return 'Segment is an empty, unmanaged model.'

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from .segment_pool import SegmentOverride, segment_pool
from .signals import register_segment, unregister_segment

@ -0,0 +1,600 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import sys
import warnings
from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse
from django.utils import six
from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.functional import Promise
from django.utils.translation import activate, get_language, ugettext_lazy as _
from cms.exceptions import PluginAlreadyRegistered, PluginNotRegistered
from cms.models import CMSPlugin
from cms.plugin_pool import plugin_pool
from cms.toolbar.items import SubMenu, Break, AjaxItem
from ..cms_plugins import SegmentPluginBase
from ..models import SegmentBasePluginModel
#
# A simple enum so we can use the same code in Python's < 3.4.
#
class SegmentOverride:
NoOverride, ForcedActive, ForcedInactive = range(3)
overrides_list = [
(NoOverride, _('No override')),
(ForcedActive, _('Forced active')),
(ForcedInactive, _('Forced inactive')),
]
@python_2_unicode_compatible
class SegmentPool(object):
'''
This maintains a set of nested sorted dicts containing, among other
attributes, a list of segment plugin instances in the form:
segments = {
/class/ : {
NAME: _(/name/),
CFGS: {
/configuration_string/ : {
LABEL: _(/configuration_string/),
OVERRIDES: {
/user.id/: /SegmentOverride enum value/,
...
},
INSTANCES: [ ... ]
}
}
}
}
The outer-most dict organizes everything by the class name of the plugin.
The actual human-readable version of the plugin's type name is stored
under the key 'NAME'.
Each plugin's unique configuration is stored in the plugin type's CFGS
dict keyed with the instance's configuration_string realised as 'en'
unicode. The unresolved version of the string--usually a lazy translation
proxy object--is stored under the configuration's 'LABEL' key. This allows
translation to any other language (that is in the gettext catalog) at
will. This is also used for correctly sorting the configurations in the
current language.
This is implmented as a non-persistent, system-wide singleton, it is
shared by all operators of the system. In order to keep overrides for each
user distinct, they are stored in the OVERRIDES dict, keyed with the
user's username.
Plugin instances are recorded in the INSTANCES list. As well as allowing
us to find instances that have changed their configuration (likely to
happen when an operator changes the plugin's configuration), this allows
us to prune no-longer relevant parts of this structure as instances are
de-registered.
'''
#
# Magic Strings for managing the structures below.
#
CFGS = 'CFGS'
NAME = 'NAME'
LABEL = 'LABEL'
OVERRIDES = 'OVERRIDES'
INSTANCES = 'INSTANCES'
def __init__(self):
self.segments = dict()
self._sorted_segments = dict()
def discover(self):
'''
Find and register any SegmentPlugins already configured in the CMS and
register them.
'''
#
# To reduce the number of queries we'll be making against CMSPlugin,
# let's build a set of eligible plugin_types. This part should not hit
# the database at all (provided that the plugin_pool is already
# populated.)
#
# In this case, 'eligible' means that the plugin class subclasses
# SegmentPluginBase and that it has allow_overrides = True. Segment
# plugins that have allow_overrides = False are not registered.
#
plugin_types = []
for plugin_class in plugin_pool.get_all_plugins():
if (issubclass(plugin_class, SegmentPluginBase) and
plugin_class.allow_overrides):
plugin_types.append(plugin_class.__name__)
#
# Process the plugins that are one of these types.
#
for plugin_instance in CMSPlugin.objects.filter(plugin_type__in=plugin_types):
#
# Get the instance as an instance of its proper class rather than
# this CMSPlugin object.
#
plugin_instance = plugin_instance.get_plugin_instance()[0]
self.register_segment_plugin(plugin_instance, suppress_discovery=True)
def register_segment_plugin(self, plugin_instance, suppress_discovery=False):
'''
Registers the provided plugin_instance into the SegmentPool.
Raises:
PluginAlreadyRegistered: if the plugin is already registered and
ImproperlyConfigured: if not an appropriate type of plugin.
Note: plugin_instance.configuration_string can return either of:
1. A normal string of text,
2. A gettext_lazy object,
3. A extra-lazy object (Promise to return a gettext_lazy object)
the `suppress_discovery` flag, when set to true, prevents recursion
and should be only used by the self.discovery() method.
'''
if not suppress_discovery and not self.segments:
self.discover()
if isinstance(plugin_instance, SegmentBasePluginModel):
plugin_class_instance = plugin_instance.get_plugin_class_instance()
if plugin_class_instance.allow_overrides:
#
# There is no need to register a plugin that doesn't
# allow overrides.
#
plugin_class_name = plugin_class_instance.__class__.__name__
plugin_name = plugin_class_instance.name
if plugin_class_name not in self.segments:
self.segments[plugin_class_name] = {
self.NAME: plugin_name,
self.CFGS: dict(),
}
self._sorted_segments = dict()
segment_class = self.segments[plugin_class_name]
plugin_config = plugin_instance.configuration_string
#
# NOTE: We always use the 'en' version of the configuration string
# as the key.
#
lang = get_language()
activate('en')
if isinstance(plugin_config, Promise):
plugin_config_key = force_text(plugin_config)
elif isinstance(plugin_config, six.text_type):
plugin_config_key = plugin_config
else:
warnings.warn('register_segment: Not really sure what '
'‘plugin_instance.configuration_string’ returned!')
activate(lang)
segment_configs = segment_class[self.CFGS]
if plugin_config_key not in segment_configs:
# We store the un-translated version as the LABEL
segment_configs[plugin_config_key] = {
self.LABEL : plugin_config,
self.OVERRIDES : dict(),
self.INSTANCES : list(),
}
self._sorted_segments = dict()
segment = segment_configs[plugin_config_key]
if plugin_instance not in segment[self.INSTANCES]:
segment[self.INSTANCES].append( plugin_instance )
self._sorted_segments = dict()
else:
cls = plugin_instance.get_plugin_class_instance().__class__.__name__
raise PluginAlreadyRegistered('The segment plugin {0} cannot '
'be registered because it already is.'.format(cls))
else:
cls = plugin_instance.__class__.__name__
raise ImproperlyConfigured('Segment Plugin models must '
'subclass SegmentBasePluginModel. {0!r} does not.'.format(cls))
def unregister_segment_plugin(self, plugin_instance):
'''
Removes the given plugin from the SegmentPool.
'''
#
# NOTE: In many cases, the configuration of a given plugin may have
# changed before we receive the call to unregister it. So, we'll look
# for the plugin in all CFGS for this plugin's class.
#
if not self.segments:
self.discover()
if not isinstance(plugin_instance, SegmentBasePluginModel):
raise ImproperlyConfigured('Segment Plugins must subclasses of '
'SegmentBasePluginModel. {0} is not.'.format(
plugin_instance.get_plugin_class_instance().__class__.__name__
))
else:
plugin_class_instance = plugin_instance.get_plugin_class_instance()
if plugin_class_instance.allow_overrides:
#
# A segment plugin that doesn't allow overrides wouldn't be
# registered in the first place.
#
plugin_class_name = plugin_class_instance.__class__.__name__
if plugin_class_name in self.segments:
segment_class = self.segments[plugin_class_name]
segment_configs = segment_class[self.CFGS]
for configuration, data in segment_configs.items():
if plugin_instance in data[self.INSTANCES]:
# Found it! Now remove it...
data[self.INSTANCES].remove(plugin_instance)
self._sorted_segments = dict()
# Clean-up any empty elements caused by this removal...
if len(data[self.INSTANCES]) == 0:
# OK, this was the last one, so...
del segment_configs[configuration]
if len(segment_configs) == 0:
# This too was the last one
del self.segments[plugin_class_name]
return
try:
cls = plugin_instance.get_plugin_class_instance().__class__.__name__
raise PluginNotRegistered('The segment plugin {0} cannot be '
'unregistered because it is not currently registered in the '
'SegmentPool.'.format(cls))
except:
raise PluginNotRegistered()
def set_override(self, user, segment_class, segment_config, override):
'''
(Re-)Set an override on a segment (segment_class x segment_config).
'''
if not self.segments:
self.discover()
overrides = self.segments[segment_class][self.CFGS][segment_config][self.OVERRIDES]
if override == SegmentOverride.NoOverride:
del overrides[user.username]
else:
overrides[user.username] = override
self._sorted_segments = dict()
def reset_all_segment_overrides(self, user):
'''
Resets (disables) the overrides for all segments.
'''
if not self.segments:
self.discover()
for segment_class in self.segments.values():
for configuration in segment_class[self.CFGS].values():
for username, override in configuration[self.OVERRIDES].items():
if username == user.username:
configuration[self.OVERRIDES][username] = SegmentOverride.NoOverride
self._sorted_segments = dict()
def get_num_overrides_for_user(self, user):
'''
Returns a count of the number of overrides for all segments for the
given user. This is used for the toolbar menu where we show the number
of active overrides.
'''
if not self.segments:
self.discover()
num = 0
for segment_class_name, segment_class in self.segments.items():
for config_str, config in segment_class[self.CFGS].items():
for username, override in config[self.OVERRIDES].items():
if username == user.username and int(override):
num += 1
return num
def get_override_for_classname(self, user, plugin_class_name, segment_config):
'''
Given the user, plugin_class_name and segment_config, return the
current override, if any.
'''
#
# Note: segment_config can be either of:
#
# 1. A number string of text
# 2. A lazy translation object (Promise)
#
if not self.segments:
self.discover()
lang = get_language()
activate('en')
if isinstance(segment_config, Promise):
segment_key = force_text(segment_config)
elif isinstance(segment_config, six.text_type):
segment_key = segment_config
else:
segment_key = segment_config
activate(lang)
try:
overrides = self.segments[plugin_class_name][self.CFGS][segment_key][self.OVERRIDES]
if user.username in overrides:
# TODO: I don't like this int-casting used here or anywhere.
return int(overrides[user.username])
except KeyError:
if not isinstance(segment_config, Promise):
import inspect
warnings.warn('get_override_for_segment() received '
'segment_config: “{0}” as type {1} from: {2!r}. '
'This has resulted in a failure to retrieve a '
'segment override.'.format(
segment_config,
type(segment_config),
inspect.stack()[1][3]
)
)
return SegmentOverride.NoOverride
def get_override_for_segment(self, user, plugin_class_instance, plugin_instance):
'''
Given a specific user, plugin class and instance, return the current
override. This is a wrapper around get_override_for_classname() and
provides the appropriate duck-checking and is therefore more useful as
an external entry-point into the segment_pool.
'''
if not self.segments:
self.discover()
if (hasattr(plugin_class_instance, 'allow_overrides') and
plugin_class_instance.allow_overrides and
hasattr(plugin_instance, 'configuration_string')):
segment_class = plugin_class_instance.__class__.__name__
segment_config = plugin_instance.configuration_string
return self.get_override_for_classname(user, segment_class, segment_config)
return SegmentOverride.NoOverride
def _get_sorted_copy(self):
'''
Returns the SegmentPool as a list of tuples sorted appropriately for
human consumption in *the current language*. This means that the
_(NAME) value should determine the sort order of the outer dict and
the _('segment_config') key should determine the order of the inner
dicts. In both cases, the keys need to be compared in the provided
language.
Further note that the current language is given by get_language() and
that this will reflect the CMS operator's user settings, NOT the current
PAGE language.
NOTE: that the structure of the sorted pool is different. Two of the
nested dicts are now lists of tuples so that the sort can be retained.
_sorted_segments = [
(/class/, {
NAME: _(/name/),
CFGS: [
(/configuration_string/, {
LABEL: _(/configuration_string/),
OVERRIDES: {
/user.id/: /SegmentOverride enum value/,
...
},
INSTANCES: [ ... ]
})
]
})
]
NOTE: On Python 3.0+ systems, we depend on pyuca for collation, which
produces excellent results. On earlier systems, this is not available,
so, we use a cruder mapping of accented characters into their
unaccented ASCII equivalents.
'''
sort_key = None
if sys.version_info >= (3, 0):
uca = None
#
# Unfortunately, the pyuca class–which can provide collation of
# strings in a thread-safe manner–is for Python 3.0+ only
#
try:
from pyuca import Collator
uca = Collator()
sort_key = uca.sort_key
except:
pass
if not sort_key:
#
# Our fallback position is to use a more simple approach of
# mapping 'accented' chars to latin equivalents before sorting,
# this is crude, but better than nothing.
#
from .unaccent import unaccented_map
def sort_key(s):
return s.translate(unaccented_map())
pool = self.segments
clone = []
for cls_key in sorted(pool.keys()):
cls_dict = {
self.NAME: pool[cls_key][self.NAME],
self.CFGS: list(),
}
clone.append(( cls_key, cls_dict ))
# We'll build the CFG as a list in arbitrary order for now...
for cfg_key in pool[cls_key][self.CFGS]:
cfg_dict = {
self.LABEL: pool[cls_key][self.CFGS][cfg_key][self.LABEL],
self.OVERRIDES: dict(),
self.INSTANCES: list(),
}
for username, override in pool[cls_key][self.CFGS][cfg_key][self.OVERRIDES].items():
cfg_dict[self.OVERRIDES][username] = override
for instance in pool[cls_key][self.CFGS][cfg_key][self.INSTANCES]:
cfg_dict[self.INSTANCES].append(instance)
cls_dict[self.CFGS].append( (cfg_key, cfg_dict) )
#
# Now, sort the CFGS by their LABEL, using which every means we
# have available to us at this moment.
#
cls_dict[self.CFGS] = sorted(cls_dict[self.CFGS], key=lambda x: sort_key(force_text(x[1][self.LABEL])))
return clone
def get_registered_segments(self):
'''
This is the interfact for obtaining a copy of the pool. It is returned
sorted for the current language.
'''
if not self.segments:
self.discover()
lang = get_language()
if not lang in self._sorted_segments:
self._sorted_segments[lang] = self._get_sorted_copy()
return self._sorted_segments[lang]
def get_segments_toolbar_menu(self, user, toolbar, csrf_token):
'''
Returns a CMSToolbar "Segments" menu from the pool.
'''
#
# NOTE: This is usually when the discovery process starts.
#
if not self.segments:
self.discover()
pool = self.get_registered_segments()
num_overrides = self.get_num_overrides_for_user(user)
if num_overrides:
segment_menu_name = _('Segments ({num:d})'.format(num=num_overrides))
else:
segment_menu_name = _('Segments')
segment_menu = toolbar.get_or_create_menu(
'segmentation-menu',
segment_menu_name
)
for segment_class_name, segment_class in pool:
segment_name = segment_class[self.NAME]
segment_class_menu = segment_menu.get_or_create_menu(
segment_class_name,
segment_name
)
for config_str, config in segment_class[self.CFGS]:
user_override = segment_pool.get_override_for_classname(
user,
segment_class_name,
config_str
)
config_menu = SubMenu(config[self.LABEL], csrf_token)
segment_class_menu.add_item(config_menu)
for override, override_label in SegmentOverride.overrides_list:
if override == SegmentOverride.NoOverride:
# We don't really want to show the 'No override' as an
# actionable item.
continue
active = bool(override == user_override)
if active:
# Mark parent menus active too
config_menu.active = True
segment_class_menu.active = True
if (override != user_override):
override_value = override
else:
override_value = SegmentOverride.NoOverride
config_menu.add_ajax_item(
override_label,
action=reverse('admin:set_segment_override'),
data={
'segment_class': segment_class_name,
'segment_config': config_str,
'override': override_value,
},
active=active,
on_success=toolbar.REFRESH_PAGE
)
segment_menu.add_item(Break())
reset_ajax_item = AjaxItem(
_('Reset all segments'),
# TODO: This should not use a named pattern
action=reverse('admin:reset_all_segment_overrides'),
csrf_token=csrf_token,
data={},
disabled=bool(num_overrides == 0),
on_success=toolbar.REFRESH_PAGE
)
segment_menu.add_item(reset_ajax_item)
def __str__(self):
'''
Returns the whole segment_pool structure. Useful for debugging. Not
much else.
'''
return self.segments
segment_pool = SegmentPool()

@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
from django.db.models.signals import post_save, pre_delete
from django.dispatch import receiver
from django.core.exceptions import ImproperlyConfigured
from cms.exceptions import PluginAlreadyRegistered, PluginNotRegistered
from .segment_pool import segment_pool
from ..models import SegmentBasePluginModel
@receiver(post_save)
def register_segment(sender, instance, created, **kwargs):
'''
Ensure that saving changes in the model results in the de-registering (if
necessary) and registering of this segment plugin.
'''
if isinstance(instance, SegmentBasePluginModel):
if not created:
try:
segment_pool.unregister_segment_plugin(instance)
except (PluginAlreadyRegistered, ImproperlyConfigured):
pass
# Either way, we register it.
try:
segment_pool.register_segment_plugin(instance)
except (PluginAlreadyRegistered, ImproperlyConfigured):
pass
@receiver(pre_delete)
def unregister_segment(sender, instance, **kwargs):
'''
Listens for signals that a SegmentPlugin instance is to be deleted, and
un-registers it from the segment_pool.
'''
if isinstance(instance, SegmentBasePluginModel):
try:
segment_pool.unregister_segment_plugin(instance)
except (PluginNotRegistered, ImproperlyConfigured):
pass

@ -0,0 +1,64 @@
# -*- coding: latin-1 -*-
# Notice the encoding string above!
#
# $Id$
# use a dynamically populated translation dictionary to remove accents
# from a string
#
# This was originally borrowed from:
# http://svn.effbot.org/public/stuff/sandbox/text/unaccent.py
#
from __future__ import unicode_literals
import unicodedata, sys
CHAR_REPLACEMENT = {
# latin-1 characters that don't have a unicode decomposition
0xc6: u"AE", # LATIN CAPITAL LETTER AE
0xd0: u"D", # LATIN CAPITAL LETTER ETH
0xd8: u"OE", # LATIN CAPITAL LETTER O WITH STROKE
0xde: u"Th", # LATIN CAPITAL LETTER THORN
0xdf: u"ss", # LATIN SMALL LETTER SHARP S
0xe6: u"ae", # LATIN SMALL LETTER AE
0xf0: u"d", # LATIN SMALL LETTER ETH
0xf8: u"oe", # LATIN SMALL LETTER O WITH STROKE
0xfe: u"th", # LATIN SMALL LETTER THORN
}
##
# Translation dictionary. Translation entries are added to this
# dictionary as needed.
class unaccented_map(dict):
##
# Maps a unicode character code (the key) to a replacement code
# (either a character code or a unicode string).
def mapchar(self, key):
ch = self.get(key)
if ch is not None:
return ch
if sys.version_info >= (3, 0):
de = unicodedata.decomposition(chr(key))
else:
de = unicodedata.decomposition(unichr(key))
if de:
try:
ch = int(de.split(None, 1)[0], 16)
except (IndexError, ValueError):
ch = key
else:
ch = CHAR_REPLACEMENT.get(key, key)
self[key] = ch
return ch
if sys.version >= "2.5":
# use __missing__ where available
__missing__ = mapchar
else:
# otherwise, use standard __getitem__ hook (this is slower,
# since it's called for each character)
__getitem__ = mapchar

@ -0,0 +1,7 @@
{% load segmentation_tags %}{% comment %}
NOTE: child_plugins is a list of tuples of the form (instance, Boolean)
where, instance is the child plugin instance and Boolean represents
whether the plugin should be rendered in this context.
{% endcomment %}{% for child in child_plugins %}{% render_segment_plugin child.0 child.1 %}{% endfor %}

@ -0,0 +1,2 @@
{% load cms_tags %}
{% for child in instance.child_plugin_instances %}{% render_plugin child %}{% endfor %}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save