Esempio n. 1
0
/**
 * Calcule le contexte pour le menu du bandeau
 *
 * La fonction tente de retrouver la rubrique et le secteur d'appartenance
 * à partir du nom du fichier exec, si celui ci correspond à un objet
 * éditorial de SPIP (et qu'il possède ces champs), et dans ce cas,
 * l'ajoute au contexte.
 *
 * @param null|array $contexte
 *     Contexte connu.
 *     S'il n'est pas transmis, on prend `$_GET`
 * @return array
 *     Contexte
 **/
function definir_barre_contexte($contexte = null)
{
    if (is_null($contexte)) {
        $contexte = $_GET;
    } elseif (is_string($contexte)) {
        $contexte = unserialize($contexte);
    }
    if (!isset($contexte['id_rubrique']) and isset($contexte['exec'])) {
        if (!function_exists('trouver_objet_exec')) {
            include_spip('inc/pipelines_ecrire');
        }
        if ($e = trouver_objet_exec($contexte['exec'])) {
            $_id = $e['id_table_objet'];
            if (isset($contexte[$_id]) and $id = intval($contexte[$_id])) {
                $table = $e['table_objet_sql'];
                $row = sql_fetsel('*', $table, "{$_id}=" . intval($id));
                if (isset($row['id_rubrique'])) {
                    $contexte['id_rubrique'] = $row['id_rubrique'];
                    if (isset($row['id_secteur'])) {
                        $contexte['id_secteur'] = $row['id_secteur'];
                    }
                }
            }
        }
    }
    return $contexte;
}
/**
 * Ajouter la boite des zones sur la fiche de rubrique
 *
 * @param string $flux
 * @return string
 */
function accesrestreint_affiche_gauche($flux)
{
    if ($e = trouver_objet_exec($flux['args']['exec']) and $e['type'] == 'rubrique' and $e['edition'] == false and $id_rubrique = $flux['args']['id_rubrique']) {
        if (autoriser('administrer', 'zone', 0)) {
            $flux['data'] .= recuperer_fond('prive/squelettes/inclure/acces_rubrique', array('id_rubrique' => $id_rubrique));
        }
    }
    return $flux;
}
Esempio n. 3
0
/**
 * Inserer les infos d'agenda sur les articles et rubriques
 *
 * @param array $flux
 * @return array
 */
function agenda_affiche_milieu($flux)
{
    $e = trouver_objet_exec($flux['args']['exec']);
    $out = "";
    if ($e['type'] == 'rubrique' and autoriser('configurer') and $e['edition'] == false and $id_rubrique = intval($flux['args']['id_rubrique']) and autoriser('modifier', 'rubrique', $id_rubrique)) {
        $activer = true;
        $res = "";
        $actif = sql_getfetsel('agenda', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
        $statut = "-32";
        $alt = "";
        $voir = "";
        if (!sql_countsel('spip_rubriques', 'agenda=1')) {
            $res .= "<span class='small'>" . _T('agenda:aucune_rubrique_mode_agenda') . "</span><br />";
        } else {
            include_spip('inc/rubriques');
            if (sql_countsel('spip_rubriques', sql_in('id_rubrique', calcul_hierarchie_in($id_rubrique)) . " AND agenda=1 AND id_rubrique<>" . intval($id_rubrique))) {
                $alt = _T('agenda:rubrique_dans_une_rubrique_mode_agenda');
                $activer = false;
                $statut = "-ok-32";
                $voir = _T('agenda:voir_evenements_rubrique');
            } elseif (!$actif) {
                $alt = _T('agenda:rubrique_sans_gestion_evenement') . '<br />';
                $statut = "-non-32";
            }
            if ($actif) {
                $alt = _T('agenda:rubrique_mode_agenda') . '<br />';
                $statut = "-ok-32";
                $voir = _T('agenda:voir_evenements_rubrique');
            }
        }
        if (!$actif) {
            if ($activer) {
                $res .= bouton_action(_T('agenda:rubrique_activer_agenda'), generer_action_auteur('activer_agenda_rubrique', $id_rubrique, self()), 'ajax');
            }
        } else {
            $res .= bouton_action(_T('agenda:rubrique_desactiver_agenda'), generer_action_auteur('activer_agenda_rubrique', "-{$id_rubrique}", self()), 'ajax');
        }
        if ($voir) {
            $res .= " | <a href='" . generer_url_ecrire('evenements', "id_rubrique={$id_rubrique}") . "'>{$voir}</a>";
        }
        if ($res) {
            $out .= boite_ouvrir(_T('agenda:agenda') . http_img_pack("agenda{$statut}.png", $alt, "class='statut'", $alt), 'simple agenda-statut') . $res . boite_fermer();
        }
    } elseif ($e['type'] == 'article' and $e['edition'] == false) {
        $id_article = $flux['args']['id_article'];
        $out .= recuperer_fond('prive/objets/contenu/article-evenements', $flux['args']);
    }
    if ($out) {
        if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
            $flux['data'] = substr_replace($flux['data'], $out, $p, 0);
        } else {
            $flux['data'] .= $out;
        }
    }
    return $flux;
}
Esempio n. 4
0
/**
 * Configuration des mots
 *
 * @param array $flux
 * @return array
 */
