Changeset 60057 in spip-zone


Ignore:
Timestamp:
Apr 3, 2012, 3:53:25 PM (7 years ago)
Author:
cedric@…
Message:

Le plugin agenda se deleste de son fork historique de #CALENDRIER_MINI et necessite le plugin calendrier_mini en version 2.0.0
Un exemple d'utilisation est donne dans squelettes/extra1
On evacue tout le vieux code issu du vieil agenda php de SPIP (on ne garde que le critere agenda_full)

Location:
_plugins_/agenda/trunk
Files:
2 added
2 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/agenda/trunk/inc/agenda_filtres.php

    r59242 r60057  
    195195}
    196196
    197 /**
    198  * Ajoute un evenement dans un buffer, comme le filtre agenda_memo,
    199  * mais en prenant une date de debut et de fin de l'evenement.
    200  *
    201  * La liste est retournee et videe par un appel vide a cette fonction
    202  * (voir le filtre agenda_mini)
    203  *
    204  * @param string $date_deb Date de debut de l'evenement '2010-10-09 13:30:00'
    205  * @param string $date_fin Date de fin de l'evenement
    206  * @param string $titre Titre de l'evenement
    207  * @param string $descriptif Descriptif de l'evenement
    208  * @param string $lieu Lieu de l'evenement
    209  * @param string $url URL du lien
    210  * @param string $cal ?
    211  * @param string $var_date
    212  *      Inserer la date du jour parcouru dans l'URL du lien (de chaque evenement).
    213  *      Passer pour cela le nom de la variable a utiliser
    214  * (typiquement, #ENV{var_date} avec le mini-calendrier).
    215  *
    216  * @return
    217 **/
    218 function agenda_memo_full($date_deb=0, $date_fin=0 , $titre='', $descriptif='', $lieu='', $url='', $cal='', $var_date='')
    219 {
    220         static $agenda = array();
    221         if (!$date_deb) {
    222                 $res = $agenda;
    223                 $agenda=array();
    224                 return $res;
    225         }
    226         $url=str_replace("&","&",$url);
    227        
    228         $idatedeb = date_ical($date_deb);
    229         $idatefin = date_ical($date_fin);
    230         $cal = trim($cal); // func_get_args (filtre alterner) rajoute \n !!!!
    231         $startday1=explode(' ',$date_deb);
    232         $startday1=$startday1['0'].' 00:00:00';
    233         $ts_startday1=strtotime($startday1);
    234         $ts_date_fin=strtotime($date_fin);
    235         $maxdays=365;
    236         $d1 = date('Y-m-d', strtotime($date_deb));
    237        
    238         while (($ts_startday1 <= $ts_date_fin) && ($maxdays-- > 0))
    239         {
    240                 $day=date('Y-m-d H:i:s',$ts_startday1);
    241                 $d2 = date('Y-m-d', $ts_startday1);
    242                
    243                 if ($var_date) {
    244                         $url = parametre_url($url, $var_date, $d2);
    245                 }
    246                
    247                 // element a ajouter:
    248                 $a2 = array (
    249                              'CATEGORIES' => $cal,
    250                              'DTSTART' => $idatedeb,
    251                              'DTEND' => $idatefin,
    252                              'DESCRIPTION' => $descriptif,
    253                              'SUMMARY' => $titre,
    254                              'LOCATION' => $lieu,
    255                              'URL' => $url);
    256                 //DEBUG echo "\n<!-- ";
    257                 //DEBUG echo "" . sprintf("d1=%s d2=%s",$d1,$d2) . "";
    258                 // On extrait la bonne liste:
    259                 $tab = (array)$agenda[$cal][(date_anneemoisjour($day))];
    260                 // si la date de debut de l'element est exactement la
    261                 // date du jour courant ET qu'il y a deja des
    262                 // evenements, on met l'element a ajouter en premier
    263                 // dans la liste; sinon on l'ajoute a la fin comme
    264                 // d'habitude:
    265                 if( $d1 == $d2 && count($tab)>0 ) {
    266                   //DEBUG echo " a2a1 ";
    267                   array_unshift($tab,$a2);
    268                 } else {
    269                   //DEBUG echo " a1a2 ";
    270                   $tab[] = $a2;
    271                 }
    272                 // On remplace par la nouvelle liste:
    273                 $agenda[$cal][(date_anneemoisjour($day))] = $tab;
    274                 //DEBUG echo " -->";
    275                 $ts_startday1 += 26*3600; // le jour suivant : +26 h pour gerer les changements d'heure
    276                 $ts_startday1 = mktime(0, 0, 0, date("m",$ts_startday1),
    277                 date("d",$ts_startday1), date("Y",$ts_startday1)); // et remise a zero de l'heure       
    278         }
    279         // toujours retourner vide pour qu'il ne se passe rien
    280         return "";
    281 }
    282 
    283 
    284 function agenda_memo_evt_full($date_deb=0, $date_fin=0 , $titre='', $descriptif='', $lieu='', $url='', $cal='')
    285 {
    286         static $evenements = array();
    287         if (!$date_deb) return $evenements;
    288         $url=str_replace("&amp;","&",$url);
    289        
    290         $idatedeb = date_ical(reset(explode(" ",$date_deb))." 00:00:00");
    291         $idatefin = date_ical(reset(explode(" ",$date_fin))." 00:00:00");
    292         $cal = trim($cal); // func_get_args (filtre alterner) rajoute \n !!!!
    293         $startday1=explode(' ',$date_deb);
    294         $startday1=$startday1['0'].' 00:00:00';
    295         $ts_startday1=strtotime($startday1);
    296         $ts_date_fin=strtotime($date_fin);
    297         $maxdays=365;
    298         while (($ts_startday1<=$ts_date_fin)&&($maxdays-->0))
    299         {
    300                 $day=date('Y-m-d H:i:s',$ts_startday1);
    301                 $evenements[$cal][(date_anneemoisjour($day))][] =  array(
    302                         'CATEGORIES' => $cal,
    303                         'DTSTART' => $idatedeb,
    304                         'DTEND' => $idatefin,
    305                         'DESCRIPTION' => $descriptif,
    306                         'SUMMARY' => $titre,
    307                         'LOCATION' => $lieu,
    308                         'URL' => $url);
    309                 $ts_startday1 += 26*3600; // le jour suivant : +26 h pour gerer les changements d'heure
    310                 $ts_startday1 = mktime(0, 0, 0, date("m",$ts_startday1),
    311                 date("d",$ts_startday1), date("Y",$ts_startday1)); // et remise a zero de l'heure       
    312         }
    313 
    314         // toujours retourner vide pour qu'il ne se passe rien
    315         return "";
    316 }
    317 
    318 function agenda_affiche_full($i)
    319 {
    320         $args = func_get_args();
    321         $nb = array_shift($args); // nombre d'evenements (on pourrait l'afficher)
    322         $evt = array_shift($args);
    323         $type = array_shift($args);
    324 
    325         $agenda = agenda_memo_full(0);
    326         $evt_avec = array();
    327         $evt_sans = array();
    328         if ($nb) {
    329                 foreach (($args ? $args : array_keys($agenda)) as $k) {
    330                         if (isset($agenda[$k])&&is_array($agenda[$k]))
    331                                 foreach($agenda[$k] as $d => $v) {
    332                                         $evt_avec[$d] = isset($evt_avec[$d]) ? (array_merge($evt_avec[$d], $v)) : $v;
    333                                 }
    334                 }
    335                 $evenements = agenda_memo_evt_full(0);
    336                 foreach (($args ? $args : array_keys($evenements)) as $k) {
    337                         if (isset($evenements[$k])&&is_array($evenements[$k]))
    338                                 foreach($evenements[$k] as $d => $v) {
    339                                         $evt_sans[$d] = isset($evt_sans[$d]) ? (array_merge($evt_sans[$d], $v)) : $v;
    340                                 }
    341                 }
    342         }
    343 
    344         return agenda_periode($type, $nb, $evt_avec, $evt_sans);
    345 }
    346 
    347 
    348 function agenda_mini($i) {
    349   $args = func_get_args();
    350   $une_date = array_shift($args); // une date comme balise
    351   $sinon = array_shift($args);
    352   if (!$une_date) return $sinon;
    353   $type = 'mini';
    354   $agenda = Agenda_memo_full(0);
    355   $evt = array();
    356   foreach (($args ? $args : array_keys($agenda)) as $k) {
    357       if (is_array($agenda[$k]))
    358                 foreach($agenda[$k] as $d => $v) {
    359                   $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v;
    360                 }
    361     }
    362         $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date));
    363     include_spip('inc/agenda');
    364     return http_calendrier_init($la_date, $type, '', '', '', array('', $evt));
    365 }
    366 
    367 function http_calendrier_mini($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) {
    368         list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;
    369 
    370         if ($sansduree)
    371                 foreach($sansduree as $d => $r) {
    372                         $evenements[$d] = !$evenements[$d] ? $r :
    373                                  array_merge($evenements[$d], $r);
    374                          }
    375 
    376         if (!$premier_jour) $premier_jour = '01';
    377         if (!$dernier_jour) {
    378                 $dernier_jour = 31;
    379                 while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--;
    380         }
    381 
    382         // affichage du debut de semaine hors periode
    383         $ligne = '';
    384         $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee));
    385         for ($i=$debut ? $debut : 7;$i>1;$i--) {
    386                 $mois_precedent = mktime(1,1,1,$mois-1,1,$annee);
    387                 $jour_mois_precedent = date('t', $mois_precedent)+2-$i;
    388                 $ligne .= "\n\t<td class=\"horsperiode\">$jour_mois_precedent</td>";
    389         }
    390 
    391         $total = '';
    392         for ($j=$premier_jour; $j<=$dernier_jour; $j++) {
    393                 $nom = mktime(1,1,1,$mois,$j,$annee);
    394                 $jour = date("d",$nom);
    395                 $jour_semaine = date("w",$nom);
    396                 $mois_en_cours = date("m",$nom);
    397                 $annee_en_cours = date("Y",$nom);
    398                 $amj = date("Y",$nom) . $mois_en_cours . $jour;
    399 
    400                 if ($jour_semaine==1 AND $ligne != '') {
    401                         $total .= "\n<tr>$ligne\n</tr>";
    402                         $ligne = '';
    403                 }
    404 
    405                 $evts = $evenements[$amj];
    406                 $class="";
    407                 if ($evts) {
    408                         $nb_elmts= @count($evts);
    409                         if ($nb_elmts>1){
    410                                 $evts = "<a href='".$evts[0]['URL']."' title='".$nb_elmts." ".utf8_encode(_T('agenda:evenements'))."'>".intval($jour)."</a>";
    411                         }
    412                         else{
    413                                 $evts = "<a href='".$evts[0]['URL']."' title='".$evts[0]['SUMMARY'].
    414                         "'>".intval($jour)."</a>";
    415                         }
    416                         $class='occupe';
    417 
    418                 }
    419                 else {
    420                         $evts = intval($jour);
    421                         $class='libre';
    422                 }
    423                 $ligne .= "\n\t<td  class='$class".($amj == date("Ymd")?' today':'')."'>" . $evts . "\n\t</td>";
    424         }
    425         $jour_mois_suivant=1;
    426         // affichage de la fin de semaine hors periode
    427         for($j=$jour_semaine ? $jour_semaine : 7; $j<7; $j++) {
    428                 $ligne .= "\n\t<td class=\"horsperiode\">".$jour_mois_suivant++."</td>";
    429         }
    430 
    431         return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : '');
    432 }
    433 
    434 if(!function_exists('http_calendrier_init')){
    435         ///
    436         /// init: calcul generique des evenements a partir des tables SQL
    437         /// Fonction récupérée des anciens SPIP
    438         ///
    439        
    440         // http://doc.spip.org/@http_calendrier_init
    441         function http_calendrier_init($time='', $type='mois', $echelle='', $partie_cal='', $script='', $evt=null){
    442                 if (is_array($time)) {
    443                         list($j,$m,$a) = $time;
    444                         if ($j+$m+$a) $time = @mktime(0,0,0, $m, $j, $a);
    445                 }
    446        
    447                 if (!is_numeric($time)) $time = time();
    448        
    449                 $jour = date("d",$time);
    450                 $mois = date("m",$time);
    451                 $annee = date("Y",$time);
    452                         if (!$echelle = intval($echelle)) $echelle = DEFAUT_D_ECHELLE;
    453                         if (!is_string($type) OR !preg_match('/^\w+$/', $type)) $type ='mois';
    454                         if (!is_string($partie_cal) OR !preg_match('/^\w+$/', $partie_cal))
    455                                 $partie_cal =  DEFAUT_PARTIE;
    456                 list($script, $ancre) =
    457                   calendrier_retire_args_ancre($script);
    458                 if (is_null($evt)) {
    459                         $g = 'quete_calendrier_' . $type;
    460                         $evt = quete_calendrier_interval($g($annee,$mois, $jour));
    461                         quete_calendrier_interval_articles("'$annee-$mois-00'", "'$annee-$mois-1'", $evt[0]);
    462                 }
    463        
    464                 $f = 'http_calendrier_' . $type;
    465                 if (!function_exists($f)) $f = 'http_calendrier_mois';
    466                 return $f($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt);
    467         }
    468 }
    469 if(!function_exists('calendrier_retire_args_ancre')){
    470         ///
    471         ///Utilitaires sans html ni sql
    472         ///Fonction récupérée des anciens SPIP
    473         ///
    474        
    475         /// Utilitaire de separation script / ancre
    476         /// et de retrait des arguments a remplacer
    477         /// (a mon avis cette fonction ne sert a rien, puisque parametre_url()
    478         /// sait remplacer les arguments au bon endroit -- Fil)
    479         /// Pas si simple: certains param ne sont pas remplaces
    480         /// et doivent reprendre leur valeur par defaut -- esj.
    481         /// http://doc.spip.org/@calendrier_retire_args_ancre
    482         function calendrier_retire_args_ancre($script){
    483        
    484                 if (preg_match(',^(.*)#([\w-]+)$,',$script, $m)) {
    485                         $script = $m[1];
    486                         $ancre = $m[2];
    487                 } else { $ancre = ''; }
    488        
    489                 foreach(array('echelle','jour','mois','annee', 'type', 'partie_cal', 'bonjour') as $arg) {
    490                         $script = preg_replace("/([?&])$arg=[^&]*&/",'\1', $script);
    491                         $script = preg_replace("/([?&])$arg=[^&]*$/",'\1', $script);
    492                 }
    493                 if (in_array(substr($script,-1),array('&','?'))) $script =   substr($script,0,-1);
    494                 return array(quote_amp($script), $ancre);
    495         }
    496 }
    497197
    498198?>
  • _plugins_/agenda/trunk/paquet.xml

    r59747 r60057  
    22        prefix="agenda"
    33        categorie="date"
    4         version="3.5.5"
     4        version="3.6.0"
    55        etat="test"
    66        compatibilite="[3.0.0-dev;["
     
    3636        <utilise nom="Fulltext" compatibilite="[0.2;[" />
    3737        <utilise nom="mots" compatibilite="[2.0.0;[" />
     38        <necessite nom="calendriermini" compatibilite="[2.0.0;[" />
    3839
    3940        <menu nom="evenements" titre="agenda:evenements" parent="menu_edition" icone="images/evenement-16.png" />
  • _plugins_/agenda/trunk/squelettes/extra1/agenda.html

    r58799 r60057  
    66
    77]
     8#CALENDRIER_MINI{#ENV{date_debut},date_debut,#SELF,#URL_PAGE{calendrier_mini_event.json}}
    89<B_mois>
    910#ANCRE_PAGINATION
Note: See TracChangeset for help on using the changeset viewer.