Changeset 122473 in spip-zone


Ignore:
Timestamp:
Feb 14, 2020, 10:04:24 AM (6 weeks ago)
Author:
Cerdic
Message:

Affichage des evenements avec timezone dans les squelettes : on revoit completement la copie pour alleger les ecritures

  • #DATE_DEBUT et #DATE_FIN deviennent des balises calculees qui prennent automatiquement en compte la timezone de l'evenement si il y en a une et si la config est activee pour le plugin
  • #DATE_DEBUT* et #DATE_FIN* permettent d'avoir les valeur brutes en base (donc dans le fuseau horaire par defaut du site)
  • #TIMEZONE est une balise permettant d'afficher la timezone de l'evenement (ou rien si il y en a pas), selon different format : #TIMEZONE{gmt} #TIMEZONE{abbr}
  • #TIMEZONE{#HORAIRE,abbr} permet d'afficher la timezone si il y a un horaire a l'evenement (sinon c'est pas tres utile), et au format abbr dans ce cas

Pour le reste les affichages de date ne changent pas, et sans modif de squelette les horaires des evenements restent bon a l'affichage, il manque juste la precision de la timezone
On a donc aucune degradation de l'existant si un admin active l'option et l'utilise dans l'admin sans modifier les squelettes, ce qui est plus robuste et facilite la transition

