1) {
$count_evt += 1;
// Liste ordonnees des evenements (tableau[1..n] d'evenements)
$jour = affdate_base($date_redac, 'jour');
$mois = affdate_base($date_redac, 'mois');
$annee = affdate_base($date_redac, 'annee');
$liste_evt[$count_evt]['id'] = $id;
$liste_evt[$count_evt]['date_redac'] = $date_redac;
$liste_evt[$count_evt]['date'] = affdate_base($date_redac, 'd-m-Y H:i');
$liste_evt[$count_evt]['heure'] = affdate_base($date_redac, 'H:i');
$liste_evt[$count_evt]['jour'] = $jour;
$liste_evt[$count_evt]['mois'] = $mois;
$liste_evt[$count_evt]['annee'] = $annee;
$liste_evt[$count_evt]['nom_mois'] = affdate_base($date_redac, 'nom_mois');
$liste_evt[$count_evt]['titre'] = $titre;
if (intval($debut_saison) == 1) {
$liste_evt[$count_evt]['saison'] = $annee;
$liste_evt[$count_evt]['lien_page'] = $liste_evt[$count_evt]['saison'];
}
else {
$liste_evt[$count_evt]['saison'] = (intval($mois) < intval($debut_saison)) ? $annee : strval(intval($annee)+1);
if ($type_saison == 'annee')
$liste_evt[$count_evt]['lien_page'] = $liste_evt[$count_evt]['saison'];
elseif ($type_saison == 'periode')
$liste_evt[$count_evt]['lien_page'] = (intval($mois) < intval($debut_saison)) ? strval(intval($annee)-1).'-'.$annee
: $annee.'-'.strval(intval($annee)+1);
else // $type_saison == 'periode_abregee'
$liste_evt[$count_evt]['lien_page'] = (intval($mois) < intval($debut_saison)) ? substr(strval(intval($annee)-1),2,2).'-'.substr($annee,2,2)
: substr($annee,2,2).'-'.substr(strval(intval($annee)+1),2,2);
}
$id_article = intval($id);
$select = array('t2.id_mot AS id_mot');
$from = array('spip_mots_articles AS t1', 'spip_mots AS t2');
$where = array('t1.id_article='.sql_quote($id_article),
't2.id_mot=t1.id_mot');
$result = sql_select($select, $from, $where);
$cat = NULL;
while ($row = sql_fetch($result))
$cat .= '<'.$row['id_mot'].'>';
$liste_evt[$count_evt]['categorie'] = $cat;
// Liste indexee par jour des evenements
$jour_redac = affdate_base($date_redac, 'd-m-Y');
$mini_evt[$jour_redac][] = $count_evt;
}
return;
}
// ===================================================
// Auteur: Smellup
// Fonction : affichage debug du tableau des evenements
// Utilisation : tous les agendas.
// ===================================================
//
function agenda_debug_evenement($id_agenda=0, $liste_choisie='liste_evt') {
if ($liste_choisie == 'liste_evt') {
$evenements = agenda_recenser_evenement(0);
$count_evt = count($evenements);
for ($i=1;$i<=$count_evt;$i++) {
echo '
EVT Num'.$i.'
';
echo 'Titre: '.$evenements[$i]['titre'].'
';
echo 'Id: '.$evenements[$i]['id'].'
';
echo 'Date Redac: '.$evenements[$i]['date_redac'].'
';
echo 'Date: '.$evenements[$i]['date'].'
';
echo 'Heure: '.$evenements[$i]['heure'].'
';
echo 'Jour: '.$evenements[$i]['jour'].'
';
echo 'Mois: '.$evenements[$i]['mois'].' | '.$evenements[$i]['nom_mois'].'
';
echo 'Annee: '.$evenements[$i]['annee'].'
';
echo 'Saison: '.$evenements[$i]['saison'].'
';
echo 'Lien page: '.$evenements[$i]['lien_page'].'
';
echo 'Categorie: '.$evenements[$i]['categorie'].'
';
}
}
else {
$evenements = agenda_recenser_evenement(-1);
foreach ($evenements as $jour => $liste) {
echo '
JOUR: '.$jour.' ('.count($liste).')
';
foreach ($liste as $num_evt)
echo $num_evt.', ';
echo '
';
}
}
}
// ===================================================
// Auteur: Smellup
// Fonction : affichage debug du tableau du contexte
// Utilisation : tous les agendas.
// ===================================================
//
function agenda_debug_contexte($id_agenda=0) {
$contexte_aff = agenda_definir_contexte(0);
echo '
CONTEXTE AGENDA
';
echo 'ID Rubrique: '.$contexte_aff['id_rubrique'].'
';
echo 'Type: '.$contexte_aff['type_agenda'].'
';
echo 'Debut saison: '.$contexte_aff['debut_saison'].'
';
echo 'Type affichage saison: '.$contexte_aff['type_saison'].'
';
echo 'Mois en cours: '.$contexte_aff['mois_base'].'
';
echo 'Année en cours: '.$contexte_aff['annee_base'].'
';
echo 'URL page de base: '.$contexte_aff['url_base'].'
';
}
// ==================================================== AGENDA LISTING ANNUEL OU SAISONNIER ====================================================
// ===================================================
// Auteur: Smellup
// Fonction : Insertion d'une bande de pagination annuelle ou
// saisonniere
// Utilisation : uniquement agenda annuel. Choix possible du
// filtre, tri, et format (via le contexte)
// ===================================================
//
function agenda_liste_paginer($id_agenda=0, $annee_choisie=0, $mois_choisi=0, $filtre='-1', $separateur=' | ', $ancre=NULL, $tri='normal') {
static $count_page = 0;
if ($id_agenda == 0)
return $count_page;
$evenements = agenda_recenser_evenement(0);
$count_evt = count($evenements);
$pagination = NULL;
if ($count_evt == 0)
return $pagination;
if ($ancre)
$pagination .= '';
// Determination de l'annee choisie si l'agenda est saisonnier
$contexte_aff = agenda_definir_contexte(0);
$debut_saison = $contexte_aff['debut_saison'];
if (intval($debut_saison) != 1) {
$annee_choisie = (intval($mois_choisi) < intval($debut_saison)) ? $annee_choisie : strval(intval($annee_choisie)+1);
}
$annee_courante = 0;
$nouvelle_annee = FALSE;
$count_page = 0;
for ($i=1;$i<=$count_evt;$i++) {
$j = ($tri == 'inverse') ? $count_evt - $i + 1 : $i;
if (($filtre == '-1') ||
(($filtre == '0') && (!$evenements[$j]['categorie'])) ||
(($filtre != '-1') && ($filtre != '0') && (preg_match("/<$filtre>/",$evenements[$j]['categorie']) > 0))) {
$annee_redac = $evenements[$j]['saison'];
$annee_evt = $evenements[$j]['annee'];
$mois_evt = $evenements[$j]['mois'];
if ($annee_redac != $annee_courante) {
$nouvelle_annee = TRUE;
$count_page += 1;
}
else {
$nouvelle_annee = FALSE;
}
if ($nouvelle_annee) {
if ($annee_courante != 0) {
$pagination .= $separateur;
}
if ($annee_redac == $annee_choisie) {
$pagination .= ''.$evenements[$j]['lien_page'].'';
}
else {
$arg_option = NULL;
if ($filtre != '-1') $arg_option = '&categorie='.$filtre;
if ($ancre) $arg_option .= '#pagination_'.$ancre;
if (intval($debut_saison) != 1) $annee_evt = (intval($mois_evt) < intval($debut_saison)) ? strval(intval($annee_evt)-1) : $annee_evt;
$pagination .= ''.$evenements[$j]['lien_page'].'';
}
$annee_courante = $annee_redac;
}
}
}
return $pagination;
}
// ===================================================
// Auteur: Smellup
// Fonction : Affichage de l'agenda sous forme de listing des
// evenements de l'annee choisie
// Utilisation : uniquement agenda annuel. Choix possible du
// filtre et du tri
// ===================================================
//
function agenda_liste_afficher($id_agenda=0, $annee_choisie=0, $mois_choisi=0, $filtre='-1', $tri='normal') {
static $count_evt_filtre = 0;
if ($id_agenda == 0)
return $count_evt_filtre;
$evenements = agenda_recenser_evenement(0);
$count_evt = count($evenements);
$count_page = agenda_liste_paginer(0);
$liste = NULL;
if (($count_evt == 0) || ($count_page == 0))
return $liste;
// Determination de l'annee choisie si l'agenda est saisonnier
$contexte_aff = agenda_definir_contexte(0);
$debut_saison = $contexte_aff['debut_saison'];
if (intval($debut_saison) != 1)
$annee_choisie = (intval($mois_choisi) < intval($debut_saison)) ? $annee_choisie : strval(intval($annee_choisie)+1);
$mois_courant = NULL;
$nouveau_mois = FALSE;
$count_evt_filtre = 0;
for ($i=1;$i<=$count_evt;$i++) {
$j = ($tri == 'inverse') ? $count_evt - $i + 1 : $i;
if ($evenements[$j]['saison'] == $annee_choisie) {
if (($filtre == '-1') ||
(($filtre == '0') && (!$evenements[$j]['categorie'])) ||
(($filtre != '-1') && ($filtre != 0) && (preg_match("/<$filtre>/",$evenements[$j]['categorie']) > 0))) {
$count_evt_filtre += 1;
$mois_redac = $evenements[$j]['nom_mois'];
if ($mois_redac != $mois_courant) {
$nouveau_mois = TRUE;
}
else {
$nouveau_mois = FALSE;
}
if ($nouveau_mois) {
if ($mois_courant) {
$liste .= '';
}
$liste .= '
'.ucfirst($evenements[$j]['nom_mois']).' '.$evenements[$j]['annee'].'';
$liste .= '';
return $liste;
}
// ===================================================
// Auteur: Smellup
// Fonction : Affichage des messages d'avertissement
// Utilisation : uniquement agenda annuel. Cas aucune page ou
// aucun evenement. Critere filtre et saison
// ===================================================
//
function agenda_liste_avertir($id_agenda, $annee_choisie, $mois_choisi) {
$message = NULL;
$contexte_aff = agenda_definir_contexte(0);
$debut_saison = $contexte_aff['debut_saison'];
$type_saison = $contexte_aff['type_saison'];
if (intval($debut_saison) != 1)
$annee_choisie = (intval($mois_choisi) < intval($debut_saison)) ? $annee_choisie : strval(intval($annee_choisie)+1);
$count_evt = count(agenda_recenser_evenement(0));
$count_evt_filtre = agenda_liste_afficher(0);
if ($count_evt == 0)
$message = _T('sarkaspip:msg_0_evt_agenda');
else
if ($count_evt_filtre == 0)
if (intval($debut_saison) == 1)
$message = _T('sarkaspip:msg_0_evt_annee').' '.$annee_choisie;
else
if ($type_saison == 'annee')
$message = _T('sarkaspip:msg_0_evt_saison').' '.$annee_choisie;
elseif ($type_saison == 'periode')
$message = _T('sarkaspip:msg_0_evt_saison').' '.strval(intval($annee_choisie)-1).'-'.$annee_choisie;
else // $type_saison == 'periode_abregee'
$message = _T('sarkaspip:msg_0_evt_saison').' '.substr(strval(intval($annee_choisie)-1),2,2).'-'.substr($annee_choisie,2,2);
return $message;
}
// ==================================================== AGENDA MINI ====================================================
// ===================================================
// Auteur: Smellup
// Fonction : Retourne le tableau des noms des jours
// avec capitale ou pas, abrege ou pas
// Utilisation :
// ===================================================
//
function agenda_jours($capitale=true, $mode='entier', $taille=0) {
$jours=array();
if ($capitale)
array_push($jours, ucfirst(_T('date_jour_1')), ucfirst(_T('date_jour_2')), ucfirst(_T('date_jour_3')), ucfirst(_T('date_jour_4')),
ucfirst(_T('date_jour_5')), ucfirst(_T('date_jour_6')), ucfirst(_T('date_jour_7')));
else
array_push($jours, _T('date_jour_1'), _T('date_jour_2'), _T('date_jour_3'), _T('date_jour_4'),
_T('date_jour_5'), _T('date_jour_6'), _T('date_jour_7'));
if ($mode == 'entier') {
return $jours;
}
else {
foreach($jours as $_jour) {
$jours_abbr[] = substr($_jour, 0 , $taille);
}
return $jours_abbr;
}
}
function agenda_mois($capitale=true, $mode='entier', $taille=0) {
$mois=array();
if ($capitale)
$mois = array(1 => ucfirst(_T('date_mois_1')), 2 => ucfirst(_T('date_mois_2')), 3 => ucfirst(_T('date_mois_3')), 4 => ucfirst(_T('date_mois_4')),
5 => ucfirst(_T('date_mois_5')), 6 => ucfirst(_T('date_mois_6')), 7 => ucfirst(_T('date_mois_7')), 8 => ucfirst(_T('date_mois_8')),
9 => ucfirst(_T('date_mois_9')), 10 => ucfirst(_T('date_mois_10')), 11 => ucfirst(_T('date_mois_11')), 12 => ucfirst(_T('date_mois_12')));
else
$mois = array(1 => _T('date_mois_1'), 2 => _T('date_mois_2'), 3 => _T('date_mois_3'), 4 => _T('date_mois_4'),
5 => _T('date_mois_5'), 6 => _T('date_mois_6'), 7 => _T('date_mois_7'), 8 => _T('date_mois_8'),
9 => _T('date_mois_9'), 10 => _T('date_mois_10'), 11 => _T('date_mois_11'), 12 => _T('date_mois_12'));
if ($mode == 'entier') {
return $mois;
}
else {
for($i = 1; $i <= 12; $i++) {
$mois_abbr[$i] = substr($mois[$i], 0 , $taille);
}
return $mois_abbr;
}
}
// ===================================================
// Auteur: Smellup
// Fonction : Insertion d'une bande de navigation dans
// les mois precedents et suivants
// Utilisation : Choix possible des icones suivant et
// precedent
// ===================================================
//
function agenda_mini_afficher($id_agenda=0, $icone_prec='<<', $icone_suiv='>>',
$jour_debut=0, $affichage_hors_mois='oui',
$critere='oui', $max_mois=6, $taille=5, $format='d-m H:i') {
if ($id_agenda == 0)
return;
$agenda = NULL;
// Creation du header compose des items de navigation annee et mois
$agenda .= agenda_mini_header($id_agenda, $icone_prec, $icone_suiv);
// Creation du body compose du calendrier mensuel
$agenda .= agenda_mini_body($id_agenda, $jour_debut, $affichage_hors_mois);
// Creation du footer compose des items de navigation aujourd'hui et du resume des evenements du mois
$agenda .= agenda_mini_footer($id_agenda, $critere, $max_mois, $taille, $format);
return $agenda;
}
function agenda_mini_header($id_agenda=0, $icone_prec='<<', $icone_suiv='>>') {
if ($id_agenda == 0)
return;
// Init du contexte
$nom_mois = agenda_mois(true, 'entier');
$contexte_aff = agenda_definir_contexte(0);
$mois_choisi = $contexte_aff['mois_base'];
$annee_choisie = $contexte_aff['annee_base'];
$url_base = $contexte_aff['url_base'];
// Init de l'annee et du mois courant
$mois_courant = affdate_base(date('Y-m-d'), 'mois');
$annee_courante = affdate_base(date('Y-m-d'), 'annee');
// Calcul des dates min et max des evenements
$secteur_agenda = calcul_rubrique_specialisee('agenda', 'secteur', 'in');
$date_min = sql_getfetsel('date_redac', 'spip_articles',
array('id_secteur=' . sql_quote($secteur_agenda),
'date_redac>' . sql_quote('0000-00-00'),
'statut=' . sql_quote('publie')),
'', 'date_redac');
if ($date_min < date('Y-m-d')) {
$mois_min = affdate_base($date_min, 'mois');
$annee_min = affdate_base($date_min, 'annee');
}
else {
$mois_min = $mois_courant;
$annee_min = $annee_courante;
}
$date_max = sql_getfetsel('date_redac', 'spip_articles',
array('id_secteur=' . sql_quote($secteur_agenda),
'date_redac>' . sql_quote('0000-00-00'),
'statut=' . sql_quote('publie')),
'', 'date_redac DESC');
if ($date_max > date('Y-m-d')) {
$mois_max = affdate_base($date_max, 'mois');
$annee_max = affdate_base($date_max, 'annee');
}
else {
$mois_max = $mois_courant;
$annee_max = $annee_courante;
}
// Calcul des mois precedent et suivant
$mois = $mois_choisi-1;
if ($mois < 1) {
$mois_prec = '12';
$annee_prec = strval($annee_choisie-1);
}
else {
$mois_prec = strval($mois);
$annee_prec = strval($annee_choisie);
}
$mois = $mois_choisi+1;
if ($mois > 12) {
$mois_suiv = '1';
$annee_suiv = strval($annee_choisie+1);
}
else {
$mois_suiv = strval($mois);
$annee_suiv = strval($annee_choisie);
}
// Calcul des annees precedente et suivante
$annee_choisie_prec = strval($annee_choisie-1);
$annee_choisie_suiv = strval($annee_choisie+1);
// Calcul des mois et annees courants
// Init de la chaine
$header = NULL;
$lien_vide = '
';
// Debut de l'en-tete
// Ligne 1 : pagination par annee
$header .= ($annee_min < $annee_choisie)
? ''
: $lien_vide;
$header .= ''.$annee_choisie.'
';
$header .= ($annee_max > $annee_choisie)
? ''
: $lien_vide;
// Ligne 2 : pagination par mois
$header .= (($annee_min < $annee_choisie) OR (($annee_min == $annee_choisie) AND ($mois_min < $mois_choisi)))
? ''
: $lien_vide;
$header .= ''.$nom_mois[$mois_choisi].'
';
$header .= (($annee_max > $annee_choisie) OR (($annee_max == $annee_choisie) AND ($mois_max > $mois_choisi)))
? ''
: $lien_vide;
// Ligne 3 : retour au mois du jour courant
$header .= '';
// Fin de l'en-tete
return $header;
}
// ===================================================
// Auteur: Smellup
// Fonction : Insertion du mini-calendrier du mois choisi
// Utilisation : Choix possible du jour de debut de la
// semaine et de l'affichage des jours
// contigus hors mois choisi
// ===================================================
//
function agenda_mini_body($id_agenda=0, $jour_debut=0, $affichage_hors_mois='oui') {
$nom_jour_abrege = agenda_jours(true, 'abrege', 2);
$nom_jour = agenda_jours(true, 'complet');
if ($id_agenda == 0)
return;
// Init du contexte
$contexte_aff = agenda_definir_contexte(0);
$mois_choisi = $contexte_aff['mois_base'];
$annee_choisie = $contexte_aff['annee_base'];
$url_base = $contexte_aff['url_base'];
// Init des listes d'evenements
$evenements = agenda_recenser_evenement(0);
$mini_evenements = agenda_recenser_evenement(-1);
$body = NULL;
// Debut du tableau
$body .= '';
// 1ere ligne : nom abrege des jours de dimanche a samedi
$body .= '';
$body .= '';
for($i = 0; $i <= 6; $i++) {
$j = ($jour_debut+$i)%7;
$body .= '| '.$nom_jour_abrege[$j].' | ';
}
$body .= '
';
$body .= '';
// Cellules des jours : de 4 a 5 lignes de 7 jours. Debut de la 2eme ligne
$body .= '';
$body .= '';
// Cellules des jours visibles precedant le mois courant (toujours inclus strictement dans la 2eme ligne)
$cellules_mois_prec = NULL;
$jour = 1;
$date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
while (date('w', $date) != $jour_debut) {
$jour = $jour - 1;
$date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
$cellule = '| ';
$cellule .= ($affichage_hors_mois == 'oui') ? strval(date('j', $date)) : ' ';
$cellule .= ' | ';
$cellules_mois_prec = $cellule.$cellules_mois_prec;
}
$body .= $cellules_mois_prec;
// Remplissage des cellules du mois
$jour = 1;
$date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
while (date('m', $date) == $mois_choisi) {
if ((date('w', $date) == $jour_debut) && ($jour != 1))
$body .= '
';
$cellule = '| ' : 'libre">';
if (!isset($mini_evenements[date('d-m-Y', $date)])) {
// Il n'y pas d'evenement pour ce jour, on affiche la date
$cellule .= strval(date('j', $date));
}
else {
// Il y a un ou plusieurs evenements, on construit le lien et la bulle d'info
$index_evt1 = $mini_evenements[date('d-m-Y', $date)][0];
$lien = 'spip.php?page=evenement&id_article='.$evenements[$index_evt1]['id'];
$bulle = $evenements[$index_evt1]['heure'].' - '.$evenements[$index_evt1]['titre'];
if (count($mini_evenements[date('d-m-Y', $date)]) > 1)
$bulle .= '...('.strval(count($mini_evenements[date('d-m-Y', $date)])).' '._T('sarkaspip:plusieurs_evenements_jour').')';
$cellule .= ''.strval(date('j', $date)).'';
}
$cellule .= ' | ';
$body .= $cellule;
$jour = $jour+1;
$date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
}
// Cellules des jours visibles suivant le mois courant (toujours inclus strictement dans la derniere ligne)
while (date('w', $date) != $jour_debut) {
$cellule = '';
$cellule .= ($affichage_hors_mois == 'oui') ? strval(date('j', $date)) : ' ';
$cellule .= ' | ';
$body .= $cellule;
$jour = $jour+1;
$date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
}
$body .= '
';
// Fin du tableau
$body .= '';
$body .= '
';
return $body;
}
// ===================================================
// Auteur: Smellup
// Fonction : Insertion du resume des evenements du mois
// Utilisation : Choix possible de la taille max de la
// liste et du critere de selection des
// evenements (tous le mois ou juste la
// fin du mois % date du jour)
// ===================================================
//
function agenda_mini_footer($id_agenda=0, $critere='oui', $max_mois=6, $taille=5, $format='d-m H:i') {
if ($id_agenda == 0)
return;
if ($taille == 0)
return;
// Init du contexte
$nom_mois = agenda_mois(true, 'entier');
$contexte_aff = agenda_definir_contexte(0);
$mois_choisi = $contexte_aff['mois_base'];
$annee_choisie = $contexte_aff['annee_base'];
$url_base = $contexte_aff['url_base'];
// Init de l'annee et du mois courant
$mois_courant = affdate_base(date('Y-m-d'), 'mois');
$annee_courante = affdate_base(date('Y-m-d'), 'annee');
// Init des listes d'evenements
$evenements = agenda_recenser_evenement(0);
$count_evt = count($evenements);
// Init de la date de base pour calculer le nombre d'evenements du resume a afficher
// - si le mois choisi est le mois courant, la date de base est la date courante, on affichera donc les evenements posterieurs
// - si le mois choisi est anterieur ou posterieur au mois courant, la date de base est le 1er jour du mois
if (($annee_choisie==$annee_courante) && ($mois_choisi==$mois_courant))
$date_base = date('Y-m-d');
else
$date_base = date('Y-m-d', mktime(0,0,0,$mois_choisi,1,$annee_choisie));
// Init de la chaine
$footer = NULL;
// Extraction des evenements du resume si demande
if ($critere == 'oui') {
$i = 1;
$liste_complete = FALSE;
$cellule = NULL;
$count_liste = 0;
while ((!$liste_complete) && ($i <= $count_evt)) {
$annee = $evenements[$i]['annee'];
$mois = $evenements[$i]['mois'];
$jour = $evenements[$i]['jour'];
$date = mktime(0,0,0,intval($mois), intval($jour), intval($annee));
if ((date('Y-m-d',$date) >= $date_base) && ($count_liste < $taille)) {
if ($count_liste == 0) $cellule .= '';
$footer .= $cellule;
}
return $footer;
}
?>