function mots_affiche_milieu($flux)
{
    if ($flux["args"]["exec"] == "configurer_contenu") {
        $flux["data"] .= recuperer_fond('prive/squelettes/inclure/configurer', array('configurer' => 'configurer_mots'));
    }
    // si on est sur une page ou il faut inserer les mots cles...
    if ($en_cours = trouver_objet_exec($flux['args']['exec']) and $en_cours['edition'] !== true and $type = $en_cours['type'] and $id_table_objet = $en_cours['id_table_objet'] and $id = intval($flux['args'][$id_table_objet])) {
        $texte = recuperer_fond('prive/objets/editer/liens', array('table_source' => 'mots', 'objet' => $type, 'id_objet' => $id));
        if ($p = strpos($flux['data'], "<!--affiche_milieu-->")) {
            $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
        } else {
            $flux['data'] .= $texte;
        }
    }
    return $flux;
}
/**
 * Ajouter les brèves référencées sur les vues de rubriques
 *
 * @pipeline affiche_enfants
 *
 * @param array $flux Données du pipeline
 * @return array       Données du pipeline
 **/
function breves_affiche_enfants($flux)
{
    if (isset($flux['args']['exec']) and $e = trouver_objet_exec($flux['args']['exec']) and $e['type'] == 'rubrique' and $e['edition'] == false) {
        $id_rubrique = $flux['args']['id_rubrique'];
        if ($GLOBALS['meta']["activer_breves"] == 'oui') {
            $lister_objets = charger_fonction('lister_objets', 'inc');
            $bouton_breves = '';
            $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . $id_rubrique);
            if (autoriser('creerbrevedans', 'rubrique', $id_rubrique, null, array('id_parent' => $id_parent))) {
                $bouton_breves .= icone_verticale(_T('breves:icone_nouvelle_breve'), generer_url_ecrire("breve_edit", "id_rubrique={$id_rubrique}&new=oui"), "breve-24.png", "new", 'right') . "<br class='nettoyeur' />";
            }
            $flux['data'] .= $lister_objets('breves', array('titre' => _T('breves:icone_ecrire_nouvel_article'), 'where' => "statut != 'prop' AND statut != 'prepa'", 'id_rubrique' => $id_rubrique, 'par' => 'date_heure'));
            $flux['data'] .= $bouton_breves;
        }
    }
    return $flux;
}
Esempio n. 6
0
/**
 * Ajouter les boites des niveaux, cotisations et assurances sur la fiche auteur
 *
 * @param string $flux
 * @return string
 */
function adhclub_affiche_milieu($flux)
{
    $texte = "";
    $e = trouver_objet_exec($flux['args']['exec']);
    // afficher les liaisons avec l'auteur
    if ($e['type'] == 'auteur' and $e['edition'] == false and $id_auteur = $flux['args']['id_auteur'] or $flux['args']['exec'] == "infos_perso" and $id_auteur = $GLOBALS['visiteur_session']['id_auteur']) {
        // adhassur sur les auteurs
        $texte = recuperer_fond('prive/objets/editer/liens', array('table_source' => 'adhassur', 'objet' => $e['type'], 'id_objet' => $id_auteur));
        // adhcoti sur les auteurs
        $texte = $texte . recuperer_fond('prive/objets/editer/liens', array('table_source' => 'adhcoti', 'objet' => $e['type'], 'id_objet' => $id_auteur));
        // adhniv sur les auteurs
        $texte = $texte . recuperer_fond('prive/objets/editer/liens', array('table_source' => 'adhniv', 'objet' => $e['type'], 'id_objet' => $id_auteur));
    }
    if ($texte) {
        if ($p = strpos($flux['data'], "<!--affiche_milieu-->")) {
            $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
        } else {
            $flux['data'] .= $texte;
        }
    }
    return $flux;
}
Esempio n. 7
0
/**
 * Un exec generique qui utilise le fond homonyme de l'exec demande
 * dans l'url
 * Ancien systeme transitoire base sur un squelette unique avec un
 * pseudo balisage par commentaires html
 * deprecie, ne plus utiliser
 *
 */
