/** * definir la liste des boutons du haut et de ses sous-menus * On defini les boutons a metrtre selon les droits de l'utilisateur * puis on balance le tout au pipeline "ajouter_menus" pour que des plugins * puissent y mettre leur grain de sel * * @param array $contexte * @param bool $icones // rechercher les icones * @param bool $autorise // ne renvoyer que les boutons autorises * @return array */ function definir_barre_boutons($contexte = array(), $icones = true, $autorise = true) { include_spip('inc/autoriser'); $boutons_admin = array(); // les boutons du core, issus de prive/navigation.xml $liste_boutons = array(); // ajouter les boutons issus des plugin via plugin.xml if (function_exists('boutons_plugins') and is_array($liste_boutons_plugins = boutons_plugins())) { $liste_boutons =& $liste_boutons_plugins; } foreach ($liste_boutons as $id => $infos) { $parent = ""; // les boutons principaux ne sont pas soumis a autorisation if (!isset($infos['parent']) or !($parent = $infos['parent']) or !$autorise or autoriser('menu', "_{$id}", 0, NULL, array('contexte' => $contexte))) { if ($parent and $parent = preg_replace(',^bando_,', 'menu_', $parent) and isset($boutons_admin[$parent])) { if (!is_array($boutons_admin[$parent]->sousmenu)) { $boutons_admin[$parent]->sousmenu = array(); } $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu); if ($position < 0) { $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position; } $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position) + array($id => new Bouton(($icones and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin[$parent]->sousmenu, $position, 100); } if (!$parent and !in_array($id, array('forum', 'statistiques_visites'))) { $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin); $boutons_admin = array_slice($boutons_admin, 0, $position) + array($id => new Bouton(($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin, $position, 100); } } } return pipeline('ajouter_menus', $boutons_admin); }
/** * Ajout de l'onglet 'Ajouter les plugins' * * L'URL dépend de l'existence ou pas d'un dépot de plugins. * En absence, on amène sur la page permettant de créer un premier dépot. * * @pipeline ajouter_onglets * @param array $flux Données du pipeline * @return array Données du pipeline */ function svp_ajouter_onglets($flux) { if ($flux['args'] == 'plugins' and autoriser('ajouter', '_plugins')) { $compteurs = svp_compter('depot'); $page = $compteurs['depot'] == 0 ? 'depots' : 'charger_plugin'; $flux['data']['charger_plugin'] = new Bouton(find_in_theme('images/plugin-add-24.png'), 'plugin_titre_automatique_ajouter', generer_url_ecrire($page)); } return $flux; }
function inc_icone_renommer_dist($fond, $fonction) { $size = 24; if (preg_match("/(?:-([0-9]{1,3}))?([.](gif|png))?\$/i", $fond, $match) and (isset($match[0]) and $match[0] or isset($match[1]) and $match[1])) { if (isset($match[1]) and $match[1]) { $size = $match[1]; } $type = substr($fond, 0, -strlen($match[0])); if (!isset($match[2]) or !$match[2]) { $fond .= ".png"; } } else { $type = $fond; $fond .= ".png"; } $rtl = false; if (preg_match(',[-_]rtl$,i', $type, $match)) { $rtl = true; $type = substr($type, 0, -strlen($match[0])); } // objet_type garde invariant tout ce qui ne commence par par id_, spip_ // et ne finit pas par un s, sauf si c'est une exception declaree $type = objet_type($type, false); $dir = "images/"; $f = "{$type}-{$size}.png"; if ($icone = find_in_theme($dir . $f)) { $dir = dirname($icone); $fond = $icone; if ($rtl and $fr = "{$type}-rtl-{$size}.png" and file_exists($dir . '/' . $fr)) { $type = "{$type}-rtl"; } $action = $fonction; if ($action == "supprimer.gif") { $action = "del"; } elseif ($action == "creer.gif") { $action = "new"; } elseif ($action == "edit.gif") { $action = "edit"; } if (!in_array($action, array('del', 'new', 'edit'))) { $action = ""; } if ($action) { if ($fa = "{$type}-{$action}-{$size}.png" and file_exists($dir . '/' . $fa)) { $fond = $dir . '/' . $fa; $fonction = ""; } else { $fonction = "{$action}-{$size}.png"; } } // c'est bon ! return array($fond, $fonction); } return array($fond, $fonction); }
function definir_barre_onglets($script) { $onglets = array(); $liste_onglets = array(); // ajouter les onglets issus des plugin via plugin.xml if (function_exists('onglets_plugins')) { $liste_onglets = onglets_plugins(); } foreach ($liste_onglets as $id => $infos) { if (($parent = $infos['parent']) && $parent == $script && autoriser('onglet', "_{$id}")) { $onglets[$id] = new Bouton(isset($infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? generer_url_ecrire($infos['action'], (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : '') : null); } } return pipeline('ajouter_onglets', array('data' => $onglets, 'args' => $script)); }
/** * http://doc.spip.org/@install_debut_html * * @param string $titre * @param string $onLoad * @param bool $all_inline * inliner les css et js dans la page (limiter le nombre de hits) * @return string */ function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) { global $spip_lang_right, $spip_lang_left; utiliser_langue_visiteur(); http_no_cache(); if ($titre == 'AUTO') { $titre = _T('info_installation_systeme_publication'); } # le charset est en utf-8, pour recuperer le nom comme il faut # lors de l'installation if (!headers_sent()) { header('Content-Type: text/html; charset=utf-8'); } $css = ""; $files = array('reset.css', 'clear.css', 'minipres.css'); if ($all_inline) { // inliner les CSS (optimisation de la page minipres qui passe en un seul hit a la demande) foreach ($files as $name) { $file = direction_css(find_in_theme($name)); if (function_exists("compacte")) { $file = compacte($file); } else { $file = url_absolue_css($file); } // precaution lire_fichier($file, $c); $css .= $c; } $css = "<style type='text/css'>" . $css . "</style>"; } else { foreach ($files as $name) { $file = direction_css(find_in_theme($name)); $css .= "<link rel='stylesheet' href='{$file}' type='text/css' />\n"; } } // au cas ou minipres() est appele avant spip_initialisation_suite() if (!defined('_DOCTYPE_ECRIRE')) { define('_DOCTYPE_ECRIRE', ''); } return _DOCTYPE_ECRIRE . html_lang_attributes() . "<head>\n" . "<title>" . textebrut($titre) . "</title>\n" . "<meta name='viewport' content='width=device-width' />\n" . $css . "</head>\n<body" . $onLoad . " class='minipres'>\n\t<div id='minipres'>\n\t<h1>" . $titre . "</h1>\n\t<div>\n"; }
/** * Cherche une image dans les dossiers d'images * * Cherche en priorité dans les thèmes d'image (prive/themes/X/images) * et si la fonction n'en trouve pas, gère le renommage des icones (ex: 'supprimer' => 'del') * de facon temporaire le temps de la migration, et cherche de nouveau. * * Si l'image n'est toujours pas trouvée, on la cherche dans les chemins, * dans le répertoire défini par la constante `_NOM_IMG_PACK` * * @see find_in_theme() * @see inc_icone_renommer_dist() * * @param string $icone * Nom de l'icone cherchée * @return string * Chemin complet de l'icone depuis la racine si l'icone est trouée, * sinon chaîne vide. **/ function chemin_image($icone) { static $icone_renommer; // gerer le cas d'un double appel en evitant de refaire le travail inutilement if (strpos($icone, "/") !== false and file_exists($icone)) { return $icone; } // si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct if (preg_match(',[.](png|gif|jpg)$,', $icone) and $f = find_in_theme("images/{$icone}")) { return $f; } // sinon passer par le module de renommage if (is_null($icone_renommer)) { $icone_renommer = charger_fonction('icone_renommer', 'inc', true); } if ($icone_renommer) { list($icone, $fonction) = $icone_renommer($icone, ""); if (file_exists($icone)) { return $icone; } } return find_in_path($icone, _NOM_IMG_PACK); }
function lister_configurer($exclure = array()) { return array(); // lister les pages de config deja dans les menus $deja = array(); foreach ($exclure as $id => $b) { $url = $b['url'] ? $b['url'] : $id; if (!$b['url'] or !isset($exclure[$url])) { if (strncmp($url, 'configurer_', 11) == 0) { $deja[$url] = $b; } elseif ($b['url'] == 'configurer' and preg_match(',cfg=([a-z0-9_]+),i', $b['args'], $match)) { $deja["configurer_" . $match[1]] = $b; } } } $exclure = $exclure + $deja; $icone_defaut = "images/configuration-16.png"; $liste = array(); $skels = array(); $forms = array(); // trouver toutes les pages configurer_xxx de l'espace prive // et construire un tableau des entrees qui ne sont pas dans $deja $pages = find_all_in_path("prive/squelettes/contenu/", "configurer_.*[.]" . _EXTENSION_SQUELETTES . '$'); foreach ($pages as $page) { $configurer = basename($page, "." . _EXTENSION_SQUELETTES); if (!isset($exclure[$configurer])) { $liste[$configurer] = array('parent' => 'bando_configuration', 'url' => $configurer, 'titre' => _T("configurer:{$configurer}_titre"), 'icone' => find_in_theme($i = "images/{$configurer}-16.png") ? $i : $icone_defaut); } $skels[$configurer] = $page; } // analyser la liste des $skels pour voir les #FORMULAIRE_CONFIGURER_ inclus foreach ($skels as $file) { $forms = array_merge($forms, lister_formulaires_configurer($file)); } $forms = array_flip($forms); // trouver tous les formulaires/configurer_ // et construire un tableau des entrees $pages = find_all_in_path("formulaires/", "configurer_.*[.]" . _EXTENSION_SQUELETTES . '$'); foreach ($pages as $page) { $configurer = basename($page, "." . _EXTENSION_SQUELETTES); if (!isset($forms[$configurer]) and !isset($liste[$configurer]) and !isset($exclure[$configurer])) { $liste[$configurer] = array('parent' => 'bando_configuration', 'url' => 'configurer', 'args' => 'cfg=' . substr($configurer, 11), 'titre' => _T("configurer:{$configurer}_titre"), 'icone' => find_in_theme($i = "images/{$configurer}-16.png") ? $i : $icone_defaut); } } return $liste; }