diff --git a/ecrire/action/redirect.php b/ecrire/action/redirect.php index 5840e0ed1b668dd985b89a47cc64b7284a09af36..9f3c9707d7ffbde0f73f2bebbfe1978c4a379833 100644 --- a/ecrire/action/redirect.php +++ b/ecrire/action/redirect.php @@ -15,53 +15,58 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -charger_generer_url(); - // http://doc.spip.org/@action_redirect_dist function action_redirect_dist() { - global $redirect; - $redirect = _request('redirect'); + global $redirect; + $redirect = _request('redirect'); - if ($mode = _request('var_mode')) $mode = "var_mode=$mode"; + $suite =''; + if ($mode = _request('var_mode')) $suite = "var_mode=$mode"; + if ($connect = _request('connect')) { + $suite .= ($suite ? '&' : '') . "connect=$connect"; + $GLOBALS['type_urls'] = 'propres'; + } - if ($id_article = intval(_request('id_article'))) { - $r = generer_url_article($id_article,$mode,_request('ancre')); -} - else if ($id_breve = intval(_request('id_breve'))) { - $r = generer_url_breve($id_breve,$mode,_request('ancre')); -} - else if ($id_forum = intval(_request('id_forum'))) { - $r = generer_url_forum($id_forum,$mode,_request('ancre')); -} - else if ($id_rubrique = intval(_request('id_rubrique'))) { - $r = generer_url_rubrique($id_rubrique,$mode,_request('ancre')); -} - else if ($id_mot = intval(_request('id_mot'))) { - $r = generer_url_mot($id_mot,$mode,_request('ancre')); -} - else if ($id_auteur = intval(_request('id_auteur'))) { - $r = generer_url_auteur($id_auteur,$mode,_request('ancre')); -} - else if ($id_syndic = intval(_request('id_syndic')) OR $id_syndic = intval(_request('id_site'))) { - $r = generer_url_site($id_syndic,$mode,_request('ancre')); -} + charger_generer_url(); + if ($id_article = intval(_request('id_article'))) { + $r = generer_url_article($id_article,$suite,_request('ancre')); + } + else if ($id_breve = intval(_request('id_breve'))) { + $r = generer_url_breve($id_breve,$suite,_request('ancre')); + } + else if ($id_forum = intval(_request('id_forum'))) { + $r = generer_url_forum($id_forum,$suite,_request('ancre')); + } + else if ($id_rubrique = intval(_request('id_rubrique'))) { + $r = generer_url_rubrique($id_rubrique,$suite,_request('ancre')); + } + else if ($id_mot = intval(_request('id_mot'))) { + $r = generer_url_mot($id_mot,$suite,_request('ancre')); + } + else if ($id_auteur = intval(_request('id_auteur'))) { + $r = generer_url_auteur($id_auteur,$suite,_request('ancre')); + } + else if ($id_syndic = intval(_request('id_syndic')) OR $id_syndic = intval(_request('id_site'))) { + $r = generer_url_site($id_syndic,$suite,_request('ancre')); + } + // Ne pas masquer cette eventuelle erreur (aide a detecter des lignes vides // dans inc-urls ou mes_fonctions/mes_options) - else $redirect = _DIR_RESTREINT_ABS; - + else $redirect = _DIR_RESTREINT_ABS; + // si c'est un url calcule, on l'encode car spip va ensuite le decoder // avant de faire le header(location) if (isset($r)) - $redirect = rawurlencode($r); + $redirect = rawurlencode($r); // Compatibilite avec l'ancienne interface a un seul argument des generer_url_ - if ($mode AND !strpos($redirect, 'var_mode')) { - $sep = (strpos($redirect,'?') !== false) ? '&' : '?'; - if (strpos($redirect,'#')) - $redirect = str_replace('#', "$sep$mode#", $redirect); - else $redirect .= "$sep$mode"; - } + if ($mode AND !strpos($redirect, 'var_mode')) { + $sep = (strpos($redirect,'?') !== false) ? '&' : '?'; + if (strpos($redirect,'#')) + $redirect = str_replace('#', "$sep$mode#", $redirect); + else $redirect .= "$sep$mode"; + } } ?> diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php index 8c49ff7ef36caca8a9d9f8ed8594e0f73efb79d5..13e5489e2c3c2273c42dec033445aa6ca51ea1d2 100644 --- a/ecrire/inc/texte.php +++ b/ecrire/inc/texte.php @@ -38,7 +38,7 @@ function tester_variable($var, $val){ // Retourne aussi un double tableau raccourci / texte-clair les utilisant. // http://doc.spip.org/@traiter_variables_sales -function traiter_variables_sales() +function traiter_variables_sales($puce) { global $class_spip, $class_spip_plus; // class_spip : savoir si on veut class="spip" sur p i strong & li @@ -50,6 +50,8 @@ function traiter_variables_sales() return array(array( /* 0 */ "/\n(----+|____+)/S", + /* 1 */ "/\n-- */S", + /* 2 */ "/\n- */S", /* 3 */ "/\n_ +/S", /* 4 */ "/(^|[^{])[{][{][{]/S", /* 5 */ "/[}][}][}]($|[^}])/S", @@ -66,6 +68,8 @@ function traiter_variables_sales() ), array( /* 0 */ "\n\n" . tester_variable('ligne_horizontale', "\n<hr$class_spip_plus />\n") . "\n\n", + /* 1 */ "\n<br />— ", + /* 2 */ "\n<br />$puce ", /* 3 */ "\n<br />", /* 4 */ "\$1\n\n" . tester_variable('debut_intertitre', "\n<h3$class_spip_plus>"), /* 5 */ tester_variable('fin_intertitre', "</h3>\n") ."\n\n\$1", @@ -629,26 +633,36 @@ function typer_raccourci ($lien) { // 'url': seulement U (i.e. generer_url_RACCOURCI) // http://doc.spip.org/@calculer_url -function calculer_url ($lien, $texte='', $pour='url') { +function calculer_url ($lien, $texte='', $pour='url', $connect='') { if ($match = typer_raccourci($lien)) { @list($f,,$id,,$param,,$ancre) = $match; - charger_generer_url(); - $g = 'generer_url_' . $f; - if (function_exists($g) OR function_exists($g .= '_dist')) { - $res = $g($id, $param, $ancre); + $res = ''; + if ($connect) { + include_spip('inc/urls'); + $g = 'generer_url_ecrire_' . $f; + $param .= ($param ? '&' : '') . "connect=" . $connect; + if (function_exists($g)) + $res = $g($id, $param, $ancre, 'publie', $connect); + } else { + charger_generer_url(); + $g = 'generer_url_' . $f; + if (function_exists($g) OR function_exists($g .= '_dist')) + $res = $g($id, $param, $ancre); + } + if ($res) { if ($pour == 'url') return $res; $g = 'calculer_url_' . $f; if (function_exists($g) OR function_exists($g .= '_dist')) { if ($pour == 'tout') - return $g($id, $texte, $res); - $res = $g($id, $texte, $res); + return $g($id, $texte, $res, $connect); + $res = $g($id, $texte, $res, $connect); return $res[2]; - } - } + } + } spip_log("raccourci indefini $f"); } - return calculer_url_sans_rac ($lien, $texte, $pour); + return calculer_url_sans_rac($lien, $texte, $pour); } // cf specif ci-dessus @@ -685,72 +699,66 @@ function calculer_url_sans_rac ($lien, $texte='', $pour='url') { } // http://doc.spip.org/@calculer_url_article_dist -function calculer_url_article_dist($id, $texte='', $lien='') { - $s = spip_query("SELECT titre,lang FROM spip_articles WHERE id_article=$id"); - $row = sql_fetch($s); +function calculer_url_article_dist($id, $texte='', $lien='', $connect='') { + + $row = sql_fetsel('titre,lang', 'spip_articles', "id_article=$id",'','','','','','','',$connect); if (!trim($texte)) $texte = supprimer_numero($row['titre']); if (!trim($texte)) - $texte = _T('article') . $id; + $texte = _T('article') . $id; return array($lien, 'spip_in', $texte, $row['lang']); } // http://doc.spip.org/@calculer_url_rubrique_dist -function calculer_url_rubrique_dist($id, $texte='', $lien='') +function calculer_url_rubrique_dist($id, $texte='', $lien='', $connect='') { - $s = spip_query("SELECT titre,lang FROM spip_rubriques WHERE id_rubrique=$id"); - $row = sql_fetch($s); + $row = sql_fetsel('titre,lang', 'spip_rubriques', "id_rubrique=$id",'','','','','','','',$connect); if (!trim($texte)) { $texte = supprimer_numero($row['titre']); - if (!trim($texte)) - $texte = $id; + if (!trim($texte)) $texte = $id; } + return array($lien, 'spip_in', $texte, $row['lang']); } // http://doc.spip.org/@calculer_url_breve_dist - function calculer_url_breve_dist($id, $texte='', $lien='') +function calculer_url_breve_dist($id, $texte='', $lien='', $connect='') { - $s = spip_query("SELECT titre,lang FROM spip_breves WHERE id_breve=$id"); - $row = sql_fetch($s); + $row = sql_fetsel('titre,lang', 'spip_breves', "id_breve=$id",'','','','','','','',$connect); if (!trim($texte)) { $texte = supprimer_numero($row['titre']); - if (!trim($texte)) - $texte = $id; + if (!trim($texte)) $texte = $id; } return array($lien, 'spip_in', $texte, $row['lang']); } // http://doc.spip.org/@calculer_url_auteur_dist - function calculer_url_auteur_dist($id, $texte='', $lien='') +function calculer_url_auteur_dist($id, $texte='', $lien='', $connect='') { if ($texte=='') { - $s = spip_query("SELECT nom FROM spip_auteurs WHERE id_auteur=$id"); - $row = sql_fetch($s); + $row = sql_fetsel('nom', 'spip_auteurs', "id_auteur=$id",'','','','','','','',$connect); $texte = $row['nom']; } return array($lien, 'spip_in', $texte); # pas de hreflang } // http://doc.spip.org/@calculer_url_mot_dist -function calculer_url_mot_dist($id, $texte='', $lien='') +function calculer_url_mot_dist($id, $texte='', $lien='', $connect='') { if (!trim($texte)) { - $s = spip_query("SELECT titre FROM spip_mots WHERE id_mot=$id"); - $row = sql_fetch($s); + $row = sql_fetsel('titre', 'spip_mots', "id_mot=$id",'','','','','','','',$connect); $texte = supprimer_numero($row['titre']); - if (!trim($texte)) - $texte = $id; + if (!trim($texte)) $texte = $id; } return array($lien, 'spip_in', $texte); } // http://doc.spip.org/@calculer_url_document_dist - function calculer_url_document_dist($id, $texte='', $lien='') +function calculer_url_document_dist($id, $texte='', $lien='', $connect='') { if ($texte=='') { - $s = spip_query("SELECT titre,fichier FROM spip_documents WHERE id_document=$id"); - $row = sql_fetch($s); + $row = sql_fetsel('titre,fichier', 'spip_documents', "id_document=$id",'','','','','','','',$connect); + $texte = $row['titre']; if (!trim($texte)) $texte = preg_replace(",^.*/,","",$row['fichier']); @@ -761,31 +769,27 @@ function calculer_url_mot_dist($id, $texte='', $lien='') } // http://doc.spip.org/@calculer_url_site_dist -function calculer_url_site_dist($id, $texte='', $lien='') +function calculer_url_site_dist($id, $texte='', $lien='', $connect='') { # attention dans le cas des sites le lien pointe non pas sur # la page locale du site, mais directement sur le site lui-meme - $s = spip_query("SELECT nom_site,url_site FROM spip_syndic WHERE id_syndic=$id"); - $row = sql_fetch($s); + $row =sql_fetsel('nom_site,url_site', 'spip_syndic', "id_syndic=$id",'','','','','','','',$connect); if ($row) { $lien = $row['url_site']; if (!trim($texte)) $texte = supprimer_numero($row['nom_site']); - if (!trim($texte)) - $texte = $id; + if (!trim($texte)) $texte = $id; } return array($lien, 'spip_out', $texte, $row['lang']); } // http://doc.spip.org/@calculer_url_forum_dist -function calculer_url_forum_dist($id, $texte='', $lien='') +function calculer_url_forum_dist($id, $texte='', $lien='', $connect='') { if (!trim($texte)) { - $s = spip_query("SELECT titre FROM spip_forum WHERE id_forum=$id AND statut='publie'"); - $row = sql_fetch($s); + $row = sql_fetsel('titre', 'spip_forum', "id_forum=$id AND statut='publie'",'','','','','','','',$connect); $texte = $row['titre']; - if (!trim($texte)) - $texte = $id; + if (!trim($texte)) $texte = $id; } return array($lien, 'spip_in', $texte); # pas de hreflang } @@ -1027,30 +1031,32 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='') { include_spip('public/assembler'); foreach ($matches as $match) { // Recuperer l'appel complet (y compris un eventuel lien) - // $regs : 1 => modele, 2 => type, 3 => id, 4 => params, 5 => a + $a = strpos($texte,$match[0]); preg_match(_RACCOURCI_MODELE_DEBUT, substr($texte, $a), $regs); - if ($regs[5] AND preg_match( + list(,$mod, $type, $id, $params, $fin) = $regs; + if ($fin AND preg_match( ',<a\s[^<>]*>\s*$,i', substr($texte, 0, $a), $r)) { $lien = array( extraire_attribut($r[0],'href'), extraire_attribut($r[0],'class') ); - $a -= strlen($r[0]); - $cherche = $r[0].$regs[0]; + $n = strlen($r[0]); + $a -= $n; + $cherche = $n + strlen($regs[0]); } else { $lien = false; - $cherche = $regs[1]; + $cherche = strlen($mod); } // calculer le modele # hack articles_edit, breves_edit, indexation if ($doublons) - $texte .= preg_replace(',[|][^|=]*,s',' ',$regs[4]); + $texte .= preg_replace(',[|][^|=]*,s',' ',$params); # version normale else { - $modele = inclure_modele($regs[2], $regs[3], $regs[4], $lien, $connect); + $modele = inclure_modele($type, $id, $params, $lien, $connect); // le remplacer dans le texte if ($modele !== false) { @@ -1058,13 +1064,13 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='') { $rempl = code_echappement($modele, $echap); $texte = substr($texte, 0, $a) . $rempl - . substr($texte, $a+strlen($cherche)); + . substr($texte, $a+$cherche); } } // hack pour tout l'espace prive - if (((!_DIR_RESTREINT) OR ($doublons)) AND ($regs[3]) AND (in_array($regs[2],array('doc','emb','img')))) - $GLOBALS['doublons_documents_inclus'][] = $regs[3]; + if (((!_DIR_RESTREINT) OR ($doublons)) AND ($id) AND (in_array($type,array('doc','emb','img')))) + $GLOBALS['doublons_documents_inclus'][] = $id; } } @@ -1225,7 +1231,7 @@ function traiter_raccourci_lien($regs, $connect='') { list(,$texte, ,$url) = $regs; list($texte, $bulle, $hlang) = traiter_raccourci_lien_atts($texte); list ($lien, $class, $texte, $lang) = - calculer_url($url, $texte, 'tout'); + calculer_url($url, $texte, 'tout', $connect); return traiter_raccourci_lien_lang($lien, $class, $texte, $hlang, $bulle, $connect); } @@ -1336,8 +1342,9 @@ function traiter_raccourcis($letexte) { $letexte = preg_replace(",\r\n?,S", "\n", $letexte); // Recuperer les paragraphes HTML - $letexte = preg_replace(',<p\b,iS', "\n\n\\0", $letexte); - $letexte = preg_replace(',</p\b,iS', "\\0\n\n", $letexte); + + $letexte = preg_replace(",<p[>[:space:]],iS", "\n\n\\0", $letexte); + $letexte = preg_replace(",</p[>[:space:]],iS", "\\0\n\n", $letexte); $letexte = traiter_raccourci_glossaire($letexte); $letexte = traiter_raccourci_ancre($letexte); @@ -1346,7 +1353,8 @@ function traiter_raccourcis($letexte) { // A present on introduit des attributs class_spip* // Init de leur valeur et connexes au premier appel - if (!$remplace) $remplace = traiter_variables_sales(); + if (!$remplace) + $remplace = traiter_variables_sales((strpos($letexte, "\n- ") == false) ? '' : definir_puce()); // // Tableaux @@ -1384,11 +1392,6 @@ function traiter_raccourcis($letexte) { } // autres raccourcis - $puce = (strpos($letexte, "\n- ") == false) ? '' : definir_puce(); - $puce_rac = array("/\n-- */S", "/\n- */S"); - $puce_long = array("\n<br />— ", "\n<br />$puce "); - - $letexte = preg_replace($puce_rac, $puce_long, $letexte); $letexte = preg_replace($remplace[0], $remplace[1], $letexte); $letexte = preg_replace("@^ <br />@S", "", $letexte); diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php index 03aa8bca2e2baf91be4f9a727065d95ce4571b7a..81a973409833f1936c4031b6a2200ec2e9fdf5dc 100644 --- a/ecrire/inc/urls.php +++ b/ecrire/inc/urls.php @@ -16,10 +16,10 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // des items des tables SQL principales, selon le statut de publication // http://doc.spip.org/@generer_url_ecrire_article -function generer_url_ecrire_article($id, $suite='', $ancre='', $statut='') { +function generer_url_ecrire_article($id, $suite='', $ancre='', $statut='', $connect='') { $a = "id_article=" . intval($id); if (!$statut) { - $statut = sql_fetch(spip_query("SELECT statut FROM spip_articles WHERE $a")); + $statut = sql_fetsel('statut', 'spip_articles', $a,'','','','','','','',$connect); $statut = $statut['statut']; } if ($suite) $a .= "&$suite"; @@ -30,10 +30,10 @@ function generer_url_ecrire_article($id, $suite='', $ancre='', $statut='') { } // http://doc.spip.org/@generer_url_ecrire_rubrique -function generer_url_ecrire_rubrique($id, $suite='', $ancre='', $statut='') { +function generer_url_ecrire_rubrique($id, $suite='', $ancre='', $statut='', $connect='') { $a = "id_rubrique=" . intval($id); if (!$statut) { - $statut = sql_fetch(spip_query("SELECT statut FROM spip_rubriques WHERE $a")); + $statut = sql_fetsel('statut', 'spip_rubriques', $a,'','','','','','','',$connect); $statut = $statut['statut']; } if ($suite) $a .= "&$suite"; @@ -44,10 +44,10 @@ function generer_url_ecrire_rubrique($id, $suite='', $ancre='', $statut='') { } // http://doc.spip.org/@generer_url_ecrire_breve -function generer_url_ecrire_breve($id, $suite='', $ancre='', $statut='') { +function generer_url_ecrire_breve($id, $suite='', $ancre='', $statut='', $connect='') { $a = "id_breve=" . intval($id); if (!$statut) { - $statut = sql_fetch(spip_query("SELECT statut FROM spip_breves WHERE $a")); + $statut = sql_fetsel('statut', 'spip_breves', $a,'','','','','','','',$connect); $statut = $statut['statut']; } if ($suite) $a .= "&$suite"; @@ -58,7 +58,7 @@ function generer_url_ecrire_breve($id, $suite='', $ancre='', $statut='') { } // http://doc.spip.org/@generer_url_ecrire_mot -function generer_url_ecrire_mot($id, $suite='', $ancre='', $statut='') { +function generer_url_ecrire_mot($id, $suite='', $ancre='', $statut='', $connect='') { $a = "id_mot=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { @@ -68,7 +68,7 @@ function generer_url_ecrire_mot($id, $suite='', $ancre='', $statut='') { } // http://doc.spip.org/@generer_url_ecrire_site -function generer_url_ecrire_site($id, $suite='', $ancre='', $statut='') { +function generer_url_ecrire_site($id, $suite='', $ancre='', $statut='', $connect='') { $a = "id_syndic=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { @@ -78,7 +78,7 @@ function generer_url_ecrire_site($id, $suite='', $ancre='', $statut='') { } // http://doc.spip.org/@generer_url_ecrire_auteur -function generer_url_ecrire_auteur($id, $suite='', $ancre='', $statut='') { +function generer_url_ecrire_auteur($id, $suite='', $ancre='', $statut='', $connect='') { $a = "id_auteur=" . intval($id); if ($suite) $a .= "&$suite"; if (!$statut) { @@ -88,7 +88,7 @@ function generer_url_ecrire_auteur($id, $suite='', $ancre='', $statut='') { } // http://doc.spip.org/@generer_url_ecrire_forum -function generer_url_ecrire_forum($id, $suite='', $ancre='', $statut='') { +function generer_url_ecrire_forum($id, $suite='', $ancre='', $statut='', $connect='') { $a = "id_forum=" . intval($id); if ($suite) $a .= "&$suite"; $a .= "&ancre=" . $ancre; @@ -96,7 +96,7 @@ function generer_url_ecrire_forum($id, $suite='', $ancre='', $statut='') { } // http://doc.spip.org/@generer_url_ecrire_document -function generer_url_ecrire_document($id, $suite='', $ancre='', $statut='') { +function generer_url_ecrire_document($id, $suite='', $ancre='', $statut='', $connect='') { include_spip('inc/documents'); return generer_url_document_dist($id); }