From 9391cb9ccb3dd2884e7be2f15aa729733288f1e5 Mon Sep 17 00:00:00 2001
From: dj3c1t
Date: Sun, 23 Jun 2013 22:02:45 +0200
Subject: [PATCH] sourceml devient un plugin mtweb
---
app/config.xml | 16 +
app/controllers/admin/cache.php | 37 +
app/controllers/admin/licences.php | 86 +++
app/controllers/admin/maintenance.php | 34 +
app/controllers/admin/sourceml.php | 97 +++
app/controllers/content/sources.php | 277 +++++++
app/controllers/forms/sourceml.php | 97 +++
app/controllers/sources/album.php | 79 ++
app/controllers/sources/groupe.php | 55 ++
app/controllers/sources/morceau.php | 109 +++
app/controllers/sources/piste.php | 114 +++
app/controllers/users/albums.php | 260 +++++++
app/controllers/users/groupes.php | 183 +++++
app/controllers/users/morceaux.php | 435 +++++++++++
app/controllers/users/pistes.php | 478 ++++++++++++
app/controllers/users/sources.php | 58 ++
app/data/modules/share/sml_data_sources_cache.php | 238 ++++++
app/data/modules/share/sml_data_sources_xml.php | 207 ++++++
.../modules/share/sml_data_sources_xml_format.php | 178 +++++
.../modules/share/sml_data_sources_xml_pathes.php | 66 ++
app/data/modules/sql/sml_data_authors.php | 147 ++++
app/data/modules/sql/sml_data_licences.php | 95 +++
app/data/modules/sql/sml_data_source_groupes.php | 131 ++++
app/data/modules/sql/sml_data_sources.php | 817 +++++++++++++++++++++
app/data/modules/sql/sml_data_sources_cache_db.php | 59 ++
app/helpers/mw_helper_sourceml_out.php | 33 +
app/observers/mw_observer_sourceml.php | 48 ++
app/out/default/config.xml | 9 +
app/out/default/css/actions/forms_sourceml.css | 1 +
app/out/default/css/actions/sources.css | 463 ++++++++++++
app/out/default/css/actions/users_albums.css | 1 +
app/out/default/css/actions/users_groupes.css | 1 +
app/out/default/css/actions/users_morceaux.css | 1 +
app/out/default/css/actions/users_pistes.css | 1 +
app/out/default/css/colorbox.css | 67 ++
app/out/default/css/colors.css | 324 ++++++++
app/out/default/css/sourceml_accounts.css | 65 ++
.../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 384 bytes
.../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes
.../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes
.../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes
.../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes
.../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes
.../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes
.../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes
.../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes
.../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes
.../css/ui-lightness/jquery-ui-1.8.12.custom.css | 578 +++++++++++++++
app/out/default/icons/ajax-loader.gif | Bin 0 -> 723 bytes
app/out/default/icons/ecouter.png | Bin 0 -> 675 bytes
app/out/default/icons/pause.png | Bin 0 -> 228 bytes
app/out/default/icons/play.png | Bin 0 -> 270 bytes
app/out/default/icons/player_loading.gif | Bin 0 -> 847 bytes
app/out/default/icons/stop.png | Bin 0 -> 202 bytes
app/out/default/images/colorbox/border.png | Bin 0 -> 112 bytes
app/out/default/images/colorbox/controls.png | Bin 0 -> 284 bytes
.../images/colorbox/ie6/borderBottomCenter.png | Bin 0 -> 111 bytes
.../images/colorbox/ie6/borderBottomLeft.png | Bin 0 -> 215 bytes
.../images/colorbox/ie6/borderBottomRight.png | Bin 0 -> 217 bytes
.../images/colorbox/ie6/borderMiddleLeft.png | Bin 0 -> 108 bytes
.../images/colorbox/ie6/borderMiddleRight.png | Bin 0 -> 108 bytes
.../images/colorbox/ie6/borderTopCenter.png | Bin 0 -> 111 bytes
.../default/images/colorbox/ie6/borderTopLeft.png | Bin 0 -> 216 bytes
.../default/images/colorbox/ie6/borderTopRight.png | Bin 0 -> 214 bytes
app/out/default/images/colorbox/loading.gif | Bin 0 -> 723 bytes
.../default/images/colorbox/loading_background.png | Bin 0 -> 157 bytes
app/out/default/images/colorbox/overlay.png | Bin 0 -> 169 bytes
app/out/default/js/actions/admin_cache.js | 30 +
app/out/default/js/actions/admin_sourceml.js | 17 +
app/out/default/js/actions/sources.js | 380 ++++++++++
app/out/default/js/actions/users.js | 158 ++++
app/out/default/js/actions/users_groupes.js | 28 +
app/out/default/js/jquery-ui-1.8.12.custom.min.js | 783 ++++++++++++++++++++
app/out/default/js/jquery.colorbox-min.js | 4 +
app/out/default/layouts/admin.xml | 15 +
app/out/default/layouts/content.xml | 12 +
app/out/default/layouts/forms.xml | 10 +
app/out/default/layouts/sources.xml | 19 +
app/out/default/layouts/users.xml | 24 +
app/out/default/sources.php | 38 +
app/out/default/views/admin/cache.php | 37 +
app/out/default/views/admin/licences/add.php | 29 +
app/out/default/views/admin/licences/edit.php | 29 +
app/out/default/views/admin/licences/list.php | 32 +
app/out/default/views/admin/maintenance.php | 22 +
app/out/default/views/admin/sourceml.php | 45 ++
app/out/default/views/content/sources/sources.php | 23 +
app/out/default/views/content/sources/xml_form.php | 77 ++
.../views/forms/sourceml/contact_author.php | 39 +
app/out/default/views/sources/album/ariane.php | 13 +
app/out/default/views/sources/album/list.php | 52 ++
app/out/default/views/sources/album/view.php | 96 +++
app/out/default/views/sources/ariane.php | 21 +
app/out/default/views/sources/colonne.php | 8 +
app/out/default/views/sources/current_album.php | 31 +
.../default/views/sources/current_album_box.php | 11 +
app/out/default/views/sources/entete_groupe.php | 27 +
app/out/default/views/sources/groupe/ariane.php | 11 +
app/out/default/views/sources/groupe/list.php | 38 +
app/out/default/views/sources/groupe/view.php | 42 ++
app/out/default/views/sources/groupe_box.php | 9 +
app/out/default/views/sources/lien_contact.php | 8 +
app/out/default/views/sources/logo_groupe.php | 22 +
app/out/default/views/sources/menu_albums.php | 37 +
app/out/default/views/sources/morceau/ariane.php | 18 +
app/out/default/views/sources/morceau/list.php | 84 +++
app/out/default/views/sources/morceau/view.php | 56 ++
app/out/default/views/sources/navig_menu.php | 20 +
app/out/default/views/sources/nom_groupe.php | 7 +
app/out/default/views/sources/piste/ariane.php | 22 +
app/out/default/views/sources/piste/list.php | 83 +++
app/out/default/views/sources/piste/view.php | 64 ++
app/out/default/views/sources/source.php | 22 +
app/out/default/views/sources/source/arbo.php | 21 +
app/out/default/views/sources/source/documents.php | 47 ++
app/out/default/views/sources/source/header.php | 44 ++
.../default/views/sources/source/menu_source.php | 58 ++
app/out/default/views/sources/source/metas.php | 41 ++
app/out/default/views/users/albums/add.php | 126 ++++
app/out/default/views/users/albums/edit.php | 128 ++++
app/out/default/views/users/albums/list.php | 86 +++
app/out/default/views/users/groupes/add.php | 50 ++
app/out/default/views/users/groupes/edit.php | 54 ++
app/out/default/views/users/groupes/list.php | 38 +
app/out/default/views/users/morceaux/add.php | 259 +++++++
app/out/default/views/users/morceaux/edit.php | 266 +++++++
app/out/default/views/users/morceaux/list.php | 142 ++++
app/out/default/views/users/pistes/add.php | 264 +++++++
app/out/default/views/users/pistes/edit.php | 272 +++++++
app/out/default/views/users/pistes/list.php | 174 +++++
mw_sourceml.php | 331 +++++++++
135 files changed, 10999 insertions(+)
create mode 100644 app/config.xml
create mode 100644 app/controllers/admin/cache.php
create mode 100644 app/controllers/admin/licences.php
create mode 100644 app/controllers/admin/maintenance.php
create mode 100644 app/controllers/admin/sourceml.php
create mode 100644 app/controllers/content/sources.php
create mode 100644 app/controllers/forms/sourceml.php
create mode 100644 app/controllers/sources/album.php
create mode 100644 app/controllers/sources/groupe.php
create mode 100644 app/controllers/sources/morceau.php
create mode 100644 app/controllers/sources/piste.php
create mode 100644 app/controllers/users/albums.php
create mode 100644 app/controllers/users/groupes.php
create mode 100644 app/controllers/users/morceaux.php
create mode 100644 app/controllers/users/pistes.php
create mode 100644 app/controllers/users/sources.php
create mode 100644 app/data/modules/share/sml_data_sources_cache.php
create mode 100644 app/data/modules/share/sml_data_sources_xml.php
create mode 100644 app/data/modules/share/sml_data_sources_xml_format.php
create mode 100644 app/data/modules/share/sml_data_sources_xml_pathes.php
create mode 100644 app/data/modules/sql/sml_data_authors.php
create mode 100644 app/data/modules/sql/sml_data_licences.php
create mode 100644 app/data/modules/sql/sml_data_source_groupes.php
create mode 100644 app/data/modules/sql/sml_data_sources.php
create mode 100644 app/data/modules/sql/sml_data_sources_cache_db.php
create mode 100644 app/helpers/mw_helper_sourceml_out.php
create mode 100644 app/observers/mw_observer_sourceml.php
create mode 100644 app/out/default/config.xml
create mode 100644 app/out/default/css/actions/forms_sourceml.css
create mode 100644 app/out/default/css/actions/sources.css
create mode 100644 app/out/default/css/actions/users_albums.css
create mode 100644 app/out/default/css/actions/users_groupes.css
create mode 100644 app/out/default/css/actions/users_morceaux.css
create mode 100644 app/out/default/css/actions/users_pistes.css
create mode 100644 app/out/default/css/colorbox.css
create mode 100644 app/out/default/css/colors.css
create mode 100644 app/out/default/css/sourceml_accounts.css
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-icons_222222_256x240.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-icons_228ef1_256x240.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
create mode 100644 app/out/default/css/ui-lightness/images/ui-icons_ffffff_256x240.png
create mode 100644 app/out/default/css/ui-lightness/jquery-ui-1.8.12.custom.css
create mode 100644 app/out/default/icons/ajax-loader.gif
create mode 100644 app/out/default/icons/ecouter.png
create mode 100644 app/out/default/icons/pause.png
create mode 100644 app/out/default/icons/play.png
create mode 100644 app/out/default/icons/player_loading.gif
create mode 100644 app/out/default/icons/stop.png
create mode 100644 app/out/default/images/colorbox/border.png
create mode 100644 app/out/default/images/colorbox/controls.png
create mode 100644 app/out/default/images/colorbox/ie6/borderBottomCenter.png
create mode 100644 app/out/default/images/colorbox/ie6/borderBottomLeft.png
create mode 100644 app/out/default/images/colorbox/ie6/borderBottomRight.png
create mode 100644 app/out/default/images/colorbox/ie6/borderMiddleLeft.png
create mode 100644 app/out/default/images/colorbox/ie6/borderMiddleRight.png
create mode 100644 app/out/default/images/colorbox/ie6/borderTopCenter.png
create mode 100644 app/out/default/images/colorbox/ie6/borderTopLeft.png
create mode 100644 app/out/default/images/colorbox/ie6/borderTopRight.png
create mode 100644 app/out/default/images/colorbox/loading.gif
create mode 100644 app/out/default/images/colorbox/loading_background.png
create mode 100644 app/out/default/images/colorbox/overlay.png
create mode 100644 app/out/default/js/actions/admin_cache.js
create mode 100644 app/out/default/js/actions/admin_sourceml.js
create mode 100644 app/out/default/js/actions/sources.js
create mode 100644 app/out/default/js/actions/users.js
create mode 100644 app/out/default/js/actions/users_groupes.js
create mode 100644 app/out/default/js/jquery-ui-1.8.12.custom.min.js
create mode 100644 app/out/default/js/jquery.colorbox-min.js
create mode 100644 app/out/default/layouts/admin.xml
create mode 100644 app/out/default/layouts/content.xml
create mode 100644 app/out/default/layouts/forms.xml
create mode 100644 app/out/default/layouts/sources.xml
create mode 100644 app/out/default/layouts/users.xml
create mode 100644 app/out/default/sources.php
create mode 100644 app/out/default/views/admin/cache.php
create mode 100644 app/out/default/views/admin/licences/add.php
create mode 100644 app/out/default/views/admin/licences/edit.php
create mode 100644 app/out/default/views/admin/licences/list.php
create mode 100644 app/out/default/views/admin/maintenance.php
create mode 100644 app/out/default/views/admin/sourceml.php
create mode 100644 app/out/default/views/content/sources/sources.php
create mode 100644 app/out/default/views/content/sources/xml_form.php
create mode 100644 app/out/default/views/forms/sourceml/contact_author.php
create mode 100644 app/out/default/views/sources/album/ariane.php
create mode 100644 app/out/default/views/sources/album/list.php
create mode 100644 app/out/default/views/sources/album/view.php
create mode 100644 app/out/default/views/sources/ariane.php
create mode 100644 app/out/default/views/sources/colonne.php
create mode 100644 app/out/default/views/sources/current_album.php
create mode 100644 app/out/default/views/sources/current_album_box.php
create mode 100644 app/out/default/views/sources/entete_groupe.php
create mode 100644 app/out/default/views/sources/groupe/ariane.php
create mode 100644 app/out/default/views/sources/groupe/list.php
create mode 100644 app/out/default/views/sources/groupe/view.php
create mode 100644 app/out/default/views/sources/groupe_box.php
create mode 100644 app/out/default/views/sources/lien_contact.php
create mode 100644 app/out/default/views/sources/logo_groupe.php
create mode 100644 app/out/default/views/sources/menu_albums.php
create mode 100644 app/out/default/views/sources/morceau/ariane.php
create mode 100644 app/out/default/views/sources/morceau/list.php
create mode 100644 app/out/default/views/sources/morceau/view.php
create mode 100644 app/out/default/views/sources/navig_menu.php
create mode 100644 app/out/default/views/sources/nom_groupe.php
create mode 100644 app/out/default/views/sources/piste/ariane.php
create mode 100644 app/out/default/views/sources/piste/list.php
create mode 100644 app/out/default/views/sources/piste/view.php
create mode 100644 app/out/default/views/sources/source.php
create mode 100644 app/out/default/views/sources/source/arbo.php
create mode 100644 app/out/default/views/sources/source/documents.php
create mode 100644 app/out/default/views/sources/source/header.php
create mode 100644 app/out/default/views/sources/source/menu_source.php
create mode 100644 app/out/default/views/sources/source/metas.php
create mode 100644 app/out/default/views/users/albums/add.php
create mode 100644 app/out/default/views/users/albums/edit.php
create mode 100644 app/out/default/views/users/albums/list.php
create mode 100644 app/out/default/views/users/groupes/add.php
create mode 100644 app/out/default/views/users/groupes/edit.php
create mode 100644 app/out/default/views/users/groupes/list.php
create mode 100644 app/out/default/views/users/morceaux/add.php
create mode 100644 app/out/default/views/users/morceaux/edit.php
create mode 100644 app/out/default/views/users/morceaux/list.php
create mode 100644 app/out/default/views/users/pistes/add.php
create mode 100644 app/out/default/views/users/pistes/edit.php
create mode 100644 app/out/default/views/users/pistes/list.php
create mode 100644 mw_sourceml.php
diff --git a/app/config.xml b/app/config.xml
new file mode 100644
index 0000000..67903bd
--- /dev/null
+++ b/app/config.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ parent
+ status
+ groupe
+ album
+ morceau
+ piste
+ xml
+ derivation
+ reference
+
+
+
\ No newline at end of file
diff --git a/app/controllers/admin/cache.php b/app/controllers/admin/cache.php
new file mode 100644
index 0000000..b45330a
--- /dev/null
+++ b/app/controllers/admin/cache.php
@@ -0,0 +1,37 @@
+env();
+ $data = $env->data();
+ if(($CONFIG = $env->get_CONFIG()) !== false){
+ if(!isset($CONFIG["cache_actif"])) $CONFIG["cache_actif"] = "0";
+ if(!isset($CONFIG["cache_maj_auto"])) $CONFIG["cache_maj_auto"] = "0";
+ if(!isset($CONFIG["cache_time"])) $CONFIG["cache_time"] = "72";
+ $env->set_out("config", $CONFIG);
+ if($_POST){
+ $env->set_out("config", $_POST);
+ if(preg_match("/^[0-9]+$/", $_POST["cache_time"])){
+ $CONTINUE = true;
+ if($CONTINUE && $data->set_config("cache_actif", $_POST["cache_actif"]));
+ else $CONTINUE = false;
+ if($CONTINUE && $data->set_config("cache_maj_auto", $_POST["cache_maj_auto"]));
+ else $CONTINUE = false;
+ if($CONTINUE && $data->set_config("cache_time", $_POST["cache_time"]));
+ else $CONTINUE = false;
+ if($CONTINUE) $env->redirect(
+ $env->url("admin/cache"),
+ "la configuration du cache a été enregistrée"
+ );
+ else $env->erreur("Impossible d'enregistrer la configuration du cache");
+ }
+ else $env->message("durée de validité du cache doit être un nombre");
+ }
+ }
+ else $env->erreur("Impossible de lire la configuration du cache");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/admin/licences.php b/app/controllers/admin/licences.php
new file mode 100644
index 0000000..0ea28df
--- /dev/null
+++ b/app/controllers/admin/licences.php
@@ -0,0 +1,86 @@
+env();
+ $data = $env->data();
+ if($env->set_out("licences", $data->licences()) !== false)
+ {
+ }
+ else $env->erreur("impossible de lire la liste des licences");
+ }
+
+ function add(){
+ $env = $this->env();
+ $data = $env->data();
+ if($_POST)
+ { $env->set_out("licence", $_POST);
+ if($_POST["nom"])
+ { if
+ ( $data->add_licence
+ ( $_POST["nom"],
+ $_POST["url"]
+ )
+ )
+ $env->redirect
+ ( $env->url("admin/licences"),
+ "la licence ".$_POST["nom"]." a été ajoutée"
+ );
+ else $env->erreur("Impossible d'ajouter la licence");
+ }
+ else $env->message("merci de préciser un nom");
+ }
+ }
+
+ function edit(){
+ $env = $this->env();
+ $data = $env->data();
+ if($env->set_out("licence", $data->licence($_GET[$env->param("id")])))
+ { if($_POST)
+ { if($_POST["nom"])
+ { $licence = $env->out("licence");
+ $env->set_out("licence", $_POST);
+ if
+ ( $data->set_licence
+ ( $_GET[$env->param("id")],
+ $_POST["nom"],
+ $_POST["url"]
+ )
+ )
+ $env->redirect
+ ( $env->url("admin/licences"),
+ "la licence ".$licence["nom"]." a été modifiée"
+ );
+ else $env->erreur("Impossible de mettre à jour la licence");
+ }
+ else $env->message("Merci de préciser un nom");
+ }
+ }
+ else $env->erreur("impossible de lire la licence");
+ }
+
+ function del(){
+ $env = $this->env();
+ $data = $env->data();
+ if($env->set_out("licence", $data->licence($_GET[$env->param("id")])))
+ { $licence = $env->out("licence");
+ if(($res = $data->del_licence($_GET[$env->param("id")])) !== false)
+ { if($res === 1) $env->redirect
+ ( $env->url("admin/licences"),
+ "Des sources sur ce site utilisent cette licence, elle n'a pas été supprimée.",
+ 5
+ );
+ else $env->redirect
+ ( $env->url("admin/licences"),
+ "la licence ".$licence["nom"]." a été supprimée"
+ );
+ }
+ else $env->erreur("Impossible de supprimer la licence");
+ }
+ else $env->erreur("Impossible de lire les informations de cette licence");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/admin/maintenance.php b/app/controllers/admin/maintenance.php
new file mode 100644
index 0000000..7791b50
--- /dev/null
+++ b/app/controllers/admin/maintenance.php
@@ -0,0 +1,34 @@
+env();
+ $data = $env->data();
+ if($data->empty_source_cache())
+ { $env->redirect
+ ( $env->url("admin/maintenance"),
+ "le cache a été vidé"
+ );
+ }
+ else $env->erreur("Impossible de vider le cache");
+ }
+
+ function maj_all_xml(){
+ $env = $this->env();
+ $data = $env->data();
+ if($data->maj_source_xml_all())
+ { $env->redirect
+ ( $env->url("admin/maintenance"),
+ "les fichiers XML des sources ont été mis à jour"
+ );
+ }
+ else $env->erreur("Impossible de mettre à jour les fichiers XML des sources");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/admin/sourceml.php b/app/controllers/admin/sourceml.php
new file mode 100644
index 0000000..cc674c1
--- /dev/null
+++ b/app/controllers/admin/sourceml.php
@@ -0,0 +1,97 @@
+env();
+ $data = $env->data();
+ if(($this->status = $data->source_status()) === false)
+ { return "Impossible de lire la liste des status de source";
+ }
+ foreach($this->status as $id_source_status => $source_status)
+ { if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
+ if(isset($this->album_status_id) && isset($this->morceau_status_id)) break;
+ }
+ if(!isset($this->album_status_id)) return "Type de source inconnu: album";
+ if(($this->groupes = $data->groupes()) === false)
+ { return "Impossible de lire la liste des groupes";
+ }
+ $select = array("status" => $this->album_status_id);
+ if(($this->albums = $data->sources($select)) === false) return "impossible de lire la liste des albums";
+ return true;
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ if(!($groupes = $this->groupes)){
+ $env->erreur("Impossible de lire la liste des groupes");
+ return;
+ }
+ if(!($albums = $this->albums)){
+ $env->erreur("Impossible de lire la liste des albums");
+ return;
+ }
+ if(($CONFIG = $env->get_CONFIG()) === false){
+ $env->erreur("Impossible de lire la configuration");
+ return;
+ }
+ if($_POST){
+ if($_POST["start_action"] == "sources/groupe"){
+ if(!$data->set_config("start_action", "sources/groupe")){
+ $env->erreur("impossible d'enregistrer la configuration");
+ return;
+ }
+ }
+ elseif($_POST["start_action"] == "sources/groupe/view"){
+ $params = array("id" => $_POST["groupe_param"]);
+ if(
+ !$data->set_config("start_action", "sources/groupe/view")
+ || !$data->set_config("start_action_params", @serialize($params))
+ ){
+ $env->erreur("impossible d'enregistrer la configuration");
+ return;
+ }
+ }
+ elseif($_POST["start_action"] == "sources/album/view"){
+ $params = array("album" => $_POST["album_param"]);
+ if(
+ !$data->set_config("start_action", "sources/album/view")
+ || !$data->set_config("start_action_params", @serialize($params))
+ ){
+ $env->erreur("impossible d'enregistrer la configuration");
+ return;
+ }
+ }
+ elseif(
+ isset($CONFIG["start_action"])
+ && (
+ ($CONFIG["start_action"] == "sources/groupe")
+ || ($CONFIG["start_action"] == "sources/groupe/view")
+ || ($CONFIG["start_action"] == "sources/album/view")
+ )
+ ){
+ if(!$data->set_config("start_action", "")){
+ $env->erreur("impossible d'enregistrer la configuration");
+ return;
+ }
+ }
+ $env->redirect(
+ $env->url("admin/sourceml"),
+ "la configuration a été enregistrée"
+ );
+ }
+ $env->set_out("groupes", $this->groupes);
+ $env->set_out("albums", $this->albums);
+ $env->set_out("config", $CONFIG);
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/content/sources.php b/app/controllers/content/sources.php
new file mode 100644
index 0000000..f76d956
--- /dev/null
+++ b/app/controllers/content/sources.php
@@ -0,0 +1,277 @@
+env();
+ $this->validation_result = true;
+ $this->validate_status($env);
+ $this->validate_licences($env);
+ return true;
+ }
+
+ function validate_status(){
+ $env = $this->env();
+ if($this->validation_result === true)
+ { $data = $env->data();
+ if(($this->status = $data->source_status()) !== false)
+ { foreach($this->status as $id_source_status => $source_status)
+ { if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
+ if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
+ if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status;
+ if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break;
+ }
+ if(!isset($this->album_status_id)) $this->validation_result = "Type de source inconnu: album";
+ elseif(!isset($this->morceau_status_id)) $this->validation_result = "Type de source inconnu: morceau";
+ elseif(!isset($this->piste_status_id)) $this->validation_result = "Type de source inconnu: piste";
+ }
+ else $this->validation_result = "Impossible de lire la liste des status de source";
+ }
+ }
+
+ function validate_licences(){
+ $env = $this->env();
+ if($this->validation_result === true)
+ { $data = $env->data();
+ if(($this->licences = $data->licences()) !== false)
+ { $env->set_out("licences", $this->licences);
+ }
+ else $this->validation_result = "Impossible de lire la liste des licences";
+ }
+ }
+
+ function validate_source(){
+ $env = $this->env();
+ if($this->validation_result === true)
+ { $data = $env->data();
+ if(isset($_GET[$env->param("id")]) && $_GET[$env->param("id")])
+ { if($this->source = $data->source($_GET[$env->param("id")]))
+ {
+ }
+ else $this->validation_result = "Impossible de lire les informations de la source";
+ }
+ else $this->validation_result = "parametre source manquant";
+ }
+ }
+
+ function validate_groupes(){
+ $env = $this->env();
+ if($this->validation_result === true)
+ { $data = $env->data();
+ if(($groupes = $data->groupes()) !== false)
+ { $env->set_out("groupes", $groupes);
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")])
+ { if(($this->groupe = $data->groupe($_GET[$env->param("groupe")])) !== false)
+ { $env->set_out("groupe", $groupe);
+ }
+ else $this->validation_result = "Impossible de lire les informations du groupe";
+ }
+ }
+ else $this->validation_result = "Impossible de lire la liste des groupes";
+ }
+ }
+
+ function sources(){
+ $env = $this->env();
+ $this->validate_source($env);
+ if($this->validation_result === true)
+ { $data = $env->data();
+ $sources = array("list" => array(), "total" => 0);
+ if($this->source)
+ { if(($source_ariane = $data->source_ariane($this->source["id"])) !== false)
+ { $this->url_params = array();
+ foreach($source_ariane as $id_composition => $composition)
+ { if($composition["status"] == $this->morceau_status_id) $this->url_params["morceau"] = $id_composition;
+ elseif($composition["status"] == $this->album_status_id) $this->url_params["album"] = $id_composition;
+ }
+ if($this->source["status"] == $this->morceau_status_id)
+ { $this->source_param = $env->set_out("source_param", "piste");
+ $this->source_controller = $env->set_out("source_controller", "piste");
+ $this->url_params["morceau"] = $this->source["id"];
+ }
+ elseif($this->source["status"] == $this->album_status_id)
+ { $this->source_param = $env->set_out("source_param", "morceau");
+ $this->source_controller = $env->set_out("source_controller", "morceau");
+ $this->url_params["album"] = $this->source["id"];
+ }
+ $env->set_out("url_params", $this->url_params);
+ if(($_sources = $data->source_compositions(array("id_composition" => $this->source["id"]))) !== false)
+ { if(isset($_sources[$this->source["id"]]) && $_sources[$this->source["id"]])
+ { foreach($_sources[$this->source["id"]] as $id_source)
+ { if(($sources["list"][$id_source] = $data->source($id_source, true)) !== false)
+ { $sources["total"]++;
+ }
+ else
+ { $this->erreur("Impossible de lire les informations de l'une des sources");
+ break;
+ }
+ }
+ }
+ $sources["list"] = $data->ordonne($sources["list"], "ordre");
+ $env->set_out("sources", $sources);
+ }
+ else $this->erreur("Impossible de lire la liste des sources");
+ }
+ else $this->erreur("Impossible de lire le fil d'ariane");
+ }
+ else $this->erreur("Impossible de lire les informations de la source");
+ }
+ else $this->erreur($this->validation_result);
+ }
+
+ function derivations(){
+ $env = $this->env();
+ $this->validate_source($env);
+ if($this->validation_result === true)
+ { $data = $env->data();
+ $derivations = array("list" => array(), "total" => 0);
+ if($this->source)
+ { if(($source_ariane = $data->source_ariane($this->source["id"])) !== false)
+ { $this->url_params = array();
+ foreach($source_ariane as $id_composition => $composition)
+ { if($composition["status"] == $this->morceau_status_id) $this->url_params["morceau"] = $id_composition;
+ elseif($composition["status"] == $this->album_status_id) $this->url_params["album"] = $id_composition;
+ }
+ if($this->source["status"] == $this->piste_status_id)
+ { $this->source_param = $env->set_out("source_param", "piste");
+ $this->source_controller = $env->set_out("source_controller", "piste");
+ $this->url_params["piste"] = $this->source["id"];
+ }
+ elseif($this->source["status"] == $this->morceau_status_id)
+ { $this->source_param = $env->set_out("source_param", "morceau");
+ $this->source_controller = $env->set_out("source_controller", "morceau");
+ $this->url_params["morceau"] = $this->source["id"];
+ }
+ $env->set_out("url_params", $this->url_params);
+ if(($_derivations = $data->source_derivations(array("derivation" => $this->source["id"]))) !== false)
+ { foreach($_derivations as $id_derivation => $derivation)
+ { if(($derivations["list"][$id_derivation] = $data->source($id_derivation, true)) !== false)
+ { $derivations["total"]++;
+ }
+ else
+ { $this->erreur("Impossible de lire les informations de l'une des derivations");
+ break;
+ }
+ }
+ $derivations["list"] = $data->ordonne($derivations["list"], "ordre");
+ $env->set_out("sources", $derivations);
+ }
+ else $this->erreur("Impossible de lire la liste des derivations");
+ }
+ else $this->validation_result = "Impossible de lire le fil d'ariane";
+ }
+ else $this->erreur("Impossible de lire les informations de la source");
+ }
+ else $this->erreur($this->validation_result);
+ }
+
+ function xml_form(){
+ $env = $this->env();
+ if(isset($_GET[$env->param("form")]))
+ { $data = $env->data();
+ $form_params = array();
+ if(isset($_GET[$env->param("derivation")]))
+ { if($_GET[$env->param("form")] == "edit")
+ { if(($source_derivation = $data->source_derivation($_GET[$env->param("derivation")])) !== false)
+ { $source = array
+ ( "id" => $source_derivation["id"],
+ "xml" => array
+ ( "url" => $source_derivation["derivation"],
+ "content" => "",
+ "use_edit_content" => false
+ )
+ );
+ $derivation_edit_file = $data->derivation_edit_xml_path($source_derivation["id_source"], $source_derivation["id"]);
+ if(file_exists($derivation_edit_file))
+ { if(($derivation_edit_content = $data->get_edit_derivation_content($source_derivation["id_source"], $source_derivation["id"])) !== false)
+ { if(($source = $data->source_xml_read($source_derivation["derivation"], $derivation_edit_content)) !==false)
+ { $source["xml"] = array
+ ( "url" => $source_derivation["derivation"],
+ "content" => $derivation_edit_content,
+ "use_edit_content" => true
+ );
+ }
+ else $this->erreur("Impossible de lire le XML de la source");
+ }
+ else $this->erreur("Impossible de lire le XML de la source");
+ }
+ else
+ { if(($source = $data->source_xml_read($source_derivation["derivation"])) === false)
+ { $source = $data->empty_source();
+ }
+ }
+ $source["id_source"] = $source_derivation["id_source"];
+ $source["id"] = $_GET[$env->param("derivation")];
+ $form_params["maj_url"] = $env->url("users/morceaux/maj_xml", array("id" => $_GET[$env->param("derivation")], "xml" => "derivation"));
+ }
+ }
+ elseif($_GET[$env->param("form")] == "add"){
+ $source = $data->empty_source();
+ $source["id"] = $_GET[$env->param("derivation")];
+ $source["xml"] = array(
+ "use_edit_content" => false,
+ "content" => ""
+ );
+ }
+ $form_params["name"] = "derivation";
+ $form_params["label"] = "dérive de » ";
+ $form_params["can_delete"] = true;
+ $form_params["id"] = $_GET[$env->param("derivation")];
+ }
+ elseif(isset($_GET[$env->param("reference")]))
+ {
+ }
+ $env->set_out("form_params", $form_params);
+ $env->set_out("xml_form_source", $source);
+ }
+ else $this->erreur("Parametres invalides pour le formulaire");
+ }
+
+ function xml(){
+ $env = $this->env();
+ $this->validate_source($env);
+ if($this->validation_result === true)
+ { $data = $env->data();
+ $xml = "";
+ if($this->source)
+ { if($this->source = $data->load_source($this->source))
+ { $xml =
+ ""
+ .htmlentities
+ ( $this->source["reference"] ? $this->source["reference"]["xml"]["content"] : $this->source["xml"]["content"],
+ ENT_COMPAT,
+ "UTF-8"
+ )
+ ."
";
+ }
+ else $this->erreur("Impossible de lire les informations XML de la source");
+ }
+ else $this->erreur("Impossible de lire les informations de la source");
+ }
+ else $this->erreur($this->validation_result);
+ echo $xml;
+ exit;
+ }
+
+ function erreur($content)
+ { echo $content;
+ exit;
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/forms/sourceml.php b/app/controllers/forms/sourceml.php
new file mode 100644
index 0000000..46fc014
--- /dev/null
+++ b/app/controllers/forms/sourceml.php
@@ -0,0 +1,97 @@
+env();
+ if($this->forms_contact_mod = $env->get_controller("forms/contact")){
+ return $this->forms_contact_mod->validate();
+ }
+ return "impossible de trouver le controlleur forms/contact";
+ }
+
+ function contact_author(){
+ $env = $this->env();
+ if(file_exists($env->path("mw_dir")."libs/ptitcaptcha.php")) require_once $env->path("mw_dir")."libs/ptitcaptcha.php";
+ $data = $env->data();
+ if(($status = $data->source_status()) !== false)
+ { foreach($status as $id_source_status => $source_status)
+ { if($source_status["nom"] == "album") $album_status_id = $id_source_status;
+ if(isset($album_status_id)) break;
+ }
+ if(isset($album_status_id))
+ { if($groupe = $data->groupe($_GET[$env->param("id")]))
+ { if($groupe["contact_form"] && $groupe["email"])
+ { $env->set_out("groupe", $groupe);
+ $select = array("status" => $album_status_id);
+ $select["id_groupe"] = $groupe["id"];
+ if(($albums = $data->sources($select)) !== false)
+ { $env->set_out("albums", $albums);
+ if($_POST)
+ { if
+ ( $this->send
+ ( $env,
+ $_POST["email"],
+ "[".$env->config("site_name")." - ".$groupe["nom"]."] nouveau message",
+ $_POST["message"],
+ $groupe["email"],
+ $groupe["captcha"]
+ )
+ )
+ { $env->redirect
+ ( $env->url("sources/groupe/view", array("id" => $_GET[$env->param("id")])),
+ "Le message a été envoyé"
+ );
+ }
+ }
+ }
+ else $env->erreur("impossible de lire la liste des albums");
+ }
+ else
+ { $env->run("sources/groupe/view", array("get" => array("id" => $groupe["id"])));
+ return;
+ }
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ else $env->erreur("Type de source inconnu: album");
+ }
+ else $env->erreur("Impossible de lire la liste des status de source");
+ }
+
+ function send(&$env, $from, $titre, $message, $dest, $captcha)
+ { $env->set_out("ENVOYE", false);
+ if($captcha && !class_exists("PtitCaptchaHelper")){
+ $env->erreur("fichier du captcha introuvable");
+ return false;
+ }
+ if(!$captcha || PtitCaptchaHelper::checkCaptcha())
+ { if($from)
+ { if($dest)
+ { if
+ ( mail
+ ( $dest,
+ $titre,
+ $message,
+ "From: ".$from."\r\n"
+ ."Reply-To: ".$from."\r\n"
+ )
+ )
+ { $env->set_out("ENVOYE", true);
+ return true;
+ }
+ else $env->erreur("Erreur à l'envoi du mail");
+ }
+ else $env->erreur("Impossible de trouver l'email du destinataire");
+ }
+ else $env->message("merci de préciser un email");
+ }
+ else $env->message("anti-spam incorrect");
+ return false;
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/sources/album.php b/app/controllers/sources/album.php
new file mode 100644
index 0000000..3640ac8
--- /dev/null
+++ b/app/controllers/sources/album.php
@@ -0,0 +1,79 @@
+env();
+ if($this->content_sources_mod = $env->get_controller("content/sources"))
+ { $this->content_sources_mod->validation_result = true;
+ $this->content_sources_mod->validate_status($env);
+ $this->content_sources_mod->validate_licences($env);
+ return $this->content_sources_mod->validation_result;
+ }
+ return "impossible de valider le module";
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ if(isset($this->content_sources_mod->licences) && $this->content_sources_mod->licences !== false)
+ { $env->set_out("licences", $this->content_sources_mod->licences);
+ if(($groupes = $data->groupes()) !== false)
+ { $env->set_out("groupes", $groupes);
+ $select = array();
+ $select["status"] = $this->content_sources_mod->album_status_id;
+ $select["order_by"] = "ordre";
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $select["id_groupe"] = $_GET[$env->param("groupe")];
+ $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
+ if(($albums = $data->sources($select)) !== false)
+ { $env->set_out("albums", $albums);
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")])
+ { if(($groupe = $data->groupe($_GET[$env->param("groupe")])) !== false)
+ { $env->set_out("groupe", $groupe);
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ }
+ else $env->erreur("Impossible de lire la liste des albums");
+ }
+ else $env->erreur("Impossible de lire la liste des groupes");
+ }
+ }
+
+ function view(){
+ $env = $this->env();
+ $data = $env->data();
+ if(isset($this->content_sources_mod->licences) && $this->content_sources_mod->licences !== false)
+ { $env->set_out("licences", $this->content_sources_mod->licences);
+ if(isset($_GET[$env->param("album")]) && $_GET[$env->param("album")])
+ { if($album = $data->source($_GET[$env->param("album")], true))
+ { $env->set_out("album", $album);
+ if($groupe = $data->get_admin_groupe($album["groupes"]))
+ { $env->set_out("groupe", $groupe);
+ $select = array("status" => $this->content_sources_mod->album_status_id);
+ $select["id_groupe"] = $groupe["id"];
+ if(($albums = $data->sources($select)) !== false)
+ { $env->set_out("albums", $albums);
+ $select = array("status" => $this->content_sources_mod->morceau_status_id);
+ $select["id_composition"] = $album["id"];
+ $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
+ if(($morceaux = $data->sources($select)) !== false)
+ { $env->set_out("morceaux", $morceaux);
+ }
+ else $env->erreur("impossible de lire la liste des morceaux");
+ }
+ else $env->erreur("impossible de lire la liste des albums");
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ else $env->erreur("Impossible de lire les informations de l'album");
+ }
+ else $env->erreur("parametre d'album manquant");
+ }
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/sources/groupe.php b/app/controllers/sources/groupe.php
new file mode 100644
index 0000000..3400d7e
--- /dev/null
+++ b/app/controllers/sources/groupe.php
@@ -0,0 +1,55 @@
+env();
+ if($this->content_sources_mod = $env->get_controller("content/sources"))
+ { $this->content_sources_mod->validation_result = true;
+ $this->content_sources_mod->validate_status($env);
+ $this->content_sources_mod->validate_licences($env);
+ return $this->content_sources_mod->validation_result;
+ }
+ return "impossible de valider le module";
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ if
+ ( ( $groupes = $data->groupes
+ ( null,
+ isset($_GET[$env->param("start")]) ? $_GET[$env->param("start")] : 0
+ )
+ ) !== false
+ ) $env->set_out("groupes", $groupes);
+ else $env->erreur("Impossible de lire la liste des groupes");
+ }
+
+ function view(){
+ $env = $this->env();
+ $data = $env->data();
+ if(isset($this->content_sources_mod->licences) && $this->content_sources_mod->licences !== false)
+ { $env->set_out("licences", $this->content_sources_mod->licences);
+ if(isset($_GET[$env->param("id")]) && $_GET[$env->param("id")])
+ { if(($groupe = $data->groupe($_GET[$env->param("id")])) !== false)
+ { $env->set_out("groupe", $groupe);
+ $select = array("status" => $this->content_sources_mod->album_status_id);
+ $select["id_groupe"] = $groupe["id"];
+ if(($albums = $data->sources($select)) !== false)
+ { $env->set_out("albums", $albums);
+ }
+ else $env->erreur("impossible de lire la liste des albums");
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ else $env->erreur("parametre de groupe manquant");
+ }
+ else $env->erreur("Impossible de lire la liste des licences");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/sources/morceau.php b/app/controllers/sources/morceau.php
new file mode 100644
index 0000000..802430a
--- /dev/null
+++ b/app/controllers/sources/morceau.php
@@ -0,0 +1,109 @@
+env();
+ if($this->content_sources_mod = $env->get_controller("content/sources"))
+ { $this->content_sources_mod->validation_result = true;
+ $this->content_sources_mod->validate_status($env);
+ $this->content_sources_mod->validate_licences($env);
+ return $this->content_sources_mod->validation_result;
+ }
+ return "impossible de valider le module";
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ if($this->content_sources_mod->licences !== false)
+ { $env->set_out("licences", $this->content_sources_mod->licences);
+ if(($groupes = $data->groupes()) !== false)
+ { $env->set_out("groupes", $groupes);
+ $groupe = null;
+ $album = null;
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")])
+ { if(isset($groupes["list"][$_GET[$env->param("groupe")]]))
+ { $groupe = $groupes["list"][$_GET[$env->param("groupe")]];
+ $env->set_out("groupe", $groupe);
+ }
+ else $groupe = false;
+ }
+ if($groupe !== false)
+ { if(isset($_GET[$env->param("album")]) && $_GET[$env->param("album")])
+ { if(($album = $data->source($_GET[$env->param("album")], true)) !== false)
+ { $env->set_out("album", $album);
+ if(!isset($groupe))
+ { $groupe = $data->get_admin_groupe($album["groupes"]);
+ if(!$groupe) $groupe = false;
+ }
+ }
+ }
+ }
+ if($groupe !== false)
+ { $env->set_out("groupe", $groupe);
+ if($album !== false)
+ { $select = array("status" => $this->content_sources_mod->album_status_id);
+ if(isset($groupe)) $select["id_groupe"] = $groupe["id"];
+ if(($albums = $data->sources($select)) !== false)
+ { $env->set_out("albums", $albums);
+ $select = array();
+ $select["status"] = $this->content_sources_mod->morceau_status_id;
+ $select["order_by"] = "ordre";
+ if(isset($groupe)) $select["id_groupe"] = $groupe["id"];
+ if(isset($_GET[$env->param("album")])) $select["id_composition"] = $_GET[$env->param("album")];
+ $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
+ if(($morceaux = $data->sources($select, true)) !== false) $env->set_out("morceaux", $morceaux);
+ else $env->erreur("Impossible de lire la liste des morceaux");
+ }
+ else $env->erreur("impossible de lire la liste des albums");
+ }
+ else $env->erreur("Impossible de lire les informations de l'album");
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ else $env->erreur("Impossible de lire la liste des groupes");
+ }
+ else $env->erreur("Impossible de lire la liste des licences");
+ }
+
+ function view(){
+ $env = $this->env();
+ $data = $env->data();
+ if($this->content_sources_mod->licences !== false)
+ { $env->set_out("licences", $this->content_sources_mod->licences);
+ if(isset($_GET[$env->param("morceau")]) && $_GET[$env->param("morceau")])
+ { if($morceau = $data->source($_GET[$env->param("morceau")], true))
+ { $env->set_out("morceau", $morceau);
+ if($groupe = $data->get_admin_groupe($morceau["groupes"]))
+ { $env->set_out("groupe", $groupe);
+ $select = array("status" => $this->content_sources_mod->album_status_id);
+ $select["id_groupe"] = $groupe["id"];
+ if(($albums = $data->sources($select)) !== false)
+ { $env->set_out("albums", $albums);
+ if(($ariane = $data->source_ariane($morceau["id"])) !== false)
+ { $ariane = array_reverse($ariane);
+ $album = null;
+ foreach($ariane as $id_ariane => $source_ariane)
+ { if(!isset($album)) $album = $source_ariane;
+ }
+ if($album) $env->set_out("album", $album);
+ }
+ else $env->erreur("Impossible de lire le fil d'ariane");
+ }
+ else $env->erreur("impossible de lire la liste des albums");
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ else $env->erreur("Impossible de lire les informations du morceau");
+ }
+ else $env->erreur("identifiant de morceau manquant");
+ }
+ else $env->erreur("Impossible de lire la liste des licences");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/sources/piste.php b/app/controllers/sources/piste.php
new file mode 100644
index 0000000..668892f
--- /dev/null
+++ b/app/controllers/sources/piste.php
@@ -0,0 +1,114 @@
+env();
+ if($this->content_sources_mod = $env->get_controller("content/sources"))
+ { $this->content_sources_mod->validation_result = true;
+ $this->content_sources_mod->validate_status($env);
+ $this->content_sources_mod->validate_licences($env);
+ return $this->content_sources_mod->validation_result;
+ }
+ return "impossible de valider le module";
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ if(isset($this->content_sources_mod->licences) && $this->content_sources_mod->licences !== false)
+ { $env->set_out("licences", $this->content_sources_mod->licences);
+ if(($groupes = $data->groupes()) !== false)
+ { $env->set_out("groupes", $groupes);
+ $groupe = null;
+ $morceau = null;
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")])
+ { if(isset($groupes["list"][$_GET[$env->param("groupe")]]))
+ { $groupe = $groupes["list"][$_GET[$env->param("groupe")]];
+ $env->set_out("groupe", $groupe);
+ }
+ else $groupe = false;
+ }
+ if($groupe !== false)
+ { if(isset($_GET[$env->param("morceau")]) && $_GET[$env->param("morceau")])
+ { if(($morceau = $data->source($_GET[$env->param("morceau")], true)) !== false)
+ { $env->set_out("morceau", $morceau);
+ if(!isset($groupe))
+ { $groupe = $data->get_admin_groupe($morceau["groupes"]);
+ if(!$groupe) $groupe = false;
+ }
+ }
+ }
+ }
+ if($groupe !== false)
+ { $env->set_out("groupe", $groupe);
+ if($morceau !== false)
+ { $select = array("status" => $this->content_sources_mod->morceau_status_id);
+ if(isset($groupe)) $select["id_groupe"] = $groupe["id"];
+ if(($morceaux = $data->sources($select)) !== false)
+ { $env->set_out("morceaux", $morceaux);
+ $select = array();
+ $select["status"] = $this->content_sources_mod->piste_status_id;
+ $select["order_by"] = "ordre";
+ if(isset($groupe)) $select["id_groupe"] = $groupe["id"];
+ if(isset($_GET[$env->param("morceau")])) $select["id_composition"] = $_GET[$env->param("morceau")];
+ $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
+ if(($pistes = $data->sources($select, true)) !== false) $env->set_out("pistes", $pistes);
+ else $env->erreur("Impossible de lire la liste des pistes");
+ }
+ else $env->erreur("impossible de lire la liste des morceaux");
+ }
+ else $env->erreur("Impossible de lire les informations du morceau");
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ else $erreur = "impossible de lire la liste des groupes";
+ }
+ else $env->erreur("impossible de lire la liste des licences");
+ }
+
+ function view(){
+ $env = $this->env();
+ $data = $env->data();
+ if(isset($this->content_sources_mod->licences) && $this->content_sources_mod->licences !== false)
+ { $env->set_out("licences", $this->content_sources_mod->licences);
+ if(isset($_GET[$env->param("piste")]) && $_GET[$env->param("piste")])
+ { if($piste = $data->source($_GET[$env->param("piste")], true))
+ { $env->set_out("piste", $piste);
+ if($groupe = $data->get_admin_groupe($piste["groupes"]))
+ { $env->set_out("groupe", $groupe);
+ $select = array("status" => $this->content_sources_mod->album_status_id);
+ $select["id_groupe"] = $groupe["id"];
+ if(($albums = $data->sources($select)) !== false)
+ { $env->set_out("albums", $albums);
+ if(($ariane = $data->source_ariane($piste["id"])) !== false)
+ { $ariane = array_reverse($ariane);
+ $morceau = null;
+ $album = null;
+ foreach($ariane as $id_ariane => $source_ariane)
+ { if(!isset($morceau)) $morceau = $source_ariane;
+ else
+ { if(!isset($album)) $album = $source_ariane;
+ }
+ }
+ if($morceau) $env->set_out("morceau", $morceau);
+ if($album) $env->set_out("album", $album);
+ }
+ else $env->erreur("Impossible de lire le fil d'ariane");
+ }
+ else $env->erreur("impossible de lire la liste des albums");
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ else $env->erreur("Impossible de lire les informations de la source");
+ }
+ else $env->erreur("parametre de piste manquant");
+ }
+ else $env->erreur("impossible de lire la liste des licences");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/users/albums.php b/app/controllers/users/albums.php
new file mode 100644
index 0000000..b26e200
--- /dev/null
+++ b/app/controllers/users/albums.php
@@ -0,0 +1,260 @@
+env();
+ $data = $env->data();
+ if(($this->status = $data->source_status()) !== false)
+ { foreach($this->status as $id_source_status => $source_status)
+ { if($source_status["nom"] == "album")
+ { $this->album_status_id = $id_source_status;
+ break;
+ }
+ }
+ if(isset($this->album_status_id))
+ { if($this->user = $env->user())
+ { if(($this->groupes = $data->groupes($this->user["id"])) !== false)
+ { $env->set_out("groupes", $this->groupes);
+ if($env->etat("action") == "edit" || $env->etat("action") == "del")
+ { if(($this->album = $data->source($_GET[$env->param("id")], true)) !== false && $this->album)
+ {
+ }
+ else return "Impossible de lire les informations de l'album";
+ }
+ if($env->etat("action") == "add" || $env->etat("action") == "edit")
+ { if(($this->licences = $data->licences()) !== false)
+ { $env->set_out("licences", $this->licences);
+ }
+ else return "Impossible de lire la liste des licences";
+ }
+ }
+ else return "Impossible de lire la liste des groupes";
+ }
+ else return "Vous devez être identifier pour accéder à cette page";
+ }
+ else return "Type de source inconnu: album";
+ }
+ else return "Impossible de lire la liste des status de source";
+ return true;
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ $select = array();
+ $select["status"] = $this->album_status_id;
+ $select["id_user"] = $this->user["id"];
+ $select["order_by"] = "ordre";
+ $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $select["id_groupe"] = $_GET[$env->param("groupe")];
+ if(($albums = $data->sources($select)) !== false)
+ { foreach($albums["list"] as $id_album => $album)
+ { $albums["list"][$id_album]["permissions"] = $data->source_permissions($albums["list"][$id_album], $this->user["id"]);
+ }
+ if($_POST)
+ { $OK = true;
+ foreach($albums["list"] as $id_album => $album)
+ { if(isset($_POST["ordre_".$id_album]))
+ { if($data->set_source_info($id_album, "ordre", $_POST["ordre_".$id_album]) === false)
+ { $OK = false;
+ break;
+ }
+ }
+ }
+ if($OK)
+ { $get_params = array();
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $get_params["groupe"] = $_GET[$env->param("groupe")];
+ $env->redirect
+ ( $env->url("users/albums", $get_params),
+ "l'ordre des albums a été enregistré"
+ );
+ }
+ else $env->erreur("Impossible d'enregistrer l'ordre des albums");
+ }
+ $env->set_out("albums", $albums);
+ }
+ else $env->erreur("Impossible de lire la liste des albums");
+ }
+
+ function add(){
+ $env = $this->env();
+ $data = $env->data();
+ if($data->check_user_uploads_dir())
+ { $web_path = $env->path("web");
+ $upload_dir = $env->path("content")."uploads/".$this->user["id"];
+ $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$upload_dir;
+ $this->album = $data->empty_source();
+ $source_infos = array
+ ( "date_inscription" => date("Y")."-".date("m")."-".date("d"),
+ "ordre" => 0
+ );
+ if($_POST)
+ { if(($groupe = $data->groupe($_POST["id_groupe"])) !== false)
+ { $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
+ $env->set_out("groupe", $groupe);
+ $this->album["groupes"] = array($groupe["id"] => $groupe);
+ $this->album["titre"] = trim($_POST["titre"]);
+ $this->album["licence"] = array
+ ( "id" => $_POST["licence"]
+ );
+ $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
+ $source_infos["description"] = $_POST["description"];
+ foreach($_POST as $post_key => $post_value)
+ { if(substr($post_key, 0, 13) == "document_nom_")
+ { if($id_document = substr($post_key, 13))
+ { $this->album["documents"][$id_document] = array
+ ( "nom" => $_POST["document_nom_".$id_document],
+ "url" => $_POST["document_url_".$id_document]
+ );
+ }
+ }
+ }
+ if($this->album["titre"])
+ { if(($image = $data->upload("image", $upload_dir)) !== false)
+ { if($image) $source_infos["image"] = $this->user["id"]."/".$image;
+ if
+ ( $data->add_source
+ ( $this->album["groupes"],
+ $this->album["titre"],
+ $this->album_status_id,
+ $this->album["licence"]["id"],
+ $this->album["documents"],
+ $this->album["reference"],
+ $this->album["derivations"],
+ $source_infos
+ )
+ ) $env->redirect
+ ( $env->url("users/albums"),
+ "l'album a été ajouté"
+ );
+ else $env->erreur("Impossible d'ajouter l'album");
+ }
+ else $env->erreur("Impossible d'uploader l'image");
+ }
+ else $env->message("merci de préciser un titre pour l'album");
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ foreach($source_infos as $info_key => $info_value) $this->album[$info_key] = $info_value;
+ $env->set_out("album", $this->album);
+ }
+ else $env->erreur("Impossible de creer le repertoire utilisateur");
+ }
+
+ function edit(){
+ $env = $this->env();
+ $data = $env->data();
+ $this->album["premissions"] = $data->source_permissions($this->album, $this->user["id"]);
+ if($this->album["premissions"]["editeur"])
+ { if($data->check_user_uploads_dir())
+ { $web_path = $env->path("web");
+ $upload_dir = $env->path("content")."uploads/".$this->user["id"];
+ $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$upload_dir;
+ $source_infos = array
+ ( "date_inscription" => $this->album["date_inscription"],
+ "ordre" => $this->album["ordre"],
+ "date_creation" => $this->album["date_creation"],
+ "description" => $this->album["description"],
+ "image" => $this->album["image"]
+ );
+ $env->set_out("groupe", $data->get_admin_groupe($this->album["groupes"]));
+ if($_POST)
+ { if(($groupe = $data->groupe($_POST["id_groupe"])) !== false)
+ { $env->set_out("groupe", $groupe);
+ $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
+ $this->album["groupes"] = array($groupe["id"] => $groupe);
+ $this->album["titre"] = trim($_POST["titre"]);
+ $this->album["licence"] = array
+ ( "id" => $_POST["licence"]
+ );
+ $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
+ $source_infos["description"] = $_POST["description"];
+ foreach($_POST as $post_key => $post_value)
+ { if(substr($post_key, 0, 13) == "document_nom_")
+ { if($id_document = substr($post_key, 13))
+ { $this->album["documents"][$id_document] = array
+ ( "nom" => $_POST["document_nom_".$id_document],
+ "url" => $_POST["document_url_".$id_document]
+ );
+ }
+ }
+ }
+ if($this->album["titre"])
+ { if(isset($_POST["del_image"]))
+ { if($this->album["image"])
+ { if(@unlink($env->path("content")."uploads/".$this->album["image"])) $this->album["image"] = "";
+ else
+ { $this->album["image"] = false;
+ $env->erreur("Impossible d'effacer l'image");
+ }
+ }
+ else $this->album["image"] = "";
+ }
+ else
+ { if(($up_image = $data->upload("image", $upload_dir)) !== false)
+ { if($up_image) $this->album["image"] = $this->user["id"]."/".$up_image;
+ }
+ else
+ { $env->erreur("Impossible d'uploader l'image");
+ return;
+ }
+ }
+ if($this->album["image"] !== false)
+ { if($this->album["image"]) $source_infos["image"] = $this->album["image"];
+ if
+ ( $data->set_source
+ ( $this->album["id"],
+ $this->album["groupes"],
+ $this->album["titre"],
+ $this->album_status_id,
+ $this->album["licence"]["id"],
+ $this->album["documents"],
+ $this->album["reference"],
+ $this->album["derivations"],
+ $source_infos
+ )
+ ) $env->redirect
+ ( $env->url("users/albums/edit", array("id" => $this->album["id"])),
+ "l'album a été modifié"
+ );
+ else $env->erreur("Impossible de modifier l'album");
+ }
+ else $env->erreur("Impossible d'uploader l'image");
+ }
+ else $env->message("merci de préciser un titre pour l'album");
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ $env->set_out("album", $this->album);
+ }
+ else $env->erreur("Impossible de creer le repertoire utilisateur");
+ }
+ else $env->erreur("Vous n'avez pas la permission de modifier cet album");
+ }
+
+ function del(){
+ $env = $this->env();
+ $data = $env->data();
+ $this->album["premissions"] = $data->source_permissions($this->album, $this->user["id"]);
+ if($this->album["premissions"]["admin"])
+ { if($data->del_source($this->album["id"]))
+ { $env->redirect
+ ( $env->url("users/albums"),
+ "l'album a été supprimé"
+ );
+ }
+ else $env->erreur("Impossible de supprimer l'album");
+ }
+ else $env->erreur("Vous n'avez pas la permission de supprimer cet album");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/users/groupes.php b/app/controllers/users/groupes.php
new file mode 100644
index 0000000..8730e2c
--- /dev/null
+++ b/app/controllers/users/groupes.php
@@ -0,0 +1,183 @@
+env();
+ $data = $env->data();
+ if($this->user = $env->user())
+ { if($env->etat("action") == "edit" || $env->etat("action") == "del")
+ { if
+ ( ( $this->groupe = $data->groupe
+ ( $_GET[$env->param("id")]
+ )
+ ) !== false
+ && $this->groupe
+ )
+ { if($this->groupe["id_user"] == $this->user["id"])
+ { return true;
+ }
+ else return "Vous n'est pas autorisé à modifier ce groupe";
+ }
+ else return "Impossible de lire les informations du groupe";
+ }
+ else return true;
+ }
+ return "Vous devez être identifier pour accéder à cette page";
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ if
+ ( $env->set_out
+ ( "groupes",
+ $data->groupes
+ ( $this->user["id"],
+ isset($_GET[$env->param("start")]) ? $_GET[$env->param("start")] : 0
+ )
+ ) !== false
+ )
+ {
+ }
+ else $env->erreur("Impossible de lire la liste des groupes");
+ }
+
+ function add(){
+ $env = $this->env();
+ $data = $env->data();
+ if($data->check_user_uploads_dir())
+ { $web_path = $env->path("web");
+ $upload_dir = $env->path("content")."uploads/".$this->user["id"];
+ $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$upload_dir;
+ if($_POST)
+ { $env->set_out("groupe", $_POST);
+ if(($image = $data->upload("image", $upload_dir)) !== false){
+ if(trim($_POST["nom"]))
+ { if(($exists = $data->groupe_exists($_POST["nom"])) !== false)
+ { if(!isset($_POST["contact_form"]) || trim($_POST["email"]))
+ { if($exists == 0)
+ { if
+ ( $data->add_groupe
+ ( $this->user["id"],
+ $_POST["nom"],
+ $image ? $this->user["id"]."/".$image : null,
+ $_POST["description"],
+ $_POST["email"],
+ isset($_POST["contact_form"]) ? 1 : 0,
+ isset($_POST["captcha"]) ? 1 : 0
+ )
+ ) $env->redirect
+ ( $env->url("users/groupes"),
+ "le groupe a été ajouté"
+ );
+ else $env->erreur("Impossible d'ajouter le groupe");
+ }
+ else $env->message("Un groupe avec ce nom existe déjà");
+ }
+ else $env->message("merci de préciser un email pour le formulaire de contact");
+ }
+ else $env->erreur("Impossible de savoir si le groupe existe déjà");
+ }
+ else $env->message("merci de préciser un nom pour le groupe");
+ }
+ else $env->erreur("Impossible d'uploader l'image");
+ }
+ }
+ else $env->erreur("Impossible de creer le repertoire utilisateur");
+ }
+
+ function edit(){
+ $env = $this->env();
+ $data = $env->data();
+ if($data->check_user_uploads_dir())
+ { $web_path = $env->path("web");
+ $upload_dir = $env->path("content")."uploads/".$this->user["id"];
+ $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$upload_dir;
+ if($env->set_out("groupe", $this->groupe))
+ { $groupe = $env->out("groupe");
+ if($_POST)
+ { $id = $groupe["id"];
+ $nom = $groupe["nom"];
+ $image = $groupe["image"];
+ $_POST["image"] = $image ? $_SESSION["upload_dir"]."/".$image : "";
+ $env->set_out("groupe", $_POST);
+ if(isset($_POST["del_image"]))
+ { if($image)
+ { if(@unlink($env->path("content")."uploads/".$image)) $image = "";
+ else
+ { $image = false;
+ $env->erreur("Impossible d'effacer l'image");
+ }
+ }
+ else $image = "";
+ }
+ else
+ { if(($new_image = $data->upload("image", $upload_dir)) !== false)
+ { if($new_image) $image = $this->user["id"]."/".$new_image;
+ }
+ else $env->erreur("Impossible d'uploader l'image");
+ }
+ if($image !== false)
+ { if(trim($_POST["nom"]))
+ { if(($exists = $data->groupe_exists($_POST["nom"], $this->groupe["id"])) !== false)
+ { if(!$exists)
+ { if(!isset($_POST["contact_form"]) || trim($_POST["email"]))
+ { if
+ ( $data->set_groupe
+ ( $id,
+ $_POST["nom"],
+ $image,
+ $_POST["description"],
+ $_POST["email"],
+ isset($_POST["contact_form"]) ? 1 : 0,
+ isset($_POST["captcha"]) ? 1 : 0
+ )
+ ) $env->redirect
+ ( $env->url("users/groupes/edit", array("id" => $_GET[$env->param("id")])),
+ "le groupe a été modifié"
+ );
+ else $env->erreur("Impossible de modifier le groupe");
+ }
+ else $env->message("merci de préciser un email pour le formulaire de contact");
+ }
+ else $env->message("Un groupe avec ce nom existe déjà");
+ }
+ else $env->erreur("Impossible de savoir si le groupe existe déjà");
+ }
+ else $env->message("merci de préciser un nom pour le groupe");
+ }
+ }
+ else
+ { $env->set_out("groupe", $groupe);
+ }
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ else $env->erreur("Impossible de creer le repertoire utilisateur");
+ }
+
+ function del(){
+ $env = $this->env();
+ $data = $env->data();
+ if(($res = $data->del_groupe($this->groupe["id"])) !== false)
+ { if($res === 1) $env->redirect
+ ( $env->url("users/groupes"),
+ "Ce groupe a des sources sur ce site, il n'a pas été supprimé.",
+ 5
+ );
+ else $env->redirect
+ ( $env->url("users/groupes"),
+ "le groupe a été supprimé"
+ );
+ }
+ else $env->erreur("Impossible de supprimer le groupe");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/users/morceaux.php b/app/controllers/users/morceaux.php
new file mode 100644
index 0000000..ba58bda
--- /dev/null
+++ b/app/controllers/users/morceaux.php
@@ -0,0 +1,435 @@
+env();
+ $data = $env->data();
+ if(($this->status = $data->source_status()) !== false)
+ { foreach($this->status as $id_source_status => $source_status)
+ { if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
+ if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
+ if(isset($this->album_status_id) && isset($this->morceau_status_id)) break;
+ }
+ if(isset($this->album_status_id) && isset($this->morceau_status_id))
+ { if($this->user = $env->user())
+ { if(($this->groupes = $data->groupes($this->user["id"])) !== false){
+ $env->set_out("groupes", $this->groupes);
+ $this->albums = array();
+ if($this->groupes["total"] > 0)
+ { $select = array();
+ $select["status"] = $this->album_status_id;
+ $select["id_user"] = $this->user["id"];
+ foreach($this->groupes["list"] as $id_groupe => $groupe)
+ { $select["id_groupe"] = $id_groupe;
+ if(($albums = $data->sources($select)) !== false)
+ { $this->albums[$id_groupe] = $albums["list"];
+ }
+ else $this->albums = false;
+ }
+ }
+ if($this->albums !== false)
+ { $env->set_out("albums", $this->albums);
+ if($env->etat("action") == "edit" || $env->etat("action") == "del" || $env->etat("action") == "maj_xml")
+ { if($this->morceau = $data->source($_GET[$env->param("id")], true))
+ {
+ }
+ else return "Impossible de lire les informations du morceau";
+ }
+ if($env->etat("action") == "add" || $env->etat("action") == "edit")
+ { if(($this->licences = $data->licences()) !== false)
+ { $env->set_out("licences", $this->licences);
+ }
+ else return "Impossible de lire la liste des licences";
+ }
+ }
+ else return "Impossible de lire la liste des albums";
+ }
+ else return "Impossible de lire la liste des groupes";
+ }
+ else return "Vous devez être identifier pour accéder à cette page";
+ }
+ else
+ { if(!isset($this->album_status_id)) return "Type de source inconnu: album";
+ return "Type de source inconnu: morceau";
+ }
+ }
+ else return "Impossible de lire la liste des status de source";
+ return true;
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ $select = array();
+ $select["status"] = $this->morceau_status_id;
+ $select["id_user"] = $this->user["id"];
+ $select["order_by"] = "ordre";
+ $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $select["id_groupe"] = $_GET[$env->param("groupe")];
+ if(isset($_GET[$env->param("album")])) $select["id_composition"] = $_GET[$env->param("album")];
+ if(($morceaux = $data->sources($select)) !== false)
+ { foreach($morceaux["list"] as $id_morceau => $morceau)
+ { $morceaux["list"][$id_morceau]["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
+ }
+ if($_POST)
+ { $OK = true;
+ foreach($morceaux["list"] as $id_morceau => $morceau)
+ { if(isset($_POST["ordre_".$id_morceau]))
+ { if($data->set_source_info($morceau["id"], "ordre", $_POST["ordre_".$id_morceau]) === false)
+ { $OK = false;
+ break;
+ }
+ }
+ }
+ if($OK)
+ { $get_params = array();
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $get_params["groupe"] = $_GET[$env->param("groupe")];
+ if(isset($_GET[$env->param("album")]) && $_GET[$env->param("album")]) $get_params["album"] = $_GET[$env->param("album")];
+ $env->redirect
+ ( $env->url("users/morceaux", $get_params),
+ "l'ordre des morceaux a été enregistré"
+ );
+ }
+ else $env->erreur("Impossible d'enregistrer l'ordre des morceaux");
+ }
+ $env->set_out("groupes", $this->groupes);
+ $env->set_out("albums", $this->albums);
+ $env->set_out("morceaux", $morceaux);
+ }
+ else $env->erreur("Impossible de lire la liste des morceaux");
+ }
+
+ function add(){
+ $env = $this->env();
+ $data = $env->data();
+ if($data->check_user_uploads_dir())
+ { $web_path = $env->path("web");
+ $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
+ $this->morceau = $data->empty_source();
+ $users_sources_mod = $env->get_controller("users/sources");
+ $source_infos = array
+ ( "date_inscription" => date("Y")."-".date("m")."-".date("d"),
+ "ordre" => 0
+ );
+ if($_POST)
+ { if(($groupe = $data->groupe($_POST["id_groupe"])) !== false)
+ { $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
+ $this->morceau["groupes"] = array($groupe["id"] => $groupe);
+ if($_POST["album"])
+ { if($album = $data->source($_POST["album"], true))
+ { $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
+ if(!$album["permissions"]["contributeur"])
+ { $env->erreur("vous n'avez pas la permission d'ajouter un morceau dans cet album");
+ return;
+ }
+ }
+ else
+ { $env->erreur("impossible de lire les informations de l'album");
+ return;
+ }
+ $this->morceau["album"] = $_POST["album"];
+ }
+ if($_POST["is_derivation"])
+ { foreach($_POST as $key => $value)
+ { if(substr($key, 0, 14) == "derivation_id_")
+ { $id_source_derivation = substr($key, 14);
+ $xml_url = trim($_POST["derivation_".$id_source_derivation]);
+ $this->morceau["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml
+ ( $env,
+ $xml_url,
+ ( $_POST["use_edit_derivation_content_".$id_source_derivation] ?
+ $_POST["edit_derivation_content_".$id_source_derivation]
+ : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+ ),
+ $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
+ );
+ }
+ }
+ }
+ if($_POST["is_reference"])
+ { $xml_url = trim($_POST["reference"]);
+ $this->morceau["reference"] = $users_sources_mod->get_source_from_xml
+ ( $env,
+ $xml_url,
+ ( $_POST["use_edit_reference_content"] ?
+ $_POST["edit_reference_content"]
+ : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+ ),
+ $_POST["use_edit_reference_content"] ? true : false
+ );
+ }
+ else
+ { if($this->morceau["titre"] = trim($_POST["titre"]))
+ { $this->morceau["licence"] = array
+ ( "id" => $_POST["licence"]
+ );
+ $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
+ $source_infos["description"] = $_POST["description"];
+ foreach($_POST as $post_key => $post_value)
+ { if(substr($post_key, 0, 13) == "document_nom_")
+ { if($id_document = substr($post_key, 13))
+ { $this->morceau["documents"][$id_document] = array
+ ( "nom" => $_POST["document_nom_".$id_document],
+ "url" => $_POST["document_url_".$id_document]
+ );
+ }
+ }
+ }
+ }
+ else $env->message("merci de préciser un titre pour le morceau");
+ }
+ if(!$env->out("messages") && !$env->out("erreur"))
+ { if
+ ( ( $id_source = $data->add_source
+ ( $this->morceau["groupes"],
+ $this->morceau["titre"],
+ $this->morceau_status_id,
+ $this->morceau["licence"]["id"],
+ $this->morceau["documents"],
+ $this->morceau["reference"],
+ $this->morceau["derivations"],
+ $source_infos
+ )
+ ) !== false
+ )
+ { if($_POST["album"])
+ { if($data->set_source_composition($id_source, $_POST["album"]))
+ { $env->redirect
+ ( $env->url("users/morceaux"),
+ "le morceau a été ajouté"
+ );
+ }
+ else $env->erreur("Le morceau a été ajouté mais impossible de l'associer à cet album");
+ }
+ else $env->redirect
+ ( $env->url("users/morceaux"),
+ "le morceau a été ajouté"
+ );
+ }
+ else $env->erreur("Impossible d'ajouter le morceau");
+ }
+ }
+ else $env->erreur("Impossible de lire les informations du groupe");
+ }
+ $env->set_out("morceau", $this->morceau);
+ }
+ else $env->erreur("Impossible de creer le repertoire utilisateur");
+ }
+
+ function edit(){
+ $env = $this->env();
+ $data = $env->data();
+ $this->morceau["premissions"] = $data->source_permissions($this->morceau, $this->user["id"]);
+ if(!$this->morceau["premissions"]["editeur"])
+ { $env->erreur("vous n'avez la permission d'editer ce morceau");
+ return;
+ }
+ if($data->check_user_uploads_dir())
+ { $web_path = $env->path("web");
+ $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
+ if(($compositions = $data->source_compositions(array("id_source" => $this->morceau["id"]))) !== false)
+ { if($compositions) foreach($compositions[$this->morceau["id"]] as $id_album) { $this->morceau["album"] = $id_album; break; }
+ $env->set_out("groupe", $data->get_admin_groupe($this->morceau["groupes"]));
+ if($_POST)
+ { $source_infos = array
+ ( "date_inscription" => $_POST["date_inscription"],
+ "ordre" => isset($this->morceau["ordre"]) ? $this->morceau["ordre"] : 0
+ );
+ $this->morceau = $data->empty_source(array("id" => $this->morceau["id"]));
+ $users_sources_mod = $env->get_controller("users/sources");
+ if(!($groupe = $data->groupe($_POST["id_groupe"])))
+ { $env->erreur("Impossible de lire les informations du groupe");
+ return;
+ }
+ $env->set_out("groupe", $groupe);
+ $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
+ $this->morceau["groupes"] = array($groupe["id"] => $groupe);
+ $this->morceau["derivations"] = array();
+ if($_POST["album"])
+ { if($album = $data->source($_POST["album"], true))
+ { $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
+ if(!$album["permissions"]["contributeur"])
+ { $env->erreur("vous n'avez pas la permission d'ajouter un morceau dans cet album");
+ return;
+ }
+ }
+ else
+ { $env->erreur("Impossible de lire les informations de l'album");
+ return;
+ }
+ $this->morceau["album"] = $_POST["album"];
+ }
+ if($_POST["is_derivation"])
+ { foreach($_POST as $key => $value)
+ { if(substr($key, 0, 14) == "derivation_id_")
+ { $id_source_derivation = substr($key, 14);
+ $xml_url = trim($_POST["derivation_".$id_source_derivation]);
+ $this->morceau["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml
+ ( $env,
+ $xml_url,
+ ( $_POST["use_edit_derivation_content_".$id_source_derivation] ?
+ $_POST["edit_derivation_content_".$id_source_derivation]
+ : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+ ),
+ $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
+ );
+ }
+ }
+ }
+ if($_POST["is_reference"])
+ { $xml_url = trim($_POST["reference"]);
+ $this->morceau["reference"] = $users_sources_mod->get_source_from_xml
+ ( $env,
+ $xml_url,
+ ( $_POST["use_edit_reference_content"] ?
+ $_POST["edit_reference_content"]
+ : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+ ),
+ $_POST["use_edit_reference_content"] ? true : false
+ );
+ }
+ else
+ { if($this->morceau["titre"] = trim($_POST["titre"]))
+ { $this->morceau["licence"] = array
+ ( "id" => $_POST["licence"]
+ );
+ $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
+ $source_infos["description"] = $_POST["description"];
+ foreach($_POST as $post_key => $post_value)
+ { if(substr($post_key, 0, 13) == "document_nom_")
+ { if($id_document = substr($post_key, 13))
+ { $this->morceau["documents"][$id_document] = array
+ ( "nom" => $_POST["document_nom_".$id_document],
+ "url" => $_POST["document_url_".$id_document]
+ );
+ }
+ }
+ }
+ }
+ else $env->message("merci de préciser un titre pour le morceau");
+ }
+ if(!$env->out("messages") && !$env->out("erreur"))
+ { if
+ ( ( $data->set_source
+ ( $this->morceau["id"],
+ $this->morceau["groupes"],
+ $this->morceau["titre"],
+ $this->morceau_status_id,
+ $this->morceau["licence"]["id"],
+ $this->morceau["documents"],
+ $this->morceau["reference"],
+ $this->morceau["derivations"],
+ $source_infos
+ )
+ ) !== false
+ )
+ { if($data->del_source_compositions(array("id_source" => $this->morceau["id"])))
+ { if($_POST["album"])
+ { if($data->set_source_composition($this->morceau["id"], $_POST["album"]))
+ { $env->redirect
+ ( $env->url("users/morceaux/edit", array("id" => $this->morceau["id"])),
+ "le morceau a été modifié"
+ );
+ }
+ else $env->erreur("Le morceau a été modifié mais impossible de l'associer à cet album");
+ }
+ else $env->redirect
+ ( $env->url("users/morceaux/edit", array("id" => $this->morceau["id"])),
+ "le morceau a été modifié"
+ );
+ }
+ else $env->erreur("Le morceau a été modifié mais impossible de l'associer à cet album");
+ }
+ else $env->erreur("Impossible de modifier le morceau");
+ }
+ }
+ }
+ else $env->erreur("Impossible de lire la liste des compositions");
+ $env->set_out("morceau", $this->morceau);
+ }
+ else $env->erreur("Impossible de creer le repertoire utilisateur");
+ }
+
+ function maj_xml(){
+ $data = $env->data();
+ $this->morceau["premissions"] = $data->source_permissions($this->morceau, $this->user["id"]);
+ if(!$this->morceau["premissions"]["editeur"])
+ { $env->erreur("vous n'avez la permission d'editer ce morceau");
+ return;
+ }
+ if
+ ( isset($_GET[$env->param("id")])
+ && isset($_GET[$env->param("xml")])
+ && ($_GET[$env->param("xml")] == "derviation" ? isset($_GET[$env->param("derivation")]) : true)
+ )
+ { $xml_url = "";
+ if($_GET[$env->param("xml")] == "derivation")
+ { if(isset($this->morceau["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
+ $xml_url = $this->morceau["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
+ }
+ elseif($_GET[$env->param("xml")] == "reference")
+ { if(isset($this->morceau["reference"]["xml"]["url"]))
+ $xml_url = $this->morceau["reference"]["xml"]["url"];
+ }
+ $erreur = "";
+ if($xml_url)
+ { if(($res = $data->maj_source_cache($xml_url)) !== false)
+ { if($res === true)
+ { if($this->morceau = $data->source($this->morceau["id"]))
+ { $env->redirect
+ ( $env->url("users/morceaux/edit", array("id" => $this->morceau["id"])),
+ "Les informations du fichier XML ont été mises à jour",
+ 2
+ );
+ return;
+ }
+ else $erreur =
+ "le contenu du fichier XML a été mis à jour"
+ .", mais impossible de lire les informations du morceau";
+ }
+ else
+ { switch($res)
+ { case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
+ case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break;
+ default: $erreur = "Erreur inconnue (?)"; break;
+ }
+ }
+ }
+ else $erreur = "Impossible de mettre à jour le contenu du fichier XML dans le cache";
+ }
+ else $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
+ if($erreur) $env->erreur($erreur);
+ else $env->run("users/morceaux/edit", array("id" => $this->morceau["id"]));
+ }
+ else $env->erreur("parametre de fichier xml manquant");
+ }
+
+ function del(){
+ $env = $this->env();
+ $data = $env->data();
+ $this->morceau["premissions"] = $data->source_permissions($this->morceau, $this->user["id"]);
+ if($this->morceau["premissions"]["admin"])
+ { if($data->del_source($this->morceau["id"]))
+ { $env->redirect
+ ( $env->url("users/morceaux"),
+ "le morceau a été supprimé"
+ );
+ }
+ else $env->erreur("Impossible de supprimer le morceau");
+ }
+ else $env->erreur("vous n'avez la permission d'effacer ce morceau");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/users/pistes.php b/app/controllers/users/pistes.php
new file mode 100644
index 0000000..8d3d1ea
--- /dev/null
+++ b/app/controllers/users/pistes.php
@@ -0,0 +1,478 @@
+env();
+ $data = $env->data();
+ if(($this->status = $data->source_status()) !== false)
+ { foreach($this->status as $id_source_status => $source_status)
+ { if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
+ if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
+ if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status;
+ if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break;
+ }
+ if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id))
+ { if($this->user = $env->user())
+ { if(($this->groupes = $data->groupes($this->user["id"])) !== false)
+ { $env->set_out("groupes", $this->groupes);
+ $this->albums = array();
+ $this->morceaux = array();
+ if($this->groupes["total"] > 0)
+ { foreach($this->groupes["list"] as $id_groupe => $groupe)
+ { $this->albums[$id_groupe] = array();
+ $select = array
+ ( "status" => $this->album_status_id,
+ "id_user" => $this->user["id"],
+ "id_groupe" => $id_groupe
+ );
+ if(($albums = $data->sources($select)) !== false)
+ { $this->albums[$id_groupe] = $albums["list"];
+ }
+ else
+ { $this->albums = false;
+ break;
+ }
+
+ $this->morceaux[$id_groupe] = array();
+ $select = array
+ ( "status" => $this->morceau_status_id,
+ "id_user" => $this->user["id"],
+ "id_groupe" => $id_groupe
+ );
+ if(($morceaux = $data->sources($select)) !== false)
+ { foreach($morceaux["list"] as $id_morceau => $morceau)
+ { if(($compositions = $data->source_compositions(array("id_source" => $id_morceau))) !== false)
+ { if($compositions) foreach($compositions[$id_morceau] as $_id_album) { $morceaux["list"][$id_morceau]["album"] = $_id_album; break; }
+ if(!isset($morceaux["list"][$id_morceau]["album"])) $morceaux["list"][$id_morceau]["album"] = 0;
+ }
+ else
+ { $this->morceaux = false;
+ break;
+ }
+ }
+ if($this->morceaux !== false)
+ { foreach($morceaux["list"] as $id_morceau => $morceau)
+ { if(!isset($this->morceaux[$id_groupe][$morceau["album"]])) $this->morceaux[$id_groupe][$morceau["album"]] = array();
+ $this->morceaux[$id_groupe][$morceau["album"]][$id_morceau] = $morceau;
+ }
+ }
+ }
+ else
+ { $this->morceaux = false;
+ break;
+ }
+ if($this->morceaux === false) break;
+ }
+ }
+ if($this->albums !== false && $this->morceaux !== false)
+ { $env->set_out("albums", $this->albums);
+ $env->set_out("morceaux", $this->morceaux);
+ if($env->etat("action") == "edit" || $env->etat("action") == "del" || $env->etat("action") == "maj_xml")
+ { if(($this->piste = $data->source($_GET[$env->param("id")], true)) !== false && $this->piste)
+ {
+ }
+ else return "Impossible de lire les informations de la source";
+ }
+ if($env->etat("action") == "add" || $env->etat("action") == "edit")
+ { if(($this->licences = $data->licences()) !== false)
+ { $env->set_out("licences", $this->licences);
+ }
+ else return "Impossible de lire la liste des licences";
+ }
+ }
+ else return "Impossible de lire la liste des albums";
+ }
+ else return "Impossible de lire la liste des groupes";
+ }
+ else return "Vous devez être identifier pour accéder à cette page";
+ }
+ else
+ { if(!isset($this->album_status_id)) return "Type de source inconnu: album";
+ return "Type de source inconnu: morceau";
+ }
+ }
+ else return "Impossible de lire la liste des status de source";
+ return true;
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ $select = array();
+ $select["status"] = $this->piste_status_id;
+ $select["id_user"] = $this->user["id"];
+ $select["order_by"] = "ordre";
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $select["id_groupe"] = $_GET[$env->param("groupe")];
+ if(isset($_GET[$env->param("morceau")]) && $_GET[$env->param("morceau")]) $select["id_composition"] = $_GET[$env->param("morceau")];
+ $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
+ if(($pistes = $data->sources($select)) !== false)
+ { foreach($pistes["list"] as $id_piste => $piste)
+ { $pistes["list"][$id_piste]["permissions"] = $data->source_permissions($piste, $this->user["id"]);
+ }
+ if($_POST)
+ { $OK = true;
+ foreach($pistes["list"] as $id_piste => $piste)
+ { if(isset($_POST["ordre_".$id_piste]))
+ { if($data->set_source_info($piste["id"], "ordre", $_POST["ordre_".$id_piste]) === false)
+ { $OK = false;
+ break;
+ }
+ }
+ }
+ if($OK)
+ { $get_params = array();
+ if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $get_params["groupe"] = $_GET[$env->param("groupe")];
+ if(isset($_GET[$env->param("morceau")]) && $_GET[$env->param("morceau")]) $get_params["morceau"] = $_GET[$env->param("morceau")];
+ $env->redirect
+ ( $env->url("users/pistes", $get_params),
+ "l'ordre des sources a été enregistré"
+ );
+ }
+ else $env->erreur("Impossible d'enregistrer l'ordre des sources");
+ }
+ $env->set_out("pistes", $pistes);
+ }
+ else $env->erreur("Impossible de lire la liste des sources");
+ }
+
+ function add(){
+ $env = $this->env();
+ $data = $env->data();
+ if($data->check_user_uploads_dir())
+ { $web_path = $env->path("web");
+ $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
+ $this->piste = $data->empty_source();
+ $users_sources_mod = $env->get_controller("users/sources");
+ $source_infos = array
+ ( "date_inscription" => date("Y")."-".date("m")."-".date("d"),
+ "ordre" => 0
+ );
+ if($_POST)
+ { if(($groupe = $data->groupe($_POST["id_groupe"])) !== false)
+ { $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
+ $this->piste["groupes"] = array($groupe["id"] => $groupe);
+ $env->set_out("groupe", $groupe);
+ }
+ else
+ { $env->erreur("Impossible de lire les informations du groupe");
+ return;
+ }
+ if($_POST["morceau"])
+ { if($morceau = $data->source($_POST["morceau"], true))
+ { $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
+ if(!$morceau["permissions"]["contributeur"])
+ { $env->erreur("vous n'avez pas la permission d'ajouter une source dans ce morceau");
+ return;
+ }
+ }
+ else
+ { $env->erreur("impossible de lire les informations du morceau");
+ return;
+ }
+ $this->piste["morceau"] = $_POST["morceau"];
+ }
+ if(isset($_POST["is_derivation"]))
+ { foreach($_POST as $key => $value)
+ { if(substr($key, 0, 14) == "derivation_id_")
+ { $id_source_derivation = substr($key, 14);
+ $xml_url = trim($_POST["derivation_".$id_source_derivation]);
+ $this->piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml
+ ( $env,
+ $xml_url,
+ ( $_POST["use_edit_derivation_content_".$id_source_derivation] ?
+ $_POST["edit_derivation_content_".$id_source_derivation]
+ : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+ ),
+ $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
+ );
+ }
+ }
+ }
+ if(isset($_POST["is_reference"]))
+ { $xml_url = trim($_POST["reference"]);
+ $this->piste["reference"] = $users_sources_mod->get_source_from_xml
+ ( $env,
+ $xml_url,
+ ( $_POST["use_edit_reference_content"] ?
+ $_POST["edit_reference_content"]
+ : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+ ),
+ $_POST["use_edit_reference_content"] ? true : false
+ );
+ }
+ else
+ { if($this->piste["titre"] = trim($_POST["titre"]))
+ { $this->piste["licence"] = array
+ ( "id" => $_POST["licence"]
+ );
+ $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
+ $source_infos["description"] = $_POST["description"];
+ foreach($_POST as $post_key => $post_value)
+ { if(substr($post_key, 0, 13) == "document_nom_")
+ { if($id_document = substr($post_key, 13))
+ { $this->piste["documents"][$id_document] = array
+ ( "nom" => $_POST["document_nom_".$id_document],
+ "url" => $_POST["document_url_".$id_document]
+ );
+ }
+ }
+ }
+ }
+ else $env->message("merci de préciser un titre pour la source");
+ }
+ if(!$env->out("messages") && !$env->out("erreur"))
+ { if
+ ( ( $id_source = $data->add_source
+ ( $this->piste["groupes"],
+ $this->piste["titre"],
+ $this->piste_status_id,
+ $this->piste["licence"]["id"],
+ $this->piste["documents"],
+ $this->piste["reference"],
+ $this->piste["derivations"],
+ $source_infos
+ )
+ ) !== false
+ )
+ { if($_POST["morceau"])
+ { if($data->set_source_composition($id_source, $_POST["morceau"]))
+ { $env->redirect
+ ( $env->url("users/pistes"),
+ "la source a été ajoutée"
+ );
+ }
+ else $env->erreur("La source a été ajoutée mais impossible de l'associer à ce morceau");
+ }
+ else $env->redirect
+ ( $env->url("users/pistes"),
+ "la source a été ajoutée"
+ );
+ }
+ else $env->erreur("Impossible d'ajouter la source");
+ }
+ }
+ $env->set_out("piste", $this->piste);
+ }
+ else $env->erreur("Impossible de creer le repertoire utilisateur");
+ }
+
+ function edit(){
+ $env = $this->env();
+ $data = $env->data();
+ $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
+ if(!$this->piste["premissions"]["editeur"])
+ { $env->erreur("vous n'avez la permission d'editer cette source");
+ return;
+ }
+ if($data->check_user_uploads_dir())
+ { $web_path = $env->path("web");
+ $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
+ if(($compositions = $data->source_compositions(array("id_source" => $this->piste["id"]))) !== false)
+ { if($compositions) foreach($compositions[$this->piste["id"]] as $id_morceau) { $this->piste["morceau"] = $id_morceau; break; }
+ $env->set_out("groupe", $data->get_admin_groupe($this->piste["groupes"]));
+ if($_POST)
+ { $source_infos = array
+ ( "date_inscription" => $_POST["date_inscription"],
+ "ordre" => isset($this->piste["ordre"]) ? $this->piste["ordre"] : 0
+ );
+ $this->piste = $data->empty_source(array("id" => $this->piste["id"]));
+ $users_sources_mod = $env->get_controller("users/sources");
+ if(!($groupe = $data->groupe($_POST["id_groupe"])))
+ { $env->erreur("Impossible de lire les informations du groupe");
+ return;
+ }
+ $env->set_out("groupe", $groupe);
+ $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
+ $this->piste["groupes"] = array($groupe["id"] => $groupe);
+ $this->piste["derivations"] = array();
+ if($_POST["morceau"])
+ { if($morceau = $data->source($_POST["morceau"], true))
+ { $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
+ if(!$morceau["permissions"]["contributeur"])
+ { $env->erreur("vous n'avez pas la permission d'ajouter une source dans ce morceau");
+ return;
+ }
+ }
+ else
+ { $env->erreur("impossible de lire les informations du morceau");
+ return;
+ }
+ $this->piste["morceau"] = $_POST["morceau"];
+ }
+ if(isset($_POST["is_derivation"]))
+ { foreach($_POST as $key => $value)
+ { if(substr($key, 0, 14) == "derivation_id_")
+ { $id_source_derivation = substr($key, 14);
+ $xml_url = trim($_POST["derivation_".$id_source_derivation]);
+ $this->piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml
+ ( $env,
+ $xml_url,
+ ( $_POST["use_edit_derivation_content_".$id_source_derivation] ?
+ $_POST["edit_derivation_content_".$id_source_derivation]
+ : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+ ),
+ $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
+ );
+ }
+ }
+ }
+ if(isset($_POST["is_reference"]))
+ { $xml_url = trim($_POST["reference"]);
+ $this->piste["reference"] = $users_sources_mod->get_source_from_xml
+ ( $env,
+ $xml_url,
+ ( $_POST["use_edit_reference_content"] ?
+ $_POST["edit_reference_content"]
+ : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+ ),
+ $_POST["use_edit_reference_content"] ? true : false
+ );
+ }
+ else
+ { if($this->piste["titre"] = trim($_POST["titre"]))
+ { $this->piste["licence"] = array
+ ( "id" => $_POST["licence"]
+ );
+ $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
+ $source_infos["description"] = $_POST["description"];
+ foreach($_POST as $post_key => $post_value)
+ { if(substr($post_key, 0, 13) == "document_nom_")
+ { if($id_document = substr($post_key, 13))
+ { $this->piste["documents"][$id_document] = array
+ ( "nom" => $_POST["document_nom_".$id_document],
+ "url" => $_POST["document_url_".$id_document]
+ );
+ }
+ }
+ }
+ }
+ else $env->message("merci de préciser un titre pour la source");
+ }
+ if(!$env->out("messages") && !$env->out("erreur"))
+ { if
+ ( ( $data->set_source
+ ( $this->piste["id"],
+ $this->piste["groupes"],
+ $this->piste["titre"],
+ $this->piste_status_id,
+ $this->piste["licence"]["id"],
+ $this->piste["documents"],
+ $this->piste["reference"],
+ $this->piste["derivations"],
+ $source_infos
+ )
+ ) !== false
+ )
+ { if($data->del_source_compositions(array("id_source" => $this->piste["id"])))
+ { if($_POST["morceau"])
+ { if($data->set_source_composition($this->piste["id"], $_POST["morceau"]))
+ { $env->redirect
+ ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
+ "la source a été modifiée"
+ );
+ }
+ else $env->erreur("La source a été modifiée mais impossible de l'associer à ce morceau");
+ }
+ else $env->redirect
+ ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
+ "la source a été modifiée"
+ );
+ }
+ else $env->erreur("La source a été modifiée mais impossible de l'associer à ce morceau");
+ }
+ else $env->erreur("Impossible de modifier la source");
+ }
+ }
+ }
+ else $env->erreur("Impossible de lire la liste des compositions");
+ $env->set_out("piste", $this->piste);
+ }
+ else $env->erreur("Impossible de creer le repertoire utilisateur");
+ }
+
+ function maj_xml(){
+ $env = $this->env();
+ $data = $env->data();
+ $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
+ if(!$this->piste["premissions"]["editeur"])
+ { $env->erreur("vous n'avez la permission d'editer cette source");
+ return;
+ }
+ if
+ ( isset($_GET[$env->param("id")])
+ && isset($_GET[$env->param("xml")])
+ && ($_GET[$env->param("xml")] == "derviation" ? isset($_GET[$env->param("derivation")]) : true)
+ )
+ { $xml_url = "";
+ if($_GET[$env->param("xml")] == "derivation")
+ { if(isset($this->piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
+ $xml_url = $this->piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
+ }
+ elseif($_GET[$env->param("xml")] == "reference")
+ { if(isset($this->piste["reference"]["xml"]["url"]))
+ $xml_url = $this->piste["reference"]["xml"]["url"];
+ }
+ $erreur = "";
+ if($xml_url)
+ { if(($res = $data->maj_source_cache($xml_url)) !== false)
+ { if($res === true)
+ { if($this->piste = $data->source($this->piste["id"]))
+ { $env->redirect
+ ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
+ "Les informations du fichier XML ont été mises à jour",
+ 2
+ );
+ return;
+ }
+ else $erreur =
+ "le contenu du fichier XML a été mis à jour"
+ .", mais impossible de lire les informations de la source";
+ }
+ else
+ { switch($res)
+ { case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
+ case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break;
+ default: $erreur = "Erreur inconnue (?)"; break;
+ }
+ }
+ }
+ else $erreur = "Impossible de mettre à jour le contenu du fichier XML dans le cache";
+ }
+ else $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
+ if($erreur) $env->erreur($erreur);
+ else $env->run("users/pistes/edit", array("id" => $this->piste["id"]));
+ }
+ else $env->erreur("parametre de fichier xml manquant");
+ }
+
+ function del(){
+ $env = $this->env();
+ $data = $env->data();
+ $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
+ if($this->piste["premissions"]["admin"])
+ { if($data->del_source($this->piste["id"]))
+ { $env->redirect
+ ( $env->url("users/pistes"),
+ "la source a été supprimée"
+ );
+ }
+ else $env->erreur("Impossible de supprimer la source");
+ }
+ else $env->erreur("vous n'avez la permission d'effacer cette source");
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/controllers/users/sources.php b/app/controllers/users/sources.php
new file mode 100644
index 0000000..f962924
--- /dev/null
+++ b/app/controllers/users/sources.php
@@ -0,0 +1,58 @@
+data();
+ $source = $data->empty_source();
+ $source_xml = array
+ ( "url" => $xml_url,
+ "content" => $xml_content,
+ "use_edit_content" => $xml_use_edit_content
+ );
+ if($source_xml["url"])
+ { if($source_xml["content"])
+ { if
+ ( ( $source = $data->source_xml_read
+ ( $source_xml["url"],
+ $source_xml["content"]
+ )
+ ) === false
+ )
+ { $source = $data->empty_source();
+ $env->message
+ ( "Code XML invalide pour :"
+ ."
".$source_xml["url"].""
+ );
+ }
+ }
+ else
+ { if($source_xml["content"] === false)
+ { $env->message
+ ( "Impossible de lire le contenu du fichier XML pour :"
+ ."
".$source_xml["url"].""
+ );
+ }
+ else
+ { $env->message
+ ( "Le contenu du fichier XML est vide pour :"
+ ."
".$source_xml["url"].""
+ );
+ }
+ }
+ }
+ else
+ { $env->message("Merci de préciser l'ULR du fichier XML");
+ }
+ $source["xml"] = $source_xml;
+ return $source;
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/data/modules/share/sml_data_sources_cache.php b/app/data/modules/share/sml_data_sources_cache.php
new file mode 100644
index 0000000..e09f824
--- /dev/null
+++ b/app/data/modules/share/sml_data_sources_cache.php
@@ -0,0 +1,238 @@
+env();
+ $sgbd = $this->sgbd();
+ if(($cache_infos = $this->source_cache_infos_db($url)) !== false)
+ { if($cache_infos)
+ { if($env->config("cache_maj_auto"))
+ { if(($need_update = $this->cache_need_update($cache_infos["last_update"], $env->config("cache_time") * 60 * 60)) !== false)
+ { if(!$IGNORE_UPDATE && $need_update)
+ { if($this->buffer = @file_get_contents($url))
+ { if($this->parse_source_xml($this->buffer))
+ { if($this->del_source_cache($cache_infos["id"], $cache_infos["id_source"]))
+ { if($this->add_source_cache($url, $this->buffer)) return $this->buffer;
+ }
+ }
+ else return -1;
+ }
+ else return -1;
+ }
+ else return @file_get_contents($env->path("content")."cache/sources/".$cache_infos["id_source"].".xml");
+ }
+ }
+ }
+ else
+ { if($this->buffer = @file_get_contents($url))
+ { if($this->parse_source_xml($this->buffer))
+ { if(!$this->add_source_cache($url, $this->buffer)) return false;
+ }
+ return $this->buffer;
+ }
+ }
+ }
+ return false;
+ }
+
+ /*
+ * retourne 1 si $last_update + $cache_time est
+ * superieur ou egal a la date courante, 0 sinon
+ *
+ * retourne FAUX si le formta de $last_update ou
+ * de $cache_time est incorrect
+ *
+ * $last_update : date au format Y-m-d H:i:s
+ *
+ * $cache_time : duree, en secondes
+ *
+ */
+ function cache_need_update($last_update, $cache_time)
+ { $v_last_update = explode(" ", $last_update);
+ if(count($v_last_update) == 2)
+ { $v_date = explode("-", $v_last_update[0]);
+ if(count($v_date) == 3)
+ { $v_time = explode(":", $v_last_update[1]);
+ if(count($v_time) == 3)
+ { if
+ ( preg_match("/^[0-9]+$/", $v_date[0])
+ && preg_match("/^[0-9]+$/", $v_date[1])
+ && preg_match("/^[0-9]+$/", $v_date[2])
+ && preg_match("/^[0-9]+$/", $v_time[0])
+ && preg_match("/^[0-9]+$/", $v_time[1])
+ && preg_match("/^[0-9]+$/", $v_time[2])
+ && preg_match("/^[0-9]+$/", $cache_time)
+ )
+ { return (time() - mktime($v_time[0], $v_time[1], $v_time[2], $v_date[1], $v_date[2], $v_date[0])) < $cache_time ? 0 : 1;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /*
+ * ajoute un contenu xml dans le cache
+ *
+ * $url : l'URL du fichier XML d'origine
+ *
+ * $xml_content : le contenu du fichier XML
+ *
+ */
+ function add_source_cache($url, $xml_content)
+ { $env = $this->env();
+ $sgbd = $this->sgbd();
+ if(($cache_index = $this->inc_sources_cache_index()) !== false)
+ { if($fh = @fopen($env->path("content")."cache/sources/".$cache_index.".xml", "w+"))
+ { $res = false;
+ if(@fwrite($fh, $this->buffer))
+ { @fclose($fh);
+ $res = $this->add_source_cache_db($url, $cache_index);
+ }
+ @fclose($fh);
+ return $res;
+ }
+ }
+ return false;
+ }
+
+ /*
+ * met a jour le cache pour le fichier XML dont l'URL d'origine est $url
+ *
+ * retourne :
+ *
+ * VRAI si tout se passe bien
+ * -1 si l'URL est introuvable
+ * -2 si le contenu a cette URL n'est pas un fichier XML de source
+ * FAUX si le cache n'a pas pu etre mis a jour avec les nouvelles infos
+ *
+ */
+ function maj_source_cache($url)
+ { if($this->buffer = @file_get_contents($url))
+ { if($this->parse_source_xml($this->buffer))
+ { if(($cache_infos = $this->source_cache_infos_db($url)) !== false)
+ { if($cache_infos)
+ { if($this->del_source_cache($cache_infos["id"], $cache_infos["id_source"]))
+ { if($this->add_source_cache($url, $this->buffer)) return true;
+ }
+ }
+ else
+ { if($this->add_source_cache($url, $this->buffer)) return true;
+ }
+ }
+ return false;
+ }
+ else return -2;
+ }
+ else return -1;
+ }
+
+ /*
+ * vide le cache
+ *
+ */
+ function empty_source_cache()
+ { $OK = true;
+ if(($cache = $this->source_cache_db()) !== false)
+ { foreach($cache as $id_cache => $cache_infos)
+ { if(!$this->del_source_cache($id_cache, $cache_infos["id_source"]))
+ { $OK = false;
+ $break;
+ }
+ }
+ }
+ else $OK = false;
+ return $OK;
+ }
+
+ /*
+ * efface un contenu XML du cache
+ *
+ * $id_cache_data : l'index des informations de cache
+ * dans le dossier data
+ *
+ * $id_xml_cache : l'index du contenu XML dans le cache
+ *
+ */
+ function del_source_cache($id_cache_data, $id_xml_cache)
+ { $env = $this->env();
+ if($this->del_source_cache_db($id_cache_data))
+ { if(@unlink($env->path("content")."cache/sources/".$id_xml_cache.".xml")) return true;
+ }
+ return false;
+ }
+
+ /*
+ * initialise le cache
+ * cette fonction verifie que les dossiers du cache existent
+ * et les cree sinon
+ *
+ */
+ function init_sources_cache()
+ { $env = $this->env();
+ if(!is_dir($env->path("content")."cache")) @mkdir($env->path("content")."cache");
+ if(is_dir($env->path("content")."cache"))
+ { if(!is_dir($env->path("content")."cache/sources")) @mkdir($env->path("content")."cache/sources");
+ if(is_dir($env->path("content")."cache/sources"))
+ { return true;
+ }
+ }
+ return "impossible d'initialiser le cache";
+ }
+
+ /*
+ * incremente l'index du cache et retourne le nouvel index
+ *
+ */
+ function inc_sources_cache_index()
+ { clearstatcache();
+ $env = $this->env();
+ $cache_index = false;
+ if(is_dir($env->path("content")."cache/sources") && is_writable($env->path("content")."cache/sources"))
+ { if(!file_exists($env->path("content")."cache/sources/.index"))
+ { if($fh = @fopen($env->path("content")."cache/sources/.index", "w+"))
+ { if(@fwrite($fh, "0")) $cache_index = 0;
+ @fclose($fh);
+ }
+ }
+ else
+ { if(($cache_index = @file_get_contents($env->path("content")."cache/sources/.index")) !== false)
+ { if(preg_match("/^[0-9]+$/", $cache_index))
+ { $cache_index = (int)$cache_index;
+ }
+ else $cache_index = false;
+ }
+ }
+ }
+ if($cache_index !== false)
+ { $cache_index++;
+ if($fh = @fopen($env->path("content")."cache/sources/.index", "w+"))
+ { if(!@fwrite($fh, (string)$cache_index)) $cache_index = false;
+ @fclose($fh);
+ }
+ else $cache_index = false;
+ }
+ return $cache_index;
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/data/modules/share/sml_data_sources_xml.php b/app/data/modules/share/sml_data_sources_xml.php
new file mode 100644
index 0000000..1cf0cc4
--- /dev/null
+++ b/app/data/modules/share/sml_data_sources_xml.php
@@ -0,0 +1,207 @@
+env();
+ if($env->config("cache_actif")) return $this->get_source_xml_from_cache($url, $IGNORE_UPDATE);
+ else return @file_get_contents($url);
+ }
+
+ # ----------------------------------------------------------------------------------------
+ # XML source
+ #
+
+ function set_source_xml($id, $params = array())
+ { $env = $this->env();
+ $OK = false;
+ if(strlen($id) > 0 && ($fh = @fopen($this->source_xml_path($id), "wb")) !== false){
+ if(($content = $this->source_xml_content($id, $params)) !== false){
+ if(@fwrite($fh, $content)) $OK = true;
+ }
+ @fclose($fh);
+ }
+ return $OK;
+ }
+
+ function maj_source_xml_groupe($groupe)
+ { $OK = true;
+ if($groupe !== false)
+ { $sgbd = $this->sgbd();
+ $env = $this->env();
+ if(($sources = $this->sources(array("id_groupe" => $groupe["id"]))) !== false)
+ { foreach($sources["list"] as $id_source => $source)
+ { if(!$this->set_source_xml($source["id"], array("source" => $source)))
+ { $OK = false;
+ break;
+ }
+ }
+ }
+ else $OK = false;
+ }
+ else $OK = false;
+ return $OK;
+ }
+
+ function maj_source_xml_licence($licence)
+ { $OK = true;
+ if($licence !== false)
+ { $sgbd = $this->sgbd();
+ $env = $this->env();
+ if(($sources = $this->sources(array("id_licence" => $licence["id"]))) !== false)
+ { foreach($sources["list"] as $id_source => $source)
+ { if(!$this->set_source_xml($source["id"], array("source" => $source)))
+ { $OK = false;
+ break;
+ }
+ }
+ }
+ else $OK = false;
+ }
+ else $OK = false;
+ return $OK;
+ }
+
+ function maj_source_xml_all()
+ { $OK = true;
+ $sgbd = $this->sgbd();
+ $env = $this->env();
+ if(($sources = $this->sources(array())) !== false)
+ { foreach($sources["list"] as $id_source => $source)
+ { if(!$this->set_source_xml($source["id"], array("source" => $source)))
+ { $OK = false;
+ break;
+ }
+ }
+ }
+ else $OK = false;
+ return $OK;
+ }
+
+ function get_source_xml($id_source)
+ { $source_file = $this->source_xml_path($id_source);
+ if(file_exists($source_file))
+ { return @file_get_contents($source_file);
+ }
+ return "";
+ }
+
+ function del_source_xml($id_source)
+ { $env = $this->env();
+ if(file_exists($this->source_xml_path($id_source)))
+ { return
+ $this->del_edit_derivations(array("id_source" => $id_source))
+ && $this->del_edit_reference_content($id_source)
+ && @unlink($this->source_xml_path($id_source));
+ }
+ return true;
+ }
+
+ # ----------------------------------------------------------------------------------------
+ # edition XML derivation
+ #
+
+ function set_edit_derivation_content($id_source, $id_source_derivation, $content)
+ { $env = $this->env();
+ $derivations_dir = $this->derivations_edit_xml_dir_path();
+ if(!file_exists($derivations_dir) || !is_dir($derivations_dir)) @mkdir($derivations_dir);
+ if(file_exists($derivations_dir) && is_dir($derivations_dir))
+ { $derivations_dir = $this->derivations_edit_xml_dir_path($id_source);
+ if(!file_exists($derivations_dir) || !is_dir($derivations_dir)) @mkdir($derivations_dir);
+ if(file_exists($derivations_dir) && is_dir($derivations_dir))
+ { if($fh = @fopen($this->derivation_edit_xml_path($id_source, $id_source_derivation), "w+"))
+ { if(@fwrite($fh, $content))
+ { @fclose($fh);
+ return true;
+ }
+ @fclose($fh);
+ }
+ }
+ }
+ return false;
+ }
+
+ function get_edit_derivation_content($id_source, $id_source_derivation)
+ { $env = $this->env();
+ $derivation_file = $this->derivation_edit_xml_path($id_source, $id_source_derivation);
+ $derivation_content = "";
+ if(file_exists($derivation_file))
+ { $derivation_content = @file_get_contents($derivation_file);
+ }
+ return $derivation_content;
+ }
+
+ function del_edit_derivation_content($id_source, $id_source_derivation)
+ { $env = $this->env();
+ $derivation_file = $this->derivation_edit_xml_path($id_source, $id_source_derivation);
+ $OK = true;
+ if(file_exists($derivation_file))
+ { $OK = @unlink($derivation_file);
+ }
+ return $OK;
+ }
+
+ function del_edit_derivations($id_source)
+ { $env = $this->env();
+ $derivations_dir = $this->derivations_edit_xml_dir_path($id_source);
+ $OK = true;
+ if(is_dir($derivations_dir))
+ { if($dh = opendir($derivations_dir))
+ { while($OK && (($file = readdir($dh)) !== false))
+ { if(preg_match("/^.+\.xml$/", $file))
+ { $OK = @unlink($derivations_dir.$file) && $OK;
+ }
+ }
+ closedir($dh);
+// $OK = @rmdir($derivations_dir) && $OK;
+ @rmdir($derivations_dir);
+ }
+ else $OK = false;
+ }
+ return $OK;
+ }
+
+ # ----------------------------------------------------------------------------------------
+ # edition XML reference
+ #
+
+ function set_edit_reference_content($id_source, $content)
+ { $env = $this->env();
+ $references_dir = $this->reference_edit_xml_dir_path();
+ if(!file_exists($references_dir) || !is_dir($references_dir)) @mkdir($references_dir);
+ if(file_exists($references_dir) && is_dir($references_dir))
+ { if($fh = @fopen($this->reference_edit_xml_path($id_source), "w+"))
+ { if(@fwrite($fh, $content))
+ { @fclose($fh);
+ return true;
+ }
+ @fclose($fh);
+ }
+ }
+ return false;
+ }
+
+ function get_edit_reference_content($id_source)
+ { $env = $this->env();
+ $reference_file = $this->reference_edit_xml_path($id_source);
+ $reference_content = "";
+ if(file_exists($reference_file))
+ { $reference_content = @file_get_contents($reference_file);
+ }
+ return $reference_content;
+ }
+
+ function del_edit_reference_content($id_source)
+ { $env = $this->env();
+ $reference_file = $this->reference_edit_xml_path($id_source);
+ $OK = true;
+ if(file_exists($reference_file))
+ { $OK = @unlink($reference_file);
+ }
+ return $OK;
+ }
+
+ }
+
+?>
\ No newline at end of file
diff --git a/app/data/modules/share/sml_data_sources_xml_format.php b/app/data/modules/share/sml_data_sources_xml_format.php
new file mode 100644
index 0000000..0847036
--- /dev/null
+++ b/app/data/modules/share/sml_data_sources_xml_format.php
@@ -0,0 +1,178 @@
+env();
+ $content = false;
+ $this->status = isset($this->status) ? $this->status : $this->source_status();
+ if($this->status !== false)
+ { $this->source = isset($params["source"]) ? $params["source"] : $this->source($id, true);
+ if($this->source !== false)
+ { if($this->source["groupes"]) $this->groupes = $this->source["groupes"];
+ if(isset($params["groupes"])) $this->groupes = $params["groupes"];
+ if(!isset($this->groupes)) $this->groupes = $this->source_groupes($id);
+ if($this->groupes !== false)
+ { $this->licence = isset($params["licence"]) ? $params["licence"] : $this->licence($this->source["licence"]["id"]);
+ if($this->licence !== false)
+ { if(($this->sources = $this->source_compositions(array("id_composition" => $id))) !== false)
+ { $content = "
").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();
+else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
+false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");h=b._start(c,f);if(h===false)return}break}i=b.options.step;h=b.options.values&&b.options.values.length?(g=b.values(f)):(g=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=b._valueMin();break;case d.ui.keyCode.END:g=b._valueMax();break;case d.ui.keyCode.PAGE_UP:g=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h===
+b._valueMax())return;g=b._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===b._valueMin())return;g=b._trimAlignValue(h-i);break}b._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
+this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,h,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(a.range===true&&this.values(1)===a.min){g+=1;f=d(this.handles[g])}if(this._start(b,
+g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();a=f.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-f.width()/2,top:b.pageY-a.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},
+_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;
+if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=
+this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
+_refreshValue:function(){var b=this.options.range,a=this.options,c=this,e=!this._animateOff?a.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate);
+if(k===1)c.range[e?"animate":"css"]({width:f-g+"%"},{queue:false,duration:a.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:a.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
+1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.12"})})(jQuery);
+;/*
+ * jQuery UI Tabs 1.8.12
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"#{label}"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
+e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
+d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
+(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
+this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
+g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
+function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
+this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
+-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
+d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
+e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
+j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
+if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
+this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
+load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
+"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.12"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k')}function F(a,b){d.extend(a,b);for(var c in b)if(b[c]==
+null||b[c]==A)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.12"}});var y=(new Date).getTime();d.extend(K.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){F(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();
+f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('')}},
+_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&
+b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f==
+""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,
+c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),
+true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}F(a.settings,e||{});
+b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);
+this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",
+this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,
+function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:
+f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);
+if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);
+d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");F(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=
+document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");
+var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=
+b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a));var e=a.dpDiv.find("iframe.ui-datepicker-cover");e.length&&e.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");
+this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+
+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&
+a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var f=a.yearshtml;setTimeout(function(){f===a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);f=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():
+0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),
+"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?
+"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=
+d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=
+d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c==
+"M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=
+b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();
+this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);
+a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?
+c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=z+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}w=this._daylightSavingAdjust(new Date(c,j-1,l));if(w.getFullYear()!=c||w.getMonth()+1!=j||w.getDate()!=l)throw"Invalid date";return w},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",
+RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=
+a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),
+b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=
+this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?''+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=
+this._get(a,"monthNames"),w=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),v=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var L=this._getDefaultDate(a),I="",D=0;D'}x+='';var B=j?''+this._get(a,"weekHeader")+" | ":"";for(t=0;t<7;t++){var q=
+(t+h)%7;B+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+" | "}x+=B+"
";B=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,B);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;B=l?6:Math.ceil((t+B)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O";var P=!j?"":''+this._get(a,"calculateWeek")(q)+" | ";for(t=0;t<7;t++){var G=
+p?p.apply(a.input?a.input[0]:null,[q]):[true,""],C=q.getMonth()!=g,J=C&&!H||!G[0]||k&&qo;P+='"+(C&&!v?" ":J?''+q.getDate()+"":''+q.getDate()+"")+" | ";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=
+P+""}g++;if(g>11){g=0;m++}x+="
"+(l?""+(i[0]>0&&E==i[1]-1?'':""):"");M+=x}I+=M}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'':"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='',
+o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&
+l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";if(d.browser.mozilla)k+='";else{k+=a.yearshtml;a.yearshtml=null}}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
";return k},_adjustInstDate:function(a,b,c){var e=
+a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,
+"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
+c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
+"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
+function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,
+[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.12";window["DP_jQuery_"+y]=d})(jQuery);
+;/*
+ * jQuery UI Progressbar 1.8.12
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.12"})})(jQuery);
+;/*
+ * jQuery UI Effects 1.8.12
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
+16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
+a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
+d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0];
+h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,
+a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.12",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",
+border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);
+return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments);
+else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),
+b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,
+a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,
+a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==
+e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
+e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
+;/*
+ * jQuery UI Effects Fade 1.8.12
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fade
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Fold 1.8.12
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
+10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Highlight 1.8.12
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
+this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Pulsate 1.8.12
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
+b.dequeue()})})}})(jQuery);
+;
\ No newline at end of file
diff --git a/app/out/default/js/jquery.colorbox-min.js b/app/out/default/js/jquery.colorbox-min.js
new file mode 100644
index 0000000..b795ee8
--- /dev/null
+++ b/app/out/default/js/jquery.colorbox-min.js
@@ -0,0 +1,4 @@
+// ColorBox v1.3.16 - a full featured, light-weight, customizable lightbox based on jQuery 1.3+
+// Copyright (c) 2011 Jack Moore - jack@colorpowered.com
+// Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
+(function(a,b,c){function ba(b){if(!T){O=b,Z(a.extend(J,a.data(O,e))),x=a(O),P=0,J.rel!=="nofollow"&&(x=a("."+V).filter(function(){var b=a.data(this,e).rel||this.rel;return b===J.rel}),P=x.index(O),P===-1&&(x=x.add(O),P=x.length-1));if(!R){R=S=!0,q.show();if(J.returnFocus)try{O.blur(),a(O).one(k,function(){try{this.focus()}catch(a){}})}catch(c){}p.css({opacity:+J.opacity,cursor:J.overlayClose?"pointer":"auto"}).show(),J.w=X(J.initialWidth,"x"),J.h=X(J.initialHeight,"y"),U.position(0),n&&y.bind("resize."+o+" scroll."+o,function(){p.css({width:y.width(),height:y.height(),top:y.scrollTop(),left:y.scrollLeft()})}).trigger("resize."+o),$(g,J.onOpen),I.add(C).hide(),H.html(J.close).show()}U.load(!0)}}function _(){var a,b=f+"Slideshow_",c="click."+f,d,e,g;J.slideshow&&x[1]&&(d=function(){E.text(J.slideshowStop).unbind(c).bind(i,function(){if(P"),b.open=!0;f.each(function(){a.data(this,e,a.extend({},a.data(this,e)||d,b)),a(this).addClass(V)}),g=b.open,a.isFunction(g)&&(g=g.call(f)),g&&ba(f[0]);return f},U.init=function(){y=a(c),q=W().attr({id:e,"class":m?f+(n?"IE6":"IE"):""}),p=W("Overlay",n?"position:absolute":"").hide(),r=W("Wrapper"),s=W("Content").append(z=W("LoadedContent","width:0; height:0; overflow:hidden"),B=W("LoadingOverlay").add(W("LoadingGraphic")),C=W("Title"),D=W("Current"),F=W("Next"),G=W("Previous"),E=W("Slideshow").bind(g,_),H=W("Close")),r.append(W().append(W("TopLeft"),t=W("TopCenter"),W("TopRight")),W(!1,"clear:left").append(u=W("MiddleLeft"),s,v=W("MiddleRight")),W(!1,"clear:left").append(W("BottomLeft"),w=W("BottomCenter"),W("BottomRight"))).children().children().css({"float":"left"}),A=W(!1,"position:absolute; width:9999px; visibility:hidden; display:none"),a("body").prepend(p,q.append(r,A)),s.children().hover(function(){a(this).addClass("hover")},function(){a(this).removeClass("hover")}).addClass("hover"),K=t.height()+w.height()+s.outerHeight(!0)-s.height(),L=u.width()+v.width()+s.outerWidth(!0)-s.width(),M=z.outerHeight(!0),N=z.outerWidth(!0),q.css({"padding-bottom":K,"padding-right":L}).hide(),F.click(function(){U.next()}),G.click(function(){U.prev()}),H.click(function(){U.close()}),I=F.add(G).add(D).add(E),s.children().removeClass("hover"),a("."+V).live("click",function(a){a.button!==0&&typeof a.button!="undefined"||a.ctrlKey||a.shiftKey||a.altKey||(a.preventDefault(),ba(this))}),p.click(function(){J.overlayClose&&U.close()}),a(b).bind("keydown."+f,function(a){var b=a.keyCode;R&&J.escKey&&b===27&&(a.preventDefault(),U.close()),R&&J.arrowKey&&x[1]&&(b===37?(a.preventDefault(),G.click()):b===39&&(a.preventDefault(),F.click()))})},U.remove=function(){q.add(p).remove(),a("."+V).die("click").removeData(e).removeClass(V)},U.position=function(a,c){function g(a){t[0].style.width=w[0].style.width=s[0].style.width=a.style.width,B[0].style.height=B[1].style.height=s[0].style.height=u[0].style.height=v[0].style.height=a.style.height}var d,e=Math.max(b.documentElement.clientHeight-J.h-M-K,0)/2+y.scrollTop(),f=Math.max(y.width()-J.w-N-L,0)/2+y.scrollLeft();d=q.width()===J.w+N&&q.height()===J.h+M?0:a,r[0].style.width=r[0].style.height="9999px",q.dequeue().animate({width:J.w+N,height:J.h+M,top:e,left:f},{duration:d,complete:function(){g(this),S=!1,r[0].style.width=J.w+N+L+"px",r[0].style.height=J.h+M+K+"px",c&&c()},step:function(){g(this)}})},U.resize=function(a){if(R){a=a||{},a.width&&(J.w=X(a.width,"x")-N-L),a.innerWidth&&(J.w=X(a.innerWidth,"x")),z.css({width:J.w}),a.height&&(J.h=X(a.height,"y")-M-K),a.innerHeight&&(J.h=X(a.innerHeight,"y"));if(!a.innerHeight&&!a.height){var b=z.wrapInner("").children();J.h=b.height(),b.replaceWith(b.children())}z.css({height:J.h}),U.position(J.transition==="none"?0:J.speed)}},U.prep=function(b){function h(b){U.position(b,function(){var b,d,g,h,j=x.length,k,n;!R||(n=function(){B.hide(),$(i,J.onComplete)},m&&Q&&z.fadeIn(100),C.html(J.title).add(z).show(),j>1?(typeof J.current=="string"&&D.html(J.current.replace(/\{current\}/,P+1).replace(/\{total\}/,j)).show(),F[J.loop||P")[0].src=h),Y(d)&&(a("")[0].src=d))):I.hide(),J.iframe?(k=a("").addClass(f+"Iframe")[0],J.fastIframe?n():a(k).load(n),k.name=f+ +(new Date),k.src=J.href,J.scrolling||(k.scrolling="no"),m&&(k.frameBorder=0,k.allowTransparency="true"),a(k).appendTo(z).one(l,function(){k.src="//about:blank"})):n(),J.transition==="fade"?q.fadeTo(c,1,function(){q[0].style.filter=""}):q[0].style.filter="",y.bind("resize."+f,function(){U.position(0)}))})}function g(){J.h=J.h||z.height(),J.h=J.mh&&J.mhJ.mw&&(a=(Q.width-J.mw)/Q.width,d()),J.mh&&Q.height>J.mh&&(a=(Q.height-J.mh)/Q.height,d())),J.h&&(Q.style.marginTop=Math.max(J.h-Q.height,0)/2+"px"),x[1]&&(P
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/out/default/layouts/content.xml b/app/out/default/layouts/content.xml
new file mode 100644
index 0000000..ce41c27
--- /dev/null
+++ b/app/out/default/layouts/content.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/out/default/layouts/forms.xml b/app/out/default/layouts/forms.xml
new file mode 100644
index 0000000..5d94174
--- /dev/null
+++ b/app/out/default/layouts/forms.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/out/default/layouts/sources.xml b/app/out/default/layouts/sources.xml
new file mode 100644
index 0000000..f1b18b0
--- /dev/null
+++ b/app/out/default/layouts/sources.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/out/default/layouts/users.xml b/app/out/default/layouts/users.xml
new file mode 100644
index 0000000..127e597
--- /dev/null
+++ b/app/out/default/layouts/users.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/out/default/sources.php b/app/out/default/sources.php
new file mode 100644
index 0000000..0f9a870
--- /dev/null
+++ b/app/out/default/sources.php
@@ -0,0 +1,38 @@
+
+
+
+out_file("views/head.php"); ?>
+
+
+
+
+
+out_file("views/header.php"); ?>
+
+
+
+
+
+
+out_config("colonne")) : ?>
+
+out_file("views/sources/colonne.php"); ?>
+
+
+
+
out_config("colonne") ? "" : " class=\"no_colonne\""; ?>>
+out_file("views/messages.php"); ?>
+out_file_exists($layout["content"])) require $this->out_file($layout["content"]); ?>
+
+
+
+
+
+
+
+
+
diff --git a/app/out/default/views/admin/cache.php b/app/out/default/views/admin/cache.php
new file mode 100644
index 0000000..3f1e70d
--- /dev/null
+++ b/app/out/default/views/admin/cache.php
@@ -0,0 +1,37 @@
+Gestion du cache
+
+
+ Pour les fichiers XML externes (références et dérivations).
+
+
+
diff --git a/app/out/default/views/admin/licences/add.php b/app/out/default/views/admin/licences/add.php
new file mode 100644
index 0000000..bd54fa7
--- /dev/null
+++ b/app/out/default/views/admin/licences/add.php
@@ -0,0 +1,29 @@
+Nouvelle licence
+
+
+
+
\ No newline at end of file
diff --git a/app/out/default/views/admin/licences/edit.php b/app/out/default/views/admin/licences/edit.php
new file mode 100644
index 0000000..5d9112b
--- /dev/null
+++ b/app/out/default/views/admin/licences/edit.php
@@ -0,0 +1,29 @@
+Modifier une licence
+
+
+
+
\ No newline at end of file
diff --git a/app/out/default/views/admin/licences/list.php b/app/out/default/views/admin/licences/list.php
new file mode 100644
index 0000000..9952799
--- /dev/null
+++ b/app/out/default/views/admin/licences/list.php
@@ -0,0 +1,32 @@
+Les licences
+
+
+
+out["licences"]["list"]) : ?>
+
+
+ Aucune licence pour le moment...
+
\ No newline at end of file
diff --git a/app/out/default/views/admin/maintenance.php b/app/out/default/views/admin/maintenance.php
new file mode 100644
index 0000000..54ab459
--- /dev/null
+++ b/app/out/default/views/admin/maintenance.php
@@ -0,0 +1,22 @@
+Maintenance
+
+
+Cache
+
+
+
+
+Fichiers XML des sources
+
+
+
+ Si vous avez migré votre site ou que d'une manière ou d'une autre, l'URL de votre installation de
+ sourceML a changé, vous devriez mettre à jour les fichiers XML des sources, pour qu'ils prennent
+ en compte votre nouvelle URL.
+
+
+
\ No newline at end of file
diff --git a/app/out/default/views/admin/sourceml.php b/app/out/default/views/admin/sourceml.php
new file mode 100644
index 0000000..c48e1bf
--- /dev/null
+++ b/app/out/default/views/admin/sourceml.php
@@ -0,0 +1,45 @@
+Configuration de SourceML
+
+
diff --git a/app/out/default/views/content/sources/sources.php b/app/out/default/views/content/sources/sources.php
new file mode 100644
index 0000000..a8efbef
--- /dev/null
+++ b/app/out/default/views/content/sources/sources.php
@@ -0,0 +1,23 @@
+out["sources"]["list"]) :
+ $url_params = $this->out["url_params"];
+ foreach($sources as $id_source => $source) :
+ $url_params[$this->out["source_param"]] = $id_source;
+
+?>
+
+url("sources/".$this->out["source_controller"]."/view", $url_params);
+ require $this->out_file("views/sources/source.php");
+
+?>
+
+pas de source";
+ endif;
+
+?>
\ No newline at end of file
diff --git a/app/out/default/views/content/sources/xml_form.php b/app/out/default/views/content/sources/xml_form.php
new file mode 100644
index 0000000..f4b8925
--- /dev/null
+++ b/app/out/default/views/content/sources/xml_form.php
@@ -0,0 +1,77 @@
+get_out();
+
+ $xml_name = isset($out["form_params"]["name"]) ? $out["form_params"]["name"] : "sml_xn";
+ $xml_label = isset($out["form_params"]["label"]) ? $out["form_params"]["label"] : "";
+ $xml_maj_url = isset($out["form_params"]["maj_url"]) ? $out["form_params"]["maj_url"] : "";
+ $xml_id = isset($out["form_params"]["id"]) ? $out["form_params"]["id"] : "";
+ $xml_id_suffix = isset($out["form_params"]["id"]) ? "_".$out["form_params"]["id"] : "";
+ $xml_can_delete = isset($out["form_params"]["can_delete"]) ? $out["form_params"]["can_delete"] : false;
+ $source = $this->out("xml_form_source");
+ if(!$source) $source = $data->empty_source();
+
+?>
+
+
+
+
+
+
+
+
+
URL du fichier XML
+ : " />
+
+
+
+
+
+ -
+ source :
+ ">
+
+ ()
+
+
+ -
+ xml :
+ ">
+
+
+ - licence : ">
+
+
+ -
+ fichiers :
+
+ $document) : ?>
+ - ">
+
+
+
+
+
+
+
+
+
+ Editer le contenu du fichier XML
+ />
+ >
+
+
+
+
+
+
diff --git a/app/out/default/views/forms/sourceml/contact_author.php b/app/out/default/views/forms/sourceml/contact_author.php
new file mode 100644
index 0000000..5aac027
--- /dev/null
+++ b/app/out/default/views/forms/sourceml/contact_author.php
@@ -0,0 +1,39 @@
+
diff --git a/app/out/default/views/sources/album/ariane.php b/app/out/default/views/sources/album/ariane.php
new file mode 100644
index 0000000..3ea943e
--- /dev/null
+++ b/app/out/default/views/sources/album/ariane.php
@@ -0,0 +1,13 @@
+Albums
+
+
+
diff --git a/app/out/default/views/sources/album/list.php b/app/out/default/views/sources/album/list.php
new file mode 100644
index 0000000..05328e1
--- /dev/null
+++ b/app/out/default/views/sources/album/list.php
@@ -0,0 +1,52 @@
+out_file("views/sources/album/ariane.php"); ?>
+
+out["groupes"]["total"] > 1) : ?>
+
+
+
+
+
+out["groupe"]) : ?>
+
+out["groupe"]["description"] ?>
+
+
+
+
+
+out["albums"]["list"]) :
+ $source_status = "album";
+ $url_params = array();
+
+?>
+
+out_file("views/navig.php"); ?>
+
+
+out["albums"]["list"] as $id_source => $source)
+ { $url_params["album"] = $id_source;
+ $source["url"] = $this->url("sources/album/view", $url_params);
+ require $this->out_file("views/sources/source.php");
+ }
+
+?>
+
+
+out_file("views/navig.php"); ?>
+
+
+Aucun album pour le moment
+
diff --git a/app/out/default/views/sources/album/view.php b/app/out/default/views/sources/album/view.php
new file mode 100644
index 0000000..5cf73de
--- /dev/null
+++ b/app/out/default/views/sources/album/view.php
@@ -0,0 +1,96 @@
+
+
+out["album"]["image_uri"]
+ && file_exists($this->out["album"]["image_uri"])
+ && ($img_size = $data->img_size($this->out["album"]["image_uri"], 150, 150)) !== false
+ ) :
+ $margin_top = floor((150 - $img_size["height"]) / 2);
+ $album_image_uri = $this->path("web").$this->out["album"]["image_uri"];
+?>
+
+ "
+ height=""
+ style="margin-top:px"
+ alt="" />
+
+
+
+
+
+out["album"];
+ $display_name = false;
+ require $this->out_file("views/sources/source.php");
+
+?>
+
+
+
+out["album"]["description"] ?>
+
+
+
+
+out["morceaux"]["list"]) :
+ $source_status = "morceau";
+ $url_params = array("album" => $this->out["album"]["id"]);
+
+?>
+
+Morceaux
+
+out["morceaux"]["list"] as $id_source => $source)
+ { $documents = $source["reference"] ? $source["reference"]["documents"] : $source["documents"];
+ if($documents)
+ { foreach($documents as $id_document => $document)
+ { if(strtolower(substr($document["url"], -4)) == ".mp3")
+ { $HAS_MP3_DOCUMENT = true;
+ break;
+ }
+ }
+ }
+ if($HAS_MP3_DOCUMENT) break;
+ }
+ if($HAS_MP3_DOCUMENT) :
+
+?>
+
+Ecouter l'album
+
+
+
+
+out_file("views/navig.php"); ?>
+
+
+out["morceaux"]["list"] as $id_source => $source)
+ { $url_params["morceau"] = $id_source;
+ $source["url"] = $this->url("sources/morceau/view", $url_params);
+ $display_name = true;
+ require $this->out_file("views/sources/source.php");
+ }
+
+?>
+
+
+out_file("views/navig.php"); ?>
+
+
\ No newline at end of file
diff --git a/app/out/default/views/sources/ariane.php b/app/out/default/views/sources/ariane.php
new file mode 100644
index 0000000..7b11ef1
--- /dev/null
+++ b/app/out/default/views/sources/ariane.php
@@ -0,0 +1,21 @@
+Pistes
+
+
+
+out["groupe"]) && $this->out["groupe"]) : $ariane_params["groupe"] = $this->out["groupe"]["id"]; ?>
+ »
+ $this->out["groupe"]["id"])) ?>">out["groupe"]["nom"] ?>
+
+out["album"]) && $this->out["album"]) : $ariane_params["album"] = $this->out["album"]["id"]; ?>
+ »
+ ">out["album"]["titre"] ?>
+
+out["morceau"]) && $this->out["morceau"]) : $ariane_params["morceau"] = $this->out["morceau"]["id"]; ?>
+ »
+ ">out["morceau"]["titre"] ?>
+
+out["piste"]) && $this->out["piste"]) : $ariane_params["piste"] = $this->out["piste"]["id"]; ?>
+ »
+ ">out["piste"]["titre"] ?>
+
+
diff --git a/app/out/default/views/sources/colonne.php b/app/out/default/views/sources/colonne.php
new file mode 100644
index 0000000..f2a22e1
--- /dev/null
+++ b/app/out/default/views/sources/colonne.php
@@ -0,0 +1,8 @@
+out_file("views/sources/groupe_box.php");
+// require $this->out_file("views/sources/navig_menu.php");
+
+?>
+
+
diff --git a/app/out/default/views/sources/current_album.php b/app/out/default/views/sources/current_album.php
new file mode 100644
index 0000000..f0af20f
--- /dev/null
+++ b/app/out/default/views/sources/current_album.php
@@ -0,0 +1,31 @@
+out["album"]) && $this->out["album"]) : $album = $this->out["album"]; ?>
+
+
+
+
+
+
+
+
diff --git a/app/out/default/views/sources/current_album_box.php b/app/out/default/views/sources/current_album_box.php
new file mode 100644
index 0000000..5a2dcdb
--- /dev/null
+++ b/app/out/default/views/sources/current_album_box.php
@@ -0,0 +1,11 @@
+etat("mod") == "sources" && $this->etat("controller") == "groupe" && $this->etat("action") == "view") : ?>
+
+out_config("nom_groupe")) require $this->out_file("views/sources/nom_groupe.php"); ?>
+
+out_config("colonne_logo_groupe")) require $this->out_file("views/sources/logo_groupe.php"); ?>
+
+
+
+out_config("albums_menu")) require $this->out_file("views/sources/current_album.php"); ?>
+
+out_file("views/sources/lien_contact.php"); ?>
diff --git a/app/out/default/views/sources/entete_groupe.php b/app/out/default/views/sources/entete_groupe.php
new file mode 100644
index 0000000..26d9055
--- /dev/null
+++ b/app/out/default/views/sources/entete_groupe.php
@@ -0,0 +1,27 @@
+ out["albums"]) && $this->out["albums"]["list"]) : ?>
+
+
+
diff --git a/app/out/default/views/sources/groupe/ariane.php b/app/out/default/views/sources/groupe/ariane.php
new file mode 100644
index 0000000..d3ce4ba
--- /dev/null
+++ b/app/out/default/views/sources/groupe/ariane.php
@@ -0,0 +1,11 @@
+Groupes
+
+
+
+
+out["groupe"]) && $this->out["groupe"]) : $ariane_params["groupe"] = $this->out["groupe"]["id"]; ?>
+ »
+ $this->out["groupe"]["id"])) ?>">out["groupe"]["nom"] ?>
+
+
+
diff --git a/app/out/default/views/sources/groupe/list.php b/app/out/default/views/sources/groupe/list.php
new file mode 100644
index 0000000..85bb7cc
--- /dev/null
+++ b/app/out/default/views/sources/groupe/list.php
@@ -0,0 +1,38 @@
+out["groupes"]["list"]) : ?>
+
+out_file("views/navig.php"); ?>
+
+
+
+out["groupes"]["list"] as $id_groupe => $groupe) : ?>
+ -
+
+
+
+
+
+out_file("views/navig.php"); ?>
+
+
diff --git a/app/out/default/views/sources/groupe/view.php b/app/out/default/views/sources/groupe/view.php
new file mode 100644
index 0000000..7daaf59
--- /dev/null
+++ b/app/out/default/views/sources/groupe/view.php
@@ -0,0 +1,42 @@
+
+out["groupe"]["description"] ?>
+
+
+
+
+out_config("groupe_view_albums")
+ && $this->out["albums"]["list"]
+ ) :
+
+?>
+
+
+
+
+
diff --git a/app/out/default/views/sources/groupe_box.php b/app/out/default/views/sources/groupe_box.php
new file mode 100644
index 0000000..76b0b9a
--- /dev/null
+++ b/app/out/default/views/sources/groupe_box.php
@@ -0,0 +1,9 @@
+out_config("nom_groupe")) require $this->out_file("views/sources/nom_groupe.php");
+ if($this->out_config("colonne_logo_groupe")) require $this->out_file("views/sources/logo_groupe.php");
+ if(($this->etat("controller") == "groupe") && $this->out_config("groupe_view_albums")) $this->set_config(array("out_albums_menu" => ""));
+ if($this->out_config("albums_menu")) require $this->out_file("views/sources/menu_albums.php");
+ require $this->out_file("views/sources/lien_contact.php");
+
+?>
\ No newline at end of file
diff --git a/app/out/default/views/sources/lien_contact.php b/app/out/default/views/sources/lien_contact.php
new file mode 100644
index 0000000..ee0804a
--- /dev/null
+++ b/app/out/default/views/sources/lien_contact.php
@@ -0,0 +1,8 @@
+out["groupe"]) && $this->out["groupe"] && $this->out["groupe"]["contact_form"]) : ?>
+
+
+
diff --git a/app/out/default/views/sources/logo_groupe.php b/app/out/default/views/sources/logo_groupe.php
new file mode 100644
index 0000000..87faa7b
--- /dev/null
+++ b/app/out/default/views/sources/logo_groupe.php
@@ -0,0 +1,22 @@
+out["groupe"])
+ && $this->out["groupe"]
+ && $this->out["groupe"]["image_uri"]
+ && file_exists($this->out["groupe"]["image_uri"])
+ && ($img_size = $data->img_size($this->out["groupe"]["image_uri"], 200, 130)) !== false
+ ) :
+ $margin_top = floor((150 - $img_size["height"]) / 2);
+
+?>
+
+
diff --git a/app/out/default/views/sources/menu_albums.php b/app/out/default/views/sources/menu_albums.php
new file mode 100644
index 0000000..a8b4616
--- /dev/null
+++ b/app/out/default/views/sources/menu_albums.php
@@ -0,0 +1,37 @@
+out["groupe"])
+ && $this->out["groupe"]
+ && $this->out["albums"]["list"]
+ ) :
+
+?>
+
+
+
+
diff --git a/app/out/default/views/sources/morceau/ariane.php b/app/out/default/views/sources/morceau/ariane.php
new file mode 100644
index 0000000..732c8fa
--- /dev/null
+++ b/app/out/default/views/sources/morceau/ariane.php
@@ -0,0 +1,18 @@
+Morceaux
+
+
+
+out["groupe"]) && $this->out["groupe"]) : $ariane_params["groupe"] = $this->out["groupe"]["id"]; ?>
+ »
+ $this->out["groupe"]["id"])) ?>">out["groupe"]["nom"] ?>
+
+out["album"]) && $this->out["album"]) : $ariane_params["album"] = $this->out["album"]["id"]; ?>
+ out["album"]["id"]; ?>
+ »
+ ">out["album"]["titre"] ?>
+
+out["morceau"]) && $this->out["morceau"]) : $ariane_params["morceau"] = $this->out["morceau"]["id"]; ?>
+ »
+ ">out["morceau"]["titre"] ?>
+
+
diff --git a/app/out/default/views/sources/morceau/list.php b/app/out/default/views/sources/morceau/list.php
new file mode 100644
index 0000000..0a326c1
--- /dev/null
+++ b/app/out/default/views/sources/morceau/list.php
@@ -0,0 +1,84 @@
+out_file("views/sources/morceau/ariane.php"); ?>
+
+out["groupes"]) && $this->out["groupes"]["total"] > 0)
+ || (isset($this->out["albums"]) && $this->out["albums"]["total"] > 0)
+ ) :
+
+?>
+
+
+
+
+
+
+
+out["morceaux"]["list"]) :
+ $source_status = "morceau";
+ $url_params = array();
+ if($this->out["groupe"]) $url_params["groupe"] = $this->out["groupe"]["id"];
+ if(isset($this->out["album"]) && $this->out["album"]) $url_params["album"] = $this->out["album"]["id"];
+
+?>
+
+out_file("views/navig.php"); ?>
+
+
+out["morceaux"]["list"] as $id_source => $source)
+ { $url_params["morceau"] = $id_source;
+ $source["url"] = $this->url("sources/morceau/view", $url_params);
+ require $this->out_file("views/sources/source.php");
+ }
+
+?>
+
+
+out_file("views/navig.php"); ?>
+
+
+Aucun morceau pour le moment
+
diff --git a/app/out/default/views/sources/morceau/view.php b/app/out/default/views/sources/morceau/view.php
new file mode 100644
index 0000000..99020a1
--- /dev/null
+++ b/app/out/default/views/sources/morceau/view.php
@@ -0,0 +1,56 @@
+
+
+
+
+out["morceau"];
+ $display_name = false;
+ $url_params = array("morceau" => $morceau["id"]);
+
+?>
+
+
+url("sources/morceau/view", $url_params);
+ require $this->out_file("views/sources/source.php");
+
+?>
+
+
+
+
+
+
+
+
+
+
diff --git a/app/out/default/views/sources/navig_menu.php b/app/out/default/views/sources/navig_menu.php
new file mode 100644
index 0000000..e89592f
--- /dev/null
+++ b/app/out/default/views/sources/navig_menu.php
@@ -0,0 +1,20 @@
+config("start_action"); ?>
+
diff --git a/app/out/default/views/sources/nom_groupe.php b/app/out/default/views/sources/nom_groupe.php
new file mode 100644
index 0000000..59ebd6b
--- /dev/null
+++ b/app/out/default/views/sources/nom_groupe.php
@@ -0,0 +1,7 @@
+out["groupe"]) && $this->out["groupe"]) : ?>
+
+
diff --git a/app/out/default/views/sources/piste/ariane.php b/app/out/default/views/sources/piste/ariane.php
new file mode 100644
index 0000000..d8ccd8b
--- /dev/null
+++ b/app/out/default/views/sources/piste/ariane.php
@@ -0,0 +1,22 @@
+Sources
+
+
+
+
diff --git a/app/out/default/views/sources/piste/list.php b/app/out/default/views/sources/piste/list.php
new file mode 100644
index 0000000..8051535
--- /dev/null
+++ b/app/out/default/views/sources/piste/list.php
@@ -0,0 +1,83 @@
+out_file("views/sources/piste/ariane.php"); ?>
+
+out["groupes"]) && $this->out["groupes"]["total"] > 0)
+ || (isset($this->out["albums"]) && $this->out["albums"]["total"] > 0)
+ ) :
+
+?>
+
+
+
+
+
+
+
+out["pistes"]["list"]) :
+ $source_status = "piste";
+ $url_params = array();
+ if(isset($this->out["groupe"]) && $this->out["groupe"]) $url_params["groupe"] = $this->out["groupe"]["id"];
+ if(isset($this->out["morceau"]) && $this->out["morceau"]) $url_params["morceau"] = $this->out["morceau"]["id"];
+
+?>
+
+out_file("views/navig.php"); ?>
+
+
+out["pistes"]["list"] as $id_source => $source)
+ { $url_params["piste"] = $id_source;
+ $source["url"] = $this->url("sources/piste/view", $url_params);
+ require $this->out_file("views/sources/source.php");
+ }
+
+?>
+
+
+out_file("views/navig.php"); ?>
+
+
+Aucune source pour le moment
+
diff --git a/app/out/default/views/sources/piste/view.php b/app/out/default/views/sources/piste/view.php
new file mode 100644
index 0000000..5d089a0
--- /dev/null
+++ b/app/out/default/views/sources/piste/view.php
@@ -0,0 +1,64 @@
+
+
+
+
+out["piste"];
+ $display_name = false;
+ $url_params = array("piste" => $piste["id"]);
+
+?>
+
+
+url("sources/piste/view", $url_params);
+ require $this->out_file("views/sources/source.php");
+
+?>
+
+
+
+
+
+
+
+
+
+
diff --git a/app/out/default/views/sources/source.php b/app/out/default/views/sources/source.php
new file mode 100644
index 0000000..1107918
--- /dev/null
+++ b/app/out/default/views/sources/source.php
@@ -0,0 +1,22 @@
+
+
+">
+
+out_file("views/sources/source/menu_source.php");
+ require $this->out_file("views/sources/source/header.php");
+ require $this->out_file("views/sources/source/metas.php");
+ require $this->out_file("views/sources/source/documents.php");
+
+?>
+
+out_file("views/sources/source/arbo.php");
+
+?>
+
+
+
+
diff --git a/app/out/default/views/sources/source/arbo.php b/app/out/default/views/sources/source/arbo.php
new file mode 100644
index 0000000..f9a0bc6
--- /dev/null
+++ b/app/out/default/views/sources/source/arbo.php
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/out/default/views/sources/source/documents.php b/app/out/default/views/sources/source/documents.php
new file mode 100644
index 0000000..56af9e0
--- /dev/null
+++ b/app/out/default/views/sources/source/documents.php
@@ -0,0 +1,47 @@
+
+
+
+
+ $document) :
+ $ext = "";
+ $audio_type = "";
+ if(($k = strrpos($document["url"], ".")) !== false) $ext = strtolower(substr($document["url"], $k + 1));
+ switch($ext){
+ case "ogg":
+ $audio_type = "audio/ogg";
+ break;
+ case "mp3":
+ $audio_type = "audio/mp3";
+ break;
+ }
+
+ ?>
+
+ - ">
+
+
+
+
+ ">
+
+
+
+
+
+
+
+
diff --git a/app/out/default/views/sources/source/header.php b/app/out/default/views/sources/source/header.php
new file mode 100644
index 0000000..6910161
--- /dev/null
+++ b/app/out/default/views/sources/source/header.php
@@ -0,0 +1,44 @@
+ $source["reference"]["auteur"],
+ "url" => $source["reference"]["from"]
+ );
+ }
+ else
+ { $groupe = $data->get_admin_groupe($source["groupes"]);
+ if($groupe) $groupe["url"] = $this->url("sources/groupe/view", array("id" => $groupe["id"]));
+ }
+
+?>
+
+
+
+">
+
+
+
+
+ référence » "> ()
+
+ ">
+
+
+
+
+ dérive de »
+
+ "> ()
+
+
+
+
+
+
+
+
+
diff --git a/app/out/default/views/sources/source/menu_source.php b/app/out/default/views/sources/source/menu_source.php
new file mode 100644
index 0000000..8370828
--- /dev/null
+++ b/app/out/default/views/sources/source/menu_source.php
@@ -0,0 +1,58 @@
+user();
+ if($user && ($source["status"] == 2 || $source["status"] == 3)) :
+
+?>
+
+
+
+
diff --git a/app/out/default/views/sources/source/metas.php b/app/out/default/views/sources/source/metas.php
new file mode 100644
index 0000000..9e5a331
--- /dev/null
+++ b/app/out/default/views/sources/source/metas.php
@@ -0,0 +1,41 @@
+helper("mw_helper_sourceml_out");
+
+ $metas =
+ ( $source["reference"] ?
+ array
+ ( "licence_name" => isset($source["reference"]["licence"]["nom"]) ? $source["reference"]["licence"]["nom"] : "",
+ "licence_url" => isset($source["reference"]["licence"]["url"]) ? $source["reference"]["licence"]["url"] : "",
+ "date_creation" => $source["reference"]["date_creation"],
+ "xml_url" => $source["reference"]["xml"]["url"]
+ )
+ : array
+ ( "licence_name" =>
+ ( isset($source["licence"]["id"]) && isset($this->out["licences"]["list"][$source["licence"]["id"]]) ?
+ $this->out["licences"]["list"][$source["licence"]["id"]]["nom"]
+ : ""
+ ),
+ "licence_url" =>
+ ( isset($source["licence"]["id"]) && isset($this->out["licences"]["list"][$source["licence"]["id"]]) ?
+ $this->out["licences"]["list"][$source["licence"]["id"]]["url"]
+ : ""
+ ),
+ "date_creation" => $source["date_creation"],
+ "xml_url" => $data->source_xml_url($source["id"])
+ )
+ );
+
+?>
+
+
diff --git a/app/out/default/views/users/albums/add.php b/app/out/default/views/users/albums/add.php
new file mode 100644
index 0000000..1d44877
--- /dev/null
+++ b/app/out/default/views/users/albums/add.php
@@ -0,0 +1,126 @@
+out_file("views/tinymce.init.js.php"); ?>
+
+Nouvel album
+
+
+
+out["groupes"]["total"] > 0) : ?>
+
+
+
+
+
+Vous ne gérez aucun groupe pour le moment.
+Pour ajouter un album, vous devez d'abord ">créer un groupe.
+
+
diff --git a/app/out/default/views/users/albums/edit.php b/app/out/default/views/users/albums/edit.php
new file mode 100644
index 0000000..e1132d1
--- /dev/null
+++ b/app/out/default/views/users/albums/edit.php
@@ -0,0 +1,128 @@
+out_file("views/tinymce.init.js.php"); ?>
+
+Modifier un album
+
+
+
+out["groupes"]["total"] > 0) : ?>
+
+
+
+
+
+Vous ne gérez aucun groupe pour le moment.
+Pour ajouter un album, vous devez d'abord ">créer un groupe.
+
+
diff --git a/app/out/default/views/users/albums/list.php b/app/out/default/views/users/albums/list.php
new file mode 100644
index 0000000..bd1ba9c
--- /dev/null
+++ b/app/out/default/views/users/albums/list.php
@@ -0,0 +1,86 @@
+Albums
+
+
+
+out["groupes"]["total"] > 0) : ?>
+
+
+ -
+
+
+
+
+
+
+out["albums"]["list"]) : ?>
+
+out_file("views/navig.php"); ?>
+
+param("groupe")]) && $_GET[$this->param("groupe")]) $get_params["groupe"] = $_GET[$this->param("groupe")];
+
+?>
+
+
+out_file("views/navig.php"); ?>
+
+
+Aucun album pour le moment
+
diff --git a/app/out/default/views/users/groupes/add.php b/app/out/default/views/users/groupes/add.php
new file mode 100644
index 0000000..48920f6
--- /dev/null
+++ b/app/out/default/views/users/groupes/add.php
@@ -0,0 +1,50 @@
+out_file("views/tinymce.init.js.php"); ?>
+
+Nouveau groupe
+
+
+
+
diff --git a/app/out/default/views/users/groupes/edit.php b/app/out/default/views/users/groupes/edit.php
new file mode 100644
index 0000000..3b9a03a
--- /dev/null
+++ b/app/out/default/views/users/groupes/edit.php
@@ -0,0 +1,54 @@
+out_file("views/tinymce.init.js.php"); ?>
+
+Modifier un groupe
+
+
+
+
diff --git a/app/out/default/views/users/groupes/list.php b/app/out/default/views/users/groupes/list.php
new file mode 100644
index 0000000..2afd879
--- /dev/null
+++ b/app/out/default/views/users/groupes/list.php
@@ -0,0 +1,38 @@
+Groupes
+
+
+
+out["groupes"]["list"]) : ?>
+
+out_file("views/navig.php"); ?>
+
+
+
+out_file("views/navig.php"); ?>
+
+
+Aucun groupe pour le moment
+
diff --git a/app/out/default/views/users/morceaux/add.php b/app/out/default/views/users/morceaux/add.php
new file mode 100644
index 0000000..ec9b692
--- /dev/null
+++ b/app/out/default/views/users/morceaux/add.php
@@ -0,0 +1,259 @@
+out_file("views/tinymce.init.js.php"); ?>
+
+Nouveau morceau
+
+
+
+
+
+out["groupes"]["total"] > 0) : ?>
+
+
+
+
+
+Vous ne gérez aucun groupe pour le moment.
+Pour ajouter un morceau, vous devez d'abord ">créer un groupe.
+
+
diff --git a/app/out/default/views/users/morceaux/edit.php b/app/out/default/views/users/morceaux/edit.php
new file mode 100644
index 0000000..39d4c81
--- /dev/null
+++ b/app/out/default/views/users/morceaux/edit.php
@@ -0,0 +1,266 @@
+out_file("views/tinymce.init.js.php"); ?>
+
+Modifier un morceau
+
+
+
+
+
+out["groupes"]["total"] > 0) : ?>
+
+
+
+
+
+Vous ne gérez aucun groupe pour le moment.
+Pour ajouter un morceau, vous devez d'abord ">créer un groupe.
+
+
diff --git a/app/out/default/views/users/morceaux/list.php b/app/out/default/views/users/morceaux/list.php
new file mode 100644
index 0000000..37e200e
--- /dev/null
+++ b/app/out/default/views/users/morceaux/list.php
@@ -0,0 +1,142 @@
+param("groupe")]) && $_GET[$this->param("groupe")] && is_array($this->out["albums"][$_GET[$this->param("groupe")]]))
+ { foreach($this->out["albums"][$_GET[$this->param("groupe")]] as $id_album => $album)
+ { $albums[$id_album] = $album;
+ }
+ }
+ else
+ { foreach($this->out["albums"] as $id_groupe => $_albums)
+ { foreach($this->out["albums"][$id_groupe] as $id_album => $album)
+ { $albums[$id_album] = $album;
+ }
+ }
+ }
+
+?>
+
+Morceaux
+
+
+
+out["groupes"]["total"] > 0 || (isset($this->out["albums"]["total"]) && $this->out["albums"]["total"] > 0)) : ?>
+
+
+out["groupes"]["total"] > 0) : ?>
+ -
+param("album")]) && !$_GET[$this->param("album")]) $url_params["album"] = "";
+
+?>
+
+
+
+
+ -
+
+param("groupe")])) $url_params["groupe"] = $_GET[$this->param("groupe")];
+
+?>
+
+
+
+
+
+
+
+
+out["morceaux"]["list"]) : ?>
+
+out_file("views/navig.php"); ?>
+
+param("groupe")]) && $_GET[$this->param("groupe")]) $get_params["groupe"] = $_GET[$this->param("groupe")];
+ if(isset($_GET[$this->param("album")]) && $_GET[$this->param("album")]) $get_params["album"] = $_GET[$this->param("album")];
+
+?>
+
+
+out_file("views/navig.php"); ?>
+
+
+Aucun morceau pour le moment
+
diff --git a/app/out/default/views/users/pistes/add.php b/app/out/default/views/users/pistes/add.php
new file mode 100644
index 0000000..bfe82eb
--- /dev/null
+++ b/app/out/default/views/users/pistes/add.php
@@ -0,0 +1,264 @@
+out_file("views/tinymce.init.js.php"); ?>
+
+Nouvelle source
+
+
+
+
+
+out["groupes"]["total"] > 0) : ?>
+
+
+
+
+
+Vous ne gérez aucun groupe pour le moment.
+Pour ajouter une piste, vous devez d'abord ">créer un groupe.
+
+
diff --git a/app/out/default/views/users/pistes/edit.php b/app/out/default/views/users/pistes/edit.php
new file mode 100644
index 0000000..be94c15
--- /dev/null
+++ b/app/out/default/views/users/pistes/edit.php
@@ -0,0 +1,272 @@
+out_file("views/tinymce.init.js.php"); ?>
+
+Modifier une source
+
+
+
+
+
+out["groupes"]["total"] > 0) : ?>
+
+
+
+
+
+Vous ne gérez aucun groupe pour le moment.
+Pour ajouter une piste, vous devez d'abord ">créer un groupe.
+
+
diff --git a/app/out/default/views/users/pistes/list.php b/app/out/default/views/users/pistes/list.php
new file mode 100644
index 0000000..a02b4a5
--- /dev/null
+++ b/app/out/default/views/users/pistes/list.php
@@ -0,0 +1,174 @@
+param("groupe")]) && $_GET[$this->param("groupe")] && is_array($this->out["albums"][$_GET[$this->param("groupe")]]))
+ { foreach($this->out["albums"][$_GET[$this->param("groupe")]] as $id_album => $album)
+ { $albums[$id_album] = $album;
+ }
+ }
+ else
+ { foreach($this->out["albums"] as $id_groupe => $_albums)
+ { foreach($this->out["albums"][$id_groupe] as $id_album => $album)
+ { $albums[$id_album] = $album;
+ }
+ }
+ }
+
+ $morceaux = array();
+ if(isset($_GET[$this->param("groupe")]) && $_GET[$this->param("groupe")])
+ { $id_groupe = $_GET[$this->param("groupe")];
+ if(is_array($this->out["morceaux"][$id_groupe]))
+ { foreach($this->out["morceaux"][$id_groupe] as $id_album => $_morceaux)
+ { if(isset($_GET[$this->param("album")]) && $_GET[$this->param("album")])
+ { if($id_album == $_GET[$this->param("album")])
+ { foreach($this->out["morceaux"][$id_groupe][$id_album] as $id_morceau => $morceau)
+ { $morceaux[$id_morceau] = $morceau;
+ }
+ }
+ }
+ else
+ { foreach($this->out["morceaux"][$id_groupe] as $id_album => $_morceaux)
+ { foreach($this->out["morceaux"][$id_groupe][$id_album] as $id_morceau => $morceau)
+ { $morceaux[$id_morceau] = $morceau;
+ }
+ }
+ }
+ }
+ }
+ }
+ else
+ { foreach($this->out["morceaux"] as $id_groupe => $_albums)
+ { foreach($this->out["morceaux"][$id_groupe] as $id_album => $_morceaux)
+ { foreach($this->out["morceaux"][$id_groupe][$id_album] as $id_morceau => $morceau)
+ { $morceaux[$id_morceau] = $morceau;
+ }
+ }
+ }
+ }
+
+?>
+
+Sources
+
+
+
+out["groupes"]["total"] > 0) : ?>
+
+
+out["groupes"]["total"] > 0) : ?>
+ -
+
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+out["pistes"]["list"]) : ?>
+
+out_file("views/navig.php"); ?>
+
+param("groupe")]) && $_GET[$this->param("groupe")]) $get_params["groupe"] = $_GET[$this->param("groupe")];
+ if(isset($_GET[$this->param("morceau")]) && $_GET[$this->param("morceau")]) $get_params["morceau"] = $_GET[$this->param("morceau")];
+
+?>
+
+
+out_file("views/navig.php"); ?>
+
+
+Aucune source pour le moment
+
diff --git a/mw_sourceml.php b/mw_sourceml.php
new file mode 100644
index 0000000..ef62f77
--- /dev/null
+++ b/mw_sourceml.php
@@ -0,0 +1,331 @@
+set_link("admin/sourceml", $env->url("admin/sourceml"), "SourceML", 50);
+ $env->set_link("admin/sourceml/licences", $env->url("admin/licences"), "Licences", 10);
+ $env->set_link("admin/sourceml/cache", $env->url("admin/cache"), "Cache", 20);
+ $env->set_link("admin/sourceml/maintenance", $env->url("admin/maintenance"), "Maintenance", 30);
+
+ $env->set_link("users/authors", $env->url("users/groupes"), "Auteurs", 30);
+ $env->set_link("users/albums", $env->url("users/albums"), "Albums", 31);
+ $env->set_link("users/morceaux", $env->url("users/morceaux"), "Morceaux", 32);
+ $env->set_link("users/pistes", $env->url("users/pistes"), "Sources", 33);
+
+ $env->set_link("menu_top/groupes", $env->url("sources/groupe"), "Auteurs", 10);
+ $env->set_link("menu_top/albums", $env->url("sources/album"), "Albums", 11);
+ $env->set_link("menu_top/morceaux", $env->url("sources/morceau"), "Morceaux", 12);
+ $env->set_link("menu_top/pistes", $env->url("sources/piste"), "Sources", 13);
+
+ return true;
+ }
+
+ function enable($env){
+ return true;
+ }
+
+ function disable($env){
+ return true;
+ }
+
+ // ---------------------------------------------------------------------------------
+ // install
+ //
+
+ function install($env){
+ if(
+ $env->bdd("sgbd") == "mysql"
+ || $env->bdd("sgbd") == "pdo_mysql"
+ ) return $this->install_mysql($env);
+ return false;
+ }
+
+ function install_mysql($env){
+ $data = $env->data();
+ $sgbd = $data->sgbd();
+ try{
+ $EXISTS =
+ $sgbd->table_exists("#--sml_authors")
+ || $sgbd->table_exists("#--sml_classes")
+ || $sgbd->table_exists("#--sml_licences")
+ || $sgbd->table_exists("#--sml_sources")
+ || $sgbd->table_exists("#--sml_sources_access")
+ || $sgbd->table_exists("#--sml_sources_authors")
+ || $sgbd->table_exists("#--sml_sources_infos")
+ || $sgbd->table_exists("#--sml_source_cache")
+ || $sgbd->table_exists("#--sml_source_compositions")
+ || $sgbd->table_exists("#--sml_source_derivations")
+ || $sgbd->table_exists("#--sml_source_documents");
+ }
+ catch(Exception $e){
+ return "impossible de savoir si les tables existent deja";
+ }
+ if($EXISTS){
+ return "des tables existent deja en base. installation annulee";
+ }
+ try{
+ $sql =
+ "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\"";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_authors`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `id_user` int(11) NOT NULL,"
+ ." `nom` varchar(255) NOT NULL,"
+ ." `image` varchar(255) DEFAULT NULL,"
+ ." `description` text,"
+ ." `email` varchar(255) NOT NULL,"
+ ." `contact_form` tinyint(4) NOT NULL,"
+ ." `captcha` tinyint(4) NOT NULL,"
+ ." PRIMARY KEY (`id`),"
+ ." KEY `id_user` (`id_user`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_classes`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `nom` varchar(255) NOT NULL,"
+ ." PRIMARY KEY (`id`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_licences`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `nom` varchar(255) NOT NULL,"
+ ." `url` varchar(255) NOT NULL,"
+ ." PRIMARY KEY (`id`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_sources`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `id_class` int(11) NOT NULL,"
+ ." `reference` varchar(255) DEFAULT NULL,"
+ ." `titre` varchar(255) DEFAULT NULL,"
+ ." `licence` int(11) DEFAULT NULL,"
+ ." `date_creation` date DEFAULT NULL,"
+ ." `date_inscription` datetime NOT NULL,"
+ ." PRIMARY KEY (`id`),"
+ ." KEY `id_class` (`id_class`),"
+ ." KEY `licence` (`licence`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_sources_access`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `nom` varchar(255) NOT NULL,"
+ ." `intitule` varchar(255) NOT NULL,"
+ ." PRIMARY KEY (`id`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_sources_authors`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `id_source` int(11) NOT NULL,"
+ ." `id_author` int(11) NOT NULL,"
+ ." `id_sources_access` int(11) NOT NULL,"
+ ." PRIMARY KEY (`id`),"
+ ." KEY `id_object` (`id_source`),"
+ ." KEY `id_author` (`id_author`),"
+ ." KEY `id_sources_access` (`id_sources_access`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_sources_infos`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `id_source` int(11) NOT NULL,"
+ ." `key` varchar(255) NOT NULL,"
+ ." `value` text NOT NULL,"
+ ." PRIMARY KEY (`id`),"
+ ." KEY `id_source` (`id_source`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_source_cache`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `url` varchar(255) NOT NULL,"
+ ." `id_source` int(11) NOT NULL,"
+ ." `last_update` datetime NOT NULL,"
+ ." PRIMARY KEY (`id`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_source_compositions`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `id_source` int(11) NOT NULL,"
+ ." `id_composition` int(11) NOT NULL,"
+ ." PRIMARY KEY (`id`),"
+ ." KEY `id_source` (`id_source`),"
+ ." KEY `id_composition` (`id_composition`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_source_derivations`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `id_source` int(11) NOT NULL,"
+ ." `derivation` varchar(255) NOT NULL,"
+ ." PRIMARY KEY (`id`),"
+ ." KEY `derivation` (`derivation`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ $sql =
+ "CREATE TABLE `#--sml_source_documents`("
+ ." `id` int(11) NOT NULL AUTO_INCREMENT,"
+ ." `id_source` int(11) NOT NULL,"
+ ." `nom` varchar(255) NOT NULL,"
+ ." `url` varchar(255) NOT NULL,"
+ ." PRIMARY KEY (`id`),"
+ ." KEY `id_source` (`id_source`)"
+ .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
+ $sgbd->query($sql);
+
+ }
+ catch(Exception $e){
+ return "imposible de creer les tables en base";
+ }
+ try{
+ $sql =
+ "INSERT INTO `#--sml_licences` (`id`, `nom`, `url`) VALUES"
+ ."(1, 'Creative commons by-sa 2.0', 'http://creativecommons.org/licenses/by-sa/2.0/deed.fr'),"
+ ."(2, 'Creative Commons by-nc-nd 2.5', 'http://creativecommons.org/licenses/by-nc-nd/2.5/'),"
+ ."(3, 'Creative Commons by-nc-sa 2.5', 'http://creativecommons.org/licenses/by-nc-sa/2.5/'),"
+ ."(4, 'Creative Commons by-nc 2.5', 'http://creativecommons.org/licenses/by-nc/2.5/'),"
+ ."(5, 'Creative Commons by-nd 2.5', 'http://creativecommons.org/licenses/by-nd/2.5/'),"
+ ."(6, 'Creative Commons by-sa 2.5', 'http://creativecommons.org/licenses/by-sa/2.5/'),"
+ ."(7, 'Creative Commons by 2.5', 'http://creativecommons.org/licenses/by/2.5/'),"
+ ."(8, 'Licence Art Libre', 'http://artlibre.org/licence/lal/'),"
+ ."(9, 'Licence C Reaction', 'http://morne.free.fr/Necktar7/creactionfr.htm'),"
+ ."(10, 'Yellow OpenMusic License', 'http://openmusic.linuxtag.org/yellow.html'),"
+ ."(11, 'Green OpenMusic License', 'http://openmusic.linuxtag.org/green.html')";
+ $sgbd->query($sql);
+
+ $sql =
+ "INSERT INTO `#--sml_classes` (`id`, `nom`) VALUES"
+ ."(1, 'album'),"
+ ."(2, 'morceau'),"
+ ."(3, 'piste')";
+ $sgbd->query($sql);
+
+ $sql =
+ "INSERT INTO `mw_sml_sources_access` (`id`, `nom`, `intitule`) VALUES"
+ ."(1, 'admin', 'administrateur'),"
+ ."(2, 'editeur', 'éditeur'),"
+ ."(3, 'contributeur', 'contributeur')";
+ $sgbd->query($sql);
+
+ }
+ catch(Exception $e){
+ return "les tables ont ete ajoutees en base mais impossible d'y enregistrer les valeurs par defaut.";
+ }
+ return true;
+ }
+
+ // ---------------------------------------------------------------------------------
+ // uninstall
+ //
+
+ function uninstall($env){
+ if(
+ $env->bdd("sgbd") == "mysql"
+ || $env->bdd("sgbd") == "pdo_mysql"
+ ) return $this->uninstall_mysql($env);
+ return false;
+ }
+
+ function uninstall_mysql($env){
+ $data = $env->data();
+ $sgbd = $data->sgbd();
+ if(!$this->disable($env)) return "impossible de desactiver le plugin";
+ try{
+ $sgbd->query("DROP TABLE #--sml_authors");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_authors";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_classes");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_classes";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_licences");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_licences";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_sources");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_sources";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_sources_access");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_sources_access";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_sources_authors");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_sources_authors";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_sources_infos");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_sources_infos";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_source_cache");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_source_cache";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_source_compositions");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_source_compositions";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_source_derivations");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_source_derivations";
+ }
+ try{
+ $sgbd->query("DROP TABLE #--sml_source_documents");
+ }
+ catch(Exception $e){
+ return "impossible de supprimer la table #--sml_source_documents";
+ }
+ return true;
+ }
+
+ }
+
+?>
\ No newline at end of file
--
2.1.4