/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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(); } }
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; }
/** * 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; }
/** * 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; }
/** * 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; }