Esempio n. 1
0
/**
 * 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);
}
Esempio n. 2
0
/**
 * 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);
}
Esempio n. 4
0
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));
}
Esempio n. 5
0
/**
 * 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";
}
Esempio n. 6
0
/**
 * 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);
}
Esempio n. 7
0
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;
}