function bookmarks_insert($tree, $id_parent, $importer_statut_publie, $importer_tags, $level = 0) { include_spip('action/editer_rubrique'); include_spip('action/editer_site'); $nb = 0; if (count($tree['content']['links']) or isset($tree['sub'])) { $titre = $tree['content']['titre'] ? $tree['content']['titre'] : _T('info_sans_titre'); $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', 'id_parent=' . intval($id_parent) . " AND titre=" . sql_quote($titre)); if (!$id_rubrique and $id_rubrique = rubrique_inserer($id_parent)) { rubrique_modifier($id_rubrique, array('titre' => $titre)); } if ($id_rubrique) { $statut = 'prop'; if ($importer_statut_publie and autoriser('publierdans', 'rubrique', $id_rubrique)) { $statut = 'publie'; } $now = time(); foreach ($tree['content']['links'] as $link) { if (!($id_syndic = sql_getfetsel('id_syndic', 'spip_syndic', 'id_rubrique=' . intval($id_rubrique) . " AND url_site=" . sql_quote($link['url'])))) { $id_syndic = site_inserer($id_rubrique); $set = array('url_site' => $link['url'], 'nom_site' => $link['titre'], 'date' => date('Y-m-d H:i:s', $link['date'] ? $link['date'] : $now), 'statut' => $statut, 'descriptif' => $link['descriptif']); #echo "creation site $id_syndic ".$set['url_site']." <br />"; site_modifier($id_syndic, $set); $nb++; } else { #echo "existant site $id_syndic ".$link['url']." <br />"; $nb++; } } if ($level < 30) { if (isset($tree['sub'])) { foreach ($tree['sub'] as $sub) { $nb += bookmarks_insert($sub, $id_rubrique, $importer_statut_publie, $importer_tags, $level + 1); } } } } } return $nb; }
/** * Modifie les contenus d'une rubrique * * @deprecated * Utiliser rubrique_modifier() * @see rubrique_modifier() * * @param int $id_rubrique * Identifiant de la rubrique à instituer * @param array|null $set * Tableau qu'on peut proposer en lieu et place de _request() * @return bool|string * - false : Aucune modification, aucun champ n'est à modifier * - chaîne vide : Vide si tout s'est bien passé * - chaîne : Texte d'un message d'erreur **/ function revisions_rubriques($id_rubrique, $set = null) { return rubrique_modifier($id_rubrique, $set); }
function th_configurer_rubriques() { $mots = array('travail_en_cours' => 'Travail des classes', 'consignes' => 'Consignes', 'ressources' => 'Bibliothèque', 'blogs' => 'Blog public', 'evenements' => 'Blog privé', 'images_background' => 'Contenu éditorial', 'agora' => 'Discuter avec'); foreach ($mots as $mot => $titre) { $count = (int) sql_countsel('spip_rubriques as sr LEFT JOIN spip_mots_liens as sml ON (sr.id_rubrique = sml.id_objet AND sml.objet = "rubrique") LEFT JOIN spip_mots as sm ON (sml.id_mot = sm.id_mot)', array('sm.titre = "' . $mot . '"', 'sr.id_parent = 0')); if ($count < 1) { include_spip('action/editer_rubrique'); $id_rubrique = rubrique_inserer(0); rubrique_modifier($id_rubrique, array('titre' => $titre)); $id_mot = (int) sql_getfetsel('id_mot', 'spip_mots', 'titre = "' . $mot . '"'); include_spip('action/editer_liens'); $res = objet_associer(array("mots" => $id_mot), array("rubriques" => $id_rubrique)); } } }
function bookmarks_opml_insert($tree, $id_parent, $importer_statut_publie, $importer_tags) { include_spip('action/editer_rubrique'); include_spip('action/editer_site'); $nb = 0; if (count($tree)) { foreach ($tree as $key => $item) { // cas d'un flux if (array_key_exists('XMLURL', $item)) { $statut = 'prop'; if ($importer_statut_publie and autoriser('publierdans', 'rubrique', $id_parent)) { $statut = 'publie'; } $now = time(); if (!($id_syndic = sql_getfetsel('id_syndic', 'spip_syndic', 'id_rubrique=' . intval($id_parent) . " AND url_site=" . sql_quote($item['HTMLURL'])))) { $id_syndic = site_inserer($id_parent); $set = array('url_site' => $item['HTMLURL'], 'nom_site' => $item['TITLE'], 'url_syndic' => $item['XMLURL'], 'syndication' => 'oui', 'resume' => 'non', 'date' => date('Y-m-d H:i:s', $now), 'statut' => $statut); site_modifier($id_syndic, $set); $nb++; } else { $nb++; } } else { // cas d'un dossier $titre = $key; $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', 'id_parent=' . intval($id_parent) . " AND titre=" . sql_quote($titre)); if (!$id_rubrique and $id_rubrique = rubrique_inserer($id_parent)) { rubrique_modifier($id_rubrique, array('titre' => $titre)); } if ($id_rubrique) { $nb += bookmarks_opml_insert($item, $id_rubrique, $importer_statut_publie, $importer_tags); } } } } return $nb; }
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; }