/** * Traitement * * @param string $type * @param int $id * @return array */ function formulaires_editer_url_objet_traiter($type, $id) { $valeurs = array('editable' => true); include_spip('action/editer_url'); // les urls manuelles sont toujours permanentes $set = array('url' => _request('url'), 'type' => $type, 'id_objet' => $id, 'perma' => 1); $type_urls = (isset($GLOBALS['type_urls']) and $GLOBALS['type_urls'] != 'page') ? $GLOBALS['type_urls'] : $GLOBALS['meta']['type_urls']; if (include_spip("urls/{$type_urls}") and function_exists($renseigner_url = "renseigner_url_{$type_urls}") and $r = $renseigner_url($type, $id) and isset($r['parent'])) { $set['id_parent'] = $r['parent']; } $separateur = "-"; if (defined('_url_sep_id')) { $separateur = _url_sep_id; } if (url_insert($set, false, $separateur)) { set_request('url'); $valeurs['message_ok'] = _T("urls:url_ajoutee"); } else { $valeurs['message_erreur'] = _T("urls:url_ajout_impossible"); } return $valeurs; }
function spip_importer_articles($spip_data) { global $tables_conversion; foreach ($spip_data as $entry) { $id_rubrique = null; $type = $entry['metadata']['type']; journaliser(sprintf("Traitement d'un nouvel item : %s - %s", $entry['metadata']['nid'], $type), 2); if (binlog_contient($entry['metadata']['nid'])) { journaliser("L'élément %s a déjà été converti", $entry['metadata']['nid']); continue; } journaliser("Recherche de la catégorie cible pour l'article"); /* FIXME: doit être déplacé hors de cette fonction (spécifique site cible). */ /* CATEGORIE CIBLE */ /* Remarque : les articles de type 'story' sont dispatchés par la * fonction dispatch_story_type() */ $cat_cible = array('video' => 14, 'photos' => 23, 'audio' => 24, 'commission' => 36, 'livre' => 15, 'evenement' => 11); $fct = "dispatch_{$type}_type"; if (function_exists($fct)) { $id_rubrique = call_user_func($fct, $entry); } elseif ($cat_cible[$type]) { $id_rubrique = $cat_cible[$type]; } if ($id_rubrique == null) { journaliser("Catégorie cible introuvable pour le type de contenu " . $type, 4); die; } journaliser("Envoi de l'article dans la rubrique %s", $id_rubrique, 1); /* --- VIDEO --- */ if ($type == "video") { if ($entry['documents']['video']) { /* Si une vidéo est présente dans ce champ, il faut modifier le * texte de l'article et ajouter le lien vers la video à la * fin. */ $entry['article']['texte'] .= sprintf("\n\n%s", $entry['documents']['video']); } } /* --- AUDIO --- */ if ($type == "audio") { journaliser("Gestion des documents audio"); $audio_path = $entry['documents']['audio']; $audio_name = $entry['documents']['audio_name']; $id_document = importer_document($audio_path, $audio_name); journaliser("Import du document : " . $id_document, 1); $entry['article']['texte'] = sprintf("<emb%s>\nRéalisation : %s\n\n%s", $id_document, $entry['documents']['audio_desc'], $entry['article']['texte']); document_modifier($id_document, array('credits' => $entry['documents']['audio_desc'])); } /* --- PIECES JOINTES --- */ if ($entry['documents']['pdf']) { journaliser("Ajout des pièces jointes au format PDF"); foreach ($entry['documents']['pdf'] as $document) { $id_document = importer_document($document['filepath'], $document['filename']); journaliser(sprintf("Document PDF %s importé", $id_document), 1); $entry['article']['texte'] = sprintf("%s\n\n<lecteurpdf%s>", $entry['article']['texte'], $id_document); } } /* --- ARTICLE --- */ journaliser("Création du nouvel article"); $id_article = article_inserer($id_rubrique); journaliser("Nouvel article créee : {$id_article}", 1); //print_r($entry['article']); article_modifier($id_article, $entry['article']); journaliser("Ajout des données dans l'article n° {$id_article}", 1); /* --- AUTEUR => ARTICLE --- */ journaliser("Création ou récupération des auteurs qui doivent être associées à l'article"); $id_auteurs = array(); if ($entry['auteur']['nom']) { foreach ($entry['auteur']['nom'] as $nom_auteur) { journaliser("Recherche de l'auteur « {$nom_auteur} »", 1); if ($id = sql_getfetsel("id_auteur", "spip_auteurs", 'nom LIKE ' . sql_quote("% - {$nom_auteur}"))) { journaliser("« {$nom_auteur} » trouvé : {$id} (REGEXP)", 1); $id_auteurs[] = $id; } elseif ($id = sql_getfetsel("id_auteur", "spip_auteurs", 'nom=' . sql_quote($nom_auteur))) { journaliser("« {$nom_auteur} » trouvé : {$id}", 1); $id_auteurs[] = $id; } else { $id = auteur_inserer(); auteur_modifier($id, array('nom' => $nom_auteur, 'statut' => '1comite')); $id_auteurs[] = $id; journaliser("« {$nom_auteur} » créé : {$id}", 1); } } foreach ($id_auteurs as $id) { journaliser("Association de l'auteur %s à l'article", $id, 1); auteur_associer($id, array('article' => $id_article)); } } if (!in_array(1, $id_auteurs)) { journaliser("Retrait de l'auteur 1", 1); auteur_dissocier(1, array('article' => $id_article)); } /* --- CAMPAGNE --- */ if ($entry['metadata']['campagne']) { journaliser("Ajout des mots-clés de campagne"); foreach ($entry['metadata']['campagne'] as $campagne) { journaliser("Association du mot clé %s à l'article %s", $campagne, $id_article, 1); mot_associer($campagne, array('article' => $id_article)); } } /* --- ATTACPÉDIA --- */ if ($entry['metadata']['attacpedia']) { journaliser("Ajout des mots-clés Attacpédia"); foreach ($entry['metadata']['attacpedia'] as $attacpedia) { journaliser("Association du mot clé %s à l'article %s", $attacpedia, $id_article, 1); mot_associer($attacpedia, array('article' => $id_article)); } } /* EVENEMENT */ if ($type == "evenement") { journaliser("Création de l'évènement"); foreach ($entry['evenement']['dates'] as $dates_evt) { $id_evenement = evenement_inserer($id_article); journaliser("Numéro de l'évènement : %s", $id_evenement, 1); evenement_modifier($id_evenement, array('titre' => $entry['article']['titre'], 'lieu' => $entry['evenement']['lieu'], 'date_debut' => $dates_evt['date_debut'], 'date_fin' => $dates_evt['date_fin'], 'statut' => $entry['article']['statut'])); journaliser("Géolocation GIS", 1); $id_gis = gis_inserer(); journaliser("Création du lieu GIS : %s", $id_gis, 1); gis_modifier($id_gis, $entry['gis']); lier_gis($id_gis, "evenement", $id_evenement); journaliser("Lien de l'évènement %s au lieu %s", $id_evenement, $id_gis, 1); } } /* --- TYPE D'EVENEMENT --- */ if ($type == "evenement") { $id_mot_drupal = $entry['metadata']['type_evenement']; $mod_evt = $tables_conversion['type_evenement'][$id_mot_drupal]; mot_associer($mod_evt, array('article' => $id_article)); journaliser("Association du mot clé %s/%s à l'article %s", $id_mot_drupal, $mod_evt, $id_article, 1); } /* --- PIECES JOINTES --- */ if ($entry['documents']['pj']) { journaliser("Ajout des pièces jointes"); foreach ($entry['documents']['pj'] as $document) { $id_document = importer_document($document['filepath'], $document['filename'], $id_article); journaliser(sprintf("Document %s importé", $id_document), 1); } } /* --- GALERIES PHOTO --- */ if ($entry['documents']['photos']) { journaliser("Ajout des pĥotos jointes"); foreach ($entry['documents']['photos'] as $document) { $id_document = importer_document($document['filepath'], $document['filename'], $id_article, "document"); journaliser(sprintf("Document %s importé", $id_document), 1); } } /* --- URL --- */ journaliser("Gestion des URL"); $urls = array(); $urls[] = "node/" . $entry['metadata']['nid']; $urls[] = $entry['url']['url']; foreach ($urls as $url) { if ($url) { if ($url_existante = sql_fetsel(array('id_objet', 'type'), 'spip_urls', 'url=' . sql_quote($url))) { journaliser(sprintf("URL ({$url}) déjà existante (%s / %s)", $url_existante['type'], $url_existante['id_objet']), 4); } else { $sql_url = array('url' => $url, 'type' => 'article', 'id_objet' => $id_article, 'perma' => 1, 'id_parent' => $id_rubrique); url_insert($sql_url, false, '-'); journaliser(sprintf("URL ajoutée : %s/%s", $GLOBALS['meta']['adresse_site'], $url), 1); } } } /* --- LOGO --- */ if ($entry['logo']['chemin']) { journaliser("Import du logo"); $remote = sprintf("http://www.france.attac.org/%s", $entry['logo']['chemin']); $filename = $entry['logo']['fichier']; $fic = copie_locale($remote, 'auto', determine_upload() . $filename); journaliser("Logo ({$remote}) => {$fic}", 1); $spip_image_ajouter = charger_fonction('spip_image_ajouter', 'action'); $spip_image_ajouter('arton' . $id_article, true, $filename); spip_unlink($fic); } $dest_url = sprintf("%s/%s", $GLOBALS['meta']['adresse_site'], $id_article); journaliser(sprintf("Article publié : <%s>", $dest_url), 2); binlog($entry['metadata']['nid'], $entry['metadata']['type'], $id_article, $entry['article']['titre'], $dest_url); } }
function declarer_url_propre($type, $id_objet) { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table(table_objet($type)); $table = $desc['table']; $champ_titre = $desc['titre'] ? $desc['titre'] : 'titre'; $col_id = @$desc['key']["PRIMARY KEY"]; if (!$col_id) { return false; } // Quand $type ne reference pas une table $id_objet = intval($id_objet); // Recuperer une URL propre correspondant a l'objet. // mais urls a 1 segment uniquement (pas d'urls /) // de preference avec id_parent=0, puis perma, puis par date desc $row = sql_fetsel("U.url, U.date, U.id_parent, U.perma, {$champ_titre}", "{$table} AS O LEFT JOIN spip_urls AS U ON (U.type='{$type}' AND U.id_objet=O.{$col_id})", "O.{$col_id}={$id_objet} AND (U.segments IS NULL OR U.segments=1)", '', 'U.id_parent=0 DESC, U.perma DESC, U.date DESC', 1); // en SQLite le left join retourne du vide si il y a une url mais qui ne correspond pas pour la condition sur le segment // on verifie donc que l'objet existe bien avant de sortir ou de creer une url pour cet objet if (!$row) { $row = sql_fetsel("'' as url, '' as date, 0 as id_parent, 0 as perma, {$champ_titre}", "{$table} AS O", "O.{$col_id}={$id_objet}"); } if (!$row) { return ""; } # Quand $id_objet n'est pas un numero connu $url_propre = $row['url']; // si url_propre connue mais avec id_parent non nul, essayer de reinserer tel quel avec id_parent=0 if ($url_propre and $row['id_parent']) { include_spip('action/editer_url'); $set = array('url' => $url_propre, 'type' => $type, 'id_objet' => $id_objet, 'perma' => $row['perma']); // si on arrive pas a reinserer tel quel, on annule url_propre pour forcer un recalcul d'url if (!url_insert($set, false, _url_propres_sep_id)) { $url_propre = ""; } else { $url_propre = $row['url'] = $set['url']; } } // Se contenter de cette URL si elle existe ; // sauf si on invoque par "voir en ligne" avec droit de modifier l'url // l'autorisation est verifiee apres avoir calcule la nouvelle url propre // car si elle ne change pas, cela ne sert a rien de verifier les autorisations // qui requetent en base $modifier_url = (defined('_VAR_URLS') and _VAR_URLS and !$row['perma']); if ($url_propre and !$modifier_url) { return $url_propre; } // Sinon, creer une URL $url = pipeline('propres_creer_chaine_url', array('data' => $url_propre, 'objet' => array_merge($row, array('type' => $type, 'id_objet' => $id_objet)))); // Eviter de tamponner les URLs a l'ancienne (cas d'un article // intitule "auteur2") include_spip('inc/urls'); $objets = urls_liste_objets(); if (preg_match(',^(' . $objets . ')[0-9]+$,', $url, $r) and $r[1] != $type) { $url = $url . _url_propres_sep_id . $id_objet; } // Pas de changement d'url if ($url == $url_propre) { return $url_propre; } // verifier l'autorisation, maintenant qu'on est sur qu'on va agir if ($modifier_url) { include_spip('inc/autoriser'); $modifier_url = autoriser('modifierurl', $type, $id_objet); } // Verifier si l'utilisateur veut effectivement changer l'URL if ($modifier_url and CONFIRMER_MODIFIER_URL and $url_propre and $url != preg_replace('/' . preg_quote(_url_propres_sep_id, '/') . '.*/', '', $url_propre)) { $confirmer = true; } else { $confirmer = false; } if ($confirmer and !_request('ok')) { die("vous changez d'url ? {$url_propre} -> {$url}"); } $set = array('url' => $url, 'type' => $type, 'id_objet' => $id_objet); include_spip('action/editer_url'); if (!url_insert($set, $confirmer, _url_propres_sep_id)) { return $url_propre; } //serveur out ? retourner au mieux return $set['url']; }
/** * Retrouver/Calculer l'ensemble des segments d'url d'un objet * * http://doc.spip.org/@declarer_url_arbo * * @param string $type * @param int $id_objet * @return string */ function declarer_url_arbo($type, $id_objet) { static $urls = array(); // utiliser un cache memoire pour aller plus vite if (!is_null($C = Cache())) { return $C; } // Se contenter de cette URL si elle existe ; // sauf si on invoque par "voir en ligne" avec droit de modifier l'url // l'autorisation est verifiee apres avoir calcule la nouvelle url propre // car si elle ne change pas, cela ne sert a rien de verifier les autorisations // qui requetent en base $modifier_url = (defined('_VAR_URLS') and _VAR_URLS); if (!isset($urls[$type][$id_objet]) or $modifier_url) { $r = renseigner_url_arbo($type, $id_objet); // Quand $type ne reference pas une table if ($r === false) { return false; } if (!is_null($r)) { $urls[$type][$id_objet] = $r; } } if (!isset($urls[$type][$id_objet])) { return ""; } # objet inexistant $url_propre = $urls[$type][$id_objet]['url']; // si on a trouve l'url // et que le parent est bon // et (permanente ou pas de demande de modif) if (!is_null($url_propre) and $urls[$type][$id_objet]['id_parent'] == $urls[$type][$id_objet]['parent'] and ($urls[$type][$id_objet]['perma'] or !$modifier_url)) { return declarer_url_arbo_rec($url_propre, $type, isset($urls[$type][$id_objet]['parent']) ? $urls[$type][$id_objet]['parent'] : 0, isset($urls[$type][$id_objet]['type_parent']) ? $urls[$type][$id_objet]['type_parent'] : null); } // Si URL inconnue ou maj forcee sur une url non permanente, recreer une url $url = $url_propre; if (is_null($url_propre) or $modifier_url and !$urls[$type][$id_objet]['perma']) { $url = pipeline('arbo_creer_chaine_url', array('data' => $url_propre, 'objet' => array_merge($urls[$type][$id_objet], array('type' => $type, 'id_objet' => $id_objet)))); // Eviter de tamponner les URLs a l'ancienne (cas d'un article // intitule "auteur2") include_spip('inc/urls'); $objets = urls_liste_objets(); if (preg_match(',^(' . $objets . ')[0-9]*$,', $url, $r) and $r[1] != $type) { $url = $url . _url_arbo_sep_id . $id_objet; } } // Pas de changement d'url ni de parent if ($url == $url_propre and $urls[$type][$id_objet]['id_parent'] == $urls[$type][$id_objet]['parent']) { return declarer_url_arbo_rec($url_propre, $type, $urls[$type][$id_objet]['parent'], $urls[$type][$id_objet]['type_parent']); } // verifier l'autorisation, maintenant qu'on est sur qu'on va agir if ($modifier_url) { include_spip('inc/autoriser'); $modifier_url = autoriser('modifierurl', $type, $id_objet); } // Verifier si l'utilisateur veut effectivement changer l'URL if ($modifier_url and CONFIRMER_MODIFIER_URL and $url_propre and $url != preg_replace('/' . preg_quote(_url_propres_sep_id, '/') . '.*/', '', $url_propre)) { $confirmer = true; } else { $confirmer = false; } if ($confirmer and !_request('ok')) { die("vous changez d'url ? {$url_propre} -> {$url}"); } $set = array('url' => $url, 'type' => $type, 'id_objet' => $id_objet, 'id_parent' => $urls[$type][$id_objet]['parent'], 'perma' => intval($urls[$type][$id_objet]['perma'])); include_spip('action/editer_url'); if (url_insert($set, $confirmer, _url_arbo_sep_id)) { $urls[$type][$id_objet]['url'] = $set['url']; $urls[$type][$id_objet]['id_parent'] = $set['id_parent']; } else { // l'insertion a echoue, //serveur out ? retourner au mieux $urls[$type][$id_objet]['url'] = $url_propre; } return declarer_url_arbo_rec($urls[$type][$id_objet]['url'], $type, $urls[$type][$id_objet]['parent'], $urls[$type][$id_objet]['type_parent']); }
function url_insert(&$set, $confirmer, $separateur) { $has_parent = true; # assurer la coherence des champs techniques si non fournis if (!isset($set['id_parent'])) { $has_parent = false; $set['id_parent'] = 0; } if (!isset($set['segments'])) { $set['segments'] = count(explode('/', $set['url'])); } $perma = false; if (isset($set['perma']) and $set['perma']) { unset($set['perma']); $perma = true; } $redate = true; # le separateur ne peut pas contenir de / if (strpos($separateur, '/') !== false) { $separateur = "-"; } // Si l'insertion echoue, c'est une violation d'unicite. $where_urllike = 'url LIKE ' . url_sql_quote_like($set['url']) . " AND NOT(type=" . sql_quote($set['type']) . " AND id_objet=" . intval($set['id_objet']) . ")"; $where_thisurl = $where_urllike . ($has_parent ? " AND id_parent=" . intval($set['id_parent']) : ""); if (!$has_parent and sql_countsel("spip_urls", $where_urllike) or @sql_insertq('spip_urls', $set) <= 0) { // On veut chiper une ancienne adresse ou prendre celle d'un repertoire deja present? if (!is_dir(_DIR_RACINE . $set['url']) and !file_exists(_DIR_RACINE . $set['url']) and $vieux = sql_fetsel('*', 'spip_urls', $where_thisurl, '', 'perma DESC') and !$vieux['perma'] and $courant = sql_fetsel('*', 'spip_urls', 'type=' . sql_quote($vieux['type']) . ' AND id_objet=' . sql_quote($vieux['id_objet']) . ' AND url<>' . sql_quote($set['url']) . ' AND date>' . sql_quote($vieux['date']), '', 'date DESC', 1)) { if ($confirmer and !_request('ok2')) { die("Vous voulez chiper l'URL de l'objet " . $courant['type'] . " " . $courant['id_objet'] . " qui a maintenant l'url " . $courant['url']); } $where_thisurl = "url=" . sql_quote($vieux['url']) . " AND id_parent=" . intval($vieux['id_parent']); // si oui on le chipe sql_updateq('spip_urls', $set, $where_thisurl); sql_updateq('spip_urls', array('date' => date('Y-m-d H:i:s')), $where_thisurl); spip_log("reattribue url " . $vieux['url'] . " de " . $vieux['type'] . "#" . $vieux['id_objet'] . " (parent " . $vieux['id_parent'] . ")" . " A " . $set['type'] . "#" . $set['id_objet'] . " (parent " . $set['id_parent'] . ")", "urls" . _LOG_INFO_IMPORTANTE); } else { // Soit c'est un Come Back d'une ancienne url propre de l'objet // Soit c'est un vrai conflit. Rajouter l'ID jusqu'a ce que ca passe, // mais se casser avant que ca ne casse. // il peut etre du a un changement de casse de l'url simplement // pour ce cas, on reecrit systematiquement l'url en plus d'actualiser la date $where = "type=" . sql_quote($set['type']) . " AND id_objet=" . intval($set['id_objet']) . " AND id_parent=" . intval($set['id_parent']) . " AND url LIKE "; if (!is_dir(_DIR_RACINE . $set['url']) and !file_exists(_DIR_RACINE . $set['url']) and sql_countsel('spip_urls', $where . url_sql_quote_like($set['url']))) { sql_updateq('spip_urls', array('url' => $set['url'], 'date' => date('Y-m-d H:i:s')), $where . url_sql_quote_like($set['url'])); spip_log("reordonne " . $set['type'] . " " . $set['id_objet'], "urls"); $redate = false; } else { $set['url'] .= $separateur . $set['id_objet']; if (strlen($set['url']) > 200) { return false; } elseif (sql_countsel('spip_urls', $where . url_sql_quote_like($set['url']))) { sql_updateq('spip_urls', array('url' => $set['url'], 'date' => date('Y-m-d H:i:s')), $where . url_sql_quote_like($set['url'])); $redate = false; } else { // remettre id_parent et perma comme il faut si besoin if (!$has_parent) { unset($set['id_parent']); } if ($perma) { $set['perma'] = true; } return url_insert($set, $confirmer, $separateur); } } } } $where_thisurl = 'url=' . sql_quote($set['url']) . " AND id_parent=" . intval($set['id_parent']); // maj if ($redate) { sql_updateq('spip_urls', array('date' => date('Y-m-d H:i:s')), $where_thisurl); } // si url perma, poser le flag sur la seule url qu'on vient de mettre if ($perma) { sql_update('spip_urls', array('perma' => "({$where_thisurl})"), "type=" . sql_quote($set['type']) . " AND id_objet=" . intval($set['id_objet'])); } spip_log("Creation de l'url propre '" . $set['url'] . "' pour " . $set['type'] . " " . $set['id_objet'] . " (parent " . $set['id_parent'] . " perma " . ($perma ? "1" : "0") . ")", "urls"); return true; }
function declarer_url_arbo($type, $id_objet) { static $urls=array(); // Se contenter de cette URL si elle existe ; // sauf si on invoque par "voir en ligne" avec droit de modifier l'url // l'autorisation est verifiee apres avoir calcule la nouvelle url propre // car si elle ne change pas, cela ne sert a rien de verifier les autorisations // qui requetent en base $modifier_url = $GLOBALS['var_urls']; if (!isset($urls[$type][$id_objet]) OR $modifier_url) { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table(table_objet($type)); $champ_titre = $desc['titre']; $col_id = @$desc['key']["PRIMARY KEY"]; // $type doit designer une table, avec champ indiquant un titre if (!$col_id OR !$champ_titre) return false; $table = $desc['table']; $id_objet = intval($id_objet); // parent $champ_parent = url_arbo_parent($type); $sel_parent = ($champ_parent)?", O.".reset($champ_parent).' as parent':''; // Recuperer une URL propre correspondant a l'objet. $row = sql_fetsel("U.url, U.date, O.$champ_titre $sel_parent", "$table AS O LEFT JOIN spip_urls AS U ON (U.type='$type' AND U.id_objet=O.$col_id)", "O.$col_id=$id_objet", '', 'U.date DESC', 1); if ($row){ $urls[$type][$id_objet] = $row; $urls[$type][$id_objet]['type_parent'] = $champ_parent?end($champ_parent):''; } } if (!isset($urls[$type][$id_objet])) return ""; # objet inexistant $url_propre = $urls[$type][$id_objet]['url']; if (!is_null($url_propre) AND !$modifier_url) return declarer_url_arbo_rec($url_propre,$type, isset($urls[$type][$id_objet]['parent'])?$urls[$type][$id_objet]['parent']:null, isset($urls[$type][$id_objet]['type_parent'])?$urls[$type][$id_objet]['type_parent']:null); // Sinon, creer une URL $url = pipeline('arbo_creer_chaine_url', array( 'data' => $url_propre, // le vieux url_propre 'objet' => array_merge($urls[$type][$id_objet], array('type' => $type, 'id_objet' => $id_objet) ) ) ); // Eviter de tamponner les URLs a l'ancienne (cas d'un article // intitule "auteur2") include_spip('inc/urls'); $objets = urls_liste_objets(); if (preg_match(',^('.$objets.')[0-9]*$,', $url, $r) AND $r[1] != $type) $url = $url._url_arbo_sep_id.$id_objet; // Pas de changement d'url if ($url == $url_propre) return declarer_url_arbo_rec($url_propre,$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); // verifier l'autorisation, maintenant qu'on est sur qu'on va agir if ($modifier_url) { include_spip('inc/autoriser'); $modifier_url = autoriser('modifierurl', $type, $id_objet); } // Verifier si l'utilisateur veut effectivement changer l'URL if ($modifier_url AND CONFIRMER_MODIFIER_URL AND $url_propre AND $url != preg_replace('/,.*/', '', $url_propre)) $confirmer = true; else $confirmer = false; if ($confirmer AND !_request('ok')) { die ("vous changez d'url ? $url_propre -> $url"); } $set = array('url' => $url, 'type' => $type, 'id_objet' => $id_objet); include_spip('action/editer_url'); if (url_insert($set,$confirmer,_url_arbo_sep_id)){ $urls[$type][$id_objet]['url'] = $set['url']; } else { // l'insertion a echoue, //serveur out ? retourner au mieux $urls[$type][$id_objet]['url']=$url_propre; } return declarer_url_arbo_rec($urls[$type][$id_objet]['url'],$type,$urls[$type][$id_objet]['parent'],$urls[$type][$id_objet]['type_parent']); }