diff --git a/MANIFEST.in b/MANIFEST.in
deleted file mode 100644
index fa52e87..0000000
--- a/MANIFEST.in
+++ /dev/null
@@ -1,32 +0,0 @@
-recursive-include portail_citoyen2/apps/login_plugin/templates *.html
-recursive-include portail_citoyen2/apps/login_plugin/static *.css *.gif *.png *.js
-recursive-include portail_citoyen2/apps/login_plugin/locale *.po *.mo
-recursive-include portail_citoyen2/apps/data_source_plugin/templates *.html
-recursive-include portail_citoyen2/apps/data_source_plugin/static *.css *.gif *.png *.js
-recursive-include portail_citoyen2/apps/data_source_plugin/locale *.po *.mo
-recursive-include portail_citoyen2/apps/a2_service_list_plugin/templates *.html
-recursive-include portail_citoyen2/apps/a2_service_list_plugin/static *.css *.gif *.png *.js
-recursive-include portail_citoyen2/apps/a2_service_list_plugin/locale *.po *.mo
-recursive-include portail_citoyen2/apps/passerelle_register_plugin/templates *.html
-recursive-include portail_citoyen2/apps/passerelle_register_plugin/static *.css *.gif *.png *.js
-recursive-include portail_citoyen2/apps/passerelle_register_plugin/locale *.po *.mo
-recursive-include portail_citoyen2/apps/auquotidien_plugin/templates *.html
-recursive-include portail_citoyen2/apps/auquotidien_plugin/static *.js
-recursive-include portail_citoyen2/apps/auquotidien_plugin/locale *.po *.mo
-recursive-include portail_citoyen2/apps/federation_plugin/templates *.html
-recursive-include portail_citoyen2/apps/federation_plugin/locale *.po *.mo
-recursive-include portail_citoyen2/apps/feed_plugin/templates *.html
-recursive-include portail_citoyen2/apps/feed_plugin/locale *.po *.mo
-recursive-include portail_citoyen2/apps/msp/templates *.html
-recursive-include portail_citoyen2/apps/msp/static *.css *.gif *.png *.js *.jpg
-recursive-include portail_citoyen2/apps/msp/locale *.po *.mo
-include portail_citoyen2/apps/msp/README.txt
-recursive-include portail_citoyen2/fixtures *.json
-recursive-include portail_citoyen2/templates *.html *.txt
-recursive-include portail_citoyen2/static *.css *.gif *.png *.js
-recursive-include portail_citoyen2/locale *.po *.mo
-recursive-include help *.page
-include local_settings.py.example
-include requirements.txt
-include MANIFEST.in
-include VERSION
diff --git a/README b/README
deleted file mode 100644
index cbaa6a1..0000000
--- a/README
+++ /dev/null
@@ -1,67 +0,0 @@
-How to start
-============
-
-To work on portail-citoyen just execute the following lines (command
-to launch start with $, other lines are expected output)::
-
- $ pip install -r ./requirements
- $ cp local_settings.py.example local_settings.py
- $ ./portail-citoyen syncdb --all # you will be asked to create a new admin user
- Syncing...
- Creating tables ...
- [ snipped ]
- Creating table cmsplugin_a2servicelistplugin
- Creating table registration_registrationprofile
-
- You just installed Django's auth system, which means you don't have any superusers defined.
- Would you like to create one now? (yes/no): yes
- Username: admin
- First name: admin
- Last name: admin
- E-mail address: admin@coin.org
- Password:
- Password (again):
- Superuser created successfully.
- Installing custom SQL ...
- Installing indexes ...
- Installed 2 object(s) from 1 fixture(s)
-
- Synced:
- > django.contrib.auth
- [ snipped ]
- > registration
-
- Not synced (use migrations):
- -
- (use ./manage.py migrate to migrate these)
- $ ./portail-citoyen migrate --fake
- [ lots of migrations running ]
- $ ./portail-citoyen runserver
- Validating models...
-
- 0 errors found
- April 12, 2013 - 16:04:50
- Django version 1.5.1, using settings 'compte_agglo_montpellier.settings'
- Development server is running at http://127.0.0.1:8000/
- Quit the server with CONTROL-C.
-
-The application is now usable at http://localhost:8000/
-
-Settings
---------
-
-Settings can be passed using a local_settings.py file or the shell
-environment. Dictionaries are passed by flattening the variable name and the
-dictionnary key separated by an underscore character. For example to passe the
-variable MAIN_SITE_URL in templates, define the following environment
-variable::
-
- export PORTAIL_CITOYEN_TEMPLATE_VARS_MAIN_SITE_URL=https://main-site.com/
-
-Those variables must be prefixed with PORTAIL_CITOYEN_ when set in a
-local_settings.py file or in the environment.
-
-Name Description
-================================ ============================================
-TEMPLATE_VARS dictionnary of variables passed to templates
-PORTAIL_ADMIN_URL URL of the global administration portal
diff --git a/TODO b/TODO
deleted file mode 100644
index 9407e18..0000000
--- a/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-- Authentication is handled by authsaml2
-- First user created must be superadmin
-- User admin must be read-only
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..ab8af97
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,6 @@
+portail-citoyen2 (1.0-1) unstable; urgency=medium
+
+ * Initial release
+
+ -- Jérôme Schneider Tue, 01 Apr 2014 15:17:34 +0200
+
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..7f8f011
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/debian/conf/db.conf b/debian/conf/db.conf
new file mode 100644
index 0000000..4b4df01
--- /dev/null
+++ b/debian/conf/db.conf
@@ -0,0 +1,5 @@
+export DATABASE_ENGINE='django.db.backends.postgresql_psycopg2'
+export DATABASE_NAME='_DBC_DBNAME_'
+export DATABASE_USER='_DBC_DBUSER_'
+export DATABASE_PASSWORD='_DBC_DBPASS_'
+export DATABASE_HOST='localhost'
diff --git a/debian/conf/nginx-example.conf b/debian/conf/nginx-example.conf
new file mode 100644
index 0000000..65a1041
--- /dev/null
+++ b/debian/conf/nginx-example.conf
@@ -0,0 +1,41 @@
+server {
+ listen 443;
+ server_name citoyen.example.fr;
+
+ ssl on;
+ ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
+ ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
+
+ access_log /var/log/nginx/citoyen.example.fr-access.log combined;
+ error_log /var/log/nginx/citoyen.example.fr-error.log;
+
+ location /static {
+ alias /var/lib/portail-citoyen/static;
+ }
+
+ location / {
+ proxy_pass http://unix:/var/run/portail-citoyen/portail-citoyen.sock;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Forwarded-SSL on;
+ proxy_set_header X-Forwarded-Protocol ssl;
+ proxy_set_header X-Forwarded-Proto https;
+ }
+}
+
+server {
+ listen 80;
+ server_name citoyen.example.fr;
+
+ access_log /var/log/nginx/citoyen.example.fr-access.log combined;
+ error_log /var/log/nginx/citoyen.example.fr-error.log;
+
+ location /static {
+ alias /var/lib/portail-citoyen/static;
+ }
+
+ location / {
+ proxy_pass http://unix:/var/run/portail-citoyen/portail-citoyen.sock;
+ proxy_set_header Host $http_host;
+ }
+}
+
diff --git a/debian/conf/portail-citoyen2.conf b/debian/conf/portail-citoyen2.conf
new file mode 100644
index 0000000..ad7cb65
--- /dev/null
+++ b/debian/conf/portail-citoyen2.conf
@@ -0,0 +1,46 @@
+# do not remove this line, it imports db configuration from dbconfig-common
+[ -f /etc/portail-citoyen/db.conf ] && . /etc/portail-citoyen/db.conf
+# do not remove this line, it imports secret which is automatically generated
+[ -f /etc/portail-citoyen/secret ] && . /etc/portail-citoyen/secret
+# import saml certificates (automatically genereted)
+[ -f /etc/portail-citoyen/saml-certs.conf ] && . /etc/portail-citoyen/saml-certs.conf
+
+# Static root directory
+export STATIC_ROOT='/var/lib/portail-citoyen/static'
+
+# Debug
+#export DEBUG=yes
+
+# Define administrators / managers
+export ADMINS='admin eo;admin@entrouvert.com'
+
+# Database configuration (please use dpkg-reconfigure portail-citoyen)
+#export DATABASE_ENGINE='django.db.backends.sqlite3'
+#export DATABASE_NAME='/var/lib/portail-citoyen/portail-citoyen.db'
+
+# Sentry / Raven configuration
+#export export RAVEN_CONFIG_DSN='' # require package python-raven
+
+# Log root directory
+export LOG_ROOT='/var/log/portail-citoyen/portail-citoyen.log'
+
+# We are behind a reverse proxy so we accept every hosts
+export ALLOWED_HOSTS='*'
+
+# Email configuration
+#export EMAIL_HOST='localhost'
+#export EMAIL_PORT='25'
+#export EMAIL_SUBJECT_PREFIX='[Portail Citoyen]'
+#export SERVER_EMAIL='root@test.com'
+#export DEFAULT_FROM_EMAIL='portail-citoyen@test.com'
+
+# Enables some features
+export IDP_SAML2='yes'
+#export IDP_OPENID='yes'
+#export IDP_CAS='yes'
+#export AUTH_SAML2='yes'
+#export AUTH_OPENID='yes'
+#export AUTH_SSL='yes'
+#export AUTH_OATH='yes'
+
+
diff --git a/debian/conf/syncdb.sh b/debian/conf/syncdb.sh
new file mode 100755
index 0000000..b410361
--- /dev/null
+++ b/debian/conf/syncdb.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+. /etc/portail-citoyen/portail-citoyen.conf
+
+python /usr/lib/portail-citoyen/manage.py syncdb --all --noinput
+python /usr/lib/portail-citoyen/manage.py migrate --fake --noinput
+
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..43f8fb1
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,41 @@
+Source: portail-citoyen2
+Maintainer: Jérôme Schneider
+Section: python
+Priority: optional
+Build-Depends: python-setuptools (>= 0.6b3),
+ python-all (>= 2.6.6-3),
+ debhelper (>= 8.0),
+ openssl,
+ python-django (>= 1.5)
+Standards-Version: 3.9.1
+X-Python-Version: >= 2.6
+
+Package: python-portail-citoyen2
+Architecture: all
+Depends: ${misc:Depends}, python (>= 2.6),
+ python-imaging,
+ python-feedparser,
+ python-django (>= 1.5), python-django (<< 1.6),
+ python-authentic2 (>= 2.1.2),
+ python-django-cms (>= 3.0rc1),
+ python-django-admin-tools (>= 0.5),
+ python-django-admin-tools (<< 0.6),
+ python-requests (>= 1.0.0),
+ python-django-allauth (>= 0.14)
+Description: Portail citoyen v2 python module
+Conflicts: python-portail-citoyen
+
+Package: portail-citoyen2
+Architecture: all
+Depends: ${misc:Depends}, adduser,
+ python-portail-citoyen2 (>= 1.0),
+ python-entrouvert (>= 6.0),
+ python-django-south (>= 0.8.4),
+ python-psycopg2,
+ gunicorn, dbconfig-common,
+ debconf | debconf-2.0, ucf
+Recommends: postgresql-client
+Suggests: nginx, postgresql
+Description: Portail citoyen v2 daemon
+Conflicts: portail-citoyen
+
diff --git a/debian/docs b/debian/docs
new file mode 100644
index 0000000..e845566
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1 @@
+README
diff --git a/debian/portail-citoyen-manage b/debian/portail-citoyen-manage
new file mode 100755
index 0000000..dfeab6a
--- /dev/null
+++ b/debian/portail-citoyen-manage
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+if [ "$(whoami)" != "portail-citoyen" ]; then
+ if which sudo; then
+ if sudo -v -u portail-citoyen; then
+ sudo -u portail-citoyen portail-citoyen-manage "$@"
+ exit $?
+ fi
+ echo "You must run this script with portail-citoyen user"
+ exit 1
+ fi
+fi
+
+if [ -f /etc/portail-citoyen/portail-citoyen.conf ]; then
+ . /etc/portail-citoyen/portail-citoyen.conf
+fi
+
+/usr/lib/portail-citoyen/manage.py "$@"
diff --git a/debian/portail-citoyen2.config b/debian/portail-citoyen2.config
new file mode 100644
index 0000000..373c7e3
--- /dev/null
+++ b/debian/portail-citoyen2.config
@@ -0,0 +1,14 @@
+#!/bin/sh
+# config maintainer script for foo-pgsql
+
+set -e
+
+# source debconf stuff
+. /usr/share/debconf/confmodule
+# source dbconfig-common shell library, and call the hook function
+if [ -f /usr/share/dbconfig-common/dpkg/config.pgsql ]; then
+ . /usr/share/dbconfig-common/dpkg/config.pgsql
+ dbc_go portail-citoyen $@
+fi
+
+#DEBHELPER#
diff --git a/debian/portail-citoyen2.dirs b/debian/portail-citoyen2.dirs
new file mode 100644
index 0000000..d58ab9d
--- /dev/null
+++ b/debian/portail-citoyen2.dirs
@@ -0,0 +1,8 @@
+etc/portail-citoyen
+usr/lib/portail-citoyen
+usr/share/dbconfig-common/scripts/portail-citoyen/install
+var/lib/portail-citoyen/media
+var/lib/portail-citoyen/static
+var/lib/portail-citoyen/extra-static
+var/run/portail-citoyen
+var/log/portail-citoyen
diff --git a/debian/portail-citoyen2.docs b/debian/portail-citoyen2.docs
new file mode 100644
index 0000000..e845566
--- /dev/null
+++ b/debian/portail-citoyen2.docs
@@ -0,0 +1 @@
+README
diff --git a/debian/portail-citoyen2.init b/debian/portail-citoyen2.init
new file mode 100644
index 0000000..4c8a25c
--- /dev/null
+++ b/debian/portail-citoyen2.init
@@ -0,0 +1,178 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: portail-citoyen
+# Required-Start: $network $local_fs
+# Required-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Portail citoyen
+# Description: Portail citoyen
+### END INIT INFO
+
+# Author: Jérôme Schneider
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC=portail-citoyen
+NAME=portail-citoyen
+DAEMON=/usr/bin/gunicorn
+PID_DIR=/var/run/$NAME
+LOG_DIR=/var/log/$NAME
+PIDFILE=$PID_DIR/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+
+USER=portail-citoyen
+GROUP=portail-citoyen
+
+DAEMON_ARGS="--pid $PIDFILE \
+--user $USER --group $GROUP \
+--daemon \
+--access-logfile $LOG_DIR/gunicorn-access.log \
+--log-file $LOG_DIR/gunicorn-error.log \
+--bind=unix:$PID_DIR/$NAME.sock \
+--workers=10 \
+--worker-class=sync \
+--timeout=60 \
+portail_citoyen.wsgi:application"
+
+# Exit if the package is not installed
+[ -x $DAEMON ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# Load confg
+. /etc/portail-citoyen/portail-citoyen.conf
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+# Create pid directory
+if [ ! -d $PID_DIR ]; then
+ install -d -m 755 -o $USER -g $GROUP $PID_DIR
+fi
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --exec $DAEMON -- \
+ $DAEMON_ARGS \
+ || return 2
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ # Wait for children to finish too if this is a daemon that forks
+ # and if the daemon is only ever run from this initscript.
+ # If the above conditions are not satisfied then add some other code
+ # that waits for the process to drop all resources that could be
+ # needed by services started subsequently. A last resort is to
+ # sleep for some time.
+ start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+ [ "$?" = 2 ] && return 2
+ # Many daemons don't delete their pidfiles when they exit.
+ rm -f $PIDFILE
+ return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ #
+ # If the daemon can reload its configuration without
+ # restarting (for example, when it is sent a SIGHUP),
+ # then implement that here.
+ #
+ start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
+ return 0
+}
+
+do_migrate() {
+ log_action_msg "Applying new migrations .."
+ su $USER -p -c "/usr/bin/portail-citoyen-manage syncdb --migrate --noinput"
+ log_action_msg ".. done"
+}
+
+
+case "$1" in
+ start)
+ do_migrate
+ log_daemon_msg "Starting $DESC " "$NAME"
+ do_start
+ case "$?" in
+ 0|1) log_end_msg 0 ;;
+ 2) log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) log_end_msg 0 ;;
+ 2) log_end_msg 1 ;;
+ esac
+ ;;
+ status)
+ status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+ ;;
+ #reload|force-reload)
+ #
+ # If do_reload() is not implemented then leave this commented out
+ # and leave 'force-reload' as an alias for 'restart'.
+ #
+ #log_daemon_msg "Reloading $DESC" "$NAME"
+ #do_reload
+ #log_end_msg $?
+ #;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented then remove the
+ # 'force-reload' alias
+ #
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop
+ do_migrate
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
diff --git a/debian/portail-citoyen2.install b/debian/portail-citoyen2.install
new file mode 100644
index 0000000..aa91f67
--- /dev/null
+++ b/debian/portail-citoyen2.install
@@ -0,0 +1,4 @@
+debian/conf/portail-citoyen.conf /etc/portail-citoyen
+debian/conf/nginx-example.conf /etc/portail-citoyen
+debian/conf/db.conf /usr/share/portail-citoyen/templates
+debian/portail-citoyen-manage /usr/bin
diff --git a/debian/portail-citoyen2.postinst b/debian/portail-citoyen2.postinst
new file mode 100644
index 0000000..0e8da04
--- /dev/null
+++ b/debian/portail-citoyen2.postinst
@@ -0,0 +1,87 @@
+#!/bin/sh
+#
+# Postinst script for portail-citoyen
+#
+
+set -e
+
+NAME=portail-citoyen
+USER=portail-citoyen
+GROUP=portail-citoyen
+HOME=/var/lib/$NAME
+
+# source debconf stuff
+. /usr/share/debconf/confmodule
+
+case "$1" in
+ configure)
+ if ! getent group $GROUP > /dev/null 2>&1; then
+ echo -n "Adding group $GROUP.." >&2
+ addgroup --quiet --system $GROUP
+ echo "..done" >&2
+ fi
+ if ! getent passwd $USER > /dev/null 2>&1; then
+ echo -n "Adding user $USER.." >&2
+ adduser --quiet --system --gecos "$NAME daemon" \
+ --ingroup $GROUP \
+ --no-create-home --home $HOME \
+ $USER
+ echo "..done" >&2
+ fi
+ if [ ! -f "/etc/$NAME/secret" ]; then
+ echo -n "Generating Django secret.." >&2
+ echo "export SECRET_KEY='` /etc/$NAME/secret
+ chmod 0640 /etc/$NAME/secret
+ chown root:$GROUP /etc/$NAME/secret
+ echo "..done" >&2
+ fi
+ if [ ! -f "/etc/$NAME/saml-certs.conf" ]; then
+ echo -n "Generating SAML certificates.." >&2
+ openssl genrsa -out /tmp/saml.key 2048 >&2
+ openssl rsa -in /tmp/saml.key -pubout -out /tmp/saml.pub >&2
+ echo SAML_SIGNATURE_PRIVATE_KEY=\"`cat /tmp/saml.key`\" > /etc/$NAME/saml-certs.conf
+ echo SAML_SIGNATURE_PUBLIC_KEY=\"`cat /tmp/saml.pub`\" >> /etc/$NAME/saml-certs.conf
+ rm /tmp/saml.key /tmp/saml.pub
+ echo "..done" >&2
+ fi
+
+ chown $USER:$GROUP /var/lib/portail-citoyen \
+ /var/lib/portail-citoyen/static \
+ /var/lib/portail-citoyen/extra-static \
+ /var/lib/portail-citoyen/media \
+ /var/run/portail-citoyen \
+ /var/log/portail-citoyen
+
+ # source dbconfig-common shell library, and call the hook function
+ if [ -f /usr/share/dbconfig-common/dpkg/postinst.pgsql ]; then
+ . /usr/share/dbconfig-common/dpkg/postinst.pgsql
+ dbc_generate_include="template:/etc/portail-citoyen/db.conf"
+ dbc_generate_include_args="-o template_infile=/usr/share/portail-citoyen/templates/db.conf -U"
+ dbc_generate_include_owner="root:portail-citoyen"
+ dbc_generate_include_perms="640"
+ dbc_pgsql_createdb_encoding="UTF8"
+ dbc_go portail-citoyen $@
+ fi
+
+ echo -n "Generating static files.." >&2
+ su $USER -p -c "/usr/bin/portail-citoyen-manage collectstatic --noinput --link" >&2
+ echo "..done" >&2
+ ;;
+
+ reconfigure|abort-upgrade|abort-remove|abort-deconfigure)
+ ;;
+
+ *)
+ echo "postinst called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+db_stop
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/portail-citoyen2.postrm b/debian/portail-citoyen2.postrm
new file mode 100644
index 0000000..80a667b
--- /dev/null
+++ b/debian/portail-citoyen2.postrm
@@ -0,0 +1,32 @@
+#!/bin/sh
+# postrm script for portail-citoyen
+#
+# see: dh_installdeb(1)
+
+set -e
+
+case "$1" in purge)
+ deluser --quiet --system portail-citoyen > /dev/null || true
+ rm -f /etc/portail-citoyen/secret
+ rm -rf /var/lib/portail-citoyen/static/*
+ # source debconf stuff
+ . /usr/share/debconf/confmodule
+ # source dbconfig-common shell library, and call the hook function
+ if [ -f /usr/share/dbconfig-common/dpkg/postrm.pgsql ]; then
+ . /usr/share/dbconfig-common/dpkg/postrm.pgsql
+ dbc_go portail-citoyen $@
+ fi
+
+ DBCONF=/etc/portail-citoyen/db.conf
+ if [ "$1" = "purge" ]; then
+ rm -f $DBCONF
+ if which ucf >/dev/null 2>&1; then
+ ucf --purge $DBCONF
+ fi
+ fi
+ ;;
+
+esac
+
+exit 0
+
diff --git a/debian/python-portail-citoyen2.install b/debian/python-portail-citoyen2.install
new file mode 100644
index 0000000..1b91047
--- /dev/null
+++ b/debian/python-portail-citoyen2.install
@@ -0,0 +1 @@
+usr/
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..3e8eefa
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,14 @@
+#!/usr/bin/make -f
+
+d=$(CURDIR)/debian/tmp
+portailcitoyen=$(CURDIR)/debian/portail-citoyen
+
+%:
+ dh $@ --with python2
+
+override_dh_install:
+ install -m 755 -o root -g root debian/conf/syncdb.sh $(portailcitoyen)/usr/share/dbconfig-common/scripts/portail-citoyen/install/pgsql
+ mv $(d)/usr/bin/portail-citoyen2 $(portailcitoyen)/usr/lib/portail-citoyen/manage.py
+ rm -rf $(d)/usr/bin
+ dh_install
+
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/help/fr/api-services.page b/help/fr/api-services.page
deleted file mode 100644
index 2101ddb..0000000
--- a/help/fr/api-services.page
+++ /dev/null
@@ -1,310 +0,0 @@
-
-
-
-
-
-
-
- Frédéric Péters
- fpeters@entrouvert.com
-
-
- Benjamin Dauvergne
- bdauvergne@entrouvert.com
-
-
- Pierre Cros
- pcros@entrouvert.com
-
- Remontée d'informations de services vers le portail citoyen
-
-
-Remontée d'informations vers le portail citoyen
-
-
-Introduction
-
-Le portail citoyen est une plate-forme dans laquelle sont agrégées des
-informations provenant de sources web diverses.
-
-Afin de permettre cette remontée d'information pour les services ne
-disposant pas nativement d'une API exposée sur le Web, nous proposons
-d'utiliser celle qui est décrite dans ce document.
-
-
-
-
-
-Requête
-
-Le portail effectue des requêtes HTTP GET vers les différents services. Les
-échanges atendus sont conformes au style d'architecture REST.
-
-
-
-Requête identifiante
-
-L'URI utilisée pour ces requêtes peut contenir des informations identifiant
-l'usager concerné.
-
-
-Identifiant SAML
-
-Lorsque le service intègre le protocole de fédération d'identité SAML, la
-requête identifiante utilisera un identifiant SAML, le NameID :
-
-
-https://www.example.com/eservices/pending?NameID=nameid
-
-
-
-
-Adresse électronique
-
-Lorsque le service n'intègre pas le protocole de fédération d'identité SAML,
-la requête identifiante utilisera l'adresse électronique de l'utilisateur :
-
-
-https://www.example.com/eservices/pending?email=email
-
-
-
- Adresses électroniques identiques
- L'utilisation de cette méthode pour identifier l'utilisateur ne fonctionne
- que si ce dernier a employé la même adresse électronique pour la création du
- compte citoyen et la création du compte sur le service.
-
-
-
-
-
-Autres requêtes
-
-Il est possible pour le service d'exposer davantage de données via des
-URL.
-
-
-Données génériques (qui ne concernent pas un utilisateur particulier)
-
-L'applications peut exposer des données génériques (horaires, informations,
-actualités). Elle doit le faire via une URL du type :
-
-https://www.example.com/eservices/horaires/
-
-
-
-Filtres
-
-Il peut être utile pour le portail citoyen de filtrer les données récupérées
-en utilisant des critères divers (catégories, localisations...) via les URL.
-Les filtres doivent être compris dans les URL sous la forme (pour exposer les
-horaires de Montpellier par exemple) :
-
-https://www.example.com/eservices/montpellier/horaires/
-
-
-
-
-
-
-Structure de l'information fournie par les services
-
-En réponse à la requête du portail citoyen, le service doit fournir une
-information structurée. Cette réponse peut prendre plusieurs formes.
-
-
-Fils d'info
-
-Le portail peut intégrer, sans que cela ne nécessite la moindre
-modification, les fils d'information au format RSS et Atom qui sont
-offerts par les services.
-
-
-
-
-HTML
-
-Comme pour les fils d'infos, des blocs de code HTML fournis par les services
-peuvent être intégrés directement dans le portail. À noter toutefois que ce
-HTML doit être "brut" parce qu'il est filtré. Il ne peut pas contenir de
-Javascript par exemple.
-
-
-
-
-JSON
-
-La réponse du service à la requête du portail peut aussi être faite en
-JSON.
-
-
-Liste
-
-Les données exposées au format JSON doivent être organisées sous forme d'un
-tableau associatif. Les clés (variables) de ce tableau sont les suivantes :
-
-
- title
: titre (obligatoire)
- url
: URL (obligatoire)
- description
: description (facultatif)
-
-
-La liste des données doit être attachées à une clé nommée data
.
-
-
-Exemple :
-
-
-{ "data": [
- {"title": "Demande de bac pour ordures",
- "url": "https://eservices.example.com/dechets/demande-bac"},
- {"title": "Demande d'acte de naissance",
- "url": "https://eservices.example.com/actes/naissance",
- "Description": "Faites vos démarches sans vous déplacer"}
- ]
-}
-
-
-
-
-
-Tableau
-
-Le portail citoyen peut aussi recevoir des données qu'il affichera sous
-forme de tableau.
-
-La liste des données doit être attachées à une clé nommée data
-et une clé nommée columns
peut exister pour fournir les libellés
-des colonnes.
-
-
-Exemple :
-
-
-{"data": [
- {"day": "Lundi", "open": "8h", "close": "17h"},
- {"day": "Mardi", "open": "8h", "close": "19h"},
- {"day": "Mercredi", "open": "9h", "close": "17h"}
- ],
- "columns": {
- "day": "Jour",
- "open": "Horaire d'ouverture",
- "close": "Horaire de fermeture"}
-}
-
-
-Le résultat sur le portail citoyen sera l'affichage du tableau suivant :
-
-
-
-
- Jour
- Horaire d'ouverture
- Horaire de fermeture
-
-
-
-
-Lundi
8h
17h
-
-
-Mardi
8h
19h
-
-
-Mercredi
9h
17h
-
-
-
-
-
-
-
-
-
-
-
- Signature de l'URL
-
-
-L'URL doit être signée via une clé partagée à configurer des deux cotés de la
-liaison, la signature est du type HMAC; l'algorithme de hash à employer est
-passé en paramètre.
-
-
-Si le service doit être utilisé par différents requêteurs il est
-recommandé de ne pas utiliser une clé unique; il est ainsi suggéré que l'URL
-attende également un paramètre précisant l'appelant, à travers, par exemple,
-un paramètre supplémentaire apikey
.
-
-
-En ce qui concerne l'algorithme de hash, il est préconisé d'utiliser
-SHA-256 par respect du Référentiel Général
-de Sécurité (RGS).
-
-
-
-La signature est à calculer sur la query string encodée complète, en
-enlevant les paramètres terminaux algo
, timestamp
,
-nonce
et signature
. La formule de calcul de la
-signature est la suivante :
-
-
-
-BASE64(HMAC-HASH(query_string+'algo=HASH×tamp=' + timestamp + '&nonce=" + nonce, clé))
-
-
-
-
-timestamp
est la date dans la zone GMT au format ISO8601
-en se limitant à la précision des secondes (ex : 2012-04-04T12:34:00Z),
-
-
-nonce est une chaîne aléatoire contenant au moins 128 bits d'entropie
-(16 octets aléatoires),
-
-algo est une chaîne représentant l'algorithme de hachage utilisé, sont
-définis : sha1, sha256, sha512 pour les trois algorithmes correspondant.
-L'utilisation d'une valeur différente n'est pas définie.
-
-
-
-
-La query string définitive est ainsi :
-
-
-
-qs_initial &algo=algo ×tamp=ts &nonce=nonce &signature=signature
-
-
-
-Pour la validation il faut contrôler :
-
-
-
-
-que la signature regénérée est identique,
-
-que le timestamp est dans une fenêtre étroite par rapport à la date
-courante, il est recommandé d'accepter un écart de trente secondes
-maximum.
-
-que le nonce n'a encore jamais été vu (associé au timestamp il suffit
-de conserver les nonces pour une durée de 3 ou 4 fois la fenêtre de temps, par
-exemple cinq minutes).
-
-
-
-
-Lors de l'utilisation de ces signatures il est important d'utiliser HTTPS pour
-éviter les interceptions et de stocker les nonces pour éviter les rejeux et à
-maintenir une bonne synchronisation des horloges, en utilisant par exemple le
-protocole NTP.
-
-
-
-
-
diff --git a/jenkins.sh b/jenkins.sh
deleted file mode 100755
index 5993b75..0000000
--- a/jenkins.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash -e
-pip install --upgrade setuptools
-pip install --upgrade pip
-pip install --upgrade pylint
-pip install --upgrade pyOpenSSL==0.13 ndg-httpsclient requests pyasn1
-sed -i 's/^MAX = 64/MAX = 200/' $VIRTUAL_ENV/lib/python*/site-packages/ndg/httpsclient/subj_alt_name.py
-
-pip install --upgrade -r requirements.txt
-
-./portail-citoyen syncdb --migrate --noinput --no-initial-data
-./portail-citoyen loaddata initial_data
-./portail-citoyen validate
-(pylint -f parseable --rcfile /var/lib/jenkins/pylint.django.rc portail_citoyen2/ | tee pylint.out) || /bin/true
diff --git a/load-base-data.sh b/load-base-data.sh
deleted file mode 100755
index 7111c07..0000000
--- a/load-base-data.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-BASE=`dirname $0`
-
-ENV=${ENV:-dev}
-
-$BASE/run.sh loaddata --traceback initial_data
diff --git a/local_settings.py.example b/local_settings.py.example
deleted file mode 100644
index ef804f1..0000000
--- a/local_settings.py.example
+++ /dev/null
@@ -1,22 +0,0 @@
-
-import os
-
-DEBUG = True
-
-if DEBUG:
- DEBUG_TOOLBAR = True
- TEMPLATE_DEBUG = True
- DEBUG_TOOLBAR_CONFIG = {
- 'INTERCEPT_REDIRECTS': False,
- }
-INTERNAL_IPS = ('127.0.0.1',)
-
-SECRET_KEY = 'coin'
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': os.path.join(os.path.dirname(__file__), 'portail_citoyen.sqlite'),
- },
-}
-
diff --git a/portail-citoyen2 b/portail-citoyen2
deleted file mode 100755
index 3e13785..0000000
--- a/portail-citoyen2
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python
-import os
-import sys
-
-if __name__ == "__main__":
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "portail_citoyen2.settings")
-
- from django.core.management import execute_from_command_line
-
- execute_from_command_line(sys.argv)
diff --git a/portail_citoyen2/__init__.py b/portail_citoyen2/__init__.py
deleted file mode 100644
index 7a1d20e..0000000
--- a/portail_citoyen2/__init__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-import os.path
-import sys
-
-__version__ = '0.1'
-
-apps_dir = os.path.join(os.path.dirname(__file__), 'apps')
-if apps_dir not in sys.path:
- sys.path.append(apps_dir)
diff --git a/portail_citoyen2/admin.py b/portail_citoyen2/admin.py
deleted file mode 100644
index 40b3e5b..0000000
--- a/portail_citoyen2/admin.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django.views.decorators.cache import never_cache
-from django.http import HttpResponseRedirect
-from django.utils.http import urlencode
-from django.conf import settings
-from django.contrib.auth import REDIRECT_FIELD_NAME
-from django.contrib import admin
-
-@never_cache
-def login(request, extra_context=None):
- query = urlencode({REDIRECT_FIELD_NAME: request.build_absolute_uri()})
- url = '{0}?{1}'.format(settings.LOGIN_URL, query)
- return HttpResponseRedirect(url)
-
-admin.site.login = login
diff --git a/portail_citoyen2/allauth_authentic2/__init__.py b/portail_citoyen2/allauth_authentic2/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/allauth_authentic2/models.py b/portail_citoyen2/allauth_authentic2/models.py
deleted file mode 100644
index 6b20219..0000000
--- a/portail_citoyen2/allauth_authentic2/models.py
+++ /dev/null
@@ -1 +0,0 @@
-# Create your models here.
diff --git a/portail_citoyen2/allauth_authentic2/provider.py b/portail_citoyen2/allauth_authentic2/provider.py
deleted file mode 100644
index 5abb29c..0000000
--- a/portail_citoyen2/allauth_authentic2/provider.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from allauth.socialaccount import providers
-from allauth.socialaccount.providers.base import ProviderAccount
-from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider
-from allauth.account.models import EmailAddress
-
-class Authentic2Account(ProviderAccount):
- def to_str(self):
- return self.account.uid
-
-
-class Authentic2Provider(OAuth2Provider):
- id = 'authentic2'
- name = 'Authentic2'
- package = 'portail_citoyen2.allauth_authentic2'
- account_class = Authentic2Account
-
- def extract_uid(self, data):
- return str(data['username'])
-
- def extract_common_fields(self, data):
- return dict(email=data.get('email'),
- username=data.get('username'),
- name=data.get('displayname'))
-
- def extract_email_addresses(self, data):
- ret = [EmailAddress(email=data['email'],
- verified=True,
- primary=True)]
- return ret
-
-
-
-providers.registry.register(Authentic2Provider)
diff --git a/portail_citoyen2/allauth_authentic2/tests.py b/portail_citoyen2/allauth_authentic2/tests.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/allauth_authentic2/urls.py b/portail_citoyen2/allauth_authentic2/urls.py
deleted file mode 100644
index 69b19e7..0000000
--- a/portail_citoyen2/allauth_authentic2/urls.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns
-from .provider import Authentic2Provider
-
-urlpatterns = default_urlpatterns(Authentic2Provider)
-
diff --git a/portail_citoyen2/allauth_authentic2/views.py b/portail_citoyen2/allauth_authentic2/views.py
deleted file mode 100644
index dae345f..0000000
--- a/portail_citoyen2/allauth_authentic2/views.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import urlparse
-import requests
-
-from django.core.exceptions import ImproperlyConfigured
-
-from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter,
- OAuth2LoginView,
- OAuth2CallbackView)
-from .provider import Authentic2Provider
-
-
-class Authentic2OAuth2Adapter(OAuth2Adapter):
- provider_id = Authentic2Provider.id
-
- def get_url(self):
- provider = self.get_provider()
- try:
- return provider.get_settings()['URL']
- except IndexError:
- raise ImproperlyConfigured('The authentic2 provider needs an URL defined in settings')
-
- @property
- def access_token_url(self):
- return urlparse.urljoin(self.get_url(), 'access_token')
-
- @property
- def authorize_url(self):
- return urlparse.urljoin(self.get_url(), 'authorize')
-
- @property
- def profile_url(self):
- return urlparse.urljoin(self.get_url(), 'user-info')
-
- def complete_login(self, request, app, token, **kwargs):
- resp = requests.get(self.profile_url,
- headers={'authorization': 'Bearer %s' % token.token})
- extra_data = resp.json()
- return self.get_provider().sociallogin_from_response(request,
- extra_data)
-
-
-oauth2_login = OAuth2LoginView.adapter_view(Authentic2OAuth2Adapter)
-oauth2_callback = OAuth2CallbackView.adapter_view(Authentic2OAuth2Adapter)
diff --git a/portail_citoyen2/app_settings.py b/portail_citoyen2/app_settings.py
deleted file mode 100644
index 8779707..0000000
--- a/portail_citoyen2/app_settings.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import sys
-
-from django.core.exceptions import ImproperlyConfigured
-
-class AppSettings(object):
- __defaults = {
- 'PORTAIL_ADMIN_URL': None,
- }
-
- def __init__(self, prefix):
- self.prefix = prefix
-
- def __getattr__(self, name):
- if name in self.__defaults:
- return self._settings(name, self.__defaults[name])
- else:
- return self._settings(name)
-
- @property
- def TEMPLATE_VARS(self):
- v = self._settings('TEMPLATE_VARS', {})
- try:
- from django.conf import settings
- v['LOGOUT_URL'] = settings.LOGOUT_URL
- except AttributeError:
- raise ImproperlyConfigured('LOGOUT_URL is mandatory')
- return v
-
- def _settings(self, name, default=Ellipsis):
- from django.conf import settings
- if default is Ellipsis:
- return getattr(settings, self.prefix + name)
- else:
- return getattr(settings, self.prefix + name, default)
-
-app_settings = AppSettings('PORTAIL_CITOYEN_')
-app_settings.__name__ = __name__
-sys.modules[__name__] = app_settings
diff --git a/portail_citoyen2/apps/__init__.py b/portail_citoyen2/apps/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/auquotidien_plugin/__init__.py b/portail_citoyen2/apps/auquotidien_plugin/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/auquotidien_plugin/admin.py b/portail_citoyen2/apps/auquotidien_plugin/admin.py
deleted file mode 100644
index 48a5e43..0000000
--- a/portail_citoyen2/apps/auquotidien_plugin/admin.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.contrib import admin
-
-from models import AuQuotidienAPI
-
-class AuQuotidienAPIAdmin(admin.ModelAdmin):
- list_display = [ 'name', 'order', 'active', 'service_provider', 'orig', 'hash_algo', 'verify_certificate', 'allow_redirects', 'timeout' ]
-
-admin.site.register(AuQuotidienAPI, AuQuotidienAPIAdmin)
diff --git a/portail_citoyen2/apps/auquotidien_plugin/cms_plugins.py b/portail_citoyen2/apps/auquotidien_plugin/cms_plugins.py
deleted file mode 100644
index 6e3ca1e..0000000
--- a/portail_citoyen2/apps/auquotidien_plugin/cms_plugins.py
+++ /dev/null
@@ -1,78 +0,0 @@
-import logging
-import urlparse
-
-from django.utils.translation import ugettext_lazy as _
-
-
-from cms.plugin_pool import plugin_pool
-
-
-from data_source_plugin.cms_plugins import DataSourcePlugin, Data
-from data_source_plugin.models import DataSource
-
-from .models import (
- AuQuotidienActiveFormsPlugin as AuQuotidienActiveFormsPluginModel,
- AuQuotidienCategoryPlugin as AuQuotidienCategoryPluginModel)
-
-logger = logging.getLogger(__name__)
-
-class FakeSource(object):
- def __init__(self, url, api):
- self.url = url
- self.mime_type = DataSource.JSON
- self.api = api
-
- def __getattr__(self, attribute):
- return getattr(self.api, attribute)
-
-class AuQuotidienBasePlugin(DataSourcePlugin):
- model = AuQuotidienActiveFormsPluginModel
- render_template = None
- text_enabled = True
- inlines = []
- url_template = None
-
- def get_apis(self, context, instance):
- user = context['request'].user
- return instance.apis.filter(service_provider__libertyfederation__user=user, active=True)
-
- def get_sources(self, context, instance):
- for api in self.get_apis(context, instance):
- url = api.base_url
- url_suffix = self.url_template
- orig = api.orig
- url_suffix = url_suffix.format(provider_id=api.provider_id,
- orig=orig)
- url = urlparse.urljoin(url, url_suffix)
- source = FakeSource(url=url, api=api)
- yield Data(source, context, 0, instance.refresh)
-
- def render(self, context, instance, placeholder):
- ctx = super(AuQuotidienBasePlugin, self).render(context, instance,
- placeholder)
- ctx['instance'] = instance
- return ctx
-
-
-class AuQuotidienActiveFormsPlugin(AuQuotidienBasePlugin):
- model = AuQuotidienActiveFormsPluginModel
- name = _('au-quotidien active forms')
- render_template = 'auquotidien_plugin/active_forms.html'
- text_enabled = True
- inlines = []
- url_template = '/myspace/json/forms?format=json&NameID={{{{federations.service_{provider_id}.links.0}}}}&orig={orig}'
-
-
-plugin_pool.register_plugin(AuQuotidienActiveFormsPlugin)
-
-
-class AuQuotidienCategoryPlugin(AuQuotidienBasePlugin):
- model = AuQuotidienCategoryPluginModel
- name = _('au-quotidien categories')
- render_template = 'auquotidien_plugin/categories.html'
- text_enabled = True
- inlines = []
- url_template = '/categories?format=json&NameID={{{{federations.service_{provider_id}.links.0}}}}&orig={orig}'
-
-
-plugin_pool.register_plugin(AuQuotidienCategoryPlugin)
diff --git a/portail_citoyen2/apps/auquotidien_plugin/locale/fr/LC_MESSAGES/django.po b/portail_citoyen2/apps/auquotidien_plugin/locale/fr/LC_MESSAGES/django.po
deleted file mode 100644
index 0ec1b74..0000000
--- a/portail_citoyen2/apps/auquotidien_plugin/locale/fr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,105 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-02-10 16:31+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#: cms_plugins.py:59 models.py:67 models.py:68
-msgid "au-quotidien active forms"
-msgstr "affichage des démarches en cours"
-
-#: cms_plugins.py:71 models.py:82
-msgid "au-quotidien categories"
-msgstr "affichage des catégories de démarches"
-
-#: models.py:14
-msgid "name"
-msgstr "nom"
-
-#: models.py:16
-msgid "active"
-msgstr "actif"
-
-#: models.py:17
-msgid "order"
-msgstr "ordre"
-
-#: models.py:19
-msgid "liberty service provider for the au-quotidien service"
-msgstr "fournisseur de service liberty associé au service au-quotidien"
-
-#: models.py:21
-msgid "origin"
-msgstr "origine"
-
-#: models.py:22
-msgid "hashing algorithm"
-msgstr "algorithme de hachage"
-
-#: models.py:24
-msgid "signature key"
-msgstr "clé de signature"
-
-#: models.py:26
-msgid "verify certificate"
-msgstr "vérifier le certificat SSL"
-
-#: models.py:28
-msgid "allows HTTP redirections"
-msgstr "permettre les redirections HTTP"
-
-#: models.py:29
-msgid "it can improve latencies to forbid redirection follow"
-msgstr ""
-"cela peut améliorer les performances en cas d'absence de service d'interdire "
-"les redirections"
-
-#: models.py:31
-msgid "timeout"
-msgstr "temps d'expiration pour la requête HTTP"
-
-#: models.py:33
-msgid "time in second to wait before failing to download a datasource"
-msgstr " "
-
-#: models.py:50
-msgid "au-quotidien API endpoint"
-msgstr "terminaison de l'API au-quotidien"
-
-#: models.py:51
-msgid "au-quotidien API endpoints"
-msgstr "terminaisons de l'API au-quotidien"
-
-#: models.py:56 models.py:71
-msgid "refresh timeout"
-msgstr "durée de rafraîchissement"
-
-#: models.py:57 models.py:72
-msgid "Number of seconds between two web service calls"
-msgstr "nombre de secondes entre deux appels au web-service"
-
-#: models.py:61 models.py:76
-msgid "refresh {0}"
-msgstr "durée de rafraîchissement {0}s"
-
-#: templates/auquotidien_plugin/categories.html:2
-msgid "Other procedures.."
-msgstr "Autres démarches..."
-
-#: templates/auquotidien_plugin/categories.html:20
-msgid "All categories"
-msgstr "Toutes les démarches"
diff --git a/portail_citoyen2/apps/auquotidien_plugin/migrations/0001_initial.py b/portail_citoyen2/apps/auquotidien_plugin/migrations/0001_initial.py
deleted file mode 100644
index 646dae0..0000000
--- a/portail_citoyen2/apps/auquotidien_plugin/migrations/0001_initial.py
+++ /dev/null
@@ -1,215 +0,0 @@
-# -*- 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 'AuQuotidienAPI'
- db.create_table(u'auquotidien_plugin_auquotidienapi', (
- (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(default='', max_length=128, blank=True)),
- ('active', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('order', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('service_provider', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['saml.LibertyServiceProvider'])),
- ('orig', self.gf('django.db.models.fields.CharField')(max_length=64)),
- ('hash_algo', self.gf('django.db.models.fields.CharField')(default='', max_length=16, blank=True)),
- ('signature_key', self.gf('django.db.models.fields.CharField')(default='', max_length=128, blank=True)),
- ('verify_certificate', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('allow_redirects', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('timeout', self.gf('django.db.models.fields.IntegerField')(default=10)),
- ))
- db.send_create_signal(u'auquotidien_plugin', ['AuQuotidienAPI'])
-
- # Adding model 'AuQuotidienActiveFormsPlugin'
- db.create_table(u'auquotidien_plugin_auquotidienactiveformsplugin', (
- (u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
- ('refresh', self.gf('django.db.models.fields.IntegerField')(default=60)),
- ))
- db.send_create_signal(u'auquotidien_plugin', ['AuQuotidienActiveFormsPlugin'])
-
- # Adding M2M table for field apis on 'AuQuotidienActiveFormsPlugin'
- m2m_table_name = db.shorten_name(u'auquotidien_plugin_auquotidienactiveformsplugin_apis')
- db.create_table(m2m_table_name, (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('auquotidienactiveformsplugin', models.ForeignKey(orm[u'auquotidien_plugin.auquotidienactiveformsplugin'], null=False)),
- ('auquotidienapi', models.ForeignKey(orm[u'auquotidien_plugin.auquotidienapi'], null=False))
- ))
- db.create_unique(m2m_table_name, ['auquotidienactiveformsplugin_id', 'auquotidienapi_id'])
-
- # Adding model 'AuQuotidienCategoryPlugin'
- db.create_table(u'auquotidien_plugin_auquotidiencategoryplugin', (
- (u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
- ('refresh', self.gf('django.db.models.fields.IntegerField')(default=60)),
- ))
- db.send_create_signal(u'auquotidien_plugin', ['AuQuotidienCategoryPlugin'])
-
- # Adding M2M table for field apis on 'AuQuotidienCategoryPlugin'
- m2m_table_name = db.shorten_name(u'auquotidien_plugin_auquotidiencategoryplugin_apis')
- db.create_table(m2m_table_name, (
- ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
- ('auquotidiencategoryplugin', models.ForeignKey(orm[u'auquotidien_plugin.auquotidiencategoryplugin'], null=False)),
- ('auquotidienapi', models.ForeignKey(orm[u'auquotidien_plugin.auquotidienapi'], null=False))
- ))
- db.create_unique(m2m_table_name, ['auquotidiencategoryplugin_id', 'auquotidienapi_id'])
-
-
- def backwards(self, orm):
- # Deleting model 'AuQuotidienAPI'
- db.delete_table(u'auquotidien_plugin_auquotidienapi')
-
- # Deleting model 'AuQuotidienActiveFormsPlugin'
- db.delete_table(u'auquotidien_plugin_auquotidienactiveformsplugin')
-
- # Removing M2M table for field apis on 'AuQuotidienActiveFormsPlugin'
- db.delete_table(db.shorten_name(u'auquotidien_plugin_auquotidienactiveformsplugin_apis'))
-
- # Deleting model 'AuQuotidienCategoryPlugin'
- db.delete_table(u'auquotidien_plugin_auquotidiencategoryplugin')
-
- # Removing M2M table for field apis on 'AuQuotidienCategoryPlugin'
- db.delete_table(db.shorten_name(u'auquotidien_plugin_auquotidiencategoryplugin_apis'))
-
-
- models = {
- u'attribute_aggregator.attributeitem': {
- 'Meta': {'object_name': 'AttributeItem'},
- 'attribute_name': ('django.db.models.fields.CharField', [], {'default': "('OpenLDAProotDSE', 'OpenLDAProotDSE')", 'max_length': '100'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'output_name_format': ('django.db.models.fields.CharField', [], {'default': "('urn:oasis:names:tc:SAML:2.0:attrname-format:uri', 'SAMLv2 URI')", 'max_length': '100'}),
- 'output_namespace': ('django.db.models.fields.CharField', [], {'default': "('Default', 'Default')", 'max_length': '100'}),
- 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['attribute_aggregator.AttributeSource']", 'null': 'True', 'blank': 'True'})
- },
- u'attribute_aggregator.attributelist': {
- 'Meta': {'object_name': 'AttributeList'},
- 'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'attributes of the list'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['attribute_aggregator.AttributeItem']"}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
- },
- u'attribute_aggregator.attributesource': {
- 'Meta': {'object_name': 'AttributeSource'},
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}),
- 'namespace': ('django.db.models.fields.CharField', [], {'default': "('Default', 'Default')", 'max_length': '100'})
- },
- u'auquotidien_plugin.auquotidienactiveformsplugin': {
- 'Meta': {'object_name': 'AuQuotidienActiveFormsPlugin', '_ormbases': ['cms.CMSPlugin']},
- 'apis': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auquotidien_plugin.AuQuotidienAPI']", 'symmetrical': 'False'}),
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
- 'refresh': ('django.db.models.fields.IntegerField', [], {'default': '60'})
- },
- u'auquotidien_plugin.auquotidienapi': {
- 'Meta': {'ordering': "('order', 'name')", 'object_name': 'AuQuotidienAPI'},
- 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'allow_redirects': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_algo': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'orig': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
- 'service_provider': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['saml.LibertyServiceProvider']"}),
- 'signature_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
- 'timeout': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
- 'verify_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
- },
- u'auquotidien_plugin.auquotidiencategoryplugin': {
- 'Meta': {'object_name': 'AuQuotidienCategoryPlugin', '_ormbases': ['cms.CMSPlugin']},
- 'apis': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auquotidien_plugin.AuQuotidienAPI']", 'symmetrical': 'False'}),
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
- 'refresh': ('django.db.models.fields.IntegerField', [], {'default': '60'})
- },
- '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'idp.attributepolicy': {
- 'Meta': {'object_name': 'AttributePolicy'},
- 'allow_attributes_selection': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'ask_consent_attributes': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'attribute_filter_for_sso_from_push_sources': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'filter attributes of push sources with list'", 'null': 'True', 'to': u"orm['attribute_aggregator.AttributeList']"}),
- 'attribute_list_for_sso_from_pull_sources': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes from pull sources'", 'null': 'True', 'to': u"orm['attribute_aggregator.AttributeList']"}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'filter_source_of_filtered_attributes': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'forward_attributes_from_push_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'map_attributes_from_push_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'map_attributes_of_filtered_attributes': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
- 'output_name_format': ('django.db.models.fields.CharField', [], {'default': "('urn:oasis:names:tc:SAML:2.0:attrname-format:uri', 'SAMLv2 URI')", 'max_length': '100'}),
- 'output_namespace': ('django.db.models.fields.CharField', [], {'default': "('Default', 'Default')", 'max_length': '100'}),
- 'send_error_and_no_attrs_if_missing_required_attrs': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'source_filter_for_sso_from_push_sources': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'filter attributes of push sources with sources'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['attribute_aggregator.AttributeSource']"})
- },
- u'saml.libertyprovider': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'LibertyProvider'},
- 'ca_cert_chain': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'entity_id': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '200'}),
- 'entity_id_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
- 'federation_source': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'metadata': ('django.db.models.fields.TextField', [], {}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '140', 'blank': 'True'}),
- 'protocol_conformance': ('django.db.models.fields.IntegerField', [], {'max_length': '10'}),
- 'public_key': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '140'}),
- 'ssl_certificate': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- },
- u'saml.libertyproviderpolicy': {
- 'Meta': {'object_name': 'LibertyProviderPolicy'},
- 'authn_request_signature_check_hint': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
- },
- u'saml.libertyserviceprovider': {
- 'Meta': {'object_name': 'LibertyServiceProvider'},
- 'attribute_policy': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attribute_policy'", 'null': 'True', 'to': u"orm['idp.AttributePolicy']"}),
- 'enable_following_attribute_policy': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'enable_following_sp_options_policy': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'liberty_provider': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'service_provider'", 'unique': 'True', 'primary_key': 'True', 'to': u"orm['saml.LibertyProvider']"}),
- 'policy': ('django.db.models.fields.related.ForeignKey', [], {'default': '1', 'to': u"orm['saml.LibertyProviderPolicy']", 'null': 'True'}),
- 'sp_options_policy': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'sp_options_policy'", 'null': 'True', 'to': u"orm['saml.SPOptionsIdPPolicy']"})
- },
- u'saml.spoptionsidppolicy': {
- 'Meta': {'object_name': 'SPOptionsIdPPolicy'},
- 'accept_slo': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'accepted_name_id_format': ('authentic2.saml.fields.MultiSelectField', [], {'max_length': '1024', 'blank': 'True'}),
- 'ask_user_consent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'authn_request_signed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'default_name_id_format': ('django.db.models.fields.CharField', [], {'default': "'none'", 'max_length': '256'}),
- 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'encrypt_assertion': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'encrypt_nameid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'federation_mode': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
- 'forward_slo': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'idp_initiated_sso': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'iframe_logout_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '300'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'needs_iframe_logout': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'prefered_assertion_consumer_binding': ('django.db.models.fields.CharField', [], {'default': "'meta'", 'max_length': '4'})
- }
- }
-
- complete_apps = ['auquotidien_plugin']
\ No newline at end of file
diff --git a/portail_citoyen2/apps/auquotidien_plugin/migrations/__init__.py b/portail_citoyen2/apps/auquotidien_plugin/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/auquotidien_plugin/models.py b/portail_citoyen2/apps/auquotidien_plugin/models.py
deleted file mode 100644
index b4bf2ff..0000000
--- a/portail_citoyen2/apps/auquotidien_plugin/models.py
+++ /dev/null
@@ -1,82 +0,0 @@
-from django.utils.translation import ugettext as _
-from django.db import models
-
-
-from cms.models import CMSPlugin
-
-
-from data_source_plugin.models import DataSource
-
-
-__all__ = [ 'AuQuotidienAPI', 'AuQuotidienActiveFormsPlugin' ]
-
-class AuQuotidienAPI(models.Model):
- name = models.CharField(verbose_name=_('name'), max_length=128, blank=True,
- default='')
- active = models.BooleanField(verbose_name=_('active'), default=True)
- order = models.IntegerField(verbose_name=_('order'), default=0)
- service_provider = models.ForeignKey('saml.LibertyServiceProvider',
- verbose_name=_('liberty service provider for the au-quotidien '
- 'service'))
- orig = models.CharField(max_length=64, verbose_name=_('origin'))
- hash_algo = models.CharField(verbose_name=_('hashing algorithm'),
- max_length=16, choices=DataSource.HASHES, default='', blank=True)
- signature_key = models.CharField(verbose_name=_('signature key'),
- max_length=128, default='', blank=True)
- verify_certificate = models.BooleanField(verbose_name=_('verify '
- 'certificate'), default=True, blank=True)
- allow_redirects = models.BooleanField(verbose_name=_('allows HTTP redirections'),
- help_text=_('it can improve latencies to forbid redirection follow'),
- default=True)
- timeout = models.IntegerField(verbose_name=_('timeout'),
- default=10,
- help_text=_('time in second to wait before '
- 'failing to download a datasource'))
-
- @property
- def base_url(self):
- '''Base URL of the Au-Quotidien service'''
- url = self.service_provider.liberty_provider.entity_id
- return url.split('/saml/')[0]
-
- def __unicode__(self):
- return self.name
-
- @property
- def provider_id(self):
- return self.service_provider.liberty_provider.pk
-
- class Meta:
- verbose_name = _('au-quotidien API endpoint')
- verbose_name_plural = _('au-quotidien API endpoints')
- ordering = ('order', 'name')
-
-
-class AuQuotidienActiveFormsPlugin(CMSPlugin):
- refresh = models.IntegerField(verbose_name=_('refresh timeout'), default=60,
- help_text=_('Number of seconds between two web service calls'))
- apis = models.ManyToManyField(AuQuotidienAPI, verbose_name=('au-quotidien API endpoints'))
-
- def __unicode__(self):
- return _('refresh {0}').format(self.refresh)
-
- def copy_relations(self, old_instance):
- self.apis = old_instance.apis.all()
-
- class Meta:
- verbose_name = _('au-quotidien active forms')
- verbose_name_plural = _('au-quotidien active forms')
-
-class AuQuotidienCategoryPlugin(CMSPlugin):
- refresh = models.IntegerField(verbose_name=_('refresh timeout'), default=60,
- help_text=_('Number of seconds between two web service calls'))
- apis = models.ManyToManyField(AuQuotidienAPI, verbose_name=('au-quotidien API endpoints'))
-
- def __unicode__(self):
- return _('refresh {0}').format(self.refresh)
-
- def copy_relations(self, old_instance):
- self.apis = old_instance.apis.all()
-
- class Meta:
- verbose_name = _('au-quotidien categories')
diff --git a/portail_citoyen2/apps/auquotidien_plugin/static/auquotidien_plugin/js/categories.js b/portail_citoyen2/apps/auquotidien_plugin/static/auquotidien_plugin/js/categories.js
deleted file mode 100644
index e6f2da8..0000000
--- a/portail_citoyen2/apps/auquotidien_plugin/static/auquotidien_plugin/js/categories.js
+++ /dev/null
@@ -1,54 +0,0 @@
-$(document).ready(function () {
- $('.aq-catgr-plg').each(function (i, elt) {
- var $plugin = $(elt);
- var $titles = $('.aq-catgr-plg-title', elt);
- var $categories = $('.aq-catgr-plg-body', elt);
- var $empty = $plugin.attr('data-empty');
-
- if ($plugin.data('initialized')) {
- return;
- }
- $plugin.data('initialized', 1);
-
- $titles.hide();
-
- if ($categories.length > 1) {
- if ($empty) {
- $categories.hide();
- } else {
- $categories.slice(1).hide();
- }
- // Create a selector from titles
- var $p = $('
');
- var $select = $(' ');
- if ($empty) {
- var $option = $(' ');
- $option.text($empty);
- $select.append($option);
- }
- for (var i = 0; i < $titles.length; i++) {
- var $body = $($categories[i]);
- var name = $body.attr('data-name');
- var $option = $(' ');
- $option.text(name);
- $option.data('body', $body);
- $option.val($body[0].id);
- $select.append($option);
- }
- $p.append($select);
- $('.aq-catgr-plg-selector-container', elt).append($p);
-
- // Show selected categories
- var on_select_change = function(event) {
- console.log(event.target);
- var $option = $('option:selected', event.target);
- console.log($option);
- var id = '#' + $option.val();
- console.log(id);
- $categories.not(id).hide();
- $(id).show();
- }
- $select.bind('change', on_select_change);
- }
- });
-});
diff --git a/portail_citoyen2/apps/auquotidien_plugin/templates/auquotidien_plugin/active_forms.html b/portail_citoyen2/apps/auquotidien_plugin/templates/auquotidien_plugin/active_forms.html
deleted file mode 100644
index 64ad199..0000000
--- a/portail_citoyen2/apps/auquotidien_plugin/templates/auquotidien_plugin/active_forms.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/portail_citoyen2/apps/auquotidien_plugin/templates/auquotidien_plugin/categories.html b/portail_citoyen2/apps/auquotidien_plugin/templates/auquotidien_plugin/categories.html
deleted file mode 100644
index 1f68040..0000000
--- a/portail_citoyen2/apps/auquotidien_plugin/templates/auquotidien_plugin/categories.html
+++ /dev/null
@@ -1,27 +0,0 @@
-{% load i18n sekizai_tags staticfiles %}
-
-
- {% for data_source in data_sources %}
- {% with base_url=data_source.data_source.api.base_url name=data_source.data_source.name %}
-
- {% endwith %}
- {% endfor %}
-
-{% addtoblock "js" %}{% endaddtoblock %}
diff --git a/portail_citoyen2/apps/data_source_plugin/__init__.py b/portail_citoyen2/apps/data_source_plugin/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/data_source_plugin/admin.py b/portail_citoyen2/apps/data_source_plugin/admin.py
deleted file mode 100644
index 2bc4be7..0000000
--- a/portail_citoyen2/apps/data_source_plugin/admin.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.contrib import admin
-from copy import copy
-
-from cms_plugins import DataSourcePlugin as DataSourcePluginAdmin
-from models import PluginDataSource, DataSource
-
-class PluginDataSourceInlineAdmin(admin.TabularInline):
- model = PluginDataSource
-
-class DataSourceAdmin(admin.ModelAdmin):
- list_display = [ 'name', 'mime_type', 'url' ]
- list_filter = ['mime_type']
-
-DataSourcePluginAdmin.inlines = copy(DataSourcePluginAdmin.inlines)
-DataSourcePluginAdmin.inlines.append(PluginDataSourceInlineAdmin)
-admin.site.register(DataSource, DataSourceAdmin)
diff --git a/portail_citoyen2/apps/data_source_plugin/cms_plugins.py b/portail_citoyen2/apps/data_source_plugin/cms_plugins.py
deleted file mode 100644
index 55b65ce..0000000
--- a/portail_citoyen2/apps/data_source_plugin/cms_plugins.py
+++ /dev/null
@@ -1,175 +0,0 @@
-import logging
-import hashlib
-from xml.etree import ElementTree as ET
-import time
-import threading
-
-from django.utils.translation import ugettext_lazy as _
-from django.conf import settings
-from django.core.cache import cache
-from django.template import Template
-
-import feedparser
-import requests
-from requests.exceptions import RequestException, HTTPError, Timeout
-
-from cms.plugin_base import CMSPluginBase
-from cms.plugin_pool import plugin_pool
-from models import DataSourcePlugin as DataSourcePluginModel, DataSource, RawInlineTemplatePlugin as RawInlineTemplatePluginModel
-import signature
-
-from allauth.socialaccount.models import SocialToken
-
-logger = logging.getLogger(__name__)
-
-CACHE_SENTINEL = object()
-
-class Data(object):
- '''Encapsulate data from a source'''
- MAPPING = {
- DataSource.JSON: 'json',
- DataSource.RSS: 'rss',
- DataSource.HTML: 'html',
- DataSource.XML: 'xml',
- }
-
- def __init__(self, data_source, context, limit, refresh, request=None):
- self.data_source = data_source
- self.kind = self.MAPPING.get(data_source.mime_type)
- self.context = context
- self.url = Template(self.data_source.url).render(self.context)
- self.limit = limit
- self.refresh = refresh
- self.key = hashlib.md5('datasource-{self.data_source.id}-{self.url}-{self.limit}-{self.refresh}'.format(self=self)).hexdigest()
- self.now = time.time()
- self.__content = CACHE_SENTINEL
- self.request = request
-
- def get_access_token(self):
- user = self.request.user
- try:
- token = SocialToken.objects.get(account__provider='authentic2',
- account__user=user)
- logger.debug('retrieved access token: %r', token)
- return token.token
- except SocialToken.DoesNotExist:
- logger.warning('unable to find a social token for user: %r', user)
- return ''
-
- def update_content(self):
- content = None
- try:
- self.final_url = self.url
- if self.data_source.signature_key:
- # remove the hmac- prefix
- hash_algo = self.data_source.auth_mech[:5]
- self.final_url = signature.sign_url(self.final_url.encode('ascii'),
- self.data_source.signature_key.encode('utf-8'),
- algo=hash_algo)
- logger.debug('getting data source %r from url %r',
- self.data_source.name, self.final_url)
- headers = {
- 'Accept': self.data_source.mime_type,
- }
- if self.data_source.auth_mech == 'oauth2':
- headers['Authorization'] = 'Bearer %s' % self.get_access_token()
- request = requests.get(self.final_url, headers=headers,
- verify=self.data_source.verify_certificate,
- allow_redirects=self.data_source.allow_redirects,
- timeout=self.data_source.timeout)
- request.raise_for_status()
- except HTTPError:
- logger.warning('HTTP Error %s when loading datasource %s from'
- ' URL %s', request.status_code, self.data_source.id, self.final_url)
- except Timeout:
- logger.warning('HTTP Request timeout(%s s) when loading datasource'
- ' %s from URL %s', self.data_source.timeout,
- self.data_source.id, self.final_url)
- except RequestException:
- logger.warning('HTTP Request failed when loading datasource'
- ' %s from URL %s', self.data_source.id, self.final_url)
- else:
- try:
- content = getattr(self, 'get_content_'+self.kind)(request)
- except Exception:
- logger.exception('decoding of content from %s failed', self.final_url)
- else:
- logger.debug('getting data source %r from url %r finished',
- self.data_source.id, self.final_url)
- if self.refresh and content is not None:
- cache.set(self.key, (content, self.now+self.refresh), 3600)
- return content
-
-
- def get_content(self):
- if self.__content is not CACHE_SENTINEL:
- return self.__content
- self.__content, until = cache.get(self.key, (CACHE_SENTINEL, None))
- use_cache = self.__content is not CACHE_SENTINEL
- # do not use cache if refresh timeout is 0
- use_cache = use_cache and self.refresh > 0
- # do not use cache if updatecache is present in the query string
- use_cache = use_cache and 'updatecache' not in self.context['request'].GET
-
- if use_cache:
- if until < self.now:
- # reload cache content asynchronously in a thread
- # and return the current content
- logger.debug('content from %r is stale launching reloading', self.url)
- threading.Thread(target=self.update_content).start()
- else:
- self.__content = self.update_content()
- return self.__content
- content = property(get_content)
-
-
- def get_content_json(self, request):
- try:
- return request.json()
- except ValueError:
- logger.warning('unable to decode json content from %s: %r', self.final_url, request.content[:20])
- return None
-
- def get_content_rss(self, request):
- result = feedparser.parse(request.content)
- result.entries = sorted(result.entries, key=lambda e: e['updated_parsed'])[:self.limit]
- return result
-
- def get_content_html(self, request):
- return request.text
-
- def get_content_xml(self, request):
- try:
- return ET.fromstring(request.content)
- except ET.ParseError:
- logger.error('unable to parse the XML content %r', request.content)
- return None
-
-class RawInlineTemplatePlugin(CMSPluginBase):
- model = RawInlineTemplatePluginModel
- name = _('Raw Inline Template Plugin')
- render_template = "data_source_plugin/plugin.html"
- text_enabled = True
-
- def icon_src(self, instance):
- return settings.STATIC_URL + u"cms/images/plugins/link.png"
-
-class DataSourcePlugin(CMSPluginBase):
- model = DataSourcePluginModel
- name = _('Data Source Plugin')
- render_template = None
- text_enabled = True
-
- def get_sources(self, context, instance):
- request = context['request']
- for source in instance.sources.all():
- yield Data(source.source, context, instance.limit, instance.refresh, request=request)
-
- def render(self, context, instance, placeholder):
- logger.debug('getting context of data source plugin %s', instance.id)
- context['data_sources'] = list(self.get_sources(context, instance))
- logger.debug('finished getting context of data source plugin %s', instance.id)
- return context
-
-plugin_pool.register_plugin(RawInlineTemplatePlugin)
-plugin_pool.register_plugin(DataSourcePlugin)
diff --git a/portail_citoyen2/apps/data_source_plugin/locale/fr/LC_MESSAGES/django.po b/portail_citoyen2/apps/data_source_plugin/locale/fr/LC_MESSAGES/django.po
deleted file mode 100644
index 2254639..0000000
--- a/portail_citoyen2/apps/data_source_plugin/locale/fr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,110 +0,0 @@
-# Translation of portail-citoyen strings
-# Copyright (C) 2013 Entr'ouvert
-# This file is distributed under the same license as the portail-citoyen package.
-# Benjamin Dauvergne , 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: portail_citoyen2 0.1.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-13 16:06+0100\n"
-"PO-Revision-Date: 2013-11-13 16:07+0100\n"
-"Last-Translator: Benjamin Dauvergne \n"
-"Language: fr\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_plugins.py:124
-msgid "Raw Inline Template Plugin"
-msgstr "Plugin de contenu brut"
-
-#: cms_plugins.py:133
-msgid "Data Source Plugin"
-msgstr "Plugin source de donnée"
-
-#: models.py:25
-msgid "JSON"
-msgstr ""
-
-#: models.py:26
-msgid "RSS"
-msgstr ""
-
-#: models.py:27
-msgid "HTML"
-msgstr ""
-
-#: models.py:28
-msgid "XML"
-msgstr ""
-
-#: models.py:37
-msgid "Name"
-msgstr "Nom"
-
-#: models.py:38
-msgid "MIME Type"
-msgstr "Type MIME"
-
-#: models.py:40
-msgid "URL"
-msgstr ""
-
-#: models.py:42
-msgid "Hashing algorithm"
-msgstr "Algorithme de condensat"
-
-#: models.py:44
-msgid "Signature key"
-msgstr "Clé de signature"
-
-#: models.py:46
-msgid "verify certificate"
-msgstr "Vérifier les certificats"
-
-#: models.py:51
-msgid "You must choose a hashing algorithm if you set a signature key"
-msgstr "Vous devez choisir une algorithme de condensat si vous définissez une clé de signature"
-
-#: models.py:55
-msgid "Data source {name}, url: {url} mime-type: {mime_type}"
-msgstr "Source de donnée {name}, url: {url}, mime-type: {mime_type}"
-
-#: models.py:59
-msgid "Data source"
-msgstr "Source de données"
-
-#: models.py:60
-msgid "Data sources"
-msgstr "Sources de données"
-
-#: models.py:76
-msgid "Overloaded template"
-msgstr "Template surchargé"
-
-#: models.py:91 models.py:95
-msgid "Raw inline template plugin"
-msgstr "Plugin de contenu brut"
-
-#: models.py:92
-msgid "Raw inline template plugins"
-msgstr "Plugins de contenu brut"
-
-#: models.py:99
-msgid "Maximum entries"
-msgstr "Nombre maximum de lignes"
-
-#: models.py:100
-msgid "Refresh timeout"
-msgstr "Temps entre les rafraichissements des données"
-
-#: models.py:101
-msgid "Number of seconds between two web service calls"
-msgstr "Nombre de seconds entre deux appels à un web-service"
-
-#: models.py:108
-#, python-format
-msgid "DataSource with %d sources"
-msgstr "Plugin contenant %d sources"
diff --git a/portail_citoyen2/apps/data_source_plugin/migrations/0001_initial.py b/portail_citoyen2/apps/data_source_plugin/migrations/0001_initial.py
deleted file mode 100644
index d0ed8ee..0000000
--- a/portail_citoyen2/apps/data_source_plugin/migrations/0001_initial.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- 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 'DataSource'
- db.create_table(u'data_source_plugin_datasource', (
- (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=32)),
- ('mime_type', self.gf('django.db.models.fields.CharField')(max_length=256)),
- ('url', self.gf('django.db.models.fields.URLField')(max_length=1024)),
- ('hash_algo', self.gf('django.db.models.fields.CharField')(default='', max_length=16, blank=True)),
- ('signature_key', self.gf('django.db.models.fields.CharField')(default='', max_length=128, blank=True)),
- ('verify_certificate', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('allow_redirects', self.gf('django.db.models.fields.BooleanField')(default=True)),
- ('timeout', self.gf('django.db.models.fields.IntegerField')(default=10)),
- ))
- db.send_create_signal(u'data_source_plugin', ['DataSource'])
-
- # Adding model 'PluginDataSource'
- db.create_table(u'data_source_plugin_plugindatasource', (
- (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('source', self.gf('django.db.models.fields.related.ForeignKey')(related_name='plugins', to=orm['data_source_plugin.DataSource'])),
- ('plugin', self.gf('django.db.models.fields.related.ForeignKey')(related_name='sources', to=orm['data_source_plugin.DataSourcePlugin'])),
- ('order', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ))
- db.send_create_signal(u'data_source_plugin', ['PluginDataSource'])
-
- # Adding model 'RawInlineTemplatePlugin'
- db.create_table(u'data_source_plugin_rawinlinetemplateplugin', (
- (u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
- ('template_source', self.gf('django.db.models.fields.TextField')(default='', blank=True)),
- ))
- db.send_create_signal(u'data_source_plugin', ['RawInlineTemplatePlugin'])
-
- # Adding model 'DataSourcePlugin'
- db.create_table(u'data_source_plugin_datasourceplugin', (
- (u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
- ('template_source', self.gf('django.db.models.fields.TextField')(default='', blank=True)),
- ('limit', self.gf('django.db.models.fields.IntegerField')(default=10)),
- ('refresh', self.gf('django.db.models.fields.IntegerField')(default=60)),
- ))
- db.send_create_signal(u'data_source_plugin', ['DataSourcePlugin'])
-
-
- def backwards(self, orm):
- # Deleting model 'DataSource'
- db.delete_table(u'data_source_plugin_datasource')
-
- # Deleting model 'PluginDataSource'
- db.delete_table(u'data_source_plugin_plugindatasource')
-
- # Deleting model 'RawInlineTemplatePlugin'
- db.delete_table(u'data_source_plugin_rawinlinetemplateplugin')
-
- # Deleting model 'DataSourcePlugin'
- db.delete_table(u'data_source_plugin_datasourceplugin')
-
-
- models = {
- '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'data_source_plugin.datasource': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'DataSource'},
- 'allow_redirects': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'hash_algo': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'signature_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
- 'timeout': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '1024'}),
- 'verify_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
- },
- u'data_source_plugin.datasourceplugin': {
- 'Meta': {'object_name': 'DataSourcePlugin'},
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
- 'limit': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
- 'refresh': ('django.db.models.fields.IntegerField', [], {'default': '60'}),
- 'template_source': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'})
- },
- u'data_source_plugin.plugindatasource': {
- 'Meta': {'ordering': "('order', 'id')", 'object_name': 'PluginDataSource'},
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'plugin': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sources'", 'to': u"orm['data_source_plugin.DataSourcePlugin']"}),
- 'source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'plugins'", 'to': u"orm['data_source_plugin.DataSource']"})
- },
- u'data_source_plugin.rawinlinetemplateplugin': {
- 'Meta': {'object_name': 'RawInlineTemplatePlugin'},
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
- 'template_source': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'})
- }
- }
-
- complete_apps = ['data_source_plugin']
\ No newline at end of file
diff --git a/portail_citoyen2/apps/data_source_plugin/migrations/0002_rename_hash_algo.py b/portail_citoyen2/apps/data_source_plugin/migrations/0002_rename_hash_algo.py
deleted file mode 100644
index c89214d..0000000
--- a/portail_citoyen2/apps/data_source_plugin/migrations/0002_rename_hash_algo.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# -*- coding: utf-8 -*-
-from south.db import db
-from south.v2 import SchemaMigration
-
-
-class Migration(SchemaMigration):
- no_dry_run = True
-
- def forwards(self, orm):
- db.rename_column('data_source_plugin_datasource', 'hash_algo', 'auth_mech')
- for ds in orm.DataSource.objects.all():
- if ds.auth_mech.startswith('sha'):
- ds.auth_mech = 'hmac-' + ds.auth_mech
- ds.save()
-
- def backwards(self, orm):
- db.rename_column('data_source_plugin_datasource', 'auth_mech', 'hash_algo')
- for ds in orm.DataSource.objects.all():
- if ds.auth_mech.startswith('hmac-'):
- ds.auth_mech = ds.auth_mech[5:]
- ds.save()
- if ds.auth_mech == 'oauth2':
- ds.delete()
-
- models = {
- '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'data_source_plugin.datasource': {
- 'Meta': {'ordering': "('name',)", 'object_name': 'DataSource'},
- 'allow_redirects': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'auth_mech': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '16', 'blank': 'True'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'signature_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
- 'timeout': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '1024'}),
- 'verify_certificate': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
- },
- u'data_source_plugin.datasourceplugin': {
- 'Meta': {'object_name': 'DataSourcePlugin'},
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
- 'limit': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
- 'refresh': ('django.db.models.fields.IntegerField', [], {'default': '60'}),
- 'template_source': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'})
- },
- u'data_source_plugin.plugindatasource': {
- 'Meta': {'ordering': "('order', 'id')", 'object_name': 'PluginDataSource'},
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'plugin': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sources'", 'to': u"orm['data_source_plugin.DataSourcePlugin']"}),
- 'source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'plugins'", 'to': u"orm['data_source_plugin.DataSource']"})
- },
- u'data_source_plugin.rawinlinetemplateplugin': {
- 'Meta': {'object_name': 'RawInlineTemplatePlugin'},
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
- 'template_source': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'})
- }
- }
-
- complete_apps = ['data_source_plugin']
diff --git a/portail_citoyen2/apps/data_source_plugin/migrations/__init__.py b/portail_citoyen2/apps/data_source_plugin/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/data_source_plugin/models.py b/portail_citoyen2/apps/data_source_plugin/models.py
deleted file mode 100644
index 393c9dc..0000000
--- a/portail_citoyen2/apps/data_source_plugin/models.py
+++ /dev/null
@@ -1,115 +0,0 @@
-from django.template import Template
-from django.core.exceptions import ValidationError
-from django.template.base import TemplateSyntaxError
-from django.utils.translation import ugettext as _
-from django.db import models
-
-from cms.models import CMSPlugin
-
-__all__ = [ 'DataSource', 'PluginDataSource', 'DataSourcePlugin' ]
-
-def validate_template(value):
- try:
- Template(value)
- except TemplateSyntaxError, e:
- raise ValidationError(*e.args)
-
-
-class DataSource(models.Model):
- JSON = 'application/json'
- RSS = 'application/rss+xml'
- HTML = 'text/html'
- XML = 'text/xml'
-
- CHOICES = (
- (JSON, _('JSON')),
- (RSS, _('RSS')),
- (HTML, _('HTML')),
- (XML, _('XML')),
- )
-
- HASHES = (
- ('', 'None'),
- ('hmac-sha256', 'HMAC-SHA-256'),
- ('hmac-sha1', 'HMAC-SHA-1'),
- ('oauth2', 'OAuth2'),
- )
-
- name = models.CharField(verbose_name=_('Name'), max_length=32)
- mime_type = models.CharField(max_length=256, verbose_name=_('MIME Type'),
- choices=CHOICES)
- url = models.URLField(verbose_name=_('URL'), max_length=1024,
- validators=[validate_template])
- auth_mech = models.CharField(verbose_name=_('Authentication mechanism'),
- max_length=16, choices=HASHES, default='', blank=True)
- signature_key = models.CharField(verbose_name=_('Signature key'),
- max_length=128, default='', blank=True)
- verify_certificate = models.BooleanField(verbose_name=_('verify '
- 'certificate'), default=True, blank=True)
- allow_redirects = models.BooleanField(verbose_name=_('allows HTTP redirections'),
- help_text=_('it can improve latencies to forbid redirection follow'),
- default=True)
- timeout = models.IntegerField(verbose_name=_('timeout'),
- default=10,
- help_text=_('time in second to wait before '
- 'failing to download a datasource'))
-
- def clean(self):
- if self.signature_key and (not self.auth_mech or not self.auth_mech.startswith('hmac-')):
- raise ValidationError(_('You must choose a hashing algorithm if '
- 'you set a signature key'))
-
- def __unicode__(self):
- return _('Data source {name}, url: {url} mime-type: {mime_type}').format(
- name=self.name, mime_type=self.mime_type, url=self.url)
-
- class Meta:
- verbose_name = _('Data source')
- verbose_name_plural = _('Data sources')
- ordering = ('name',)
-
-
-class PluginDataSource(models.Model):
- source = models.ForeignKey('DataSource', related_name='plugins')
- plugin = models.ForeignKey('DataSourcePlugin', related_name='sources')
- order = models.IntegerField(default=0)
-
- def __unicode__(self):
- return unicode(self.source)
-
- class Meta:
- ordering = ('order', 'id')
-
-class InlineTemplatePlugin(CMSPlugin):
- template_source = models.TextField(verbose_name=_('Overloaded template'),
- blank=True, default='', validators=[validate_template])
-
- @property
- def render_template(self):
- return Template(self.template_source)
-
- class Meta:
- abstract = True
-
-
-class RawInlineTemplatePlugin(InlineTemplatePlugin):
- class Meta:
- verbose_name = _('Raw inline template plugin')
- verbose_name_plural = _('Raw inline template plugins')
-
- def __unicode__(self):
- return _('Raw inline template plugin')
-
-
-class DataSourcePlugin(InlineTemplatePlugin):
- limit = models.IntegerField(verbose_name=_('Maximum entries'), default=10)
- refresh = models.IntegerField(verbose_name=_('Refresh timeout'), default=60,
- help_text=_('Number of seconds between two web service calls'))
-
- def copy_relations(self, old_instance):
- for source in old_instance.sources.all():
- self.sources.create(source=source.source, order=source.order)
-
- def __unicode__(self):
- s = _('DataSource with %d sources') % self.sources.count()
- return s
diff --git a/portail_citoyen2/apps/data_source_plugin/signature.py b/portail_citoyen2/apps/data_source_plugin/signature.py
deleted file mode 100644
index 67e798b..0000000
--- a/portail_citoyen2/apps/data_source_plugin/signature.py
+++ /dev/null
@@ -1,71 +0,0 @@
-import datetime
-import base64
-import hmac
-import hashlib
-import urllib
-import random
-import urlparse
-
-'''Simple signature scheme for query strings'''
-
-def sign_url(url, key, algo='sha256', timestamp=None, nonce=None):
- parsed = urlparse.urlparse(url)
- new_query = sign_query(parsed.query, key, algo, timestamp, nonce)
- return urlparse.urlunparse(parsed[:4] + (new_query,) + parsed[5:])
-
-def sign_query(query, key, algo='sha256', timestamp=None, nonce=None):
- if timestamp is None:
- timestamp = datetime.datetime.utcnow()
- timestamp = timestamp.strftime('%Y-%m-%dT%H:%M:%SZ')
- if nonce is None:
- nonce = hex(random.getrandbits(128))[2:]
- new_query = query
- if new_query:
- new_query += '&'
- new_query += urllib.urlencode((
- ('algo', algo),
- ('timestamp', timestamp),
- ('nonce', nonce)))
- signature = base64.b64encode(sign_string(new_query, key, algo=algo))
- new_query += '&signature=' + urllib.quote(signature)
- return new_query
-
-def sign_string(s, key, algo='sha256', timedelta=30):
- digestmod = getattr(hashlib, algo)
- hash = hmac.HMAC(key, digestmod=digestmod, msg=s)
- return hash.digest()
-
-def check_url(url, key, known_nonce=None, timedelta=30):
- parsed = urlparse.urlparse(url, 'https')
- return check_query(parsed.query, key)
-
-def check_query(query, key, known_nonce=None, timedelta=30):
- parsed = urlparse.parse_qs(query)
- signature = base64.b64decode(parsed['signature'][0])
- algo = parsed['algo'][0]
- timestamp = parsed['timestamp'][0]
- timestamp = datetime.datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%SZ')
- nonce = parsed['nonce']
- unsigned_query = query.split('&signature=')[0]
- if known_nonce is not None and known_nonce(nonce):
- return False
- print 'timedelta', datetime.datetime.utcnow() - timestamp
- if abs(datetime.datetime.utcnow() - timestamp) > datetime.timedelta(seconds=timedelta):
- return False
- return check_string(unsigned_query, signature, key, algo=algo)
-
-def check_string(s, signature, key, algo='sha256'):
- # constant time compare
- signature2 = sign_string(s, key, algo=algo)
- if len(signature2) != len(signature):
- return False
- res = 0
- for a, b in zip(signature, signature2):
- res |= ord(a) ^ ord(b)
- return res == 0
-
-if __name__ == '__main__':
- test_key = '12345'
- signed_query = sign_query('NameId=_12345&orig=montpellier', test_key)
- assert check_query(signed_query, test_key, timedelta=0) is False
- assert check_query(signed_query, test_key) is True
diff --git a/portail_citoyen2/apps/data_source_plugin/templates/data_source_plugin/plugin.html b/portail_citoyen2/apps/data_source_plugin/templates/data_source_plugin/plugin.html
deleted file mode 100644
index ac8aaa7..0000000
--- a/portail_citoyen2/apps/data_source_plugin/templates/data_source_plugin/plugin.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% for source in data_sources %}
- {% if plugin.debug %}
-
- Url: {{ source.url }}
- Content:
-
- {{ source.content|pprint }}
-
-
- {% elif source.kind == 'rss' %}
- {% for entry in source.content.entries|dictsort:"updated_parsed" %}
- {{ entry.title }}
- {% endfor %}
- {% endif %}
-{% endfor %}
diff --git a/portail_citoyen2/apps/data_source_plugin/tests.py b/portail_citoyen2/apps/data_source_plugin/tests.py
deleted file mode 100644
index 501deb7..0000000
--- a/portail_citoyen2/apps/data_source_plugin/tests.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-This file demonstrates writing tests using the unittest module. These will pass
-when you run "manage.py test".
-
-Replace this with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-
-class SimpleTest(TestCase):
- def test_basic_addition(self):
- """
- Tests that 1 + 1 always equals 2.
- """
- self.assertEqual(1 + 1, 2)
diff --git a/portail_citoyen2/apps/data_source_plugin/views.py b/portail_citoyen2/apps/data_source_plugin/views.py
deleted file mode 100644
index 60f00ef..0000000
--- a/portail_citoyen2/apps/data_source_plugin/views.py
+++ /dev/null
@@ -1 +0,0 @@
-# Create your views here.
diff --git a/portail_citoyen2/apps/feed_plugin/__init__.py b/portail_citoyen2/apps/feed_plugin/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/feed_plugin/admin.py b/portail_citoyen2/apps/feed_plugin/admin.py
deleted file mode 100644
index ec21c06..0000000
--- a/portail_citoyen2/apps/feed_plugin/admin.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.contrib import admin
-
-from . import models
-
-class FeedAdmin(admin.ModelAdmin):
- list_display = [ 'name', 'url', 'color_hex', 'css_classes' ]
-
-admin.site.register(models.Feed, FeedAdmin)
diff --git a/portail_citoyen2/apps/feed_plugin/cms_plugins.py b/portail_citoyen2/apps/feed_plugin/cms_plugins.py
deleted file mode 100644
index 08722c7..0000000
--- a/portail_citoyen2/apps/feed_plugin/cms_plugins.py
+++ /dev/null
@@ -1,75 +0,0 @@
-import logging
-
-from django.utils.translation import ugettext_lazy as _
-
-
-from cms.plugin_base import CMSPluginBase
-from cms.plugin_pool import plugin_pool
-
-from . import models
-from . import forms
-
-
-logger = logging.getLogger(__name__)
-
-
-class SelectUserFeedPlugin(CMSPluginBase):
- model = models.SelectUserFeed
- name = _('select user feeds')
- render_template = 'feed_plugin/select_user_feed.html'
- text_enabled = True
-
- def render(self, context, instance, placeholder):
- request = context['request']
- user = request.user
- submit = 'select-user-feed-plugin-%s' % instance.id
- if request.method == 'POST' and submit in request.POST:
- form = forms.FeedForm(data=request.POST)
- if form.is_valid():
- models.FeedPreference.objects.filter(user=user).delete()
- for feed in form.cleaned_data['feeds']:
- models.FeedPreference.objects.get_or_create(
- user=user, feed=feed)
- else:
- initial = dict(feeds=models.FeedPreference.objects.filter(user=user)
- .values_list('feed_id', flat=True))
- form = forms.FeedForm(initial=initial)
- context.update(dict(form=form, submit=submit))
- return context
-
-class ShowUserFeedPlugin(CMSPluginBase):
- model = models.ShowUserFeed
- name = _('show user feeds')
- render_template = 'feed_plugin/show_user_feed.html'
- text_enabled = True
-
- def get_feeds(self, instance, user):
- entries = []
- feeds = models.Feed.objects.filter(feedpreference__user=user) \
- .order_by('id')
- for feed in feeds:
- feed_entries = feed.get_feed_entries(instance.limit,
- instance.timeout)
- if feed_entries:
- for date, title, link in feed_entries:
- entries.append((date, title, link, feed))
- entries.sort(reverse=True)
- entries = entries[:instance.limit]
- entries = [{
- 'title': title,
- 'link': link,
- 'feed_name': feed.name,
- 'color_hex': feed.color_hex,
- 'css_classes': feed.css_classes
- } for date, title, link, feed in entries]
- return entries
-
- def render(self, context, instance, placeholder):
- request = context['request']
- entries = self.get_feeds(instance, request.user)
- context.update({'entries': entries})
- return context
-
-
-plugin_pool.register_plugin(SelectUserFeedPlugin)
-plugin_pool.register_plugin(ShowUserFeedPlugin)
diff --git a/portail_citoyen2/apps/feed_plugin/forms.py b/portail_citoyen2/apps/feed_plugin/forms.py
deleted file mode 100644
index 5506fd4..0000000
--- a/portail_citoyen2/apps/feed_plugin/forms.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from django import forms
-from django.utils.translation import ugettext as _
-
-from . import models
-from . import widgets
-
-class FeedForm(forms.Form):
- feeds = forms.ModelMultipleChoiceField(queryset=models.Feed.objects.all(),
- label=_('Your feeds'), widget=widgets.CheckboxMultipleSelect,
- required=False)
diff --git a/portail_citoyen2/apps/feed_plugin/locale/fr/LC_MESSAGES/django.po b/portail_citoyen2/apps/feed_plugin/locale/fr/LC_MESSAGES/django.po
deleted file mode 100644
index c600a5f..0000000
--- a/portail_citoyen2/apps/feed_plugin/locale/fr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,59 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-07-24 23:01+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#: cms_plugins.py:18
-msgid "select user feeds"
-msgstr "Choisir ses flux"
-
-#: cms_plugins.py:42
-msgid "show user feeds"
-msgstr "Afficher les flux de l'utilisateur"
-
-#: forms.py:8
-msgid "Your feeds"
-msgstr "Vos flux"
-
-#: models.py:11
-msgid "user feed subscription"
-msgstr "abonnement à un flux RSS"
-
-#: models.py:12
-msgid "user feed subscriptions"
-msgstr "abonnements aux flux RSS"
-
-#: models.py:22
-msgid "name"
-msgstr "nom"
-
-#: models.py:24
-msgid "CSS classes"
-msgstr "classe CSS"
-
-#: models.py:27
-msgid "feed"
-msgstr "flux"
-
-#: models.py:28
-msgid "feeds"
-msgstr "flux"
-
-#: templates/feed_plugin/select_user_feed.html:5
-msgid "Validate"
-msgstr "Valider"
diff --git a/portail_citoyen2/apps/feed_plugin/migrations/0001_initial.py b/portail_citoyen2/apps/feed_plugin/migrations/0001_initial.py
deleted file mode 100644
index a521dc6..0000000
--- a/portail_citoyen2/apps/feed_plugin/migrations/0001_initial.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# -*- 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 'FeedPreference'
- db.create_table(u'feed_plugin_feedpreference', (
- (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
- ('feed', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['feed_plugin.Feed'])),
- ))
- db.send_create_signal(u'feed_plugin', ['FeedPreference'])
-
- # Adding model 'SelectUserFeed'
- db.create_table(u'feed_plugin_selectuserfeed', (
- (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'feed_plugin', ['SelectUserFeed'])
-
- # Adding model 'ShowUserFeed'
- db.create_table(u'feed_plugin_showuserfeed', (
- (u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
- ('limit', self.gf('django.db.models.fields.PositiveIntegerField')(default=10)),
- ('timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=60)),
- ))
- db.send_create_signal(u'feed_plugin', ['ShowUserFeed'])
-
- # Adding model 'Feed'
- db.create_table(u'feed_plugin_feed', (
- (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=32)),
- ('url', self.gf('django.db.models.fields.URLField')(max_length=200)),
- ('color_hex', self.gf('django.db.models.fields.CharField')(max_length=6, blank=True)),
- ('css_classes', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)),
- ))
- db.send_create_signal(u'feed_plugin', ['Feed'])
-
-
- def backwards(self, orm):
- # Deleting model 'FeedPreference'
- db.delete_table(u'feed_plugin_feedpreference')
-
- # Deleting model 'SelectUserFeed'
- db.delete_table(u'feed_plugin_selectuserfeed')
-
- # Deleting model 'ShowUserFeed'
- db.delete_table(u'feed_plugin_showuserfeed')
-
- # Deleting model 'Feed'
- db.delete_table(u'feed_plugin_feed')
-
-
- models = {
- 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'})
- },
- u'feed_plugin.feed': {
- 'Meta': {'object_name': 'Feed'},
- 'color_hex': ('django.db.models.fields.CharField', [], {'max_length': '6', 'blank': 'True'}),
- 'css_classes': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
- },
- u'feed_plugin.feedpreference': {
- 'Meta': {'object_name': 'FeedPreference'},
- 'feed': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['feed_plugin.Feed']"}),
- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
- },
- u'feed_plugin.selectuserfeed': {
- 'Meta': {'object_name': 'SelectUserFeed', '_ormbases': ['cms.CMSPlugin']},
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'})
- },
- u'feed_plugin.showuserfeed': {
- 'Meta': {'object_name': 'ShowUserFeed', '_ormbases': ['cms.CMSPlugin']},
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
- 'limit': ('django.db.models.fields.PositiveIntegerField', [], {'default': '10'}),
- 'timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '60'})
- }
- }
-
- complete_apps = ['feed_plugin']
\ No newline at end of file
diff --git a/portail_citoyen2/apps/feed_plugin/migrations/__init__.py b/portail_citoyen2/apps/feed_plugin/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/feed_plugin/models.py b/portail_citoyen2/apps/feed_plugin/models.py
deleted file mode 100644
index ad784fc..0000000
--- a/portail_citoyen2/apps/feed_plugin/models.py
+++ /dev/null
@@ -1,90 +0,0 @@
-import hashlib
-import datetime
-import logging
-
-from django.db import models
-from django.conf import settings
-from django.utils.translation import ugettext_lazy as _
-from django.utils.html import strip_tags
-from django.core.cache import cache
-
-import feedparser
-
-from cms.models import CMSPlugin
-
-from . import utils
-
-logger = logging.getLogger(__name__)
-
-class FeedPreference(models.Model):
- user = models.ForeignKey(settings.AUTH_USER_MODEL)
- feed = models.ForeignKey('Feed')
-
- class Meta:
- verbose_name = _('user feed subscription')
- verbose_name_plural = _('user feed subscriptions')
-
-class SelectUserFeed(CMSPlugin):
- pass
-
-class ShowUserFeed(CMSPlugin):
- limit = models.PositiveIntegerField(default=10)
- timeout = models.PositiveIntegerField(default=60)
-
-class Feed(models.Model):
- name = models.CharField(max_length=32, verbose_name=_('name'))
- url = models.URLField()
- color_hex = models.CharField(max_length=6,
- verbose_name=_('Color'),
- help_text=_('as an hexadecimal number'),
- blank=True)
- css_classes = models.CharField(max_length=128,
- verbose_name=_('CSS classes'),
- blank=True)
-
- def load(self, now=None, limit=9999):
- if now is None:
- now = datetime.datetime.utcnow()
- feed = feedparser.parse(self.url)
- key = self.cache_key()
- entries = []
- for entry in feed.entries:
- for attribute in ('published_parsed', 'updated_parsed',
- 'created_parsed', 'expired_parsed'):
- date = getattr(entry, attribute, None)
- if date is not None:
- break
- if date is None:
- continue
- title = strip_tags(entry.title.strip())
- if not title:
- title = strip_tags(entry.description.strip())
- title = ' '.join(title.split(' ')[:30])
- if not title:
- continue
- entries.append((date, title, entry.link))
- entries.sort(reverse=True)
- entries = entries[:limit]
- cache.set(key, (entries, now))
- duration = datetime.datetime.utcnow()-now
- logger.debug('loaded RSS feed %r in %s seconds', self.url, duration.seconds)
- return entries
-
- def cache_key(self):
- return hashlib.md5(self.url).hexdigest()
-
- def get_feed_entries(self, limit=10, timeout=3600):
- key = self.cache_key()
- now = datetime.datetime.utcnow()
- entries, stamp = cache.get(key, (None, None))
- if entries is None or now-stamp > datetime.timedelta(seconds=timeout):
- utils.launch_in_thread(key, self.load, now, limit)
- return entries
-
-
- class Meta:
- verbose_name = _('feed')
- verbose_name_plural = _('feeds')
-
- def __unicode__(self):
- return self.name
diff --git a/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/select_user_feed.html b/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/select_user_feed.html
deleted file mode 100644
index 41ec1aa..0000000
--- a/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/select_user_feed.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% load i18n %}
-
diff --git a/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/show_user_feed.html b/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/show_user_feed.html
deleted file mode 100644
index e13c21b..0000000
--- a/portail_citoyen2/apps/feed_plugin/templates/feed_plugin/show_user_feed.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/portail_citoyen2/apps/feed_plugin/utils.py b/portail_citoyen2/apps/feed_plugin/utils.py
deleted file mode 100644
index f6f37e0..0000000
--- a/portail_citoyen2/apps/feed_plugin/utils.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import logging
-import threading
-
-
-from django.core.cache import cache
-
-logger = logging.getLogger(__name__)
-
-def launch_in_thread(key, function, *args, **kwargs):
- '''Launch a function in a thread, prevent launching the same function many times using a lock'''
- key = 'thread-' + key
- created = cache.add(key, 1)
- if created:
- logger.debug('launching thread for %s', key)
- def f():
- try:
- function(*args, **kwargs)
- finally:
- cache.delete(key)
- thread = threading.Thread(target=f)
- thread.start()
-
-
diff --git a/portail_citoyen2/apps/feed_plugin/widgets.py b/portail_citoyen2/apps/feed_plugin/widgets.py
deleted file mode 100644
index 30a7262..0000000
--- a/portail_citoyen2/apps/feed_plugin/widgets.py
+++ /dev/null
@@ -1,104 +0,0 @@
-from itertools import chain
-
-from django.forms.widgets import SubWidget, SelectMultiple
-from django.forms.util import flatatt
-from django.utils.html import conditional_escape
-from django.utils.encoding import StrAndUnicode, force_unicode
-from django.utils.safestring import mark_safe
-
-class CheckboxInput(SubWidget):
- """
- An object used by CheckboxRenderer that represents a single
- .
- """
- def __init__(self, name, value, attrs, choice, index):
- self.name, self.value = name, value
- self.attrs = attrs
- self.choice_value = force_unicode(choice[0])
- self.choice_label = force_unicode(choice[1])
- self.index = index
-
- def __unicode__(self):
- return self.render()
-
- def render(self, name=None, value=None, attrs=None, choices=()):
- name = name or self.name
- value = value or self.value
- attrs = attrs or self.attrs
-
- if 'id' in self.attrs:
- label_for = ' for="%s_%s"' % (self.attrs['id'], self.index)
- else:
- label_for = ''
- choice_label = conditional_escape(force_unicode(self.choice_label))
- return mark_safe(u'%s %s ' % (label_for, self.tag(), choice_label))
-
- def is_checked(self):
- return self.choice_value in self.value
-
- def tag(self):
- if 'id' in self.attrs:
- self.attrs['id'] = '%s_%s' % (self.attrs['id'], self.index)
- final_attrs = dict(self.attrs, type='checkbox', name=self.name, value=self.choice_value)
- if self.is_checked():
- final_attrs['checked'] = 'checked'
- return mark_safe(u' ' % flatatt(final_attrs))
-
-class CheckboxRenderer(StrAndUnicode):
- def __init__(self, name, value, attrs, choices):
- self.name, self.value, self.attrs = name, value, attrs
- self.choices = choices
-
- def __iter__(self):
- for i, choice in enumerate(self.choices):
- yield CheckboxInput(self.name, self.value, self.attrs.copy(), choice, i)
-
- def __getitem__(self, idx):
- choice = self.choices[idx] # Let the IndexError propogate
- return CheckboxInput(self.name, self.value, self.attrs.copy(), choice, idx)
-
- def __unicode__(self):
- return self.render()
-
- def render(self):
- """Outputs a for this set of checkbox fields."""
- return mark_safe(u'' % u'\n'.join([u'%s '
- % force_unicode(w) for w in self]))
-
-class CheckboxMultipleSelect(SelectMultiple):
- """
- Checkbox multi select field that enables iteration of each checkbox
- Similar to django.forms.widgets.RadioSelect
- """
- renderer = CheckboxRenderer
-
- def __init__(self, *args, **kwargs):
- # Override the default renderer if we were passed one.
- renderer = kwargs.pop('renderer', None)
- if renderer:
- self.renderer = renderer
- super(CheckboxMultipleSelect, self).__init__(*args, **kwargs)
-
- def subwidgets(self, name, value, attrs=None, choices=()):
- for widget in self.get_renderer(name, value, attrs, choices):
- yield widget
-
- def get_renderer(self, name, value, attrs=None, choices=()):
- """Returns an instance of the renderer."""
- if value is None: value = ''
- str_values = set([force_unicode(v) for v in value]) # Normalize to string.
- if attrs is None:
- attrs = {}
- if 'id' not in attrs:
- attrs['id'] = name
- final_attrs = self.build_attrs(attrs)
- choices = list(chain(self.choices, choices))
- return self.renderer(name, str_values, final_attrs, choices)
-
- def render(self, name, value, attrs=None, choices=()):
- return self.get_renderer(name, value, attrs, choices).render()
-
- def id_for_label(self, id_):
- if id_:
- id_ += '_0'
- return id_
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/__init__.py b/portail_citoyen2/apps/passerelle_register_plugin/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/cms_plugins.py b/portail_citoyen2/apps/passerelle_register_plugin/cms_plugins.py
deleted file mode 100644
index 863c8a1..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/cms_plugins.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.utils.translation import ugettext_lazy as _
-
-
-from cms.plugin_pool import plugin_pool
-
-
-from portail_citoyen2.cms_plugins import FormPluginBase
-from . import models, forms
-
-
-class PasserelleRegisterPlugin(FormPluginBase):
- model = models.PasserelleRegisterPlugin
- name = _('passerelle register plugin')
- render_template = 'passerelle_register_plugin/plugin.html'
- text_enabled = True
- no_cancel_button = False
- form_class = forms.PasserelleRegisterForm
-
-
-plugin_pool.register_plugin(PasserelleRegisterPlugin)
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/forms.py b/portail_citoyen2/apps/passerelle_register_plugin/forms.py
deleted file mode 100644
index e4f9d9e..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/forms.py
+++ /dev/null
@@ -1,58 +0,0 @@
-import logging
-
-
-from django import forms
-
-
-import widgets
-
-logger = logging.getLogger(__name__)
-
-class PasserelleRegisterForm(forms.Form):
- def __init__(self, *args, **kwargs):
- self.request = kwargs.pop('request')
- self.user = self.request.user
- instance = self.instance = kwargs.pop('plugin_instance')
- try:
- subscriptions = self.subscriptions = self.instance.get_subscriptions(user=self.user.email)
- except:
- subscriptions = self.subscriptions = []
- logger.warning('unable to retrieve subscriptions for %r: %r',
- self.user, self.user.email, exc_info=True)
- super(PasserelleRegisterForm, self).__init__(*args, **kwargs)
- self.all_choices = set()
- for subscription in subscriptions:
- if not instance.check_ressource(subscription['name']):
- continue
- choices = []
- initial = []
- for transport in subscription['transports']['available']:
- if not instance.check_transport(transport):
- continue
- self.all_choices.add(transport)
- choices.append((transport, transport))
- if transport in subscription['transports']['defined']:
- initial.append(transport)
- self.fields[instance.simplify(subscription['name'])] = \
- forms.MultipleChoiceField(label=subscription['description'],
- choices=choices, initial=initial,
- widget=widgets.CheckboxMultipleSelect,
- required=False)
- __init__.need_request = True
- __init__.need_plugin_instance = True
-
-
- def save(self):
- cleaned_data = self.cleaned_data
- subscriptions = []
- for key, value in cleaned_data.iteritems():
- subscriptions.append({
- 'name': key,
- 'transports': value
- })
- try:
- self.instance.set_subscriptions(subscriptions, user=self.user.email)
- except:
- subscriptions = self.subscriptions = []
- logger.warning('unable to save subscriptions for %r: %r',
- self.user, self.user.email, exc_info=True)
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/locale/fr/LC_MESSAGES/django.po b/portail_citoyen2/apps/passerelle_register_plugin/locale/fr/LC_MESSAGES/django.po
deleted file mode 100644
index 1dfb7a4..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/locale/fr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,43 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-10 15:01+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#: cms_plugins.py:36
-msgid "passerelle register plugin"
-msgstr "Plugin de gestion d'abonnements"
-
-#: models.py:20
-msgid "passerelle url"
-msgstr "URL du service d'abonnement"
-
-#: models.py:22
-msgid "ressources restrictions"
-msgstr "Restriction sur les ressources ouvertes aux abonnements"
-
-#: models.py:23
-msgid "transports restrictions"
-msgstr "Restriction sur les modes d'envoi"
-
-#: templates/passerelle_register_plugin/plugin.html:14
-msgid "Name"
-msgstr "Nom"
-
-#: templates/passerelle_register_plugin/plugin.html:37
-msgid "Validate"
-msgstr "Valider"
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/migrations/0001_initial.py b/portail_citoyen2/apps/passerelle_register_plugin/migrations/0001_initial.py
deleted file mode 100644
index c5892f3..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/migrations/0001_initial.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- 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 'PasserelleRegisterPlugin'
- db.create_table(u'passerelle_register_plugin_passerelleregisterplugin', (
- (u'cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
- ('passerelle_url', self.gf('django.db.models.fields.URLField')(max_length=128)),
- ('ressources_restrictions', self.gf('django.db.models.fields.TextField')(blank=True)),
- ('transports_restrictions', self.gf('django.db.models.fields.TextField')(blank=True)),
- ))
- db.send_create_signal(u'passerelle_register_plugin', ['PasserelleRegisterPlugin'])
-
-
- def backwards(self, orm):
- # Deleting model 'PasserelleRegisterPlugin'
- db.delete_table(u'passerelle_register_plugin_passerelleregisterplugin')
-
-
- models = {
- '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'passerelle_register_plugin.passerelleregisterplugin': {
- 'Meta': {'object_name': 'PasserelleRegisterPlugin', '_ormbases': ['cms.CMSPlugin']},
- u'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
- 'passerelle_url': ('django.db.models.fields.URLField', [], {'max_length': '128'}),
- 'ressources_restrictions': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
- 'transports_restrictions': ('django.db.models.fields.TextField', [], {'blank': 'True'})
- }
- }
-
- complete_apps = ['passerelle_register_plugin']
\ No newline at end of file
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/migrations/__init__.py b/portail_citoyen2/apps/passerelle_register_plugin/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/models.py b/portail_citoyen2/apps/passerelle_register_plugin/models.py
deleted file mode 100644
index 4eb75f6..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/models.py
+++ /dev/null
@@ -1,122 +0,0 @@
-import requests
-import requests.exceptions
-import logging
-import json
-
-
-from django.db import models
-from django.utils.translation import ugettext as _
-from django.template.defaultfilters import slugify
-from django.core.cache import cache
-
-
-from cms.models import CMSPlugin
-
-
-logger = logging.getLogger(__name__)
-
-
-class PasserelleRegisterPlugin(CMSPlugin):
- passerelle_url = models.URLField(verbose_name=_('passerelle url'),
- max_length=128)
- ressources_restrictions = models.TextField(verbose_name=_('ressources restrictions'), blank=True)
- transports_restrictions = models.TextField(verbose_name=_('transports restrictions'), blank=True)
-
- __ressources_restrictions = None
- __transports_restrictions = None
-
- def simplify(self, name):
- return slugify(name.strip())
-
- def get_ressources_restrictions(self):
- if self.__ressources_restrictions is None:
- self.__ressources_restrictions = []
- for name in filter(None, map(self.simplify, self.ressources_restrictions.strip().split(','))):
- self.__ressources_restrictions.append(name)
- return self.__ressources_restrictions
-
- def get_transports_restrictions(self):
- if self.__transports_restrictions is None:
- self.__transports_restrictions = []
- for name in filter(None, map(self.simplify, self.transports_restrictions.strip().split(','))):
- self.__transports_restrictions.append(name)
- return self.__transports_restrictions
-
-
- def check_ressource(self, ressource):
- restrictions = self.get_ressources_restrictions()
- if restrictions and self.simplify(ressource) not in restrictions:
- return False
- return True
-
- def check_transport(self, transport):
- restrictions = self.get_transports_restrictions()
- if restrictions and self.simplify(transport) not in restrictions:
- return False
- return True
-
- def key(self, **kwargs):
- return 'passerelle_register_subscriptions_'+slugify(self.passerelle_url+repr(sorted(kwargs.iteritems())))
-
- def get_subscriptions(self, **kwargs):
- key = self.key(**kwargs)
- early_response = cache.get(key)
- if early_response is not None:
- logger.debug('got subscriptions from cache')
- return early_response
- http_response = requests.get(self.passerelle_url, params=kwargs)
- json_response = http_response.json()
- if json_response['err'] == 0:
- logger.debug('got subscriptions from %s: %r', self.passerelle_url,
- json_response['data'])
- cache.set(key, json_response['data'])
- return json_response['data']
- else:
- logger.error('got subscriptions from %(url)s failed: %(json)r',
- { 'url': self.passerelle_url,
- 'json': json_response })
- return []
-
- def set_subscriptions(self, subscriptions, **kwargs):
- old_subscriptions = self.get_subscriptions(**kwargs)
- index = {}
- for subscription in subscriptions:
- index[subscription['name']] = subscription
- post = []
- for subscription in old_subscriptions:
- new_defined = set(subscription['transports']['defined'])
- if self.simplify(subscription['name']) in index:
- new_subscription = index[subscription['name']]
- for transport in subscription['transports']['available']:
- stransport = self.simplify(transport)
- if self.check_transport(transport):
- if stransport in new_subscription['transports']:
- new_defined.add(transport)
- else:
- new_defined.discard(transport)
- post.append(dict(name=subscription['name'],
- transports=list(new_defined)))
- headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
- try:
- response = requests.post(self.passerelle_url, params=kwargs,
- data=json.dumps(post), headers=headers)
- response.raise_for_status()
- except requests.exceptions.HTTPError:
- logger.error(u'set subscriptions on %s returned an HTTP error code: %s',
- response.request.url, response.status_code)
- except requests.exceptions.RequestException, e:
- logger.error(u'set subscriptions on %s failed with exception: %s',
- response.request.url, e)
- else:
- logger.debug(u'set subscriptions on %s: post %r', response.request.url,
- post)
- logger.debug(u'set subscriptions on %s: response %r',
- response.request.url, response.content)
- cache.delete(self.key(**kwargs))
- if response.json()['err'] != 0:
- logger.error(u'set subscriptions on %s returned an error: %r',
- response.request.url, response.json())
-
-
- def __unicode__(self):
- return u'' % self.passerelle_url
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/templates/passerelle_register_plugin/plugin.html b/portail_citoyen2/apps/passerelle_register_plugin/templates/passerelle_register_plugin/plugin.html
deleted file mode 100644
index 817aeb6..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/templates/passerelle_register_plugin/plugin.html
+++ /dev/null
@@ -1,39 +0,0 @@
-{% load i18n %}
-
-
- {{ form.non_field_errors }}
- {% for field in form %}
- {{ field.errors }}
- {% endfor %}
-
-
-
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/tests.py b/portail_citoyen2/apps/passerelle_register_plugin/tests.py
deleted file mode 100644
index 501deb7..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/tests.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-This file demonstrates writing tests using the unittest module. These will pass
-when you run "manage.py test".
-
-Replace this with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-
-class SimpleTest(TestCase):
- def test_basic_addition(self):
- """
- Tests that 1 + 1 always equals 2.
- """
- self.assertEqual(1 + 1, 2)
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/views.py b/portail_citoyen2/apps/passerelle_register_plugin/views.py
deleted file mode 100644
index 60f00ef..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/views.py
+++ /dev/null
@@ -1 +0,0 @@
-# Create your views here.
diff --git a/portail_citoyen2/apps/passerelle_register_plugin/widgets.py b/portail_citoyen2/apps/passerelle_register_plugin/widgets.py
deleted file mode 100644
index 30a7262..0000000
--- a/portail_citoyen2/apps/passerelle_register_plugin/widgets.py
+++ /dev/null
@@ -1,104 +0,0 @@
-from itertools import chain
-
-from django.forms.widgets import SubWidget, SelectMultiple
-from django.forms.util import flatatt
-from django.utils.html import conditional_escape
-from django.utils.encoding import StrAndUnicode, force_unicode
-from django.utils.safestring import mark_safe
-
-class CheckboxInput(SubWidget):
- """
- An object used by CheckboxRenderer that represents a single
- .
- """
- def __init__(self, name, value, attrs, choice, index):
- self.name, self.value = name, value
- self.attrs = attrs
- self.choice_value = force_unicode(choice[0])
- self.choice_label = force_unicode(choice[1])
- self.index = index
-
- def __unicode__(self):
- return self.render()
-
- def render(self, name=None, value=None, attrs=None, choices=()):
- name = name or self.name
- value = value or self.value
- attrs = attrs or self.attrs
-
- if 'id' in self.attrs:
- label_for = ' for="%s_%s"' % (self.attrs['id'], self.index)
- else:
- label_for = ''
- choice_label = conditional_escape(force_unicode(self.choice_label))
- return mark_safe(u'%s %s ' % (label_for, self.tag(), choice_label))
-
- def is_checked(self):
- return self.choice_value in self.value
-
- def tag(self):
- if 'id' in self.attrs:
- self.attrs['id'] = '%s_%s' % (self.attrs['id'], self.index)
- final_attrs = dict(self.attrs, type='checkbox', name=self.name, value=self.choice_value)
- if self.is_checked():
- final_attrs['checked'] = 'checked'
- return mark_safe(u' ' % flatatt(final_attrs))
-
-class CheckboxRenderer(StrAndUnicode):
- def __init__(self, name, value, attrs, choices):
- self.name, self.value, self.attrs = name, value, attrs
- self.choices = choices
-
- def __iter__(self):
- for i, choice in enumerate(self.choices):
- yield CheckboxInput(self.name, self.value, self.attrs.copy(), choice, i)
-
- def __getitem__(self, idx):
- choice = self.choices[idx] # Let the IndexError propogate
- return CheckboxInput(self.name, self.value, self.attrs.copy(), choice, idx)
-
- def __unicode__(self):
- return self.render()
-
- def render(self):
- """Outputs a for this set of checkbox fields."""
- return mark_safe(u'' % u'\n'.join([u'%s '
- % force_unicode(w) for w in self]))
-
-class CheckboxMultipleSelect(SelectMultiple):
- """
- Checkbox multi select field that enables iteration of each checkbox
- Similar to django.forms.widgets.RadioSelect
- """
- renderer = CheckboxRenderer
-
- def __init__(self, *args, **kwargs):
- # Override the default renderer if we were passed one.
- renderer = kwargs.pop('renderer', None)
- if renderer:
- self.renderer = renderer
- super(CheckboxMultipleSelect, self).__init__(*args, **kwargs)
-
- def subwidgets(self, name, value, attrs=None, choices=()):
- for widget in self.get_renderer(name, value, attrs, choices):
- yield widget
-
- def get_renderer(self, name, value, attrs=None, choices=()):
- """Returns an instance of the renderer."""
- if value is None: value = ''
- str_values = set([force_unicode(v) for v in value]) # Normalize to string.
- if attrs is None:
- attrs = {}
- if 'id' not in attrs:
- attrs['id'] = name
- final_attrs = self.build_attrs(attrs)
- choices = list(chain(self.choices, choices))
- return self.renderer(name, str_values, final_attrs, choices)
-
- def render(self, name, value, attrs=None, choices=()):
- return self.get_renderer(name, value, attrs, choices).render()
-
- def id_for_label(self, id_):
- if id_:
- id_ += '_0'
- return id_
diff --git a/portail_citoyen2/cms_plugins.py b/portail_citoyen2/cms_plugins.py
deleted file mode 100644
index 10c5776..0000000
--- a/portail_citoyen2/cms_plugins.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from django.utils.translation import ugettext as _
-from django.core.exceptions import ImproperlyConfigured
-from django.forms import ModelForm
-
-
-from cms.plugin_base import CMSPluginBase
-
-from . import utils
-
-class FormPluginBase(CMSPluginBase):
- form_class = None
- no_cancel_button = True
- submit_text = None
- add_form_prefix = True
- cache = False
-
- def get_form_class(self, request, context, instance, placeholder):
- return self.form_class
-
- def render(self, context, instance, placeholder):
- request = context['request']
- class_name = self.__class__.__name__.lower()
- context['submit_name'] = submit = 'submit-{class_name}-{instance_id}'.format(
- class_name=class_name,
- instance_id=instance.id)
- context['submit_value'] = self.submit_text or _('Modify')
- context['instance'] = instance
- context['no_cancel_button'] = self.no_cancel_button
- kwargs = {}
- if self.add_form_prefix:
- kwargs['prefix'] = class_name
- form_class = self.get_form_class(request, context, instance,
- placeholder)
- if issubclass(form_class, ModelForm):
- if not hasattr(self, 'get_object'):
- raise ImproperlyConfigured('Your plugin class is missing a get_object method but use a ModelForm')
- kwargs['instance'] = context['object'] = self.get_object(request, context, instance, placeholder)
- if utils.callable_has_arg(form_class.__init__, 'plugin_instance'):
- kwargs['plugin_instance'] = instance
- if utils.callable_has_arg(form_class.__init__, 'request'):
- kwargs['request'] = request
- if request.method == 'POST' and submit in request.POST:
- form = form_class(data=request.POST, **kwargs)
- if form.is_valid():
- form.save()
- else:
- form = form_class(**kwargs)
- context['form'] = form
- return context
diff --git a/portail_citoyen2/context_processors.py b/portail_citoyen2/context_processors.py
deleted file mode 100644
index b363983..0000000
--- a/portail_citoyen2/context_processors.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from . import app_settings
-
-def template_vars(request):
- ctx = app_settings.TEMPLATE_VARS.copy()
- if app_settings.PORTAIL_ADMIN_URL:
- ctx['PORTAIL_ADMIN_URL'] = app_settings.PORTAIL_ADMIN_URL
- return ctx
diff --git a/portail_citoyen2/dashboard.py b/portail_citoyen2/dashboard.py
deleted file mode 100644
index fae5d41..0000000
--- a/portail_citoyen2/dashboard.py
+++ /dev/null
@@ -1,73 +0,0 @@
-from django.utils.translation import ugettext_lazy as _
-from admin_tools.dashboard import modules, Dashboard, AppIndexDashboard
-
-
-class CustomIndexDashboard(Dashboard):
- """
- Custom index dashboard for Compte Orleans
- """
- def init_with_context(self, context):
- # append an app list module for "Applications"
- self.children.append(modules.ModelList(
- _('Contents'),
- models=(
- 'cms.models.pagemodel.Page',
- 'data_source_plugin.models.DataSource',
- 'feed_plugin.models.Feed',
- ),
- ))
-
- self.children.append(modules.ModelList(
- _('Announces'),
- models=(
- 'portail_citoyen_announces.*',
- ),
- ))
-
- # append a recent actions module
- self.children.append(modules.RecentActions(_('Recent Actions'), 5))
-
- # append another link list module for "support".
- self.children.append(modules.LinkList(
- _('Support'),
- children=[
- {
- 'title': _('Project site'),
- 'url': 'https://dev.entrouvert.org/projects/portail-citoyen/',
- 'external': True,
- },
- {
- 'title': _('Report a bug'),
- 'url': 'https://dev.entrouvert.org/projects/portail-citoyen/issues/new',
- 'external': True,
- },
- ]
- ))
-
-
-class CustomAppIndexDashboard(AppIndexDashboard):
- """
- Custom app index dashboard for Compte Orleans
- """
-
- # we disable title because its redundant with the model list module
- title = ''
-
- def __init__(self, *args, **kwargs):
- AppIndexDashboard.__init__(self, *args, **kwargs)
-
- # append a model list module and a recent actions module
- self.children += [
- modules.ModelList(self.app_title, self.models),
- modules.RecentActions(
- _('Recent Actions'),
- include_list=self.get_app_content_types(),
- limit=5
- )
- ]
-
- def init_with_context(self, context):
- """
- Use this method if you need to access the request context.
- """
- return super(CustomAppIndexDashboard, self).init_with_context(context)
diff --git a/portail_citoyen2/fixtures/demo.json b/portail_citoyen2/fixtures/demo.json
deleted file mode 100644
index c63b044..0000000
--- a/portail_citoyen2/fixtures/demo.json
+++ /dev/null
@@ -1,5588 +0,0 @@
-[
-{
- "pk": 1,
- "model": "sites.site",
- "fields": {
- "domain": "portail-citoyen.au-quotidien.com",
- "name": "Portail citoyen"
- }
-},
-{
- "pk": 4,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 5,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 6,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 9,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche.html",
- "default_width": null
- }
-},
-{
- "pk": 10,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite.html",
- "default_width": null
- }
-},
-{
- "pk": 11,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 13,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 14,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 15,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 16,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 17,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 18,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 19,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 20,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 21,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 22,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 23,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 24,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 25,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 26,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 27,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 28,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 29,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 30,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 31,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 32,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 33,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 34,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 35,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 36,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 37,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 38,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 39,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 40,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 41,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 42,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 43,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 44,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 53,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 54,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 55,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 56,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 57,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 58,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 59,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 60,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 61,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 62,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 63,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 64,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 65,
- "model": "cms.placeholder",
- "fields": {
- "slot": "Titre colonne gauche",
- "default_width": null
- }
-},
-{
- "pk": 66,
- "model": "cms.placeholder",
- "fields": {
- "slot": "gauche",
- "default_width": null
- }
-},
-{
- "pk": 67,
- "model": "cms.placeholder",
- "fields": {
- "slot": "centre",
- "default_width": null
- }
-},
-{
- "pk": 68,
- "model": "cms.placeholder",
- "fields": {
- "slot": "droite",
- "default_width": null
- }
-},
-{
- "pk": 71,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 72,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 73,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 74,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 75,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 76,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 78,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 79,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 80,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 81,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 82,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 83,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 84,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 85,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 86,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 87,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 88,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 89,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 90,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 91,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 92,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 93,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 94,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 95,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 96,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 97,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 98,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 99,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 100,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 101,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 102,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 103,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 104,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 105,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 106,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 107,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 108,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 109,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 110,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 119,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 120,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 121,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 122,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 123,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 124,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 125,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 126,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 127,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 128,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 129,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 130,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 131,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 132,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 133,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 134,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 135,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 136,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 137,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 138,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 139,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 140,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 141,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 142,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 143,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 144,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 145,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 146,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 147,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 148,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 149,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 150,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 152,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 157,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 158,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 159,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 160,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 161,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 162,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 163,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 164,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 165,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 166,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 167,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 168,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 169,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 170,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 171,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 172,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 173,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 174,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 175,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 176,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 177,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 178,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 179,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 180,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 181,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 182,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 183,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 184,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 185,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 186,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 187,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 188,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 189,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 190,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 191,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 192,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 193,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 194,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 195,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 196,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 197,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 198,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 199,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 200,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 204,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 205,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 206,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 207,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 208,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 209,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 210,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 211,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 212,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 213,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 214,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 215,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 216,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 217,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 218,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 219,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 220,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 221,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 222,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 223,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 224,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 225,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 226,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 227,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 228,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 229,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 230,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 231,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 232,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 233,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 234,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 235,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 236,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 240,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 241,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 242,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 243,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 244,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 245,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 246,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 247,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 248,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 249,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 250,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 251,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 252,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 253,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 254,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 255,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 256,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 257,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 258,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 259,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 260,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 261,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 262,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 263,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 264,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 265,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 266,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 267,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 268,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 269,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 270,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 271,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 272,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 273,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 274,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 275,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 276,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 277,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 278,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 279,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 280,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 281,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 282,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 283,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 284,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 285,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 286,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 287,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 288,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 289,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 290,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 291,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 292,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 293,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 294,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 295,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 296,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 297,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 298,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 299,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 300,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 301,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 302,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 303,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 304,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 305,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 306,
- "model": "cms.placeholder",
- "fields": {
- "slot": "admin-links",
- "default_width": null
- }
-},
-{
- "pk": 307,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 308,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 309,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 310,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 311,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 312,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 319,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 320,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 321,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 322,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 323,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 324,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 326,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 327,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 328,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 329,
- "model": "cms.placeholder",
- "fields": {
- "slot": "right",
- "default_width": null
- }
-},
-{
- "pk": 330,
- "model": "cms.placeholder",
- "fields": {
- "slot": "left",
- "default_width": null
- }
-},
-{
- "pk": 331,
- "model": "cms.placeholder",
- "fields": {
- "slot": "stack_content",
- "default_width": null
- }
-},
-{
- "pk": 332,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 333,
- "model": "cms.placeholder",
- "fields": {
- "slot": "center",
- "default_width": null
- }
-},
-{
- "pk": 602,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-04-17T17:18:02.731Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-03-19T15:54:03.304Z",
- "lft": 1,
- "tree_id": 139,
- "position": 0,
- "placeholder": 5,
- "plugin_type": "A2ServiceListPlugin"
- }
-},
-{
- "pk": 603,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-04-17T17:18:02.819Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-03-21T08:17:08.384Z",
- "lft": 1,
- "tree_id": 140,
- "position": 2,
- "placeholder": 5,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 604,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-04-17T17:18:02.938Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-03-21T14:08:42.833Z",
- "lft": 1,
- "tree_id": 141,
- "position": 3,
- "placeholder": 5,
- "plugin_type": "RawInlineTemplatePlugin"
- }
-},
-{
- "pk": 605,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-04-17T17:18:03.026Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-03-21T14:10:39.535Z",
- "lft": 1,
- "tree_id": 142,
- "position": 4,
- "placeholder": 5,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 606,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-09-05T08:24:54.989Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-03-19T15:53:50.436Z",
- "lft": 1,
- "tree_id": 143,
- "position": 0,
- "placeholder": 6,
- "plugin_type": "LoginPlugin"
- }
-},
-{
- "pk": 608,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-09-05T08:24:54.997Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-03-29T12:19:18.285Z",
- "lft": 1,
- "tree_id": 145,
- "position": 1,
- "placeholder": 6,
- "plugin_type": "RawInlineTemplatePlugin"
- }
-},
-{
- "pk": 609,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-09-05T08:24:55.006Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-10T08:51:44.887Z",
- "lft": 1,
- "tree_id": 146,
- "position": 2,
- "placeholder": 6,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 758,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2013-04-23T17:01:21.745Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-23T16:57:49.967Z",
- "lft": 1,
- "tree_id": 183,
- "position": 2,
- "placeholder": 78,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 759,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2013-04-23T16:58:20.435Z",
- "parent": 758,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-04-23T16:58:18.595Z",
- "lft": 2,
- "tree_id": 183,
- "position": 0,
- "placeholder": 78,
- "plugin_type": "SelectUserFeedPlugin"
- }
-},
-{
- "pk": 760,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2013-05-12T11:52:53.258Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-23T16:58:42.289Z",
- "lft": 1,
- "tree_id": 184,
- "position": 3,
- "placeholder": 78,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 761,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2013-04-24T07:39:02.605Z",
- "parent": 760,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-04-23T16:59:03.038Z",
- "lft": 2,
- "tree_id": 184,
- "position": 1,
- "placeholder": 78,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 1289,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-09-05T08:24:55.104Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-18T08:35:19.946Z",
- "lft": 1,
- "tree_id": 244,
- "position": 0,
- "placeholder": 80,
- "plugin_type": "LoginPlugin"
- }
-},
-{
- "pk": 1290,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-05-12T06:16:35.005Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-07T02:51:36.702Z",
- "lft": 1,
- "tree_id": 245,
- "position": 0,
- "placeholder": 143,
- "plugin_type": "VideoPlugin"
- }
-},
-{
- "pk": 1291,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-05-07T03:10:30.607Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-07T02:52:15.528Z",
- "lft": 1,
- "tree_id": 246,
- "position": 0,
- "placeholder": 144,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 1292,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-05-08T07:16:35.183Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-07T02:53:55.914Z",
- "lft": 1,
- "tree_id": 247,
- "position": 1,
- "placeholder": 144,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 1586,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-06-20T10:19:37.289Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-06-20T10:18:31.253Z",
- "lft": 1,
- "tree_id": 302,
- "position": 4,
- "placeholder": 78,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 1588,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 8,
- "changed_date": "2013-09-10T19:15:28.654Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-06-21T14:47:36.308Z",
- "lft": 1,
- "tree_id": 303,
- "position": 1,
- "placeholder": 161,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 1589,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2013-09-05T08:24:54.671Z",
- "parent": 1588,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-06-21T14:47:55.017Z",
- "lft": 2,
- "tree_id": 303,
- "position": 1,
- "placeholder": 161,
- "plugin_type": "SelectUserFeedPlugin"
- }
-},
-{
- "pk": 1590,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2013-09-18T09:36:11.360Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-06-21T14:48:13.432Z",
- "lft": 1,
- "tree_id": 304,
- "position": 0,
- "placeholder": 160,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 1666,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-07-30T09:09:44.363Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-07T02:51:36.702Z",
- "lft": 1,
- "tree_id": 320,
- "position": 0,
- "placeholder": 145,
- "plugin_type": "VideoPlugin"
- }
-},
-{
- "pk": 1667,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-07-30T09:09:44.396Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-07T02:52:15.528Z",
- "lft": 1,
- "tree_id": 321,
- "position": 0,
- "placeholder": 146,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 1668,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-07-30T09:09:44.403Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-07T02:53:55.914Z",
- "lft": 1,
- "tree_id": 322,
- "position": 1,
- "placeholder": 146,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2153,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-08-12T12:57:15.926Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-17T20:49:51.192Z",
- "lft": 1,
- "tree_id": 331,
- "position": 0,
- "placeholder": 71,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2155,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-09-05T08:24:54.838Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-28T15:50:44.472Z",
- "lft": 1,
- "tree_id": 333,
- "position": 1,
- "placeholder": 71,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2225,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2013-09-18T09:36:15.587Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-23T16:57:49.967Z",
- "lft": 1,
- "tree_id": 353,
- "position": 2,
- "placeholder": 79,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2226,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2013-09-18T09:36:15.495Z",
- "parent": 2225,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-04-23T16:58:18.595Z",
- "lft": 2,
- "tree_id": 353,
- "position": 0,
- "placeholder": 79,
- "plugin_type": "SelectUserFeedPlugin"
- }
-},
-{
- "pk": 2227,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2013-09-18T09:36:15.611Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-23T16:58:42.289Z",
- "lft": 1,
- "tree_id": 354,
- "position": 3,
- "placeholder": 79,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2228,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2013-09-18T09:36:15.545Z",
- "parent": 2227,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-04-23T16:59:03.038Z",
- "lft": 2,
- "tree_id": 354,
- "position": 1,
- "placeholder": 79,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2229,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-09-18T09:36:15.628Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-06-20T10:18:31.253Z",
- "lft": 1,
- "tree_id": 355,
- "position": 4,
- "placeholder": 79,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2230,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2013-09-18T09:36:15.690Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-06-21T14:48:13.432Z",
- "lft": 1,
- "tree_id": 356,
- "position": 0,
- "placeholder": 162,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2232,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2013-09-18T09:36:15.748Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-06-21T14:47:36.308Z",
- "lft": 1,
- "tree_id": 357,
- "position": 1,
- "placeholder": 164,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2233,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2013-09-18T09:36:15.727Z",
- "parent": 2232,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-06-21T14:47:55.017Z",
- "lft": 2,
- "tree_id": 357,
- "position": 1,
- "placeholder": 164,
- "plugin_type": "SelectUserFeedPlugin"
- }
-},
-{
- "pk": 2272,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2013-12-24T08:57:40.277Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-12-23T09:44:40.980Z",
- "lft": 1,
- "tree_id": 361,
- "position": 0,
- "placeholder": 326,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2273,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2013-12-24T08:57:40.244Z",
- "parent": 2272,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-12-23T09:49:51.846Z",
- "lft": 2,
- "tree_id": 361,
- "position": 1,
- "placeholder": 326,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2274,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2013-12-24T10:07:52.042Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-10-15T14:42:11.789Z",
- "lft": 1,
- "tree_id": 362,
- "position": 2,
- "placeholder": 311,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2275,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2013-12-24T10:07:51.203Z",
- "parent": 2274,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-10-15T15:37:12.072Z",
- "lft": 2,
- "tree_id": 362,
- "position": 0,
- "placeholder": 311,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2287,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2014-01-21T15:14:43.292Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2014-01-21T09:46:38.654Z",
- "lft": 1,
- "tree_id": 365,
- "position": 0,
- "placeholder": 328,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2288,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-21T15:42:03.167Z",
- "parent": 2287,
- "language": "fr",
- "level": 1,
- "creation_date": "2014-01-21T09:46:58.929Z",
- "lft": 2,
- "tree_id": 365,
- "position": 1,
- "placeholder": 328,
- "plugin_type": "ProfileFormPlugin"
- }
-},
-{
- "pk": 2289,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-21T09:48:10.212Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2014-01-21T09:47:41.788Z",
- "lft": 1,
- "tree_id": 366,
- "position": 0,
- "placeholder": 327,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2290,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-21T14:24:03.489Z",
- "parent": 2289,
- "language": "fr",
- "level": 1,
- "creation_date": "2014-01-21T09:48:06.757Z",
- "lft": 2,
- "tree_id": 366,
- "position": 1,
- "placeholder": 327,
- "plugin_type": "AccountManagementPlugin"
- }
-},
-{
- "pk": 2291,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-21T15:19:50.635Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2014-01-21T09:48:22.921Z",
- "lft": 1,
- "tree_id": 367,
- "position": 2,
- "placeholder": 327,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2466,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2014-01-21T11:31:35.423Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2014-01-21T11:31:27.895Z",
- "lft": 1,
- "tree_id": 372,
- "position": null,
- "placeholder": 331,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2473,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-21T15:19:49.026Z",
- "parent": 2291,
- "language": "fr",
- "level": 1,
- "creation_date": "2014-01-21T15:19:47.230Z",
- "lft": 2,
- "tree_id": 367,
- "position": 0,
- "placeholder": 327,
- "plugin_type": "FederationPlugin"
- }
-},
-{
- "pk": 2474,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-21T15:19:56.833Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2014-01-21T09:47:41.788Z",
- "lft": 1,
- "tree_id": 373,
- "position": 0,
- "placeholder": 329,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2475,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-21T15:19:56.818Z",
- "parent": 2474,
- "language": "fr",
- "level": 1,
- "creation_date": "2014-01-21T15:19:56.816Z",
- "lft": 2,
- "tree_id": 373,
- "position": 1,
- "placeholder": 329,
- "plugin_type": "AccountManagementPlugin"
- }
-},
-{
- "pk": 2476,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-21T15:19:56.841Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2014-01-21T09:48:22.921Z",
- "lft": 1,
- "tree_id": 374,
- "position": 2,
- "placeholder": 329,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2477,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-21T15:19:56.827Z",
- "parent": 2476,
- "language": "fr",
- "level": 1,
- "creation_date": "2014-01-21T15:19:47.230Z",
- "lft": 2,
- "tree_id": 374,
- "position": 0,
- "placeholder": 329,
- "plugin_type": "FederationPlugin"
- }
-},
-{
- "pk": 2479,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-21T15:19:56.867Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2014-01-21T09:46:38.654Z",
- "lft": 1,
- "tree_id": 376,
- "position": 0,
- "placeholder": 330,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2480,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-21T15:42:03.203Z",
- "parent": 2479,
- "language": "fr",
- "level": 1,
- "creation_date": "2014-01-21T09:46:58.929Z",
- "lft": 2,
- "tree_id": 376,
- "position": 1,
- "placeholder": 330,
- "plugin_type": "ProfileFormPlugin"
- }
-},
-{
- "pk": 2574,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-21T18:17:09.254Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-10-15T14:42:11.789Z",
- "lft": 1,
- "tree_id": 382,
- "position": 2,
- "placeholder": 312,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2575,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-21T18:17:09.229Z",
- "parent": 2574,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-10-15T15:37:12.072Z",
- "lft": 2,
- "tree_id": 382,
- "position": 0,
- "placeholder": 312,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2687,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-23T10:11:53.173Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-17T21:21:00.789Z",
- "lft": 1,
- "tree_id": 388,
- "position": 1,
- "placeholder": 74,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2688,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-23T10:11:53.119Z",
- "parent": 2687,
- "language": "fr",
- "level": 1,
- "creation_date": "2014-01-21T17:34:02.998Z",
- "lft": 2,
- "tree_id": 388,
- "position": 1,
- "placeholder": 74,
- "plugin_type": "ShowUserFeedPlugin"
- }
-},
-{
- "pk": 2689,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-23T10:13:22.469Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-17T21:23:01.669Z",
- "lft": 1,
- "tree_id": 389,
- "position": 0,
- "placeholder": 74,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2690,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-23T10:13:21.458Z",
- "parent": 2689,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-05-06T16:23:46.648Z",
- "lft": 2,
- "tree_id": 389,
- "position": 0,
- "placeholder": 74,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2691,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2014-01-23T10:11:53.221Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-14T07:01:23.187Z",
- "lft": 1,
- "tree_id": 390,
- "position": 0,
- "placeholder": 147,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2692,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-23T10:12:17.505Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-17T21:09:42.797Z",
- "lft": 1,
- "tree_id": 391,
- "position": 1,
- "placeholder": 73,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2693,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-23T10:12:15.450Z",
- "parent": 2692,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-05-06T16:20:41.631Z",
- "lft": 2,
- "tree_id": 391,
- "position": 0,
- "placeholder": 73,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2694,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2014-01-23T10:11:53.335Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-12T05:07:52.469Z",
- "lft": 1,
- "tree_id": 392,
- "position": 2,
- "placeholder": 73,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2703,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2014-01-23T10:13:26.069Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-14T07:01:23.187Z",
- "lft": 1,
- "tree_id": 393,
- "position": 0,
- "placeholder": 148,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2704,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-23T10:13:26.173Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-17T21:09:42.797Z",
- "lft": 1,
- "tree_id": 394,
- "position": 1,
- "placeholder": 75,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2705,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-23T10:13:26.132Z",
- "parent": 2704,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-05-06T16:20:41.631Z",
- "lft": 2,
- "tree_id": 394,
- "position": 0,
- "placeholder": 75,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 2706,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 2,
- "changed_date": "2014-01-23T10:13:26.188Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-05-12T05:07:52.469Z",
- "lft": 1,
- "tree_id": 395,
- "position": 2,
- "placeholder": 75,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2707,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-23T10:13:26.279Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-17T21:21:00.789Z",
- "lft": 1,
- "tree_id": 396,
- "position": 1,
- "placeholder": 76,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2708,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-23T10:13:26.223Z",
- "parent": 2707,
- "language": "fr",
- "level": 1,
- "creation_date": "2014-01-21T17:34:02.998Z",
- "lft": 2,
- "tree_id": 396,
- "position": 1,
- "placeholder": 76,
- "plugin_type": "ShowUserFeedPlugin"
- }
-},
-{
- "pk": 2709,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 4,
- "changed_date": "2014-01-23T10:13:26.302Z",
- "parent": null,
- "language": "fr",
- "level": 0,
- "creation_date": "2013-04-17T21:23:01.669Z",
- "lft": 1,
- "tree_id": 397,
- "position": 0,
- "placeholder": 76,
- "plugin_type": "TextPlugin"
- }
-},
-{
- "pk": 2710,
- "model": "cms.cmsplugin",
- "fields": {
- "rght": 3,
- "changed_date": "2014-01-23T10:13:26.253Z",
- "parent": 2709,
- "language": "fr",
- "level": 1,
- "creation_date": "2013-05-06T16:23:46.648Z",
- "lft": 2,
- "tree_id": 397,
- "position": 0,
- "placeholder": 76,
- "plugin_type": "DataSourcePlugin"
- }
-},
-{
- "pk": 3,
- "model": "cms.page",
- "fields": {
- "rght": 22,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-04-17T14:38:00.576Z",
- "lft": 1,
- "in_navigation": true,
- "reverse_id": "top-page",
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_two_columns.html",
- "tree_id": 6,
- "placeholders": [
- 141,
- 142,
- 149,
- 21,
- 22,
- 23,
- 24
- ],
- "changed_date": "2013-04-17T19:57:53.782Z",
- "limit_visibility_in_menu": null,
- "parent": null,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-04-17T16:52:43.112Z",
- "publisher_public": 6,
- "level": 0,
- "changed_by": "admin",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 4,
- "model": "cms.page",
- "fields": {
- "rght": 3,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-04-17T14:38:21.017Z",
- "lft": 2,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": true,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_two_columns.html",
- "tree_id": 6,
- "placeholders": [
- 81,
- 147,
- 25,
- 26,
- 27,
- 28,
- 73,
- 74
- ],
- "changed_date": "2014-01-23T10:13:26.321Z",
- "limit_visibility_in_menu": 1,
- "parent": 3,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-04-17T16:52:46.846Z",
- "publisher_public": 7,
- "level": 1,
- "changed_by": "jschneider",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 5,
- "model": "cms.page",
- "fields": {
- "rght": 7,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-04-17T14:38:34.539Z",
- "lft": 6,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": true,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_two_columns.html",
- "tree_id": 6,
- "placeholders": [
- 78,
- 150,
- 160,
- 161,
- 29,
- 30,
- 31,
- 32
- ],
- "changed_date": "2013-09-18T09:36:15.787Z",
- "limit_visibility_in_menu": 1,
- "parent": 3,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-04-17T16:52:49.637Z",
- "publisher_public": 8,
- "level": 1,
- "changed_by": "admin",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 6,
- "model": "cms.page",
- "fields": {
- "rght": 34,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-04-17T16:52:47.741Z",
- "lft": 1,
- "in_navigation": true,
- "reverse_id": "top-page",
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_two_columns.html",
- "tree_id": 1,
- "placeholders": [
- 33,
- 34,
- 35,
- 36
- ],
- "changed_date": "2013-04-17T19:57:53.490Z",
- "limit_visibility_in_menu": null,
- "parent": null,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-04-17T16:52:43.112Z",
- "publisher_public": 3,
- "level": 0,
- "changed_by": "admin",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 7,
- "model": "cms.page",
- "fields": {
- "rght": 7,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-04-17T16:52:51.490Z",
- "lft": 4,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": true,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_two_columns.html",
- "tree_id": 1,
- "placeholders": [
- 76,
- 82,
- 148,
- 37,
- 38,
- 39,
- 40,
- 75
- ],
- "changed_date": "2014-01-23T10:13:25.891Z",
- "limit_visibility_in_menu": 1,
- "parent": 6,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-04-17T16:52:46.846Z",
- "publisher_public": 4,
- "level": 1,
- "changed_by": "jschneider",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 8,
- "model": "cms.page",
- "fields": {
- "rght": 11,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-04-17T16:52:54.294Z",
- "lft": 10,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": true,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_two_columns.html",
- "tree_id": 1,
- "placeholders": [
- 79,
- 162,
- 163,
- 164,
- 41,
- 42,
- 43,
- 44
- ],
- "changed_date": "2013-09-18T09:36:15.241Z",
- "limit_visibility_in_menu": 1,
- "parent": 6,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-04-17T16:52:49.637Z",
- "publisher_public": 5,
- "level": 1,
- "changed_by": "admin",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 11,
- "model": "cms.page",
- "fields": {
- "rght": 21,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-04-17T17:16:05.199Z",
- "lft": 10,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 6,
- "placeholders": [
- 143,
- 144,
- 165,
- 166,
- 53,
- 54,
- 55,
- 56
- ],
- "changed_date": "2013-07-30T09:09:44.417Z",
- "limit_visibility_in_menu": null,
- "parent": 3,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-04-17T17:16:05.110Z",
- "publisher_public": 14,
- "level": 1,
- "changed_by": "admin",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 14,
- "model": "cms.page",
- "fields": {
- "rght": 33,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-04-17T17:16:26.509Z",
- "lft": 22,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 1,
- "placeholders": [
- 145,
- 146,
- 167,
- 168,
- 65,
- 66,
- 67,
- 68
- ],
- "changed_date": "2013-07-30T09:09:44.257Z",
- "limit_visibility_in_menu": null,
- "parent": 6,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-04-17T17:16:05.110Z",
- "publisher_public": 11,
- "level": 1,
- "changed_by": "admin",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 18,
- "model": "cms.page",
- "fields": {
- "rght": 16,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:10:39.765Z",
- "lft": 11,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 6,
- "placeholders": [
- 169,
- 170
- ],
- "changed_date": "2013-07-30T09:13:15.507Z",
- "limit_visibility_in_menu": null,
- "parent": 11,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:10.503Z",
- "publisher_public": 23,
- "level": 2,
- "changed_by": "admin",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 19,
- "model": "cms.page",
- "fields": {
- "rght": 18,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:11:13.857Z",
- "lft": 17,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 6,
- "placeholders": [
- 171,
- 172,
- 173,
- 174
- ],
- "changed_date": "2013-07-30T09:13:20.346Z",
- "limit_visibility_in_menu": null,
- "parent": 11,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:15.342Z",
- "publisher_public": 26,
- "level": 2,
- "changed_by": "admin",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 20,
- "model": "cms.page",
- "fields": {
- "rght": 20,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:11:42.715Z",
- "lft": 19,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 6,
- "placeholders": [
- 175,
- 176,
- 177,
- 332
- ],
- "changed_date": "2014-01-22T07:36:49.907Z",
- "limit_visibility_in_menu": null,
- "parent": 11,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:17.404Z",
- "publisher_public": 27,
- "level": 2,
- "changed_by": "serghei",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 21,
- "model": "cms.page",
- "fields": {
- "rght": 13,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:12:20.405Z",
- "lft": 12,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 6,
- "placeholders": [
- 178,
- 179,
- 180,
- 199
- ],
- "changed_date": "2014-01-21T21:04:34.498Z",
- "limit_visibility_in_menu": null,
- "parent": 18,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:12.209Z",
- "publisher_public": 24,
- "level": 3,
- "changed_by": "serghei",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 22,
- "model": "cms.page",
- "fields": {
- "rght": 15,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:13:01.527Z",
- "lft": 14,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 6,
- "placeholders": [
- 181,
- 182,
- 183,
- 301
- ],
- "changed_date": "2014-01-21T21:05:39.041Z",
- "limit_visibility_in_menu": null,
- "parent": 18,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:14.358Z",
- "publisher_public": 25,
- "level": 3,
- "changed_by": "serghei",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 23,
- "model": "cms.page",
- "fields": {
- "rght": 28,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:13:15.466Z",
- "lft": 23,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 1,
- "placeholders": [
- 184,
- 185
- ],
- "changed_date": "2013-07-30T09:13:15.466Z",
- "limit_visibility_in_menu": null,
- "parent": 14,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:10.463Z",
- "publisher_public": 18,
- "level": 2,
- "changed_by": "admin",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 24,
- "model": "cms.page",
- "fields": {
- "rght": 25,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:13:17.169Z",
- "lft": 24,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 1,
- "placeholders": [
- 186,
- 187,
- 188,
- 200
- ],
- "changed_date": "2014-01-21T21:04:34.430Z",
- "limit_visibility_in_menu": null,
- "parent": 23,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:12.209Z",
- "publisher_public": 21,
- "level": 3,
- "changed_by": "serghei",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 25,
- "model": "cms.page",
- "fields": {
- "rght": 27,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:13:19.313Z",
- "lft": 26,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 1,
- "placeholders": [
- 189,
- 190,
- 191,
- 302
- ],
- "changed_date": "2014-01-21T21:05:38.973Z",
- "limit_visibility_in_menu": null,
- "parent": 23,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:14.358Z",
- "publisher_public": 22,
- "level": 3,
- "changed_by": "serghei",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 26,
- "model": "cms.page",
- "fields": {
- "rght": 30,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:13:20.292Z",
- "lft": 29,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 1,
- "placeholders": [
- 192,
- 193,
- 194,
- 195
- ],
- "changed_date": "2013-07-30T09:13:20.292Z",
- "limit_visibility_in_menu": null,
- "parent": 14,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:15.289Z",
- "publisher_public": 19,
- "level": 2,
- "changed_by": "admin",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 27,
- "model": "cms.page",
- "fields": {
- "rght": 32,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-07-30T09:13:22.365Z",
- "lft": 31,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": false,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_help.html",
- "tree_id": 1,
- "placeholders": [
- 196,
- 197,
- 198,
- 333
- ],
- "changed_date": "2014-01-22T07:36:49.822Z",
- "limit_visibility_in_menu": null,
- "parent": 14,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-07-30T09:13:17.404Z",
- "publisher_public": 20,
- "level": 2,
- "changed_by": "serghei",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 60,
- "model": "cms.page",
- "fields": {
- "rght": 9,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-10-15T14:39:49.607Z",
- "lft": 8,
- "in_navigation": false,
- "reverse_id": null,
- "login_required": false,
- "created_by": "jschneider",
- "publication_end_date": null,
- "template": "base_one_column.html",
- "tree_id": 6,
- "placeholders": [
- 307,
- 308,
- 311
- ],
- "changed_date": "2014-01-21T18:17:09.274Z",
- "limit_visibility_in_menu": null,
- "parent": 3,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-10-15T14:39:53.632Z",
- "publisher_public": 61,
- "level": 1,
- "changed_by": "jschneider",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 61,
- "model": "cms.page",
- "fields": {
- "rght": 19,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2013-10-15T14:39:58.464Z",
- "lft": 12,
- "in_navigation": false,
- "reverse_id": null,
- "login_required": false,
- "created_by": "jschneider",
- "publication_end_date": null,
- "template": "base_one_column.html",
- "tree_id": 1,
- "placeholders": [
- 309,
- 310,
- 312
- ],
- "changed_date": "2014-01-21T18:17:09.037Z",
- "limit_visibility_in_menu": null,
- "parent": 6,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2013-10-15T14:39:53.632Z",
- "publisher_public": 60,
- "level": 1,
- "changed_by": "jschneider",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 68,
- "model": "cms.page",
- "fields": {
- "rght": 5,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2014-01-21T08:37:00.814Z",
- "lft": 4,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": true,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_two_columns.html",
- "tree_id": 6,
- "placeholders": [
- 327,
- 328
- ],
- "changed_date": "2014-01-21T15:19:56.875Z",
- "limit_visibility_in_menu": 1,
- "parent": 3,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2014-01-21T08:37:06.415Z",
- "publisher_public": 69,
- "level": 1,
- "changed_by": "admin",
- "publisher_is_draft": true,
- "published": true
- }
-},
-{
- "pk": 69,
- "model": "cms.page",
- "fields": {
- "rght": 9,
- "navigation_extenders": "",
- "site": 1,
- "creation_date": "2014-01-21T08:37:11.341Z",
- "lft": 8,
- "in_navigation": true,
- "reverse_id": null,
- "login_required": true,
- "created_by": "admin",
- "publication_end_date": null,
- "template": "base_two_columns.html",
- "tree_id": 1,
- "placeholders": [
- 329,
- 330
- ],
- "changed_date": "2014-01-21T15:19:56.748Z",
- "limit_visibility_in_menu": 1,
- "parent": 6,
- "publisher_state": 0,
- "soft_root": false,
- "publication_date": "2014-01-21T08:37:06.415Z",
- "publisher_public": 68,
- "level": 1,
- "changed_by": "admin",
- "publisher_is_draft": false,
- "published": true
- }
-},
-{
- "pk": 1,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2013-07-31T14:14:01.444Z",
- "page": 3,
- "user": null
- }
-},
-{
- "pk": 3,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T14:09:37.634Z",
- "page": 5,
- "user": null
- }
-},
-{
- "pk": 4,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2013-04-18T13:22:50.673Z",
- "page": 3,
- "user": null
- }
-},
-{
- "pk": 5,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T14:09:37.669Z",
- "page": 11,
- "user": null
- }
-},
-{
- "pk": 6,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2013-07-31T14:14:01.594Z",
- "page": 11,
- "user": null
- }
-},
-{
- "pk": 7,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T14:09:37.697Z",
- "page": 19,
- "user": null
- }
-},
-{
- "pk": 8,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2013-07-31T14:14:01.697Z",
- "page": 18,
- "user": null
- }
-},
-{
- "pk": 9,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2013-07-31T14:14:01.715Z",
- "page": 19,
- "user": null
- }
-},
-{
- "pk": 13,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T16:40:36.513Z",
- "page": 3,
- "user": null
- }
-},
-{
- "pk": 15,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T16:40:36.552Z",
- "page": 5,
- "user": null
- }
-},
-{
- "pk": 17,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T16:40:36.638Z",
- "page": 11,
- "user": null
- }
-},
-{
- "pk": 18,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T16:40:36.689Z",
- "page": 18,
- "user": null
- }
-},
-{
- "pk": 19,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T16:40:36.706Z",
- "page": 19,
- "user": null
- }
-},
-{
- "pk": 24,
- "model": "cms.pagemoderatorstate",
- "fields": {
- "action": "ADD",
- "message": "",
- "created": "2014-01-21T16:40:36.884Z",
- "page": 68,
- "user": null
- }
-},
-{
- "pk": 3,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "/mes-e-services",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "top-page",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-04-17T14:38:00.809Z",
- "page": 3,
- "path": "",
- "meta_description": "",
- "slug": "top-page"
- }
-},
-{
- "pk": 4,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Mes e-services",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-04-17T14:38:21.239Z",
- "page": 4,
- "path": "mes-e-services",
- "meta_description": "",
- "slug": "mes-e-services"
- }
-},
-{
- "pk": 5,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Mes abonnements",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-04-17T14:38:34.760Z",
- "page": 5,
- "path": "mes-abonnements",
- "meta_description": "",
- "slug": "mes-abonnements"
- }
-},
-{
- "pk": 6,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "/mes-e-services",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "top-page",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-04-17T14:38:00.809Z",
- "page": 6,
- "path": "",
- "meta_description": "",
- "slug": "top-page"
- }
-},
-{
- "pk": 7,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Mes e-services",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-04-17T14:38:21.239Z",
- "page": 7,
- "path": "mes-e-services",
- "meta_description": "",
- "slug": "mes-e-services"
- }
-},
-{
- "pk": 8,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Mes abonnements",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-04-17T14:38:34.760Z",
- "page": 8,
- "path": "mes-abonnements",
- "meta_description": "",
- "slug": "mes-abonnements"
- }
-},
-{
- "pk": 11,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Aide",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-04-17T17:16:05.421Z",
- "page": 11,
- "path": "aide",
- "meta_description": "",
- "slug": "aide"
- }
-},
-{
- "pk": 14,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Aide",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-04-17T17:16:05.421Z",
- "page": 14,
- "path": "aide",
- "meta_description": "",
- "slug": "aide"
- }
-},
-{
- "pk": 17,
- "model": "cms.title",
- "fields": {
- "menu_title": null,
- "redirect": null,
- "meta_keywords": null,
- "page_title": null,
- "language": "fr",
- "title": "Qu'est-ce que mon compte citoyen ?",
- "has_url_overwrite": false,
- "application_urls": null,
- "creation_date": "2013-07-30T09:10:39.788Z",
- "page": 18,
- "path": "aide/quest-ce-que-mon-compte-citoyen",
- "meta_description": null,
- "slug": "quest-ce-que-mon-compte-citoyen"
- }
-},
-{
- "pk": 18,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Qu'est-ce que mes e-services ?",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-07-30T09:11:13.880Z",
- "page": 19,
- "path": "aide/quest-ce-que-mes-e-services",
- "meta_description": "",
- "slug": "quest-ce-que-mes-e-services"
- }
-},
-{
- "pk": 19,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Qu'est-ce que mes abonnements ?",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-07-30T09:11:42.736Z",
- "page": 20,
- "path": "aide/quest-ce-que-mes-abonnements",
- "meta_description": "",
- "slug": "quest-ce-que-mes-abonnements"
- }
-},
-{
- "pk": 20,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Pourquoi cr\u00e9er un compte citoyen ?",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-07-30T09:12:20.429Z",
- "page": 21,
- "path": "aide/quest-ce-que-mon-compte-citoyen/pourquoi-creer-un-compte-citoyen",
- "meta_description": "",
- "slug": "pourquoi-creer-un-compte-citoyen"
- }
-},
-{
- "pk": 21,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Comment cr\u00e9e-t-on un compte ?",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-07-30T09:13:01.552Z",
- "page": 22,
- "path": "aide/quest-ce-que-mon-compte-citoyen/comment-cree-t-un-compte",
- "meta_description": "",
- "slug": "comment-cree-t-un-compte"
- }
-},
-{
- "pk": 22,
- "model": "cms.title",
- "fields": {
- "menu_title": null,
- "redirect": null,
- "meta_keywords": null,
- "page_title": null,
- "language": "fr",
- "title": "Qu'est-ce que mon compte citoyen ?",
- "has_url_overwrite": false,
- "application_urls": null,
- "creation_date": "2013-07-30T09:10:39.788Z",
- "page": 23,
- "path": "aide/quest-ce-que-mon-compte-citoyen",
- "meta_description": null,
- "slug": "quest-ce-que-mon-compte-citoyen"
- }
-},
-{
- "pk": 23,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Pourquoi cr\u00e9er un compte citoyen ?",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-07-30T09:12:20.429Z",
- "page": 24,
- "path": "aide/quest-ce-que-mon-compte-citoyen/pourquoi-creer-un-compte-citoyen",
- "meta_description": "",
- "slug": "pourquoi-creer-un-compte-citoyen"
- }
-},
-{
- "pk": 24,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Comment cr\u00e9e-t-on un compte ?",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-07-30T09:13:01.552Z",
- "page": 25,
- "path": "aide/quest-ce-que-mon-compte-citoyen/comment-cree-t-un-compte",
- "meta_description": "",
- "slug": "comment-cree-t-un-compte"
- }
-},
-{
- "pk": 25,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Qu'est-ce que mes e-services ?",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-07-30T09:11:13.880Z",
- "page": 26,
- "path": "aide/quest-ce-que-mes-e-services",
- "meta_description": "",
- "slug": "quest-ce-que-mes-e-services"
- }
-},
-{
- "pk": 26,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Qu'est-ce que mes abonnements ?",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-07-30T09:11:42.736Z",
- "page": 27,
- "path": "aide/quest-ce-que-mes-abonnements",
- "meta_description": "",
- "slug": "quest-ce-que-mes-abonnements"
- }
-},
-{
- "pk": 59,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Services li\u00e9s",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-10-15T14:39:49.759Z",
- "page": 60,
- "path": "mediatheque",
- "meta_description": "",
- "slug": "mediatheque"
- }
-},
-{
- "pk": 60,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Services li\u00e9s",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2013-10-15T14:39:49.759Z",
- "page": 61,
- "path": "mediatheque",
- "meta_description": "",
- "slug": "mediatheque"
- }
-},
-{
- "pk": 67,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Mon compte",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2014-01-21T08:37:00.890Z",
- "page": 68,
- "path": "mon-compte",
- "meta_description": "",
- "slug": "mon-compte"
- }
-},
-{
- "pk": 68,
- "model": "cms.title",
- "fields": {
- "menu_title": "",
- "redirect": "",
- "meta_keywords": "",
- "page_title": "",
- "language": "fr",
- "title": "Mon compte",
- "has_url_overwrite": false,
- "application_urls": "",
- "creation_date": "2014-01-21T08:37:00.890Z",
- "page": 69,
- "path": "mon-compte",
- "meta_description": "",
- "slug": "mon-compte"
- }
-},
-{
- "pk": 758,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Vos flux
",
- "wrapper": "block"
- }
-},
-{
- "pk": 760,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Newsletters \nVos abonnements sont marqu\u00e9s d'une \u2713 et affich\u00e9s en vert.
\n
",
- "wrapper": "block"
- }
-},
-{
- "pk": 1291,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Utilisation du compte citoyen Votre compte citoyen va vous permettre :
d'accomplir vos d\u00e9marches en ligne 24h/24 aupr\u00e8s de Montpellier Agglo dans un premier temps puis \u00e0 terme aupr\u00e8s de la m\u00e9diath\u00e8que, de l'\u00e9coloth\u00e8que, du conservatoire et de votre commune. De suivre le traitement de vos d\u00e9marches apr\u00e8s avoir rempli un formulaire en ligne, qu'il s'agisse par exemple de contacter le r\u00e9seau des piscines, de demander un abonnement \u00e0 la t\u00e9l\u00e9alarme, de contacter le service des d\u00e9chets... De pr\u00e9remplir vos coordonn\u00e9es directement dans les formulaires, \u00e0 partir de celles que vous aurez indiqu\u00e9es sur votre compte. ",
- "wrapper": "block"
- }
-},
-{
- "pk": 1292,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Trouver de l'aide Pour aller plus loin dans la compr\u00e9hension du fonctionnement du compte citoyen vous pouvez consulter l'aide en ligne ou contacter le support .
",
- "wrapper": "block"
- }
-},
-{
- "pk": 1586,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Annonces SMS
",
- "wrapper": "block"
- }
-},
-{
- "pk": 1588,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mes flux d'infos S\u00e9lectionnez ici les flux d'informations que vous souhaitez suivre.
",
- "wrapper": "block"
- }
-},
-{
- "pk": 1590,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Newsletters Cliquez sur une newsletter pour vous (d\u00e9s)abonner et sauvegardez les changements avec le bouton Valider.
",
- "wrapper": "block"
- }
-},
-{
- "pk": 1667,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Utilisation du compte citoyen Votre compte citoyen va vous permettre :
d'accomplir vos d\u00e9marches en ligne 24h/24 aupr\u00e8s de Montpellier Agglo dans un premier temps puis \u00e0 terme aupr\u00e8s de la m\u00e9diath\u00e8que, de l'\u00e9coloth\u00e8que, du conservatoire et de votre commune. De suivre le traitement de vos d\u00e9marches apr\u00e8s avoir rempli un formulaire en ligne, qu'il s'agisse par exemple de contacter le r\u00e9seau des piscines, de demander un abonnement \u00e0 la t\u00e9l\u00e9alarme, de contacter le service des d\u00e9chets... De pr\u00e9remplir vos coordonn\u00e9es directement dans les formulaires, \u00e0 partir de celles que vous aurez indiqu\u00e9es sur votre compte. ",
- "wrapper": "block"
- }
-},
-{
- "pk": 1668,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Trouver de l'aide Pour aller plus loin dans la compr\u00e9hension du fonctionnement du compte citoyen vous pouvez consulter l'aide en ligne ou contacter le support .
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2153,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Compte lecteur Ici bient\u00f4t les informations de votre compte lecteur
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2225,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Vos flux
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2227,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Newsletters \nVos abonnements sont marqu\u00e9s d'une \u2713 et affich\u00e9s en vert.
\n
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2229,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Annonces SMS
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2230,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Newsletters Cliquez sur une newsletter pour vous (d\u00e9s)abonner et sauvegardez les changements avec le bouton Valider.
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2232,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mes flux d'infos S\u00e9lectionnez ici les flux d'informations que vous souhaitez suivre.
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2272,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Compte lecteur \n",
- "wrapper": "block"
- }
-},
-{
- "pk": 2274,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Compte lecteur \n
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2287,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mon profil
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2289,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "G\u00e9rer mon compte
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2291,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mes liaisons
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2466,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Bienvenue sur le portail Internet de Montpellier Agglom\u00e9ration \n\nUn site Internet pour et par l\u2019usager \n\n\nInnovante, Montpellier Agglom\u00e9ration lance un site in\u00e9dit, personnalisable \u00e0\nvolont\u00e9, pour que chaque internaute puisse cr\u00e9er sa propre version en fonction\nde ses centres d\u2019int\u00e9r\u00eats et de ses envies\u00a0!\n
\n\n\nE-services accessibles 24h/24 et 7jrs/7 en un clic, navigation qui s\u2019adapte \u00e0\nl\u2019internaute\u2026 avec la nouvelle version de son site lanc\u00e9e en septembre 2012,\nvous avez acc\u00e8s \u00e0 un graphisme \u00e9pur\u00e9 pour plus de confort de lecture, des\npr\u00e9sentations ludiques et interactives, des photos, des vid\u00e9os\u2026 et une mine\nd\u2019informations \u00e0 d\u00e9couvrir au fil de votre parcours ou de vos recherches.\n
Une offre de services performante \n\n\nContacter une piscine ou le service des d\u00e9chets\u00a0? R\u00e9aliser une modification de\nvotre abonnement \u00e0 la t\u00e9l\u00e9alarme\u00a0? Effectuer une demande de raccordement au\nr\u00e9seau d'assainissement\u00a0? R\u00e9pondre \u00e0 une offre d'emploi ou d\u00e9poser une\ncandidature spontan\u00e9e\u00a0?\n
\n\n\nLa plate-forme de services d\u00e9mat\u00e9rialis\u00e9s \u00e9volue et vous permet d'accomplir la\nplupart de vos d\u00e9marches en ligne, 24h/24 et 7j/7, de suivre le traitement de\nvos demandes de \u00ab\u00a0e-services\u00a0\u00bb.\n
\n\n\nPour cela il vous suffit de vous connecter avec votre compte citoyen de\nMontpellier Agglo pour acc\u00e9der au portail et \u00e0 ses \u00ab\u00a0e-services\u00a0\u00bb.\n
\n\n\nSi vous ne disposez pas encore de compte citoyen de Montpellier Agglo ?\nN'h\u00e9sitez plus et inscrivez-vous d\u00e8s maintenant, votre compte vous donnera\n\u00e9galement acc\u00e8s \u00e0 votre compte lecteur du r\u00e9seau des M\u00e9diath\u00e8que, \u00e0 votre\ncompte famille \u00e0 l'Ecoloth\u00e8que ou le compte \u00e9l\u00e8ve au Conservatoire, et enfin\nd'acc\u00e9der directement \u00e0 vos espaces personnalis\u00e9s, sans avoir \u00e0 re-saisir vos\nidentifiants et mots de passe.\n
",
- "wrapper": ""
- }
-},
-{
- "pk": 2474,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "G\u00e9rer mon compte
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2476,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mes liaisons
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2479,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mon profil
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2574,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Compte lecteur \n
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2687,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mes flux d'infos \nLes informations proviennent des flux s\u00e9lectionn\u00e9s dans \u00ab\u00a0Mes abonnements \u00a0\u00bb.
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2689,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mes d\u00e9marches en cours Cliquez sur une de vos d\u00e9marches en cours pour en afficher le d\u00e9tail.
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2692,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "D\u00e9marches en ligne \nRetrouvez ici les cat\u00e9gories de d\u00e9marches en ligne disponibles.
\n\n\n",
- "wrapper": "block"
- }
-},
-{
- "pk": 2694,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Liens utiles Diff\u00e9rents liens en relation avec la collectivit\u00e9
\nSite Web d'Issy-les-Moulineaux
\nIssy sur Wikip\u00e9dia
\nCarte d'Issy-les-Moulineaux
\n",
- "wrapper": "block"
- }
-},
-{
- "pk": 2704,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "D\u00e9marches en ligne \nRetrouvez ici les cat\u00e9gories de d\u00e9marches en ligne disponibles.
\n\n\n",
- "wrapper": "block"
- }
-},
-{
- "pk": 2706,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Liens utiles Diff\u00e9rents liens en relation avec la collectivit\u00e9
\nSite Web d'Issy-les-Moulineaux
\nIssy sur Wikip\u00e9dia
\nCarte d'Issy-les-Moulineaux
\n",
- "wrapper": "block"
- }
-},
-{
- "pk": 2707,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mes flux d'infos \nLes informations proviennent des flux s\u00e9lectionn\u00e9s dans \u00ab\u00a0Mes abonnements \u00a0\u00bb.
",
- "wrapper": "block"
- }
-},
-{
- "pk": 2709,
- "model": "cmsplugin_text_wrapper.textwrapper",
- "fields": {
- "body": "Mes d\u00e9marches en cours Cliquez sur une de vos d\u00e9marches en cours pour en afficher le d\u00e9tail.
",
- "wrapper": "block"
- }
-},
-{
- "pk": 1290,
- "model": "video.video",
- "fields": {
- "fullscreen": false,
- "loadingbarcolor": "828282",
- "buttonovercolor": "000000",
- "auto_hide": false,
- "movie": "",
- "image": "cms_page_media/11/compte-citoyen.png",
- "buttonoutcolor": "333333",
- "seekbarcolor": "13ABEC",
- "bgcolor": "000000",
- "height": 371,
- "width": 495,
- "seekbarbgcolor": "333333",
- "auto_play": false,
- "buttonhighlightcolor": "FFFFFF",
- "textcolor": "FFFFFF",
- "loop": false,
- "movie_url": "https://www.youtube.com/watch?v=4ria7AhD7ro"
- }
-},
-{
- "pk": 1666,
- "model": "video.video",
- "fields": {
- "fullscreen": false,
- "loadingbarcolor": "828282",
- "buttonovercolor": "000000",
- "auto_hide": false,
- "movie": "",
- "image": "cms_page_media/11/compte-citoyen.png",
- "buttonoutcolor": "333333",
- "seekbarcolor": "13ABEC",
- "bgcolor": "000000",
- "height": 371,
- "width": 495,
- "seekbarbgcolor": "333333",
- "auto_play": false,
- "buttonhighlightcolor": "FFFFFF",
- "textcolor": "FFFFFF",
- "loop": false,
- "movie_url": "https://www.youtube.com/watch?v=4ria7AhD7ro"
- }
-},
-{
- "pk": 606,
- "model": "login_plugin.loginplugin",
- "fields": {}
-},
-{
- "pk": 1289,
- "model": "login_plugin.loginplugin",
- "fields": {}
-},
-{
- "pk": 2,
- "model": "data_source_plugin.datasource",
- "fields": {
- "name": "Formulaires",
- "url": "https://eservices.au-quotidien.com/myspace/json/forms?NameID={{federations.service_1.links.0}}&orig=portail-citoyen.au-quotidien.com",
- "verify_certificate": false,
- "hash_algo": "sha256",
- "signature_key": "12345",
- "mime_type": "text/json"
- }
-},
-{
- "pk": 3,
- "model": "data_source_plugin.datasource",
- "fields": {
- "name": "Liste des formulaires e-services",
- "url": "https://eservices.au-quotidien.com/json?NameID={{federations.service_1.links.0}}&orig=portail-citoyen.au-quotidien.com",
- "verify_certificate": false,
- "hash_algo": "sha256",
- "signature_key": "12345",
- "mime_type": "text/json"
- }
-},
-{
- "pk": 6,
- "model": "data_source_plugin.datasource",
- "fields": {
- "name": "Flux RSS SGMAP",
- "url": "http://www.modernisation.gouv.fr/rss.xml",
- "verify_certificate": true,
- "hash_algo": "",
- "signature_key": "",
- "mime_type": "application/rss+xml"
- }
-},
-{
- "pk": 7,
- "model": "data_source_plugin.datasource",
- "fields": {
- "name": "Informations utilisateur",
- "url": "https://eservices.au-quotidien.com/user?format=json&NameID={{federations.service_1.links.0}}&orig=portail-citoyen.au-quotidien.com",
- "verify_certificate": false,
- "hash_algo": "sha256",
- "signature_key": "12345",
- "mime_type": "text/json"
- }
-},
-{
- "pk": 8,
- "model": "data_source_plugin.datasource",
- "fields": {
- "name": "Cat\u00e9gories de formulaire",
- "url": "https://eservices.au-quotidien.com/categories?format=json&NameID={{federations.service_1.links.0}}&orig=portail-citoyen.au-quotidien.com",
- "verify_certificate": false,
- "hash_algo": "sha256",
- "signature_key": "12345",
- "mime_type": "text/json"
- }
-},
-{
- "pk": 110,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 2,
- "order": 0,
- "plugin": 605
- }
-},
-{
- "pk": 111,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 3,
- "order": 0,
- "plugin": 609
- }
-},
-{
- "pk": 483,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 7,
- "order": 0,
- "plugin": 2155
- }
-},
-{
- "pk": 578,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 2,
- "order": 0,
- "plugin": 2690
- }
-},
-{
- "pk": 579,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 7,
- "order": 0,
- "plugin": 2691
- }
-},
-{
- "pk": 580,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 8,
- "order": 0,
- "plugin": 2693
- }
-},
-{
- "pk": 584,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 7,
- "order": 0,
- "plugin": 2703
- }
-},
-{
- "pk": 585,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 8,
- "order": 0,
- "plugin": 2705
- }
-},
-{
- "pk": 586,
- "model": "data_source_plugin.plugindatasource",
- "fields": {
- "source": 2,
- "order": 0,
- "plugin": 2710
- }
-},
-{
- "pk": 604,
- "model": "data_source_plugin.rawinlinetemplateplugin",
- "fields": {
- "template_source": ""
- }
-},
-{
- "pk": 608,
- "model": "data_source_plugin.rawinlinetemplateplugin",
- "fields": {
- "template_source": "{% load i18n %}\r\n{% if user.is_authenticated %}\r\n\r\n{% endif %}"
- }
-},
-{
- "pk": 603,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "{% if user.is_authenticated %}\r\nMes abonnements aux newsletters \r\n\r\n{% for name, subscribed in data_sources.0.content.newsletters.items %}\r\n{{ name }} \r\n{% endfor %}\r\n \r\n\r\n{% endif %}",
- "limit": 10,
- "refresh": 30
- }
-},
-{
- "pk": 605,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "{% if request.user.is_authenticated and data_sources.0.content %}\r\nMes d\u00e9marches en cours... \r\n\r\n{% for data in data_sources.0.content %}\r\n{{data.title}} \r\n{% endfor %}\r\n \r\n{% endif %}",
- "limit": 10,
- "refresh": 30
- }
-},
-{
- "pk": 609,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "{% if user.is_authenticated %}\r\nLes d\u00e9marches \r\nMontpellier agglom\u00e9ration \r\n\r\n{% for d in data_sources.0.content|dictsort:\"count\" %}\r\n{{ d.title }}
\r\n{% endfor %}\r\n\r\n{% endif %}",
- "limit": 10,
- "refresh": 30
- }
-},
-{
- "pk": 761,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "\r\n{% for name, subscribed in data_sources.0.content.newsletters.items %}\r\n{{ name }} \r\n{% endfor %}\r\n \r\n",
- "limit": 10,
- "refresh": 30
- }
-},
-{
- "pk": 2155,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "\r\n{% with user_info=data_sources.0.content %}\r\n\r\n{% endwith %}\r\n",
- "limit": 10,
- "refresh": 30
- }
-},
-{
- "pk": 2228,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "\r\n{% for name, subscribed in data_sources.0.content.newsletters.items %}\r\n{{ name }} \r\n{% endfor %}\r\n \r\n",
- "limit": 10,
- "refresh": 30
- }
-},
-{
- "pk": 2273,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "{% if data_sources.0.content.d.ClientAccount.ShortAccount %}\r\nVotre carte d'abonnement num\u00e9ro {{\u00a0data_sources.0.content.d.ClientAccount.Identity.BarCode }} est valable jusqu'au {{\u00a0data_sources.0.content.d.ClientAccount.Identity.ExpirationDate }}.
\r\n\r\nVous avez actuellement {{ data_sources.0.content.d.ClientAccount.ShortAccount.NombrePrets\u00a0}} oeuvre(s) en pr\u00eat :\r\n
\r\n{% for loan in data_sources.0.content.d.ClientAccount.Loans\u00a0%}\r\n {{\u00a0loan.DisplayName\u00a0}} - {{ loan.SearchItemAdapter.Resource.Crtr }} {% if loan.IsLate %}(en retard){% endif %} \r\n{% endfor %}\r\n \r\n\r\n\r\nVous avec actuellement {{ data_sources.0.content.d.ClientAccount.ShortAccount.NombreDemandeReservations }} oeuvre(s) en r\u00e9servation\r\n
\r\n\r\n{% if data_sources.0.content.d.ClientAccount.ShortAccount.NombreMessages %}\r\nVous avez {{\u00a0data_sources.0.content.d.ClientAccount.ShortAccount.NombreMessages }}
\r\n{% else %}\r\nVous n'avez pas de message
\r\n{% endif %}\r\n\r\n{% else %}\r\n\r\nVous n'avez actuellement pas de compte m\u00e9diath\u00e8que raccord\u00e9 ou votre compte n'est plus valide.
\r\nCliquer ici pour raccorder votre compte m\u00e9diath\u00e8que
\r\n\r\n{% endif %}",
- "limit": 10,
- "refresh": 60
- }
-},
-{
- "pk": 2275,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "{% if data_sources.0.content.d.ClientAccount.ShortAccount %}\r\nVotre carte d'abonnement num\u00e9ro {{\u00a0data_sources.0.content.d.ClientAccount.Identity.BarCode }} est valable jusqu'au {{\u00a0data_sources.0.content.d.ClientAccount.Identity.ExpirationDate }}.
\r\n\r\nVous avez actuellement {{ data_sources.0.content.d.ClientAccount.ShortAccount.NombrePrets\u00a0}} oeuvre(s) en pr\u00eat :\r\n
\r\n{% for loan in data_sources.0.content.d.ClientAccount.Loans\u00a0%}\r\n {{\u00a0loan.DisplayName\u00a0}} - {{ loan.SearchItemAdapter.Resource.Crtr }} {% if loan.IsLate %}(en retard){% endif %} \r\n{% endfor %}\r\n \r\n\r\n\r\nVous avec actuellement {{ data_sources.0.content.d.ClientAccount.ShortAccount.NombreDemandeReservations }} oeuvre(s) en r\u00e9servation\r\n
\r\n\r\n{% if data_sources.0.content.d.ClientAccount.ShortAccount.NombreMessages %}\r\nVous avez {{\u00a0data_sources.0.content.d.ClientAccount.ShortAccount.NombreMessages }}
\r\n{% else %}\r\nVous n'avez pas de message
\r\n{% endif %}\r\n\r\nCliquer ici pour vous connecter sur le site des m\u00e9diath\u00e8ques.
\r\n{% else %}\r\n\r\nVous n'avez actuellement pas de compte m\u00e9diath\u00e8que raccord\u00e9 ou votre compte n'est plus valide.
\r\n\r\nCliquer ici pour raccorder votre compte m\u00e9diath\u00e8que
\r\n\r\n{% endif %}",
- "limit": 10,
- "refresh": 1
- }
-},
-{
- "pk": 2575,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "{% if data_sources.0.content.d.ClientAccount.ShortAccount %}\r\nVotre carte d'abonnement num\u00e9ro {{\u00a0data_sources.0.content.d.ClientAccount.Identity.BarCode }} est valable jusqu'au {{\u00a0data_sources.0.content.d.ClientAccount.Identity.ExpirationDate }}.
\r\n\r\nVous avez actuellement {{ data_sources.0.content.d.ClientAccount.ShortAccount.NombrePrets\u00a0}} oeuvre(s) en pr\u00eat :\r\n
\r\n{% for loan in data_sources.0.content.d.ClientAccount.Loans\u00a0%}\r\n {{\u00a0loan.DisplayName\u00a0}} - {{ loan.SearchItemAdapter.Resource.Crtr }} {% if loan.IsLate %}(en retard){% endif %} \r\n{% endfor %}\r\n \r\n\r\n\r\nVous avec actuellement {{ data_sources.0.content.d.ClientAccount.ShortAccount.NombreDemandeReservations }} oeuvre(s) en r\u00e9servation\r\n
\r\n\r\n{% if data_sources.0.content.d.ClientAccount.ShortAccount.NombreMessages %}\r\nVous avez {{\u00a0data_sources.0.content.d.ClientAccount.ShortAccount.NombreMessages }}
\r\n{% else %}\r\nVous n'avez pas de message
\r\n{% endif %}\r\n\r\nCliquer ici pour vous connecter sur le site des m\u00e9diath\u00e8ques.
\r\n{% else %}\r\n\r\nVous n'avez actuellement pas de compte m\u00e9diath\u00e8que raccord\u00e9 ou votre compte n'est plus valide.
\r\n\r\nCliquer ici pour raccorder votre compte m\u00e9diath\u00e8que
\r\n\r\n{% endif %}",
- "limit": 10,
- "refresh": 1
- }
-},
-{
- "pk": 2690,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "\r\n{% for data in data_sources.0.content reversed %}\r\n{{data.title}} \r\n{% endfor %}\r\n ",
- "limit": 10,
- "refresh": 3
- }
-},
-{
- "pk": 2691,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "{% with user_info=data_sources.0.content %}\r\n{% if user_info %}\r\n {% if user_info.user_admin_access %}\r\n Administration \r\n {% elif user_info.user_backoffice_access %}\r\n Back office \r\n {% endif %}\r\n{% endif %}\r\n{% endwith %}",
- "limit": 10,
- "refresh": 600
- }
-},
-{
- "pk": 2693,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "",
- "limit": 10,
- "refresh": 3600
- }
-},
-{
- "pk": 2703,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "{% with user_info=data_sources.0.content %}\r\n{% if user_info %}\r\n {% if user_info.user_admin_access %}\r\n Administration \r\n {% elif user_info.user_backoffice_access %}\r\n Back office \r\n {% endif %}\r\n{% endif %}\r\n{% endwith %}",
- "limit": 10,
- "refresh": 600
- }
-},
-{
- "pk": 2705,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "",
- "limit": 10,
- "refresh": 3600
- }
-},
-{
- "pk": 2710,
- "model": "data_source_plugin.datasourceplugin",
- "fields": {
- "template_source": "\r\n{% for data in data_sources.0.content reversed %}\r\n{{data.title}} \r\n{% endfor %}\r\n ",
- "limit": 10,
- "refresh": 3
- }
-},
-{
- "pk": 602,
- "model": "a2_service_list_plugin.a2servicelistplugin",
- "fields": {}
-},
-{
- "pk": 2688,
- "model": "feed_plugin.showuserfeed",
- "fields": {
- "limit": 5,
- "timeout": 60
- }
-},
-{
- "pk": 2708,
- "model": "feed_plugin.showuserfeed",
- "fields": {
- "limit": 5,
- "timeout": 60
- }
-},
-{
- "pk": 3,
- "model": "feed_plugin.feed",
- "fields": {
- "url": "https://www.facebook.com/feeds/page.php?format=rss20&id=132492983441286",
- "name": "Facebook SGMAP",
- "color_hex": "dbc82c",
- "css_classes": "facebook"
- }
-},
-{
- "pk": 4,
- "model": "feed_plugin.feed",
- "fields": {
- "url": "http://www.modernisation.gouv.fr/rss.xml",
- "name": "Flux RSS SGMAP",
- "color_hex": "dbc82c",
- "css_classes": ""
- }
-},
-{
- "pk": 5,
- "model": "feed_plugin.feed",
- "fields": {
- "url": "http://www.cnil.fr/rss-cnil/",
- "name": "Flux RSS CNIL",
- "color_hex": "",
- "css_classes": ""
- }
-},
-{
- "pk": 1,
- "model": "idp.attributepolicy",
- "fields": {
- "filter_source_of_filtered_attributes": false,
- "name": "Default",
- "ask_consent_attributes": false,
- "output_namespace": "Default",
- "allow_attributes_selection": false,
- "enabled": true,
- "output_name_format": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri",
- "source_filter_for_sso_from_push_sources": [
- 1
- ],
- "forward_attributes_from_push_sources": false,
- "map_attributes_from_push_sources": false,
- "attribute_filter_for_sso_from_push_sources": null,
- "attribute_list_for_sso_from_pull_sources": 2,
- "map_attributes_of_filtered_attributes": false,
- "send_error_and_no_attrs_if_missing_required_attrs": false
- }
-},
-{
- "pk": 1,
- "model": "attribute_aggregator.attributeitem",
- "fields": {
- "source": 1,
- "required": false,
- "attribute_name": "cn",
- "output_name_format": "urn:oasis:names:tc:SAML:2.0:attrname-format:basic",
- "output_namespace": "Default"
- }
-},
-{
- "pk": 2,
- "model": "attribute_aggregator.attributeitem",
- "fields": {
- "source": 1,
- "required": false,
- "attribute_name": "email",
- "output_name_format": "urn:oasis:names:tc:SAML:2.0:attrname-format:basic",
- "output_namespace": "Default"
- }
-},
-{
- "pk": 3,
- "model": "attribute_aggregator.attributeitem",
- "fields": {
- "source": 1,
- "required": false,
- "attribute_name": "role",
- "output_name_format": "urn:oasis:names:tc:SAML:2.0:attrname-format:basic",
- "output_namespace": "Default"
- }
-},
-{
- "pk": 4,
- "model": "attribute_aggregator.attributeitem",
- "fields": {
- "source": 1,
- "required": false,
- "attribute_name": "gn",
- "output_name_format": "urn:oasis:names:tc:SAML:2.0:attrname-format:basic",
- "output_namespace": "Default"
- }
-},
-{
- "pk": 5,
- "model": "attribute_aggregator.attributeitem",
- "fields": {
- "source": 1,
- "required": false,
- "attribute_name": "sn",
- "output_name_format": "urn:oasis:names:tc:SAML:2.0:attrname-format:basic",
- "output_namespace": "Default"
- }
-},
-{
- "pk": 2,
- "model": "attribute_aggregator.attributelist",
- "fields": {
- "attributes": [
- 1,
- 2,
- 3,
- 4,
- 5
- ],
- "name": "Profile"
- }
-},
-{
- "pk": 1,
- "model": "attribute_aggregator.attributesource",
- "fields": {
- "namespace": "Default",
- "name": "USER_PROFILE"
- }
-}
-]
diff --git a/portail_citoyen2/forms.py b/portail_citoyen2/forms.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/locale/fr/LC_MESSAGES/django.po b/portail_citoyen2/locale/fr/LC_MESSAGES/django.po
deleted file mode 100644
index 26f784e..0000000
--- a/portail_citoyen2/locale/fr/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,72 +0,0 @@
-# Translation of portail-citoyen strings
-# Copyright (C) 2013 Entr'ouvert
-# This file is distributed under the same license as the portail-citoyen package.
-# Benjamin Dauvergne , 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: portail_citoyen2 0.1.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-03-26 15:15+0100\n"
-"PO-Revision-Date: 2014-03-26 15:15+0100\n"
-"Last-Translator: Benjamin Dauvergne \n"
-"Language: fr\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_plugins.py:26
-msgid "Modify"
-msgstr "Modifier"
-
-#: dashboard.py:12
-msgid "Contents"
-msgstr "Contenus"
-
-#: dashboard.py:21
-msgid "Announces"
-msgstr "Annonces"
-
-#: dashboard.py:28 dashboard.py:63
-msgid "Recent Actions"
-msgstr "Actions récentes"
-
-#: dashboard.py:32
-msgid "Support"
-msgstr ""
-
-#: dashboard.py:35
-msgid "Project site"
-msgstr "Site du projet"
-
-#: dashboard.py:40
-msgid "Report a bug"
-msgstr "Reporter un bug"
-
-#: models.py:17
-#, python-format
-msgid ""
-"Required, %s characters or fewer. Only letters, numbers, and @, ., +, -, or "
-"_ characters."
-msgstr ""
-
-#: settings.py:45
-msgid "French"
-msgstr "Français"
-
-#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:19
-msgid "Citizen portal administration"
-msgstr "Administration du portail citoyen"
-
-#: templates/admin/base_site.html:17
-msgid "Administration portal"
-msgstr "Portail d'administration"
-
-#: templates/portail_citoyen/form.html:7
-msgid "Submit"
-msgstr "Envoyer"
-
-#: templates/portail_citoyen/form.html:9
-msgid "Back"
-msgstr "Retour"
diff --git a/portail_citoyen2/menu.py b/portail_citoyen2/menu.py
deleted file mode 100644
index 032c3a7..0000000
--- a/portail_citoyen2/menu.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from admin_tools.menu import Menu
-
-class CustomMenu(Menu):
- pass
diff --git a/portail_citoyen2/migrations/0001_initial.py b/portail_citoyen2/migrations/0001_initial.py
deleted file mode 100644
index 68011a8..0000000
--- a/portail_citoyen2/migrations/0001_initial.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- 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):
- pass
-
- def backwards(self, orm):
- pass
-
- models = {
-
- }
-
- complete_apps = ['portail_citoyen2']
\ No newline at end of file
diff --git a/portail_citoyen2/migrations/__init__.py b/portail_citoyen2/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/models.py b/portail_citoyen2/models.py
deleted file mode 100644
index 7dcfad9..0000000
--- a/portail_citoyen2/models.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from django.core.validators import MaxLengthValidator
-from django.utils.translation import ugettext as _
-from django.db.models.signals import class_prepared
-
-MAX_USERNAME_LENGTH = 255
-
-def longer_username_signal(sender, *args, **kwargs):
- if (sender.__name__ == "User" and
- sender.__module__ == "django.contrib.auth.models"):
- patch_user_model(sender)
-class_prepared.connect(longer_username_signal)
-
-def patch_user_model(model):
- field = model._meta.get_field("username")
-
- field.max_length = MAX_USERNAME_LENGTH
- field.help_text = _("Required, %s characters or fewer. Only letters, "
- "numbers, and @, ., +, -, or _ "
- "characters." % MAX_USERNAME_LENGTH)
-
- # patch model field validator because validator doesn't change if we change
- # max_length
- for v in field.validators:
- if isinstance(v, MaxLengthValidator):
- v.limit_value = MAX_USERNAME_LENGTH
-
-from django.contrib.auth.models import User
-
-# https://github.com/GoodCloud/django-longer-username/issues/1
-# django 1.3.X loads User model before class_prepared signal is connected
-# so we patch model after it's prepared
-
-# check if User model is patched
-if User._meta.get_field("username").max_length != MAX_USERNAME_LENGTH:
- patch_user_model(User)
diff --git a/portail_citoyen2/permission_hack.py b/portail_citoyen2/permission_hack.py
deleted file mode 100644
index 169ad55..0000000
--- a/portail_citoyen2/permission_hack.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import sys
-
-from django.contrib.auth.management import _get_all_permissions
-from django.contrib.auth.models import Permission
-from django.contrib.contenttypes.management import update_contenttypes
-from django.contrib.contenttypes.models import ContentType
-from django.db import models
-
-def create_proxy_permissions(app, created_models, verbosity, **kwargs):
- """
- Creates permissions for proxy models which are not created automatically
- by `django.contrib.auth.management.create_permissions`.
- see https://code.djangoproject.com/ticket/11154
- This method is inspired by `django.contrib.auth.managment.create_permissions`.
-
- Since we can't rely on `get_for_model' we must fallback to `get_by_natural_key`.
- However, this method doesn't automatically create missing `ContentType` so
- we must ensure all the model's `ContentType` are created before running this method.
- We do so by unregistering the `update_contenttypes` `post_syncdb` signal and calling
- it in here just before doing everything.
- """
- update_contenttypes(app, created_models, verbosity, **kwargs)
- app_models = models.get_models(app)
- # This will hold the permissions we're looking for as
- # (content_type, (codename, name))
- searched_perms = list()
- # The codenames and ctypes that should exist.
- ctypes = set()
- for model in app_models:
- opts = model._meta
- if opts.proxy:
- # We can't use `get_for_model` here since it doesn't return
- # the correct `ContentType` for proxy models.
- # see https://code.djangoproject.com/ticket/17648
- app_label, model = opts.app_label, opts.object_name.lower()
- ctype = ContentType.objects.get_by_natural_key(app_label, model)
- ctypes.add(ctype)
- for perm in _get_all_permissions(opts, ctype):
- searched_perms.append((ctype, perm))
-
- # Find all the Permissions that have a content_type for a model we're
- # looking for. We don't need to check for codenames since we already have
- # a list of the ones we're going to create.
- all_perms = set(Permission.objects.filter(
- content_type__in=ctypes,
- ).values_list(
- "content_type", "codename"
- ))
-
- objs = [
- Permission(codename=codename, name=name, content_type=ctype)
- for ctype, (codename, name) in searched_perms
- if (ctype.pk, codename) not in all_perms
- ]
- Permission.objects.bulk_create(objs)
- if verbosity >= 2:
- for obj in objs:
- sys.stdout.write("Adding permission '%s'" % obj)
-
-models.signals.post_syncdb.connect(create_proxy_permissions)
-# see `create_proxy_permissions` docstring to understand why we unregister
-# this signal handler.
-models.signals.post_syncdb.disconnect(update_contenttypes)
diff --git a/portail_citoyen2/settings.py b/portail_citoyen2/settings.py
deleted file mode 100644
index 4f881cd..0000000
--- a/portail_citoyen2/settings.py
+++ /dev/null
@@ -1,320 +0,0 @@
-from django.core.exceptions import ImproperlyConfigured
-
-import os
-import logging.handlers
-
-gettext_noop = lambda s: s
-# Python dotted path to the WSGI application used by Django's runserver.
-WSGI_APPLICATION = 'portail_citoyen2.wsgi.application'
-DEBUG = 'DEBUG' in os.environ
-DEBUG_PROPAGATE_EXCEPTIONS = 'DEBUG_PROPAGATE_EXCEPTIONS' in os.environ
-TEMPLATE_DEBUG = DEBUG
-
-PROJECT_PATH = os.path.join(os.path.dirname(__file__))
-PROJECT_NAME = 'portail-citoyen2'
-
-ADMINS = ()
-if 'ADMINS' in os.environ:
- ADMINS = filter(None, os.environ.get('ADMINS').split(':'))
- ADMINS = [ admin.split(';') for admin in ADMINS ]
- for admin in ADMINS:
- assert len(admin) == 2, 'ADMINS setting must be a colon separated list of name and emails separated by a semi-colon'
- assert '@' in admin[1], 'ADMINS setting pairs second value must be emails'
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'ENGINE': os.environ.get('DATABASE_ENGINE', 'django.db.backends.sqlite3'),
- 'NAME': os.environ.get('DATABASE_NAME', os.path.join(PROJECT_PATH, '..', PROJECT_NAME + '.db')),
- 'USER': os.environ.get('DATABASE_USER', ''),
- 'PASSWORD': os.environ.get('DATABASE_PASSWORD', ''),
- 'HOST': os.environ.get('DATABASE_HOST', ''),
- 'PORT': os.environ.get('DATABASE_PORT', '')
- }
-}
-
-# Hey Entr'ouvert is in France !!
-TIME_ZONE = 'Europe/Paris'
-LANGUAGE_CODE = 'fr'
-SITE_ID = 1
-USE_I18N = True
-USE_TZ = True
-
-LANGUAGES = (
- ('fr', gettext_noop('French')),
-)
-USE_L10N = True
-
-# Static files
-
-STATIC_ROOT = os.environ.get('STATIC_ROOT', '/var/lib/%s/static' % PROJECT_NAME)
-STATIC_URL = os.environ.get('STATIC_URL', '/static/')
-MEDIA_ROOT = os.environ.get('MEDIA_ROOT', '/var/lib/%s/media' % PROJECT_NAME)
-MEDIA_URL = os.environ.get('MEDIA_URL', '/media/')
-
-# passerelle address & apikey
-PASSERELLE_URL = os.environ.get('PASSERELLE_URL', '')
-PASSERELLE_APIKEY = os.environ.get('PASSERELLE_APIKEY', '')
-
-if 'STATICFILES_DIRS' in os.environ:
- STATICFILES_DIRS = os.environ['STATICFILES_DIRS'].split(':')
-
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
-)
-
-TEMPLATE_CONTEXT_PROCESSORS = (
- 'django.core.context_processors.request',
- 'django.contrib.auth.context_processors.auth',
- 'allauth.account.context_processors.account',
- 'allauth.socialaccount.context_processors.socialaccount',
- 'django.core.context_processors.debug',
- 'django.core.context_processors.i18n',
- 'django.core.context_processors.media',
- 'django.core.context_processors.static',
- 'django.core.context_processors.tz',
- 'django.contrib.messages.context_processors.messages',
- 'cms.context_processors.media',
- 'sekizai.context_processors.sekizai',
- 'portail_citoyen2.context_processors.template_vars',
-)
-
-MIDDLEWARE_CLASSES = (
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.http.ConditionalGetMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.middleware.locale.LocaleMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.transaction.TransactionMiddleware',
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- 'cms.middleware.page.CurrentPageMiddleware',
- 'cms.middleware.user.CurrentUserMiddleware',
- 'cms.middleware.toolbar.ToolbarMiddleware',
- 'entrouvert.djommon.middleware.VersionMiddleware',
-)
-
-ROOT_URLCONF = 'portail_citoyen2.urls'
-
-TEMPLATE_DIRS = ['/var/lib/%s/templates' % PROJECT_NAME, os.path.join(PROJECT_PATH, 'templates')]
-if os.environ.get('TEMPLATE_DIRS'):
- TEMPLATE_DIRS = os.environ['TEMPLATE_DIRS'].split(':') + TEMPLATE_DIRS
-
-INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'admin_tools',
- 'admin_tools.theming',
- 'admin_tools.menu',
- 'admin_tools.dashboard',
- 'django.contrib.admin',
- 'south',
- 'mptt',
- 'sekizai',
- 'cms',
- 'menus',
- 'djangocms_text_ckeditor',
- # 'cmsplugin_text_wrapper',
- # 'cms_ajax_text_plugin',
- 'passerelle_register_plugin',
- 'feed_plugin',
- 'data_source_plugin',
- 'allauth',
- 'allauth.account',
- 'allauth.socialaccount',
- # ... include the providers you want to enable:
- 'portail_citoyen2.allauth_authentic2',
- 'portail_citoyen2',
-)
-
-AUTHENTICATION_BACKENDS = (
- 'django.contrib.auth.backends.ModelBackend',
- 'allauth.account.auth_backends.AuthenticationBackend',
-)
-# auth and allauth settings
-LOGIN_REDIRECT_URL = os.environ.get('LOGIN_REDIRECT_URL', '/')
-LOGOUT_URL = os.environ.get('LOGOUT_URL', '/accounts/logout/')
-LOGIN_URL = os.environ.get('LOGIN_URL', '/accounts/authentic2/login/?process=login')
-SOCIALACCOUNT_QUERY_EMAIL = True
-SOCIALACCOUNT_PROVIDERS = {
- 'authentic2': {
- 'URL': 'http://localhost:9000/idp/oauth2/',
- 'SCOPE': ['read', 'write'],
- },
-}
-SOCIALACOUNT_AUTO_SIGNUP = True
-ACCOUNT_LOGOUT_ON_GET = True
-ACCOUNT_UNIQUE_EMAIL = False
-
-MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
-
-# sessions
-SESSION_EXPIRE_AT_BROWSER_CLOSE = True
-SESSION_COOKIE_NAME = 'portail-citoyen'
-SESSION_COOKIE_PATH = os.environ.get('SESSION_COOKIE_PATH', '/')
-SESSION_COOKIE_SECURE = 'SESSION_COOKIE_SECURE' in os.environ
-
-# email settings
-EMAIL_HOST = os.environ.get('EMAIL_HOST', 'localhost')
-EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER', '')
-EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD', '')
-EMAIL_PORT = int(os.environ.get('EMAIL_PORT', 25))
-EMAIL_SUBJECT_PREFIX = os.environ.get('EMAIL_SUBJECT_PREFIX', '[Portail citoyen]')
-EMAIL_USE_TLS = 'EMAIL_USE_TLS' in os.environ
-SERVER_EMAIL = os.environ.get('SERVER_EMAIL', 'root@localhost')
-DEFAULT_FROM_EMAIL = os.environ.get('DEFAULT_FROM_EMAIL', 'ne-pas-repondre@portail-citoyen.fr')
-
-# web & network settings
-if 'ALLOWED_HOSTS' in os.environ:
- ALLOWED_HOSTS = os.environ['ALLOWED_HOSTS'].split(':')
-else:
- ALLOWED_HOSTS = ('127.0.0.1', 'localhost')
-USE_X_FORWARDED_HOST = 'USE_X_FORWARDED_HOST' in os.environ
-
-if 'INTERNAL_IPS' in os.environ:
- INTERNAL_IPS = os.environ['INTERNAL_IPS'].split(':')
-else:
- INTERNAL_IPS = ('127.0.0.1')
-
-SECRET_KEY = os.environ.get('SECRET_KEY', '0!=(1kc6kri-ui+tmj@mr+*0bvj!(p*r0duu2n=)7@!p=pvf9n')
-
-
-SAML_METADATA_ROOT = 'metadata'
-
-LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': True,
- 'formatters': {
- 'syslog': {
- 'format': 'portail-citoyen(pid=%(process)d) %(levelname)s %(name)s: %(message)s',
- },
- 'syslog_debug': {
- 'format': 'portail-citoyen(pid=%(process)d) %(levelname)s %(asctime)s t_%(thread)s %(name)s: %(message)s',
- },
- },
- 'handlers': {
- 'syslog': {
- 'level': 'DEBUG',
- 'class': 'entrouvert.logging.handlers.SysLogHandler',
- 'formatter': 'syslog_debug' if DEBUG else 'syslog',
- 'facility': logging.handlers.SysLogHandler.LOG_LOCAL0,
- 'address': '/dev/log',
- 'max_length': 999,
- },
- 'mail_admins': {
- 'level': 'ERROR',
- 'class': 'django.utils.log.AdminEmailHandler',
- 'filters': [],
- },
- 'console': {
- 'class': 'logging.StreamHandler',
- 'formatter': 'syslog_debug',
- 'level': 'DEBUG',
- },
- },
- 'loggers': {
- 'requests': {
- 'handlers': ['mail_admins','syslog'],
- 'level': 'ERROR',
- 'propagate': False,
- },
- 'portail_citoyen2': {
- 'handlers': ['mail_admins','syslog'],
- 'level': 'DEBUG' if DEBUG else 'INFO',
- 'propagate': False,
- },
- 'django': {
- 'handlers': ['mail_admins','syslog'],
- 'level': 'DEBUG' if DEBUG else 'INFO',
- 'propagate': False,
- },
- 'django.db': {
- 'handlers': ['mail_admins','syslog'],
- 'level': 'INFO',
- 'propagate': False,
- },
- '': {
- 'handlers': ['mail_admins','syslog'],
- 'level': 'DEBUG' if DEBUG else 'INFO',
- 'propagate': True,
- },
- }
-}
-SOUTH_TESTS_MIGRATE = False
-
-# Admin tools
-ADMIN_TOOLS_INDEX_DASHBOARD = 'portail_citoyen2.dashboard.CustomIndexDashboard'
-ADMIN_TOOLS_APP_INDEX_DASHBOARD = 'portail_citoyen2.dashboard.CustomAppIndexDashboard'
-ADMIN_TOOLS_MENU = 'portail_citoyen2.menu.CustomMenu'
-ADMIN_TOOLS_THEMING_CSS = 'portail_citoyen/css/admin.css'
-
-
-# cms settings
-CMS_TEMPLATES = (
- ('portail_citoyen/base_two_columns.html', 'Canevas sur deux colonnes'),
- ('portail_citoyen/base_one_column.html', 'Canevas sur une colonne'),
- ('portail_citoyen/base_help.html', 'Canevas de l\'aide'),
-)
-if 'CMS_TEMPLATES' in os.environ:
- CMS_TEMPLATES = map(lambda x: x.split(';'),
- os.environ('CMS_TEMPLATES').split(':'))
-CMS_REDIRECTS = True
-CMS_TEXT_WRAPPERS = (
- ('block', {
- 'render_template': 'portail_citoyen/block.html',
- 'extra_context': {},
- }),
-)
-CMS_TEXT_WRAPPER_CLASSES = []
-# necessary for plugin displaying a form to have a fresh csrftoken
-CMS_PLACEHOLDER_CACHE = False
-CMS_PAGE_CACHE = False
-
-# Do we use memcached ?
-if 'USE_MEMCACHED' in os.environ:
- CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
- 'LOCATION': '127.0.0.1:11211',
- 'KEY_PREFIX': 'portail-citoyen',
- }
- }
- SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
-
-
-if 'USE_DEBUG_TOOLBAR' in os.environ:
- try:
- import debug_toolbar
- MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
- INSTALLED_APPS += ('debug_toolbar',)
- DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False}
- except ImportError:
- print "Debug toolbar missing, not loaded"
-
-# extract any key starting with setting
-for key in os.environ:
- if key.startswith('SETTING_'):
- setting_key = key[len('SETTING_'):]
- value = os.environ[key]
- try:
- value = int(value)
- except ValueError:
- pass
- globals()[setting_key] = value
-
-# try to import local_settings.py (useless, in theory)
-try:
- from local_settings import *
-except ImportError, e:
- if 'local_settings' in e.args[0]:
- pass
-
-if not CMS_TEMPLATES:
- raise ImproperlyConfigured('You must define CMS_TEMPLATES')
diff --git a/portail_citoyen2/static/portail_citoyen/css/Museo500-Regular.otf b/portail_citoyen2/static/portail_citoyen/css/Museo500-Regular.otf
deleted file mode 100644
index da52e9c..0000000
Binary files a/portail_citoyen2/static/portail_citoyen/css/Museo500-Regular.otf and /dev/null differ
diff --git a/portail_citoyen2/static/portail_citoyen/css/Museo_Slab.otf b/portail_citoyen2/static/portail_citoyen/css/Museo_Slab.otf
deleted file mode 100644
index 84ceaca..0000000
Binary files a/portail_citoyen2/static/portail_citoyen/css/Museo_Slab.otf and /dev/null differ
diff --git a/portail_citoyen2/static/portail_citoyen/css/admin.css b/portail_citoyen2/static/portail_citoyen/css/admin.css
deleted file mode 100644
index ff0b12f..0000000
--- a/portail_citoyen2/static/portail_citoyen/css/admin.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * theming styles
- *
- */
-
-#header {
- background: url(/static/admin_tools/images/admin-tools.png) 0 0 repeat-x;
-}
-
-#header #branding h1 {
- margin: 0;
- padding: 5px 10px;
-/* text-indent: -9999px;
- background: transparent url(../images/logo-portail-citoyen.png) 10px 5px no-repeat;
- height: 31px;
- width: 93px; */
-}
-
-div.breadcrumbs {
- display: block;
- padding: 10px 15px;
- border: 0;
- background-position: 0 -8px;
- border-bottom: 1px solid #ededed;
-}
-
-div.breadcrumbs a {
- display: inline;
-}
-
-.selector {
- width: 980px;
- float: left;
-}
-
-.selector select {
- width: 470px;
- height: 17.2em;
-}
-
-.selector-available, .selector-chosen {
- float: left;
- width: 470px;
- text-align: center;
- margin-bottom: 5px;
-}
diff --git a/portail_citoyen2/static/portail_citoyen/css/button_connexion.gif b/portail_citoyen2/static/portail_citoyen/css/button_connexion.gif
deleted file mode 100644
index 0c563f4..0000000
Binary files a/portail_citoyen2/static/portail_citoyen/css/button_connexion.gif and /dev/null differ
diff --git a/portail_citoyen2/static/portail_citoyen/css/e54.png b/portail_citoyen2/static/portail_citoyen/css/e54.png
deleted file mode 100644
index 504e266..0000000
Binary files a/portail_citoyen2/static/portail_citoyen/css/e54.png and /dev/null differ
diff --git a/portail_citoyen2/static/portail_citoyen/css/style.css b/portail_citoyen2/static/portail_citoyen/css/style.css
deleted file mode 100644
index 340459a..0000000
--- a/portail_citoyen2/static/portail_citoyen/css/style.css
+++ /dev/null
@@ -1,994 +0,0 @@
-@font-face {
- font-family: 'Museo500';
- src: url(Museo500-Regular.otf);
- font-weight: normal;
- font-style: normal;
-}
-
-@font-face {
- font-family: 'MuseoSlab';
- src: url(Museo_Slab.otf);
- font-weight: normal;
- font-style: normal;
-}
-
-html, body { margin: 0; font-family: arial, sans-serif; font-size: 13px;}
-a { text-decoration: none; }
-a:hover { text-decoration: underline; }
-h1, h2, h3 { margin-top: 0; }
-
-div#single-title, #nav,
-#top, h2 {
- font-family: MuseoSlab, sans-serif;
- font-weight: normal;
-}
-
-h3, h4 {
- font-family: Museo500, sans-serif;
- font-weight: normal;
-}
-
-
-
-a {
- -webkit-transition: color 200ms ease-out;
-}
-
-/* layout */
-
-body {
- overflow-x: hidden;
- background: white;
-}
-
-div#page {
- width: 100%;
-}
-
-div#header {
- background-color: #ffffff;
- width: 100%;
- margin: 0 0 0 0;
- position: absolute;
- top: 0px;
- margin-left: -500px;
- z-index: 0;
-
-}
-
-div#top {
- height: 456px;
- width: 1500px;
- margin: 0 auto 0 auto;
- margin-left: 50%;
-}
-
-div#top h1 {
- width: 10em;
- text-align: center;
- padding-top: 3em;
- padding-left: 2em;
- margin-left: 20px;
- font-size: 120%;
- font-weight: bold;
-}
-
-div#top h1 a {
- color: white;
- text-shadow: #6374AB 0px 0px 3px;
-}
-
-div#top a img {
- border: 0;
-}
-
-div#main-content-wrapper {
- position: relative;
- z-index: 100;
- width: 1000px;
- margin: 200px auto 0px auto;
-}
-
-div#main-content {
- margin: 0;
- min-height: 300px;
-}
-
-div#footer {
- clear: both;
- background: white;
- padding: 0px;
- width: 1000px;
- margin: 10px auto 0 auto;
- position: relative;
-}
-
-p#legal {
- font-size: small;
- color: #666;
- margin: 0;
- margin-top: 5em;
- font-size: 70%;
- display: inline-block;
- padding-top: 5px;
- border-top: 1px solid #666;
-}
-
-#content {
- position: relative;
- margin:0;
- color: rgb(58, 58, 58);
-}
-
-div#content a {
- color: #37a7da;
-}
-
-div#content a:hover {
- text-decoration: underline;
-}
-
-#menu {
- font-size: 130%;
- margin-top: -1px;
-}
-
-#menu ul {
- list-style: none;
- margin: 0;
- padding: 10px 0 32px 0;
- -webkit-border-top-right-radius: 5px;
- -moz-border-radius-topright: 5px;
- border-top-right-radius: 5px;
-}
-
-#menu li {
- display: inline;
- margin: 0px 10px 0 0;
- padding: 5px;
- background: #37a7da;
- border: 5px solid transparent;
- border-width: 2px 5px;
- -webkit-transition: all .2s ease-in-out;
- -moz-transition: all .2s ease-in-out;
-}
-
-#menu li a {
- color: white;
- text-transform: uppercase;
- white-space: pre;
-}
-
-#menu li:hover {
- background-color: #f4bc03;
- border-color: #f4bc03;
-}
-
-#menu li:hover a {
- text-decoration: none;
-}
-
-#menu li.selected, #menu li.ancestor {
- background: #515151;
- border-color: #515151;
-}
-
-#menu li.selected a {
- color: white;
-}
-
-#left {
- float: left;
- width: 49.5%;
-}
-
-#right {
- float: right;
- width: 49.5%;
-}
-
-br.clear {
- clear: both;
-}
-
-#error-404, #error-500, #content .block, #password-changed {
- background: white;
- font-size: 110%;
- margin-bottom: 1em;
-}
-
-#content .block h2 {
- background: transparent;
- font-weight: normal;
- color: white;
- text-transform: uppercase;
- padding: 6px 10px 6px 10px;
- color: #333;
- font-size: 130%;
- cursor: default; /* someday, perhaps, cursor: move */
- border-bottom: 1px solid #ddd;
-}
-
-#content .block h2.feeds {
- background-image: url(Picto-Bulle.png);
-}
-
-#content .block h2.newsletters {
- background-image: url(Picto-coeur.png);
-}
-
-#content .block h3,
-#content .block p {
- margin: 1ex 10px;
- padding-bottom: 1px;
-}
-
-#content .demarches ul,
-#content ul.mes-demarches {
- list-style: none;
- padding-left: 0px;
- margin: 0px;
-}
-
-#content .demarches ul {
- -webkit-column-count: 2;
- -moz-column-count: 2;
- column-count: 2;
-}
-
-#content ul.mes-demarches li,
-#content .demarches ul li {
- margin: 1ex 0 10px 1ex;
- padding-left: 10px;
- -webkit-column-break-inside: avoid;
- -moz-column-break-inside: avoid;
- column-break-inside: avoid;
-}
-
-#content .demarches .toutes-les-demarches {
- padding: 10px 0 10px 0;
- margin-left: 20px;
-}
-
-#content .toutes-les-demarches a {
- font-size: 130%;
-}
-
-#content .toutes-les-demarches a:before {
- content: "▹ ";
-}
-
-#commune-selector {
- margin-left: 5px;
- margin-bottom: 10px;
-}
-
-#content #futurs-demarches {
- overflow-y: hidden;
- margin: 5px;
- padding-bottom: 15px;
-}
-
-#content #futurs-demarches.selected {
- display: block;
-}
-
-div#single-title {
- border: 1px solid #a5a7aa;
- border-width: 1px 0px;
- font-size: 110%;
- text-align: center;
- padding: 10px 0;
-}
-
-body.narrow-page #main-content {
- background: white;
- margin-top: 0;
- padding: 10px 10px 0 10px;
-}
-
-body.narrow-page #main-content form div input {
- display: block;
- margin-left: 10px;
- margin-bottom: 2ex;
-}
-
-div#welcome {
- text-align: justify;
- margin: 0 1em;
-}
-
-div#welcome h2 {
- margin: 1ex 0;
- font-size: 300%;
- background: transparent url(e54.png) left center no-repeat;
- padding-left: 70px;
- text-align: left;
- width: 150%;
-}
-
-div#welcome {
- float: left;
- width: 60%;
-}
-
-span.helptext {
- color: #666;
-}
-
-body.narrow-page div.right {
- width: 30%;
- float: right;
- margin: 1ex auto;
-}
-
-body.narrow-page div.right form {
- text-align: left;
- background: white;
- margin: 10px 10px;
- padding: 10px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- border: 1px solid #ccc;
- box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
- -moz-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
- -webkit-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
-
-}
-
-body.narrow-page div.right form div label {
- width: 14em;
- display: block;
- padding-top: 3px;
- color: #777;
-}
-
-body.narrow-page div.right form div input {
- width: 16em;
-}
-
-body.narrow-page div.right form div.form-field-required label:after {
- content: "";
-}
-
-body.narrow-page div.right form > input {
- display: block;
- margin: 1em auto 0 auto;
- background: #37a7da;
- color: white;
- border: none;
- padding: 3px 1em;
-}
-
-div.login-actions {
- text-align: center;
-}
-
-
-.region-header {
- width: 1000px;
- position: absolute;
- top: 0px;
-}
-
-#toplinks {
- background: #ffffff;
- position: relative;
- float: right;
- width: 250px;
- padding: 5px 5px 5px 5px;
-}
-
-#toplinks span {
- width: 100%;
- display: block;
- margin: 0;
- padding: 0;
- color: #888;
- background: url(button_connexion.gif) left center no-repeat;
- border: 1px solid #e9e9e9;
- line-height: 20px;
- height: 22px;
-}
-
-#toplinks a {
- color: #888;
- border: 1px solid transparent;
-}
-
-#toplinks a.logout {
- padding-left: 30px;
-}
-
-#toplinks a:hover {
- text-decoration: none;
- color: #222;
-}
-
-#toplinks a.restricted {
- color: white;
- float: right;
- padding: 0 1ex;
- border: 1px outset #888;
- background: #37a7da;
-}
-
-div#username {
- float: right;
- padding: 5px 5px 5px 5px;
- background: white;
- line-height: 20px;
- height: 22px;
- border: 1px solid white;
-}
-
-ul.newsList {
- list-style: none;
-}
-
-ul.newsList li.abonne {
- margin: 0;
- padding: 0;
-}
-
-.abonne {
- padding-left: 20px;
- background: transparent url(Validation.png) center left no-repeat;
-}
-
-.nonAbonne {
- padding-left: 20px;
- background: transparent url(Annulation.png) center left no-repeat;
-}
-
-/* page de profil */
-#my-informations {
- margin-bottom: 15px;
- padding: 0px;
-}
-
-#my-informations p {
- padding: 0 5px;
-}
-
-#my-informations select,
-#my-informations input {
- margin-left: 10px;
- display: block;
-}
-
-/* forms error reporting */
-
-.errorlist {
- list-style: none;
- padding-left: 0;
- margin-left: 0;
-}
-
-ul.errorlist li {
- display: block;
- color: #f44;
-}
-
-.form-field-required label:after {
- content: '*';
- color: #D90024;
-}
-
-ul.errorlist + p {
- margin-top: 0px;
-}
-
-
-
-.passerelle-register-plugin input + label {
- background: transparent url(Annulation.png) center left no-repeat;
-}
-
-.passerelle-register-plugin input:checked + label {
- background: transparent url(Validation.png) center left no-repeat;
-}
-
-.passerelle-register-plugin td input {
- display: none
-}
-.passerelle-register-plugin td label {
- padding-left: 2em;
-}
-
-div.block form {
- padding: 0 1ex;
-}
-
-table.announces {
- width: 100%;
- margin-bottom: 1em;
-}
-
-table.announces thead td {
- font-weight: bold;
-}
-
-table.announces thead th {
- width: 30%;
-}
-
-table.announces tbody td {
- text-align: center;
-}
-
-table.announces tbody th {
- width: 35%;
- text-align: left;
- font-weight: normal;
-}
-
-#agglolinks {
- position: absolute;
- right: 0;
- top: -140px;
-}
-
-#agglolinks > a, #agglolinks > span > a {
- width: 130px;
-}
-
-#agglolinks a, #agglolinks span {
- display: inline-block;
- margin-left: 10px;
- color: white;
- text-transform: uppercase;
- text-align: center;
- padding: 5px 5px;
- font-size: 16px;
-}
-
-#agglolinks a.agglo-mon-agglo, #agglolinks a.agglo-mes-e-services {
- background: #37a7da;
-}
-
-#agglolinks a.agglo-connaitre {
- background: #d90024;
-}
-
-#agglolinks a.agglo-vivre {
- background: #1f4791;
-}
-
-#agglolinks a.agglo-entreprendre {
- background: #a3d117;
-}
-
-#agglolinks span.agglo-mes-e-services > a {
- background: #37a7da;
- width: 150px;
-}
-
-ul.agglo-autres-services-menu {
- display: none;
- position: relative;
- padding: 0px;
- margin: 10px;
- margin-top: 0px;
- width: 160px;
- z-index: 10;
- background: rgba(246, 132, 35, 0.5);
- border-bottom: 5px solid #37a7da;
-}
-
-ul.agglo-autres-services-menu li {
- list-style: none;
- background: #FFA824;
- opacity: 0.9;
- -webkit-transition: all .2s ease-in-out;
- -moz-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
- border-left: 5px solid #37a7da;
- border-right: 5px solid #37a7da;
-}
-
-ul.agglo-autres-services-menu li:hover {
- background: #f4bc03;
- opacity: 1.0;
-}
-
-#agglolinks ul.agglo-autres-services-menu li a {
- display: block;
- margin-left: 0;
- -webkit-transition: all .2s ease-in-out;
- -moz-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
- overflow: hidden;
- white-space: nowrap;
-}
-
-#agglolinks ul.agglo-autres-services-menu li a:hover {
- letter-spacing: 1px;
- font-weight: bold;
-}
-
-#agglolinks span.agglo-mes-e-services:hover ul.agglo-autres-services-menu {
- float: right;
- position: absolute;
- display: block;
-}
-
-.chapeau {
- font-style: italic;
- font-size: 110%;
-}
-
-/* mon compte */
-#my-informations-form {
- width: 90%;
- padding-bottom: 1em;
-}
-
-#my-informations-form input[type~=text] {
- width: 100%;
-}
-
-#id_edit-profile-email_wrap, #id_edit-profile-address_wrap {
- clear: both;
-}
-
-#id_edit-profile-first_name_wrap, #id_edit-profile-phone_wrap, #id_edit-profile-postal_code_wrap {
- width: 45%;
- float: left;
-}
-
-#id_edit-profile-last_name_wrap, #id_edit-profile-mobile_wrap, #id_edit-profile-city_wrap {
- width: 45%;
- float: right;
-}
-
-/* pied de page */
-#footer-menu {
- position: absolute;
- display: block;
- top: 20px;
- left: 20px;
- width: 435px;
- list-style: none;
- margin: 0;
- padding: 0;
- text-align: left;
-}
-
-.footer-menu-leaf {
- display: inline;
- margin: 0;
- padding: 0;
- padding-right: 20px;
- padding-bottom: 20px;
- float: left;
-}
-
-.footer-menu-leaf-link, .footer-menu-leaf-link:hover {
- display: block;
- width: 125px;
- height: 26px;
- line-height: 26px;
- background: #ffffff;
- text-align: center;
- text-transform: uppercase;
- color: #515151;
- text-decoration: none;
- font-size: 14px;
-}
-
-.clear {
- clear: both;
-}
-
-#my-password {
- padding-bottom: 1ex;
-}
-
-#my-password p {
- font-weight: bold;
-}
-
-#my-password p a {
- color: inherit;
- padding: 1ex;
-}
-
-ul.show-user-feeds {
- padding-left: 2em;
-}
-
-ul.show-user-feeds li {
- list-style: disc;
- background: url(mediathk.png) left center no-repeat;
- min-height: 30px;
- padding-bottom: 4px;
-}
-
-ul.show-user-feeds li.aquarium { background-image: url(aquarium.png); }
-ul.show-user-feeds li.conservatoire { background-image: url(conservatoire.png); }
-ul.show-user-feeds li.ecolothk { background-image: url(ecolothk.png); }
-ul.show-user-feeds li.facebook { background-image: url(facebook.png); }
-ul.show-user-feeds li.lattara { background-image: url(lattara.png); }
-ul.show-user-feeds li.mediathk { background-image: url(mediathk.png); }
-ul.show-user-feeds li.opendata { background-image: url(opendata.png); }
-ul.show-user-feeds li.planet { background-image: url(planet.png); }
-
-#id_new_password1_help_text, #id_password1_help_text {
- font-style: italic;
- font-size: 90%;
- color: red;
-}
-
-/* saml post page */
-.post-redirect {
- background: white;
-}
-
-#messages {
- margin-left: 210px;
-}
-
-#messages ul {
- padding: 0;
- margin: 0;
- color: #333;
- list-style: none;
-}
-
-#messages li.warning {
-}
-
-#messages li.error {
-}
-
-#messages li.info {
-}
-
-/* registration form */
-img.captcha {
- float: left;
-}
-
-#id_captcha_1 {
- width: 13em;
-}
-
-
-/* pimping up */
-h1#logo img {
- -webkit-transition: all .2s ease-in-out;
- -moz-transition: all .2s ease-in-out;
-}
-
-h1#logo img:hover {
- /*
- -webkit-transform: scale(1.05);
- -moz-transform: scale(1.05);
- */
-}
-
-
-#nav {
- margin: 0 auto;
- padding: 0px 0;
- width: 180px;
- margin: 17px auto;
- font-size: 110%;
- float: left;
- position: relative;
- z-index: 1000;
-}
-
-#nav ul {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-#nav li {
- margin: 1ex 0;
- padding: 1ex;
- border: 1px solid #a5a7aa;
- border-width: 1px 0px;
- text-align: center;
-}
-
-#nav a {
- color: #404041;
- text-decoration: none;
-}
-
-#nav li.selected:after,
-#nav li.ancestor:after,
-#nav li a:hover,
-#nav li.selected a,
-#nav li.ancestor a {
- color: #e0007a;
-}
-
-
-div.block {
- text-align: left;
- background: white;
- margin: 10px 10px;
- padding: 10px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- border: 1px solid #ccc;
- box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
- -moz-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
- -webkit-box-shadow: 0px 2px 3px rgba(0, 0, 0, .4);
-}
-
-h2#welcome-title {
- margin-top: 2em;
- margin-bottom: 1em;
-}
-
-select,
-input[type="text"],
-input[type="password"] {
- border: 1px solid #aaa;
- background: white url(field-shade.png) top left repeat-x;
- padding: 1px;
- border-radius: 2px;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- color: black;
- -webkit-transition: background 200ms ease-out;
- display: block;
-}
-
-input[type="text"]:focus,
-input[type="password"]:focus {
- border: 1px solid #888;
- background: white;
-}
-
-div#registration {
- width: 40em;
- text-align: justify;
- margin: 2em auto;
-}
-
-div#registration form {
- margin: 2em 0;
-}
-
-div#registration label {
- display: block;
- width: 15em;
- float: left;
- text-align: right;
- padding-right: 1em;
- color: #777;
- padding-top: 0;
-}
-
-div#registration ul.errorlist {
- margin: 0;
- padding-left: 16em;
-}
-
-div#registration input[type="submit"] {
- margin-left: 17em;
-}
-
-
-
-#toplinks {
- background: #ffffff;
- position: absolute;
- top: 3em;
- right: 0;
- width: 40%;
- padding: 5px 5px 5px 5px;
-}
-
-#toplinks span {
- width: 100%;
- display: block;
- margin: 0;
- padding: 0;
- color: #888;
- background: url(button_connexion.gif) left center no-repeat;
- border: 1px solid #e9e9e9;
- line-height: 20px;
- height: 22px;
-}
-
-#toplinks span.logged-in {
- background: none;
- border: none;
- text-align: right;
-}
-
-#toplinks a {
- color: #888;
- border: 1px solid transparent;
-}
-
-#toplinks a:hover {
- text-decoration: none;
- color: #222;
-}
-
-#toplinks a.restricted {
- color: white;
- float: right;
- padding: 0.5ex 1ex;
- border: 1px outset #888;
- background: #672290;
- position: absolute;
- top: -3em;
- right: 3px;
-}
-
-
-#toplinks a.logout {
- background: url(button_connexion.gif) left center no-repeat;
- display: inline-block;
- padding: 1px;
- padding-left: 30px;
- border: 1px solid #e9e9e9;
- padding-right: 1em;
- margin-right: -2px;
-}
-
-#real-content {
- padding-left: 200px;
- text-align: justify;
- margin-top: 1em;
-}
-
-#help-content {
- padding-top: 10px;
-}
-
-#help-menu-content li.selected > a {
- color: #000;
- font-weight: bold;
-}
-
-ul.account-management-plugin {
- padding-left: 1em;
- margin: 0;
-}
-
-ul.account-management-plugin li {
- list-style-type: none;
-}
-
-.block form label {
- color: #777;
- padding-top: 1ex;
- display: block;
-}
-
-.block form select,
-.block form input[type="text"],
-.block form input[type="password"] {
- margin-left: 10px;
-}
-
-.block ul.feed-list {
- padding: 0;
- padding-left: 1em;
-}
-
-.block li.feed-list-item {
- list-style: none;
- padding: 0;
-}
-
-.block li.feed-list-item label {
- display: inline;
-}
-
-p.fullname {
- display: inline;
- margin-right: 1.5em;
-}
diff --git a/portail_citoyen2/static/portail_citoyen/img/logo.png b/portail_citoyen2/static/portail_citoyen/img/logo.png
deleted file mode 100644
index fb954dd..0000000
Binary files a/portail_citoyen2/static/portail_citoyen/img/logo.png and /dev/null differ
diff --git a/portail_citoyen2/templates/admin/base_site.html b/portail_citoyen2/templates/admin/base_site.html
deleted file mode 100644
index 5cd5f8b..0000000
--- a/portail_citoyen2/templates/admin/base_site.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{% extends "admin/base.html" %}
-{% load i18n admin_tools_menu_tags %}
-
-{% block title %}{{ title }} | {% trans 'Citizen portal administration' %}{% endblock %}
-
-{% block extrastyle %}
-{{ block.super }}
-{% if user.is_active and user.is_staff %}
-{% if not is_popup %}
-{% admin_tools_render_menu_css %}
-{% endif %}
-{% endif %}
-{% endblock %}
-
-{% block branding %}
-{% if PORTAIL_ADMIN_URL %}
-
-{% else %}
-{% trans 'Citizen portal administration' %}
-{% endif %}
-{% endblock %}
-
-{% block nav-global %}
-{% if user.is_active and user.is_staff %}
-{% if not is_popup %}
-{% admin_tools_render_menu %}
-{% endif %}
-{% endif %}
-{% endblock %}
diff --git a/portail_citoyen2/templates/base.html b/portail_citoyen2/templates/base.html
deleted file mode 100644
index 4e447a1..0000000
--- a/portail_citoyen2/templates/base.html
+++ /dev/null
@@ -1,80 +0,0 @@
-
-{% load menu_tags cms_tags sekizai_tags i18n portail_citoyen_tags staticfiles %}
-
-
-
-
- Compte Citoyen :: Démo :: {% page_attribute "page_title" %}
-
- {% render_block "css" %}
- {% block extra_scripts %}
- {% endblock %}
-
-
- {% cms_toolbar %}
-
-
-
-
-
Portail citoyen
-
- {% block menu %}
-
-
{% show_menu_below_id "top-page" 0 0 100 100 "portail_citoyen/top-menu.html" %}
-
- {% endblock %}
-
- {% block messages %}
- {% if messages %}
-
-
- {% for message in messages %}
- {{ message }}
- {% endfor %}
-
-
- {% endif %}
- {% endblock %}
-
-
-
- {% block content %}
- {% endblock %}
-
-
-
-
-
- {% render_block "js" %}
- {% if messages %}
-
- {% endif %}
-
-
diff --git a/portail_citoyen2/templates/portail_citoyen/base_help.html b/portail_citoyen2/templates/portail_citoyen/base_help.html
deleted file mode 100644
index 038b33b..0000000
--- a/portail_citoyen2/templates/portail_citoyen/base_help.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{% extends "base.html" %}
-{% load cms_tags %}
-{% load menu_tags %}
-
-{% block content %}
-
-
-
Utilisation du compte citoyen
-
-
-
{% page_attribute "page_title" %}
- {% block center %}
- {% placeholder "center" %}
- {% endblock %}
-
-
-
-
-{% endblock %}
diff --git a/portail_citoyen2/templates/portail_citoyen/base_one_column.html b/portail_citoyen2/templates/portail_citoyen/base_one_column.html
deleted file mode 100644
index 6b7d654..0000000
--- a/portail_citoyen2/templates/portail_citoyen/base_one_column.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% extends "base.html" %}
-{% load cms_tags %}
-
-{% block content %}
-
-
- {% block center %}
- {% placeholder "center" %}
- {% endblock %}
-
-
-{% endblock %}
diff --git a/portail_citoyen2/templates/portail_citoyen/base_two_columns.html b/portail_citoyen2/templates/portail_citoyen/base_two_columns.html
deleted file mode 100644
index 24a99e0..0000000
--- a/portail_citoyen2/templates/portail_citoyen/base_two_columns.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{% extends "base.html" %}
-{% load cms_tags %}
-
-{% block content %}
-
-
- {% block left %}
- {% placeholder "left" %}
- {% endblock %}
-
-
- {% block right %}
- {% placeholder "right" %}
- {% endblock %}
-
-
-
-{% endblock %}
diff --git a/portail_citoyen2/templates/portail_citoyen/block.html b/portail_citoyen2/templates/portail_citoyen/block.html
deleted file mode 100644
index 68ade7f..0000000
--- a/portail_citoyen2/templates/portail_citoyen/block.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- {{ body|safe }}
-
diff --git a/portail_citoyen2/templates/portail_citoyen/form.html b/portail_citoyen2/templates/portail_citoyen/form.html
deleted file mode 100644
index 40b0632..0000000
--- a/portail_citoyen2/templates/portail_citoyen/form.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% load i18n %}
-
diff --git a/portail_citoyen2/templates/portail_citoyen/form_fields.html b/portail_citoyen2/templates/portail_citoyen/form_fields.html
deleted file mode 100644
index 76b3a2d..0000000
--- a/portail_citoyen2/templates/portail_citoyen/form_fields.html
+++ /dev/null
@@ -1,11 +0,0 @@
- {{ form.non_field_errors }}
- {% for field in form %}
-
- {% endfor %}
diff --git a/portail_citoyen2/templates/portail_citoyen/top-menu.html b/portail_citoyen2/templates/portail_citoyen/top-menu.html
deleted file mode 100644
index baf1ddf..0000000
--- a/portail_citoyen2/templates/portail_citoyen/top-menu.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% load menu_tags %}
-{% for child in children %}
-
-{% endfor %}
diff --git a/portail_citoyen2/templatetags/__init__.py b/portail_citoyen2/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/portail_citoyen2/templatetags/portail_citoyen_tags.py b/portail_citoyen2/templatetags/portail_citoyen_tags.py
deleted file mode 100644
index f2e5931..0000000
--- a/portail_citoyen2/templatetags/portail_citoyen_tags.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django import template
-
-register = template.Library()
-
-@register.assignment_tag(takes_context=True)
-def user_in_group(context, group):
- user = context['user']
- return user.groups.filter(name=group).exists()
-
-
-@register.assignment_tag(takes_context=True)
-def user_in_group_prefix(context, group):
- user = context['user']
- return user.groups.filter(name__startswith=group).exists()
diff --git a/portail_citoyen2/urls.py b/portail_citoyen2/urls.py
deleted file mode 100644
index 0c33087..0000000
--- a/portail_citoyen2/urls.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from django.conf.urls import patterns, include, url
-from django.contrib import admin
-from django.conf import settings
-
-
-admin.autodiscover()
-
-
-urlpatterns = patterns('portail_citoyen2.views',
- url(r'^admin/', include(admin.site.urls)),
- url(r'^admin_tools/', include('admin_tools.urls')),
- url(r'^accounts/logout/$', 'logout', name='account_logout'),
- (r'^accounts/', include('allauth.urls')),
- url(r'^stats/$', 'stats'),
-)
-
-# urlpatterns = patterns('',
-# url(r'^authsaml2/$', include('authentic2.authsaml2.urls')),
-# )
-
-if settings.DEBUG:
- urlpatterns += patterns('',
- url(r'^media/(?P.*)$', 'django.views.static.serve',
- {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
- )
-
-if 'cms_ajax_text_plugin' in settings.INSTALLED_APPS:
- urlpatterns += patterns('',
- url('^plugin/cms_ajax_text/', include('cms_ajax_text_plugin.urls')),
- )
-
-urlpatterns += patterns('',
- url(r'^', include('cms.urls')),
-)
-
diff --git a/portail_citoyen2/utils.py b/portail_citoyen2/utils.py
deleted file mode 100644
index 6510447..0000000
--- a/portail_citoyen2/utils.py
+++ /dev/null
@@ -1,11 +0,0 @@
-def callable_has_arg(method, arg):
- if hasattr(method, 'need_'+arg):
- return getattr(method, 'need_'+arg)
- if hasattr(method, 'im_func'):
- varnames = method.im_func.func_code.co_varnames
- argcount = method.im_func.func_code.co_argcount
- return arg in varnames[1:argcount]
- else:
- varnames = method.func_code.co_varnames
- argcount = method.func_code.co_argcount
- return arg in varnames[:argcount]
diff --git a/portail_citoyen2/views.py b/portail_citoyen2/views.py
deleted file mode 100644
index dcde2b9..0000000
--- a/portail_citoyen2/views.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import json
-from datetime import timedelta
-
-from django.http import HttpResponse
-from django.utils.timezone import now
-
-from django.contrib.auth import get_user_model
-from allauth.account.views import LogoutView
-from allauth.account.adapter import get_adapter
-
-class PCLogoutView(LogoutView):
- def get_redirect_url(self):
- return (self.request.REQUEST.get(self.redirect_field_name) or
- get_adapter().get_logout_redirect_url(self.request))
-
-logout = PCLogoutView.as_view()
-
-def stats(request):
- User = get_user_model()
- last_day = now() - timedelta(days=1)
- last_hour = now() - timedelta(hours=1)
- qs = User.objects.all()
- what = {
- 'users_count': qs.count(),
- 'users_last_connection_less_than_one_day_ago': qs.filter(last_login__gte=last_day).count(),
- 'user_last_connection_less_than_one_hour_ago': qs.filter(last_login__gte=last_hour).count(),
- }
- return HttpResponse(json.dumps(what), mimetype='application/json')
diff --git a/portail_citoyen2/wsgi.py b/portail_citoyen2/wsgi.py
deleted file mode 100644
index 80d4c65..0000000
--- a/portail_citoyen2/wsgi.py
+++ /dev/null
@@ -1,28 +0,0 @@
-"""
-WSGI config for portail_citoyen project.
-
-This module contains the WSGI application used by Django's development server
-and any production WSGI deployments. It should expose a module-level variable
-named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
-this application via the ``WSGI_APPLICATION`` setting.
-
-Usually you will have the standard Django WSGI application here, but it also
-might make sense to replace the whole Django WSGI application with a custom one
-that later delegates to the Django one. For example, you could introduce WSGI
-middleware here, or combine a Django application with an application of another
-framework.
-
-"""
-import os
-
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "portail_citoyen2.settings")
-
-# This application object is used by any WSGI server configured to use this
-# file. This includes Django's development server, if the WSGI_APPLICATION
-# setting points here.
-from django.core.wsgi import get_wsgi_application
-application = get_wsgi_application()
-
-# Apply WSGI middleware here.
-# from helloworld.wsgi import HelloWorldApplication
-# application = HelloWorldApplication(application)
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 77f07f9..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,14 +0,0 @@
---allow-all-external
---allow-unverified django-admin-tools
-https://github.com/divio/django-cms/archive/16f667a5f818dd116e752d9cb7eeb37d4b0e3a1f.zip#egg=django-cms-3.0b4.dev10
--f https://repos.entrouvert.org/python-entrouvert.git/
-python-entrouvert
-requests>=1.0.0
-cmsplugin-text-wrapper>=0.5
-django-cms-ajax-text-plugin
-feedparser
-django>=1.5.1,<1.6
-south>=0.8.4
-Pillow
-djangocms-text-ckeditor
-django-allauth
diff --git a/run.sh b/run.sh
deleted file mode 100755
index 8700df1..0000000
--- a/run.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-BASE=`dirname $0`
-PROJECT=portail-citoyen2
-CTL=$BASE/${PROJECT}
-VENV=$BASE/${PROJECT}-venv
-
-if [ ! -n "$VIRTUAL_ENV" ]; then
- if [ ! -d $VENV ]; then
- $BASE/start.sh norun
- fi
- . $VENV/bin/activate
-fi
-export DEBUG=1
-$CTL "${@:-runserver}"
-
diff --git a/setup.py b/setup.py
deleted file mode 100755
index ed00a13..0000000
--- a/setup.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#! /usr/bin/env python
-
-''' Setup script for Polynum
-'''
-
-import glob
-import re
-import sys
-import os
-
-from setuptools import setup, find_packages
-from setuptools.command.install_lib import install_lib as _install_lib
-from distutils.command.build import build as _build
-from distutils.command.sdist import sdist
-from distutils.cmd import Command
-
-class compile_translations(Command):
- description = 'compile message catalogs to MO files via django compilemessages'
- user_options = []
-
- def initialize_options(self):
- pass
-
- def finalize_options(self):
- pass
-
- def run(self):
- try:
- from django.core.management.commands.compilemessages import \
- compile_messages
- for path in ['portail_citoyen2'] + glob.glob('portail_citoyen2/apps/*'):
- if path.endswith('.py'):
- continue
- if not os.path.isdir(os.path.join(path, 'locale')):
- continue
- curdir = os.getcwd()
- os.chdir(os.path.realpath(path))
- compile_messages(sys.stderr)
- os.chdir(curdir)
- except ImportError:
- print
- sys.stderr.write('!!! Please install Django >= 1.4 to build translations')
- print
- print
-
-class build(_build):
- sub_commands = [('compile_translations', None)] + _build.sub_commands
-
-class install_lib(_install_lib):
- def run(self):
- self.run_command('compile_translations')
- _install_lib.run(self)
-
-class eo_sdist(sdist):
-
- def run(self):
- print "creating VERSION file"
- if os.path.exists('VERSION'):
- os.remove('VERSION')
- version = get_version()
- version_file = open('VERSION', 'w')
- version_file.write(version)
- version_file.close()
- sdist.run(self)
- print "removing VERSION file"
- if os.path.exists('VERSION'):
- os.remove('VERSION')
-
-def get_version():
-
- version = None
- if os.path.exists('VERSION'):
- version_file = open('VERSION', 'r')
- version = version_file.read()
- version_file.close()
- return version
- for d in glob.glob('*'):
- if not os.path.isdir(d):
- continue
- module_file = os.path.join(d, '__init__.py')
- if not os.path.exists(module_file):
- continue
- for v in re.findall("""__version__ *= *['"](.*)['"]""",
- open(module_file).read()):
- assert version is None
- version = v
- if version:
- break
- assert version is not None
- if os.path.exists('.git'):
- import subprocess
- p = subprocess.Popen(['git','describe','--dirty','--match=v*'],
- stdout=subprocess.PIPE)
- result = p.communicate()[0]
- assert p.returncode == 0, 'git returned non-zero'
- new_version = result.split()[0][1:]
- assert new_version.split('-')[0] == version, '__version__ must match the last git annotated tag'
- version = new_version.replace('-', '.')
- return version
-
-
-setup(name="portail-citoyen2",
- version=get_version(),
- license="AGPLv3 or later",
- description="Portail citoyen",
- url="http://dev.entrouvert.org/projects/portail-citoyen/",
- author="Entr'ouvert",
- author_email="info@entrouvert.org",
- maintainer="Benjamin Dauvergne",
- maintainer_email="info@entrouvert.com",
- include_package_data=True,
- packages=find_packages(),
- scripts=('manage.py',),
- setup_requires=[
- 'django>=1.5.1',
- ],
- install_requires=[
- 'requests>=2.1',
- 'feedparser',
- 'django>=1.5.1,<1.6',
- 'cmsplugin-text-wrapper>=0.5',
- 'django-cms>=3',
- 'django-cms-ajax-text-plugin',
- 'python-entrouvert',
- 'south>=0.8.4',
- 'Pillow',
- 'djangocms-text-ckeditor',
- 'django-allauth',
- ],
- dependency_links = [
- 'git+git://repos.entrouvert.org/python-entrouvert.git/#egg=python-entrouvert-9999.0',
- ],
- cmdclass={
- 'build': build,
- 'install_lib': install_lib,
- 'compile_translations': compile_translations,
- 'sdist': eo_sdist
- },
-)
diff --git a/start.sh b/start.sh
deleted file mode 100755
index fcbe45c..0000000
--- a/start.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-PROJECT=portail-citoyen2
-CTL=${PROJECT}
-VENV=${PROJECT}-venv
-
-if [ -f /etc/debian_release ]; then
- if ! dpkg -l build-essential python-dev >/dev/null 2>&1; then
- aptitude install python-dev build-essential
- fi
-fi
-
-if [ "$VIRTUAL_ENV" = "" ]; then
- if which mkvirtualenv >/dev/null 2>&1; then
- workon $PROJECT || (mkvirtualenv $PROJECT; workon $PROJECT)
- else
- if [ ! -d $VENV ]; then
- virtualenv --system-site-packages $VENV 2>/dev/null || virtualenv $VENV
- fi
- . ./$VENV/bin/activate
- fi
-fi
-pip install --upgrade setuptools
-pip install --upgrade pip
-pip install --upgrade pyOpenSSL==0.13 ndg-httpsclient requests pyasn1
-sed -i 's/^MAX = 64/MAX = 200/' $VENV/lib/python*/site-packages/ndg/httpsclient/subj_alt_name.py
-pip install --upgrade --process-dependency-links -r requirements.txt
-if [ ! -f $PROJECT.db ]; then
- ./$CTL syncdb --all --noinput
- ./$CTL migrate --fake
- if [ -f load-base-data.sh ]; then
- ./load-base-data.sh
- fi
-fi
-if [ "$1" != "norun" ]; then
- export DEBUG=1
- ./$CTL runserver
-fi
diff --git a/tools/export_data.sh b/tools/export_data.sh
deleted file mode 100755
index 88d28df..0000000
--- a/tools/export_data.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-portail-citoyen-manage dumpdata --indent=2 sites cms cms.cmsplugin cmsplugin_text_wrapper \
- file googlemap link picture snippet teaser video login_plugin data_source_plugin \
- a2_service_list_plugin feed_plugin idp attribute_aggregator > demo.json
diff --git a/tools/flush_memcache.py b/tools/flush_memcache.py
deleted file mode 100755
index 51af925..0000000
--- a/tools/flush_memcache.py
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/python
-import memcache
-
-mc = memcache.Client(['127.0.0.1:11211'])
-mc.flush_all()