function exec_fond_monobloc_dist()
{
    // pas d'autorisation
    // c'est au fond de les gerer avec #AUTORISER, et de renvoyer un fond vide le cas echeant
    // qui declenchera un minipres acces interdit
    $exec = _request('exec');
    $fond = trim(recuperer_fond("prive/exec/{$exec}", $_REQUEST));
    if (!$fond) {
        include_spip('inc/minipres');
        echo minipres();
    } else {
        $titre = "exec_{$exec}";
        $hierarchie = "";
        $navigation = "";
        $extra = "";
        // recuperer le titre dans le premier hn de la page
        if (preg_match(",<h[1-6][^>]*>(.+)</h[1-6]>,Uims", $fond, $match)) {
            $titre = $match[1];
        }
        // recuperer la hierarchie (au-dessus du contenu)
        if (preg_match(",<!--#hierarchie-->.+<!--/#hierarchie-->,Uims", $fond, $match)) {
            $hierarchie = $match[0];
            $fond = str_replace($hierarchie, "", $fond);
        }
        // recuperer la navigation (colonne de gauche)
        if (preg_match(",<!--#navigation-->.+<!--/#navigation-->,Uims", $fond, $match)) {
            $navigation = $match[0];
            $fond = str_replace($navigation, "", $fond);
        }
        // recuperer les extras (colonne de droite)
        if (preg_match(",<!--#extra-->.+<!--/#extra-->,Uims", $fond, $match)) {
            $extra = $match[0];
            $fond = str_replace($extra, "", $fond);
        }
        include_spip('inc/presentation');
        // alleger les inclusions avec un inc/presentation_mini
        $commencer_page = charger_fonction('commencer_page', 'inc');
        echo $commencer_page($titre);
        if ($hierarchie) {
            echo debut_grand_cadre(true);
            echo pipeline('affiche_hierarchie', array('args' => array('exec' => $exec), 'data' => $hierarchie));
            echo fin_grand_cadre(true);
        }
        echo debut_gauche("exec_{$exec}", true);
        $contexte = array('exec' => $exec);
        if ($objet_exec = trouver_objet_exec($exec)) {
            $id = $objet_exec['id_table_objet'];
            if (_request($id)) {
                $contexte[$id] = _request($id);
            }
        }
        echo $navigation;
        echo pipeline('affiche_gauche', array('args' => $contexte, 'data' => ''));
        echo creer_colonne_droite("exec_{$exec}", true);
        echo $extra;
        echo pipeline('affiche_droite', array('args' => $contexte, 'data' => ''));
        echo debut_droite("exec_{$exec}", true);
        echo $fond;
        echo pipeline('affiche_milieu', array('args' => $contexte, 'data' => ''));
        echo fin_gauche(), fin_page();
    }
}
Esempio n. 8
0
function liste_objets_bloques($exec, $contexte = array(), $auteur = null)
{
    $res = '';
    if ($GLOBALS['meta']["articles_modif"] != "non") {
        include_spip('inc/drapeau_edition');
        if (is_null($auteur)) {
            $auteur = $GLOBALS['visiteur_session'];
        }
        if ($en_cours = trouver_objet_exec($exec) and $en_cours['edition'] and $type = $en_cours['type'] and ($id = $contexte[$en_cours['id_table_objet']] or $id = _request($en_cours['id_table_objet']))) {
            // marquer le fait que l'objet est ouvert en edition par toto
            // a telle date ; une alerte sera donnee aux autres redacteurs
            signale_edition($id, $auteur, $type);
        }
        $objets_ouverts = liste_drapeau_edition($auteur['id_auteur']);
        if (count($objets_ouverts)) {
            $res .= recuperer_fond('prive/objets/liste/objets-en-edition', array(), array('ajax' => true));
        }
    }
    return $res;
}
/**
 * Affichage du formulaire de selection de la composition
 *
 * @param array $flux
 * @return array
 */
