function sommaire_d_une_page(&$texte, &$nbh3, $page = 0, $num_pages = 0) { static $index; if (!$index || $page === false) { $index = 0; } if ($page === false) { return; } // trouver quel <hx> est utilise $hierarchie = preg_match(',<h(\\d),', $GLOBALS['debut_intertitre'], $regs) ? $regs[1] : '3'; @define('_sommaire_NB_CARACTERES', 30); $self = nettoyer_uri(); //self();//$GLOBALS['REQUEST_URI']; // si on n'est pas en mode impression, on calcule l'image de retour au sommaire if (!defined('_CS_PRINT')) { $titre = _T('couteau:sommaire_titre'); $haut = "<a title=\"{$titre}\" href=\"" . $self . "#sommaire\" class=\"sommaire_ancre\"> </a>"; // modif cld } else { $haut = ''; } // traitement des intertitres <hx> preg_match_all(",(<h{$hierarchie}[^>]*)>(.*)</h{$hierarchie}>,Umsi", $texte, $regs); $nbh3 += count($regs[0]); $pos = 0; $sommaire = ''; // calcul de la page $p = $page ? _T('couteau:sommaire_page', array('page' => $page)) : ''; for ($i = 0; $i < count($regs[0]); $i++, $index++) { $ancre = " id=\"sommaire_{$index}\">"; // modif cld if (($pos2 = strpos($texte, $regs[0][$i], $pos)) !== false) { $titre = preg_replace(',^<p[^>]*>(.*)</p>$,Umsi', '\\1', trim($regs[2][$i])); // ancre 'haut', sauf si les blocs depliables utilisent h3... $texte = substr($texte, 0, $pos2) . $regs[1][$i] . $ancre . (strpos($regs[0][$i], 'blocs_titre') === false ? $haut : '') . $titre . substr($texte, $pos2 + strlen($regs[1][$i]) + 1 + strlen($regs[2][$i])); $pos = $pos2 + strlen($ancre) + strlen($regs[0][$i]); // tout le texte, sans les notes $brut = preg_replace(',\\[<a href=["\']#nb.*?</a>\\],', '', echappe_retour($regs[2][$i], 'CS')); // pas de glossaire if (function_exists('cs_retire_glossaire')) { $brut = cs_retire_glossaire($brut); } // texte brut $brut = preg_replace(',[\\n\\r]+,', ' ', textebrut($brut)); $lien = cs_propre(couper($brut, _sommaire_NB_CARACTERES)); $lien = preg_replace('/( |\\s)*[!?,;.:]+$/', '', $lien); // eviter une ponctuation a la fin $titre = attribut_html(couper($brut, 100)); // si la decoupe en page est active... $artpage = function_exists('decoupe_url') && (strlen(_request('artpage')) || $page > 1) ? decoupe_url($self, $page, $num_pages) : $self; $sommaire .= "<dd><a {$st} title=\"{$titre}\" href=\"{$artpage}#sommaire_{$index}\">{$lien}</a>{$p}</dd>"; // modif cld } } return $sommaire; }
function sommaire_d_une_page(&$texte, &$nbh3, $page=0, $num_pages=0) { static $index = 0; if($page===false) $index = 0; static $self = NULL; if(!isset($self)) $self = str_replace('&', '&', nettoyer_uri());//self();//$GLOBALS['REQUEST_URI']; if($page===false) return; // trouver quel <hx> est utilise $root = $niveau = $match = preg_match(',<h(\d),',$GLOBALS['debut_intertitre'],$regs)?$regs[1]:'3'; @define('_sommaire_NB_CARACTERES', 30); @define('_sommaire_PROFONDEUR', 1); if(_sommaire_PROFONDEUR>1) $match = $match .'-' . ($match+_sommaire_PROFONDEUR-1); // traitement des intertitres <hx> preg_match_all(",(<h([$match])[^>]*)>(.*)</h\\2>,Umsi", $texte, $regs); $nbh3 += count($regs[0]); $pos = 0; $sommaire = ''; // calcul de la page $suffixe = $page?_T('couteau:sommaire_page', array('page'=>$page)):''; $fct_lien_retour = function_exists('sommaire_lien_retour')?'sommaire_lien_retour':'sommaire_lien_retour_dist'; $fct_id_ancre = defined('_sommaire_JOLIES_ANCRES')?'sommaire_id_ancre_ex' :(function_exists('sommaire_id_ancre')?'sommaire_id_ancre':'sommaire_id_ancre_dist'); $nb = count($regs[0]); for($i=0;$i<$nb;$i++,$index++){ $w = &$regs[0][$i]; $h = &$regs[1][$i]; $n = &$regs[2][$i]; if (($pos2 = strpos($texte, $w, $pos))!==false) { $t = $regs[3][$i]; // calcul de l'ancre, $t peut etre modifie $ancre = $fct_id_ancre($index, $t, $n); $id = " id=\"$ancre\">"; //$titre = preg_replace(',^<p[^>]*>(.*)</p>$,Umsi', '\\1', trim($t)); // ancre 'retour au sommaire', sauf : // si on imprime, ou si les blocs depliables utilisent h{$n}... $titre = (defined('_CS_PRINT') OR (strpos($w, 'blocs_titre')!==false)) ?$t//$titre :$fct_lien_retour($self, $t);//$titre); $texte = substr($texte, 0, $pos2) . $h . $id . $titre . substr($texte, $pos2 + strlen($h)+1 + strlen($regs[3][$i])); $pos = $pos2 + strlen($id) + strlen($w); $brut = sommaire_nettoyer_titre($t); // pas trop long quand meme... $lien = cs_propre(couper($brut, _sommaire_NB_CARACTERES)); // eviter une ponctuation a la fin, surtout si la page est precisee $lien = preg_replace('/( |\s)*'.($page?'[!?,;.:]+$/':'[,;.:]+$/'), '', $lien); $titre = attribut_html(couper($brut, 100)); // si la decoupe en page est active... $artpage = (function_exists('decoupe_url') && (strlen(_request('artpage')) || $page>1) ) ?decoupe_url($self, $page, $num_pages):$self; $artpage = "\n<li><a $st title=\"$titre\" href=\"{$artpage}#$ancre\">$lien</a>$suffixe"; if($niveau==$n) $sommaire .= ($sommaire?'</li>':'').$artpage; elseif($niveau<$n) $sommaire .= "\n<ul>".$artpage; else $sommaire .= '</li></ul></li>'.$artpage; $niveau = $n; } } return $sommaire?$sommaire.'</li>'.($niveau!=$root?'</ul>':''):''; }
function BOUCLE_documenthtml_b8a8020987dd01f8087ad24f961857eb(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) { static $command = array(); static $connect; $command['connect'] = $connect = ''; $in = array(); if (!is_array($a = @$Pile[0]['mode'])) { $in[] = $a; } else { $in = array_merge($in, $a); } if (!isset($command['table'])) { $command['table'] = 'documents'; $command['id'] = '_document'; $command['from'] = array('documents' => 'spip_documents', 'L1' => 'spip_types_documents'); $command['type'] = array(); $command['groupby'] = array(); $command['select'] = array("documents.id_document", "L1.titre AS type_document", "documents.taille", "documents.mode", "documents.largeur", "documents.hauteur", "documents.titre", "L1.mime_type"); $command['orderby'] = array(); $command['join'] = array('L1' => array('documents', 'extension')); $command['limit'] = ''; $command['having'] = array(); } $command['where'] = array(array('(documents.taille > 0 OR documents.distant=\'oui\')'), array('=', 'documents.id_document', sql_quote(@$Pile[0]['id_document'], '', 'bigint(21) NOT NULL AUTO_INCREMENT')), !(is_array(@$Pile[0]['mode']) ? count(@$Pile[0]['mode']) : strlen(@$Pile[0]['mode'])) ? '' : (is_array(@$Pile[0]['mode']) ? sql_in('documents.mode', sql_quote($in)) : array('=', 'documents.mode', sql_quote(@$Pile[0]['mode'], '', 'varchar(10) NOT NULL DEFAULT \'document\'')))); if (defined("_BOUCLE_PROFILER")) { $timer = time() + microtime(); } $t0 = ""; // REQUETE $iter = IterFactory::create("SQL", $command, array('plugins-dist/medias/modeles/img.html', 'html_b8a8020987dd01f8087ad24f961857eb', '_document', 1, $GLOBALS['spip_lang'])); if (!$iter->err()) { $SP++; // RESULTATS while ($Pile[$SP] = $iter->fetch()) { $t0 .= ' ' . vide($Pile['vars'][$_zzz = (string) 'image'] = interdire_scripts(($a = match(entites_html(sinon(table_valeur(@$Pile[0], (string) 'mode_force', null), interdire_scripts($Pile[$SP]['mode'])), true), 'image|vignette') or is_string($a) and strlen($a)) ? $a : interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'embed', null), true)) ? ' ' : '')) . (($t1 = strval(table_valeur($Pile["vars"], (string) 'image', null))) !== '' ? $t1 . (' <span class=\'spip_document_' . $Pile[$SP]['id_document'] . ' spip_documents' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true)))) !== '' ? ' spip_documents_' . $t2 : '') . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'class', null), true)))) !== '' ? ' ' . $t2 : '') . ' spip_lien_ok\'' . (($t2 = strval(interdire_scripts(match(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true), 'left|right')))) !== '' ? ' style=\'float:' . $t2 . ';\'' : '') . '> ' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true)))) !== '' ? '<a href="' . $t2 . ('"' . (($t3 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien_class', null), true)))) !== '' ? ' class="' . $t3 . '"' : '') . '>') : '') . '<img src=\'' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true))) . '\'' . (($t2 = strval(interdire_scripts($Pile[$SP]['largeur']))) !== '' ? ' width="' . $t2 . '"' : '') . (($t2 = strval(interdire_scripts($Pile[$SP]['hauteur']))) !== '' ? ' height="' . $t2 . '"' : '') . ' alt="' . interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))) . '"' . (($t2 = strval(interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))))) !== '' ? ' title="' . $t2 . '"' : '') . ' />' . interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) ? '</a>' : '') . '</span> ') : '') . (!table_valeur($Pile["vars"], (string) 'image', null) ? ' ' . (' ' . vide($Pile['vars'][$_zzz = (string) 'fichier'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'src')) . ' ' . vide($Pile['vars'][$_zzz = (string) 'width'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'width')) . ' ' . vide($Pile['vars'][$_zzz = (string) 'height'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'height')) . ' <span class=\'spip_document_' . $Pile[$SP]['id_document'] . ' spip_documents' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true)))) !== '' ? ' spip_documents_' . $t2 : '') . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'class', null), true)))) !== '' ? ' ' . $t2 : '') . ' spip_lien_ok\'' . (($t2 = strval(interdire_scripts(match(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true), 'left|right')))) !== '' ? ' style=\'float:' . $t2 . (';' . (($t3 = strval(table_valeur($Pile["vars"], (string) 'width', null))) !== '' ? ' width:' . $t3 . 'px;' : '') . '\'') : '') . '><a href="' . interdire_scripts(($a = entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) or is_string($a) and strlen($a)) ? $a : vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true)))) . '"' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) ? '' : 'type="' . interdire_scripts($Pile[$SP]['mime_type']) . '"'))) !== '' ? ' ' . $t2 : '') . (($t2 = strval(interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))))) !== '' ? ' title="' . $t2 . '"' : '') . '><img src=\'' . table_valeur($Pile["vars"], (string) 'fichier', null) . '\' width=\'' . table_valeur($Pile["vars"], (string) 'width', null) . '\' height=\'' . table_valeur($Pile["vars"], (string) 'height', null) . '\' alt=\'' . interdire_scripts(attribut_html(strlen(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])) ? interdire_scripts(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])) . ' {' . interdire_scripts($Pile[$SP]['type_document']) . '}' : interdire_scripts($Pile[$SP]['type_document']))) . '\' /></a></span> ') : ''); } $iter->free(); } if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) { spip_log(intval(1000 * $timer) . "ms BOUCLE_document @ plugins-dist/medias/modeles/img.html", "profiler" . _LOG_AVERTISSEMENT); } return $t0; }
function glossaire_action_rapide() { if(_request('test_bd')) { $info = glossaire_verifie($count); $info = $info ?('<div style="color:red">'.$info.'</div>') :('<div style="color:green">'._T('couteauprive:glossaire_ok', array('nb'=>$count)).'</div>'); } else $info = ''; return ajax_action_auteur('action_rapide', 'test', 'admin_couteau_suisse', "arg=glossaire|description_outil&cmd=descrip#cs_action_rapide", "\n<fieldset><legend>"._T('couteau:test_base')."</legend><div style='text-align: center; padding:0.4em;'><input class='fondo' type='submit' value=\"" . attribut_html(_T('couteau:lancer_test')) . "\" /></div></fieldset>$info"); }
/** * une fonction pour generer une balise img a partir d'un nom de fichier * * @param string $img * @param string $alt * @param string $class * @return string */ function filtre_balise_img_dist($img,$alt="",$class=""){ $taille = taille_image($img); list($hauteur,$largeur) = $taille; if (!$hauteur OR !$largeur) return ""; return "<img src='$img' width='$largeur' height='$hauteur'" ." alt='".attribut_html($alt)."'" .($class?" class='".attribut_html($class)."'":'') .' />'; }
function BOUCLE_documents_portfoliohtml_4dc0f36e18dd7a26ebc382429cbc9835(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) { static $command = array(); static $connect; $command['connect'] = $connect = ''; $doublons_index = array(); $in = array(); $in[] = 'png'; $in[] = 'jpg'; $in[] = 'gif'; // Initialise le(s) critère(s) doublons if (!isset($doublons[$d = 'documents'])) { $doublons[$d] = ''; } if (!isset($command['table'])) { $command['table'] = 'documents'; $command['id'] = '_documents_portfolio'; $command['from'] = array('documents' => 'spip_documents', 'L1' => 'spip_documents_liens', 'L2' => 'spip_types_documents'); $command['type'] = array(); $command['groupby'] = array(); $command['select'] = array("0+documents.titre AS num", "documents.date", "documents.id_document", "L2.mime_type", "L1.id_objet AS id_rubrique", "documents.titre", "documents.fichier"); $command['orderby'] = array('num', 'documents.date'); $command['join'] = array('L1' => array('documents', 'id_document'), 'L2' => array('documents', 'extension')); $command['limit'] = ''; $command['having'] = array(); } $command['where'] = array(quete_condition_statut('documents.statut', 'publie,prop,prepa', 'publie', ''), array('(documents.taille > 0 OR documents.distant=\'oui\')'), array('=', 'L1.id_objet', sql_quote(@$Pile[0]['id_rubrique'], '', 'bigint(21) NOT NULL DEFAULT \'0\'')), array('=', 'L1.objet', sql_quote('rubrique')), array('=', 'documents.mode', "'document'"), sql_in('documents.extension', sql_quote($in)), array('=', 'L1.vu', "'non'"), array(sql_in('documents.id_document', $doublons[$doublons_index[] = 'documents'], 'NOT'))); if (defined("_BOUCLE_PROFILER")) { $timer = time() + microtime(); } $t0 = ""; // REQUETE $iter = IterFactory::create("SQL", $command, array('squelettes/inc/inc-rub-documents.html', 'html_4dc0f36e18dd7a26ebc382429cbc9835', '_documents_portfolio', 2, $GLOBALS['spip_lang'])); if (!$iter->err()) { $SP++; // RESULTATS while ($Pile[$SP] = $iter->fetch()) { foreach ($doublons_index as $k) { $doublons[$k] .= "," . $Pile[$SP]['id_document']; } // doublons $t0 .= ($t1 = strval(vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true))))) !== '' ? ' <a href="' . $t1 . ('" type="' . interdire_scripts($Pile[$SP]['mime_type']) . '" onclick="location.href=\'' . parametre_url(vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_rubrique'], 'rubrique', '', '', true))), 'id_document', $Pile[$SP]['id_document']) . '#documents_portfolio\';return false;"' . (($t2 = strval(interdire_scripts(@$Pile[0]['exposer']))) !== '' ? ' class="' . $t2 . '"' : '') . (($t2 = strval(interdire_scripts(couper(attribut_html(traiter_doublons_documents($doublons, typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))), '80')))) !== '' ? ' title="' . $t2 . '"' : '') . '>' . interdire_scripts(inserer_attribut(inserer_attribut(filtrer('image_graver', filtrer('image_reduire', copie_locale(get_spip_doc($Pile[$SP]['fichier'])), '0', '100')), 'class', 'spip_vignette_portfolio'), 'alt', interdire_scripts(couper(attribut_html(traiter_doublons_documents($doublons, typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))), '80')))) . '</a> ') : ''; } $iter->free(); } if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) { spip_log(intval(1000 * $timer) . "ms BOUCLE_documents_portfolio @ squelettes/inc/inc-rub-documents.html", "profiler" . _LOG_AVERTISSEMENT); } return $t0; }
function inc_formater_auteur_dist($id_auteur, $row=NULL) { global $connect_id_auteur, $connect_statut; $id_auteur = intval($id_auteur); if ($row===NULL) $row = sql_fetsel("*, (en_ligne<DATE_SUB(NOW(),INTERVAL 15 DAY)) AS parti", "spip_auteurs", "id_auteur=$id_auteur"); $vals = array(); $statut = $row['statut']; $href = generer_url_ecrire("auteurs","statut=$statut"); $vals[] = "<a href='$href'>" . bonhomme_statut($row) . '</a>'; if (($id_auteur == $connect_id_auteur) OR $row['parti']) $vals[]= ' '; else $vals[]= formater_auteur_mail($row, $id_auteur); if (!$nom = typo($row['nom'])) $nom = "<span style='color: red'>" . _T('texte_vide') . '</span>'; $vals[] = "<a href='" . generer_url_ecrire('auteur_infos', "id_auteur=$id_auteur") . "'" . (!$row['bio'] ? '' : (" title=\"" . attribut_html(couper(textebrut($row["bio"]), 200)) ."\"")) . ">$nom</a>"; $url = traiter_lien_explicite($row["url_site"]); $vals[] = !$url ? " " : "<a href='$url'>".couper(sinon(typo($row['nom_site']), $row["url_site"]),30)."</a>"; $contributions = array(); if (autoriser('modifier', 'auteur', $id_auteur, $row)) { $in = sql_in('statut', ($connect_statut == "0minirezo" ? array('prepa', 'prop', 'publie', 'refuse') : array('prop', 'publie'))); if ($cpt = sql_countsel("spip_auteurs_articles AS L LEFT JOIN spip_articles AS A ON A.id_article=L.id_article", "L.id_auteur=$id_auteur AND $in")) $contributions[] = ($cpt>1?$cpt.' '._T('info_article_2'):_T('info_1_article')); } else { if ($cpt = sql_countsel("spip_forum AS F", "F.id_auteur=$id_auteur")) $contributions[] = ($cpt>1?$cpt.' '._T('public:messages_forum'):('1 ' . _T('public:message'))); } $contributions = pipeline('compter_contributions_auteur',array('args'=>array('id_auteur'=>$id_auteur,'row'=>$row),'data'=>$contributions)); $vals[] = count($contributions)?implode('<br />',$contributions):" "; return $vals; }
function rainette_afficher_tendance($tendance_en, $methode = 'texte', $chemin = '', $extension = "png") { if ($methode == 'texte') { return _T('rainette:tendance_texte_' . $tendance_en); } if ($methode == 'symbole') { return _T('rainette:tendance_symbole_' . $tendance_en); } list($src, $w, $h) = rainette_icone($tendance_en, $chemin, $extension); if (!$src) { return ''; } $r = attribut_html(_T('rainette:tendance_texte_' . $tendance_en)); return "<img src='{$src}' alt='{$r}' title='{$r}' width='{$w}' height='{$h}' />"; }
function corbeille_action_rapide() { foreach(cs_corbeille_table_infos() as $table=>$obj) { list($nb, $nb_lies, $ids) = cs_corbeille_gerer($table, -1); $ids = join(',', $ids); $infos = ($nb?_T('couteauprive:corbeille_objets', array('nb'=>$nb)):_T('couteauprive:corbeille_objets_vide')) .($nb_lies>0?' '._T('couteauprive:corbeille_objets_lies', array('nb_lies'=>$nb_lies)):''); $objets[] = "<label><input type='checkbox' value='$table:$ids'".($nb?" checked='checked'":"")." name='$table'/>"._T($obj[libelle]).". <span class='ar_edit_info'>$infos</span></label>"; } return ajax_action_auteur('action_rapide', 'purge_corbeille', 'admin_couteau_suisse', "arg=corbeille|description_outil&cmd=descrip#cs_action_rapide", "\n<div style='padding:0.4em;'><fieldset><legend>"._T('couteauprive:corbeille_vider').'</legend>' . join("<br/>\n",$objets) . "<div style='text-align: right;'><input class='fondo' type='submit' value=\"" . attribut_html(_T('couteauprive:corbeille_objets_vider')) . '" /></div></fieldset></div>'); }
/** * Surcharge filtre lien_ou_expose * * Génère des menus avec liens ou `<strong class='on'>` non clicable lorsque * l'item est sélectionné * * @filtre * @example * ``` * [(#URL_RUBRIQUE|lien_expose{#TITRE, #ENV{test}|=={en_cours}})] * ``` * * @param string $url * URL du lien * @param string $libelle * Texte du lien * @param bool $on * État exposé (génère un strong) ou non (génère un lien) * @param string $class * Classes CSS ajoutées au lien * @param string $title * Title ajouté au lien * @param string $rel * Attribut `rel` ajouté au lien * @param string $evt * Complement à la balise `a` pour gérer un événement javascript, * de la forme ` onclick='...'` * @return string * Code HTML */ function lien_expose($url, $libelle = null, $on = false, $class_on = "", $class_off = "", $title = "", $rel = "", $evt = '') { if ($on) { $bal = "strong"; $att = ($class_on ? "class='". attribut_html($class_on) ."'" : "class='on'"); } else { $bal = 'a'; $att = "href='$url'" . ($title ? " title='" . attribut_html($title) . "'" : '') . ($class_off ? " class='" . attribut_html($class_off) . "'" : '') . ($rel ? " rel='" . attribut_html($rel) . "'" : '') . $evt; } if ($libelle === null) { $libelle = $url; } return "<$bal $att>$libelle</$bal>"; }
/** * Afficher l'arborescence du dossier squelette * * @param string $path_base * @param string $current_file * @return string */ function skeleditor_afficher_dir_skel($path_base,$current_file) { include_spip('inc/skeleditor'); include_spip('inc/presentation'); $file_list = skeleditor_files_editables($path_base); $current_file = substr($current_file,strlen($path_base)); $output = "<div id='arbo'><div class='dir'>\n"; $init_dir = $current_dir = ""; foreach($file_list as $file){ $dir = substr(dirname($file),strlen($path_base)); $file = substr($file,strlen($path_base)); if ($dir != $current_dir) $output .= skeleditor_tree_open_close_dir($current_dir,$dir,$current_file); $class="fichier"; $readonly = false; if (!is_writable($path_base.$dir) OR !is_writable($path_base.$file)) { $readonly = true; $class .= " readonly"; } $class .= ($file==$current_file?" on":''); $icon = "file"; if (preg_match(',('._SE_EXTENSIONS_IMG.')$,',$file)) $icon = "image"; include_spip('inc/filtres_images_mini'); $cadenas = ($readonly) ? " ".inserer_attribut(image_reduire(chemin_image('cadenas-16.png'),12),'title',attribut_html(_T('texte_inc_meta_2'))) : ""; $output .= "<a href='".generer_url_ecrire('skeleditor','f='.urlencode($f=$path_base.$file))."' class='$class' onclick=\"jQuery('#contenu > :first').ajaxReload({history:true,args:{f:'$f'}});return false;\">" . "<img src='"._DIR_PLUGIN_SKELEDITOR."images/se-$icon-16.png' alt='$icon' /> " .basename($file) .$cadenas . "</a>" ; } $output .= skeleditor_tree_open_close_dir($current_dir,$init_dir,$current_file); $output .= "</div></div>\n"; return $output; }
function pack_action_rapide() { include_spip('inc/texte'); // pour attribut_html() switch($n = count($GLOBALS['cs_installer'])) { case 0 : $info = _T('couteauprive:pack_nb_zero'); break; case 1 : $info = _T('couteauprive:pack_nb_un'); break; default : $info = _T('couteauprive:pack_nb_plrs', array('nb' => $n)); } $liste = $script = ''; if($n) { $exec = _request('exec'); $fin_delete = _T('couteauprive:pack_delete'); $fin_delete = "\" class='pack_delete' title=\"$fin_delete\"><img src=\""._DIR_IMG_PACK."poubelle.gif\" width='12' height='12' alt=\"$fin_delete\" /></a> <a href=\""; $fin_install = _T('couteauprive:pack_installe'); $fin_install = "\" class='pack_install' title=\"$fin_install\"><img src=\""._DIR_IMG_PACK."secteur-12.gif\" width='12' height='12' alt=\"$fin_install\" /></a> "; foreach(array_keys($GLOBALS['cs_installer']) as $pack) { $u = urlencode($pack); $liste .= "\n-* <a href=\"" . generer_url_ecrire($exec,'cmd=delete&pack='.$u) . $fin_delete . generer_url_ecrire($exec,'cmd=install&pack='.$u) . $fin_install . $pack; } $liste = propre($liste); $script = "<script type=\"text/javascript\"><!-- if (window.jQuery) jQuery(function(){ jQuery('a.pack_delete').click( function() { msg=\"".cs_javascript('couteauprive:pack_supprimer')."\"; return window.confirm(msg.replace(/@pack@/,jQuery(this).parent().text().trim())); }); jQuery('a.pack_install').click( function() { msg=\"".cs_javascript('couteauprive:pack_installer').'\n\n'.cs_javascript('couteauprive:cs_reset2')."\"; return window.confirm(msg.replace(/@pack@/,jQuery(this).parent().text().trim())); }); }); //--></script>\n"; } // appel direct, sans ajax, histoire de mettre a jour le menu : return redirige_action_post('action_rapide', 'sauve_pack', 'admin_couteau_suisse', "cmd=pack#cs_infos", "\n$script<div style='padding:0.4em;'><p>$info</p>$liste<p>"._T('couteauprive:pack_sauver_descrip', array('file' => show_file_options())) ."</p><div style='text-align: center;'><input class='fondo' type='submit' value=\"" .attribut_html(_T('couteauprive:pack_sauver')) . "\" /></div></div>"); }
function affiche_prix($valeur, $decimales = 2, $devise = "EUR") { $devise_dir = 'right'; switch ($devise) { case 'EUR': $devise_display = " €"; break; case 'USD': $devise_display = "\$"; $devise_dir = 'left'; break; default: $devise_display = str_replace(' ', ' ', $devise); break; } $devise = '<span itemprop="priceCurrency" content="' . attribut_html(trim($devise)) . '">' . $devise_display . '</span>'; $price = '<span itemprop="price" content="' . attribut_html($valeur) . '">' . sprintf("%.{$decimales}f", $valeur) . '</span>'; if ($devise_dir !== 'right') { return $devise . $price; } return $price . $devise; }
function selectionner_auteur_boucle($where, $idom) { $info = generer_url_ecrire('informer_auteur', "id="); $idom3 = $idom . '_selection'; $idom2 = $idom . '_new'; $idom1 = $idom . '_div'; $args = "'$idom3', '$info', event"; $res = ''; $all = sql_allfetsel("nom, id_auteur", "spip_auteurs", $where, '', "nom, statut"); foreach ($all as $row) { $id = $row["id_auteur"]; $nom = typo($row["nom"]); // attention, les <a></a> doivent etre au premier niveau // et se suivrent pour que changerhighligth fonctionne // De plus, leur zone doit avoir une balise et une seule // autour de la valeur pertinente pour que aff_selection // fonctionne (faudrait concentrer tout ca). $res .= "<a class='highlight off'" . "\nonclick=\"changerhighlight(this);" . "findObj_forcer('$idom2').value=" . $id . "; aff_selection($id,$args); return false;" . "\"\nondblclick=\"" // incomplet: le selecteur devient indisponible. A ameliorer . "findObj_forcer('$idom').parentNode.innerHTML='" . attribut_html($nom) . "'; findObj_forcer('$idom2').value=" . $id . "; return false" . "\"><b>" . $nom . "</b></a>"; } return $res; }
function spip_cache_action_rapide() { include_spip('inc/texte'); // pour attribut_html() if ($n = taille_du_cache()) $info = _T('taille_cache_octets', array('octets' => taille_en_octets($n))); else $info = _T('taille_cache_vide'); // <legend> : pour la description de l'outil inactif // syntaxe : ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args_ajax='', $fct_ajax='') // on envoie une action 'action_rapide' car 'purger' n'existe pas (encore?) en exec/ return ajax_action_auteur('action_rapide', 'cache', 'admin_couteau_suisse', "arg=spip_cache|description_outil&cmd=descrip#cs_action_rapide", "\n<fieldset class='cs_hidden'><legend>"._T('bouton_vider_cache')."</legend></fieldset><div style='text-align: center; padding:0.4em;'>$info<br /><input class='fondo' type='submit' value=\"" . attribut_html(_T('bouton_vider_cache')) . '" /></div>') // bouton d'acualisation . ajax_action_auteur('action_rapide', 'actualise', 'admin_couteau_suisse', "arg=spip_cache|description_outil&cmd=descrip#cs_action_rapide", "\n<div class='cs_sobre'><input class='cs_sobre' type='submit' value=\" [" . attribut_html(_T('couteauprive:rss_actualiser')).']" /></div>'); /* // appel direct vers SPIP, sans ajax : return redirige_action_post('purger', 'cache', 'admin_couteau_suisse', "cmd=descrip&outil=spip_cache#cs_infos", "\n<div style='text-align: center; padding:0.4em;'><input class='fondo' type='submit' value=\"" . attribut_html(_T('bouton_vider_cache')) . "\" /> ($info)</div>"); */ }
/** * Generer un bouton_action * utilise par #BOUTON_ACTION * * @param string $libelle * @param string $url * @param string $class * @param string $confirm * message de confirmation oui/non avant l'action * @param string $title * @param string $callback * callback js a appeler lors de l'evenement action (apres confirmation eventuelle si $confirm est non vide) * et avant execution de l'action. Si la callback renvoie false, elle annule le declenchement de l'action * @return string */ function bouton_action($libelle, $url, $class = "", $confirm = "", $title = "", $callback = "") { if ($confirm) { $confirm = "confirm(\"" . attribut_html($confirm) . "\")"; if ($callback) { $callback = "{$confirm}?({$callback}):false"; } else { $callback = $confirm; } } $onclick = $callback ? " onclick='return " . addcslashes($callback, "'") . "'" : ""; $title = $title ? " title='{$title}'" : ""; return "<form class='bouton_action_post {$class}' method='post' action='{$url}'><div>" . form_hidden($url) . "<button type='submit' class='submit'{$title}{$onclick}>{$libelle}</button></div></form>"; }
/** * Afficher un petit "i" pour lien vers autre page * * @param string $lien * URL du lien desire * @param string $titre * Titre au survol de l'icone pointant le lien * @param string $titre_lien * Si present, ajoutera en plus apres l'icone * un lien simple, vers la meme URL, * avec le titre indique * * @return string */ function afficher_plus_info($lien, $titre = "+", $titre_lien = "") { $titre = attribut_html($titre); $icone = "\n<a href='{$lien}' title='{$titre}' class='plus_info'>" . http_img_pack("information-16.png", $titre) . "</a>"; if (!$titre_lien) { return $icone; } else { return $icone . "\n<a href='{$lien}'>{$titre_lien}</a>"; } }
/** * Completer le formulaire de login avec le js ou les saisie specifiques a ce mode d'auth * * @param array $flux * @return array */ function auth_spip_formulaire_login($flux) { // faut il encore envoyer md5 ? // on regarde si il reste des pass md5 en base pour des auteurs en statut pas poubelle // les hash md5 ont une longueur 32, les sha 64 $compat_md5 = sql_countsel("spip_auteurs", "length(pass)=32 AND statut<>'poubelle'"); // javascript qui gere la securite du login en evitant de faire circuler le pass en clair $flux['data'] .= ($compat_md5 ? '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'md5.js"></script>' : '') . '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'sha256.js"></script>' . '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'login.js"></script>' . '<script type="text/javascript">/*<![CDATA[*/' . "var alea_actuel='" . $flux['args']['contexte']['_alea_actuel'] . "';" . "var alea_futur='" . $flux['args']['contexte']['_alea_futur'] . "';" . "var login='******'args']['contexte']['var_login'] . "';" . "var page_auteur = '" . generer_url_public('informer_auteur') . "';" . "var informe_auteur_en_cours = false;" . "var attente_informe = 0;" . "var compat_md5 = " . ($compat_md5 ? "true;" : "false;") . "(function(\$){\n\t\t\$('#password')\n\t\t\t.after(\"<em id='pass_securise'><img src='" . chemin_image('cadenas-16.png') . "' width='16' height='16' alt='" . attribut_html(_T('login_securise')) . "' title='" . attribut_html(_T('login_securise')) . "' \\/><\\/em>\");\n\t\taffiche_login_secure();\n\t\t\$('#var_login').change(actualise_auteur);\n\t\t\$('form#formulaire_login').submit(login_submit);\n\t}(jQuery));" . "/*]]>*/</script>"; return $flux; }
function statistiques_par_mois($entrees, $script){ $maxgraph = maxgraph(max($entrees)); $rapport = 200/$maxgraph; $largeur = floor(420 / (count($entrees))); if ($largeur < 1) $largeur = 1; if ($largeur > 50) $largeur = 50; $decal = 0; $tab_moyenne = array(); $all = ''; foreach($entrees as $key=>$value) { $key = substr($key,0,4).'-'.substr($key,4,2); $mois = affdate_mois_annee($key); if ($decal == 30) $decal = 0; $decal ++; $tab_moyenne[$decal] = $value; $moyenne = statistiques_moyenne($tab_moyenne); $hauteur_moyenne = round($moyenne * $rapport) - 1; $hauteur = round($value * $rapport) - 1; $res = ''; $title= attribut_html(supprimer_tags("$mois | " ._T('info_total')." ".$value)); $tagtitle = $script ? '' : $title; if ($hauteur > 0){ if ($hauteur_moyenne > $hauteur) { $difference = ($hauteur_moyenne - $hauteur) -1; $res .= http_img_rien($largeur, 1, 'trait_moyen'); $res .= http_img_rien($largeur, $difference, '', $tagtitle); $res .= http_img_rien($largeur,1,"trait_haut"); if (preg_match(",-01,",$key)){ // janvier en couleur foncee $res .= http_img_rien($largeur,$hauteur,"couleur_janvier", $tagtitle); } else { $res .= http_img_rien($largeur,$hauteur,"couleur_mois", $tagtitle); } } else if ($hauteur_moyenne < $hauteur) { $difference = ($hauteur - $hauteur_moyenne) -1; $res .= http_img_rien($largeur,1,"trait_haut", $tagtitle); if (preg_match(",-01,",$key)){ // janvier en couleur foncee $couleur = 'couleur_janvier'; } else { $couleur = 'couleur_mois'; } $res .= http_img_rien($largeur,$difference, $couleur, $tagtitle); $res .= http_img_rien($largeur,1,'trait_moyen',$tagtitle); $res .= http_img_rien($largeur,$hauteur_moyenne, $couleur, $tagtitle); } else { $res .= http_img_rien($largeur,1,"trait_haut", $tagtitle); if (preg_match(",-01,",$key)){ // janvier en couleur foncee $res .= http_img_rien($largeur, $hauteur, "couleur_janvier", $tagtitle); } else { $res .= http_img_rien($largeur,$hauteur, "couleur_mois", $tagtitle); } } } $res .= http_img_rien($largeur,1,'trait_bas', $tagtitle); if (!$script) { $y = annee($key); $m = mois($key); $href = generer_url_ecrire('calendrier', "type=mois&annee=$y&mois=$m&jour=1"); } else $href = "$script&date=$key"; $all .= "\n<td style='width: ${largeur}px'><a href='" . $href . '\' title="' . $title . '">' . $res . "</a></td>\n"; } return "\n<table cellpadding='0' cellspacing='0' border='0'><tr>" . "\n<td ".http_style_background("fond-stats.gif").">" . "\n<table cellpadding='0' cellspacing='0' border='0' class='bottom'><tr>" . "\n<td class='trait_bas'>" . http_img_rien(1, 200) ."</td>" . $all . "\n<td style='background-color: black'>" . http_img_rien(1, 1) . "</td>" . "</tr></table></td>" . "\n<td ".http_style_background("fond-stats.gif")." valign='bottom'>" . http_img_rien(3, 1, 'trait_bas') ."</td>" . "\n<td>" . http_img_rien(5, 1) ."</td>" . "\n<td valign='top'>" . statistiques_echelle($maxgraph) . "</td></tr></table>"; }
function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $class = 'spip_logos') { include_spip('inc/distant'); include_spip('inc/texte'); include_spip('inc/filtres_images_mini'); $e = $doc['extension']; if (!$img) { if ($img = image_du_document($doc)) { if (!$x and !$y) { // eviter une double reduction $img = image_reduire($img); } } else { $f = charger_fonction('vignette', 'inc'); $img = $f($e, false); $size = @getimagesize($img); $img = "<img src='{$img}' " . $size[3] . " />"; } } else { $size = @getimagesize($img); $img = "<img src='{$img}' " . $size[3] . " />"; } // on appelle image_reduire independamment de la presence ou non // des librairies graphiques // la fonction sait se debrouiller et faire de son mieux dans tous les cas if ($x or $y) { $img = image_reduire($img, $x, $y); } $img = inserer_attribut($img, 'alt', ''); $img = inserer_attribut($img, 'class', $class); if ($align) { $img = inserer_attribut($img, 'align', $align); } if (!$lien) { return $img; } $titre = supprimer_tags(typo($doc['titre'])); $titre = " - " . taille_en_octets($doc['taille']) . ($titre ? " - {$titre}" : ""); $type = sql_fetsel('titre, mime_type', 'spip_types_documents', "extension = " . sql_quote($e)); $mime = $type['mime_type']; $titre = attribut_html(couper($type['titre'] . $titre, 80)); return "<a href='{$lien}' type='{$mime}' title='{$titre}'>{$img}</a>"; }
/** * Lister les fichiers contenus dans un zip * * @param array $files * La liste des fichiers * @return string $res * La liste HTML des fichiers <li>...</li> */ function joindre_liste_contenu_tailles_archive($files) { include_spip('inc/charsets'); # pour le nom de fichier $res = ''; if (is_array($files)) { foreach ($files as $nom => $file) { $nom = translitteration($nom); $date = date_interface(date("Y-m-d H:i:s", $file['mtime'])); $taille = taille_en_octets($file['size']); $res .= "<li title=\"" . attribut_html($title) . "\"><b>{$nom}</b> – {$taille}<br /> {$date}</li>\n"; } } return $res; }
function inc_lien_dist($lien, $texte = '', $class = '', $title = '', $hlang = '', $rel = '', $connect = '', $env = array()) { static $u = null; if (!$u) { $u = url_de_base(); } $typo = false; // Si une langue est demandee sur un raccourci d'article, chercher // la traduction ; // - [{en}->art2] => traduction anglaise de l'article 2, sinon art 2 // - [{}->art2] => traduction en langue courante de l'art 2, sinon art 2 // s'applique a tout objet traduit if ($hlang and $match = typer_raccourci($lien)) { @(list($type, , $id, , $args, , $ancre) = $match); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table(table_objet($type, $connect), $connect); if ($desc and $id_table_objet = $desc['key']['PRIMARY KEY']) { $table_objet_sql = $desc['table']; if ($row = sql_fetsel('*', $table_objet_sql, "{$id_table_objet}=" . intval($id)) and isset($row['id_trad']) and isset($row['lang']) and $id_dest = sql_getfetsel($id_table_objet, $table_objet_sql, "id_trad=" . intval($row['id_trad']) . " AND lang=" . sql_quote($hlang)) and objet_test_si_publie($type, $id_dest)) { $lien = "{$type}{$id_dest}"; } else { $hlang = ''; } } else { $hlang = ''; } } $mode = ($texte and $class) ? 'url' : 'tout'; $lien = calculer_url($lien, $texte, $mode, $connect); if ($mode === 'tout') { $texte = $lien['titre']; if (!$class and isset($lien['class'])) { $class = $lien['class']; } $lang = isset($lien['lang']) ? $lien['lang'] : ''; $mime = isset($lien['mime']) ? " type='" . $lien['mime'] . "'" : ""; $lien = $lien['url']; } $lien = trim($lien); if (strncmp($lien, "#", 1) == 0) { # ancres pures (internes a la page) $class = 'spip_ancre'; } elseif (strncasecmp($lien, 'mailto:', 7) == 0) { # pseudo URL de mail $class = "spip_mail"; } elseif (strncmp($texte, '<html>', 6) == 0) { # cf traiter_lien_explicite $class = "spip_url spip_out"; } elseif (!$class) { $class = "spip_out"; } # si pas spip_in|spip_glossaire // Si l'objet n'est pas de la langue courante, on ajoute hreflang if (!$hlang and $lang !== $GLOBALS['spip_lang']) { $hlang = $lang; } $lang = $hlang ? " hreflang='{$hlang}'" : ''; if ($title) { $title = ' title="' . attribut_html($title) . '"'; } else { $title = ''; } // $title peut etre 'false' // rel=external pour les liens externes if ((strncmp($lien, 'http://', 7) == 0 or strncmp($lien, 'https://', 8) == 0) and strncmp("{$lien}/", $u, strlen($u)) != 0) { $rel = trim("{$rel} external"); } if ($rel) { $rel = " rel='{$rel}'"; } // si pas de modele dans le texte du lien, on peut juste passer typo sur le texte, c'est plus rapide // les rares cas de lien qui encapsule un modele passe en dessous, c'est plus lent if (traiter_modeles($texte, false, '', $connect, null, $env) == $texte) { $texte = typo($texte, true, $connect, $env); $lien = "<a href=\"" . str_replace('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}" . (isset($mime) ? $mime : '') . ">{$texte}</a>"; return $lien; } # ceci s'execute heureusement avant les tableaux et leur "|". # Attention, le texte initial est deja echappe mais pas forcement # celui retourne par calculer_url. # Penser au cas [<imgXX|right>->URL], qui exige typo('<a>...</a>') $lien = "<a href=\"" . str_replace('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>"; $res = typo($lien, true, $connect, $env); // dans ce cas, echapons le resultat du modele pour que propre etc ne viennent pas pouicher le html $res = echappe_html("<html>{$res}</html>"); return $res; }
function BOUCLE_articles_edito2html_0167a54ed63f4fd0ee2bbef24b5ac307(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) { static $command = array(); static $connect; $command['connect'] = $connect = ''; $in = array(); if (!is_array($a = @$Pile[0]['lang'])) { $in[] = $a; } else { $in = array_merge($in, $a); } if (!isset($command['table'])) { $command['table'] = 'articles'; $command['id'] = '_articles_edito2'; $command['from'] = array('articles' => 'spip_articles', 'L1' => 'spip_mots_liens', 'L2' => 'spip_mots'); $command['type'] = array(); $command['groupby'] = array("articles.id_article"); $command['select'] = array("articles.date", "articles.titre", "articles.id_article", "articles.id_rubrique", "articles.descriptif", "articles.chapo", "articles.texte", "articles.lang"); $command['orderby'] = array('articles.date DESC'); $command['join'] = array('L1' => array('articles', 'id_objet', 'id_article', 'L1.objet=' . sql_quote('article')), 'L2' => array('L1', 'id_mot')); $command['limit'] = '0,10'; $command['having'] = array(); } $command['where'] = array(quete_condition_statut('articles.statut', 'publie,prop,prepa/auteur', 'publie', ''), !(is_array(@$Pile[0]['lang']) ? count(@$Pile[0]['lang']) : strlen(@$Pile[0]['lang'])) ? '' : (is_array(@$Pile[0]['lang']) ? sql_in('articles.lang', sql_quote($in)) : array('=', 'articles.lang', sql_quote($GLOBALS['spip_lang'], '', 'varchar(10) NOT NULL DEFAULT \'\''))), array('=', 'L2.titre', "'Editorial'")); if (defined("_BOUCLE_PROFILER")) { $timer = time() + microtime(); } $t0 = ""; // REQUETE $iter = IterFactory::create("SQL", $command, array('squelettes/inc/inc-sommaire-edito.html', 'html_0167a54ed63f4fd0ee2bbef24b5ac307', '_articles_edito2', 60, $GLOBALS['spip_lang'])); if (!$iter->err()) { lang_select($GLOBALS['spip_lang']); $SP++; // RESULTATS while ($Pile[$SP] = $iter->fetch()) { lang_select_public($Pile[$SP]['lang'], '', $Pile[$SP]['titre']); $t0 .= ' <br class="nettoyeur" /> ' . (($t1 = strval(interdire_scripts(supprimer_numero(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))))) !== '' ? '<h3 class="edito-titre"><a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '">' . $t1 . '</a></h3>' : '') . ' ' . (($t1 = strval(filtrer('image_graver', filtrer('image_reduire', strlen($logo = !is_array($l = quete_logo('id_article', 'ON', $Pile[$SP]['id_article'], $Pile[$SP]['id_rubrique'], 0)) ? '' : "<img class=\"spip_logo spip_logos\" alt=\"\" src=\"{$l['0']}\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src='{$l['1']}'\" onmouseout=\"this.src='{$l['0']}'\"" : "") . ' />') ? '<a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '">' . $logo . '</a>' : '', '150', '0')))) !== '' ? '<div class="logo-liste-art"> ' . $t1 . ' </div>' : '') . ' ' . (($t1 = strval(interdire_scripts(propre($Pile[$SP]['descriptif'], $connect, $Pile[0]) ? (($t2 = strval(interdire_scripts(propre($Pile[$SP]['descriptif'], $connect, $Pile[0])))) !== '' ? '<div class="">' . $t2 . '</div>' : '') . ' ' : interdire_scripts(propre($Pile[$SP]['chapo'], $connect, $Pile[0]) ? (($t3 = strval(interdire_scripts(propre($Pile[$SP]['chapo'], $connect, $Pile[0])))) !== '' ? '<div class="">' . $t3 . '</div>' : '') . ' ' : (($t3 = strval(interdire_scripts(couper(propre($Pile[$SP]['texte'], $connect, $Pile[0]), '300')))) !== '' ? '<div class="">' . $t3 . '</div>' : '') . ' ') . ' '))) !== '' ? '<div class="chapo">' . $t1 . (' <div class="suite"><a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '" title="...' . _T('public|spip|ecrire:suite') . ' : ' . interdire_scripts(attribut_html(supprimer_numero(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])))) . '" >' . _T('public|spip|ecrire:suite') . '</a></div> </div><!-- fin chapo -->') : '') . ' '; lang_select(); } lang_select(); $iter->free(); } if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) { spip_log(intval(1000 * $timer) . "ms BOUCLE_articles_edito2 @ squelettes/inc/inc-sommaire-edito.html", "profiler" . _LOG_AVERTISSEMENT); } return $t0; }
/** * Completer le formulaire de login avec le js ou les saisie specifiques a ce mode d'auth * * @param array $flux * @return array */ function auth_spip_formulaire_login($flux) { // faut il encore envoyer md5 ? // on regarde si il reste des pass md5 en base pour des auteurs en statut pas poubelle // les hash md5 ont une longueur 32, les sha 64 // en evitant une requete sql a chaque affichage du formulaire login sans session // (perf issue pour les sites qui mettent le formulaire de login sur la home) $compat_md5 = false; if (!isset($GLOBALS['meta']['sha_256_only']) or _request('var_mode')) { $compat_md5 = sql_countsel("spip_auteurs", "length(pass)=32 AND statut<>'poubelle'"); if ($compat_md5 and isset($GLOBALS['meta']['sha_256_only'])) { effacer_meta('sha_256_only'); } if (!$compat_md5) { ecrire_meta('sha_256_only', 'oui'); } } // javascript qui gere la securite du login en evitant de faire circuler le pass en clair $flux['data'] .= ($compat_md5 ? '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'md5.js"></script>' : '') . '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'login-sha-min.js"></script>' . '<script type="text/javascript">/*<![CDATA[*/' . "var login_info={'alea_actuel':'" . $flux['args']['contexte']['_alea_actuel'] . "'," . "'alea_futur':'" . $flux['args']['contexte']['_alea_futur'] . "'," . "'login':'******'args']['contexte']['var_login'] . "'," . "'page_auteur': '" . generer_url_public('informer_auteur') . "'," . "'informe_auteur_en_cours':false," . "'attente_informe':0," . "'compat_md5':" . ($compat_md5 ? "true" : "false") . "};" . "jQuery(function(){\n\tjQuery('#password').after(\"<em id='pass_securise'><img src='" . chemin_image('cadenas-16.png') . "' width='16' height='16' alt='" . attribut_html(_T('login_securise')) . "' title='" . attribut_html(_T('login_securise')) . "' \\/><\\/em>\");\n\tif (login_info.alea_actuel) jQuery('#pass_securise').show(); else jQuery('#pass_securise').hide();\n\tjQuery('#var_login').change(function(){actualise_auteur();});\n\tjQuery('form#formulaire_login').submit(function(){login_submit();});\n});" . "/*]]>*/</script>"; return $flux; }
/** * Construit un bloc permettant d'activer le sélecteur de rubrique AJAX * * Construit un bloc comportant une icone clicable avec image animée à côté * pour charger en Ajax du code à mettre sous cette icone. * * @note * Attention: changer le onclick si on change le code Html. * (la fonction JS charger_node ignore l'attribut id qui ne sert en fait pas; * getElement en mode Ajax est trop couteux). * * @param string $url * URL qui retournera le contenu du sélecteur en AJAX * @param string $js * Code javascript ajouté sur onclick * @param string $idom * Identifiant donné à l'image activant l'ajax et au block recevant son contenu * @param string $name * Nom du champ à envoyer par le formulaire * @param string $init * Code HTML à l'intérieur de l'input titreparent * @param int $id * Valeur actuelle du champ * @return string * Code HTML du sélecteur de rubrique AJAX **/ function construire_selecteur($url, $js, $idom, $name, $init = '', $id = 0) { $icone = strpos($idom, 'auteur') !== false ? 'auteur-24.png' : 'rechercher-20.png'; return "<div class='rubrique_actuelle'><a href='#' onclick=\"" . $js . "return charger_node_url_si_vide('" . $url . "', this.parentNode.nextSibling, this.nextSibling,'',event)\" title='" . attribut_html(_T('titre_image_selecteur')) . "'><img src='" . chemin_image($icone) . "'\nstyle='vertical-align: middle;' alt='" . attribut_html(_T('titre_image_selecteur')) . "' /></a><img src='" . chemin_image('searching.gif') . "' id='img_" . $idom . "'\nstyle='visibility: hidden;' alt='*' />" . "<input id='titreparent' name='titreparent'" . $init . " />" . "<input type='hidden' id='{$name}' name='{$name}' value='" . $id . "' /><div class='nettoyeur'></div></div><div id='" . $idom . "'\nstyle='display: none;'></div>"; }
function inc_lien($lien, $texte = '', $class = '', $title = '', $hlang = '', $rel = '', $connect = '') { # Tests TW if (!$GLOBALS['tw']) { return inc_lien_dist($lien, $texte, $class, $title, $hlang, $rel, $connect); } static $u = null; if (!$u) { $u = url_de_base(); } $typo = false; // Si une langue est demandee sur un raccourci d'article, chercher // la traduction ; // - [{en}->art2] => traduction anglaise de l'article 2, sinon art 2 // - [{}->art2] => traduction en langue courante de l'art 2, sinon art 2 if ($hlang and $match = typer_raccourci($lien)) { @(list($type, , $id, , $args, , $ancre) = $match); if ($id_trad = sql_getfetsel('id_trad', 'spip_articles', "id_article={$id}") and $id_dest = sql_getfetsel('id_article', 'spip_articles', "id_trad={$id_trad} AND lang=" . sql_quote($hlang))) { $lien = "{$type}{$id_dest}"; } else { $hlang = ''; } } $mode = ($texte and $class) ? 'url' : 'tout'; $lien = calculer_url($lien, $texte, $mode, $connect); if ($mode === 'tout') { $texte = $lien['titre']; if (!$class and isset($lien['class'])) { $class = $lien['class']; } $lang = isset($lien['lang']) ? $lien['lang'] : ''; $mime = isset($lien['mime']) ? " type='" . $lien['mime'] . "'" : ""; $lien = $lien['url']; } $lien = trim($lien); if (strncmp($lien, "#", 1) == 0) { # ancres pures (internes a la page) $class = 'spip_ancre'; } elseif (strncasecmp($lien, 'mailto:', 7) == 0) { # pseudo URL de mail $class = "spip_mail"; } elseif (strncmp($texte, '<html>', 6) == 0) { # cf traiter_lien_explicite $class = "spip_url spip_out"; } elseif (!$class) { $class = "spip_out"; } # si pas spip_in|spip_glossaire // Si l'objet n'est pas de la langue courante, on ajoute hreflang if (!$hlang and $lang !== $GLOBALS['spip_lang']) { $hlang = $lang; } $lang = $hlang ? " hreflang='{$hlang}'" : ''; if ($title) { $title = ' title="' . attribut_html($title) . '"'; } // rel=external pour les liens externes if ((strncmp($lien, 'http://', 7) == 0 or strncmp($lien, 'https://', 8) == 0) and strncmp("{$lien}/", $u, strlen($u)) != 0) { $rel = trim("{$rel} external"); } if ($rel) { $rel = " rel='{$rel}'"; } if (traiter_modeles($texte, false, $echapper ? 'TYPO' : '', $connect) == $texte) { $texte = typo($texte, true, $connect); $lien = "<a href=\"" . str_replace('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>"; return $lien; } # ceci s'execute heureusement avant les tableaux et leur "|". # Attention, le texte initial est deja echappe mais pas forcement # celui retourne par calculer_url. # Penser au cas [<imgXX|right>->URL], qui exige typo('<a>...</a>') $lien = "<a href=\"" . str_replace('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>"; return typo($lien, true, $connect); }
function cs_action_fichiers_distants(&$outil, $forcer=false, $tester=false) { if(!isset($outil['fichiers_distants'])) return ''; $lib = sous_repertoire(_DIR_PLUGIN_COUTEAU_SUISSE, 'lib'); $a = array(); foreach($outil['fichiers_distants'] as $i) { $erreur = false; $res_pipe = ''; $dir = sous_repertoire($lib, $outil['id']); preg_match('/[^?]*/', basename($outil[$i]), $reg); $f = 'distant_' . $reg[0]; $file = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$dir.$f)); $file = $file['fichier_local']; $f = basename($file); $size = ($forcer || @(!file_exists($file)) ? 0 : filesize($file)); if($size) $statut = _T('couteauprive:distant_present', array('date'=>cs_date_long(date('Y-m-d H:i:s', filemtime($file))))); elseif($outil['actif'] || $forcer) { include_spip('inc/distant'); if($distant = recuperer_page($outil[$i])) { $distant = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$file, 'fichier_distant'=>$outil[$i], 'message'=>'', 'texte'=>$distant, 'actif'=>$outil['actif'])); $file = $distant['fichier_local']; $message = $distant['message'] . "\n_ " . _T('couteauprive:copie_vers', array('dir'=>dirname($distant['fichier_local']).'/')); $distant = $distant['texte']; if(preg_match(',\.php\d?$,', $file)) { $test = preg_replace(',^.*?\<\?php|\?\>.*?$,', '', $distant); if(!@eval("return true; $test")) $distant = false; else $distant = ecrire_fichier($file, '<'."?php\n\n".trim($test)."\n\n?".'>'); } else $distant = ecrire_fichier($file, $distant); } if($distant) $statut = '<span style="color:green">'._T('couteauprive:distant_charge').'</span>'; else $erreur = $statut = '<span style="color:red">'._T('couteauprive:distant_echoue').'</span>'; } else $erreur = $statut = _T('couteauprive:distant_inactif'); $a[] = "[{$f}->{$outil[$i]}]\n_ ".$statut.$message; } if($tester) return $a; $a = '<ul style="margin:0.6em 0 0.6em 4em;"><li>' . join("</li><li style='margin-top:0.4em;'>", $a) . '</li></ul>'; $b = ($outil['actif'] || !$erreur)?'rss_actualiser':($erreur?'distant_charger':false); $b = $b?"\n<p class='cs_sobre'><input class='cs_sobre' type='submit' value=\" [" . attribut_html(_T('couteauprive:'.$b)).']" /></p>':''; return ajax_action_auteur('action_rapide', 'fichiers_distants', 'admin_couteau_suisse', "arg=$outil[id]|fichiers_distants&cmd=descrip#cs_action_rapide", '<p>' . _T('couteauprive:distant_aide') . '</p>' . '<p style="margin-top:1em"><strong>' . definir_puce() . ' ' . _T('couteauprive:detail_fichiers_distant') . '</strong></p>' . '<div>' . propre($a) . '</div>' . $b); }
function signatures_edit_mail($id_article, $ad_email, $row) { $email = attribut_html($ad_email); if (email_valide($ad_email)) { if ($row['statut'] != 'publie' AND autoriser('modererpetition', 'article', $id_article)) { include_spip('formulaires/signature'); $url = generer_url_entite_absolue($id_article, 'article','','',true); list($titre, $url) = signature_langue($id_article, $url); list($sujet, $corps) = signature_demande_confirmation($id_article, $url, $row['nom_email'], $row['nom_site'], $row['url_site'], $row['message'], $titre, $row['statut']); include_spip('inc/filtres'); $sujet = rawurlencode(filtrer_entites($sujet)); $corps = rawurlencode(filtrer_entites($corps)); $corps = "?subject=$sujet&body=$corps"; } else $corps = ''; $email = "<a href=\"mailto:$ad_email$corps\">$email</a>"; } return "<div class='ad_email'><span class='spip_x-small'>" ._T('info_adresse_email') ."</span> " . $email . "</div>\n"; }
function http_calendrier_ics_message($annee, $mois, $jour, $large) { if (!autoriser('ecrire')) return ''; $b = _T("lien_nouvea_pense_bete"); $v = _T("lien_nouveau_message"); $j= _T("lien_nouvelle_annonce"); return " " . http_href(generer_action_auteur("editer_message","pb/$annee-$mois-$jour"), ($large ? $b : ' '), attribut_html($b), 'color: blue;', 'calendrier-arial10 pense-bete') . "\n" . http_href(generer_action_auteur("editer_message","normal/$annee-$mois-$jour"), ($large ? $v : ' '), attribut_html($v), 'color: green;', 'calendrier-arial10 message') . (($GLOBALS['connect_statut'] != "0minirezo") ? "" : ("\n" . http_href(generer_action_auteur("editer_message","affich/$annee-$mois-$jour"), ($large ? $j : ' '), attribut_html($j), 'color: #ff9900;', 'calendrier-arial10 annonce'))); }
function plugin_nom($info, $dir_plugins, $plug_file) { $prefix = $info['prefix']; $dir = "{$dir_plugins}{$plug_file}"; // Si dtd paquet, on traite le nom soit par son item de langue soit par sa valeur immediate a l'index "nom" if ($info['dtd'] == "paquet") { $nom = PtoBR(plugin_propre("{$prefix}_nom", "{$dir}/lang/paquet-{$prefix}")); if (!$nom) { $nom = PtoBR(propre($info['nom'])); } } else { $nom = typo(attribut_html($info['nom'])); } return trim($nom); }