X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fplugins%2Fagenda_3_5%2Fformulaires%2Fmigrer_agenda.php;fp=www%2Fplugins%2Fagenda_3_5%2Fformulaires%2Fmigrer_agenda.php;h=1f79a57c75e57359a61feff3d51252ecc71d3910;hb=6fc965ae42a0a1843dd0f0f6f2af0289dc475b7f;hp=0000000000000000000000000000000000000000;hpb=f3f5eb6827d60b23f80ac46527708b1644476dd2;p=ptitvelo%2Fweb%2Fwww.git diff --git a/www/plugins/agenda_3_5/formulaires/migrer_agenda.php b/www/plugins/agenda_3_5/formulaires/migrer_agenda.php new file mode 100644 index 0000000..1f79a57 --- /dev/null +++ b/www/plugins/agenda_3_5/formulaires/migrer_agenda.php @@ -0,0 +1,182 @@ +'', + 'toute_la_branche' => '', + 'champ_date_debut' => 'date', + 'champ_date_fin' => 'date_redac', + 'horaire' => 'oui', + 'groupes_mots' => array(), + ); + + return $valeurs; +} + +function formulaires_migrer_agenda_verifier_dist(){ + + $erreurs = array(); + $oblis = array('id_parent','champ_date_debut','champ_date_fin','horaire'); + + foreach ($oblis as $obli){ + if (!_request($obli)) + $erreurs[$obli] = _T('info_obligatoire'); + } + + if (!isset($erreurs['champ_date_debut']) + AND !in_array(_request('champ_date_debut'),array('date','date_redac'))) + $erreurs['champ_date_debut'] = _T('migreragenda:erreur_choix_incorrect'); + + if (!isset($erreurs['champ_date_fin']) + AND !in_array(_request('champ_date_fin'),array('date','date_redac'))) + $erreurs['champ_date_fin'] = _T('migreragenda:erreur_choix_incorrect'); + + if (!isset($erreurs['horaire']) + AND !in_array(_request('horaire'),array('oui','non'))) + $erreurs['horaire'] = _T('migreragenda:erreur_choix_incorrect'); + + if (!isset($erreurs['groupes_mots']) + AND $groupes = _request('groupes_mots')){ + + if (!is_array($groupes)) + $erreurs['groupes_mots'] = _T('migreragenda:erreur_choix_incorrect'); + else { + $groupes = array_map('intval',$groupes); + if (sql_countsel('spip_groupes_mots',sql_in('id_groupe',$groupes))!=count($groupes)) + $erreurs['groupes_mots'] = _T('migreragenda:erreur_choix_incorrect'); + } + } + + // pas d'erreurs ? verifier ce qui va etre fait et l'annoncer + if (!count($erreurs) AND !_request('confirm')){ + $where = migrer_agenda_where_articles(_request('id_parent'),_request('toute_la_branche')); + $nba = sql_countsel("spip_articles",$where); + + $message = _T('migreragenda:info_migration_articles')." "; + $message .= sinon(singulier_ou_pluriel($nba,'info_1_article','info_nb_articles'),_T('info_aucun_article')); + + $erreurs['confirmer'] = $message; + } + + return $erreurs; +} + + +function formulaires_migrer_agenda_traiter_dist(){ + $id_rubrique = _request('id_parent'); + $where_articles = migrer_agenda_where_articles($id_rubrique,_request('toute_la_branche')); + $groupes = _request('groupes_mots'); + if (!$groupes) + $groupes = array(); + $where_mots = migrer_agenda_where_mots($groupes); + + $horaire = (_request('horaire')=='oui'?true:false); + $champ_date_debut = _request('champ_date_debut'); + $champ_date_fin = _request('champ_date_fin'); + + // poser le flag agenda sur la rubrique ! + sql_updateq("spip_rubriques",array('agenda'=>1),'id_rubrique='.intval($id_rubrique)); + // et migrer les articles + $nb = migrer_articles($where_articles,$champ_date_debut,$champ_date_fin,$horaire,$where_mots); + + $message = _T('migreragenda:info_migration_articles_reussi')." "; + $message .= sinon(singulier_ou_pluriel($nb,'info_1_article','info_nb_articles'),_T('info_aucun_article')); + + return array('message_ok'=>$message); +} + + + +function migrer_articles($where_articles,$champ_date_debut,$champ_date_fin,$horaire,$where_mots){ + + include_spip("action/editer_evenement"); + + $where_mots = implode(" AND ",$where_mots); + + $nb = 0; + $res = sql_select("*","spip_articles",$where_articles); + while ($row = sql_fetch($res)){ + + $id_evenement = evenement_inserer($row['id_article']); + // mettre les champs + $set = array( + 'date_debut' => $row[$champ_date_debut], + 'date_fin' => $row[$champ_date_fin], + 'titre' => $row['titre'], + 'horaire' => ($horaire?'oui':'non') + ); + evenement_modifier($id_evenement,$set); + + // associer les mots : en sql pour ne pas exploser si plein de mots en base + $mots = sql_allfetsel('M.id_mot','spip_mots AS M JOIN spip_mots_liens AS L ON (M.id_mot=L.id_mot AND L.objet='.sql_quote('article').')',"id_objet=".intval($row['id_article'])." AND (".$where_mots.")"); + if (count($mots)){ + $insert = array(); + foreach ($mots as $mot){ + $insert[] = array('id_mot'=>$mot['id_mot'],'objet'=>'evenement','id_objet'=>$id_evenement); + } + sql_insertq_multi("spip_mots_liens",$insert); + } + + + // publier l'evenement + evenement_modifier($id_evenement,array('statut'=>'publie')); + + $nb++; + } + + return $nb; +} + + + +function migrer_agenda_where_articles($id_rubrique,$branche = false){ + + $where = array(); + $where[] = "statut=".sql_quote('publie'); + if ($branche){ + include_spip("inc/rubriques"); + $where[] = sql_in('id_rubrique',calcul_branche_in($id_rubrique)); + } + else + $where[] = "id_rubrique=".intval($id_rubrique); + + // exclure les articles qui ont deja un evenement + $where[] = "id_article NOT IN (".sql_get_select("id_article","spip_evenements").")"; + + return $where; +} + +function migrer_agenda_where_mots($groupes){ + $id_groupe = array(); + + $rows = sql_allfetsel('*','spip_groupes_mots',sql_in('id_groupe',$groupes)); + foreach($rows as $row){ + $id_groupe[] = $row['id_groupe']; + $tables_liees = explode(',',$row['tables_liees']); + $tables_liees = array_filter($tables_liees); + // ajouter les evenements a ce groupe de mot + if (!in_array('evenements',$tables_liees)){ + include_spip("action/editer_groupe_mots"); + $tables_liees[] = 'evenements'; + $tables_liees = implode(',',$tables_liees); + groupemots_modifier($row['id_groupe'],array('tables_liees'=>$tables_liees)); + } + } + + $where = array(sql_in('id_groupe',$id_groupe)); + return $where; +} + +?> \ No newline at end of file