Server : Apache System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64 User : hednacluml ( 122243) PHP Version : 8.3.9 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Directory : /home/hednacluml/liberlog/plugins/auto/agenda/ |
<?php /** * Plugin Agenda 4 pour Spip 3.2 * Licence GPL 3 * * 2006-2020 * Auteurs : cf paquet.xml */ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('public/agenda'); include_spip('inc/agenda_timezone'); /** * Ajout d'un offset a une date * * @param string $date * @param int $secondes * peut etre une expression math : 24*60*60 * @param string $format * format de sortie de la date * @return string */ function agenda_dateplus($date, $secondes, $format = 'Y-m-d H:i:s') { $date = strtotime($date)+eval("return $secondes;"); // permet de passer une expression return date($format, $date); } /** * decale les mois de la date. * cette fonction peut raboter le jour si le nouveau mois ne les contient pas * exemple 31/01/2007 + 1 mois => 28/02/2007 * * @param string $date * @param int $decalage * @param string $format * @return string */ function agenda_moisdecal($date, $decalage, $format = 'Y-m-d H:i:s') { include_spip('inc/filtres'); if (($decalage = intval($decalage)) === 0) { return $date; } $date_array = recup_date($date); if (empty($date_array)) { // on ne fait rien si on sait par lire la date return $date; } list($annee, $mois, $jour) = $date_array; if (empty($jour)) { $jour = 1; } if (empty($mois)) { $mois = 1; } $mois2 = (int)$mois + $decalage; $date2 = mktime(1, 1, 1, $mois2, (int) $jour, $annee); // mois normalement attendu $mois3 = date('m', mktime(1, 1, 1, $mois2, 1, $annee)); // et si le mois de la nouvelle date a moins de jours... $mois2 = date('m', $date2); if ($mois2 - $mois3) { $date2 = mktime(1, 1, 1, $mois2, 0, date('Y',$date2)); } return date($format, $date2); } /** * decale les jours de la date. * * @param string $date * @param int $decalage * @param string $format * @return string */ function agenda_jourdecal($date, $decalage, $format = 'Y-m-d H:i:s') { include_spip('inc/filtres'); if (($decalage = intval($decalage)) === 0) { return $date; } $date_array = recup_date($date); if (empty($date_array)) { // on ne fait rien si on sait par lire la date return $date; } list($annee, $mois, $jour) = $date_array; if (empty($jour)) { $jour = 1; } if (empty($mois)) { $mois = 1; } $jour2 = (int)$jour + $decalage; $date2 = mktime(1, 1, 1, (int)$mois, $jour2, $annee); return date($format, $date2); } /** * Filtre pour tester si une date est dans le futur * [(#DATE|agenda_date_a_venir) Dans le futur...] * * @param string $date_test * @param string $date_ref * date de reference, par defaut celle du serveur (argument utile pour les tests unitaires) * @return string */ function agenda_date_a_venir($date_test, $date_ref = null) { if (is_null($date_ref)) { $date_ref = $_SERVER['REQUEST_TIME']; } else { $date_ref = strtotime($date_ref); } return (strtotime($date_test)>$date_ref)?' ':''; } /** * Filtre pour tester si une date est dans le passe * [(#DATE|agenda_date_passee) Dans le passe...] * * @param string $date_test * @param string $date_ref * date de reference, par defaut celle du serveur (argument utile pour les tests unitaires) * @return string */ function agenda_date_passee($date_test, $date_ref = null) { if (is_null($date_ref)) { $date_ref = $_SERVER['REQUEST_TIME']; } else { $date_ref = strtotime($date_ref); } return (strtotime($date_test) < $date_ref) ? ' ' : ''; } /** * Determiner la date de debut de l'affichage de la liste des evenements * en fonction du mode demande et de la date courante * @param string $date * @param string $affichage_debut * @return string */ function agenda_date_debut_liste($date, $affichage_debut = 'date_jour') { switch ($affichage_debut) { case 'date_jour': break; case 'date_veille': $date = agenda_jourdecal($date, -1); break; case 'debut_semaine': $t = strtotime($date); $date = agenda_jourdecal($date, -(date('N', $t)-1)); break; case 'debut_semaine_prec': $t = strtotime($date); $date = agenda_jourdecal($date, -(date('N', $t)-1+7)); break; case 'debut_mois': $t = strtotime($date); $date = agenda_jourdecal($date, -(date('j', $t)-1)); break; case 'debut_mois_prec': $t = strtotime($date); $date = agenda_jourdecal($date, -(date('j', $t)-1)); // debut de mois $date = agenda_moisdecal($date, -1); // precedent break; case 'debut_mois_1': case 'debut_mois_2': case 'debut_mois_3': case 'debut_mois_4': case 'debut_mois_5': case 'debut_mois_6': case 'debut_mois_7': case 'debut_mois_8': case 'debut_mois_9': case 'debut_mois_10': case 'debut_mois_11': case 'debut_mois_12': $t = strtotime($date); $mdebut = intval(substr($affichage_debut, strlen('debut_mois_'))); $mcourant = date('n', $t); $offset = ($mcourant-$mdebut+12)%12; $date = agenda_jourdecal($date, -(date('j', $t)-1)); // debut de mois $date = agenda_moisdecal($date, -$offset); break; } return $date; } /** * Afficher la periode de l'agenda : * Le nom du mois si nb_mois = 1 * L'annee si nb_mois=12 et debut du mois = janvier * sinon : mois annee - mois annee (xxx 12 - yyy 13) * si le debut de la periode est fixe (debut d'un mois donnee), on precede de * "Annee" ou "Saison" la periode * * @param string $date * @param int $nb_mois * @param string $affichage_debut * @return string */ function affdate_periode($date, $nb_mois, $affichage_debut = 'date_jour') { $fixe = in_array($affichage_debut, array('debut_mois_1', 'debut_mois_2', 'debut_mois_3', 'debut_mois_4', 'debut_mois_5', 'debut_mois_6', 'debut_mois_7', 'debut_mois_8', 'debut_mois_9', 'debut_mois_10', 'debut_mois_11', 'debut_mois_12')); if ($nb_mois == 1) { return affdate_mois_annee($date); } if ($nb_mois == 12 and mois($date) == 1) { return ($fixe?_T('agenda:label_annee').' ':'').annee($date); } return ($fixe?_T('agenda:label_periode_saison').' ':'').affdate_mois_annee($date).' - '.affdate_mois_annee(agenda_moisdecal($date, $nb_mois-1)); } /** * Retrouver le id_rubrique parent agenda d'une rubrique * (elle-meme inclue) * * @param $id_rubrique * @return int */ function agenda_rubrique_actif_explicite($id_rubrique) { if ($id_rubrique > 0) { // est-elle de type agenda elle-meme ? if (sql_countsel('spip_rubriques', 'agenda=1 and id_rubrique=' .intval($id_rubrique))) { return $id_rubrique; } // Sinon on remonte la hierarchie if (!function_exists('calcul_hierarchie_in')) { include_spip('inc/rubriques'); } $in = calcul_hierarchie_in($id_rubrique); $parents_agenda = sql_allfetsel('id_rubrique','spip_rubriques', sql_in('id_rubrique', $in).' AND agenda=1'); if ($parents_agenda) { $parents_agenda = array_map('reset', $parents_agenda); $in = explode(',', $in); $parents_agenda = array_intersect($in, $parents_agenda); if ($parents_agenda) { return reset($parents_agenda); } } } // Rubrique négative utilisee dans le plugin Page unique if ($id_rubrique == -1) { return $id_rubrique; } return false; } /** * Afficher de facon textuelle les dates de debut et fin en fonction des cas * - Le lundi 20 fevrier a 18h * - Le 20 fevrier de 18h a 20h * - Du 20 au 23 fevrier * - du 20 fevrier au 30 mars * - du 20 fevrier 2007 au 30 mars 2008 * * @param string $date_debut : la date de début au format mysql * @param string $date_fin : la date de fin au format mysql * @param string $horaire : oui / non, permet d'afficher l'horaire, toute autre valeur n'indique que le jour * @param string $forme : forme que prendra la date : * - annee (afficher systématiquement l'année pour la date finale, ne pas faire appelle à affdate_jourcourt) * - abbr (afficher le nom des jours en abbrege) * - hcal (generer une date au format hcal) * - h-event (generer une date au format h-event, dans une balise <time> HTML5) * @return string * @deprecated * @see affdate_debut_fin */ function agenda_affdate_debut_fin($date_debut, $date_fin, $horaire = 'oui', $forme = '') { $s = affdate_debut_fin($date_debut, $date_fin, $horaire, $forme); return unicode2charset(charset2unicode($s, 'AUTO')); }