function icone_visiter_header_prive($flux) { global $spip_lang_left,$spip_lang_right; $chercher_logo = charger_fonction('chercher_logo', 'inc'); if ($r = $chercher_logo(0, 'id_syndic', 'on')) { list($fid, $dir, $nom, $format) = $r; // pour javascript... include_spip('inc/filtres_images'); if(defined('_SPIP19300')) { include_spip('inc/filtres_images_mini'); // pour SPIP 2.1 $r = image_reduire("<img src='$fid' alt='' style='margin:0;' />", 46, 46); $r = "<span style='height:48px; margin:0;'>$r</span>"; $q = 'span.icon_fond:last'; } else { $r = image_reduire("<img src='$fid' alt='' style='margin:0;' />", 48, 48); $r = addslashes("<span style='height:48px; margin:4px;'>$r</span>"); $q = 'img[@src*=visiter]'; } } else return $flux; $r = str_replace('/', '\/', $r); return $flux. <<<JAVASCRIPT <script type="text/javascript"><!-- // des que le DOM est pret... if (window.jQuery) jQuery(document).ready(function(){ jQuery("$q").hide() .after("$r"); }); //--></script> JAVASCRIPT; }
function inc_informer_dist($id, $col, $exclus, $rac, $type, $do = 'aff') { include_spip('inc/texte'); if ($type == "rubrique") { $row = sql_fetsel("titre, descriptif", "spip_rubriques", "id_rubrique = {$id}"); if ($row) { $titre = typo($row["titre"]); $descriptif = propre($row["descriptif"]); } else { $titre = _T('info_racine_site'); } } else { $titre = ''; } $res = ''; if ($type == "rubrique" and $GLOBALS['spip_display'] != 1 and isset($GLOBALS['meta']['image_process'])) { if ($GLOBALS['meta']['image_process'] != "non") { $chercher_logo = charger_fonction('chercher_logo', 'inc'); if ($res = $chercher_logo($id, 'id_rubrique', 'on')) { list($fid, $dir, $nom, $format) = $res; include_spip('inc/filtres_images_mini'); $res = image_reduire("<img src='{$fid}' alt='' />", 100, 48); if ($res) { $res = "<div style='float: " . $GLOBALS['spip_lang_right'] . "; margin-" . $GLOBALS['spip_lang_right'] . ": -5px; margin-top: -5px;'>{$res}</div>"; } } } } $rac = spip_htmlentities($rac); # ce lien provoque la selection (directe) de la rubrique cliquee # et l'affichage de son titre dans le bandeau $titre = strtr(str_replace("'", "’", str_replace('"', """, textebrut($titre))), "\n\r", " "); $js_func = $do . '_selection_titre'; return "<div style='display: none;'>" . "<input type='text' id='" . $rac . "_sel' value='{$id}' />" . "<input type='text' id='" . $rac . "_sel2' value=\"" . entites_html($titre) . "\" />" . "</div>" . "<div class='informer' style='padding: 5px; border-top: 0px;'>" . (!$res ? '' : $res) . "<p><b>" . safehtml($titre) . "</b></p>" . (!$descriptif ? '' : "<div>" . safehtml($descriptif) . "</div>") . "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>" . "<input type='submit' class='fondo' value='" . _T('bouton_choisir') . "'\nonclick=\"{$js_func}('{$titre}',{$id},'selection_rubrique','id_parent'); return false;\" />" . "</div>" . "</div>"; }
function inc_informer_auteur_dist($id) { global $spip_display,$spip_lang_right ; include_spip('inc/presentation'); include_spip('inc/formater_auteur'); $row = sql_fetsel("*", "spip_auteurs", "id_auteur = $id"); if ($row) { $nom = typo($row["nom"]); $bio = propre($row["bio"]); $mail = formater_auteur_mail($row, $id); $nb = sql_countsel("spip_auteurs_articles", "id_auteur=$id"); if ($nb > 1) $nb = $nb . " " . _T('info_article_2'); else if($nb == 1) $nb = "1 " . _T('info_article'); else $nb = " "; } else { $nom = "<span style='color:red'>" . _T('texte_vide') . '</span>'; $bio = $mail = $nb = ''; } $res = ''; if ($spip_display != 1 AND $spip_display!=4 AND $GLOBALS['meta']['image_process'] != "non") { $chercher_logo = charger_fonction('chercher_logo', 'inc'); if ($res = $chercher_logo($id, 'id_auteur', 'on')) { list($fid, $dir, $n, $format) = $res; include_spip('inc/filtres_images_mini'); $res = image_reduire("<img src='$fid' alt='' />", 100, 48); if ($res) $res = "<div style='float: $spip_lang_right; margin-$spip_lang_right: -5px; margin-top: -5px;'>$res</div>"; } } return "<div class='informer-auteur'>" . (!$res ? '' : $res) . "<div><a href='" . generer_url_ecrire('auteur_infos', "id_auteur=$id") . "'>" . bonhomme_statut($row) . "</a> " . $mail . " <b>" . $nom . "</b><br />" . $nb . "</div><br />" . "<div>$bio</div>" . "</div>"; }
/** * 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; }
/** * Crée l'affichage des listes de rubriques dans le privé * * @param int $collection * L'identifiant numérique de la rubrique à lister * @param int $debut * Le numéro de la pagination si paginé (> 500) * @param int $limite * Le pas de pagination si paginé (> 500) * @return array $res * Un tableau des sous rubriques */ function enfant_rub($collection, $debut = 0, $limite = 500) { $voir_logo = (isset($GLOBALS['meta']['image_process']) and $GLOBALS['meta']['image_process'] != "non"); $logo = ""; if ($voir_logo) { $chercher_logo = charger_fonction('chercher_logo', 'inc'); include_spip('inc/filtres_images_mini'); } $res = array(); $result = sql_select("id_rubrique, id_parent, titre, descriptif, lang ", "spip_rubriques", "id_parent={$collection}", '', '0+titre,titre', "{$debut},{$limite}"); while ($row = sql_fetch($result)) { $id_rubrique = $row['id_rubrique']; $id_parent = $row['id_parent']; $titre = generer_info_entite($id_rubrique, 'rubrique', 'titre'); // pour etre sur de passer par tous les traitements if ('' !== ($rang = recuperer_numero($row['titre']))) { $rang = "{$rang}. "; } if (autoriser('voir', 'rubrique', $id_rubrique)) { $les_sous_enfants = sous_enfant_rub($id_rubrique); changer_typo($row['lang']); $lang_dir = lang_dir($row['lang']); $descriptif = propre($row['descriptif']); if ($voir_logo) { if ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on')) { list($fid, $dir, $nom, $format) = $logo; $logo = image_reduire("<img src='{$fid}' alt='' />", 48, 36); if ($logo) { $logo = inserer_attribut($logo, 'class', 'logo'); } } } $lib_bouton = (!acces_restreint_rubrique($id_rubrique) ? "" : http_img_pack('auteur-0minirezo-16.png', '', " width='16' height='16'", _T('image_administrer_rubrique'))) . " <a dir='{$lang_dir}'" . ($row['lang'] !== $GLOBALS['spip_lang'] ? " hreflang='" . $row['lang'] . "'" : '') . " href='" . generer_url_entite($id_rubrique, 'rubrique') . "'>" . $rang . $titre . "</a>"; $titre = (is_string($logo) ? $logo : '') . bouton_block_depliable($lib_bouton, $les_sous_enfants ? false : -1, "enfants{$id_rubrique}"); $res[] = debut_cadre_sous_rub($id_parent ? "rubrique-24.png" : "secteur-24.png", true, "", $titre) . (!$descriptif ? '' : "\n<div class='descriptif'>{$descriptif}</div>") . $les_sous_enfants . fin_cadre_sous_rub(true); } } changer_typo($GLOBALS['spip_lang']); # remettre la typo de l'interface pour la suite return $res; }
function image_masque($im, $masque, $pos = "") { // Passer, en plus de l'image d'origine, // une image de "masque": un fichier PNG24 transparent. // Le decoupage se fera selon la transparence du "masque", // et les couleurs seront eclaircies/foncees selon de couleur du masque. // Pour ne pas modifier la couleur, le masque doit etre en gris 50%. // // Si l'image source est plus grande que le masque, alors cette image est reduite a la taille du masque. // Sinon, c'est la taille de l'image source qui est utilisee. // // $pos est une variable libre, qui permet de passer left=..., right=..., bottom=..., top=... // dans ce cas, le masque est place a ces positions sur l'image d'origine, // et evidemment cette image d'origine n'est pas redimensionnee // // Positionnement horizontal: text-align=left, right, center // Positionnement vertical : vertical-align=top, bottom, middle // (les positionnements left, right, top, left sont relativement inutiles, mais coherence avec CSS) // // Choix du mode de fusion: mode=masque, normal, eclaircir, obscurcir, produit, difference, ecran, superposer, lumiere_dure, teinte, saturation, valeur // https://en.wikipedia.org/wiki/Blend_modes // masque: mode par defaut // normal: place la nouvelle image par dessus l'ancienne // eclaircir: place uniquement les points plus clairs // obscurcir: place uniquement les points plus fonc'es // produit: multiplie par le masque (points noirs rendent l'image noire, points blancs ne changent rien) // difference: remplit avec l'ecart entre les couleurs d'origine et du masque // ecran: effet inverse de 'produit' -> l'image resultante est plus claire // superposer: combine les modes 'produit' et 'ecran' -> les parties claires sont eclaircies, les parties sombres assombries. // lumiere_dure: equivalent a 'superposer', sauf que l'image du bas et du haut sont inversees. // teinte: utilise la teinte du masque // saturation: utilise la saturation du masque // valeur: utilise la valeur du masque $mode = "masque"; $numargs = func_num_args(); $arg_list = func_get_args(); $variable = array(); $texte = $arg_list[0]; for ($i = 1; $i < $numargs; $i++) { if (($p = strpos($arg_list[$i], "=")) !== false) { $nom_variable = substr($arg_list[$i], 0, $p); $val_variable = substr($arg_list[$i], $p + 1); $variable["{$nom_variable}"] = $val_variable; $defini["{$nom_variable}"] = 1; } } if (isset($defini["mode"]) and $defini["mode"]) { $mode = $variable["mode"]; } // utiliser _image_valeurs_trans pour accepter comme masque : // - une balise <img src='...' /> // - une image avec un timestamp ?01234 $mask = _image_valeurs_trans($masque, "source-image_masque", "png", null, true); if (!$mask) { return ""; } $masque = $mask['fichier']; $pos = md5(serialize($variable) . $mask['date_src']); $fonction = array('image_masque', func_get_args()); $image = _image_valeurs_trans($im, "masque-{$masque}-{$pos}", "png", $fonction); if (!$image) { return ""; } $x_i = $image["largeur"]; $y_i = $image["hauteur"]; $im = $image["fichier"]; $dest = $image["fichier_dest"]; $creer = $image["creer"]; // doit-on positionner l'image ? $placer = false; foreach (array("right", "left", "bottom", "top", "text-align", "vertical-align") as $pl) { if (isset($defini[$pl]) and $defini[$pl]) { $placer = true; break; } } if ($creer) { $im_m = $mask["fichier"]; $x_m = $mask["largeur"]; $y_m = $mask["hauteur"]; $im2 = $mask["fonction_imagecreatefrom"]($masque); if ($mask["format_source"] == "gif" and function_exists('ImageCopyResampled')) { $im2_ = imagecreatetruecolor($x_m, $y_m); // Si un GIF est transparent, // fabriquer un PNG transparent // Conserver la transparence if (function_exists("imageAntiAlias")) { imageAntiAlias($im2_, true); } @imagealphablending($im2_, false); @imagesavealpha($im2_, true); @ImageCopyResampled($im2_, $im2, 0, 0, 0, 0, $x_m, $y_m, $x_m, $y_m); imagedestroy($im2); $im2 = $im2_; } if ($placer) { // On fabriquer une version "agrandie" du masque, // aux dimensions de l'image source // et on "installe" le masque dans cette image // ainsi: aucun redimensionnement $dx = 0; $dy = 0; if (isset($defini["right"]) and $defini["right"]) { $right = $variable["right"]; $dx = $x_i - $x_m - $right; } if (isset($defini["bottom"]) and $defini["bottom"]) { $bottom = $variable["bottom"]; $dy = $y_i - $y_m - $bottom; } if (isset($defini["top"]) and $defini["top"]) { $top = $variable["top"]; $dy = $top; } if (isset($defini["left"]) and $defini["left"]) { $left = $variable["left"]; $dx = $left; } if (isset($defini["text-align"]) and $defini["text-align"]) { $align = $variable["text-align"]; if ($align == "right") { $right = 0; $dx = $x_i - $x_m; } else { if ($align == "left") { $left = 0; $dx = 0; } else { if ($align = "center") { $dx = round(($x_i - $x_m) / 2); } } } } if (isset($defini["vertical-align"]) and $defini["vertical-align"]) { $valign = $variable["vertical-align"]; if ($valign == "bottom") { $bottom = 0; $dy = $y_i - $y_m; } else { if ($valign == "top") { $top = 0; $dy = 0; } else { if ($valign = "middle") { $dy = round(($y_i - $y_m) / 2); } } } } $im3 = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im3, false); @imagesavealpha($im3, true); if ($mode == "masque") { $color_t = ImageColorAllocateAlpha($im3, 128, 128, 128, 0); } else { $color_t = ImageColorAllocateAlpha($im3, 128, 128, 128, 127); } imagefill($im3, 0, 0, $color_t); imagecopy($im3, $im2, $dx, $dy, 0, 0, $x_m, $y_m); imagedestroy($im2); $im2 = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im2, false); @imagesavealpha($im2, true); imagecopy($im2, $im3, 0, 0, 0, 0, $x_i, $y_i); imagedestroy($im3); $x_m = $x_i; $y_m = $y_i; } $rapport = $x_i / $x_m; if ($y_i / $y_m < $rapport) { $rapport = $y_i / $y_m; } $x_d = ceil($x_i / $rapport); $y_d = ceil($y_i / $rapport); if ($x_i < $x_m or $y_i < $y_m) { $x_dest = $x_i; $y_dest = $y_i; $x_dec = 0; $y_dec = 0; } else { $x_dest = $x_m; $y_dest = $y_m; $x_dec = round(($x_d - $x_m) / 2); $y_dec = round(($y_d - $y_m) / 2); } $nouveau = _image_valeurs_trans(image_reduire($im, $x_d, $y_d), ""); if (!is_array($nouveau)) { return ""; } $im_n = $nouveau["fichier"]; $im = $nouveau["fonction_imagecreatefrom"]($im_n); imagepalettetotruecolor($im); if ($nouveau["format_source"] == "gif" and function_exists('ImageCopyResampled')) { $im_ = imagecreatetruecolor($x_dest, $y_dest); // Si un GIF est transparent, // fabriquer un PNG transparent // Conserver la transparence if (function_exists("imageAntiAlias")) { imageAntiAlias($im_, true); } @imagealphablending($im_, false); @imagesavealpha($im_, true); @ImageCopyResampled($im_, $im, 0, 0, 0, 0, $x_dest, $y_dest, $x_dest, $y_dest); imagedestroy($im); $im = $im_; } $im_ = imagecreatetruecolor($x_dest, $y_dest); @imagealphablending($im_, false); @imagesavealpha($im_, true); $color_t = ImageColorAllocateAlpha($im_, 255, 255, 255, 127); imagefill($im_, 0, 0, $color_t); // calcul couleurs de chaque pixel selon les modes de fusion for ($x = 0; $x < $x_dest; $x++) { for ($y = 0; $y < $y_dest; $y++) { $rgb = ImageColorAt($im2, $x, $y); // image au dessus $a = $rgb >> 24 & 0xff; $r = $rgb >> 16 & 0xff; $g = $rgb >> 8 & 0xff; $b = $rgb & 0xff; $rgb2 = ImageColorAt($im, $x + $x_dec, $y + $y_dec); // image en dessous $a2 = $rgb2 >> 24 & 0xff; $r2 = $rgb2 >> 16 & 0xff; $g2 = $rgb2 >> 8 & 0xff; $b2 = $rgb2 & 0xff; if ($mode == "normal") { $v = (127 - $a) / 127; if ($v == 1) { $r_ = $r; $g_ = $g; $b_ = $b; } else { $v2 = (127 - $a2) / 127; if ($v + $v2 == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; } else { if ($v2 == 0) { $r_ = $r; $g_ = $g; $b_ = $b; } else { if ($v == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; } else { $r_ = $r + ($r2 - $r) * $v2 * (1 - $v); $g_ = $g + ($g2 - $g) * $v2 * (1 - $v); $b_ = $b + ($b2 - $b) * $v2 * (1 - $v); } } } } $a_ = min($a, $a2); } elseif (in_array($mode, array("produit", "difference", "superposer", "lumiere_dure", "ecran"))) { if ($mode == "produit") { $r = $r / 255 * $r2; $g = $g / 255 * $g2; $b = $b / 255 * $b2; } elseif ($mode == "difference") { $r = abs($r - $r2); $g = abs($g - $g2); $b = abs($b - $b2); } elseif ($mode == "superposer") { $r = $r2 < 128 ? 2 * $r * $r2 / 255 : 255 - 2 * (255 - $r) * (255 - $r2) / 255; $g = $g2 < 128 ? 2 * $g * $g2 / 255 : 255 - 2 * (255 - $g) * (255 - $g2) / 255; $b = $b2 < 128 ? 2 * $b * $b2 / 255 : 255 - 2 * (255 - $b) * (255 - $b2) / 255; } elseif ($mode == "lumiere_dure") { $r = $r < 128 ? 2 * $r * $r2 / 255 : 255 - 2 * (255 - $r2) * (255 - $r) / 255; $g = $g < 128 ? 2 * $g * $g2 / 255 : 255 - 2 * (255 - $g2) * (255 - $g) / 255; $b = $b < 128 ? 2 * $b * $b2 / 255 : 255 - 2 * (255 - $b2) * (255 - $b) / 255; } elseif ($mode == "ecran") { $r = 255 - (255 - $r) * (255 - $r2) / 255; $g = 255 - (255 - $g) * (255 - $g2) / 255; $b = 255 - (255 - $b) * (255 - $b2) / 255; } $r = max(0, min($r, 255)); $g = max(0, min($g, 255)); $b = max(0, min($b, 255)); // melange en fonction de la transparence du masque $v = (127 - $a) / 127; if ($v == 1) { // melange complet $r_ = $r; $g_ = $g; $b_ = $b; } else { $v2 = (127 - $a2) / 127; if ($v + $v2 == 0) { // ?? $r_ = $r2; $g_ = $g2; $b_ = $b2; } else { // pas de melange (transparence du masque) $r_ = $r + ($r2 - $r) * $v2 * (1 - $v); $g_ = $g + ($g2 - $g) * $v2 * (1 - $v); $b_ = $b + ($b2 - $b) * $v2 * (1 - $v); } } $a_ = $a2; } elseif ($mode == "eclaircir" or $mode == "obscurcir") { $v = (127 - $a) / 127; if ($v == 1) { $r_ = $r; $g_ = $g; $b_ = $b; } else { $v2 = (127 - $a2) / 127; if ($v + $v2 == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; } else { $r_ = $r + ($r2 - $r) * $v2 * (1 - $v); $g_ = $g + ($g2 - $g) * $v2 * (1 - $v); $b_ = $b + ($b2 - $b) * $v2 * (1 - $v); } } if ($mode == "eclaircir") { $r_ = max($r_, $r2); $g_ = max($g_, $g2); $b_ = max($b_, $b2); } else { $r_ = min($r_, $r2); $g_ = min($g_, $g2); $b_ = min($b_, $b2); } $a_ = min($a, $a2); } elseif (in_array($mode, array("teinte", "saturation", "valeur"))) { include_spip("filtres/images_lib"); $hsv = _couleur_rgb2hsv($r, $g, $b); // image au dessus $h = $hsv["h"]; $s = $hsv["s"]; $v = $hsv["v"]; $hsv2 = _couleur_rgb2hsv($r2, $g2, $b2); // image en dessous $h2 = $hsv2["h"]; $s2 = $hsv2["s"]; $v2 = $hsv2["v"]; switch ($mode) { case "teinte": $rgb3 = _couleur_hsv2rgb($h, $s2, $v2); break; case "saturation": $rgb3 = _couleur_hsv2rgb($h2, $s, $v2); break; case "valeur": $rgb3 = _couleur_hsv2rgb($h2, $s2, $v); break; } $r = $rgb3["r"]; $g = $rgb3["g"]; $b = $rgb3["b"]; // melange en fonction de la transparence du masque $v = (127 - $a) / 127; if ($v == 1) { // melange complet $r_ = $r; $g_ = $g; $b_ = $b; } else { $v2 = (127 - $a2) / 127; if ($v + $v2 == 0) { // ?? $r_ = $r2; $g_ = $g2; $b_ = $b2; } else { // pas de melange (transparence du masque) $r_ = $r + ($r2 - $r) * $v2 * (1 - $v); $g_ = $g + ($g2 - $g) * $v2 * (1 - $v); $b_ = $b + ($b2 - $b) * $v2 * (1 - $v); } } $a_ = $a2; } else { $r_ = $r2 + 1 * ($r - 127); $r_ = max(0, min($r_, 255)); $g_ = $g2 + 1 * ($g - 127); $g_ = max(0, min($g_, 255)); $b_ = $b2 + 1 * ($b - 127); $b_ = max(0, min($b_, 255)); $a_ = $a + $a2 - round($a * $a2 / 127); } $color = ImageColorAllocateAlpha($im_, $r_, $g_, $b_, $a_); imagesetpixel($im_, $x, $y, $color); } } _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); imagedestroy($im2); } $x_dest = largeur($dest); $y_dest = hauteur($dest); return _image_ecrire_tag($image, array('src' => $dest, 'width' => $x_dest, 'height' => $y_dest)); }
function image_masque($im, $masque, $pos="") { // Passer, en plus de l'image d'origine, // une image de "masque": un fichier PNG24 transparent. // Le decoupage se fera selon la transparence du "masque", // et les couleurs seront eclaircies/foncees selon de couleur du masque. // Pour ne pas modifier la couleur, le masque doit etre en gris 50%. // // Si l'image source est plus grande que le masque, alors cette image est reduite a la taille du masque. // Sinon, c'est la taille de l'image source qui est utilisee. // // $pos est une variable libre, qui permet de passer left=..., right=..., bottom=..., top=... // dans ce cas, le pasque est place a ces positions sur l'image d'origine, // et evidemment cette image d'origine n'est pas redimensionnee // // Positionnement horizontal: text-align=left, right, center // Positionnement vertical : vertical-align: top, bottom, middle // (les positionnements left, right, top, left sont relativement inutiles, mais coherence avec CSS) // // Choix du mode de fusion: mode=masque, normal, eclaircir, obscurcir, produit, difference // masque: mode par defaut // normal: place la nouvelle image par dessus l'ancienne // eclaircir: place uniquement les points plus clairs // obscurcir: place uniquement les points plus fonc'es // produit: multiplie par le masque (points noirs rendent l'image noire, points blancs ne changent rien) // difference: remplit avec l'ecart entre les couleurs d'origine et du masque $mode = "masque"; $numargs = func_num_args(); $arg_list = func_get_args(); $texte = $arg_list[0]; for ($i = 1; $i < $numargs; $i++) { if ( ($p = strpos($arg_list[$i],"=")) !==false) { $nom_variable = substr($arg_list[$i], 0, $p); $val_variable = substr($arg_list[$i], $p+1); $variable["$nom_variable"] = $val_variable; $defini["$nom_variable"] = 1; } } if ($defini["mode"]) $mode = $variable["mode"]; $masque = find_in_path($masque); $pos = md5(serialize($variable).@filemtime($masque)); $fonction = array('image_masque', func_get_args()); $image = _image_valeurs_trans($im, "masque-$masque-$pos", "png",$fonction); if (!$image) return(""); $x_i = $image["largeur"]; $y_i = $image["hauteur"]; $im = $image["fichier"]; $dest = $image["fichier_dest"]; $creer = $image["creer"]; if ($defini["right"] OR $defini["left"] OR $defini["bottom"] OR $defini["top"] OR $defini["text-align"] OR $defini["vertical-align"]) { $placer = true; } else $placer = false; if ($creer) { $mask = _image_valeurs_trans($masque,""); if (!is_array($mask)) return(""); $im_m = $mask["fichier"]; $x_m = $mask["largeur"]; $y_m = $mask["hauteur"]; $im2 = $mask["fonction_imagecreatefrom"]($masque); if ($mask["format_source"] == "gif" AND function_exists('ImageCopyResampled')) { $im2_ = imagecreatetruecolor($x_m, $y_m); // Si un GIF est transparent, // fabriquer un PNG transparent // Conserver la transparence if (function_exists("imageAntiAlias")) imageAntiAlias($im2_,true); @imagealphablending($im2_, false); @imagesavealpha($im2_,true); @ImageCopyResampled($im2_, $im2, 0, 0, 0, 0, $x_m, $y_m, $x_m, $y_m); imagedestroy($im2); $im2 = $im2_; } if ($placer) { // On fabriquer une version "agrandie" du masque, // aux dimensions de l'image source // et on "installe" le masque dans cette image // ainsi: aucun redimensionnement $dx = 0; $dy = 0; if ($defini["right"]) { $right = $variable["right"]; $dx = ($x_i - $x_m) - $right; } if ($defini["bottom"]) { $bottom = $variable["bottom"]; $dy = ($y_i - $y_m) - $bottom; } if ($defini["top"]) { $top = $variable["top"]; $dy = $top; } if ($defini["left"]) { $left = $variable["left"]; $dx = $left; } if ($defini["text-align"]) { $align = $variable["text-align"]; if ($align == "right") { $right = 0; $dx = ($x_i - $x_m); } else if ($align == "left") { $left = 0; $dx = 0; } else if ($align = "center") { $dx = round( ($x_i - $x_m) / 2 ) ; } } if ($defini["vertical-align"]) { $valign = $variable["vertical-align"]; if ($valign == "bottom") { $bottom = 0; $dy = ($y_i - $y_m); } else if ($valign == "top") { $top = 0; $dy = 0; } else if ($valign = "middle") { $dy = round( ($y_i - $y_m) / 2 ) ; } } $im3 = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im3, false); @imagesavealpha($im3,true); if ($mode == "masque") $color_t = ImageColorAllocateAlpha( $im3, 128, 128, 128 , 0 ); else $color_t = ImageColorAllocateAlpha( $im3, 128, 128, 128 , 127 ); imagefill ($im3, 0, 0, $color_t); imagecopy ( $im3, $im2, $dx, $dy, 0, 0, $x_m, $y_m); imagedestroy($im2); $im2 = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im2, false); @imagesavealpha($im2,true); imagecopy ( $im2, $im3, 0, 0, 0, 0, $x_i, $y_i); imagedestroy($im3); $x_m = $x_i; $y_m = $y_i; } $rapport = $x_i / $x_m; if (($y_i / $y_m) < $rapport ) { $rapport = $y_i / $y_m; } $x_d = ceil($x_i / $rapport); $y_d = ceil($y_i / $rapport); if ($x_i < $x_m OR $y_i < $y_m) { $x_dest = $x_i; $y_dest = $y_i; $x_dec = 0; $y_dec = 0; } else { $x_dest = $x_m; $y_dest = $y_m; $x_dec = round(($x_d - $x_m) /2); $y_dec = round(($y_d - $y_m) /2); } $nouveau = _image_valeurs_trans(image_reduire($im, $x_d, $y_d),""); if (!is_array($nouveau)) return(""); $im_n = $nouveau["fichier"]; $im = $nouveau["fonction_imagecreatefrom"]($im_n); imagepalettetotruecolor($im); if ($nouveau["format_source"] == "gif" AND function_exists('ImageCopyResampled')) { $im_ = imagecreatetruecolor($x_dest, $y_dest); // Si un GIF est transparent, // fabriquer un PNG transparent // Conserver la transparence if (function_exists("imageAntiAlias")) imageAntiAlias($im_,true); @imagealphablending($im_, false); @imagesavealpha($im_,true); @ImageCopyResampled($im_, $im, 0, 0, 0, 0, $x_dest, $y_dest, $x_dest, $y_dest); imagedestroy($im); $im = $im_; } $im_ = imagecreatetruecolor($x_dest, $y_dest); @imagealphablending($im_, false); @imagesavealpha($im_,true); $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 ); imagefill ($im_, 0, 0, $color_t); for ($x = 0; $x < $x_dest; $x++) { for ($y=0; $y < $y_dest; $y++) { $rgb = ImageColorAt($im2, $x, $y); $a = ($rgb >> 24) & 0xFF; $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; $rgb2 = ImageColorAt($im, $x+$x_dec, $y+$y_dec); $a2 = ($rgb2 >> 24) & 0xFF; $r2 = ($rgb2 >> 16) & 0xFF; $g2 = ($rgb2 >> 8) & 0xFF; $b2 = $rgb2 & 0xFF; if ($mode == "normal") { $v = (127 - $a) / 127; if ($v == 1) { $r_ = $r; $g_ = $g; $b_ = $b; } else { $v2 = (127 - $a2) / 127; if ($v+$v2 == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; } else if ($v2 ==0) { $r_ = $r; $g_ = $g; $b_ = $b; } else if ($v == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; }else { $r_ = $r + (($r2 - $r) * $v2 * (1 - $v)); $g_ = $g + (($g2 - $g) * $v2 * (1 - $v)); $b_ = $b + (($b2 - $b) * $v2 * (1 - $v)); } } $a_ = min($a,$a2); } elseif ($mode == "produit" OR $mode == "difference") { if ($mode == "produit") { $r = ($r/255) * $r2; $g = ($g/255) * $g2; $b = ($b/255) * $b2; } else if ($mode == "difference") { $r = abs($r-$r2); $g = abs($g-$g2); $b = abs($b-$b2); } $r = max(0, min($r, 255)); $g = max(0, min($g, 255)); $b = max(0, min($b, 255)); $v = (127 - $a) / 127; if ($v == 1) { $r_ = $r; $g_ = $g; $b_ = $b; } else { $v2 = (127 - $a2) / 127; if ($v+$v2 == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; } else { $r_ = $r + (($r2 - $r) * $v2 * (1 - $v)); $g_ = $g + (($g2 - $g) * $v2 * (1 - $v)); $b_ = $b + (($b2 - $b) * $v2 * (1 - $v)); } } $a_ = $a2; } elseif ($mode == "eclaircir" OR $mode == "obscurcir") { $v = (127 - $a) / 127; if ($v == 1) { $r_ = $r; $g_ = $g; $b_ = $b; } else { $v2 = (127 - $a2) / 127; if ($v+$v2 == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; } else { $r_ = $r + (($r2 - $r) * $v2 * (1 - $v)); $g_ = $g + (($g2 - $g) * $v2 * (1 - $v)); $b_ = $b + (($b2 - $b) * $v2 * (1 - $v)); } } if ($mode == "eclaircir") { $r_ = max ($r_, $r2); $g_ = max ($g_, $g2); $b_ = max ($b_, $b2); } else { $r_ = min ($r_, $r2); $g_ = min ($g_, $g2); $b_ = min ($b_, $b2); } $a_ = min($a,$a2); } else { $r_ = $r2 + 1 * ($r - 127); $r_ = max(0, min($r_, 255)); $g_ = $g2 + 1 * ($g - 127); $g_ = max(0, min($g_, 255)); $b_ = $b2 + 1 * ($b - 127); $b_ = max(0, min($b_, 255)); $a_ = $a + $a2 - round($a*$a2/127); } $color = ImageColorAllocateAlpha( $im_, $r_, $g_, $b_ , $a_ ); imagesetpixel ($im_, $x, $y, $color); } } _image_gd_output($im_,$image); imagedestroy($im_); imagedestroy($im); imagedestroy($im2); } $x_dest = largeur($dest); $y_dest = hauteur($dest); return _image_ecrire_tag($image,array('src'=>$dest,'width'=>$x_dest,'height'=>$y_dest)); }
/** * Réduit les images d'un certain facteur * * @see image_reduire() * * @param string $img * Chemin de l'image ou texte * @param int $val * Facteur de réduction * @param bool $force * @return string * Code HTML de l'image ou du texte. **/ function image_reduire_par($img, $val = 1, $force = false) { list($hauteur, $largeur) = taille_image($img); $l = round($largeur / $val); $h = round($hauteur / $val); if ($l > $h) { $h = 0; } else { $l = 0; } $img = image_reduire($img, $l, $h, $force); return $img; }
function afficher_forum_thread($row, $controle_id_article, $compteur_forum, $nb_forum, $i, $retour, $arg, $script, $argscript) { global $spip_lang_right, $spip_display; static $voir_logo = array(); // pour ne calculer qu'une fois if (is_array($voir_logo)) { $voir_logo = (($spip_display != 1 AND $spip_display != 4 AND $GLOBALS['meta']['image_process'] != "non") ? "position: absolute; $spip_lang_right: 0px; margin: 0px; margin-top: -3px; margin-$spip_lang_right: 0px;" : ''); } $id_forum=$row['id_forum']; $id_parent=$row['id_parent']; $id_rubrique=$row['id_rubrique']; $id_article=$row['id_article']; $id_breve=$row['id_breve']; $id_message=$row['id_message']; $id_syndic=$row['id_syndic']; $id_auteur=$row["id_auteur"]; $titre=$row['titre']; $texte=$row['texte']; $nom_site=$row['nom_site']; $url_site=$row['url_site']; $statut=$row['statut']; $ip=$row["ip"]; $h = (!$id_article ? '' : generer_url_entite($id_article, 'article')) . "#forum$id_forum"; $titre_boite = "<a href='$h' id='forum$id_forum'>" . typo($titre) . '</a>'; if ($spip_display == 4) { $res = $titre_boite ."<br id='id$id_forum' />"; } else { if ($id_auteur AND $voir_logo) { $chercher_logo = charger_fonction('chercher_logo', 'inc'); if ($logo = $chercher_logo($id_auteur, 'id_auteur', 'on')) { list($fid, $dir, $nom, $format) = $logo; include_spip('inc/filtres_images_mini'); $logo = image_reduire("<img src='$fid' alt='' />", 48, 48); if ($logo) $titre_boite = "\n<div style='$voir_logo'>$logo</div>$titre_boite" ; } } $res = "<tr id='id$id_forum'>" . afficher_forum_4($compteur_forum, $nb_forum, $i) . "\n<td style='width: 100%' valign='top'>" . (($compteur_forum == 1) ? debut_cadre_forum(forum_logo($statut), true, "", $titre_boite) : debut_cadre_thread_forum("", true, "", $titre_boite)); } // Si refuse, cadre rouge if ($statut=="off") { $style =" style='border: 2px dashed red; padding: 5px;'"; } // Si propose, cadre jaune else if ($statut=="prop") { $style = " style='border: 1px solid yellow; padding: 5px;'"; } // Si original, cadre vert else if ($statut=="original") { $style = " style='border: 1px solid green; padding: 5px;'"; } else $style = ''; $mots = afficher_forum_mots($id_forum); $res .= "<table$style width='100%' cellpadding='5' cellspacing='0'>\n<tr><td>" . afficher_forum_auteur($row) . (!$controle_id_article ? '' : boutons_controle_forum($id_forum, $statut, $id_auteur, "id_article=$id_article", $ip, $script, $argscript)) . "<div style='font-weight: normal;'>" . safehtml(justifier(propre($texte))) . "</div>\n" . (!$nom_site ? '' : ((strlen($url_site) > 10) ? "\n<div style='text-align: left' class='verdana2'><b><a href='$url_site'>$nom_site</a></b></div>" : "<b>$nom_site</b>")) . ($controle_id_article ? '' : repondre_forum($row, $titre, $statut, "$retour?$arg", _T('lien_repondre_message'))) . $mots . "</td></tr></table>"; if ($spip_display == 4) return "\n<li>$res</li>\n"; if ($compteur_forum == 1) $res .= fin_cadre_forum(true); else $res .= fin_cadre_thread_forum(true); $res .= "</td></tr>"; return "<table width='100%' cellpadding='0' cellspacing='0' border='0'>$res</table>\n"; }
/** * Massicoter un logo document * * Traitement automatique sur les balises #LOGO_DOCUMENT * * @param string $fichier : Le logo * * @return string : Un logo massicoté */ function massicoter_logo_document($logo, $doc = array()) { include_spip('inc/filtres'); include_spip('inc/filtres_images_mini'); /* S'il n'y a pas de fichier dans la pile, on va le chercher dans la table documents */ if (!isset($doc['fichier'])) { include_spip('base/abstract_sql'); $rows = sql_allfetsel('fichier, extension', 'spip_documents', 'id_document=' . intval($doc['id_document'])); $doc['fichier'] = $rows[0]['fichier']; $doc['extension'] = $rows[0]['extension']; } /* Si le document en question n'est pas une image, on ne fait rien */ if (!$logo or preg_match('/^(jpe?g|png|gif)$/i', $doc['extension']) === 0) { return $logo; } /* S'il y a un lien sur le logo, on le met de côté pour le remettre après massicotage */ if (preg_match('#(<a.*?>)<img.*$#', $logo) === 1) { $lien = preg_replace('#(<a.*?>)<img.*$#', '$1', $logo); } $fichier = extraire_attribut($logo, 'src'); /* On se débarasse d'un éventuel query string */ $fichier = preg_replace('#\\?[0-9]+#', '', $fichier); list($largeur_logo, $hauteur_logo) = getimagesize($fichier); $balise_img = charger_filtre('balise_img'); $fichier_massicote = massicoter_document(get_spip_doc($doc['fichier'])); /* Comme le logo reçu en paramètre peut avoir été réduit grâce aux paramètres de la balise LOGO_, il faut s'assurer que l'image qu'on renvoie fait bien la même taille que le logo qu'on a reçu. */ $balise = image_reduire($balise_img($fichier_massicote, extraire_attribut($logo, 'alt'), extraire_attribut($logo, 'class')), $largeur_logo, $hauteur_logo); if (isset($lien)) { $balise = $lien . $balise . '</a>'; } return $balise; }
function inc_formater_article_dist($row, $own='') { global $spip_lang_right, $spip_display; static $pret = false; static $chercher_logo, $img_admin, $formater_auteur, $nb, $langue_defaut, $afficher_langue, $puce_statut; $id_article = $row['id_article']; if (!autoriser('voir','article',$id_article)) return ''; if (!$pret) { $chercher_logo = ($spip_display != 1 AND $spip_display != 4 AND $GLOBALS['meta']['image_process'] != "non"); if ($chercher_logo) $chercher_logo = charger_fonction('chercher_logo', 'inc'); $formater_auteur = charger_fonction('formater_auteur', 'inc'); $img_admin = http_img_pack("admin-12.gif", "", " width='12' height='12'", _T('titre_image_admin_article')); if (($GLOBALS['meta']['multi_rubriques'] == 'oui' AND (!isset($GLOBALS['id_rubrique']))) OR $GLOBALS['meta']['multi_articles'] == 'oui') { $afficher_langue = true; $langue_defaut = !isset($GLOBALS['langue_rubrique']) ? $GLOBALS['meta']['langue_site'] : $GLOBALS['langue_rubrique']; } $puce_statut = charger_fonction('puce_statut', 'inc'); $pret = true; } if ($chercher_logo) { if ($logo = $chercher_logo($id_article, 'id_article', 'on')) { list($fid, $dir, $nom, $format) = $logo; include_spip('inc/filtres_images_mini'); $logo = "<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>" . image_reduire("<img src='$fid' alt='' />", 26, 20) . "</span>"; } else $logo = ''; } else $logo =''; $titre = supprime_img($row['titre'],''); $id_rubrique = $row['id_rubrique']; $date = $row['date']; $statut = $row['statut']; $descriptif = $row['descriptif']; $lang = $row['lang']; $dir = "dir='" . lang_dir($lang ? changer_typo($lang) : '') . "'"; if ($lang AND $afficher_langue AND $lang != $GLOBALS['meta']['langue_site']) $lang = " <span class='spip_xx-small' style='color: #666666' " . $dir . '>(' . traduire_nom_langue($lang) . ')</span>'; else $lang = ''; $arg = "id_article=$id_article"; $url_a = generer_url_ecrire("articles", $arg); if (!$row['petition']) $petition = ''; else $petition = " <a href='" . generer_url_ecrire('controle_petition', $arg) . "' class='spip_xx-small' style='color: red'>"._T('lien_petitions') . "</a>"; $lien = "<div>" . $logo . (acces_restreint_rubrique($id_rubrique) ? $img_admin : '') . "<a href='" . $url_a . "'" . (!$descriptif ? '': (' title="'.attribut_html(typo($descriptif)).'"')) . " $dir>" . typo(strlen($titre) ? $titre : _T('ecrire:info_sans_titre')) . "</a>" . $lang . $petition . "</div>"; if ($spip_display == 4) return array($lien); $puce = $puce_statut($id_article, $statut, $id_rubrique,'article'); $auteurs = auteurs_article($id_article); foreach ($auteurs as $k => $r) { list(, $mail, $nom,,) = $formater_auteur($r['id_auteur']); $auteurs[$k]= "$mail $nom"; } $date = affdate_jourcourt($date); if (!$date) $date = ' '; $num = afficher_numero_edit($id_article, 'id_article', 'article'); // Afficher le numero (JMB) return array($puce, $lien, join('<br />', $auteurs), $date, $num); }
/** * Récupère le contenu d'un média * * Arguments possibles : * -* login * -* pass * -* id_article int (Obligatoire) * -* champs_demandes string (champs que l'on souhaite récupérer, séparés par une virgule, sinon, on retourne l'ensemble) * -* document_largeur int (largeur maximale du document, si c'est une image, défaut largeur du document original) * -* document_hauteur int (hauteur maximale du document, si c'est une image, défaut hauteur du document original) * -* vignette_format string (carre ou autre, autre n'a pas de fonction) * -* vignette_largeur int (largeur de la vignette en px, défaut 100) * -* vignette_hauteur int (hauteur de la vignette en px, défaut 100) */ function geodiv_lire_media($args) { global $spip_xmlrpc_serveur; if (!intval($args['id_article']) > 0) { $erreur = _T('xmlrpc:erreur_identifiant', array('objet' => 'article')); return new IXR_Error(-32601, attribut_html($erreur)); } $champs_demandes = is_array($args['champs_demandes']) ? $args['champs_demandes'] : array(); $format_vignette = $args['vignette_format']; $config = lire_config('geol', array()); $secteur_medias = intval($config['secteur_medias']) > 0 ? $config['secteur_medias'] : 1; $args_media = array_merge($args, array('objet' => 'article', 'id_objet' => $args['id_article'])); $res = $spip_xmlrpc_serveur->read($args_media); if (!$res) { return $spip_xmlrpc_serveur->error; } $id_secteur = $res['result'][0]['id_secteur'] ? $res['result'][0]['id_secteur'] : sql_getfetsel('id_secteur', 'spip_articles', 'id_article=' . intval($args['id_article'])); /** * Sécurité : L'article demandé n'est pas un média */ if ($id_secteur != $secteur_medias) { $erreur = _T('xmlrpc_geodiv:erreur_article_media', array('id_article' => $args['id_article'])); return new IXR_Error(-32601, attribut_html($erreur)); } /** * Si on demande précisément certains champs, on ne fait que les renvoyer */ if (count($champs_demandes) != 0) { foreach ($res['result'][0] as $champ => $valeur) { if (!in_array($champ, array('id_article')) && !in_array($champ, $champs_demandes)) { unset($res['result'][0][$champ]); } } } /** * On ajoute le booléen "modifiable" : * Uniquement si on ne demande pas de champs spécifique ou qu'il soit dedans */ if (count($champs_demandes) == 0 || in_array('modifiable', $champs_demandes)) { if (autoriser('modifier', 'id_article', $args['id_article'], $GLOBALS['visiteur_session'])) { $res['result'][0]['modifiable'] = 1; } else { $res['result'][0]['modifiable'] = 0; } } /** * On ajoute le logo de l'article : * Uniquement si on ne demande pas de champs spécifique ou qu'il soit dedans */ if (count($champs_demandes) == 0 || in_array('logo', $champs_demandes)) { $logo = quete_logo('id_article', 'on', $res['result'][0]['id_article'], '', false); if (is_array($logo)) { $res['result'][0]['logo'] = url_absolue($logo[0]); } } /** * On a les infos de l'article, on récupère maintenant : * (si pas de champs demandés spécifiés ou les champs en question sont demandés) * -* Son document * -* Sa vignette * -* Sa géoloc * -* Ses mots clés * -** tags * -** échelle * -* Ses commentaires */ /** * On commence par le document principal */ if (count($champs_demandes) == 0 || in_array('document', $champs_demandes) || in_array('vignette', $champs_demandes)) { $document = sql_fetsel('*', 'spip_documents as documents LEFT JOIN spip_documents_liens AS lien ON documents.id_document=lien.id_document', 'lien.objet=' . sql_quote('article') . ' AND lien.id_objet=' . intval($args['id_article']), array(), array(), 1); if (is_array($document)) { include_spip('inc/documents'); include_spip('inc/filtres_images_mini'); include_spip('filtres/images_transforme'); if (count($champs_demandes) == 0 || in_array('document', $champs_demandes)) { $largeur_document = $args['document_largeur']; $hauteur_document = $args['document_hauteur']; if (in_array($document['extension'], array('gif', 'png', 'jpg')) && ($largeur_document || $hauteur_document)) { $res['result'][0]['document'] = url_absolue(extraire_attribut(image_reduire(get_spip_doc($document['fichier']), $largeur_document, $hauteur_document), 'src')); } else { $res['result'][0]['document'] = url_absolue(get_spip_doc($document['fichier'])); } $res['result'][0]['media'] = $document['media']; $res['result'][0]['extension'] = $document['extension']; } if (count($champs_demandes) == 0 || in_array('vignette', $champs_demandes)) { $largeur_vignette = $args['vignette_largeur'] ? $args['vignette_largeur'] : 100; $hauteur_vignette = $args['vignette_hauteur'] ? $args['vignette_hauteur'] : 100; if ($format_vignette == 'carre') { $vignette = extraire_attribut(quete_logo_document($document, $lien, $align, $mode_logo, '', '', $connect = NULL), 'src'); $res['result'][0]['vignette'] = url_absolue(extraire_attribut(image_recadre(image_passe_partout($vignette, $largeur_vignette, $hauteur_vignette), $largeur_vignette, $hauteur_vignette), 'src')); } else { $vignette = liens_absolus(quete_logo_document($document, $lien, $align, $mode_logo, $largeur_vignette, $hauteur_vignette, $connect = NULL)); $res['result'][0]['vignette'] = extraire_attribut($vignette, 'src'); } } } } /** * On ajoute les auteurs * On met juste leur id_auteur + nom, si besoin de plus une autre requête sur l'auteur est à effectuer */ if (count($champs_demandes) == 0 || in_array('auteurs', $champs_demandes)) { $auteurs = sql_select('auteurs.nom, auteurs.id_auteur', 'spip_auteurs AS auteurs INNER JOIN spip_auteurs_liens AS L1 ON L1.id_auteur = auteurs.id_auteur INNER JOIN spip_articles AS L2 ON L2.id_article = L1.id_objet', "L1.objet='article' AND auteurs.statut != '5poubelle' AND L2.id_article = " . intval($res['result'][0]['id_article'])); while ($auteur = sql_fetch($auteurs)) { $res['result'][0]['auteurs'][] = $auteur; } } /** * On ajoute les points de géoloc */ if (defined('_DIR_PLUGIN_GIS') && count($champs_demandes) == 0 || in_array('gis', $champs_demandes)) { include_spip('gis_xmlrpc', 'inc'); $tous_gis = sql_select('gis.id_gis', 'spip_gis AS `gis` INNER JOIN spip_gis_liens AS L1 ON L1.id_gis = gis.id_gis', 'L1.id_objet = ' . intval($args['id_article']) . ' AND (L1.objet = ' . sql_quote('article') . ')'); while ($gis = sql_fetch($tous_gis)) { $args['id_gis'] = $gis['id_gis']; $res['result'][0]['gis'][] = spip_lire_gis($args); } } /** * On ajoute les tags * On met juste leur id_mot + titr, si besoin de plus une autre requête sur le mot est à effectuer */ if (count($champs_demandes) == 0 || in_array('tags', $champs_demandes)) { $tags_group = intval($config['groupe_tags']) > 0 ? intval($config['groupe_tags']) : intval(lire_config('spipicious/groupe_mot')); if ($tags_group > 0) { $tous_tags = sql_select('mots.id_mot, mots.titre', 'spip_mots AS `mots` INNER JOIN spip_mots_liens AS L1 ON ( L1.id_mot = mots.id_mot )', 'L1.id_objet = ' . intval($args['id_article']) . ' AND (L1.objet = "article") AND (mots.id_groupe = ' . $tags_group . ')'); while ($tag = sql_fetch($tous_tags)) { $res['result'][0]['tags'][] = $tag; } } } /** * Et on ajoute l'échelle * On met juste son id_mot + titre, si besoin de plus une autre requête sur le mot est à effectuer */ if (count($champs_demandes) == 0 || in_array('echelle', $champs_demandes)) { $echelle_group = intval($config['groupe_echelle']) > 0 ? intval($config['groupe_echelle']) : 0; if ($echelle_group > 0) { $echelle = sql_fetsel('mots.id_mot, mots.titre', 'spip_mots AS `mots` INNER JOIN spip_mots_liens AS L1 ON ( L1.id_mot = mots.id_mot )', 'L1.id_objet = ' . intval($args['id_article']) . ' AND (L1.objet = "article") AND (mots.id_groupe = ' . $echelle_group . ')'); if (is_array($echelle)) { $res['result'][0]['echelle'][] = $echelle; } } } /** * Et on ajoute les forums * On n'affiche que les forums publiés (statut publie) * * On met juste : * -* id_forum * -* id_thread * -* titre * -* auteur * -* id_auteur * Si besoin de plus une autre requête sur le forum est à effectuer */ if (count($champs_demandes) == 0 || in_array('forums', $champs_demandes)) { $forums = sql_select('id_forum, id_thread,titre,auteur,id_auteur', 'spip_forum', 'objet=' . sql_quote('article') . ' AND id_objet = ' . intval($args['id_article']) . ' AND (statut = ' . sql_quote('publie') . ')'); while ($forum = sql_fetch($forums)) { $res['result'][0]['forums'][] = $forum; } } $media_struct = $res['result'][0]; $media_struct = array_filter($media_struct); return $media_struct; }
function plugin_resume($info, $dir_plugins, $plug_file, $url_page) { $desc = plugin_propre($info['description']); $dir = $dir_plugins.$plug_file; if (($p=strpos($desc, "<br />"))!==FALSE) $desc = substr($desc, 0,$p); $url = parametre_url($url_page, "plugin", $dir); if (isset($info['icon']) and $i = trim($info['icon'])) { include_spip("inc/filtres_images_mini"); $i = inserer_attribut(image_reduire("$dir/$i", 32),'alt',''); $i = "<div class='icon'><a href='$url' rel='info'>$i</a></div>"; } else $i = ''; return "<div class='resume'>" . "<h3 class='nom'><a href='$url' rel='info'>" . typo($info['nom']) . "</a></h3>" . " <span class='version'>".$info['version']."</span>" . " <span class='etat'> - " . plugin_etat_en_clair($info['etat']) . "</span>" . "<div class='short'>".couper($desc,70)."</div>" . $i . "</div>"; }
function mon_reflet($image) { $est = image_reduire($image, 200,150); $est = image_recadre($est, 200,75,bottom); $est = image_alpha($est, 50); $est = image_flip_horizontal($est, "src"); $ret = image_masque($est, "degrade.png"); return $ret; }
function etat_base_accueil() { global $spip_display, $spip_lang_left, $connect_id_rubrique; $where = count($connect_id_rubrique) ? sql_in('id_rubrique', $connect_id_rubrique) : ''; $res = ''; if ($spip_display != 1) { $chercher_logo = charger_fonction('chercher_logo', 'inc'); if ($r = $chercher_logo(0, 'id_syndic', 'on')) { list($fid, $dir, $nom, $format) = $r; include_spip('inc/filtres_images_mini'); $r = image_reduire("<img src='$fid' alt='' />", 170, 170); if ($r) $res ="<div style='text-align:center; margin-bottom: 5px;'>$r</div>"; } } $res .= "<div class='verdana1'>"; $res .= propre($GLOBALS['meta']["descriptif_site"]); $q = sql_select("COUNT(*) AS cnt, statut", 'spip_articles', '', 'statut', '','', "COUNT(*)<>0"); $cpt = array(); $cpt2 = array(); $defaut = $where ? '0/' : ''; while($row = sql_fetch($q)) { $cpt[$row['statut']] = $row['cnt']; $cpt2[$row['statut']] = $defaut; } if ($cpt) { if ($where) { $q = sql_select("COUNT(*) AS cnt, statut", 'spip_articles', $where, "statut"); while($row = sql_fetch($q)) { $r = $row['statut']; $cpt2[$r] = intval($row['cnt']) . '/'; } } $res .= afficher_plus(generer_url_ecrire("articles_page",""))."<b>"._T('info_articles')."</b>"; $res .= "<ul style='margin:0px; padding-$spip_lang_left: 20px; margin-bottom: 5px;'>"; if (isset($cpt['prepa'])) $res .= "<li>"._T("texte_statut_en_cours_redaction").": ".$cpt2['prepa'] . $cpt['prepa'] .'</li>'; if (isset($cpt['prop'])) $res .= "<li>"._T("texte_statut_attente_validation").": ".$cpt2['prop'] . $cpt['prop'] . '</li>'; if (isset($cpt['publie'])) $res .= "<li><b>"._T("texte_statut_publies").": ".$cpt2['publie'].$cpt['publie'] ."</b>" . '</li>'; $res .= "</ul>"; } $q = sql_select("COUNT(*) AS cnt, statut", 'spip_breves', '', 'statut', '','', "COUNT(*)<>0"); $cpt = array(); $cpt2 = array(); $defaut = $where ? '0/' : ''; while($row = sql_fetch($q)) { $cpt[$row['statut']] = $row['cnt']; $cpt2[$row['statut']] = $defaut; } if ($cpt) { if ($where) { $q = sql_select("COUNT(*) AS cnt, statut", 'spip_breves', $where, "statut"); while($row = sql_fetch($q)) { $r = $row['statut']; $cpt2[$r] = intval($row['cnt']) . '/'; } } $res .= afficher_plus(generer_url_ecrire("breves",""))."<b>"._T('info_breves_02')."</b>"; $res .= "<ul style='margin:0px; padding-$spip_lang_left: 20px; margin-bottom: 5px;'>"; if (isset($cpt['prop'])) $res .= "<li>"._T("texte_statut_attente_validation").": ".$cpt2['prop'].$cpt['prop'] . '</li>'; if (isset($cpt['publie'])) $res .= "<li><b>"._T("texte_statut_publies").": ".$cpt2['publie'] .$cpt['publie'] . "</b>" .'</li>'; $res .= "</ul>"; } $q = sql_select('COUNT(*) AS cnt, statut', 'spip_forum', sql_in('statut', array('publie', 'prop')), 'statut', '','', "COUNT(*)<>0"); $cpt = array(); $cpt2 = array(); $defaut = $where ? '0/' : ''; while($row = sql_fetch($q)) { $cpt[$row['statut']] = $row['cnt']; $cpt2[$row['statut']] = $defaut; } if ($cpt) { if ($where) { include_spip('inc/forum'); list($f, $w) = critere_statut_controle_forum('public'); $q = sql_select("COUNT(*) AS cnt, F.statut", "$f", "$w ", "F.statut"); while($row = sql_fetch($q)) { $r = $row['statut']; $cpt2[$r] = intval($row['cnt']) . '/'; } } if (autoriser('modererforum')) $res .= afficher_plus(generer_url_ecrire("controle_forum","")); $res .= "<b>" ._T('onglet_messages_publics') ."</b>"; $res .= "<ul style='margin:0px; padding-$spip_lang_left: 20px; margin-bottom: 5px;'>"; if (isset($cpt['prop'])) $res .= "<li>"._T("texte_statut_attente_validation").": ".$cpt2['prop'] .$cpt['prop'] . '</li>'; if (isset($cpt['publie'])) $res .= "<li><b>"._T("texte_statut_publies").": ".$cpt2['publie'] .$cpt['publie'] . "</b>" .'</li>'; $res .= "</ul>"; } $res .= accueil_liste_participants() . "</div>"; return pipeline('accueil_informations',$res) ; }
function afficher_objet_boucle($row, $own) { global $connect_statut, $spip_lang_right; static $chercher_logo = true; list($afficher_langue, $affrub, $langue_defaut, $formater,$type,$primary) = $own; $vals = array(); $id_objet = $row[$primary]; if (autoriser('voir',$type,$id_objet)){ $date_heure = isset($row['date'])?$row['date']:(isset($row['date_heure'])?$row['date_heure']:""); $statut = isset($row['statut'])?$row['statut']:""; if (isset($row['lang'])) changer_typo($lang = $row['lang']); else $lang = $langue_defaut; $lang_dir = lang_dir($lang); $id_rubrique = isset($row['id_rubrique'])?$row['id_rubrique']:0; $puce_statut = charger_fonction('puce_statut', 'inc'); $vals[] = $puce_statut($id_objet, $statut, $id_rubrique, $type); list($titre,$suite) = afficher_titre_objet($type,$row); $flogo = ''; if ($chercher_logo) { if ($chercher_logo !== true OR $chercher_logo = charger_fonction_logo_if()) if ($logo = $chercher_logo($id_objet, $primary, 'on')) { list($fid, $dir, $nom, $format) = $logo; include_spip('inc/filtres_images_mini'); $logo = image_reduire("<img src='$fid' alt='' />", 26, 20); if ($logo) $flogo = "\n<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</span>"; } } if ($titre) { $titre = "<a href='" . lien_voir_objet($type,$primary,$id_objet) . "'>" . $titre . "</a>"; } $vals[] = "\n<div>$flogo$titre$suite</div>"; $s = ""; if ($afficher_langue){ if (isset($row['langue_choisie'])){ $s .= " <span class='spip_xx-small' style='color: #666666' dir='$lang_dir'>"; if ($row['langue_choisie'] == "oui") $s .= "<b>".traduire_nom_langue($lang)."</b>"; else $s .= "(".traduire_nom_langue($lang).")"; $s .= "</span>"; } elseif ($lang != $langue_defaut) $s .= " <span class='spip_xx-small' style='color: #666666' dir='$lang_dir'>". ($lang ? "(".traduire_nom_langue($lang).")" : '' ) ."</span>"; } $vals[] = $s; $vals[] = afficher_complement_objet($type,$row); $s = ""; if ($affrub && $id_rubrique) { $rub = sql_fetsel("id_rubrique, titre", "spip_rubriques", "id_rubrique=$id_rubrique"); $id_rubrique = $rub['id_rubrique']; $s .= "<a href='" . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "' style=\"display:block;\">".typo($rub['titre'])."</a>"; } else if ($statut){ if ($statut != "prop") $s = affdate_jourcourt($date_heure); else $s .= _T('info_a_valider'); } $vals[] = $s; $vals[] = afficher_numero_edit($id_objet, $primary, $type, $row); } return $vals; }
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>"; }
function plugin_resume($info, $dir_plugins, $plug_file, $url_page) { $prefix = $info['prefix']; $dir = "{$dir_plugins}{$plug_file}"; $slogan = PtoBR(plugin_propre($info['slogan'], "{$dir}/lang/paquet-{$prefix}")); // une seule ligne dans le slogan : couper si besoin if (($p = strpos($slogan, "<br />")) !== FALSE) { $slogan = substr($slogan, 0, $p); } // couper par securite $slogan = couper($slogan, 80); $nom = plugin_nom($info, $dir_plugins, $plug_file); $url = parametre_url($url_page, "plugin", substr($dir, strlen(_DIR_RACINE))); if (isset($info['logo']) and $i = trim($info['logo'])) { include_spip("inc/filtres_images_mini"); $i = inserer_attribut(image_reduire("{$dir}/{$i}", 32), 'alt', ''); $i = "<div class='icon'><a href='{$url}' rel='info'>{$i}</a></div>"; } else { $i = ''; } return "<div class='resume'>" . "<h3><a href='{$url}' rel='info'>" . $nom . "</a></h3>" . " <span class='version'>" . $info['version'] . "</span>" . " <span class='etat'> - " . plugin_etat_en_clair($info['etat']) . "</span>" . "<div class='short'>" . $slogan . "</div>" . $i . "</div>"; }
function decrire_logo($id_objet, $mode, $id, $width, $height, $img, $titre="", $script="", $flag_modif=true) { list($fid, $dir, $nom, $format, $timestamp) = $img; include_spip('inc/filtres_images_mini'); $res = image_reduire("<img src='$fid' alt='' class='miniature_logo' />", $width, $height); if ($res){ $src = extraire_attribut($res,'src'); $res = inserer_attribut($res, 'src', "$src?$timestamp"); $res = "<div><a href='" . $fid . "'>$res</a></div>"; } else $res = "<img src='$fid?$timestamp' width='$width' height='$height' alt=\"" . htmlentities($titre) . '" />'; if ($taille = @getimagesize($fid)) $taille = _T('info_largeur_vignette', array('largeur_vignette' => $taille[0], 'hauteur_vignette' => $taille[1])); return array($res, "<div class='spip_xx-small'>" . $taille . ($flag_modif ? "\n<br />[" . ajax_action_auteur("iconifier", "$id-$nom.$format", $script, "$id_objet=$id&type=$id_objet", array(_T('lien_supprimer')), '',"function(r,status) {this.innerHTML = r; \$('form.form_upload_icon',this).async_upload(async_upload_icon);}") ."]" : '') . "</div>"); }
function enfant_rub($collection){ global $spip_display, $spip_lang_left, $spip_lang_right, $spip_lang; $voir_logo = ($spip_display != 1 AND $spip_display != 4 AND isset($GLOBALS['meta']['image_process']) AND $GLOBALS['meta']['image_process'] != "non"); if ($voir_logo) { $voir_logo = "float: $spip_lang_right; margin-$spip_lang_right: 0px; margin-top: 0px;"; $chercher_logo = charger_fonction('chercher_logo', 'inc'); } else $logo =''; $res = ""; $result = sql_select("id_rubrique, id_parent, titre, descriptif, lang ", "spip_rubriques", "id_parent=$collection",'', '0+titre,titre'); while($row=sql_fetch($result)){ $id_rubrique=$row['id_rubrique']; $id_parent=$row['id_parent']; $titre=$row['titre']; if (autoriser('voir','rubrique',$id_rubrique)){ $les_sous_enfants = sous_enfant_rub($id_rubrique); changer_typo($row['lang']); $lang_dir = lang_dir($row['lang']); $descriptif=propre($row['descriptif']); if ($voir_logo) { if ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on')) { list($fid, $dir, $nom, $format) = $logo; include_spip('inc/filtres_images_mini'); $logo = image_reduire("<img src='$fid' alt='' />", 48, 36); if ($logo) $logo = "\n<div style='$voir_logo'>$logo</div>"; } } $lib_bouton = (!acces_restreint_rubrique($id_rubrique) ? "" : http_img_pack("admin-12.gif", '', " width='12' height='12'", _T('image_administrer_rubrique'))) . " <span dir='$lang_dir'><a href='" . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") . "'>". typo($titre) . "</a></span>"; $titre = (is_string($logo) ? $logo : '') . bouton_block_depliable($lib_bouton,$les_sous_enfants ?false:-1,"enfants$id_rubrique"); $les_enfants = "\n<div class='enfants'>" . debut_cadre_sous_rub(($id_parent ? "rubrique-24.gif" : "secteur-24.gif"), true, "", $titre) . (!$descriptif ? '' : "\n<div class='verdana1'>$descriptif</div>") . (($spip_display == 4) ? '' : $les_sous_enfants) . "\n<div style='clear:both;'></div>" . fin_cadre_sous_rub(true) . "</div>"; $res .= ($spip_display != 4) ? $les_enfants : "\n<li>$les_enfants</li>"; } } changer_typo($spip_lang); # remettre la typo de l'interface pour la suite return (($spip_display == 4) ? "\n<ul>$res</ul>\n" : $res); }