function compositions_affiche_milieu($flux){
	$e = trouver_objet_exec($flux['args']['exec']);
	$objets = compositions_objets_actives();
	if (in_array($e['type'],$objets)
	  AND $e['edition']===false){
		$type = $e['type'];
		if ($id = $flux['args'][$e['id_table_objet']]) {
			$config = (isset($GLOBALS['meta']['compositions']) ? unserialize($GLOBALS['meta']['compositions']) : array());
			$aut = autoriser('styliser',$type,$id);
			if ((!isset($config['masquer_formulaire']) OR $config['masquer_formulaire'] != 'oui' OR $aut)
				AND (
					($c=compositions_lister_disponibles($type) AND is_array(reset($c)))
					OR ($type == 'rubrique' AND (!isset($config['tout_verrouiller']) OR $config['tout_verrouiller'] != 'oui'))
				  )
				) {
				$ids = 'formulaire_editer_composition_objet-' . "$type-$id";
				$texte = recuperer_fond(
					'prive/editer/compositions',
					array(
						'type'=>$type,
						'id'=>$id,
					)
				);

				if (($p = strpos($flux['data'],'<!--affiche_milieu-->'))!==false)
					$flux['data'] = substr_replace($flux['data'],$texte,$p,0);
				else
					$flux['data'] .= $texte;
			}
		}
	}

	return $flux;
}
Esempio n. 10
0
/**
 * Tester si un type est echafaudable
 * cad si il correspond bien a un objet en base
 *
 * @staticvar array $echafaudable
 * @param string $type
 * @return bool
 */
function z_echafaudable($type)
{
    static $pages = null;
    static $echafaudable = array();
    if (isset($echafaudable[$type])) {
        return $echafaudable[$type];
    }
    if (preg_match(',[^\\w],', $type)) {
        return $echafaudable[$type] = false;
    }
    if (test_espace_prive()) {
        if (!function_exists('trouver_objet_exec')) {
            include_spip('inc/pipelines_ecrire');
        }
        if ($e = trouver_objet_exec($type)) {
            return $echafaudable[$type] = array($e['table'], $e['table_objet_sql'], $e);
        } else {
            // peut etre c'est un exec=types qui liste tous les objets "type"
            if (($t = objet_type($type, false)) !== $type and $e = trouver_objet_exec($t)) {
                return $echafaudable[$type] = array($e['table'], $e['table_objet_sql'], $t);
            }
        }
    } else {
        if (is_null($pages)) {
            $pages = array();
            $liste = lister_tables_objets_sql();
            foreach ($liste as $t => $d) {
                if ($d['page']) {
                    $pages[$d['page']] = array($d['table_objet'], $t);
                }
            }
        }
        if (!isset($pages[$type])) {
            return $echafaudable[$type] = false;
        }
        if (count($pages[$type]) == 2) {
            $trouver_table = charger_fonction('trouver_table', 'base');
            $pages[$type][] = $trouver_table(reset($pages[$type]));
        }
        return $echafaudable[$type] = $pages[$type];
    }
    return $echafaudable[$type] = false;
}
Esempio n. 11
0
/**
 * Ajouter les sites references sur les vues de rubriques
 *
 * @param array $flux
 * @return array
 */
function sites_affiche_enfants($flux)
{
    if ($e = trouver_objet_exec($flux['args']['exec']) and $e['type'] == 'rubrique' and $e['edition'] == false) {
        $id_rubrique = $flux['args']['id_rubrique'];
        if ($GLOBALS['meta']["activer_sites"] == 'oui') {
            $lister_objets = charger_fonction('lister_objets', 'inc');
            $bouton_sites = '';
            if (autoriser('creersitedans', 'rubrique', $id_rubrique)) {
                $bouton_sites .= icone_verticale(_T('sites:info_sites_referencer'), generer_url_ecrire('site_edit', "id_rubrique={$id_rubrique}"), "site-24.png", "new", 'right') . "<br class='nettoyeur' />";
            }
            $flux['data'] .= $lister_objets('sites', array('titre' => _T('sites:titre_sites_references_rubrique'), 'where' => "statut!='refuse' AND statut != 'prop' AND syndication NOT IN ('off','sus')", 'id_rubrique' => $id_rubrique, 'par' => 'nom_site'));
            $flux['data'] .= $bouton_sites;
        }
    }
    return $flux;
}
Esempio n. 12
0
/**
 * Utilisation du pipeline recuperer_fond dans le prive
 * 
 * Branchement automatise de affiche_gauche, affiche_droite, affiche_milieu
 * pour assurer la compat avec les versions precedentes des exec en php
 * Branche de affiche_objet
 * 
 * Les pipelines ne recevront plus exactement le meme contenu en entree,
 * mais la compat multi vertions pourra etre assuree
 * par une insertion au bon endroit quand le contenu de depart n'est pas vide
 * 
 * @param array $flux Données du pipeline
 * @return array Données du pipeline
 */
