
commit
318cda7a68
42 changed files with 1541 additions and 0 deletions
@ -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 |
@ -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]; |
||||
|
||||
} |
||||
|
||||
?> |
@ -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'"); |
||||
} |
||||
?> |
@ -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); |
||||
} |
||||
?> |
@ -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]; |
||||
|
||||
} |
||||
|
||||
?> |
@ -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; |
||||
} |
||||
|
||||
|
||||
?> |
@ -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
|
@ -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> |
@ -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; |
||||
} |
||||
|
||||
|
||||
?> |
@ -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> |
@ -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')); |
||||
} |
||||
|
||||
?> |
@ -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 |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
?> |
@ -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); |
||||
} |
||||
|
||||
?> |
@ -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']; |
||||
} |
||||
|
||||
|
||||
?> |
@ -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; |
||||
} |
||||
|
||||
|
||||
?> |
@ -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; |
||||
} |
||||
?> |
@ -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', |
||||
); |
||||
|
||||
?> |
@ -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', |
||||
); |
||||
|
||||
?> |
@ -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> |
@ -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} (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> |
@ -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> |
||||