Changeset 76805 in spip-zone for _plugins_/itineraires


Ignore:
Timestamp:
Oct 1, 2013, 12:37:17 AM (8 years ago)
Author:
rastapopoulos@…
Message:

Ajout d'une table de liaison avec des moyens de locomotions.

Pour chacun on peut optionnellement indiquer une durée. La liste est inscrite en dur mais en globale, modifiable dans un options.php.

Dans le formulaire d'édition d'un itinéraire, on peut alors activer plusieurs moyens de locomotion différents pour un même parcours (par ex Pédestre et Cheval) et des durées différentes pour chacun.

Attention pour l'instant dans les squelettes : cette durée est en secondes dans la base SQL. Il faudrait ajouter un traitement auto sur la balise DUREE?itineraires_locomotions? pour directement afficher des heures/minutes.

Location:
_plugins_/itineraires/trunk
Files:
3 added
2 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/itineraires/trunk/base/itineraires.php

    r76747 r76805  
    2323 */
    2424function itineraires_declarer_tables_interfaces($interfaces) {
    25 
    2625        $interfaces['table_des_tables']['itineraires'] = 'itineraires';
     26        $interfaces['table_des_traitements']['LONGUEUR']['itineraires'] = 'floatval(%s)';
    2727
    2828        return $interfaces;
     
    4040 */
    4141function itineraires_declarer_tables_objets_sql($tables) {
    42 
    4342        $tables['spip_itineraires'] = array(
    4443                'type' => 'itineraire',
     
    8786                ),
    8887                'texte_changer_statut' => 'itineraire:texte_changer_statut_itineraire',
    89                
    90 
    9188        );
    9289
     
    9491}
    9592
    96 
     93/**
     94 * Déclarer les tables auxiliaires des itinéraires
     95 *
     96 * @pipeline declarer_tables_auxiliaires
     97 *
     98 * @param array $tables_auxiliaires
     99 *     Description des tables
     100 * @return array
     101 *     Description complétée des tables
     102 */
     103function itineraires_declarer_tables_auxiliaires($tables_auxiliaires){
     104        //-- Table organisations_contacts -------------------------------------
     105        $itineraires_locomotions = array(
     106                "id_itineraire"       => "bigint(21) not null",
     107                "type_locomotion"     => "varchar(25) not null default ''",
     108                "duree"                           => "int(11) not null default 0",
     109        );
     110        $itineraires_locomotions_key = array(
     111                "PRIMARY KEY"          => "id_itineraire, type_locomotion",
     112                "KEY id_itineraire"    => "id_itineraire",
     113                "KEY type_locomotion"  => "type_locomotion"
     114        );
     115        $tables_auxiliaires['spip_itineraires_locomotions'] =
     116                array('field' => &$itineraires_locomotions, 'key' => &$itineraires_locomotions_key);
     117       
     118        return $tables_auxiliaires;
     119}
    97120
    98121?>
  • _plugins_/itineraires/trunk/formulaires/editer_itineraire.php

    r76747 r76805  
    7878                                'label' => _T('itineraire:champ_texte_label'),
    7979                                'rows' => 10,
     80                        ),
     81                ),
     82                array(
     83                        'saisie' => 'locomotions_durees',
     84                        'options' => array(
     85                                'nom' => 'locomotions_durees',
     86                                'label' => _T('itineraire:champ_locomotions_durees'),
     87                                'defaut' => array('actives' => array('pied')),
    8088                        ),
    8189                ),
     
    198206function formulaires_editer_itineraire_charger_dist($id_itineraire='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
    199207        $valeurs = formulaires_editer_objet_charger('itineraire',$id_itineraire,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
     208        $id_itineraire = intval($id_itineraire);
     209       
     210        // Enlever les 0 superflus
     211        $valeurs['longueur'] = floatval($valeurs['longueur']);
    200212       
    201213        // Pour les trucs numériques, laisser vide si c'est 0
     
    206218        }
    207219       
    208         // Enlever les 0 superflus
    209         $valeurs['longueur'] = floatval($valeurs['longueur']);
     220        // On ajoute locomotions_durees
     221        $valeurs['locomotions_durees'] = array();
     222        // Si c'est une modif on cherche l'existant
     223        if ($id_itineraire > 0
     224                and $locomotions = sql_allfetsel('*', 'spip_itineraires_locomotions', 'id_itineraire = '.$id_itineraire)
     225                and is_array($locomotions)
     226        ){
     227                $valeurs['locomotions_durees'] = array('actives'=>array(), 'durees'=>array());
     228                foreach ($locomotions as $locomotion){
     229                        $valeurs['locomotions_durees']['actives'][] = $locomotion['type_locomotion'];
     230                        // Seulement s'il y a une durée
     231                        if ($duree = $locomotion['duree']){
     232                                $h = floor($duree/3600);
     233                                $m = floor(($duree-$h*3600)/60);
     234                                if ($h) { $valeurs['locomotions_durees']['durees'][$locomotion['type_locomotion']]['heures'] = $h; }
     235                                if ($m) { $valeurs['locomotions_durees']['durees'][$locomotion['type_locomotion']]['minutes'] = $m; }
     236                        }
     237                }
     238        }
    210239       
    211240        // On ajoute l'identifiant dans l'envoi
     
    238267 */
    239268function formulaires_editer_itineraire_verifier_dist($id_itineraire='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
    240         return formulaires_editer_objet_verifier('itineraire',$id_itineraire, array('titre'));
     269        $erreurs = formulaires_editer_objet_verifier('itineraire',$id_itineraire, array('titre'));
     270       
     271        if ($locomotions_durees = _request('locomotions_durees')){
     272                // S'il y a au moins une cochée
     273                if (!empty($locomotions_durees['actives'])) {
     274                        $verifier = charger_fonction('verifier', 'inc/');
     275                        foreach($locomotions_durees['actives'] as $type_locomotion){
     276                                if (!in_array($type_locomotion, array_keys($GLOBALS['itineraires_locomotions']))) {
     277                                        $erreurs['locomotions_durees'] = _T('itineraire:erreur_type_locomotion_inconnu');
     278                                }
     279                                else{
     280                                        // Si heures ou minutes sont en erreur
     281                                        if (
     282                                                $erreur = $verifier($locomotions_durees['durees'][$type_locomotion]['heures'], 'entier', array('min'=>0))
     283                                                or $erreur = $verifier($locomotions_durees['durees'][$type_locomotion]['minutes'], 'entier', array('min'=>0, 'max'=>59))
     284                                        ){
     285                                                $erreurs['locomotions_durees'] = $erreur;
     286                                        }
     287                                }
     288                        }
     289                }
     290        }
     291       
     292        return $erreurs;
    241293}
    242294
     
    268320        }
    269321        $retours = formulaires_editer_objet_traiter('itineraire',$id_itineraire,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
     322        $id_itineraire = intval($retours['id_itineraire']);
     323       
     324        // On traite les locomotions et durées
     325        // On supprime tout pour cet itinéraire
     326        sql_delete('spip_itineraires_locomotions', 'id_itineraire = '.$id_itineraire);
     327        // On ajoute la nouvelle config
     328        $locomotions_durees = _request('locomotions_durees');
     329        foreach ($locomotions_durees['actives'] as $type_locomotion){
     330                sql_insertq(
     331                        'spip_itineraires_locomotions',
     332                        array(
     333                                'id_itineraire' => $id_itineraire,
     334                                'type_locomotion' => $type_locomotion,
     335                                'duree' => intval($locomotions_durees['durees'][$type_locomotion]['heures'])*3600 + intval($locomotions_durees['durees'][$type_locomotion]['minutes']) * 60,
     336                        )
     337                );
     338        }
     339       
    270340        return $retours;
    271341}
  • _plugins_/itineraires/trunk/itineraires_administrations.php

    r76719 r76805  
    2525        $maj = array();
    2626
    27         $maj['create'] = array(array('maj_tables', array('spip_itineraires')));
     27        $maj['create'] = array(array('maj_tables', array('spip_itineraires', 'spip_itineraires_locomotions')));
    2828
    2929        include_spip('base/upgrade');
     
    4242
    4343        sql_drop_table("spip_itineraires");
     44        sql_drop_table("spip_itineraires_locomotions");
    4445
    4546        # Nettoyer les versionnages et forums
  • _plugins_/itineraires/trunk/lang/itineraire_fr.php

    r76747 r76805  
    2121        'champ_difficulte_explication' => 'Entre @min@ et @max@',
    2222        'champ_difficulte_label' => 'Difficulté',
     23        'champ_duree_en' => 'en',
     24        'champ_duree_heures' => 'heure(s)',
     25        'champ_duree_heures_abbr' => 'h',
     26        'champ_duree_minutes' => 'minutes(s)',
     27        'champ_duree_minutes_abbr' => 'min',
    2328        'champ_handicap_label' => 'Handicap',
    2429        'champ_handicap_label_case' => 'L\'itinéraire est-il accessible aux handicapés ?',
     30        'champ_locomotions_durees' => 'Moyens de locomotion et durées',
    2531        'champ_longueur_explication' => 'En kilomètres',
    2632        'champ_longueur_label' => 'Longueur',
     
    2935        'champ_transport_label' => 'Transport',
    3036        'champ_transport_label_case' => 'Existe-t-il un transport autour de cet itinéraire ?',
     37       
     38        // E
     39        'erreur_type_locomotion_inconnu' => 'Un moyen de locomotion choisi ne fait pas partie de la liste.',
    3140       
    3241        // I
     
    3746        'info_itineraires_auteur' => 'Les itinéraires de cet auteur',
    3847        'info_nb_itineraires' => '@nb@ itinéraires',
     48       
     49        // L
     50        'locomotion_canoe' => 'Canoë',
     51        'locomotion_cheval' => 'Cheval',
     52        'locomotion_pied' => 'Pédestre',
     53        'locomotion_velo' => 'Vélo de route',
     54        'locomotion_vtt' => 'VTT',
    3955
    4056        // R
  • _plugins_/itineraires/trunk/paquet.xml

    r76719 r76805  
    1818
    1919        <licence>GNU/GPL v3</licence>
    20         <necessite nom="saisies" compatibilite="[1.35.0;]" />
     20        <necessite nom="saisies" compatibilite="[1.35.0;]" />
     21        <necessite nom="verifier" compatibilite="[1.0.3;]" />
     22        <necessite nom="yaml" compatibilite="[1.5.1;]" />
    2123
    2224        <pipeline nom="autoriser" inclure="itineraires_autorisations.php" />
    2325
    24         <pipeline nom="declarer_tables_objets_sql" inclure="base/itineraires.php" />
    25         <pipeline nom="declarer_tables_interfaces" inclure="base/itineraires.php" />
     26        <pipeline nom="declarer_tables_objets_sql" inclure="base/itineraires.php" />
     27        <pipeline nom="declarer_tables_interfaces" inclure="base/itineraires.php" />
     28        <pipeline nom="declarer_tables_auxiliaires" inclure="base/itineraires.php" />
    2629        <pipeline nom="affiche_milieu" inclure="itineraires_pipelines.php" />
    2730        <pipeline nom="affiche_auteurs_interventions" inclure="itineraires_pipelines.php" />
  • _plugins_/itineraires/trunk/prive/objets/contenu/itineraire.html

    r76747 r76805  
    1313[<div class="champ contenu_longueur[ (#LONGUEUR*|strlen|?{'',vide})]">
    1414        <label><:itineraire:champ_longueur_label:> : </label>
    15         <span dir='#LANG_DIR' class='#EDIT{longueur} longueur'>(#LONGUEUR|floatval) km</span>
     15        <span dir='#LANG_DIR' class='#EDIT{longueur} longueur'>(#LONGUEUR) km</span>
    1616</div>]
    1717
Note: See TracChangeset for help on using the changeset viewer.