Changeset 57368 in spip-zone


Ignore:
Timestamp:
Jan 20, 2012, 10:11:12 AM (8 years ago)
Author:
kent1@…
Message:

Un début de truc fonctionnel en SPIP 3.0

Location:
_plugins_/calendrier_mini/trunk
Files:
1 added
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/calendrier_mini/trunk/demos/minical_demo.html

    r57352 r57368  
    11#CACHE{7200}
    22<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3 <html dir="#LANG_DIR" lang="#LANG">
     3[(#REM) Cf.: http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/
     4]<!--[if lt IE 7 ]> <html dir="#LANG_DIR" lang="#LANG" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" class="[(#LANG_DIR)][ (#LANG)] no-js ie ie6"> <![endif]-->
     5<!--[if IE 7 ]> <html dir="#LANG_DIR" lang="#LANG" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" class="[(#LANG_DIR)][ (#LANG)] no-js ie ie7"> <![endif]-->
     6<!--[if IE 8 ]> <html dir="#LANG_DIR" lang="#LANG" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" class="[(#LANG_DIR)][ (#LANG)] no-js ie ie8"> <![endif]-->
     7<!--[if IE 9 ]> <html dir="#LANG_DIR" lang="#LANG" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" class="[(#LANG_DIR)][ (#LANG)] no-js ie ie9"> <![endif]-->
     8<!--[if (gt IE 9)|!(IE)]><!--> <html dir="#LANG_DIR" lang="#LANG" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" class="[(#LANG_DIR)][ (#LANG)] no-js"> <!--<![endif]-->
    49<head>
     10<script type='text/javascript'>/*<![CDATA[*/(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);/*]]>*/</script>
    511        <title>Exemple #[(#REM)]CALENDRIER_MINI</title>
    6         <INCLURE{fond=inc-head}>
     12        <INCLURE{fond=#EVAL{_DIR_PLUGIN_DIST}inclure/head} />
    713        <link rel="stylesheet" href="[(#CHEMIN{minical.css}|direction_css)]" type="text/css" media="projection, screen, tv" />
    814</head>
    915
    10 <body class="page_sommaire">
    11 <div id="page">
     16<body class="pas_surlignable page_demo_minical">
     17<div class="page">
     18        <INCLURE{fond=inclure/header} />
     19        <INCLURE{fond=inclure/nav,env} />
    1220
    13         [(#REM) Entete de la page + titre du site ]
    14         <INCLURE{fond=inc-entete}>
    15 
    16         [(#REM) Fil d'Ariane ]
    17         <div id="hierarchie"><a href="#URL_PAGE{minical_demo}">Exemple #[(#REM)]CALENDRIER_MINI</a></div>
    18 
    19         <div id="conteneur">
    20 
    21                 [(#REM) Contenu principal : derniers articles publies ]
    22                 <div id="contenu">
    23 
    24                         <h1 class="invisible">#NOM_SITE_SPIP</h1>
    25                         [<div class="chapo">(#DESCRIPTIF_SITE_SPIP)</div>]
     21        <div class="main">
     22                [(#REM) Contenu principal : contenu de l'article ]
     23                <div class="wrapper hfeed">
     24                <div class="content hentry" id="content">
    2625
    2726                        [(#REM) Les deux derniers articles ]
     
    4645                        </div>
    4746                        </B_articles_recents>[
    48    <h2>Rien pour (#DATE_ARCHIVES|affdate)[ (#ENV{id_rubrique}?{dans ce secteur})]</h2>
    49    ]<//B_articles_recents>
     47                        <h2>Rien pour (#DATE_ARCHIVES|affdate)[ (#ENV{id_rubrique}?{dans ce secteur})]</h2>
     48                        ]<//B_articles_recents>
    5049
    5150                        <br class="nettoyeur" />
    5251
    53                 </div><!-- fin contenu -->
     52                </div><!--.content-->
     53                </div><!--.wrapper-->
    5454
    5555                [(#REM) Menu de navigation laterale ]
    56                 <div id="navigation">
    57                
    58                 [(#MODELE{rubrique_calendrier}
    59                         {self=#URL_PAGE{minical_demo}}
    60                         {var_date=archives}
    61                         {date=#ENV{archives,#DATE}}
    62                         {lang}
    63                         {id_rubrique}
    64                 )]
    65    
    66         <B_categories>
    67         <div id='categories' class="rubriques">
    68                 <h2 class="menu-titre"><:categories|ucfirst:></h2>
    69                 <ul>
    70                         <BOUCLE_categories(RUBRIQUES){racine}>[
    71                         <li>[(#EXPOSE{<b>})]
    72                         <a href="(#URL_PAGE{minical_demo}|parametre_url{id_rubrique,#ID_RUBRIQUE})">#TITRE</a>
    73                         [(#EXPOSE{</b>})]</li>
    74                         ]</BOUCLE_categories>
    75                 </ul>
    76         </div>
    77         </B_categories>
    78    
    79    [(#MODELE{archives_mensuelles}{id_rubrique}{archives}{self=[(#URL_PAGE{minical_demo})],lang})]
    80    
    81         [(#MODELE{select_archives_mensuelles}{id_rubrique,archives,self=#URL_PAGE{minical_demo},lang})]
    82    
    83         [<div>(#MENU_LANG)<small>(<a href="[(#SELF|parametre_url{lang,''})]">toutes les langues</a>)</small><br class="nettoyeur" /></div>]
     56                <div class="aside">
     57                        [(#MODELE{rubrique_calendrier,self=#SELF,var_date=archives,date=#ENV{archives,#DATE},lang,id_rubrique})]
     58                        <B_categories>
     59                        <div id='categories' class="rubriques">
     60                                <h2 class="menu-titre"><:categories|ucfirst:></h2>
     61                                <ul>
     62                                        <BOUCLE_categories(RUBRIQUES){racine}>[
     63                                        <li>[(#EXPOSE{<b>})]
     64                                        <a href="(#SELF|parametre_url{id_rubrique,#ID_RUBRIQUE})">#TITRE</a>
     65                                        [(#EXPOSE{</b>})]</li>
     66                                        ]</BOUCLE_categories>
     67                                </ul>
     68                        </div>
     69                        </B_categories>
     70           
     71                        [(#MODELE{archives_mensuelles,id_rubrique,archives,self=#SELF,lang})]
     72           
     73                        [(#MODELE{select_archives_mensuelles,id_rubrique,archives,self=#SELF,lang})]
     74           
     75                        [<div>(#MENU_LANG)<small>(<a href="[(#SELF|parametre_url{lang,''})]">toutes les langues</a>)</small><br class="nettoyeur" /></div>]
     76       
     77                        <div id="links" class="syndic">
     78                                <h2 class="menu-titre"><:liens|ucfirst:></h2>
     79                                <ul>
     80                                        <li><a href="http://zone.spip.org/trac/spip-zone/">Spip Zone</a></li>
     81                                        <li><a href="#URL_PAGE{minical_doc}"><:documentation|ucfirst:></a></li>
     82                                </ul>
     83                        </div>
     84                </div><!--.aside-->
     85        </div><!--.main-->
    8486
    85    <div id="links" class="syndic">
    86     <h2 class="menu-titre"><:liens|ucfirst:></h2>
    87     <ul>
    88      <li><a href="http://zone.spip.org/trac/spip-zone/">Spip Zone</a></li>
    89      <li><a href="#URL_PAGE{minical_doc}"><:documentation|ucfirst:></a></li>
    90     </ul>
    91    </div>
    92    
    93    
    94                 </div><!-- fin navigation -->
     87        <INCLURE{fond=inclure/footer,self=#SELF} />
    9588
    96         </div><!-- fin conteneur -->
    97 
    98         [(#REM) Pied de page ]
    99         <INCLURE{fond=inc-pied}{skel=#SQUELETTE}>
    100 
    101 </div><!-- fin page -->
    102 #SPIP_CRON
     89</div><!--.page-->
    10390</body>
    10491</html>
  • _plugins_/calendrier_mini/trunk/minical_fonctions.php

    r57349 r57368  
    33if (!defined("_ECRIRE_INC_VERSION")) return;    #securite
    44
    5 /* Balise #CALENDRIER_MINI
    6    Auteur James (c) 2006
    7    Plugin pour spip 1.9
    8    Licence GNU/GPL
    9 */
    10 
    11 include_spip('inc/vieilles_defs');
    125if (!defined('VAR_DATE')) define('VAR_DATE', 'archives');
    136
     
    2114function critere_archives($idb, &$boucles, $crit) {
    2215        $boucle = &$boucles[$idb];
     16        $objet = objet_type($boucle->id_table);
     17        spip_log($objet,'test');
     18        $date = objet_info($objet,'date');
     19        spip_log($date,'test');
    2320        $champ_date = "'" . $boucle->id_table ."." .
    24         $GLOBALS['table_date'][$boucle->type_requete] . "'";
     21        $date . "'";
    2522        $boucle->where[] = array(
    2623                'REGEXP',
    2724                $champ_date,
    2825                "sql_quote(('^' . interdire_scripts(entites_html(\$Pile[0]['".VAR_DATE."']))))"
    29  );
    30  
     26        );
    3127}
    3228
     
    4339                        <tr>' .$ret. '
    4440                        </tr>
    45                 </thead>'."\n";
    46 }
    47 
     41                        </thead>'."\n";
     42}
     43
     44if(!function_exists('agenda_memo')){
     45        // Cette fonction memorise dans un tableau indexe par son 5e arg
     46        // un evenement decrit par les 4 autres (date, descriptif, titre, URL).
     47        // Appellee avec une date nulle, elle renvoie le tableau construit.
     48        // l'indexation par le 5e arg autorise plusieurs calendriers dans une page
     49        function agenda_memo($date=0 , $descriptif='', $titre='', $url='', $cal=''){
     50                static $agenda = array();
     51                if (!$date) return $agenda;
     52                $idate = date_ical($date);
     53                $cal = trim($cal);
     54                $agenda[$cal][(date_anneemoisjour($date))][] =  array(
     55                        'CATEGORIES' => $cal,
     56                        'DTSTART' => $idate,
     57                        'DTEND' => $idate,
     58                        'DESCRIPTION' => texte_script($descriptif),
     59                        'SUMMARY' => texte_script($titre),
     60                        'URL' => $url);
     61                // toujours retourner vide pour qu'il ne se passe rien
     62                return "";
     63        }
     64}
    4865function agenda_minical($i) {
    49     $args = func_get_args();
    50     $une_date = array_shift($args); // une date comme balise
    51     $sinon = array_shift($args);
    52     if (!$une_date) return $sinon;
    53     $type = 'minical';
    54     $agenda = agenda_memo(0);
    55     $evt = array();
    56     foreach (($args ? $args : array_keys($agenda)) as $k) { 
    57         if (is_array($agenda[$k]))
    58                         foreach($agenda[$k] as $d => $v) {
    59                             $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v;
    60                         }
    61     }
    62     $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date));
    63     include_spip('inc/agenda');
    64     return http_calendrier_init($la_date, $type, '', '', '', array('', $evt));
     66        $args = func_get_args();
     67        $une_date = array_shift($args); // une date comme balise
     68        $sinon = array_shift($args);
     69        if (!$une_date) return $sinon;
     70        $type = 'minical';
     71        $agenda = agenda_memo(0);
     72        $evt = array();
     73        foreach (($args ? $args : array_keys($agenda)) as $k) { 
     74                if (is_array($agenda[$k]))
     75                        foreach($agenda[$k] as $d => $v) {
     76                                $evt[$d] = $evt[$d] ? (array_merge($evt[$d], $v)) : $v;
     77                        }
     78        }
     79        $la_date = mktime(0, 0, 0, mois($une_date), 1, annee($une_date));
     80        include_spip('inc/agenda');
     81        return http_calendrier_init($la_date, $type, '', '', '', array('', $evt));
     82}
     83
     84if(!function_exists('http_calendrier_init')){
     85        ///
     86        /// init: calcul generique des evenements a partir des tables SQL
     87        /// Fonction récupérée des anciens SPIP
     88        ///
     89       
     90        // http://doc.spip.org/@http_calendrier_init
     91        function http_calendrier_init($time='', $type='mois', $echelle='', $partie_cal='', $script='', $evt=null){
     92                if (is_array($time)) {
     93                        list($j,$m,$a) = $time;
     94                        if ($j+$m+$a) $time = @mktime(0,0,0, $m, $j, $a);
     95                }
     96       
     97                if (!is_numeric($time)) $time = time();
     98       
     99                $jour = date("d",$time);
     100                $mois = date("m",$time);
     101                $annee = date("Y",$time);
     102                        if (!$echelle = intval($echelle)) $echelle = DEFAUT_D_ECHELLE;
     103                        if (!is_string($type) OR !preg_match('/^\w+$/', $type)) $type ='mois';
     104                        if (!is_string($partie_cal) OR !preg_match('/^\w+$/', $partie_cal))
     105                                $partie_cal =  DEFAUT_PARTIE;
     106                list($script, $ancre) =
     107                  calendrier_retire_args_ancre($script);
     108                if (is_null($evt)) {
     109                        $g = 'quete_calendrier_' . $type;
     110                        $evt = quete_calendrier_interval($g($annee,$mois, $jour));
     111                        quete_calendrier_interval_articles("'$annee-$mois-00'", "'$annee-$mois-1'", $evt[0]);
     112                }
     113       
     114                $f = 'http_calendrier_' . $type;
     115                if (!function_exists($f)) $f = 'http_calendrier_mois';
     116                return $f($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt);
     117        }
     118}
     119if(!function_exists('calendrier_retire_args_ancre')){
     120        ///
     121        ///Utilitaires sans html ni sql
     122        ///Fonction récupérée des anciens SPIP
     123        ///
     124       
     125        /// Utilitaire de separation script / ancre
     126        /// et de retrait des arguments a remplacer
     127        /// (a mon avis cette fonction ne sert a rien, puisque parametre_url()
     128        /// sait remplacer les arguments au bon endroit -- Fil)
     129        /// Pas si simple: certains param ne sont pas remplaces
     130        /// et doivent reprendre leur valeur par defaut -- esj.
     131        /// http://doc.spip.org/@calendrier_retire_args_ancre
     132        function calendrier_retire_args_ancre($script){
     133       
     134                if (preg_match(',^(.*)#([\w-]+)$,',$script, $m)) {
     135                        $script = $m[1];
     136                        $ancre = $m[2];
     137                } else { $ancre = ''; }
     138       
     139                foreach(array('echelle','jour','mois','annee', 'type', 'partie_cal', 'bonjour') as $arg) {
     140                        $script = preg_replace("/([?&])$arg=[^&]*&/",'\1', $script);
     141                        $script = preg_replace("/([?&])$arg=[^&]*$/",'\1', $script);
     142                }
     143                if (in_array(substr($script,-1),array('&','?'))) $script =   substr($script,0,-1);
     144                return array(quote_amp($script), $ancre);
     145        }
    65146}
    66147
    67148function http_calendrier_minical($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) {
    68      list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;
    69      if ($sansduree)
    70       foreach($sansduree as $d => $r) {
    71        $evenements[$d] = !$evenements[$d] ? $r :
    72          array_merge($evenements[$d], $r);
    73         }
    74      if (!$premier_jour) $premier_jour = '01';
    75      if (!$dernier_jour) {
    76       $dernier_jour = 31;
    77       while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--;
    78      }
    79      // affichage du debut de semaine hors periode
    80      $lang = _request('lang')?_request('lang'):$GLOBALS['spip_lang'];
    81      $ligne = '';
    82      $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee));
    83      $jour_semaine_lang=1;
    84      if($lang=='en') {
    85       $debut=$debut+1;
    86       if($debut==7) $debut=0;
    87       $jour_semaine_lang=0;
    88      }
    89      for ($i=$debut ? $debut : 7;$i>1;$i--) {
    90       $ligne .= "\n\t<td>&nbsp;</td>";
    91      }
    92      $total = '';
    93      for ($j=$premier_jour; $j<=$dernier_jour; $j++) {
    94       $nom = mktime(1,1,1,$mois,$j,$annee);
    95       $jour = date("d",$nom);
    96       $jour_semaine = date("w",$nom);
    97       $mois_en_cours = date("m",$nom);
    98       $annee_en_cours = date("Y",$nom);
    99       $amj = date("Y",$nom) . $mois_en_cours . $jour;
    100       if ($jour_semaine==$jour_semaine_lang AND $ligne != '') {
    101        $total .= "\n<tr>$ligne\n</tr>";
    102        $ligne = '';
    103       }
    104       $evts = $evenements[$amj];
    105       if ($evts) {
    106        $evts = "<a href=\"".$evts[0]['URL']."\">".$evts[0]['SUMMARY']."</a>";
    107       }
    108       else {
    109        $evts = intval($jour);
    110       }
    111       $ligne .= "\n\t<td".($amj == date("Ymd")?' class="today"':'').">" . $evts . "\n\t</td>";
    112      }
    113 
    114      // affichage de la fin de semaine hors periode
     149        list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;
     150        if ($sansduree)
     151                foreach($sansduree as $d => $r) {
     152                        $evenements[$d] = !$evenements[$d] ? $r :
     153                        array_merge($evenements[$d], $r);
     154                }
     155        if (!$premier_jour) $premier_jour = '01';
     156        if (!$dernier_jour) {
     157                $dernier_jour = 31;
     158                while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--;
     159        }
     160        // affichage du debut de semaine hors periode
     161        $lang = _request('lang')?_request('lang'):$GLOBALS['spip_lang'];
     162        $ligne = '';
     163        $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee));
     164        $jour_semaine_lang=1;
     165        if($lang=='en') {
     166                $debut=$debut+1;
     167                if($debut==7) $debut=0;
     168                $jour_semaine_lang=0;
     169        }
     170        for ($i=$debut ? $debut : 7;$i>1;$i--) {
     171                $ligne .= "\n\t<td>&nbsp;</td>";
     172        }
     173        $total = '';
     174        for ($j=$premier_jour; $j<=$dernier_jour; $j++) {
     175                $nom = mktime(1,1,1,$mois,$j,$annee);
     176                $jour = date("d",$nom);
     177                $jour_semaine = date("w",$nom);
     178                $mois_en_cours = date("m",$nom);
     179                $annee_en_cours = date("Y",$nom);
     180                $amj = date("Y",$nom) . $mois_en_cours . $jour;
     181                if ($jour_semaine==$jour_semaine_lang AND $ligne != '') {
     182                        $total .= "\n<tr>$ligne\n</tr>";
     183                        $ligne = '';
     184                }
     185                $evts = $evenements[$amj];
     186                if ($evts) {
     187                        $evts = "<a href=\"".$evts[0]['URL']."\">".$evts[0]['SUMMARY']."</a>";
     188                }
     189                else {
     190                        $evts = intval($jour);
     191                }
     192                $ligne .= "\n\t<td".($amj == date("Ymd")?' class="today"':'').">" . $evts . "\n\t</td>";
     193        }
     194
     195        // affichage de la fin de semaine hors periode
    115196        if ($lang=='en') {
    116197                for($j=($jour_semaine != 6) ? $jour_semaine + 1 : 7; $j<7; $j++) {
     
    122203                }
    123204        }
    124 
    125      return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : '');
     205       
     206        return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : '');
    126207}
    127208
  • _plugins_/calendrier_mini/trunk/modeles/select_archives_mensuelles.html

    r4957 r57368  
    11<B_archives_mensuelles>
    22<div id="form_archives" class="formulaire_spip">
    3   <form action='#ENV{self}' method='get'>
    4         [(#ENV{self}|form_hidden)]
    5         <fieldset>
    6         <legend><:archives|ucfirst:></legend>
    7         <p><label for="archives"><:date:></label>
    8   <select class="forml" name='archives'>
    9    <BOUCLE_archives_mensuelles(ARTICLES){branche ?}{lang}{par date}{inverse}>[
    10    <option value='[(#DATE|affdate{'Y-m'})]'[
    11    (#ENV{archives}|=={[(#DATE|affdate{'Y-m'})]}|?{selected="selected"})
    12    ]>(#DATE|affdate{'Y-m'}|unique{select}|affdate_mois_annee)</option>
    13    ]</BOUCLE_archives_mensuelles>
    14   </select>
    15   </p>
    16   <div class="spip_bouton"><input type="submit" value="<:bouton_valider:>" /></div>
    17  </fieldset>
    18   </form>
     3        <form action='#ENV{self}' method='get'>
     4                [(#ENV{self}|form_hidden)]
     5                <ul>
     6                        <li class="fieldset">
     7                                <h3 class="legend"><:archives|ucfirst:></h3>
     8                                <fieldset>
     9                                        <ul>
     10                                                <li class="editer editer_archives">
     11                                                        <label for="archives"><:date:></label>
     12                                                        <select class="forml" name='archives'>
     13                                                        <BOUCLE_archives_mensuelles(ARTICLES){branche ?}{lang}{par date}{inverse}>[
     14                                                                <option value='[(#DATE|affdate{'Y-m'})]'[
     15                                                                (#ENV{archives}|=={[(#DATE|affdate{'Y-m'})]}|?{selected="selected"})
     16                                                                ]>(#DATE|affdate{'Y-m'}|unique{select}|affdate_mois_annee)</option>
     17                                                        ]</BOUCLE_archives_mensuelles>
     18                                                        </select>
     19                                                </li>
     20                                        </ul>
     21                                </fieldset>
     22                        </li>
     23                </ul>
     24        </form>
    1925</div>
    2026</B_archives_mensuelles>
  • _plugins_/calendrier_mini/trunk/plugin.xml

    r57349 r57368  
    22        <nom>Mini Calendrier</nom>
    33        <auteur>[James->james@rezo.net]</auteur>
    4         <licence>GNU/GPL - (c) 2006</licence>
    5         <version>0.4.0</version>
    6         <etat>stable</etat>
     4        <licence>GNU/GPL - (c) 2006-2012</licence>
     5        <version>0.5.0</version>
     6        <etat>dev</etat>
    77        <icon>minical-32.png</icon>
    88        <description>Permet l'utilisation d'une balise #CALENDRIER_MINI.
    99_ Cette balise affiche un calendrier au design issu de dotclear et donc compatible avec les styles issus de ce syst&#232;me de blog.
    1010_ Lui sont adjoints d'autre &#233;l&#233;ments, tels que balises, crit&#232;res, mod&#232;les...
    11 _ Support, questions/r&#233;ponses via la liste de discussion [spip-zone@rezo.net->http://listes.rezo.net/mailman/listinfo/spip-zone]
    1211_ Icone de [Tempest->http://tempest.deviantart.com/] sous licence CC BY-NC-ND.</description>
    1312        <fonctions>minical_fonctions.php</fonctions>
    1413        <prefix>CalendrierMini</prefix>
    15         <necessite id="SPIP" version="[1.9.0;3.0.99]" />
     14        <necessite id="SPIP" version="[3.0.0-beta;3.0.99]" />
    1615        <categorie>date</categorie>
    1716</plugin>
Note: See TracChangeset for help on using the changeset viewer.