Browse Source

Des branches bien rangées.

1_9_1
marcimat@rezo.net 4 years ago
commit
4a566e4d21
  1. 36
      .gitattributes
  2. 82
      agenda.php
  3. 52
      agenda_jour.html
  4. 49
      agenda_mes_fonctions.php
  5. 87
      agenda_mes_options.php
  6. 7
      agenda_mois.html
  7. 8
      agenda_periode.html
  8. 7
      agenda_semaine.html
  9. 113
      balise/calendrier_mini.php
  10. 87
      balise/formulaire_edition_evenement.php
  11. 107
      base/agenda_evenements.php
  12. 173
      demo_calendrier_mini.html
  13. 451
      exec/agenda_evenements.php
  14. 231
      exec/mots_tous.php
  15. 251
      exec/mots_type.php
  16. 35
      formulaires/calendrier_mini.html
  17. 115
      formulaires/formulaire_edition_evenement.html
  18. 20
      ical-agenda.html
  19. BIN
      img_pack/agenda-12.png
  20. BIN
      img_pack/agenda-24.png
  21. BIN
      img_pack/agenda-48.png
  22. 262
      img_pack/agenda.css
  23. 84
      img_pack/agenda_articles.css
  24. 511
      img_pack/calendrier.css
  25. BIN
      img_pack/croix.png
  26. 115
      img_pack/multiselect.js
  27. BIN
      img_pack/sans-heure.gif
  28. 1424
      inc/agenda.php.sav
  29. 204
      inc/agenda_filtres.php
  30. 752
      inc/agenda_gestion.php
  31. 40
      lang/agenda_en.php
  32. 40
      lang/agenda_es.php
  33. 40
      lang/agenda_fr.php
  34. 40
      lang/agenda_nl.php
  35. 58
      plugin.xml
  36. 118
      public/criteres_agenda.php

36
.gitattributes

@ -0,0 +1,36 @@
* text=auto !eol
/agenda.php -text
/agenda_jour.html -text
/agenda_mes_fonctions.php -text
/agenda_mes_options.php -text
/agenda_mois.html -text
/agenda_periode.html -text
/agenda_semaine.html -text
balise/calendrier_mini.php -text
balise/formulaire_edition_evenement.php -text
base/agenda_evenements.php -text
/demo_calendrier_mini.html -text
exec/agenda_evenements.php -text
exec/mots_tous.php -text
exec/mots_type.php -text
formulaires/calendrier_mini.html -text
formulaires/formulaire_edition_evenement.html -text
/ical-agenda.html -text
img_pack/agenda-12.png -text
img_pack/agenda-24.png -text
img_pack/agenda-48.png -text
img_pack/agenda.css -text
img_pack/agenda_articles.css -text
img_pack/calendrier.css -text
img_pack/croix.png -text
img_pack/multiselect.js -text
img_pack/sans-heure.gif -text
inc/agenda.php.sav -text
inc/agenda_filtres.php -text
inc/agenda_gestion.php -text
lang/agenda_en.php -text
lang/agenda_es.php -text
lang/agenda_fr.php -text
lang/agenda_nl.php -text
/plugin.xml -text
public/criteres_agenda.php -text

82
agenda.php

@ -0,0 +1,82 @@
<?php
function Agenda_ajouter_onglets($flux) {
if($flux['args']=='calendrier')
{
$flux['data']['evenements']= new Bouton(
'../'._DIR_PLUGIN_AGENDA.'/img_pack/agenda-24.png', _T('agenda:evenements'),
generer_url_ecrire("calendrier","type=semaine"));
$flux['data']['editorial']= new Bouton(
'cal-rv.png', _T('agenda:activite_editoriale'),
generer_url_ecrire("calendrier","mode=editorial&type=semaine"));
}
return $flux;
}
function Agenda_header_prive($flux) {
$exec = _request('exec');
// les CSS
if ($exec == 'calendrier'){
$flux .= '<link rel="stylesheet" href="' ._DIR_PLUGIN_AGENDA . '/img_pack/calendrier.css" type="text/css" />'. "\n";
$flux .= '<link rel="stylesheet" href="' ._DIR_PLUGIN_AGENDA . '/img_pack/agenda.css" type="text/css" />'. "\n";
}
if ($exec == 'articles'){
$flux .= '<link rel="stylesheet" href="' ._DIR_PLUGIN_AGENDA . '/img_pack/agenda_articles.css" type="text/css" />'. "\n";
}
return $flux;
}
function Agenda_exec_init($flux) {
$exec = $flux['args']['exec'];
if (($exec == 'calendrier')||($exec=='articles')){
include_spip('inc/calendar');
// Reserver les widgets agenda
WCalendar_ajoute_lies(_T('agenda:evenement_date_debut'),'_evenement_debut',_T('agenda:evenement_date_fin'),'_evenement_fin');
WCalendar_ajoute_statique(_T('agenda:evenement_repetitions'),'_repetitions');
}
return $flux;
}
function Agenda_affiche_milieu($flux) {
$exec = $flux['args']['exec'];
if ($exec=='articles'){
include_spip('inc/calendar');
include_spip('inc/agenda_gestion');
$id_article = $flux['args']['id_article'];
$flux['data'] .= Agenda_formulaire_article($id_article, article_editable($id_article));
}
return $flux;
}
function Agenda_rendu_boite($titre,$descriptif,$lieu,$type='ics'){
$texte = "<span class='calendrier-verdana10'><span style='font-weight: bold;'>";
$texte .= wordwrap($sum=typo($titre),15)."</span>";
$texte .= "<span class='survol'>";
$texte .= "<strong>$sum</strong><br />";
$texte .= $lieu ? propre($lieu).'<br />':'';
$texte .= propre($descriptif);
$texte .= "</span>";
if ($type=='ics'){
$texte .= (strlen($lieu.$descriptif)?"<hr/>":"").$lieu.(strlen($lieu)?"<br/>":"");
$texte .= $descriptif;
}
$texte .= "</span>";
return $texte;
}
function Agenda_rendu_evenement($flux) {
global $couleur_claire;
$evenement = $flux['args']['evenement'];
$url = $evenement['URL'];
$texte = Agenda_rendu_boite($evenement['SUMMARY'],$evenement['DESCRIPTION'],$evenement['LOCATION'],$flux['args']['type']);
$texte = http_href(quote_amp($url), $texte, '', '', '', '');
$flux['data'] = $texte;
return $flux;
}
?>

52
agenda_jour.html

@ -0,0 +1,52 @@
<BOUCLE_jour(EVENEMENTS)
{agendafull date_debut, date_fin, jour, #ENV{annee}, #ENV{mois}, #ENV{jour}}
>[(#DATE_DEBUT|Agenda_memo_full{#DATE_FIN,#TITRE,#DESCRIPTIF,#LIEU,#URL_ARTICLE,
calendrier-couleur[(#ENV{theme,0}|modulo{14,1})]})]</BOUCLE_jour>[(#DATE|Agenda_affiche_full{<:aucun_article:>, 'jour',
calendrier-couleur[(#ENV{theme,0}|modulo{14,1})]})][(#TOTAL_BOUCLE|?{' ',''})
<div style='position: fixed; top:50px; left: 20px'>
<table style='width: 10px'><tr>
<td class='calendrier-couleur1'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,0})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur2'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,1})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur3'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,2})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur4'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,3})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur5'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,4})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur6'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,5})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur7'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,6})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur8'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,7})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur9'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,8})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur10'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,9})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur11'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,10})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur12'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,11})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur13'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,12})]'>&nbsp;&nbsp;</a></td></tr>
<tr><td class='calendrier-couleur14'
><a style='text-decoration: none;'
href='[(#SELF|parametre_url{theme,13})]'>&nbsp;&nbsp;</a></td></tr>
</table>
</div>
]<//B_jour>

49
agenda_mes_fonctions.php

