Browse Source

structuration en trunk/branches (3)

svn/attic/trunk/98799
maieul@maieul.net 6 years ago
commit
318cda7a68
  1. 42
      .gitattributes
  2. 32
      action/appliquer_decalage.php
  3. 23
      action/supprimer_almanach.php
  4. 30
      action/supprimer_evenements_almanach.php
  5. 32
      action/synchro_almanach.php
  6. 121
      base/import_ics.php
  7. 10
      fabrique_diff.diff
  8. 224
      fabrique_import_ics.php
  9. 98
      formulaires/editer_almanach.html
  10. 171
      formulaires/editer_almanach.php
  11. 20
      formulaires/editer_almanach_2.html
  12. 135
      genie/import_ics_synchro.php
  13. 26
      genie/synchro.php
  14. 70
      import_ics_administrations.php
  15. 126
      import_ics_autorisations.php
  16. 52
      import_ics_fonctions.php
  17. 33
      import_ics_pipelines.php
  18. 80
      lang/almanach_fr.php
  19. 12
      lang/import_ics_fr.php
  20. 14
      lang/paquet-import_ics_fr.php
  21. 39
      paquet.xml
  22. 96
      prive/objets/contenu/almanach.html
  23. 55
      prive/objets/liste/almanachs.html
  24. BIN
      prive/themes/spip/images/almanach-12.png
  25. BIN
      prive/themes/spip/images/almanach-16.png
  26. BIN
      prive/themes/spip/images/almanach-24.png
  27. BIN
      prive/themes/spip/images/almanach-32.png
  28. BIN
      prive/themes/spip/images/almanach-add-16.png
  29. BIN
      prive/themes/spip/images/almanach-add-24.png
  30. BIN
      prive/themes/spip/images/almanach-add-32.png
  31. BIN
      prive/themes/spip/images/almanach-del-16.png
  32. BIN
      prive/themes/spip/images/almanach-del-24.png
  33. BIN
      prive/themes/spip/images/almanach-del-32.png
  34. BIN
      prive/themes/spip/images/almanach-edit-16.png
  35. BIN
      prive/themes/spip/images/almanach-edit-24.png
  36. BIN
      prive/themes/spip/images/almanach-edit-32.png
  37. BIN
      prive/themes/spip/images/almanach-new-16.png
  38. BIN
      prive/themes/spip/images/almanach-new-24.png
  39. BIN
      prive/themes/spip/images/almanach-new-32.png
  40. BIN
      prive/themes/spip/images/import_ics-128.png
  41. BIN
      prive/themes/spip/images/import_ics-32.png
  42. BIN
      prive/themes/spip/images/import_ics-64.png

42
.gitattributes vendored

@ -0,0 +1,42 @@
* text=auto !eol
action/appliquer_decalage.php -text
action/supprimer_almanach.php -text
action/supprimer_evenements_almanach.php -text
action/synchro_almanach.php -text
base/import_ics.php -text
/fabrique_diff.diff -text
/fabrique_import_ics.php -text
formulaires/editer_almanach.html -text
formulaires/editer_almanach.php -text
formulaires/editer_almanach_2.html -text
genie/import_ics_synchro.php -text
genie/synchro.php -text
/import_ics_administrations.php -text
/import_ics_autorisations.php -text
/import_ics_fonctions.php -text
/import_ics_pipelines.php -text
lang/almanach_fr.php -text
lang/import_ics_fr.php -text
lang/paquet-import_ics_fr.php -text
/paquet.xml -text
prive/objets/contenu/almanach.html -text
prive/objets/liste/almanachs.html -text
prive/themes/spip/images/almanach-12.png -text
prive/themes/spip/images/almanach-16.png -text
prive/themes/spip/images/almanach-24.png -text
prive/themes/spip/images/almanach-32.png -text
prive/themes/spip/images/almanach-add-16.png -text
prive/themes/spip/images/almanach-add-24.png -text
prive/themes/spip/images/almanach-add-32.png -text
prive/themes/spip/images/almanach-del-16.png -text
prive/themes/spip/images/almanach-del-24.png -text
prive/themes/spip/images/almanach-del-32.png -text
prive/themes/spip/images/almanach-edit-16.png -text
prive/themes/spip/images/almanach-edit-24.png -text
prive/themes/spip/images/almanach-edit-32.png -text
prive/themes/spip/images/almanach-new-16.png -text
prive/themes/spip/images/almanach-new-24.png -text
prive/themes/spip/images/almanach-new-32.png -text
prive/themes/spip/images/import_ics-128.png -text
prive/themes/spip/images/import_ics-32.png -text
prive/themes/spip/images/import_ics-64.png -text

32
action/appliquer_decalage.php

@ -0,0 +1,32 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2013 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('lib/iCalcreator.class'); /*pour la librairie icalcreator incluse dans le plugin icalendar*/
function action_appliquer_decalage_dist() {
//vérification de l'auteur en cours//
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^(\d+)$,", $arg, $r)) {
spip_log("action_appliquer_decalage_dist $arg pas compris");
return;
}
$id_almanach = $r[1];
}
?>

23
action/supprimer_almanach.php

@ -0,0 +1,23 @@
<?php
#tout est pompé du tutoriel de marcimat "chat"
if (!defined("_ECRIRE_INC_VERSION")) return;
function action_supprimer_almanach_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^(\d+)$,", $arg, $r)) {
spip_log("action_supprimer_almanach_dist $arg pas compris");
} else {
action_supprimer_almanach_post($r[1]);
}
}
function action_supprimer_almanach_post($id_almanach) {
//on supprime l'almanach
sql_delete("spip_almanachs", "id_almanach=" . intval($id_almanach));
include_spip('inc/invalideur');
suivre_invalideur("id='id_almanach/$id_almanach'");
}
?>

30
action/supprimer_evenements_almanach.php

@ -0,0 +1,30 @@
<?php
#tout est pompé du tutoriel de marcimat "chat"
if (!defined("_ECRIRE_INC_VERSION")) return;
function action_supprimer_evenements_almanach_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^(\d+)$,", $arg, $r)) {
spip_log("action_supprimer_evenements_almanach_dist $arg pas compris");
} else {
action_supprimer_evenements_almanach_post($r[1]);
}
}
function action_supprimer_evenements_almanach_post($id_almanach) {
//recuperer tous les evenemments lies à l'almanach en cours
$all = sql_allfetsel('id_objet', 'spip_almanachs_liens','id_almanach='.intval($id_almanach));
//pour chacun d'entre eux supprimer l'entree correspondante dans la table evenement
foreach ($all as $id_evenement_array) {
$id_evenement=$id_evenement_array['id_objet'];
sql_delete("spip_evenements","id_evenement=".intval($id_evenement));
}
//on supprime les entrees de la table de liaison
sql_delete("spip_almanachs_liens","id_almanach=".intval($id_almanach));
include_spip('inc/invalideur');
suivre_invalideur(1);
}
?>

32
action/synchro_almanach.php

@ -0,0 +1,32 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2013 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('lib/iCalcreator.class'); /*pour la librairie icalcreator incluse dans le plugin icalendar*/
function action_synchro_almanach_dist() {
//vérification de l'auteur en cours//
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^(\d+)$,", $arg, $r)) {
spip_log("action_synchro_almanach_dist $arg pas compris");
return;
}
$id_almanach = $r[1];
}
?>

121
base/import_ics.php