Location:
_plugins_/agenda/trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/agenda/trunk

    • Property subgit:lock:d45a9962911d4ed26ffb8c0750541005f3cf49a6 deleted
    • Property subgit:lock:bd3d47f40f7465c4db2a5b9d50d8188dcc3f1d56 set to 2020-02-14T11:05:24.821
  • _plugins_/agenda/trunk/inc/agenda_timezone.php

    r122431 r122473  
    1313
    1414/**
    15  * Affichage de la date d'un evenement en precisant le fuseau *si* config active et il y a une timezone sur l'evenement
    16  * @param string $date_debut
    17  * @param string $date_fin
    18  * @param string $horaire
    19  * @param string $timezone
     15 * Afficher la timezone
     16 * @param string $date
     17 *   date consideree, necessaire si on veut afficher en GMT+2 pour prendre en compte le daylight saving
     18 * @param string $timezone
     19 *   timezone
    2020 * @param string $format
    21  *   peux prendre plusieurs formats separes par des espaces dans la chaine, dont
    22  *     ceux supportes par affdate_debut_fin
    23  *     + ceux supportes par agenda_tz_to_string
    24  * @return string
    25  */
    26 function affdate_debut_fin_timezone($date_debut, $date_fin, $horaire='oui', $timezone='', $format='') {
    27         static $config_timezone;
    28         if (is_null($config_timezone)) {
    29                 include_spip('inc/config');
    30                 $config_timezone = lire_config('agenda/fuseaux_horaires',0);
    31         }
    32         $tz_string = '';
    33         $h = ($horaire === 'oui' or $horaire === true);
    34         if ($timezone and $config_timezone) {
    35                 $date_debut = agenda_tz_date_local_to_tz($date_debut, $timezone);
    36                 $date_fin = agenda_tz_date_local_to_tz($date_fin, $timezone);
    37                 if ($h) {
    38                         $tz_string = agenda_tz_to_string($date_debut, $timezone, $format);
    39                         if ($tz_string) {
    40                                 $tz_string = " <i class='date-tz'>$tz_string</i>";
    41                         }
    42                 }
    43         }
    44 
    45         $aff = affdate_debut_fin($date_debut, $date_fin, $horaire, $format) . $tz_string;
    46         return $aff;
    47 }
    48 
    49 
    50 /**
    51  * Afficher la date dans la TimeZone indiquee selon le format choisi
    52  * @param $date
    53  * @param $timezone
    54  * @param $format
    55  *   peux prendre plusieurs formats separes par des espaces dans la chaine, dont
    56  *     ceux supportes par affdate
    57  *     + ceux supportes par agenda_tz_to_string
    58  *     + tzonly pour n'afficher que la timezone
    59  * @param $tzformat
    60  * @return string
    61  */
    62 function affdate_timezone($date, $timezone, $format = 'entier', $tzformat='tznone') {
    63         static $config_timezone;
    64         if (is_null($config_timezone)) {
    65                 include_spip('inc/config');
    66                 $config_timezone = lire_config('agenda/fuseaux_horaires',0);
    67         }
    68         $tz_string = '';
    69         if ($timezone and $config_timezone){
    70                 $date = agenda_tz_date_local_to_tz($date, $timezone);
    71                 $tz_string = agenda_tz_to_string($date, $timezone, "$format $tzformat");
    72         }
    73         if (stripos("$format $tzformat",'tzonly')!==false) {
    74                 return $tz_string;
    75         }
     21 * @return string
     22 */
     23function afftimezone($date, $timezone, $format) {
     24        $tz_string = agenda_tz_to_string($date, $timezone, $format);
    7625        if ($tz_string) {
    7726                $tz_string = " <i class='date-tz'>$tz_string</i>";
    7827        }
    79 
    80         $aff = affdate($date, $format) . $tz_string;
    81         return $aff;
    82 }
    83 
     28        return $tz_string;
     29}
     30
     31/**
     32 * Convertir une date de la timezone par defaut (en base) vers la timezone cible
     33 * *si* la config est activee et *si* il y a une timezone fournie
     34 * @param string $date
     35 * @param string $timezone
     36 * @return string
     37 */
    8438function date_to_timezone($date, $timezone) {
    8539        static $config_timezone;
     
    10761 */
    10862function agenda_tz_to_string($date, $timezone, $format) {
     63        // Rien a faire ?
     64        if (stripos($format,'non')!==false) {
     65    return '';
     66        }
     67
    10968        $timezone = agenda_tz_valide_timezone($timezone);
    11069
     
    12079    return "GMT" . $dt->format('P');
    12180        }
    122         if (stripos($format,'tzshort')!==false) {
     81        if (stripos($format,'short')!==false or stripos($format,'abbr')!==false) {
    12382    return $dt->format('T');
    124         }
    125         if (stripos($format,'tznone')!==false) {
    126     return '';
    12783        }
    12884
  • _plugins_/agenda/trunk/notifications/inc-evenement.html

    r122361 r122473  
    22<div class="cartouche">
    33        <h2 class="titre">[(#LOGO_EVENEMENT|image_reduire{40,*}) ]#TITRE</h2>
    4         [<p class="date">(#DATE_DEBUT|affdate_debut_fin_timezone{#DATE_FIN,#HORAIRE,#TIMEZONE_AFFICHE,'hcal tzshort'})</p>]
     4        [<p class="date">(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE,hcal})[ (#TIMEZONE{#HORAIRE,abbr})]</p>]
    55</div>
    66
  • _plugins_/agenda/trunk/paquet.xml

    r122455 r122473  
    22        prefix="agenda"
    33        categorie="date"
    4         version="4.0.6"
     4        version="4.1.0"
    55        etat="test"
    66        compatibilite="[3.2.0;3.3.*]"
  • _plugins_/agenda/trunk/prive/listes/corbeille_evenements.html

    r122361 r122473  
    99<input type='checkbox' name='elements[]' id="evenement-#ID_EVENEMENT" value='#ID_EVENEMENT'[ (#ID_EVENEMENT|in_any{#ENV{elements}}|oui)checked='checked']/>
    1010<h4>[##ID_EVENEMENT - (#TITRE|sinon{<:info_sans_titre:>})]</h4>
    11 <small>[(#DATE_DEBUT|affdate_debut_fin_timezone{#DATE_FIN,#HORAIRE,#TIMEZONE_AFFICHE,'tzshort'})]</small>
     11<small>[(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE})[ (#TIMEZONE{#HORAIRE,abbr})]]</small>
    1212<p class='actions'><a href='#URL_ECRIRE{evenement,id_evenement=#ID_EVENEMENT}'><:corbeille:voir_detail:></a></p>
    1313</li>
  • _plugins_/agenda/trunk/prive/objets/contenu/evenement.html

    r122383 r122473  
    66<div class="champ contenu_dates">
    77<div class='label'><:agenda:info_dates:></div>
    8 <div dir='#LANG_DIR' class='dates'>[(#DATE_DEBUT|affdate_debut_fin_timezone{#DATE_FIN,#HORAIRE,#TIMEZONE_AFFICHE,'tzshort annee'})]</div>
     8<div dir='#LANG_DIR' class='dates'>[(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE,annee})[ (#TIMEZONE{#HORAIRE,abbr})]]</div>
    99</div>
    1010<B_repetitions>
  • _plugins_/agenda/trunk/prive/objets/liste/evenements.html

    r122361 r122473  
    2929                        <td class='article secondaire'>[<a (#ID_ARTICLE|oui) href="[(#ID_ARTICLE|generer_url_entite{article})]" title="[(#INFO_TITRE{article,#ID_ARTICLE}|attribut_html)]">[(#CHEMIN_IMAGE{article-16.png}|balise_img{#INFO_TITRE{article,#ID_ARTICLE}})]</a>]</td>
    3030                        <td class='titre principale'><a href="[(#ID_EVENEMENT|generer_url_entite{evenement})]" title="<:info_numero_abbreviation|attribut_html:> #ID_EVENEMENT">[(#RANG). ]#TITRE</a>
    31                                 <p class="date">[(#DATE_DEBUT|affdate_debut_fin_timezone{#DATE_FIN,#HORAIRE,#TIMEZONE_AFFICHE,'tzshort'})]</p>
     31                                <p class="date">[(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE})[ (#TIMEZONE{#HORAIRE,abbr})]]</p>
    3232                        </td>
    3333                        <td class='lieu secondaire'>#LIEU</td>
  • _plugins_/agenda/trunk/prive/squelettes/contenu/agenda_inscriptions.html

    r122361 r122473  
    33<h1 class="grostitre"><:agenda:liste_inscrits:></h1>
    44<h2 class="#EDIT{titre}">#TITRE</h2>
    5 <div dir='#LANG_DIR' class='dates'>[(#DATE_DEBUT|affdate_debut_fin_timezone{#DATE_FIN,#HORAIRE,#TIMEZONE_AFFICHE,'tzshort'})]</div>
     5<div dir='#LANG_DIR' class='dates'>[(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE})[ (#TIMEZONE{#HORAIRE,abbr})]]</div>
    66[<div class='descriptif secondaire #EDIT{descriptif}'><:agenda:evenement_descriptif:> : (#DESCRIPTIF|PtoBR)</div>]
    77[<div class='lieu secondaire #EDIT{lieu}'><:agenda:evenement_lieu:> : (#LIEU)</div>]
  • _plugins_/agenda/trunk/public/agenda.php

    r122472 r122473  
    4444                $_timezone = champ_sql('timezone_affiche', $p);
    4545                $p->code = "date_to_timezone($_date_fin, $_timezone)";
     46        }
     47
     48        return $p;
     49}
     50
     51/**
     52 * Affichage en clair de la timezone selon le format demande
     53 * #TIMEZONE -> Europe/Paris
     54 * #TIMEZONE{gmt} -> GMT+01:00
     55 * #TIMEZONE{abbr} -> EDT
     56 * #TIMEZONE{non} -> n'affiche rien
     57 *
     58 * #TIMEZONE{#HORAIRE} -> n'affiche pas la timezone si horaire=non
     59 * #TIMEZONE{#HORAIRE,gmt} -> affiche pas la timezone en gmt si horaire!=non
     60 *
     61 * @param $p
     62 * @return mixed
     63 */
     64function balise_TIMEZONE_dist($p) {
     65
     66        $_timezone = champ_sql('timezone_affiche', $p);
     67        $p->code = $_timezone;
     68
     69        if (!$p->etoile){
     70                $_format1 = interprete_argument_balise(1, $p);
     71                if (!$_format1) {
     72                        $_format1 = "''";
     73                }
     74                $_format2 = interprete_argument_balise(2, $p);
     75                if (!$_format2) {
     76                        $_format2 = "''";
     77                }
     78                $_date_debut = champ_sql('date_debut', $p);
     79                $p->code = "afftimezone($_date_debut, $_timezone, $_format1 . ' ' . $_format2)";
    4680        }
    4781
  • _plugins_/agenda/trunk/squelettes/inc-rss-item-evenement.html

    r122361 r122473  
    1212        [(#REM) Le bloc qui suit diffuse l'evenement a la mode RSS ]
    1313        <description>
    14                 [(#DATE_DEBUT|affdate_debut_fin_timezone{#DATE_FIN,#HORAIRE,#TIMEZONE_AFFICHE,'tzshort'}|texte_backend)][ - (#LIEU|PtoBR|texte_backend)]
     14                [(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE}|texte_backend)[ (#TIMEZONE{#HORAIRE,abbr}|texte_backend)]][ - (#LIEU|PtoBR|texte_backend)]
    1515                [(#DESCRIPTIF|sinon{#GET{intro}}|texte_backend)]
    1616        </description>
     
    2222        [(#LOGO_ARTICLE{right}|image_reduire{150,150}|texte_backend)]
    2323        &lt;div class='rss_texte'&gt;
    24                 [(#DATE_DEBUT|affdate_debut_fin_timezone{#DATE_FIN,#HORAIRE,#TIMEZONE_AFFICHE,'tzshort'}|texte_backend)][ - (#LIEU|PtoBR|texte_backend)]
     24                [(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE}|texte_backend)[ (#TIMEZONE{#HORAIRE,abbr}|texte_backend)]][ - (#LIEU|PtoBR|texte_backend)]
    2525                [(#DESCRIPTIF|sinon{#GET{intro}}|texte_backend)]
    2626        &lt;/div&gt;
  • _plugins_/agenda/trunk/squelettes/inclure/resume/evenement.html

    r122361 r122473  
    77        <meta itemprop="startDate" content="[(#DATE_DEBUT|affdate{Y-m-d})]T[(#DATE_DEBUT|affdate{H:i:sO})]" />
    88        <meta itemprop="endDate" content="[(#DATE_FIN|affdate{Y-m-d})]T[(#DATE_FIN|affdate{H:i:sO})]" />
    9         [<p class="info-publi"><time><i class="icon-calendar"></i> (#DATE_DEBUT|affdate_debut_fin_timezone{#DATE_FIN,#HORAIRE*,#TIMEZONE_AFFICHE,'hcal tzshort'})</time></p>]
     9        [<p class="info-publi"><time><i class="icon-calendar"></i> (#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,#HORAIRE*,hcal})[ (#TIMEZONE{#HORAIRE,abbr})]</time></p>]
    1010        #SET{intro,''}<BOUCLE_art(ARTICLES){si #ENV{sinon_intro_article,oui}|=={non}|ou{#ENV{intro}|=={non}}|non}{id_article}>#SET{intro,#INTRODUCTION{#ENV{coupe,300}}</BOUCLE_art>
    1111        [(#ENV{intro,oui}|=={non}|non|et{#DESCRIPTIF}|oui)[(#SET{intro,[<div class="introduction #EDIT{descriptif}" itemprop="description">(#DESCRIPTIF|sinon{#GET{intro}})</div>]})]]
Note: See TracChangeset for help on using the changeset viewer.