@ -0,0 +1,49 @@
<?php
//include_spip('inc/agenda_filtres'); // declaration directe dans le xml pour eviter un find_in_path
include_spip('public/criteres_agenda');
include_spip('inc/agenda_filtres');
function Agenda_heure_selector($date,$suffixe){
$d = strtotime($date);
$heure = date('H',$d);
$minute = date('i',$d);
return
afficher_heure($heure, "name='heure_evenement$suffixe' size='1' class='fondl'") .
afficher_minute($minute, "name='minute_evenement$suffixe' size='1' class='fondl'");
}
//
// <BOUCLE(EVENEMENTS)>
//
function boucle_EVENEMENTS_dist($id_boucle, &$boucles) {
$boucle = &$boucles[$id_boucle];
$id_table = $boucle->id_table;
$boucle->from[$id_table] = "spip_evenements";
// Restreindre aux elements publies
/* Modif Patrice : Commit SPIP 8062
$boucle->statut devient deprecie et est remplacé par
$boucle->modificateur['criteres']['statut']
Il vous faut donc mettre a jour le code des boucles qui utilisent ce critere
Pour avoir une compatibilité trans version il faut ecrire le test sous la forme :
if ($boucle->statut OR $boucle->modificateur['criteres']['statut'])
*/
$temp_statut = $boucle->statut OR $boucle->modificateur['criteres']['statut'];
if (!$temp_statut) {
// Si pas de lien avec un article, selectionner
// uniquement les auteurs d'un article publie
if (!$GLOBALS['var_preview'])
if (!isset($boucle->modificateur['lien']) AND !isset($boucle->modificateur['tout'])
AND (!isset($boucle->lien) OR !$boucle->lien) AND (!isset($boucle->tout) OR !$boucle->tout)) {
$boucle->from["articles"] = "spip_articles";
$boucle->where[]= array("'='", "'articles.id_article'", "'$id_table.id_article'");
$boucle->where[]= array("'='", "'articles.statut'", "'\"publie\"'");
$boucle->group[] = $boucle->id_table . '.' . $boucle->primary;
}
}
return calculer_boucle($id_boucle, $boucles);
}
?>

87
agenda_mes_options.php

@ -0,0 +1,87 @@
<?php
$p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__FILE__))));
define('_DIR_PLUGIN_AGENDA',(_DIR_PLUGINS.end($p)));
include_spip('base/agenda_evenements');
if (isset($_REQUEST['partie_cal'])
AND $_REQUEST['partie_cal'] !== htmlentities($_REQUEST['partie_cal']))
die("No thanks");
if (isset($_REQUEST['echelle'])
AND $_REQUEST['echelle'] !== htmlentities($_REQUEST['echelle']))
die("No thanks");
function cron_agenda_nettoyer_base($t){
# les evenements lies a un article inexistant
$res = spip_query("SELECT evenements.id_evenement,evenements.id_article
FROM spip_evenements AS evenements
LEFT JOIN spip_articles AS articles
ON evenements.id_article=articles.id_article
WHERE articles.id_article IS NULL");
while ($row = spip_fetch_array($res,SPIP_ASSOC))
spip_query("DELETE FROM spip_evenements
WHERE id_evenement=".$row['id_evenement']
." AND id_article=".$row['id_article']);
# les liens de mots affectes a des evenements effaces
$res = spip_query("SELECT mots_evenements.id_mot,mots_evenements.id_evenement
FROM spip_mots_evenements AS mots_evenements
LEFT JOIN spip_evenements AS evenements
ON mots_evenements.id_evenement=evenements.id_evenement
WHERE evenements.id_evenement IS NULL");
while ($row = spip_fetch_array($res,SPIP_ASSOC))
spip_query("DELETE FROM spip_mots_evenements
WHERE id_mot=".$row['id_mot']
." AND id_evenement=".$row['id_evenement']);
return 1;
}
function Agenda_taches_generales_cron($taches_generales){
$taches_generales['agenda_nettoyer_base'] = 3600*48;
return $taches_generales;
}
function exec_calendrier()
{
$mode = _request('mode');
if ($mode=='editorial'){
include_spip('exec/calendrier');
global $type, $css;
// icones standards, fonction de la direction de la langue
global $bleu, $vert, $jaune, $spip_lang_rtl;
$bleu = http_img_pack("m_envoi_bleu$spip_lang_rtl.gif", 'B', "class='calendrier-icone'");
$vert = http_img_pack("m_envoi$spip_lang_rtl.gif", 'V', "class='calendrier-icone'");
$jaune= http_img_pack("m_envoi_jaune$spip_lang_rtl.gif", 'J', "class='calendrier-icone'");
$date = date("Y-m-d", time());
if ($type == 'semaine') {
$GLOBALS['afficher_bandeau_calendrier_semaine'] = true;
$titre = _T('titre_page_calendrier',
array('nom_mois' => nom_mois($date), 'annee' => annee($date)));
}
elseif ($type == 'jour') {
$titre = nom_jour($date)." ". affdate_jourcourt($date);
}
else {
$titre = _T('titre_page_calendrier',
array('nom_mois' => nom_mois($date), 'annee' => annee($date)));
}
debut_page($titre, "redacteurs", "calendrier","",$css);
barre_onglets("calendrier", "editorial");
echo "<div>&nbsp;</div>" ;
echo http_calendrier_init('', $type, '','',generer_url_ecrire('calendrier', 'mode=editorial'.($type ? "&type=$type" : '')));
fin_page();
}
else{
$var_f = charger_fonction('agenda_evenements');
$var_f();
}
}
?>

7
agenda_mois.html

@ -0,0 +1,7 @@
<BOUCLE_mois(EVENEMENTS)
{agendafull date_debut,date_fin, mois, #ENV{annee}, #ENV{mois}}
>[(#DATE_DEBUT|Agenda_memo_full{#DATE_FIN,#TITRE,#DESCRIPTIF,#LIEU,#URL_ARTICLE,
calendrier-couleur[(#ID_SECTEUR|
modulo{14,1})]})]</BOUCLE_mois>[(#DATE|
Agenda_affiche_full{<:aucun_article:>, 'mois'}
)]<//B_mois>

8
agenda_periode.html

@ -0,0 +1,8 @@
<BOUCLE_periode(EVENEMENTS)
{agendafull date_debut, date_fin, periode,
#ENV{annee}, #ENV{mois}, #ENV{jour},
#ENV{annee_fin}, #ENV{mois_fin}, #ENV{jour_fin}}>[
(#DATE_DEBUT|Agenda_memo_full{#DATE_FIN,#TITRE,#DESCRIPTIF,#LIEU,#URL_ARTICLE, 'calendrier-couleur6'})
]</BOUCLE_periode>[(#DATE|
Agenda_affiche_full{<:aucun_article:>, 'periode', 'calendrier-couleur6'}
)]<//B_periode>

7
agenda_semaine.html

@ -0,0 +1,7 @@
<BOUCLE_semaine(EVENEMENTS)
{agendafull date_debut, date_fin, semaine, #ENV{annee}, #ENV{mois}, #ENV{jour}}
>[(#DATE_DEBUT|Agenda_memo_full{#DATE_FIN,#TITRE,#DESCRIPTIF,#LIEU,#URL_ARTICLE,
[(#COMPTEUR_BOUCLE|
alterner{'calendrier-couleur2', 'calendrier-couleur4'})]})]</BOUCLE_semaine>[(#DATE|
Agenda_affiche_full{<:aucun_article:>, 'semaine', 'calendrier-couleur2','calendrier-couleur4'}
)]<//B_semaine>

113
balise/calendrier_mini.php

@ -0,0 +1,113 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return; #securite
// Pas besoin de contexte de compilation
global $balise_CALENDRIER_MINI_collecte;
$balise_CALENDRIER_MINI_collecte = array('id_rubrique','id_article','id_mot');
function balise_CALENDRIER_MINI ($p) {
return calculer_balise_dynamique($p,'CALENDRIER_MINI', array('id_rubrique','id_article', 'id_mot'));
}
function balise_CALENDRIER_MINI_stat($args, $filtres) {
return $args;
}
function balise_CALENDRIER_MINI_dyn($id_rubrique=0, $id_article = 0, $id_mot = 0,$date, $var_date = 'date', $url = '') {
if(!$url)
$url = self();
// nettoyer l'url qui est passee par htmlentities pour raison de securités
$url = str_replace("&amp;","&",$url);
return array('formulaires/calendrier_mini', 0,
array(
'date' => $date,
'id_rubrique' => $id_rubrique,
'id_article' => $id_article,
'id_mot' => $id_mot,
'var_date' => $var_date,
'self' => $url,
));
}
function agenda_mini($i) {
$args = func_get_args();
$une_date = array_shift($args); // une date comme balise
$sinon = array_shift($args);
if (!$une_date) return $sinon;
$type = 'mini';
$agenda = Agenda_memo_full(0);
$evt = array();
foreach (($args ? $args : array_keys($agenda)) as $k) {
if (is_array($agenda[$k]))
foreach($agenda[$k] as $d => $v) {
$evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v;
}
}
$la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date));
include_spip('inc/agenda');
return http_calendrier_init($la_date, $type, '', '', '', array('', $evt));
}
function http_calendrier_mini($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) {
list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;
if ($sansduree)
foreach($sansduree as $d => $r) {
$evenements[$d] = !$evenements[$d] ? $r :
array_merge($evenements[$d], $r);
}
if (!$premier_jour) $premier_jour = '01';
if (!$dernier_jour) {
$dernier_jour = 31;
while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--;
}
// affichage du debut de semaine hors periode
$ligne = '';
$debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee));
for ($i=$debut ? $debut : 7;$i>1;$i--) {
$mois_precedent = mktime(1,1,1,$mois-1,1,$annee);
$jour_mois_precedent = date('t', $mois_precedent)+2-$i;
$ligne .= "\n\t<td class=\"horsperiode\">$jour_mois_precedent</td>";
}
$total = '';
for ($j=$premier_jour; $j<=$dernier_jour; $j++) {
$nom = mktime(1,1,1,$mois,$j,$annee);
$jour = date("d",$nom);
$jour_semaine = date("w",$nom);
$mois_en_cours = date("m",$nom);
$annee_en_cours = date("Y",$nom);
$amj = date("Y",$nom) . $mois_en_cours . $jour;
if ($jour_semaine==1) {
$total .= "\n<tr>$ligne\n</tr>";
$ligne = '';
}
$evts = $evenements[$amj];
$class="";
if ($evts) {
$evts = "<a href='".parametre_url($evts[0]['URL'],'date',"$annee_en_cours-$mois_en_cours-$jour")."' title='".$evts[0]['SUMMARY'].
"'>".intval($jour)."</a>";
$class='occupe';
}
else {
$evts = intval($jour);
$class='libre';
}
$ligne .= "\n\t<td class='$class".($amj == date("Ymd")?' today':'')."'>" . $evts . "\n\t</td>";
}
$jour_mois_suivant=1;
// affichage de la fin de semaine hors periode
for($j=$jour_semaine ? $jour_semaine : 7; $j<7; $j++) {
$ligne .= "\n\t<td class=\"horsperiode\">".$jour_mois_suivant++."</td>";
}
return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : '');
}
?>