@ -0,0 +1,121 @@
<?php
/**
* Déclarations relatives à la base de données
*
* @plugin Import_ics
* @copyright 2013
* @author Amaury
* @licence GNU/GPL
* @package SPIP\Import_ics\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Déclaration des alias de tables et filtres automatiques de champs
*
* @pipeline declarer_tables_interfaces
* @param array $interfaces
* Déclarations d'interface pour le compilateur
* @return array
* Déclarations d'interface pour le compilateur
*/
function import_ics_declarer_tables_interfaces($interfaces) {
$interfaces['table_des_tables']['almanachs'] = 'almanachs';
return $interfaces;
}
/**
* Déclaration des objets éditoriaux
*
* @pipeline declarer_tables_objets_sql
* @param array $tables
* Description des tables
* @return array
* Description complétée des tables
*/
function import_ics_declarer_tables_objets_sql($tables) {
$tables['spip_almanachs'] = array(
'type' => 'almanach',
'principale' => "oui",
'field'=> array(
"id_almanach" => "bigint(21) NOT NULL",
"titre" => "text NOT NULL DEFAULT ''",
"url" => "text NOT NULL DEFAULT ''",
"id_article" => "bigint(21) NOT NULL DEFAULT 0",
"id_mot" => "bigint(21) NOT NULL DEFAULT 0",
"id_ressource" => "bigint(21) NOT NULL DEFAULT 0",
"resa_auto" => "bigint(21) NOT NULL DEFAULT 0",
"decalage" => "bigint(21) NOT NULL DEFAULT 0",
"date" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"statut" => "varchar(20) DEFAULT '0' NOT NULL",
"maj" => "TIMESTAMP",
"statut_maj" => "varchar(20) DEFAULT '0' NOT NULL"
),
'key' => array(
"PRIMARY KEY" => "id_almanach",
"KEY statut" => "statut",
),
'titre' => "titre AS titre, '' AS lang",
'date' => "date",
'champs_editables' => array('titre', 'url', 'id_article', 'id_mot', 'id_ressource'),
'champs_versionnes' => array('titre', 'url', 'id_article', 'id_mot', 'id_ressource'),
'rechercher_champs' => array(),
'tables_jointures' => array('spip_almanachs_liens'),
'statut_textes_instituer' => array(
'prepa' => 'texte_statut_en_cours_redaction',
'prop' => 'texte_statut_propose_evaluation',
'publie' => 'texte_statut_publie',
'refuse' => 'texte_statut_refuse',
'poubelle' => 'texte_statut_poubelle',
),
'statut'=> array(
array(
'champ' => 'statut',
'publie' => 'publie',
'previsu' => 'publie,prop,prepa',
'post_date' => 'date',
'exception' => array('statut','tout')
)
),
'texte_changer_statut' => 'almanach:texte_changer_statut_almanach',
);
return $tables;
}
/**
* Déclaration des tables secondaires (liaisons)
*
* @pipeline declarer_tables_auxiliaires
* @param array $tables
* Description des tables
* @return array
* Description complétée des tables
*/
function import_ics_declarer_tables_auxiliaires($tables) {
$tables['spip_almanachs_liens'] = array(
'field' => array(
"id_almanach" => "bigint(21) DEFAULT '0' NOT NULL",
"id_objet" => "bigint(21) DEFAULT '0' NOT NULL",
"objet" => "VARCHAR(25) DEFAULT '' NOT NULL",
"vu" => "VARCHAR(6) DEFAULT 'non' NOT NULL"
),
'key' => array(
"PRIMARY KEY" => "id_almanach,id_objet,objet",
"KEY id_almanach" => "id_almanach"
)
);
return $tables;
}
?>

10
fabrique_diff.diff

@ -0,0 +1,10 @@
diff -r -x . -x .. -x fabrique_diff.diff -x fabrique_import_ics.php ../plugins/fabrique_auto/.backup/import_ics/paquet.xml ../plugins/fabrique_auto/import_ics/paquet.xml
12c12
< Paquet genere le 2013-04-15 14:07:29
---
> Paquet genere le 2013-04-15 14:09:23
Binary files ../plugins/fabrique_auto/.backup/import_ics/prive/themes/spip/images/almanach-24.png and ../plugins/fabrique_auto/import_ics/prive/themes/spip/images/almanach-24.png differ
Binary files ../plugins/fabrique_auto/.backup/import_ics/prive/themes/spip/images/almanach-add-24.png and ../plugins/fabrique_auto/import_ics/prive/themes/spip/images/almanach-add-24.png differ
Binary files ../plugins/fabrique_auto/.backup/import_ics/prive/themes/spip/images/almanach-del-24.png and ../plugins/fabrique_auto/import_ics/prive/themes/spip/images/almanach-del-24.png differ
Binary files ../plugins/fabrique_auto/.backup/import_ics/prive/themes/spip/images/almanach-edit-24.png and ../plugins/fabrique_auto/import_ics/prive/themes/spip/images/almanach-edit-24.png differ
Binary files ../plugins/fabrique_auto/.backup/import_ics/prive/themes/spip/images/almanach-new-24.png and ../plugins/fabrique_auto/import_ics/prive/themes/spip/images/almanach-new-24.png differ

224
fabrique_import_ics.php

