/** * Point d'entrée d'édition d'un objet * * On ne peut entrer que par un appel en fournissant $id et $objet * ou avec un argument d'action sécurisée de type "objet/id" * * @param int $id * @param string $objet * @param array $set * @return array */ function action_editer_objet_dist($id = null, $objet = null, $set = null) { // appel direct depuis une url avec arg = "objet/id" if (is_null($id) or is_null($objet)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); list($objet, $id) = array_pad(explode("/", $arg, 2), 2, null); } // appel incorrect ou depuis une url erronnée interdit if (is_null($id) or is_null($objet)) { include_spip('inc/minipres'); echo minipres(_T('info_acces_interdit')); die; } // si id n'est pas un nombre, c'est une creation // mais on verifie qu'on a toutes les donnees qu'il faut. if (!($id = intval($id))) { // on ne sait pas si un parent existe mais on essaye $id_parent = _request('id_parent'); $id = objet_inserer($objet, $id_parent); } if (!($id = intval($id)) > 0) { return array($id, _L('echec enregistrement en base')); } // Enregistre l'envoi dans la BD $err = objet_modifier($objet, $id, $set); return array($id, $err); }
function livraison_installer_modes() { include_spip("action/editer_objet"); if ($importer_csv = charger_fonction("importer_csv", "inc", true) and $f = find_in_path("base/livraisonmodes.csv")) { $modes = $importer_csv($f, true); foreach ($modes as $mode) { $id = objet_inserer("livraisonmode"); $set = $mode; $set['prix_poids_ht'] = preg_replace(",\\s+,", "\n", $set['prix_poids_ht']); $set['prix_volume_ht'] = preg_replace(",\\s+,", "\n", $set['prix_volume_ht']); $set['statut'] = 'prop'; objet_modifier("livraisonmode", $id, $set); } } }
/** * Migration des albums grappes vers media_collections * * Appelée lors de l'installation du plugin */ function geol_albums_init() { if ($grappes = sql_allfetsel('*', 'spip_grappes', sql_in('type', array('album_perso', 'album_coop', 'balade')))) { include_spip('action/editer_objet'); include_spip('action/editer_liens'); foreach ($grappes as $grappe) { // récupérer les infos des anciens albums (grappes) $set = array('id_admin' => $grappe['id_admin'], 'titre' => $grappe['titre'], 'descriptif' => $grappe['descriptif'], 'date' => $grappe['date']); if ($grappe['type'] == 'album_perso') { $set['type_collection'] = 'perso'; } elseif ($grappe['type'] == 'album_coop') { $set['type_collection'] = 'coop'; } elseif ($grappe['type'] == 'balade') { $set['type_collection'] = 'balade'; } // créer des collections $id_collection = objet_inserer('collection'); if ($id_collection > 0) { objet_modifier('collection', $id_collection, $set); objet_instituer('collection', $id_collection, array('statut' => 'publie')); // copie des liens de grappes_liens vers collections_liens pour les articles $articles = sql_allfetsel('*', 'spip_grappes_liens', "objet = 'article' AND id_grappe = " . $grappe['id_grappe']); foreach ($articles as $article) { objet_associer(array('collection' => $id_collection), array($article['objet'] => $article['id_objet']), array('rang' => $article['rang'])); } // associer l'auteur id_admin de la grappe à la collection objet_associer(array('auteur' => $grappe['id_admin']), array('collection' => $id_collection)); // copie des liens de grappes_liens vers auteurs_liens pour les auteurs $auteurs = sql_allfetsel('*', 'spip_grappes_liens', "objet = 'auteur' AND id_grappe = " . $grappe['id_grappe']); foreach ($auteurs as $auteur) { objet_associer(array($auteur['objet'] => $auteur['id_objet']), array('collection' => $id_collection)); } // maj des liens des forums attachés aux grappes $forums = sql_allfetsel('id_forum', 'spip_forum', "objet = 'grappe' AND id_objet = " . $grappe['id_grappe']); foreach ($forums as $forum) { sql_updateq('spip_forum', array('objet' => 'collection', 'id_objet' => $id_collection), 'id_forum = ' . $forum['id_forum']); } // maj des liens des points gis attachés aux grappes $points = sql_allfetsel('id_gis', 'spip_gis_liens', "objet = 'grappe' AND id_objet = " . $grappe['id_grappe']); foreach ($points as $point) { sql_updateq('spip_gis_liens', array('objet' => 'collection', 'id_objet' => $id_collection), 'id_gis = ' . $point['id_gis']); } } } } }
/** * Enregistre un massicotage dans la base de données * * @param string $objet : le type d'objet * @param integer $id_objet : l'identifiant de l'objet * @param array parametres : Un tableau de parametres pour le * massicotage, doit contenir les clés * 'zoom', 'x1', 'x2', 'y1', et 'y2' * * @return mixed Rien si tout s'est bien passé, un message d'erreur * sinon */ function massicot_enregistrer($objet, $id_objet, $parametres) { include_spip('action/editer_objet'); include_spip('action/editer_liens'); /* Tester l'existence des parametres nécessaires */ if (!isset($parametres['zoom'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'zoom')); } elseif (!isset($parametres['x1'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'x1')); } elseif (!isset($parametres['x2'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'x2')); } elseif (!isset($parametres['y1'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'y1')); } elseif (!isset($parametres['y2'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'y2')); } /* le rôle est traité à part */ if (isset($parametres['role'])) { $role = $parametres['role']; unset($parametres['role']); } else { $role = ''; } $chemin_image = massicot_chemin_image($objet, $id_objet); list($width, $height) = getimagesize($chemin_image); $id_massicotage = sql_getfetsel('id_massicotage', 'spip_massicotages_liens', array('objet=' . sql_quote($objet), 'id_objet=' . intval($id_objet), 'role=' . sql_quote($role))); if (!$id_massicotage) { $id_massicotage = objet_inserer('massicotage'); objet_associer(array('massicotage' => $id_massicotage), array($objet => $id_objet), array('role' => $role)); /* Le logo du site est un cas spécial. SPIP le traite comme le « site » * avec l'id 0, alors on fait pareil. */ if ($id_objet == 0) { // peut être le string '0' sql_insertq('spip_massicotages_liens', array('id_massicotage' => $id_massicotage, 'id_objet' => 0, 'objet' => 'site', 'role' => $role)); } } if ($err = objet_modifier('massicotage', $id_massicotage, array('traitements' => serialize($parametres)))) { return $err; } }
/** * Point d'entree d'edition d'un objet * on ne peut entrer que par un appel en fournissant $id et $objet * mais pas pas une url * * @param int $id * @param string $objet * @param array $set * @return array */ function action_editer_objet_dist($id = null, $objet = null, $set = null) { // appel direct depuis une url interdit if (is_null($id) or is_null($objet)) { include_spip('inc/minipres'); echo minipres(_T('info_acces_interdit')); die; } // si id n'est pas un nombre, c'est une creation // mais on verifie qu'on a toutes les donnees qu'il faut. if (!($id = intval($id))) { // on ne sait pas si un parent existe mais on essaye $id_parent = _request('id_parent'); $id = objet_inserer($objet, $id_parent); } if (!($id = intval($id)) > 0) { return array($id, _L('echec enregistrement en base')); } // Enregistre l'envoi dans la BD $err = objet_modifier($objet, $id, $set); return array($id, $err); }
function formulaires_csv2auteurs_importation_traiter_dist() { $maj_utilisateur = _request('maj_utilisateur'); $abs_redacs = _request('abs_redac'); $abs_admins = _request('abs_admin'); $abs_visiteurs = _request('abs_visiteur'); $abs_poubelle = _request('abs_poubelle'); $suppression_article_efface = _request('suppression_article_efface'); $traitement_article_efface = _request('traitement_article_efface'); $nom_rubrique_archive = _request('nom_rubrique_archive'); $type_maj = _request('type_maj'); // recuperation de l'id de la rubrique parent des rubriques admins $id_rubrique_parent_admin = _request('rubrique_parent'); $id_rubrique_parent_admin = explode('|', $id_rubrique_parent_admin[0]); $id_rubrique_parent_admin = $id_rubrique_parent_admin[1]; //récupération de l'id de la rubrique parent archive $id_rubrique_parent_archive = _request('rubrique_parent_archive'); $id_rubrique_parent_archive = explode('|', $id_rubrique_parent_archive[0]); $id_rubrique_parent_archive = $id_rubrique_parent_archive[1]; $retour = array(); include_spip('action/editer_rubrique'); if (test_plugin_actif("accesrestreint")) { include_spip('action/editer_zone'); } include_spip('action/editer_auteur'); if ($abs_redacs or $abs_admins or $abs_visiteurs or $abs_poubelle == 'supprimer') { include_spip('action/editer_objet'); include_spip('action/editer_liens'); include_spip('action/editer_zone'); } // récupération du fichier csv include_spip('inc/config'); $separateur = lire_config("csv2auteurs_separateur"); $tmp_name = $_FILES['fichier_csv']['tmp_name']; $destination = _DIR_TMP . basename($tmp_name); $resultat = move_uploaded_file($tmp_name, $destination); if (!$resultat) { $retour['message_erreur'] = _T('csv2auteurs:transfert'); } else { $retour['message_ok'] = _T('csv2auteurs:bravo'); } // transformation du fichier csv en 4 array : // $en_tete = ligne entete // pour les 3 tableaux suivant, la cle est soit le login et s'il n'existe pas on prend le mail // $tableau_csv_visiteurs // $tableau_csv_redacs // $tableau_csv_admins $tableau_csv_visiteurs = $tableau_csv_redacs = $tableau_csv_admins = array(); $tableau_csv_rubriques_admins = array(); $fichiercsv = fopen($destination, "r"); $i = 0; // correspondance statut spip / statut csv $Tcorrespondances = array('administrateur' => '0minirezo', 'redacteur' => '1comite', 'visiteur' => '6forum', 'poubelle' => '5poubelle'); // tableau de tous les admins $result = sql_select(array('login'), 'spip_auteurs', array('statut = "0minirezo"')); while ($r = sql_fetch($result)) { $Tadmin_tous[] = $r['login']; } // tableau des admins restreints $Tadmin_restreint = array(); $from = array("spip_auteurs AS auteurs", "spip_auteurs_liens AS liens"); $where = array("auteurs.statut = '0minirezo'", "liens.objet = 'rubrique'", "liens.id_auteur = auteurs.id_auteur", 'login!=""'); $result = sql_select(array('login'), $from, $where); while ($r = sql_fetch($result)) { $Tadmin_restreint[] = $r['login']; } // tableau admins complets $Tadmin_complet = array_diff($Tadmin_tous, $Tadmin_restreint); // traiter fichier CSV $num_statut = $num_login = -1; while (($data = fgetcsv($fichiercsv, "{$separateur}")) !== FALSE) { // petit hack car fgetcsv ne reconnait pas le ~ comme séparateur !!! $data = implode("{$separateur}", $data); $data = explode("{$separateur}", $data); $nombre_elements = count($data); if ($i == 0) { for ($j = 0; $j < $nombre_elements; $j++) { $en_tete[$j] = strtolower($data[$j]); //Récupération de la ligne d'entete if ($en_tete[$j] == 'statut') { $num_statut = $j; } if ($en_tete[$j] == 'login') { $num_login = $j; } } if ($num_statut < 0 or $num_login < 0) { $retour['message_erreur'] = _T('csv2auteurs:champ_manquant') . ' login:'******' statut' . $num_statut; return $retour; } } else { for ($j = 0; $j < $nombre_elements; $j++) { // on ne veut pas les auteurs du CSV ayant login égal à celui d'un admin complet if ($data[$num_login] and !in_array($data[$num_login], $Tadmin_complet)) { // creation du tableau contenant l'ensemble des données à importer if ($Tcorrespondances[strtolower($data[$num_statut])] == '6forum') { $tableau_csv_visiteurs[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "6forum" : $data[$j]; } if ($Tcorrespondances[strtolower($data[$num_statut])] == '1comite') { $tableau_csv_redacs[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "1comite" : $data[$j]; } if ($Tcorrespondances[strtolower($data[$num_statut])] == '0minirezo') { $tableau_csv_admins[$data[$num_login]][$en_tete[$j]] = $en_tete[$j] == "statut" ? "0minirezo" : $data[$j]; if ($en_tete[$j] == 'ss_groupe' and $data[$j]) { $Trub = explode('|', $data[$j]); foreach ($Trub as $rub) { if (!in_array($rub, $tableau_csv_rubriques_admins)) { $tableau_csv_rubriques_admins[] = $rub; } } } } } } } $i++; } fclose($fichiercsv); unlink($destination); // tableau CSV total $tableau_csv_total = $tableau_csv_visiteurs + $tableau_csv_redacs + $tableau_csv_admins; // echo "<pre>"; // print_r($tableau_csv_visiteurs); // echo "admi"; // print_r($tableau_csv_admins); // echo "red"; // print_r($tableau_csv_redacs); // print_r($tableau_csv_total);die; //spip_log("tableau csv total","csvspip"); //spip_log($tableau_csv_total,"csvspip"); //récupération des auteurs de la bdd en 4 array // on ne prend pas les auteurs sans login // $poubelle_bdd = les auteurs à la poubelle // $visiteur_bdd = les visiteurs // $redacteur_bdd // $admin_restreint_bdd // la cle de chaque tableau est le login $poubelle_bdd = $visiteur_bdd = $redacteur_bdd = $admin_restreint_bdd = array(); /* $poubelle_bdd_req = sql_allfetsel('*', 'spip_auteurs',array('statut="5poubelle"','(login!="")')); foreach ($poubelle_bdd_req as $key) { $poubelle_bdd[$key['login']]=$key; } */ $visiteur_bdd_req = sql_allfetsel('*', 'spip_auteurs', array('statut="6forum"', '(login!="")')); foreach ($visiteur_bdd_req as $key) { $visiteur_bdd[$key['login']] = $key; } $redacteur_bdd_req = sql_allfetsel('*', 'spip_auteurs', array('statut="1comite"', '(login!="")')); foreach ($redacteur_bdd_req as $key) { $redacteur_bdd[$key['login']] = $key; } //on récupère seulement les admins restreints !!! $from = array("spip_auteurs AS auteurs", "spip_auteurs_liens AS liens"); $where = array("auteurs.statut = '0minirezo'", "liens.objet = 'rubrique'", "liens.id_auteur = auteurs.id_auteur", '(login!="")'); $admin_restreint_bdd_req = sql_allfetsel("DISTINCT auteurs.*", $from, $where); foreach ($admin_restreint_bdd_req as $key) { $admin_restreint_bdd[$key['login']] = $key; } // tableau BDD total $tableau_bdd_total = $poubelle_bdd + $visiteur_bdd + $redacteur_bdd + $admin_restreint_bdd; // traitement rubriques admin // construction du tableau de correspondance nom_rubrique avec leur id // création des rubriques n'existant pas $tableau_bdd_rubriques_admins = array(); $result = sql_select(array('id_rubrique', 'titre'), 'spip_rubriques'); while ($row = sql_fetch($result)) { $tableau_bdd_rubriques_admins[$row['id_rubrique']] = strtolower($row['titre']); } // traitement zones // construction du tableau de correspondance nom_zone avec leur id $tableau_bdd_zones_admins = array(); if (test_plugin_actif("accesrestreint")) { $result = sql_select(array('id_zone', 'titre'), 'spip_zones'); while ($row = sql_fetch($result)) { $tableau_bdd_zones_admins[$row['id_zone']] = strtolower($row['titre']); } } spip_log($tableau_bdd_zones_admins, "csvspip"); // créer les rubriques admins du csv n'existant pas et les indexer foreach ($tableau_csv_rubriques_admins as $id_rub => $rub) { if (!in_array(strtolower($rub), $tableau_bdd_rubriques_admins)) { $set = array('titre' => $rub); $id_rub = rubrique_inserer($id_rubrique_parent_admin); rubrique_modifier($id_rub, $set); $tableau_bdd_rubriques_admins[$id_rub] = strtolower($rub); } } //Récuperer les champs de la table auteurs $Tnom_champs_bdd = array(); $desc = sql_showtable('spip_auteurs', true); foreach ($desc['field'] as $cle => $valeur) { $Tnom_champs_bdd[] = $cle; } // PARTIE I : maj ou ajout des auteurs $tableau_nouveaux_auteurs = array_diff_key($tableau_csv_total, $tableau_bdd_total); // si maj demandée if ($maj_utilisateur) { // construire le tableau des utilisateurs à mettre à jour, indexé sur le login $tableau_maj_auteurs = array_diff_key($tableau_csv_total, $tableau_nouveaux_auteurs); // construire le tableau de correspondance login csv => id_auteur bdd $tableau_maj_auteurs_id = array(); $Tlogins = array_keys($tableau_maj_auteurs); $chaine_in = implode('","', $Tlogins); $chaine_in = '"' . $chaine_in . '"'; $res = sql_select('id_auteur, login', 'spip_auteurs', array('login IN (' . $chaine_in . ')')); while ($row = sql_fetch($res)) { $tableau_maj_auteurs_id[$row['login']] = $row['id_auteur']; } // si remplacer les données zones et rubriques administrées: supprimer les liens existant if ($type_maj == 'remplacer' and test_plugin_actif("accesrestreint")) { // suppression des liens des rubriques administrées objet_dissocier(array("auteur" => array_values($tableau_maj_auteurs_id)), array("rubrique" => "*")); // suppression des zones des auteurs zone_lier('', "auteur", array_values($tableau_maj_auteurs_id), 'del'); } //spip_log("table zone admin","csvspip"); //spip_log($tableau_bdd_zones_admins,"csvspip"); // maj des données des auteurs foreach ($tableau_maj_auteurs as $login => $Tauteur) { csv2auteurs_ajout_utilisateur($login, $Tauteur, $Tnom_champs_bdd, $Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins, $tableau_maj_auteurs_id[$login]); } /* echo '<br><pre>'; var_dump($tableau_maj_auteurs_id); */ } // dans tous les cas ajout des nouveaux foreach ($tableau_nouveaux_auteurs as $login => $Tauteur) { csv2auteurs_ajout_utilisateur($login, $Tauteur, $Tnom_champs_bdd, $Tcorrespondances, $tableau_bdd_rubriques_admins, $tableau_bdd_zones_admins); } // PARTIE II : Suppressions des absents (changer le statut des auteurs en 5.poubelle) avec 3 choix pour la gestion des articles associés // 1. ras // 2. supprimer les articles // 3. transferer les articles dans une rubrique d'archivage // Si choix3 : transferer les articles , création de la rubrique d'archive (en tenant compte d'une rubrique parent) if ($traitement_article_efface == "transferer_articles") { if (!($id_rubrique_archive = sql_fetsel('id_rubrique', 'spip_rubriques', array('titre ="' . $nom_rubrique_archive . '"', "id_parent={$id_rubrique_parent_archive}")))) { $objet = 'rubrique'; $set = array('titre' => $nom_rubrique_archive); $id_rubrique_archive = objet_inserer($objet, $id_rubrique_parent_archive); objet_modifier($objet, $id_rubrique_archive, $set); } } // si l'option auteurs sans articles = suppression complète // alors on supprime aussi tous les auteurs à la poubelle (sans articles) if ($abs_poubelle == 'supprimer') { // récupérer les auteurs à la poubelle avec articles $not_in = sql_allfetsel('auteurs.id_auteur', array('spip_auteurs_liens AS liens', 'spip_auteurs AS auteurs'), array('liens.id_auteur = auteurs.id_auteur', 'liens.objet="article"', 'auteurs.statut="5poubelle"'), array('liens.id_auteur')); $Tnot_in = array(); foreach ($not_in as $index => $Tid_auteur) { $Tnot_in[] = $Tid_auteur['id_auteur']; } $not_in = sql_in('id_auteur', $Tnot_in, 'NOT'); // récupérer les auteurs à la poubelle sans articles $Tabs_poubelle = sql_allfetsel('id_auteur', 'spip_auteurs', array('statut="5poubelle"', $not_in)); $Ta_suppr = array(); foreach ($Tabs_poubelle as $index => $Tid_auteur) { $Ta_suppr[] = $Tid_auteur['id_auteur']; } // effacer définitevement ces auteurs $in = sql_in('id_auteur', $Ta_suppr); sql_delete('spip_auteurs', $in); } // $Tid_poubelle = csv2auteurs_diff_absents($poubelle_bdd); // csv2auteurs_supprimer_auteurs($Tid_poubelle, '5poubelle', $traitement_article_efface,$id_rubrique_parent_archive); if ($abs_visiteurs) { $Tid_visiteurs = csv2auteurs_diff_absents($visiteur_bdd, $tableau_csv_visiteurs); csv2auteurs_supprimer_auteurs($Tid_visiteurs, '6forum', $traitement_article_efface, $id_rubrique_parent_archive); } if ($abs_redacs) { $Tid_redacs = csv2auteurs_diff_absents($redacteur_bdd, $tableau_csv_redacs); csv2auteurs_supprimer_auteurs($Tid_redacs, '1comite', $traitement_article_efface, $id_rubrique_parent_archive); } if ($abs_admins) { $Tid_admins = csv2auteurs_diff_absents($admin_restreint_bdd, $tableau_csv_admins); csv2auteurs_supprimer_auteurs($Tid_admins, '0minirezo', $traitement_article_efface, $id_rubrique_parent_archive); } // PARTIE III : maj des existants // 1. ras // 2. supprimer les articles // 3. transferer les articles dans une rubrique d'archivage /* echo '<pre>$visiteur_bdd'; var_dump($visiteur_bdd); echo '<br>$redacteur_bdd:'; var_dump($redacteur_bdd); echo '<br>$admin_restreint'; var_dump($admin_restreint); echo '</pre>'; die; */ // $retour['redirect'] = 'index.php?exec=csv2auteurs'; return $retour; }