Changeset 74909 in spip-zone


Ignore:
Timestamp:
Aug 23, 2013, 2:44:09 PM (6 years ago)
Author:
amaury.adon@…
Message:

toujours autant de problèmes avec le sélecteur d'articles, nouveau retour à un input.
Toute la partie d'importation d'un événement est maintenant regroupée dans une fonction indépendante que l'on pourra plus facilement appeler (toujours le chantier de la synchronisation).

Location:
_plugins_/import_ics/formulaires
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/import_ics/formulaires/editer_almanach.html

    r74743 r74909  
    2020
    2121
     22        [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
     23        [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</p>]
     24
    2225        [(#ENV{editable})
    2326        <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
     
    3740                        })]
    3841
    39                         [(#SAISIE{selecteur_article, id_article, obligatoire=oui,
    40                                 label=<:almanach:label_id_article:>,
    41                                 explication=<:almanach:explication_id_article:>,
     42                        [(#SAISIE{input, id_article, obligatoire=oui,
     43                                label=<:agenda:evenement_article:>,
     44                                explication=<:almanach:explication_id_article:>
    4245                        })]
    4346
  • _plugins_/import_ics/formulaires/editer_almanach.php

    r74693 r74909  
    4040 *
    4141 */
    42 function formulaires_editer_almanach_verifier_1_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
     42function formulaires_editer_almanach_verifier_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
    4343        //version de base de la fabrique
    4444        //return formulaires_editer_objet_verifier('almanach',$id_almanach, array('titre', 'url', 'id_article'));
    4545        $erreurs = formulaires_editer_objet_verifier('almanach',$id_almanach, array('titre', 'url', 'id_article', 'id_mot'));
    46        
    4746        //verification supplementaires
    48 
    4947        return $erreurs;
    5048}
     49
     50
     51/**
     52* Importation d'un événement dans la base
     53**/
     54function importation_evenement($objet_evenement,$id_almanach){
     55        #on recupere les infos de l'evenement dans des variables
     56            $attendee = $objet_evenement->getProperty( "attendee" ); #nom de l'attendee
     57            $lieu = $objet_evenement->getProperty("location");#récupération du lieu
     58            $summary_array = $objet_evenement->getProperty("summary", 1, TRUE); #summary est un array on recupere la valeur dans l'insertion attention, summary c'est pour le titre !
     59                $url = $objet_evenement->getProperty( "URL");#on récupère l'url de l'événement pour la mettre dans les notes histoire de pouvoir relier à l'événement original
     60            $descriptif_array = $objet_evenement->getProperty("DESCRIPTION");
     61            $organizer = $objet_evenement->getProperty("ORGANIZER");#organisateur de l'evenement
     62        #données de localisation de l'évenement
     63            $localisation = $objet_evenement->getProperty( "GEO" );#c'est un array array( "latitude"  => <latitude>, "longitude" => <longitude>))
     64            $latitude = $localisation['latitude'];
     65            $longitude = $localisation['longitude'];
     66        #les 3 lignes suivantes servent à récupérer la date de début et à la mettre dans le bon format
     67            $dtstart_array = $objet_evenement->getProperty("dtstart", 1, TRUE);
     68                $dtstart = $dtstart_array["value"];
     69                        $startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
     70                        $startTime = '';#on initialise le temps de début
     71                if (!in_array("DATE", $dtstart_array["params"])) {
     72                         $startTime = " {$dtstart["hour"]}:{$dtstart["min"]}:{$dtstart["sec"]}";
     73                        }
     74                #on fait une variable qui contient le résultat des deux précédentes actions
     75                $date_debut = $startDate.$startTime;
     76        #les 3 lignes suivantes servent à récupérer la date de fin et à la mettre dans le bon format
     77                $dtend_array = $objet_evenement->getProperty("dtend", 1, TRUE);
     78                        $dtend = $dtend_array["value"];
     79                $endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
     80                $endTime = '';#on initialise le temps de fin
     81                if (!in_array("DATE", $dtend_array["params"])) {
     82                        $endTime = " {$dtend["hour"]}:{$dtend["min"]}:{$dtend["sec"]}";
     83                        }
     84                #on fait une variable qui contient le résultat des deux précédentes actions
     85                $date_fin = $endDate.$endTime;
     86        #on insere les infos des événements dans la base
     87        # ca ce sera pour quand j'arriverai à faire fonctionner le selecteur d'articles $id_article = preg_replace('(article\|)','',_request('id_article')); #le selecteur d'article fournit un tableau, on se débarasse du mot article dedans et on appellera ensuite la première valeur (il pourrait y avoir des saisies multiples même si ici on ne les autorise pas)
     88        $id_article = _request('id_article');
     89        $id_evenement= sql_insertq('spip_evenements',array('id_article' =>$id_article,'date_debut'=>$date_debut,'date_fin'=>$date_fin,'titre'=>str_replace('SUMMARY:', '', $summary_array["value"]),'descriptif'=>'<math>'.$descriptif_array["value"].'</math>','lieu'=>$lieu,'adresse'=>'','inscription'=>'0','places'=>'0','horaire'=>'oui','statut'=>'publie','attendee'=>str_replace('MAILTO:', '', $attendee),'id_evenement_source'=>'0','uid'=>$uid_distante,'sequence'=>$sequence_distante,'notes'=>$url));
     90       
     91        #on associe l'évéenement à l'almanach
     92        objet_associer(array('almanach'=>$id_almanach),array('evenement'=>$id_evenement),array('vu'=>'oui'));
     93        #on associe l'événement à son mot
     94        sql_insertq("spip_mots_liens",array('id_mot'=>$id_mot,'id_objet'=>$id_evenement,'objet'=>'evenement'));
     95}
     96
    5197
    5298/**
     
    72118        $cal->parse();
    73119
     120
     121        //ON fait un appel dans la base de spip pour vpouvoir vérifier si un événement y est
     122        //déjà (ça ne se fait pas en une ligne...°)
     123        $liens = sql_allfetsel('id_evenement, uid, sequence', 'spip_evenements');
     124        // on definit un tableau des uid présentes dans la base
     125        $uid ="";
     126        foreach ($liens as $u ) {
     127                $uid[] = $u['uid'];
     128        };
     129
     130
    74131 while ($comp = $cal->getComponent())
    75132 {
    76         #on recupere les infos de l'evenement dans des variables
    77             $attendee = $comp->getProperty( "attendee" ); #nom de l'attendee
    78             $lieu = $comp->getProperty("location");#récupération du lieu
    79             $summary_array = $comp->getProperty("summary", 1, TRUE); #summary est un array on recupere la valeur dans l'insertion attention, summary c'est pour le titre !
    80             $descriptif_array = $comp->getProperty("DESCRIPTION");
    81             $uid = $comp->getProperty("UID");#uid de l'evenement
    82             $organizer = $comp->getProperty("ORGANIZER");#organisateur de l'evenement
    83                 $sequence = $comp->getProperty( "SEQUENCE" );#sequence d l'evenement http://kigkonsult.se/iCalcreator/docs/using.html#SEQUENCE
    84         #données de localisation de l'évenement
    85             $localisation = $comp->getProperty( "GEO" );#c'est un array array( "latitude"  => <latitude>, "longitude" => <longitude>))
    86             $latitude = $localisation['latitude'];
    87             $longitude = $localisation['longitude'];
    88         #les 3 lignes suivantes servent à récupérer la date de début et à la mettre dans le bon format
    89             $dtstart_array = $comp->getProperty("dtstart", 1, TRUE);
    90                 $dtstart = $dtstart_array["value"];
    91                         $startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
    92                         $startTime = '';#on initialise le temps de début
    93                 if (!in_array("DATE", $dtstart_array["params"])) {
    94                          $startTime = " {$dtstart["hour"]}:{$dtstart["min"]}:{$dtstart["sec"]}";
    95                         }
    96                 #on fait une variable qui contient le résultat des deux précédentes actions
    97                 $date_debut = $startDate.$startTime;
    98         #les 3 lignes suivantes servent à récupérer la date de fin et à la mettre dans le bon format
    99                 $dtend_array = $comp->getProperty("dtend", 1, TRUE);
    100                         $dtend = $dtend_array["value"];
    101                 $endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
    102                 $endTime = '';#on initialise le temps de fin
    103                 if (!in_array("DATE", $dtend_array["params"])) {
    104                         $endTime = " {$dtend["hour"]}:{$dtend["min"]}:{$dtend["sec"]}";
    105                         }
    106                 #on fait une variable qui contient le résultat des deux précédentes actions
    107                 $date_fin = $endDate.$endTime;
    108         #on insere les infos des événements dans la base
    109         # ca ce sera pour quand j'arriverai à faire fonctionner le selecteur d'articles $id_article = preg_replace('(article\|)','',_request('id_article')); #le selecteur d'article fournit un tableau, on se débarasse du mot article dedans et on appellera ensuite la première valeur (il pourrait y avoir des saisies multiples même si ici on ne les autorise pas)
    110         $id_article = _request('id_article');
    111         $id_evenement= sql_insertq('spip_evenements',array('id_article' =>$id_article,'date_debut'=>$date_debut,'date_fin'=>$date_fin,'titre'=>str_replace('SUMMARY:', '', $summary_array["value"]),'descriptif'=>'<math>'.$descriptif_array["value"].'</math>','lieu'=>$lieu,'adresse'=>'','inscription'=>'0','places'=>'0','horaire'=>'oui','statut'=>'publie','attendee'=>str_replace('MAILTO:', '', $attendee),'id_evenement_source'=>'0','uid'=>$uid,'sequence'=>$sequence));
    112        
    113         #on associe l'évéenement à l'almanach
    114         objet_associer(array('almanach'=>$id_almanach),array('evenement'=>$id_evenement),array('vu'=>'oui'));
    115         #on associe l'événement à son mot
    116         sql_insertq("spip_mots_liens",array('id_mot'=>$id_mot,'id_objet'=>$id_evenement,'objet'=>'evenement'));
     133
     134        #les variables qui vont servir à vérifier l'existence et l'unicité
     135               
     136                $sequence_distante = $comp->getProperty( "SEQUENCE" );#sequence d l'evenement http://kigkonsult.se/iCalcreator/docs/using.html#SEQUENCE
     137            $uid_distante = $comp->getProperty("UID");#uid de l'evenement
     138                if (!is_int($sequence_distante)){$sequence_distante="0";}//au cas où le flux ics ne fournirait pas le champ sequence, on initialise la valeur à 0 comme lors d'un import
     139
     140//On commence à vérifier l'existence et l'unicité  maintenant et on met à jour ou on importe selon le cas
     141        if (in_array($uid_distante, $uid)){//si l'uid_distante est présente dans la bdd
     142                $cle = array_search($uid_distante, $uid); // on utilise le fait que les deux tableaux ont le même index pour le récupérer
     143                $sequence = $liens[$cle]['sequence'];//sequence presente dans la base ayant le meme index
     144
     145                if ($sequence < $sequence_distante ){//si la sequecne de la bdd est plus petite, il y a eu mise à jour et il faut intervenir
     146                        echo "c'est pas pareil, il faut mettre à jour l'événement ".$liens[$cle]['id_evenement']."<br/>";
     147                }
     148        } else {importation_evenement($comp,$id_almanach);};//l'evenement n'est pas dans la bdd, on va l'y mettre
     149
     150
     151
     152
    117153
    118154
Note: See TracChangeset for help on using the changeset viewer.