@ -0,0 +1,224 @@
<?php
/**
* Fichier généré par la Fabrique de plugin v5
* le 2013-04-15 14:09:23
*
* Ce fichier de sauvegarde peut servir à recréer
* votre plugin avec le plugin «Fabrique» qui a servi à le créer.
*
* Bien évidemment, les modifications apportées ultérieurement
* par vos soins dans le code de ce plugin généré
* NE SERONT PAS connues du plugin «Fabrique» et ne pourront pas
* être recréées par lui !
*
* La «Fabrique» ne pourra que régénerer le code de base du plugin
* avec les informations dont il dispose.
*
**/
if (!defined("_ECRIRE_INC_VERSION")) return;
$data = array (
'fabrique' =>
array (
'version' => 5,
),
'paquet' =>
array (
'nom' => 'Import_ics',
'slogan' => 'Importez vos événements',
'description' => 'Importez les événements de sites distants dans votre base de données d\'événements SPIP',
'prefixe' => 'import_ics',
'version' => '1.0.0',
'auteur' => 'Amaury',
'auteur_lien' => '',
'licence' => 'GNU/GPL',
'categorie' => 'date',
'etat' => 'dev',
'compatibilite' => '[3.0.7;3.0.*]',
'documentation' => '',
'administrations' => 'on',
'schema' => '1.0.0',
'formulaire_config' => '',
'formulaire_config_titre' => '',
'inserer' =>
array (
'paquet' => '<necessite nom="agenda"/>
<necessite nom="icalendar"/>
<necessite nom="cextras" compatibilite="[3.0.5;[" />
<necessite nom="seminaire" />
',
'administrations' =>
array (
'maj' => '',
'desinstallation' => '',
'fin' => '',
),
'base' =>
array (
'tables' =>
array (
'fin' => '',
),
),
),
'scripts' =>
array (
'pre_copie' => '',
'post_creation' => '',
),
'exemples' => '',
),
'objets' =>
array (
0 =>
array (
'nom' => 'Almanachs',
'nom_singulier' => 'Almanach',
'genre' => 'masculin',
'logo_variantes' => 'on',
'table' => 'spip_almanachs',
'cle_primaire' => 'id_almanach',
'cle_primaire_sql' => 'bigint(21) NOT NULL',
'table_type' => 'almanach',
'champs' =>
array (
0 =>
array (
'nom' => 'Titre',
'champ' => 'titre',
'sql' => 'text NOT NULL DEFAULT \'\'',
'caracteristiques' =>
array (
0 => 'editable',
1 => 'versionne',
2 => 'obligatoire',
),
'recherche' => '',
'saisie' => 'input',
'explication' => 'Titre de l\'almanach',
'saisie_options' => '',
),
1 =>
array (
'nom' => 'URL',
'champ' => 'url',
'sql' => 'text NOT NULL DEFAULT \'\'',
'caracteristiques' =>
array (
0 => 'editable',
1 => 'versionne',
2 => 'obligatoire',
),
'recherche' => '',
'saisie' => 'input',
'explication' => 'URL d\'origine du calendrier',
'saisie_options' => '',
),
2 =>
array (
'nom' => 'Article d\'accueil de l\'almanach',
'champ' => 'id_article',
'sql' => 'bigint(21) NOT NULL DEFAULT 0',
'caracteristiques' =>
array (
0 => 'editable',
1 => 'versionne',
2 => 'obligatoire',
),
'recherche' => '',
'saisie' => 'selecteur_article',
'explication' => 'Choisissez un article qui va recevoir les événements importés',
'saisie_options' => '',
),
),
'champ_titre' => 'titre',
'champ_date' => 'date',
'statut' => 'on',
'chaines' =>
array (
'titre_objets' => 'Almanachs',
'titre_objet' => 'Almanach',
'info_aucun_objet' => 'Aucun almanach',
'info_1_objet' => 'Un almanach',
'info_nb_objets' => '@nb@ almanachs',
'icone_creer_objet' => 'Créer un almanach',
'icone_modifier_objet' => 'Modifier cet almanach',
'titre_logo_objet' => 'Logo de cet almanach',
'titre_langue_objet' => 'Langue de cet almanach',
'titre_objets_rubrique' => 'Almanachs de la rubrique',
'info_objets_auteur' => 'Les almanachs de cet auteur',
'retirer_lien_objet' => 'Retirer cet almanach',
'retirer_tous_liens_objets' => 'Retirer tous les almanachs',
'ajouter_lien_objet' => 'Ajouter cet almanach',
'texte_ajouter_objet' => 'Ajouter un almanach',
'texte_creer_associer_objet' => 'Créer et associer un almanach',
'texte_changer_statut_objet' => 'Cet almanach est :',
),
'table_liens' => 'on',
'roles' => '',
'auteurs_liens' => '',
'vue_auteurs_liens' => '',
'autorisations' =>
array (
'objet_creer' => '',
'objet_voir' => '',
'objet_modifier' => '',
'objet_supprimer' => '',
'associerobjet' => '',
),
'boutons' =>
array (
0 => 'menu_edition',
1 => 'outils_rapides',
),
),
),
'images' =>
array (
'paquet' =>
array (
'logo' =>
array (
0 =>
array (
'extension' => 'png',
'contenu' => 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEYklEQVRYhbWWy48UVRTGf+fcW9UjL3FswAwsMGF8xYVxAQtXxsiCuBU2OjPMX+D4P2hciY+4ImlmuoHEhQtWRiVhMQsTMjFgjOuBIAExxjAz/ajuusdFVT9qHj09DJykU/VV3T73u985X90rS0tL/tc/7l5bvH3nTBqMpxVOhZcnXlj+8N03J4HOVuM8MLZ4+86Z77/8hObaylMjMLZ3P+c+/eq4me0RkcdbEjCzsTQNACz/9QBEQeTJZzYDC7z2yn7yvPGw4d7MNBPe0LgEz+1BoujJ52+3oVEHDAPMTGXIgnz/VnD79vLfoTLSewIKBMBGwOTXg4/+yd9uHzoIXFwCYNyM8UbCoWbCL5fmOdxocmi1zpFGk+uVSxzZBJfrDcpmKBCVSr0FbBcDChiqGR8HIIonEHUSSq0G1umgqow11yg11gghRdX1sDcDMcaAMZdNPUz6bsjNmzcPf3F58eEPX89xf6XBwwN7e3KWgOp7Z/n91ZNYu42IICKYGWYBEe3hYAaRR3yEddq4NCWOHF43NrVT4a0TL/12+tTkqYICvtPmxsUKH83MYGlKyQm35r7hp2/nqK8+7hc+G76JxpJNZgZYRniTVecWffv9kyf29AkEw5nhWw3c6gohTXGxx1pNwLh7/+EzsWifgBhOs/rHTgliRE4Ry5b7rCxasKGqwznlypXLmBmlSPNG0mdmUe29EcldIExPzzA1NcX01AzBAoZtsGi5lfDzfJVyK+HFenMoHm8kjFtGo5unG34QqGre4YYFw8iuGyyqihNBRXDiQMCJ2xqrFeboa9IjkInmVPHeE0URwTl85LMSGHjL5HokguVETgN/T39MOgLulsSv23AHvoSCOkVVqVar1GpVatUFRAUs9Cx6rB2YaLaZaAeuz9eYGBEfawduXKzgO+2NCnShqgDG7OwsIaQ456ktfg5WtKil2Tu/toJbXcXSzgjYZf83g7ChBLkGqhgQzAjBcA5CCJhQsKjDcE7wIsROcOgIWHFkeXJvb9KEkjWXU8XlTSci6DqLhhBwzhFFnqtXr5Cm6bZYNSOh6hi0YYEAgIkwv7AAwFjss64tWHS6N0GtVmNqanS8sLDQy9etu4fiJ332/PkCocr1z/L+GLBo/gsh7Aib9e1cUMC54sNiX2QbzKBFMzkdURTtCHvv89JmzQ7gRSRMHn3+z7NzF97opCHfychkF6EUe0ALFg0hoDmhnWDVLM/6Hkg+eOf1c61Wq2xmBSlCCPF31279mJWgb9FeTefnmZ09PzKuVCp5nr71vYjUoyi6G0XRg/UE0jQ92C/FgEXNEDPS/H5UbHme9T3Q6Z7bhx2hBi2qqgj07DoyFkFlkyYcNboWNctOO+rcjrBtssBtCQyz6G6im3dr/+UxzKK7iW7eoQqISDha3nfv7NyFYwWL7iZE8E45Wt53T0SCLC0tbTnWzA4kSXI8SZLx9Q7ZHQcJcRz/G8fx8nYK1OM4Xo7j+P7TJgAkIlL/HzTWviqSC0lGAAAAAElFTkSuQmCC',
),
),
),
'objets' =>
array (
0 =>
array (
'logo' =>
array (
0 =>
array (
'extension' => 'png',
'contenu' => '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',
),
32 =>
array (
'extension' => 'png',
'contenu' => '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',
),
16 =>
array (
'extension' => 'png',
'contenu' => 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACV0lEQVQ4jZWTzW+MURTGf/e+9513SlJsfFdSLNiRUDOC6VdQpMT4isSysbD1T0gXVhWJxMaCoBRRRVuKmU5b0URorDSpSDBUlbbz8d57LGYilSD1bJ6cxXnOc06eowYun5aar5cADSjmBgEcg4tOoOT8cqGhDZz7v36toecUBg/IvoA37aDm4kJAHKxLggfqyNUxuXC4ircF0F5Z4x9wDsTC6gi0XHuH8fITBFQxT2Co/QZKa5Sa7UKhKKmKCDYsUHMgSQB4+Ql0wRbxgKgG39PUHzqA73nUJffjG0NDspmoqWRnch9Rv5L6Y0kiunTygi1icqFFAUZDJIgw2HmfIIgydK+baFDB864Mz6YTpK+AdeDdfsympgQayIUWnQsdCvABoz1q9+wiahbQ0NRI1CykfncMDdTFSlNrmxP4irKAw+StQ5cdGD/g+aNhurI1PLwMViDoe4sV6E2X6sHuIWKNm/lehGkLOheGABgFEd9QV7cRBdTGQSvYnqjm4KrXtB4Xjla/pLFxM2PZGdpuZkguncbkig7KKyilSKdeETroSZUmplIjODVFun+AO28maX0ySlBRwZ4NVSyeGYe1Z3pFRKQgIn1P02JFpL9/RKTMTkRS6YyIiJw6d1fej0/J97zI8GhWOjpuiSmE9peD7dviAMRi63/jrfEtAIxOOjzj83rsEwvsBLl8AW2RWZH5e5DPdg6zd9MaPnz8wvz8Z1auWEZoLerkxQd919+5HUUryCyx2Um0StGy5BvxyjwFp3ACKIUx5ofKZDKrwzBc+O8P+DOUUu4n1NgJ8fF1wIEAAAAASUVORK5CYII=',
),
24 =>
array (
'extension' => 'png',
'contenu' => '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',
),
),
),
),
),
);
?>

98
formulaires/editer_almanach.html

