X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fplugins-dist%2Fmots%2Fformulaires%2Fadministrer_mot.php;fp=www%2Fplugins-dist%2Fmots%2Fformulaires%2Fadministrer_mot.php;h=b313258b41a9711c4808c06a83b1b41dccd263a7;hb=4f443dce95ff6f8221c189880a70c74ce1c1f238;hp=0000000000000000000000000000000000000000;hpb=4a628e9b277d3617535f99d663ca79fa2e891177;p=lhc%2Fweb%2Fwww.git diff --git a/www/plugins-dist/mots/formulaires/administrer_mot.php b/www/plugins-dist/mots/formulaires/administrer_mot.php new file mode 100644 index 00000000..b313258b --- /dev/null +++ b/www/plugins-dist/mots/formulaires/administrer_mot.php @@ -0,0 +1,243 @@ + '', + 'dissocier_objets_mot' => '', + 'fusionner_mot' => '', + 'associer_objets_mot_id' => '', + 'dissocier_objets_mot_id' => '', + 'fusionner_mot_id' => '', + 'revert_action' => '', + ); + + return $valeurs; +} + +function afficher_options_mots($id_selected) { + static $options; + if (is_null($options)){ + // d'abord les count en 1 coup + $counts = sql_allfetsel('id_mot,count(id_objet) as n','spip_mots_liens','','id_mot','id_mot'); + $counts = array_combine(array_map('reset',$counts), array_map('end',$counts)); + + // puis les groupes + $groupes = sql_allfetsel('*', 'spip_groupes_mots', '', '', '0+ titre, titre'); + foreach($groupes as $groupe) { + $options['groupeopen-'.$groupe['id_groupe']] = ''; + $res = sql_select('id_mot, titre', 'spip_mots', 'id_groupe='.intval($groupe['id_groupe']), '', '0+ titre, titre'); + while($row = sql_fetch($res)) { + $id_mot = $row['id_mot']; + if (isset($counts[$id_mot]) and $n = $counts[$id_mot]) { + $options[$id_mot] = '"; + } + } + $options['groupeclose-'.$groupe['id_groupe']] = ''; + } + + } + if ($id_selected and isset($options[$id_selected])) { + $options[$id_selected] = inserer_attribut($options[$id_selected], 'selected', 'selected'); + } + $s = implode("\n",$options); + if ($id_selected and isset($options[$id_selected])) { + $options[$id_selected] = vider_attribut($options[$id_selected], 'selected'); + } + return $s; +} + + +function formulaires_administrer_mot_verifier_dist($id_mot){ + + $erreurs = array(); + + $check = ""; + if (_request('associer')){ + $check = 'associer_objets_mot'; + } + elseif (_request('dissocier')){ + $check = 'dissocier_objets_mot'; + } + elseif (_request('fusionner')){ + $check = 'fusionner_mot'; + } + + if (!$check AND (!_request('revert') OR !_request('revert_action'))){ + $erreurs['message_erreur'] = _T('adminmots:erreur_admin_mot_action_inconnue'); + } + elseif($check) { + $id = admot_recupere_id_mot($check); + if (!$id){ + $erreurs[$check] = _T('adminmots:erreur_selection_id'); + } + elseif($id == $id_mot){ + $erreurs[$check] = _T('adminmots:erreur_mot_cle_deja'); + } + elseif($check=='fusionner_mot' AND !_request('confirm_fusionner_mot')){ + $counts = sql_allfetsel("objet,count(id_objet) as N","spip_mots_liens","id_mot=".intval($id_mot),"objet"); + $detail = array(); + foreach($counts as $count){ + $detail [] = objet_afficher_nb($count['N'],$count['objet']); + } + $detail = implode(", ",$detail); + if (!isset($erreurs['message_erreur'])) { + $erreurs['message_erreur'] = ''; + } + $erreurs[$check] = + _T('adminmots:label_confirm_fusion',array('id_mot'=>$id_mot,'id_mot_new'=>$id)) + . " $detail" . "
\n" + . " " + . ""; + } + } + + return $erreurs; +} + +function admot_recupere_id_mot($name){ + if (!$id_mot = intval(_request($name . '_id'))) + $id_mot = intval(_request($name)); + + return $id_mot; +} + +function admot_associer_objets_mot($id_mot, $objet, $ids){ + if (count($ids)){ + $couples = array(); + foreach($ids as $id){ + $couples[] = array( + 'id_mot' => $id_mot, + 'id_objet' => $id, + 'objet' => $objet + ); + } + return sql_insertq_multi("spip_mots_liens",$couples); + } + return false; +} + +function admot_dissocier_objets_mot($id_mot, $objet, $ids){ + if (count($ids)){ + return sql_delete("spip_mots_liens","id_mot=".intval($id_mot)." AND objet=".sql_quote($objet)." AND ".sql_in('id_objet',$ids)); + } + return false; +} + + +function formulaires_administrer_mot_traiter_dist($id_mot){ + + refuser_traiter_formulaire_ajax(); + if (_request('revert')){ + $action = _request('revert_action'); + $action = explode("/",$action); + $quoi = array_shift($action); + foreach($action as $a) { + list($objet, $ids) = explode(':', $a); + $ids = explode(',',$ids); + if ($objet and $ids) { + if ($quoi=="add"){ + admot_associer_objets_mot($id_mot, $objet, $ids); + } + if ($quoi=="del"){ + admot_dissocier_objets_mot($id_mot, $objet, $ids); + } + } + } + $res['message_ok'] = _T('adminmots:result_cancel_ok'); + set_request('revert_action',''); + } + else { + $check = ''; + if (_request('associer')){ + $check = 'associer_objets_mot'; + } + elseif (_request('dissocier')){ + $check = 'dissocier_objets_mot'; + } + elseif (_request('fusionner')){ + $check = 'fusionner_mot'; + } + $id = admot_recupere_id_mot($check); + + $revert = ""; + $res = array(); + // associer + if ($check=="associer_objets_mot"){ + $revert = array(); + $message = array(); + $objets = sql_allfetsel("distinct objet","spip_mots_liens","id_mot=".intval($id),'','objet'); + $objets = array_map('reset',$objets); + foreach($objets as $objet) { + $all = sql_allfetsel("id_objet","spip_mots_liens","id_mot=".intval($id)." AND objet=".sql_quote($objet)); + $all = array_map('reset',$all); + $deja = sql_allfetsel("id_objet","spip_mots_liens","id_mot=".intval($id_mot)." AND objet=".sql_quote($objet)." AND ".sql_in('id_objet',$all)); + $deja = array_map('reset',$deja); + $add = array_diff($all,$deja); + if (count($add)){ + $revert[] = "$objet:".implode(",",$add); + admot_associer_objets_mot($id_mot, $objet, $add); + $message[] = objet_afficher_nb(count($add), $objet); + } + } + if (count($message)){ + $revert = "del/".implode("/",$revert); + $message = implode(', ', $message); + $res['message_ok'] = $message . _T('adminmots:result_associer_nb'); + } + else { + $res['message_ok'] = _T('adminmots:result_associer_ras'); + } + } + // dissocier + if ($check=="dissocier_objets_mot"){ + $revert = array(); + $message = array(); + $objets = sql_allfetsel("distinct objet","spip_mots_liens","id_mot=".intval($id),'','objet'); + $objets = array_map('reset',$objets); + foreach($objets as $objet){ + $all = sql_allfetsel("id_objet", "spip_mots_liens", "id_mot=" . intval($id) . " AND objet=" . sql_quote($objet)); + $all = array_map('reset', $all); + $has = sql_allfetsel("id_objet", "spip_mots_liens", "id_mot=" . intval($id_mot) . " AND objet=" . sql_quote($objet) . " AND " . sql_in('id_objet', $all)); + $has = array_map('reset', $has); + if (count($has)){ + $revert[] = "$objet:".implode(",",$has); + admot_dissocier_objets_mot($id_mot, $objet, $has); + $message[] = objet_afficher_nb(count($has), $objet); + } + } + if (count($message)){ + $revert = "add/".implode("/",$revert); + $message = implode(', ', $message); + $res['message_ok'] = $message . _T('adminmots:result_dissocier_nb'); + } + else { + $res['message_ok'] = _T('adminmots:result_dissocier_ras'); + } + } + + // fusionner + if ($check=="fusionner_mot"){ + $all = sql_allfetsel("id_objet,objet,id_mot","spip_mots_liens","id_mot=".intval($id_mot)); + $mot = sql_fetsel("*","spip_mots","id_mot=".intval($id_mot)); + $dump = var_export($mot,true) . "\n\n". var_export($all,true); + ecrire_fichier(_DIR_LOG."fusion_mot_{$id_mot}_vers_{$id}_".date('Y-m-d-His').".dump",$dump); + foreach($all as $a){ + $a['id_mot'] = $id; + sql_insertq('spip_mots_liens',$a); + } + sql_delete("spip_mots_liens","id_mot=".$id_mot); + $link = "".objet_info('mot','texte_objet')." #$id"; + $res['message_ok'] = _T('adminmots:result_fusionner_ok',array('mot'=>$link)); + } + + if ($revert) + set_request('revert_action',$revert); + } + set_request('administrer','oui'); + + return $res; +}