87
balise/formulaire_edition_evenement.php

@ -0,0 +1,87 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return; #securite
// Pas besoin de contexte de compilation
global $balise_FORMULAIRE_EDITION_EVENEMENT_collecte;
$balise_FORMULAIRE_EDITION_EVENEMENT_collecte = array('id_evenement','id_article');
function balise_FORMULAIRE_EDITION_EVENEMENT ($p) {
return calculer_balise_dynamique($p,'FORMULAIRE_EDITION_EVENEMENT', array('id_evenement', 'id_article'));
}
function balise_FORMULAIRE_EDITION_EVENEMENT_stat($args, $filtres) {
return $args;
}
function balise_FORMULAIRE_EDITION_EVENEMENT_dyn($id_evenement = 0, $id_article = 0) {
$url = parametre_url(self(),'ajout_evenement','');
// nettoyer l'url qui est passee par htmlentities pour raison de securités
$url = str_replace("&amp;","&",$url);
if ($retour=='') $retour = $url;
$res = spip_query("SELECT * FROM spip_articles WHERE id_article=".spip_abstract_quote($id_article));
if (!spip_num_rows($res)) return;
$flag_modif = (_request('evenement_modif') && _request('id_evenement') == $id_evenement);
$flag_ajout = _request('evenement_insert');
$flag_supp = _request('supp_evenement')!==NULL;
if ($flag_supp) {
$_GET['supp_evenement']=$id_evenement;
$_GET['id_article']=$id_article;
}
if ($flag_ajout || $flag_modif || $flag_supp){
include_spip("inc/agenda_gestion");
Agenda_action_formulaire_article($id_article);
}
$evenement_action='evenement_insert';
$valeurs=array('mots'=>array(),'dates'=>array(),'evenement_horaire'=>'oui');
$formulaire_actif = _request('ajout_evenement')!=NULL;
// les champs
$res = spip_query("SELECT * FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement)." AND id_article=".spip_abstract_quote($id_article));
if ($row = spip_fetch_array($res,SPIP_ASSOC)){
$evenement_action='evenement_modif';
foreach($row as $k=>$val){
$valeurs["evenement_$k"]=$val;
}
// les mots
$res = spip_query("SELECT * FROM spip_mots_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement));
while ($row=spip_fetch_array($res)){
$valeurs['mots'][]=$row['id_mot'];
}
$res = spip_query("SELECT date_debut FROM spip_evenements WHERE id_evenement_source=".spip_abstract_quote($id_evenement));
while ($row=spip_fetch_array($res)){
$valeurs['repetitions'][] = date('m/d/Y',strtotime($row['date_debut']));
}
$formulaire_actif = true;
}
$t=time();
$valeurs["date_evenement_debut"]=isset($valeurs["evenement_date_debut"])?$valeurs["evenement_date_debut"]:date('Y-m-d H:i:00',$t);
$valeurs["date_evenement_fin"]=isset($valeurs["evenement_date_fin"])?$valeurs["evenement_date_fin"]:date('Y-m-d H:i:00',$t+3600);
if (!$formulaire_actif) return;
return array('formulaires/formulaire_edition_evenement', 0,
array(
#'erreur_message'=>isset($erreur['@'])?$erreur['@']:'',
#'erreur'=>serialize($erreur),
#'reponse'=>filtrer_entites($reponse),
'id_article' => $id_article,
'id_evenement' => $id_evenement,
'evenement_action' => $evenement_action,
'self' => $url,
'valeurs' => serialize($valeurs),
'url_validation' => str_replace("&amp;","&",$url_validation),
#'affiche_sondage' => $affiche_sondage,
#'formok' => filtrer_entites($formok),
#'formactif' => $formactif,
));
}
?>

107
base/agenda_evenements.php

@ -0,0 +1,107 @@
<?php
// -----------------------------------------------------------------------------
// Declaration des tables evenements
// creation 11/03/2006 pour SPIP 1.9
include_spip('base/serial'); // pour eviter une reinit posterieure des tables modifiees
global $tables_principales;
global $tables_auxiliaires;
//-- Table EVENEMENTS ------------------------------------------
$evenements = array(
"id_evenement" => "bigint(21) NOT NULL",
"id_article" => "bigint(21) DEFAULT '0' NOT NULL",
"date_debut" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
"date_fin" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
"titre" => "text NOT NULL",
"descriptif" => "text NOT NULL",
"lieu" => "text NOT NULL",
"horaire" => "ENUM('oui','non') DEFAULT 'oui' NOT NULL",
"id_evenement_source" => "bigint(21) NOT NULL",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"maj" => "TIMESTAMP"
);
$evenements_key = array(
"PRIMARY KEY" => "id_evenement",
"KEY date_debut" => "date_debut",
"KEY date_fin" => "date_fin",
"KEY id_article" => "id_article"
);
$tables_principales['spip_evenements'] =
array('field' => &$evenements, 'key' => &$evenements_key);
//-- Table de relations MOTS_EVENEMENTS----------------------
$spip_mots_evenements = array(
"id_mot" => "BIGINT (21) DEFAULT '0' NOT NULL",
"id_evenement" => "BIGINT (21) DEFAULT '0' NOT NULL");
$spip_mots_evenements_key = array(
"PRIMARY KEY" => "id_mot, id_evenement",
"KEY id_evenement" => "id_evenement");
$tables_auxiliaires['spip_mots_evenements'] = array(
'field' => &$spip_mots_evenements,
'key' => &$spip_mots_evenements_key);
//-- Jointures ----------------------------------------------------
global $tables_jointures;
$tables_jointures['spip_evenements'][]= 'mots'; // a placer avant la jointure sur articles
$tables_jointures['spip_articles'][]= 'evenements';
$tables_jointures['spip_evenements'][] = 'articles';
$tables_jointures['spip_mots'][]= 'mots_evenements';
$tables_jointures['spip_evenements'][] = 'mots_evenements';
global $exceptions_des_tables;
$exceptions_des_tables['evenements']['id_rubrique']=array('spip_articles', 'id_rubrique');
global $table_primary;
$table_primary['evenements']="id_evenement";
global $table_date;
$table_date['evenements'] = 'date_debut';
// si on declare les tables dans $table_des_tables, il faut mettre le prefixe
// 'spip_' dans l'index de $tables_principales
global $table_des_tables;
$table_des_tables['evenements']='evenements';
$table_des_tables['mots_evenements']='mots_evenements';
// Extension de la table des groupes de mots cles
$spip_groupes_mots = array(
"id_groupe" => "bigint(21) NOT NULL",
"titre" => "text NOT NULL",
"descriptif" => "text NOT NULL",
"texte" => "longblob NOT NULL",
"unseul" => "varchar(3) NOT NULL",
"obligatoire" => "varchar(3) NOT NULL",
"articles" => "varchar(3) NOT NULL",
"breves" => "varchar(3) NOT NULL",
"rubriques" => "varchar(3) NOT NULL",
"syndic" => "varchar(3) NOT NULL");
if (isset($GLOBALS['meta']['agenda_base_version']))
$spip_groupes_mots = array_merge($spip_groupes_mots,array("evenements" => "varchar(3) NOT NULL"));
if (isset($GLOBALS['meta']['pim_agenda_base_version']))
$spip_groupes_mots = array_merge($spip_groupes_mots,array("pim_agenda" => "varchar(3) NOT NULL"));
$spip_groupes_mots = array_merge($spip_groupes_mots,array(
"minirezo" => "varchar(3) NOT NULL",
"comite" => "varchar(3) NOT NULL",
"forum" => "varchar(3) NOT NULL",
"maj" => "TIMESTAMP"));
$spip_groupes_mots_key = array(
"PRIMARY KEY" => "id_groupe");
$tables_principales['spip_groupes_mots'] =
array('field' => &$spip_groupes_mots, 'key' => &$spip_groupes_mots_key);
global $table_des_traitements;
$table_des_traitements['LIEU'][]= 'propre(%s)';
?>

173
demo_calendrier_mini.html

@ -0,0 +1,173 @@
#CACHE{86400}
<BOUCLE_article_principal(ARTICLES) {id_article}><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="#LANG_DIR" lang="#LANG">
<head>
<title>[(#TITRE|textebrut)][ - (#NOM_SITE_SPIP|textebrut)]</title>
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET" />
[<meta name="description" content="(#INTRODUCTION|couper{150}|attribut_html)" />]
<meta name="generator" content="SPIP" />
[<link rel="shortcut icon" href="(#CHEMIN{favicon.ico})" />]
<!-- Lien vers le backend pour navigateurs eclaires -->
<link rel="alternate" type="application/rss+xml" title="<:syndiquer_site:>" href="#URL_PAGE{backend}" />
<!-- Ceci est la feuille de style par defaut pour le code genere par SPIP -->
<link rel="stylesheet" href="[(#CHEMIN{spip_style.css}|direction_css)]" type="text/css" media="all" />
<!-- Feuille de styles CSS pour l'affichage du site sur ecran -->
<link rel="stylesheet" href="[(#CHEMIN{habillage.css}|direction_css)]" type="text/css" media="projection, screen, tv" />
<!-- Feuille de styles CSS pour l'impression -->
<link rel="stylesheet" href="[(#CHEMIN{impression.css}|direction_css)]" type="text/css" media="print" />
</head>
<body class="page_article">
<div id="page">
[(#REM) Entete de la page + titre du site ]
<INCLURE{fond=inc-entete}{lang}>
[(#REM) Fil d'Ariane ]
<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><BOUCLE_ariane(HIERARCHIE){id_article}> &gt; <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a></BOUCLE_ariane>[ &gt; (#TITRE|couper{80})]</div>
<div id="conteneur">
[(#REM) Contenu principal : contenu de l'article ]
<div id="contenu">
<style type='text/css'>
td.occupe a {font-weight:bold;text-decoration:underline;}
td.horsperiode {color:#878787;font-size:.9em;}
</style>
[(#REM) mini calendrier :
1er arg la date,
2eme le nom de la variable date (optionel : 'date' par defaut)
3eme l'url sur laquelle boucler (optionel : url courante par defaut) ]
#CALENDRIER_MINI{#ENV{date},'date',#SELF}
<div class="cartouche">
#DEBUT_SURLIGNE
[(#LOGO_ARTICLE||image_reduire{200,200})]
[<p class="surtitre">(#SURTITRE)</p>]
<h1 class="titre">#TITRE</h1>
[<p class="soustitre">(#SOUSTITRE)</p>]
#FIN_SURLIGNE
<p><small>[(#DATE|nom_jour) ][(#DATE|affdate)][, <:par_auteur:> (#LESAUTEURS)]</small></p>
[(#REM) Traductions de l'article ]
<B_traductions>
<div class="traductions">
<p><:trad_article_traduction:></p>
<ul>
<li[ class="(#EXPOSE)"]>[(#LANG|traduire_nom_langue)]</li>
<BOUCLE_traductions(ARTICLES){traduction}{exclus}>
<li><a[ href="(#URL_ARTICLE|url_absolue)"] rel="alternate" hreflang="#LANG"[ title="(#TITRE|couper{80}|texte_backend)"]><span lang="#LANG" xml:lang="#LANG" dir="#LANG_DIR">[(#LANG|traduire_nom_langue)]</span></a></li>
</BOUCLE_traductions>
</ul>
</div>
</B_traductions>
</div>
#DEBUT_SURLIGNE
[<div class="chapo">(#CHAPO)</div>]
<br class="nettoyeur" />
[<p class="lien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
[<div class="texte">(#TEXTE|image_reduire{520,0})</div>]
#FIN_SURLIGNE
[(#REM) Portfolio : album d'images ]
<B_documents_portfolio>
<div id="documents_portfolio">
<h2><:info_portfolio:></h2>
<BOUCLE_documents_portfolio(DOCUMENTS) {id_article}
{mode=document} {extension IN png,jpg,gif} {par date}
{doublons}>
[<a href="#URL_DOCUMENT" type="#MIME_TYPE"
onclick="this.href='[(#URL_ARTICLE|parametre_url{id_document,#ID_DOCUMENT})]#documents_portfolio';return true;"[title="(#TITRE|couper{80}|texte_backend)"]>(#LOGO_DOCUMENT||image_reduire{0,60}|inserer_attribut{alt,[(#TITRE|couper{80}|texte_backend)]})</a>]
</BOUCLE_documents_portfolio>
</div>
</B_documents_portfolio>
<BOUCLE_afficher_document(DOCUMENTS) {id_document}
{mode=document}{extension IN png,jpg,gif}>
<div class="spip_documents spip_documents_center" id="document_actif">
#EMBED_DOCUMENT
[<div class="spip_doc_titre">(#TITRE)</div>]
[<div class="spip_doc_descriptif">(#DESCRIPTIF)</div>]
</div>
</BOUCLE_afficher_document>
[<div class="ps"><h2><:info_ps:></h2>#DEBUT_SURLIGNE(#PS)#FIN_SURLIGNE</div>]
[(#REM) Autres documents joints a l'article ]
<B_documents_joints>
<div id="documents_joints">
<h2><:titre_documents_joints:></h2>
<ul>
<BOUCLE_documents_joints(DOCUMENTS) {id_article} {mode=document} {par date} {doublons}>
<li>
<div class="spip_doc_titre"><a href="#URL_DOCUMENT" title="<:bouton_telecharger:>" type="#MIME_TYPE">[(#TITRE|sinon{<:info_document:>})]</a> <small>(#TYPE_DOCUMENT[ - (#TAILLE|taille_en_octets)])</small></div>
[<div class="spip_doc_descriptif">(#DESCRIPTIF)</div>]</li>
<br class="nettoyeur" />
</BOUCLE_documents_joints>
</ul>
</div>
</B_documents_joints>
[(#REM) Petition :
La petition ayant une PAGINATION il faut absolument lui passer SELF]
[ #REM Conserver cet invalideur invisible : (#PETITION|?{'',''}) ]
<INCLURE{fond=inc-petition}{id_article}{self=#SELF}>
[<div class="notes"><h2><:info_notes:></h2>#DEBUT_SURLIGNE(#NOTES)#FIN_SURLIGNE</div>]
[(#REM) Forum de l'article ]
[<h2 class="forum-repondre"><a href="(#PARAMETRES_FORUM|url_reponse_forum)"><:repondre_article:></a></h2>]
<INCLURE{fond=inc-forum}{id_article}>
</div><!-- fin contenu -->
[(#REM) Menu de navigation laterale ]
<div id="navigation">
<h1 class="invisible"><:navigation:></h1>
[(#REM) Menu de navigation par rubriques ]
<INCLURE{fond=inc-rubriques}{lang}{id_rubrique}>
[(#REM) Articles dans la meme rubrique ]
<B_articles_rubrique>
<div class="breves">
<h2 class="menu-titre"><a href="#URL_RUBRIQUE"><:meme_rubrique:></a></h2>
<ul>
<BOUCLE_articles_rubrique(ARTICLES) {id_rubrique} {par date}{inverse} {0,10}>
<li><a href="#URL_ARTICLE"[ class="(#EXPOSE)"]>#TITRE</a></li>
</BOUCLE_articles_rubrique>
</ul>
</div>
</B_articles_rubrique>
[(#REM) Menu de navigation mots-cles ]
<B_mots>
<div class="divers">
<h2 class="menu-titre"><:mots_clefs:></h2>
<ul>
<BOUCLE_mots(MOTS) {id_article} {par titre}>
<li><a href="#URL_MOT" rel="tag">#TITRE</a></li>
</BOUCLE_mots>
</ul>
</div>
</B_mots>
</div><!-- fin navigation -->
</div><!-- fin conteneur -->
[(#REM) Pied de page ]
<INCLURE{fond=inc-pied}{lang}>
</div><!-- fin page -->
</body>
</html>
</BOUCLE_article_principal>

451
exec/agenda_evenements.php

@ -0,0 +1,451 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/texte');
include_spip('inc/presentation');
include_spip('inc/agenda_filtres');
include_spip('inc/agenda_gestion');
function date_debut_fin($annee,$mois,$jour,$type){
if ($type=='jour'){
$ts_start=strtotime("$annee-$mois-01 00:00:00");
$ts_start+=($jour-1)*24*60*60;
$ts_fin=$ts_start+24*60*60;
} else
if ($type=="semaine"){
$ts_start=strtotime("$annee-$mois-01 01:00:00");
$ts_start+=($jour-1)*24*60*60;
while (date('w',$ts_start)!=1) $ts_start-=24*60*60;
$ts_fin=$ts_start+7*24*60*60+60*60;
$ts_start-=2*60*60;
} else
if ($type=='mois'){
$ts_start=strtotime("$annee-$mois-01 00:00:00");
if ($mois<'12')
$ts_fin=strtotime("$annee-".($mois+1)."-01 00:00:00");
else
$ts_fin=strtotime(($annee+1)."-$mois-01 00:00:00");
}
return array($ts_start,$ts_fin);
}
function ajoute_creneaux_horaires($urlbase,$ts_start,$ts_fin,$type,$partie_cal,$echelle){
if ($echelle<=120)
$freq_creneaux=30*60;
else
$freq_creneaux=60*60;
$today=date('Y-m-d');
// creneaux pour ajout uniquement si ajouter_id_article present
if (($type!='mois')&&($partie_cal!='sansheure'))
{
$heuremin='08';$heuremax='20';
if ($partie_cal=='matin'){
$heuremin='04';$heuremax='15';
}
if ($partie_cal=='soir'){
$heuremin='12';$heuremax='23';
}
for ($j=$ts_start;$j<=$ts_fin;$j+=$freq_creneaux){
$heure=date('H',$j);
if (($heure>=$heuremin)&&($heure<=$heuremax)){
$url=parametre_url($urlbase,'ndate',urlencode(date('Y-m-d H:i',$j)));
$creneau=date('Y-m-d H:i:s',$j);
if (date('Y-m-d',$j)==$today)
Agenda_memo_full($creneau,$creneau,preg_replace(",\s+,","&nbsp;",date('H:i',$j)." "._T('agenda:ajouter_un_evenement')), " ", "", $url,'calendrier-creneau-today');
else if (date('w',$j)==0)
Agenda_memo_full($creneau,$creneau,preg_replace(",\s+,","&nbsp;",date('H:i',$j)." "._T('agenda:ajouter_un_evenement')), " ", "",$url,'calendrier-creneau-sunday');
else
Agenda_memo_full($creneau,$creneau,preg_replace(",\s+,","&nbsp;",date('H:i',$j)." "._T('agenda:ajouter_un_evenement')), " ", "",$url,'calendrier-creneau');
}
}
}
}
function affiche_evenements_agenda($flag_editable){
global $visu_evenements;
$type = _request('type');
$partie_cal = _request('partie_cal');
if (!$type) $type='semaine';
$id_evenement = intval(_request('id_evenement'));
$ajouter_id_article = intval(_request('ajouter_id_article'));
global $annee,$mois,$jour;
$annee = intval(_request('annee'));
$mois = intval(_request('mois'));
$jour = intval(_request('jour'));
if ($flag_editable)
Agenda_action_formulaire_article($ajouter_id_article);
$visu_evenements=array();
if ((!$annee)||(!$mois)||(!$jour)){
if (!$id_evenement){ // pas d'id_evenement--> date du jour
$stamp=time();
}
else { // date de l'evenement
$res = spip_query("SELECT date_debut FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement));
if ($row = spip_fetch_array($res))
$stamp=strtotime($row['date_debut']);
else
$stamp=time();
}
$annee=date('Y',$stamp);
$mois=date('m',$stamp);
$jour=date('d',$stamp);
}
$urlbase=self();
$urlbase=parametre_url($urlbase,'edit','');
$urlbase=parametre_url($urlbase,'del','');
$urlbase=parametre_url($urlbase,'ndate','');
$urlbase=parametre_url($urlbase,'id_evenement','');
$urlbase=parametre_url($urlbase,'neweven','1');
//$urlbase=str_replace("&amp;","&",$urlbase);
// creation des boites creneaux horaires pour ajout rapide
list($ts_start,$ts_fin) = date_debut_fin($annee,$mois,$jour,$type);
if ($flag_editable)
ajoute_creneaux_horaires($urlbase,$ts_start,$ts_fin,$type,$partie_cal,$echelle);
$categorie_concerne=array('plage'=>'calendrier-plage','evenement'=>'calendrier-evenement');
$categorie_info=array('plage'=>'calendrier-plage-info','evenement'=>'calendrier-evenement-info');
$datestart=date('Y-m-d H:i:s',$ts_start-24*60*60);
$datefin=date('Y-m-d H:i:s',$ts_fin+24*60*60);
// tous les evenements
$res = spip_query("SELECT *
FROM spip_evenements AS evenements
WHERE ((evenements.date_debut>='$datestart' AND evenements.date_debut<='$datefin')
OR (evenements.date_fin>='$datestart' AND evenements.date_fin<='$datefin')
OR (evenements.date_debut<'$datestart' AND evenements.date_fin>'$datefin'))
ORDER BY evenements.date_debut;");
$urlbase=parametre_url($urlbase,'neweven','');
$urlbase=parametre_url($urlbase,'annee',$annee);
$urlbase=parametre_url($urlbase,'mois',$mois);
$urlbase=parametre_url($urlbase,'jour',$jour);
while ($row = spip_fetch_array($res)){
$is_evt=($row['horaire']!='oui')
||($row['date_debut']<$datestart && $row['date_fin']>$datefin);
$concerne=(!$ajouter_id_article) || ($ajouter_id_article==$row['id_article']);
$url=parametre_url($urlbase,'id_evenement',$row['id_evenement']);
$url=parametre_url($url,'ajouter_id_article',$row['id_article']);
$titre = typo($row['titre']);
$descriptif = typo($row['descriptif']);
$lieu = typo($row['lieu']);
$texte=wordwrap(entites_html($row['titre'],ENT_QUOTES),15,"<br />\n");
if (($type!='mois')&&(!$is_evt))
$texte.="<hr />" . wordwrap(entites_html($row['descriptif'],ENT_QUOTES),15, "<br />\n");
if (strlen($texte)==0) $texte=_L("(sans objet)");
if ($concerne) $categorie = $categorie_concerne;
else $categorie = $categorie_info;
if ($is_evt) $categorie = $categorie['evenement'];
else $categorie = $categorie['plage'];
if ($id_evenement==$row['id_evenement'])
$categorie.='-selection';
if (!$is_evt)
Agenda_memo_full($row['date_debut'], $row['date_fin'], $titre, $descriptif, $lieu, $url, $categorie);
else{
//if ($type!='mois')
// Agenda_memo_evt_full($row['date_debut'], $row['date_debut'], Agenda_rendu_boite($titre,$descriptif,$lieu), "", "", $url, $categorie);
//else
Agenda_memo_evt_full($row['date_debut'], $row['date_fin'], $titre, $descriptif, $lieu, $url, $categorie);
}
$visu_evenements[$row['id_evenement']]=1;
}
$s = "<span class='agenda-calendrier'>\n";
// attention : bug car $type est modifie apres cet appel !
$s .= Agenda_affiche_full(1,'', $type, 'calendrier-creneau','calendrier-creneau-today','calendrier-creneau-sunday','calendrier-plage','calendrier-evenement','calendrier-plage-info','calendrier-evenement-info','calendrier-plage-selection','calendrier-evenement-selection');
$s .= "</span>";
return $s;
}
function visu_evenement_agenda($id_evenement,$flag_editable){
$out = "";
$ndate = _request('ndate');
$del = _request('del');
if ($id_evenement!=NULL){
$res = spip_query("SELECT evenements.* FROM spip_evenements AS evenements WHERE evenements.id_evenement=".spip_abstract_quote($id_evenement));
if ($row = spip_fetch_array($res)){
if (!isset($neweven)){
$fid_evenement=$row['id_evenement'];
$ftitre=attribut_html(typo($row['titre']));
$flieu=attribut_html(typo($row['lieu']));
$fhoraire=attribut_html($row['horaire']);
$fdescriptif=attribut_html(typo($row['descriptif']));
$fstdatedeb=strtotime($row['date_debut']);
$fstdatefin=strtotime($row['date_fin']);
$fid_evenement_source=$row['id_evenement_source'];
}
}
$out .= "<div class='agenda-visu-evenement'>";
$res2 = spip_query("SELECT articles.* FROM spip_articles AS articles LEFT JOIN spip_evenements AS J ON J.id_article=articles.id_article WHERE J.id_evenement=".spip_abstract_quote($id_evenement));
if ($row2 = spip_fetch_array($res2)){
$out .= "<div class='article-evenement'>";
$out .= "<a href='".generer_url_ecrire('articles',"id_article=".$row2['id_article'])."'>";
$out .= http_img_pack("article-24.gif", "", "width='24' height='24' border='0'");
$out .= entites_html(typo($row2['titre']))."</a>";
$out .= "</div>\n";
}
$out .= "<div class='agenda-visu-evenement-bouton-fermer'>";
$url=self();
$url=parametre_url($url,'edit','');
$url=parametre_url($url,'neweven','');
$url=parametre_url($url,'del','');
$url=parametre_url($url,'id_evenement','');
$out .= "<a href='$url'><img src='"._DIR_PLUGIN_AGENDA."/img_pack/croix.png' width='12' height='12' style='border:none;'></a>";
$out .= "</div>\n";
$fobjet = entites_html($fobjet,ENT_QUOTES);
$flieu = entites_html($flieu,ENT_QUOTES);
$fdescription = entites_html($fdescription,ENT_QUOTES);
$out .= "<div class='titre-titre'>";
$out .= _T('agenda:evenement_titre');
$out .= "</div><div class='titre-visu'>$ftitre &nbsp;</div>\n";
$out .= "<div class='lieu-titre'>";
$out .= _T('agenda:evenement_lieu');
$out .= "</div><div class='lieu-visu'>$flieu &nbsp;</div>\n";
$out .= "<div class='horaire-titre'>&nbsp;</div>";
$out .= "<div class='date-titre'>";
$out .= _T('agenda:evenement_date');
$out .= "</div>";
$out .= "<div class='date-visu'>";
$out .= _T('agenda:evenement_date_du');
$out .= " ".affdate_jourcourt(date("Y-m-d H:i",$fstdatedeb))." ";
if ($fhoraire=='oui')
// M. Possoz Change: Date
// $out .= " &agrave; ".date("H:i",$fstdatedeb)." ";
$out .= _T('agenda:evenement_date_a_immediat');
$out .= " ".date("H:i",$fstdatedeb);
$out .= " <br/>\n";
// M. Possoz Change: Date au
// $out .= "Au ".affdate_jourcourt(date("Y-m-d H:i",$fstdatefin));
$out .= _T('agenda:evenement_date_au');
$out .= " ".affdate_jourcourt(date("Y-m-d H:i",$fstdatefin))." ";
if ($fhoraire=='oui')
// M. Possoz Change: Date
// $out .= " &agrave; ".date("H:i",$fstdatefin)." ";
$out .= _T('agenda:evenement_date_a_immediat');
$out .= " ".date("H:i",$fstdatefin);
$out .= " <br/>\n";
$out .= "</div>\n";
// M. Possoz Change: Date
// $out .= "<div class='descriptif-titre'>Description</div><div class='descriptif-visu'>$fdescriptif &nbsp;</div>\n";
$out .= "<div class='descriptif-titre'>";
$out .= _T('agenda:evenement_descriptif');
$out .= "</div><div class='descriptif-visu'>$fdescriptif &nbsp;</div>\n";
$out .= "<div class='agenda_mots_cles'>";
$res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui' ORDER BY titre");
$sep = "";
while ($row = spip_fetch_array($res,SPIP_ASSOC)){
$id_groupe = $row['id_groupe'];
$row2 = spip_fetch_array(
spip_query("SELECT mots.titre FROM spip_mots_evenements AS mots_evenements
LEFT JOIN spip_mots AS mots ON mots.id_mot=mots_evenements.id_mot
WHERE mots.id_groupe=".spip_abstract_quote($id_groupe).
" AND mots_evenements.id_evenement=".spip_abstract_quote($id_evenement)));
if ($row2){
$out .= $sep . supprimer_numero($row['titre'])."&nbsp;:&nbsp;".supprimer_numero($row2['titre']);
$sep = "\n, ";
}
}
$out .= "</div>\n";
$url = parametre_url(self(),'annee','');
$url = parametre_url($url,'mois','');
$url = parametre_url($url,'jour','');
$out .= "<div class='repetitions-calendrier'>";
$id_source = $fid_evenement_source?$fid_evenement_source:$id_evenement;
$res2 = spip_query("SELECT * FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($id_source)." OR id_evenement_source=".spip_abstract_quote($id_source)." ORDER BY date_debut");
if (spip_num_rows($res2)>1){
$out .= _T('agenda:evenement_autres_occurences');
while($row2 = spip_fetch_array($res2)){
if ($row2['id_evenement']!=$fid_evenement){
$url = parametre_url(self(),'id_evenement',$row2['id_evenement']);
$out .= " <a href='$url'>" . affdate_jourcourt($row2['date_debut']) ."</a>";
}
}
}
$out .= "</div>";
if ($fid_evenement_source!=0){
$res2 = spip_query("SELECT evenements.* FROM spip_evenements AS evenements WHERE evenements.id_evenement=".spip_abstract_quote($fid_evenement_source));
if ($row2 = spip_fetch_array($res2)){
$url = parametre_url($url,'id_evenement',$row2['id_evenement']);
$out .= "<div class='edition-bouton'>";
$out .= _T('agenda:repetition_de')." <a href='";
$out .= $url;
$out .= "'>".($row2['titre']?typo($row2['titre']):_T('agenda:sans_titre'))."</a>";
$out .= "</div>";
}
}
else if ($flag_editable){
$url=self();
$url=parametre_url($url,'edit','');
$url=parametre_url($url,'neweven','');
$url=parametre_url($url,'del','');
$url=parametre_url($url,'id_evenement','');
if ($del==1) { //---------------Suppression RDV ------------------------------
$out .= "<form name='edition_rdv' action='$url' method='post'>";
//$out .= "<input type='hidden' name='redirect' value='$url' />\n";
$out .= "<input type='hidden' name='id_evenement' value='$fid_evenement' />\n";
$out .= "<input type='hidden' name='suppr' value='1' />\n";
$out .= "<div class='edition-bouton'>";
$out .= "<input type='submit' name='submit' value='Annuler' />";
$out .= "<input type='submit' name='submit' value='Confirmer la suppression' />";
$out .= "</div></form>";
}
else {
$url=parametre_url($url,'id_evenement',$id_evenement);
$out .= "<form name='edition_rdv' action='$url' method='post'>";
//$out .= "<input type='hidden' name='redirect' value='$url' />\n";
$out .= "<input type='hidden' name='id_evenement' value='$fid_evenement' />\n";
$out .= "<input type='hidden' name='edit' value='1' />\n";
$out .= "<div class='edition-bouton'>";
$out .= "<div style='text-align:$spip_lang_right'><input type='submit' name='modifier' value='"._T('bouton_modifier')."' class='fondo'></div>";
$out .= "</div></form>";
}
}
$out .= "</div>\n";
}
return $out;
}
function exec_agenda_evenements_dist(){
// s'assurer que les tables sont crees
Agenda_install();
include_spip('inc/calendar');
// Reserver les widgets agenda
WCalendar_ajoute_lies(_T('agenda:evenement_date_debut'),'_evenement_debut',_T('agenda:evenement_date_fin'),'_evenement_fin');
WCalendar_ajoute_statique(_T('agenda:evenement_repetitions'),'_repetitions');
$ajouter_id_article = intval(_request('ajouter_id_article'));
$flag_editable = article_editable($ajouter_id_article);
global $visu_evenements;
$type = _request('type');
if (!$type) $type='semaine';
$id_evenement = intval(_request('id_evenement'));
$edit = _request('edit');
$neweven = _request('neweven');
$annee = intval(_request('annee'));
$mois = intval(_request('mois'));
$jour = intval(_request('jour'));
$date = date("Y-m-d", time());
if ($annee&&$mois&&$jour)
$date = date("Y-m-d", strtotime("$annee-$mois-$jour"));
if ($type == 'semaine') {
//$GLOBALS['afficher_bandeau_calendrier_semaine'] = true;
$titre = _T('titre_page_calendrier',
array('nom_mois' => nom_mois($date), 'annee' => annee($date)));
}
elseif ($type == 'jour') {
$titre = nom_jour($date)." ". affdate_jourcourt($date);
}
else {
$titre = _T('titre_page_calendrier',
array('nom_mois' => nom_mois($date), 'annee' => annee($date)));
}
debut_page($titre, "redacteurs", "calendrier","",$css);
barre_onglets("calendrier", "evenements");
$out = "<div>";
if ($ajouter_id_article){
$res2 = spip_query("SELECT * FROM spip_articles AS articles WHERE id_article=".spip_abstract_quote($ajouter_id_article));
if ($row2 = spip_fetch_array($res2)){
$out .= "<div style=' width:750px; font-size: 18px; color: #9DBA00; font-weight: bold;text-align:left;'>";
$out .= "<a href='".generer_url_ecrire('articles',"id_article=".$row2['id_article'])."'>";
$out .= http_img_pack("article-24.gif", "", "width='24' height='24' border='0'");
$out .= entites_html(typo($row2['titre']))."</a></div>";
}
}
echo $out ."&nbsp;</div>" ;
echo affiche_evenements_agenda($flag_editable);
if (($edit||$neweven)&&($flag_editable)) { //---------------Edition RDV ------------------------------
$ndate = _request('ndate');
echo Agenda_formulaire_edition_evenement($id_evenement,$neweven,$ndate);
}
else
if ((isset($id_evenement))&&(isset($visu_evenements[$id_evenement]))){ //---------------Visualisation RDV ------------------------------
echo visu_evenement_agenda($id_evenement,$flag_editable);
}
fin_page();
}
function http_calendrier_ics_message($annee, $mois, $jour, $large)
{
return "";
}
function http_calendrier_aide_mess()
{
return "";
}
function http_calendrier_semainesh($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt)
{
global $spip_ecran;
if (!isset($spip_ecran)) $spip_ecran = 'large';
$init = date("w",mktime(1,1,1,$mois,$jour,$annee));
$init = $jour+1-($init ? $init : 7);
$sd = '';
if (is_array($evt))
{
list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;
if ($sansduree)
foreach($sansduree as $d => $r)
$evenements[$d] = !$evenements[$d] ? $r : array_merge($evenements[$d], $r);
$finurl = "&amp;echelle=$echelle&amp;partie_cal=$partie_cal$ancre";
$evt =
http_calendrier_semaine_noms($annee, $mois, $init, $script, $finurl) .
http_calendrier_mois_sept($annee, $mois, $init, $init+ 6, $evenements, $script);
} else $evt = "<tr><td>$evt</td></tr>";
return
"\n<table class='calendrier-table-$spip_ecran' cellspacing='0' cellpadding='0'>" .
http_calendrier_semaine_navigation($annee, $mois, $init, $echelle, $partie_cal, $script, $ancre) .
$evt .
"</table>" .
(_DIR_RESTREINT ? "" : http_calendrier_aide_mess());
}

231
exec/mots_tous.php

@ -0,0 +1,231 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2006 *
* 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('exec/grouper_mots');
include_spip('inc/agenda_gestion');
include_spip('inc/pim_agenda_gestion');
// https://code.spip.net/@exec_mots_tous_dist
function exec_mots_tous_dist()
{
global $acces_comite, $acces_forum, $acces_minirezo, $new, $articles, $breves, $change_type, $conf_mot, $connect_statut, $connect_toutes_rubriques, $descriptif, $id_groupe, $modifier_groupe, $obligatoire, $rubriques, $spip_lang, $spip_lang_right, $supp_group, $son_groupe, $syndic, $texte, $unseul;
global $evenements, $pim_agenda;
global $tables_principales;
$id_groupe = intval($id_groupe);
$conf_mot = intval($conf_mot);
if (acces_mots()) {
if (function_exists('Agenda_install')) Agenda_install();
if (function_exists('PIMAgenda_install')) PIMAgenda_install();
if ($modifier_groupe == "oui") {
$change_type = (corriger_caracteres($change_type));
$texte = (corriger_caracteres($texte));
$descriptif = (corriger_caracteres($descriptif));
if (!$new) { // modif groupe
spip_query("UPDATE spip_mots SET type=" . spip_abstract_quote($change_type) . " WHERE id_groupe=$id_groupe");
spip_query("UPDATE spip_groupes_mots SET titre=" . spip_abstract_quote($change_type) . ", texte=" . spip_abstract_quote($texte) . ", descriptif=" . spip_abstract_quote($descriptif) . ", unseul=" . spip_abstract_quote($unseul) . ", obligatoire=" . spip_abstract_quote($obligatoire) . ", articles=" . spip_abstract_quote($articles) . ", breves=" . spip_abstract_quote($breves) . ", rubriques=" . spip_abstract_quote($rubriques) . ", syndic=" . spip_abstract_quote($syndic) . ", minirezo=" . spip_abstract_quote($acces_minirezo) . ", comite=" . spip_abstract_quote($acces_comite) . ", forum=" . spip_abstract_quote($acces_forum) . " WHERE id_groupe=$id_groupe");
} else { // creation groupe
$id_groupe = spip_abstract_insert('spip_groupes_mots', "(titre, texte, descriptif, unseul, obligatoire, articles, breves, rubriques, syndic, minirezo, comite, forum)", "(" . spip_abstract_quote($change_type) . ", " . spip_abstract_quote($texte) . " , " . spip_abstract_quote($descriptif) . " , " . spip_abstract_quote($unseul) . " , " . spip_abstract_quote($obligatoire) . " , " . spip_abstract_quote($articles) . " ," . spip_abstract_quote($breves) . " , " . spip_abstract_quote($rubriques) . " , " . spip_abstract_quote($syndic) . " , " . spip_abstract_quote($acces_minirezo) . " , " . spip_abstract_quote($acces_comite) . " , " . spip_abstract_quote($acces_forum) . " )");
}
if ($id_groupe && isset($tables_principales['spip_evenements']))
spip_query("UPDATE spip_groupes_mots SET evenements=".spip_abstract_quote($evenements)." WHERE id_groupe=$id_groupe");
if ($id_groupe && isset($tables_principales['spip_pim_agenda']))
spip_query("UPDATE spip_groupes_mots SET pim_agenda=".spip_abstract_quote($pim_agenda)." WHERE id_groupe=$id_groupe");
}
if ($supp_group){
spip_query("DELETE FROM spip_groupes_mots WHERE id_groupe=" . intval($supp_group));
}
}
pipeline('exec_init',array('args'=>array('exec'=>'mots_tous'),'data'=>''));
debut_page(_T('titre_page_mots_tous'), "naviguer", "mots");
debut_gauche();
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'mots_tous'),'data'=>''));
creer_colonne_droite();
echo pipeline('affiche_droite',array('args'=>array('exec'=>'mots_tous'),'data'=>''));
debut_droite();
gros_titre(_T('titre_mots_tous'));
if (acces_mots()) {
echo typo(_T('info_creation_mots_cles')) . aide ("mots") ;
}
echo "<br><br>";
//
// On boucle d'abord sur les groupes de mots
//
$result_groupes = spip_query("SELECT *, ".creer_objet_multi ("titre", "$spip_lang")." FROM spip_groupes_mots ORDER BY multi");
while ($row_groupes = spip_fetch_array($result_groupes)) {
$id_groupe = $row_groupes['id_groupe'];
$titre_groupe = typo($row_groupes['titre']);
$descriptif = $row_groupes['descriptif'];
$texte = $row_groupes['texte'];
$unseul = $row_groupes['unseul'];
$obligatoire = $row_groupes['obligatoire'];
$articles = $row_groupes['articles'];
$breves = $row_groupes['breves'];
$rubriques = $row_groupes['rubriques'];
$syndic = $row_groupes['syndic'];
if (isset($tables_principales['spip_evenements'])) $evenements = $row_groupes['evenements'];
if (isset($tables_principales['spip_pim_agenda'])) $pim_agenda = $row_groupes['pim_agenda'];
$acces_minirezo = $row_groupes['minirezo'];
$acces_comite = $row_groupes['comite'];
$acces_forum = $row_groupes['forum'];
// Afficher le titre du groupe
debut_cadre_enfonce("groupe-mot-24.gif", false, '', $titre_groupe);
// Affichage des options du groupe (types d'elements, permissions...)
echo "<font face='Verdana,Arial,Sans,sans-serif' size=1>";
if ($articles == "oui") echo "> "._T('info_articles_2')." &nbsp;&nbsp;";
if ($breves == "oui") echo "> "._T('info_breves_02')." &nbsp;&nbsp;";
if ($rubriques == "oui") echo "> "._T('info_rubriques')." &nbsp;&nbsp;";
if ($syndic == "oui") echo "> "._T('icone_sites_references')." &nbsp;&nbsp;";
if (isset($tables_principales['spip_evenements']))
if ($evenements == "oui") echo "> "._T('agenda:info_evenements')." &nbsp;&nbsp;";
if (isset($tables_principales['spip_pim_agenda']))
if ($pim_agenda == "oui") echo "> "._T('pimagenda:info_evenements')." &nbsp;&nbsp;";
if ($unseul == "oui" OR $obligatoire == "oui") echo "<br>";
if ($unseul == "oui") echo "> "._T('info_un_mot')." &nbsp;&nbsp;";
if ($obligatoire == "oui") echo "> "._T('info_groupe_important')." &nbsp;&nbsp;";
echo "<br />";
if ($acces_minirezo == "oui") echo "> "._T('info_administrateurs')." &nbsp;&nbsp;";
if ($acces_comite == "oui") echo "> "._T('info_redacteurs')." &nbsp;&nbsp;";
if ($acces_forum == "oui") echo "> "._T('info_visiteurs_02')." &nbsp;&nbsp;";
echo "</font>";
if ($descriptif) {
echo "<div style='border: 1px dashed #aaaaaa;'>";
echo "<font size='2' face='Verdana,Arial,Sans,sans-serif'>";
echo "<b>",_T('info_descriptif'),"</b> ";
echo propre($descriptif);
echo "&nbsp; ";
echo "</font>";
echo "</div>";
}
if (strlen($texte)>0){
echo "<FONT FACE='Verdana,Arial,Sans,sans-serif'>";
echo propre($texte);
echo "</FONT>";
}
//
// Afficher les mots-cles du groupe
//
$supprimer_groupe = afficher_groupe_mots($id_groupe);
echo "<div id='editer_mot-$id_groupe' style='position: relative;'>";
// Preliminaire: confirmation de suppression d'un mot lie à qqch
// (cf fin de afficher_groupe_mots_boucle executee a l'appel precedent)
if ($conf_mot AND $son_groupe==$id_groupe)
echo confirmer_mot($conf_mot, $id_groupe);
echo $supprimer_groupe;
echo "</div>";
if (acces_mots() AND !$conf_mot){
echo "\n<table cellpadding='0' cellspacing='0' border='0' width='100%'>";
echo "<tr>";
echo "<td>";
icone(_T('icone_modif_groupe_mots'), generer_url_ecrire("mots_type","id_groupe=$id_groupe"), "groupe-mot-24.gif", "edit.gif");
echo "</td>";
if (!$supprimer_groupe) {
echo "<td>";
icone(_T('icone_supprimer_groupe_mots'), generer_url_ecrire("mots_tous","supp_group=$id_groupe"), "groupe-mot-24.gif", "supprimer.gif");
echo "</td>";
echo "<td> &nbsp; </td>"; // Histoire de forcer "supprimer" un peu plus vers la gauche
}
echo "<td>";
echo "<div align='$spip_lang_right'>";
icone(_T('icone_creation_mots_cles'), generer_url_ecrire("mots_edit","new=oui&id_groupe=$id_groupe&redirect=" . generer_url_retour('mots_tous')), "mot-cle-24.gif", "creer.gif");
echo "</div>";
echo "</td></tr></table>";
}
fin_cadre_enfonce();
}
if (acces_mots() AND !$conf_mot){
echo "<p>&nbsp;</p><div align='right'>";
icone(_T('icone_creation_groupe_mots'), generer_url_ecrire("mots_type","new=oui"), "groupe-mot-24.gif", "creer.gif");
echo "</div>";
}
fin_page();
}
function confirmer_mot ($conf_mot, $son_groupe)
{
$row = spip_fetch_array(spip_query("SELECT * FROM spip_mots WHERE id_mot=$conf_mot"));
$id_mot = $row['id_mot'];
$titre_mot = typo($row['titre']);
$type_mot = typo($row['type']);
if (($na = intval($na)) == 1) {
$texte_lie = _T('info_un_article')." ";
} else if ($na > 1) {
$texte_lie = _T('info_nombre_articles', array('nb_articles' => $na)) ." ";
}
if (($nb = intval($nb)) == 1) {
$texte_lie .= _T('info_une_breve')." ";
} else if ($nb > 1) {
$texte_lie .= _T('info_nombre_breves', array('nb_breves' => $nb))." ";
}