function f_afficher_blocs_ecrire($flux)
{
    static $o = array();
    if (is_string($fond = $flux['args']['fond'])) {
        $exec = isset($flux['args']['contexte']['exec']) ? $flux['args']['contexte']['exec'] : _request('exec');
        if (!isset($o[$exec])) {
            $o[$exec] = trouver_objet_exec($exec);
        }
        // cas particulier
        if ($exec == "infos_perso") {
            $flux['args']['contexte']['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur'];
        }
        $typepage = isset($flux['args']['contexte']['type-page']) ? $flux['args']['contexte']['type-page'] : $exec;
        if ($fond == "prive/squelettes/navigation/{$typepage}") {
            $flux['data']['texte'] = pipeline('affiche_gauche', array('args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']));
        } elseif ($fond == "prive/squelettes/extra/{$typepage}") {
            include_spip('inc/presentation_mini');
            $flux['data']['texte'] = pipeline('affiche_droite', array('args' => $flux['args']['contexte'], 'data' => $flux['data']['texte'])) . liste_objets_bloques($exec, $flux['args']['contexte']);
        } elseif ($fond == "prive/squelettes/hierarchie/{$typepage}" and $o[$exec]) {
            // id non defini sur les formulaire de nouveaux objets
            $id = isset($flux['args']['contexte'][$o[$exec]['id_table_objet']]) ? intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]) : 0;
            $flux['data']['texte'] = pipeline('affiche_hierarchie', array('args' => array('objet' => $o[$exec]['type'], 'id_objet' => $id), 'data' => $flux['data']['texte']));
        } elseif ($fond == "prive/squelettes/contenu/{$typepage}") {
            if (!strpos($flux['data']['texte'], "<!--affiche_milieu-->")) {
                $flux['data']['texte'] = preg_replace(',<div id=["\']wysiwyg,', "<!--affiche_milieu-->\\0", $flux['data']['texte']);
            }
            if ($o[$exec] and $objet = $o[$exec]['type'] and $o[$exec]['edition'] == false and isset($flux['args']['contexte'][$o[$exec]['id_table_objet']]) and $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']])) {
                // inserer le formulaire de traduction
                $flux['data']['texte'] = str_replace("<!--affiche_milieu-->", recuperer_fond('prive/objets/editer/traductions', array('objet' => $objet, 'id_objet' => $id)) . "<!--affiche_milieu-->", $flux['data']['texte']);
                $flux['data']['texte'] = pipeline('afficher_fiche_objet', array('args' => array('contexte' => $flux['args']['contexte'], 'type' => $objet, 'id' => $id), 'data' => $flux['data']['texte']));
            }
            $flux['data']['texte'] = pipeline('affiche_milieu', array('args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']));
        } elseif ($fond == "prive/squelettes/inclure/pied") {
            $flux['data']['texte'] = pipeline('affiche_pied', array('args' => $flux['args']['contexte'], 'data' => $flux['data']['texte']));
        } elseif (strncmp($fond, "prive/objets/contenu/", 21) == 0 and $objet = basename($fond) and $objet == substr($fond, 21) and isset($o[$objet]) and $o[$objet]) {
            $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]);
            $flux['data']['texte'] = pipeline('afficher_contenu_objet', array('args' => array('type' => $objet, 'id_objet' => $id, 'contexte' => $flux['args']['contexte']), 'data' => $flux['data']['texte']));
        }
    }
    return $flux;
}
/**
 * Ajoute le formulaire d'ajout de document au formulaire d'édition
 * d'un objet (lorsque cet objet peut recevoir des documents).
 *
 * @note
 *   HACK : Lors d'une première création de l'objet, celui-ci n'ayant pas
 *   encore d'identifiant tant que le formulaire d'édition n'est pas enregistré,
 *   les liaisions entre les documents liés et l'objet à créer sauvegardent
 *   un identifiant d'objet négatif de la valeur de id_auteur (l'auteur
 *   connecte). Ces liaisons seront corrigées après validation dans
 *   le pipeline medias_post_insertion()
 *
 * @pipeline affiche_gauche
 * @see medias_post_insertion()
 *
 * @param array $flux
 *     Données du pipeline
 * @return array
 *     Données du pipeline
 */
function medias_affiche_gauche($flux)
{
    if ($en_cours = trouver_objet_exec($flux['args']['exec']) and $en_cours['edition'] !== false and $type = $en_cours['type'] and $id_table_objet = $en_cours['id_table_objet'] and (isset($flux['args'][$id_table_objet]) and $id = intval($flux['args'][$id_table_objet]) or $id = 0 - $GLOBALS['visiteur_session']['id_auteur']) and autoriser('joindredocument', $type, $id)) {
        $flux['data'] .= recuperer_fond('prive/objets/editer/colonne_document', array('objet' => $type, 'id_objet' => $id));
    }
    return $flux;
}