@ -0,0 +1,98 @@
<script language="JavaScript">
$( document ).ready(function() {
$('.editer_id_ressource').hide();
});
function toggle(className, obj) {
var $input = $(obj);
if ($input.prop('checked')) $(className).show();
else $(className).hide();
}
</script>
<div class="ajax">
<div class='formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_almanach,nouveau}'>
[(#REM) titre pour un formulaire en plusieurs étapes
<h3> Création d'un almanach et importation d'événements : étape #ENV{_etape}/#ENV{_etapes}</h3>]
<h3> Création d'un almanach et importation d'événements</h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
#SET{tableau_decalage,#ARRAY{-24,-24h,-23,-23h,-22,-22h,-21,-21h,-20,-20h,-19,-19h,-18,-18h,-17,-17h,-16,-16h,-15,-15h,-14,-14h,-13,-13h,-12,-12h,-11,-11h,-10,-10h,-9,-9h,-8,-8h,-7,-7h,-6,-6h,-5,-5h,-4,-4h,-3,-3h,-2,-2h,-1,-1h,0,'aucun decalage',1,+1h,2,+2h,3,+3h,4,+4h,5,+5h,6,+6h,7,+7h,8,+8h,9,+9h,10,+10h,11,+11h,12,+12h,13,+13h,14,+14h,15,+15h,16,+16h,17,+17h,18,+18h,19,+19h,20,+20h,21,+21h,22,+22h,23,+23h,24,+24h}}
[(#REM) on définit un tableau vide, on rajoute dynamiquement les ensembles clé-valeur sortis de la boucle sur le groupe de mot-clés Type. On l'utilise ensuite pour la selection des mots clés par une saisie. on fait la même chose pour les ressources]
#SET{tableau_type_evenement, #ARRAY}
[(#REM)Attention astuce inside pour que les clés numériques ne soient pas réindexées, on inverse l'ordre d'intégration dasn le tableau et ensuite on flip le tableau]
<BOUCLE_groupe(GROUPES_MOTS){titre=Type}>
<BOUCLE_mots(MOTS){id_groupe}>
#SET{tableau_type_evenement, #GET{tableau_type_evenement}|array_merge{#ARRAY{#TITRE,#ID_MOT}}
</BOUCLE_mots>
</BOUCLE_groupe>
[(#SET{tableau_type_evenement, #GET{tableau_type_evenement}|array_flip})]
[(#REM)même chose avec les ressources mais on conditionne à la présence du plugin orr]
#SET{tableau_ressources,#ARRAY}
<BOUCLE_ressources(ORR_RESSOURCES?)>
#SET{tableau_ressources, #GET{tableau_ressources}|array_merge{#ARRAY{#ORR_RESSOURCE_NOM,#ID_ORR_RESSOURCE}}
</BOUCLE_ressources>
[(#SET{tableau_ressources, #GET{tableau_ressources}|array_flip})]
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</p>]
[(#ENV{editable})
<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
#ACTION_FORMULAIRE{#ENV{action}}
<input type='hidden' name='id_almanach' value='#ENV{id_almanach}' />
<input type='hidden' name='id_article' value='#ENV{id_article}' />
<ul>
[(#SAISIE{input, titre, obligatoire=oui,
label=<:almanach:label_titre:>,
explication=<:almanach:explication_titre:> })]
[(#SAISIE{url, url, obligatoire=oui,
label=<:almanach:label_url:>,
explication=<:almanach:explication_url:>,
verifier => array('type' => 'url',),
})]
[(#SAISIE{input, id_article, obligatoire=oui,
label=<:agenda:evenement_article:>,
explication=<:almanach:explication_id_article:>
})]
[(#SAISIE{selection, id_mot, obligatoire=oui,
label=<:seminaire:choix_mot:>,
explication=<:almanach:type_evenement:>,
datas=#GET{tableau_type_evenement}
})]
[(#SAISIE{selection,decalage,
label=Décalage,
explication= Vous pouvez tenter un décalage global des horaires s'ils n'apparaissent pas à la bonne heure.,
datas=#GET{tableau_decalage}
})]
[(#PLUGIN{orr}|oui)
<li class="editer_resa_auto">
<div class="choix">
<input type='checkbox' onclick="toggle('.editer_id_ressource', this)" class="checkbox" name='resa_auto' value='oui' id='resa_auto_oui'[ (#ENV{resa_auto}oui{non}|oui)checked="checked"] />
<label for='resa_auto_oui'>Activer les réservations automatiques</label>
</div>
</li>
[(#SAISIE{selection, id_ressource, obligatoire=non,
label=<:almanach:resa_auto:>,
explication=<:almanach:choix_salle:>,
datas=#GET{tableau_ressources}
})]
]
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
[(#REM)<p class="boutons"><input type='submit' class='submit' value='Suivant' /></p> ça ce sera quand le formulaire en deux parties sera correct pour l'instant on fait un formulaire en une partie]
<p class="boutons"><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
]
</div>
</div>

171
formulaires/editer_almanach.php

@ -0,0 +1,171 @@
<?php
/**
* Gestion du formulaire de d'édition de almanach
*
* @plugin Import_ics
* @copyright 2013
* @author Amaury Adon
* @licence GNU/GPL
* @package SPIP\Import_ics\Formulaires
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/actions');
include_spip('action/editer_liens');
include_spip('inc/editer');
include_spip('lib/iCalcreator.class'); /*pour la librairie icalcreator incluse dans le plugin icalendar*/
/**
* Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
*
*/
function formulaires_editer_almanach_identifier_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
return serialize(array(intval($id_almanach)));
}
/**
* Chargement du formulaire d'édition de almanach
*
* Déclarer les champs postés et y intégrer les valeurs par défaut
*/
function formulaires_editer_almanach_charger_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
$valeurs = formulaires_editer_objet_charger('almanach',$id_almanach,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
//$valeurs[_etapes]=2;//on rajoute un couple clé/valeur pour le nombre d'étapes du formulaire (pas la peine tant que je n'arrive pas à avoir un résutat correct)
$valeurs['resa_auto']='non';
return $valeurs;
}
/**
* Vérifications du formulaire d'édition de almanach
*
*/
function formulaires_editer_almanach_verifier_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
//version de base de la fabrique
//return formulaires_editer_objet_verifier('almanach',$id_almanach, array('titre', 'url', 'id_article'));
$erreurs = formulaires_editer_objet_verifier('almanach',$id_almanach, array('titre', 'url', 'id_article', 'id_mot'));
//verification supplementaires
return $erreurs;
}
/**
* Importation d'un événement dans la base
**/
function importation_evenement($objet_evenement,$id_almanach){
#on recupère les données de décalage
$decalage = _request('decalage');
#on recupere les infos de l'evenement dans des variables
$attendee = $objet_evenement->getProperty( "attendee" ); #nom de l'attendee
$lieu = $objet_evenement->getProperty("location");#récupération du lieu
$summary_array = $objet_evenement->getProperty("summary", 1, TRUE); #summary est un array on recupere la valeur dans l'insertion attention, summary c'est pour le titre !
$titre_evt=str_replace('SUMMARY:', '', $summary_array["value"]);
$url = $objet_evenement->getProperty( "URL");#on récupère l'url de l'événement pour la mettre dans les notes histoire de pouvoir relier à l'événement original
$descriptif_array = $objet_evenement->getProperty("DESCRIPTION", 1,TRUE);
$organizer = $objet_evenement->getProperty("ORGANIZER");#organisateur de l'evenement
#données de localisation de l'évenement
$localisation = $objet_evenement->getProperty( "GEO" );#c'est un array array( "latitude" => <latitude>, "longitude" => <longitude>))
$latitude = $localisation['latitude'];
$longitude = $localisation['longitude'];
//un petit coup avec l'uid
$uid_distante = $objet_evenement->getProperty("UID");#uid de l'evenement
#les 3 lignes suivantes servent à récupérer la date de début et à la mettre dans le bon format
$dtstart_array = $objet_evenement->getProperty("dtstart", 1, TRUE);
$dtstart = $dtstart_array["value"];
$startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
$startTime = '';#on initialise l'heure' de début
$heure_debut = $dtstart["hour"]+$decalage;
if (!in_array("DATE", $dtstart_array["params"])) {
$startTime = " $heure_debut:{$dtstart["min"]}:{$dtstart["sec"]}";
}
#on fait une variable qui contient le résultat des deux précédentes actions
$date_debut = $startDate.$startTime;
#les 3 lignes suivantes servent à récupérer la date de fin et à la mettre dans le bon format
$dtend_array = $objet_evenement->getProperty("dtend", 1, TRUE);
$dtend = $dtend_array["value"];
$endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
$endTime = '';#on initialise l'heure' de fin
$heure_fin = $dtend["hour"]+$decalage;
if (!in_array("DATE", $dtend_array["params"])) {
$endTime = " $heure_fin:{$dtend["min"]}:{$dtend["sec"]}";
}
#on fait une variable qui contient le résultat des deux précédentes actions
$date_fin = $endDate.$endTime;
#on insere les infos des événements dans la base
# ca ce sera pour quand j'arriverai à faire fonctionner le selecteur d'articles $id_article = preg_replace('(article\|)','',_request('id_article')); #le selecteur d'article fournit un tableau, on se débarasse du mot article dedans et on appellera ensuite la première valeur (il pourrait y avoir des saisies multiples même si ici on ne les autorise pas)
$id_mot = _request('id_mot');
$id_article = _request('id_article');
$id_evenement= sql_insertq('spip_evenements',array('id_article' =>$id_article,'date_debut'=>$date_debut,'date_fin'=>$date_fin,'titre'=>$titre_evt,'descriptif'=>'<math>'.$descriptif_array["value"].'</math>','lieu'=>$lieu,'adresse'=>'','inscription'=>'0','places'=>'0','horaire'=>'oui','statut'=>'publie','attendee'=>str_replace('MAILTO:', '', $attendee),'id_evenement_source'=>'0','uid'=>$uid_distante,'sequence'=>$sequence_distante,'notes'=>$url));
#on associe l'événement à l'almanach
#objet_associer(array('almanach'=>$id_almanach),array('evenement'=>$id_evenement),array('vu'=>'oui'));
sql_insertq("spip_almanachs_liens",array('id_almanach'=>$id_almanach,'id_objet'=>$id_evenement,'objet'=>'evenement','vu'=>'oui'));
#on associe l'événement à son mot
sql_insertq("spip_mots_liens",array('id_mot'=>$id_mot,'id_objet'=>$id_evenement,'objet'=>'evenement'));
#on ajoute la resa si on le doit
if ((_request("id_ressource"))>0) {
$id_ressource=_request("id_ressource");
ajout_resa($titre_evt,$id_ressource,$date_debut,$date_fin);
}
}
/**
*ajout d'une reservation à l'événement si c'est coché
**/
function ajout_resa($titre_evt,$id_ressource,$date_debut,$date_fin){
$id_orr_reservation = sql_insertq("spip_orr_reservations",array('orr_reservation_nom'=>$titre_evt,'orr_date_debut'=>$date_debut,'orr_date_fin'=>$date_fin));
sql_insertq("spip_orr_reservations_liens",array('id_orr_reservation'=>$id_orr_reservation,'id_objet'=>$id_ressource,'objet'=>'orr_ressource','vu'=>'non'));
echo "ajout résa";
}
/**
* Traitement du formulaire d'édition de almanach
*
* Traiter les champs postés
*
*/
function formulaires_editer_almanach_traiter_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
$chargement = formulaires_editer_objet_traiter('almanach',$id_almanach,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
#on recupère l'id de l'almanach dont on aura besoin plus tard
$id_almanach = $chargement['id_almanach'];
#on associe le mot à l'almanach
$id_mot = _request('id_mot');
// if (_request('resa_auto')=='oui') $resa_auto=1;
sql_insertq("spip_mots_liens",array('id_mot'=>$id_mot,'id_objet'=>$id_almanach,'objet'=>'almanach'));
#configuration nécessaire à la récupération
$config = array("unique_id"=>"","url"=>_request("url"));
$cal = new vcalendar($config);
$cal->parse();
//ON fait un appel dans la base de spip pour vpouvoir vérifier si un événement y est déjà (ça ne se fait pas en une ligne...)
$liens = sql_allfetsel('id_evenement, uid, sequence', 'spip_evenements');
// on definit un tableau des uid présentes dans la base
$uid ="";
foreach ($liens as $u ) {
$uid[] = $u['uid'];
};
while ($comp = $cal->getComponent())
{
#les variables qui vont servir à vérifier l'existence et l'unicité
$sequence_distante = $comp->getProperty( "SEQUENCE" );#sequence d l'evenement http://kigkonsult.se/iCalcreator/docs/using.html#SEQUENCE
$uid_distante = $comp->getProperty("UID");#uid de l'evenement
if (!is_int($sequence_distante)){$sequence_distante="0";}//au cas où le flux ics ne fournirait pas le champ sequence, on initialise la valeur à 0 comme lors d'un import
//est-ce que c'est un googlecal ? Dans ce cas, on a un traitement un peu particulier
//On commence à vérifier l'existence et l'unicité maintenant et on met à jour ou on importe selon le cas
if (in_array($uid_distante, $uid)){//si l'uid_distante est présente dans la bdd
$cle = array_search($uid_distante, $uid); // on utilise le fait que les deux tableaux ont le même index pour le récupérer
$sequence = $liens[$cle]['sequence'];//sequence presente dans la base ayant le meme index
if ($sequence < $sequence_distante ){//si la sequecne de la bdd est plus petite, il y a eu mise à jour et il faut intervenir
echo "c'est pas pareil, il faut mettre à jour l'événement ".$liens[$cle]['id_evenement']."<br/>";
}
} else {importation_evenement($comp,$id_almanach);};//l'evenement n'est pas dans la bdd, on va l'y mettre
}
return $chargement;
}
?>

20
formulaires/editer_almanach_2.html

@ -0,0 +1,20 @@
<div class="ajax">
<div class='formulaire_spip formulaire_editer formulaire_#FORM'>
<h3> Création d'un almanach et importation d'événements : étape #ENV{_etape}/#ENV{_etapes}</h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
[(#REM) les hidden qui declencheront le service du formulaire parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action},#FORM}
<p>Les événements contenus à l'adresse <strong>#ENV{url}</strong> sont :</p>
[(#ENV{url}|mon_filtre)]
<p>Si ces événements sont ceux que vous vous attendiez à trouver, vous pouvez valider la saisie et les associer à l'almanach <strong>[(#ENV{titre}) ]</strong> et à l'article <strong>#INFO_TITRE{article,#ENV{id_article}}</strong>, sinon retournez à l'étape précédente.</p>
<p class='boutons'><input type='submit' class='submit' name="_retour_etape_1" value='<:retour:>' /> <input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
</div>
</div>

135
genie/import_ics_synchro.php

@ -0,0 +1,135 @@
<?php
/**
* Gestion du génie import_ics_synchro
*
* @plugin import_ics pour SPIP
* @license GPL
*
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Actualise tous les almanachs
*
* @genie import_ics_synchro
*
* @param int $last
* Timestamp de la dernière exécution de cette tâche
* @return int
* Positif : la tâche a été effectuée
*/
function genie_import_ics_synchro_dist($t){
//on recupère toutes les infos sur les almanachs
if(
$resultats = sql_allfetsel('*', 'spip_almanachs')
and is_array($resultats)
)
{
//librairie icalcreator incluse dans le plugin icalendar
include_spip('lib/iCalcreator.class');
//pour chacun des almanachs, on va traiter les différences
foreach ($resultats as $r) {
// on va faire une sélection des evenemnts associés à l'almanach en cours
//donc jointure sur les table spip_evenemnts et spip_almanachs_liens
$evenements_lies = sql_allfetsel('E.uid, E.id_evenement, E.sequence',
'spip_evenements AS E
INNER JOIN spip_almanachs_liens AS L
ON E.id_evenement = L.id_objet AND L.id_almanach='.intval($r['id_almanach']));
//tableau des uid associés à cet almanach tiré du tableau précédent
$uid ="";
foreach ($evenements_lies as $u ) {
$uid[] = $u['uid'];
};
//configuration nécessaire à la récupération et parsing du calendrier distant
$config = array("unique_id" => "distant",
"url" => $r['url']);
$v = new vcalendar($config);
$v->parse();
echo "almanach".$r["id_almanach"]."</br>";
while ($comp = $v->getComponent())
{
//les variables qui vont servir à vérifier l'existence et l'unicité
$sequence_distante = $comp->getProperty( "SEQUENCE" );#sequence d l'evenement http://kigkonsult.se/iCalcreator/docs/using.html#SEQUENCE
$uid_distante = $comp->getProperty("UID");#uid de l'evenement;
//au cas où le flux ics ne fournirait pas le champ sequence, on initialise la valeur à 0 comme lors d'un import
if (!is_int($sequence_distante)){$sequence_distante="0";}
//On commence à vérifier l'existence et l'unicité maintenant et on met à jour
//ou on importe selon le cas
if (in_array($uid_distante, $uid)){//si l'uid_distante est présente dans la bdd
// on utilise le fait que les deux tableaux ont le même index pour le récupérer
$cle = array_search($uid_distante, $uid);
//sequence presente dans la base ayant le meme index
$sequence = $evenements_lies[$cle]['sequence'];
if ($sequence < $sequence_distante) {
importation_evenement($comp,$r);
}
} else {importation_evenement($comp,$r);}
}
}
}
return 1;
}
/**
* Importation d'un événement dans la base
**/
function importation_evenement($objet_evenement,$tableau_almanach){
#on recupere les infos de l'evenement dans des variables
$attendee = $objet_evenement->getProperty( "attendee" ); #nom de l'attendee
$lieu = $objet_evenement->getProperty("location");#récupération du lieu
$summary_array = $objet_evenement->getProperty("summary", 1, TRUE); #summary est un array on recupere la valeur dans l'insertion attention, summary c'est pour le titre !
$url = $objet_evenement->getProperty( "URL");#on récupère l'url de l'événement pour la mettre dans les notes histoire de pouvoir relier à l'événement original
$descriptif_array = $objet_evenement->getProperty("DESCRIPTION", 1,TRUE);
$organizer = $objet_evenement->getProperty("ORGANIZER");#organisateur de l'evenement
#données de localisation de l'évenement
$localisation = $objet_evenement->getProperty( "GEO" );#c'est un array array( "latitude" => <latitude>, "longitude" => <longitude>))
$latitude = $localisation['latitude'];
$longitude = $localisation['longitude'];
//un petit coup avec l'uid
$uid_distante = $objet_evenement->getProperty("UID");#uid de l'evenement
#les 3 lignes suivantes servent à récupérer la date de début et à la mettre dans le bon format
$dtstart_array = $objet_evenement->getProperty("dtstart", 1, TRUE);
$dtstart = $dtstart_array["value"];
$startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
$startTime = '';#on initialise le temps de début
if (!in_array("DATE", $dtstart_array["params"])) {
$startTime = " {$dtstart["hour"]}:{$dtstart["min"]}:{$dtstart["sec"]}";
}
#on fait une variable qui contient le résultat des deux précédentes actions
$date_debut = $startDate.$startTime;
#les 3 lignes suivantes servent à récupérer la date de fin et à la mettre dans le bon format
$dtend_array = $objet_evenement->getProperty("dtend", 1, TRUE);
$dtend = $dtend_array["value"];
$endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
$endTime = '';#on initialise le temps de fin
if (!in_array("DATE", $dtend_array["params"])) {
$endTime = " {$dtend["hour"]}:{$dtend["min"]}:{$dtend["sec"]}";
}
#on fait une variable qui contient le résultat des deux précédentes actions
$date_fin = $endDate.$endTime;
#on insere les infos des événements dans la base
//les infos de l'almanach
$id_mot = $tableau_almanach['id_mot'];
$id_article = $tableau_almanach['id_article'];
$id_almanach = $tableau_almanach['id_almanach'];
//insertion de l'evenement en bdd
$id_evenement= sql_insertq('spip_evenements',array('id_article' =>$id_article,'date_debut'=>$date_debut,'date_fin'=>$date_fin,'titre'=>str_replace('SUMMARY:', '', $summary_array["value"]),'descriptif'=>'<math>'.$descriptif_array["value"].'</math>','lieu'=>$lieu,'adresse'=>'','inscription'=>'0','places'=>'0','horaire'=>'oui','statut'=>'publie','attendee'=>str_replace('MAILTO:', '', $attendee),'id_evenement_source'=>'0','uid'=>$uid_distante,'sequence'=>$sequence_distante,'notes'=>$url));
//on associe l'événement à l'almanach
sql_insertq("spip_almanachs_liens",array('id_almanach'=>$id_almanach,'id_objet'=>$id_evenement,'objet'=>'evenement','vu'=>'oui'));
//on associe l'événement à son mot
sql_insertq("spip_mots_liens",array('id_mot'=>$id_mot,'id_objet'=>$id_evenement,'objet'=>'evenement'));
}
?>

26
genie/synchro.php

@ -0,0 +1,26 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
genie_synchro_dist(){
// récupérer url fichier distant
// parser le fichier distant
// pour chaque événement du fichier distant
// récupération uid_distant
// pour chaque enregistrement déjà présent dans la base
// si uid_distant = uid_local alors
// récupérer sequence_distant
// si sequence_distant != sequence_local alors
// supprimer l événement local et le remplacer par l événement distant
// sinon insérer l événement distant dans la base
}
?>

70
import_ics_administrations.php

@ -0,0 +1,70 @@
<?php
/**
* Fichier gérant l'installation et désinstallation du plugin Import_ics
*
* @plugin Import_ics
* @copyright 2013
* @author Amaury
* @licence GNU/GPL
* @package SPIP\Import_ics\Installation
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Fonction d'installation et de mise à jour du plugin Import_ics.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @param string $version_cible
* Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
* @return void
**/
function import_ics_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(
array('maj_tables',array('spip_almanachs', 'spip_almanachs_liens')),
array('maj_tables',array('spip_evenements')),
array('sql_alter',"TABLE spip_evenements ADD uid text NOT NULL"),
array('sql_alter',"TABLE spip_evenements ADD sequence bigint(21) DEFAULT '0' NOT NULL"),
);
$maj['1.0.1'] = array(
array('maj_tables', array('spip_almanachs')),
);
$maj['1.0.2'] = array(
array('maj_tables', array('spip_almanachs')),
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
* Fonction de désinstallation du plugin Import_ics.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @return void
**/
function import_ics_vider_tables($nom_meta_base_version) {
sql_drop_table("spip_almanachs");
sql_drop_table("spip_almanachs_liens");
sql_alter("TABLE spip_evenements DROP COLUMN uid");
sql_alter("TABLE spip_evenements DROP COLUMN sequence");
# Nettoyer les versionnages et forums
sql_delete("spip_versions", sql_in("objet", array('almanach')));
sql_delete("spip_versions_fragments", sql_in("objet", array('almanach')));
sql_delete("spip_forum", sql_in("objet", array('almanach')));
effacer_meta($nom_meta_base_version);
}
?>

126
import_ics_autorisations.php

@ -0,0 +1,126 @@
<?php
/**
* Définit les autorisations du plugin Import_ics
*
* @plugin Import_ics
* @copyright 2013
* @author Amaury
* @licence GNU/GPL
* @package SPIP\Import_ics\Autorisations
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Fonction d'appel pour le pipeline
* @pipeline autoriser */
function import_ics_autoriser(){}
// -----------------
// Objet almanachs
/**
* Autorisation de voir un élément de menu (almanachs)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_almanachs_menu_dist($faire, $type, $id, $qui, $opt){
return true;
}
/**
* Autorisation de voir le bouton d'accès rapide de création (almanach)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_almanachcreer_menu_dist($faire, $type, $id, $qui, $opt){
return autoriser('creer', 'almanach', '', $qui, $opt);
}
/**
* Autorisation de créer (almanach)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_almanach_creer_dist($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], array('0minirezo', '1comite'));
}
/**
* Autorisation de voir (almanach)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_almanach_voir_dist($faire, $type, $id, $qui, $opt) {
return true;
}
/**
* Autorisation de modifier (almanach)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_almanach_modifier_dist($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], array('0minirezo', '1comite'));
}
/**
* Autorisation de supprimer (almanach)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_almanach_supprimer_dist($faire, $type, $id, $qui, $opt) {
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
}
/**
* Autorisation de lier/délier l'élément (almanachs)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_associeralmanachs_dist($faire, $type, $id, $qui, $opt) {
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
}
?>

52
import_ics_fonctions.php

@ -0,0 +1,52 @@
<?php
//require_once 'lib/iCalcreator.class.php';/*appeler la librairie qui se trouve dans le plugin icalendar*/
function mon_filtre ($url) {
$config = array("unique_id" => "latp",
"url" => $url);
//var_dump($url);
$v = new vcalendar($config);
$v->parse();
while ($comp = $v->getComponent()) {
echo "<div>";
/*date de début*/
$dtstart_array = $comp->getProperty("dtstart", 1, true);
$dtstart = $dtstart_array["value"];
$startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
echo "start: ", $startDate;
if (!in_array("DATE", $dtstart_array["params"])) {
$startTime = "{$dtstart["hour"]}:{$dtstart["min"]}:{$dtstart["sec"]}";
echo "T", $startTime;
}
echo "\n";
/*date de fin*/
$dtend_array = $comp->getProperty("dtend", 1, true);
$dtend = $dtend_array["value"];
$endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
echo "end: ", $endDate;
if (!in_array("DATE", $dtend_array["params"])) {
$endTime = "{$dtend["hour"]}:{$dtend["min"]}:{$dtend["sec"]}";
echo "T", $endTime;
}
echo "\n";
/*attendee*/
$attendee = $comp->getProperty("attendee");
echo "<strong>attendee : ", str_replace('MAILTO:', '', $attendee)."</strong><br/>";
/*summary*/
$summary_array = $comp->getProperty("summary", 1, true);
echo "summary : ", str_replace('SUMMARY:', '', $summary_array["value"]), "\n";
/*categorie*/
$categories = $comp->getProperty("categories");
echo "<strong>categories : ", $categories."</strong><br/>";
echo "</div>";
}
//return $url;
}
?>

33
import_ics_pipelines.php

@ -0,0 +1,33 @@
<?php
/**
* Utilisations de pipelines par Import_ics
*
* @plugin Import_ics
* @copyright 2013
* @author Amaury
* @licence GNU/GPL
* @package SPIP\Import_ics\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Optimiser la base de données en supprimant les liens orphelins
* de l'objet vers quelqu'un et de quelqu'un vers l'objet.
*
* @pipeline optimiser_base_disparus
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function import_ics_optimiser_base_disparus($flux){
include_spip('action/editer_liens');
$flux['data'] += objet_optimiser_liens(array('almanach'=>'*'),'*');
return $flux;
}
function import_ics_taches_generales_cron($taches_generales){
$taches_generales['import_ics_synchro'] = 3600*24;/*mettre à jour toutes les 24 heures parait bien*/
return $taches_generales;
}
?>

80
lang/almanach_fr.php

@ -0,0 +1,80 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'ajouter_lien_almanach' => 'Ajouter cet almanach',
'appliquer_decalage' => 'Appliquer le décalage',
'appliquer_decalage_explication' => 'Voulez-vous applliquer le décalage à tous les événements associés à cet almanach (il est préférable de supprimer l\'ancien décalage puis d\'appliquer le nouveau) ?',
'aucun_evenement' => 'Cet almanach ne contient aucun événement. Si vous le désirez, vous pouvez le supprimer dans la liste des almanachs.
',
//C
'confirmation_appliquer_decalage' => 'Êtes-vous bien certain de vouloir appliquer ce décalage ?',
'confirmation_suppression_evenements' => 'Êtes vous certain(e) de vouloir supprimer les événements de l\'almanach \"@titre_almanach@\" ?',
'confirmation_mise_a_jour_evenements' => 'Voulez-vous réellement mettre à jour la liste des événements de l\'almanach \"@titre_almanach@\" ?\nCela peut prendre un certain temps.',
'choix_salle' => 'Tous les événements se verront attribuer cette salle dans le gestionnaire de ressources.',
// D
'decalage' => 'Décalage',
// E
'explication_id_article' => 'Choisissez un article qui va recevoir les événements importés.',
'explication_titre' => 'Titre de l\'almanach',
'explication_url' => 'URL d\'origine du calendrier',
'explication_resa_auto' => 'On peut réserver automatiquement une salle pour tous les événements d\'un même almanach (modifiable individuellement ensuite).',
// H
'heure' => '@nb@ heure',
'heures' => '@nb@ heures',
// I
'icone_creer_almanach' => 'Créer un almanach',
'icone_modifier_almanach' => 'Modifier cet almanach',
'info_1_almanach' => 'Un almanach',
'info_almanachs_auteur' => 'Les almanachs de cet auteur',
'info_evenement_almanach' => 'Les événements de cet almanach',
'info_aucun_almanach' => 'Aucun almanach',
'info_derniere_synchronisation' => 'La dernière synchronisation de cet almanach a été effectuée le ',
'info_nb_almanachs' => '@nb@ almanachs',
'info_supprimer_almanach' => 'Supprimer',
'info_supprimer_evenements' => 'Supprimer ces événements',
// L
'label_id_article' => 'Article d\'accueil de l\'almanach',
'label_id_mot' => 'Type des événements de cet almanach :',
'label_titre' => 'Titre',
'label_url' => 'URL',
'lien_synchro_almanach' => 'Mettre à jour cet almanach maintenant',
//P
'pas_de_decalage' => 'Pas de décalage.',
'plusieurs_evenements' => '@nb@ événements',
'purger_almanach' => 'Si vous voulez supprimer cet almanach, vous devez tout d\'abord en supprimer le contenu.',
// R
'regenerer_almanach' => 'Vous pouvez aussi restaurer son contenu en tentant une nouvelle synchronisation.',
'resa_auto' => 'Réservation automatique',
'reservation' => 'Choix de la salle à réserver',
'retirer_lien_almanach' => 'Retirer cet almanach',
'retirer_tous_liens_almanachs' => 'Retirer tous les almanachs',
'retour_liste' => 'Retour à la liste',
// T
'texte_ajouter_almanach' => 'Ajouter un almanach',
'texte_changer_statut_almanach' => 'Cet almanach est :',
'texte_creer_associer_almanach' => 'Créer et associer un almanach',
'titre_almanach' => 'Almanach',
'titre_almanachs' => 'Almanachs',
'titre_almanachs_rubrique' => 'Almanachs de la rubrique',
'titre_langue_almanach' => 'Langue de cet almanach',
'titre_logo_almanach' => 'Logo de cet almanach',
'type_evenement' => 'Tous les événements de l\'almanach auront le même type. Vous pourrez modifier cela individuellement.',
//U
'un_evenement' => '@nb@ événement',
);
?>

12
lang/import_ics_fr.php

@ -0,0 +1,12 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// I
'import_ics_titre' => 'Import_ics',
);
?>

14
lang/paquet-import_ics_fr.php

@ -0,0 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// I
'import_ics_description' => 'Importez les événements de sites distants dans votre base de données d\'événements SPIP',
'import_ics_nom' => 'Import_ics',
'import_ics_slogan' => 'Importez vos événements',
);
?>

39
paquet.xml

@ -0,0 +1,39 @@
<paquet
prefix="import_ics"
categorie="date"
version="1.2.4"
etat="test"
compatibilite="[3.0.7;3.1.*]"
logo="prive/themes/spip/images/import_ics-64.png"
documentation="http://contrib.spip.net/Import-ICS"
schema="1.0.2"
>
<!--
Paquet genere le 2013-04-15 14:09:23
-->
<nom>Import_ics</nom>
<auteur>Amaury</auteur>
<licence>GNU/GPL</licence>
<necessite nom="agenda" compatibilite="[3.0.0;]" />
<necessite nom="icalendar" compatibilite="[0.2.1;]" />
<necessite nom="cextras" compatibilite="[3.0.5;[" />
<necessite nom="seminaire" compatibilite="[2.1.10;]" />
<necessite nom="saisies" compatibilite="[1.24.0;]" />
<pipeline nom="autoriser" inclure="import_ics_autorisations.php" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/import_ics.php" />
<pipeline nom="declarer_tables_interfaces" inclure="base/import_ics.php" />
<pipeline nom="declarer_tables_auxiliaires" inclure="base/import_ics.php" />
<pipeline nom="optimiser_base_disparus" inclure="import_ics_pipelines.php" />
<pipeline nom="taches_generales_cron" inclure="import_ics_pipelines.php"/>
<menu nom="almanachs" titre="almanach:titre_almanachs" parent="menu_edition" icone="images/almanach-16.png" action="almanachs" />
<menu nom="almanach_creer" titre="almanach:icone_creer_almanach" parent="outils_rapides" icone="images/almanach-new-16.png" action="almanach_edit" parametres="new=oui" />
</paquet>

96
prive/objets/contenu/almanach.html

@ -0,0 +1,96 @@
<BOUCLE_almanach(ALMANACHS){id_almanach}{statut?}>
[<div class="champ contenu_titre[ (#TITRE*|strlen|?{'',vide})]">
<label><:almanach:label_titre:> : </label>
<span dir='#LANG_DIR' class='#EDIT{titre} titre'>(#TITRE)</span>
</div>]
[<div class="champ contenu_url[ (#URL*|strlen|?{'',vide})]">
<label><strong><:almanach:label_url:> : </strong></label>
<span dir='#LANG_DIR' class='#EDIT{url} url'>(#URL)</span>
</div>]
<div class="champ contenu_id_article[ (#ID_ARTICLE*|strlen|?{'',vide})]">
<label><strong><:almanach:label_id_article:> :</strong> </label>
<span dir='#LANG_DIR' class='#EDIT{id_article} id_article'>
<a href="#INFO_URL_ARTICLE{article,#ID_ARTICLE}">#INFO_TITRE{article,#ID_ARTICLE}&nbsp;(article n°#ID_ARTICLE)</a>
</span>
</div>
<div class="champ contenu_id_mot[ (#ID_MOT*|strlen|?{'',vide})]">
<BOUCLE_mot_lie(MOTS){id_mot=#ID_MOT}>
<label><strong><:almanach:label_id_mot:></strong></label>
<span dir='#LANG_DIR' class='#EDIT{id_mot} id_mot'><a href="#URL_ECRIRE{mot,id_mot=#ID_MOT}">#TITRE (mot n°#ID_MOT)</a> </span>
</BOUCLE_mot_lie>
<div class="champ contenu_decalage[ (#DECALAGE*|strlen|?{'',vide})]">
<label><strong><:almanach:decalage:> : </strong></label>
<span dir='#LANG_DIR' class='#EDIT{decalage} decalage'>[ [(#DECALAGE|>={0}|?{+})](#DECALAGE|singulier_ou_pluriel{almanach:heure,almanach:heures})][(#DECALAGE|=={0}|?{<:almanach:pas_de_decalage:>})]</span>
</div>
<p></p>
</div>
<B_liste_evenements>
#ANCRE_PAGINATION
<div class="liste-objets">
[(#REM) On boucle sur la table de liens pour récupérer l'id de l'objet evenement voulu puis on boucle sur la table evenement pour recuperer les détails de l'événement ]
<table class='spip liste'>
<caption><span class="image_loading"></span><strong class="caption"><:almanach:info_evenement_almanach:></strong></caption>
<thead>
<tr class='first_row'>
<th class='date' scope='col'><:date:></th>
<th class='orateur' scope='col'><:seminaire:attendee:></th>
<th class='titre' scope='col'><:info_titre:></th>
</tr>
</thead>
<tbody>
<BOUCLE_liste_evenements(spip_almanachs_liens evenements){id_almanach=#ID_ALMANACH}{objet=evenement}{pagination 10}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<BOUCLE_details_evenement(EVENEMENTS){id_evenement=#ID_OBJET}>
<td class='date secondaire'>[(#DATE_DEBUT|agenda_affdate_debut_fin{#DATE_FIN,#HORAIRE,'hcal'})]</td>
<td class="orateur">#ATTENDEE</td>
<td class='titre principale'>
#SET{attendee,#ATTENDEE}[(#REM) on met attendee dans une variable pour pouvoir l'éliminer dans le titre si jamais il est présent ainsi que les espaces et le tiret suivant]
[<a href="#URL_ECRIRE{evenement,id_evenement=#ID_EVENEMENT}">(#TITRE|replace{#GET{attendee}\h-\h})</a>]<br/>
[<strong><:seminaire:lieu:> : </strong>(#LIEU)]
</td>
</BOUCLE_details_evenement>
</tr>
</BOUCLE_liste_evenements>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{prive})</p>]
</div>
</B_liste_evenements>
<p><:almanach:aucun_evenement:></p>
[(#BOUTON_ACTION{<:almanach:retour_liste:>,#URL_ECRIRE{almanachs}})]
<p><:almanach:regenerer_almanach:></p>
<//B_liste_evenements>
[(#MAJ|oui)
<div class='maj'><:almanach:info_derniere_synchronisation:>[ (#MAJ|affdate_heure)]</div>
]
<div class='synchro_almanach'>
[(#BOUTON_ACTION{<:almanach:lien_synchro_almanach:>,#URL_ACTION_AUTEUR{synchro_almanach,#ID_ALMANACH,#SELF},ajax,<:almanach:confirmation_mise_a_jour_evenements{titre_almanach=#TITRE}:>,})]
</div>
<div class="appliquer_decalage"><:almanach:appliquer_decalage_explication:>
[(#BOUTON_ACTION{<:almanach:appliquer_decalage:>,#URL_ACTION_AUTEUR{appliquer_decalage,#ID_ALMANACH,#SELF},ajax,<:almanach:confirmation_appliquer_decalage{titre_almanach=#TITRE}:>,})]
</div>
<div class='purger_almanach'>
<BOUCLE_nb_evenement(spip_almanachs_liens){id_almanach=#ID_ALMANACH}{objet=evenement}>
</BOUCLE_nb_evenement>
<div class='purge'><:almanach:purger_almanach:></div>
[(#AUTORISER{supprimer, almanach, #ID_ALMANACH}|oui)
[(#BOUTON_ACTION{<:almanach:info_supprimer_evenements:>,#URL_ACTION_AUTEUR{supprimer_evenements_almanach,#ID_ALMANACH,#SELF},ajax,<:almanach:confirmation_suppression_evenements{titre_almanach=#TITRE}:>,'','(function(me){$(me).parents("tr").animateRemove();return true;})(this)'})]
]
</B_nb_evenement>
</div>
</BOUCLE_almanach>

55
prive/objets/liste/almanachs.html

@ -0,0 +1,55 @@
[(#SET{defaut_tri,#ARRAY{
titre,1,
date,-1,
id_almanach,1,
points,-1
}})]<B_liste_almanachs>
#ANCRE_PAGINATION
<div class="liste-objets almanachs">
<table class='spip liste'>
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{almanach:info_1_almanach,almanach:info_nb_almanachs}})</strong></caption>]
<thead>
<tr class='first_row'>
<th class='picto' scope='col'></th>
<th class='statut' scope='col'>[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th>
<th class='titre' scope='col'>[(#TRI{titre,<:almanach:label_titre:>,ajax})]</th>
<th class='utilisations' scope='col'></th>
<th class='action' scope='col'></th>
<th class='date' scope='col'>[(#TRI{date,<:date:>,ajax})]</th>
<th class='id' scope='col'>[(#TRI{id_almanach,<:info_numero_abbreviation:>,ajax})]</th>
</tr>