X-Git-Url: http://git.cyclocoop.org/?p=ptitvelo%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fpages%2Fpages_pipelines.php;fp=www%2Fplugins%2Fpages%2Fpages_pipelines.php;h=2c496c5886adc515052e791fedc2ddb069637cec;hp=0000000000000000000000000000000000000000;hb=e7a69b6480a4dcdf34e74b6d62d7f3f4a10a752b;hpb=29b39a068934cc6a39f07e91930e06dc09b56ea7 diff --git a/www/plugins/pages/pages_pipelines.php b/www/plugins/pages/pages_pipelines.php new file mode 100644 index 0000000..2c496c5 --- /dev/null +++ b/www/plugins/pages/pages_pipelines.php @@ -0,0 +1,278 @@ + 0 + and + (sql_getfetsel('page', 'spip_articles', 'id_article='.sql_quote($id_article))) + ) + ) + { + + // On cherche et remplace l'entete de la page : "modifier la page" + $cherche = "/(]*class=('|\")entete-formulaire.*?<\/span>).*?(

.*?<\/h1>.*?<\/div>)/is"; + $surtitre = _T('pages:modifier_page'); + $remplace = "$1$surtitre$3"; + $flux['data'] = preg_replace($cherche, $remplace, $flux['data']); + + // Si c'est une nouvelle page, on remplace le lien de retour dans l'entete + if (_request('new') == 'oui'){ + $cherche = "/(]*class=(?:'|\")icone[^'\"]*retour[^'\"]*(?:'|\")>" + . "]*href=(?:'|\"))[^'\"]*('|\")/is"; + $retour = generer_url_ecrire("pages_tous"); + $remplace = "$1$retour$2"; + $flux['data'] = preg_replace($cherche, $remplace, $flux['data']); + + } + + } + + } + + return $flux; + +} + + +/** + * Saisie de l'identifiant de la page sur la fiche d'une page + * + * @param array $flux + * Le contexte du pipeline + * @return array $flux + * Le contexte du pipeline modifié + */ +function pages_affiche_milieu_identifiant($flux){ + $texte = ""; + $e = trouver_objet_exec($flux['args']['exec']); + + // Si on est sur la fiche d'un article... + if (!$e['edition'] and $e['type']=='article' ) { + include_spip('base/abstract_sql'); + $id_article = isset($flux['args'][$e['id_table_objet']]) ? $flux['args'][$e['id_table_objet']] : false; + // ... et s'il s'agit d'une page + if ( + _request('modele') == 'page' + or + ( + $id_article > 0 + and + (sql_getfetsel('page', 'spip_articles', 'id_article='.sql_quote($id_article))) + ) + ) { + $texte .= recuperer_fond('prive/objets/editer/identifiant_page', + array('id_article' => $id_article), + array('ajax'=>true) + ); + } + } + + if ($texte) { + if ($p=strpos($flux['data'],"")) + $flux['data'] = substr_replace($flux['data'],$texte,$p,0); + else + $flux['data'] .= $texte; + } + + return $flux; +} + + +// Vérifier que la page n'est pas vide +function pages_formulaire_charger($flux){ + + // Si on est dans l'édition d'un article + if (is_array($flux) and $flux['args']['form'] == 'editer_article'){ + + // Si on est dans un article de modele page + if (_request('modele') == 'page' or ($flux['data']['page'] and _request('modele') != 'article')){ + $flux['data']['modele'] = 'page'; + $flux['data']['champ_page'] = $flux['data']['page']; + } + unset($flux['data']['page']); + } + + return $flux; + +} + + +/** + * Vérifications de l'identifiant d'une page + * + * @param array $flux + * Le contexte du pipeline + * @return array $flux + * Le contexte du pipeline modifié + */ +function pages_formulaire_verifier($flux){ + + // Si on est dans l'édition d'un article/page ou dans le formulaire d'édition d'un identifiant page + if ( + is_array($flux) + and ( + ( $flux['args']['form'] == 'editer_article' and _request('modele') == 'page' ) + or $flux['args']['form'] == 'editer_identifiant_page' + ) + ){ + $erreur = ''; + $page = _request('champ_page'); + $id_page = $flux['args']['args'][0]; + + // champ vide + if (!$page) + $erreur .= _T('info_obligatoire'); + // nombre de charactères : 40 max + elseif (strlen($page) > 255) + $erreur = _T('pages:erreur_champ_page_taille'); + // format : charactères alphanumériques en minuscules ou "_" + elseif (!preg_match('/^[a-z0-9_]+$/', $page)) + $erreur = _T('pages:erreur_champ_page_format'); + // doublon + elseif (sql_countsel(table_objet_sql('article'), "page=".sql_quote($page) . " AND id_article!=".intval($id_page))) + $erreur = _T('pages:erreur_champ_page_doublon'); + + if ($erreur) + $flux['data']['champ_page'] .= $erreur; + } + return $flux; + +} + + +/** + * Insertion dans le pipeline editer_contenu_objet (SPIP) + * + * Sur les articles considérés comme pages uniques, on remplace l'élément de choix de rubriques par : + * -* un input hidden id_rubrique et id_parent avec pour valeur -1 + * -* un input hidden modele avec comme valeur "page" + * -* un champ d'édition de l'identifiant de la page unique + * + * @param array $flux + * Le contexte du pipeline + * @return array $flux + * Le contexte du pipeline modifié + */ +function pages_editer_contenu_objet($flux){ + $args = $flux['args']; + if ($args['type'] == 'article' && isset($args['contexte']['modele']) && $args['contexte']['modele'] == 'page'){ + $erreurs = $args['contexte']['erreurs']; + // On cherche et remplace l'édition de la rubrique + $cherche = "/]*class=('|\")editer editer_parent.*?<\/li>/is"; + $remplace = '
  • '; + $remplace .= ''; + $remplace .= ''; + $remplace .= ''; + $remplace .= ''; + if ($erreurs['champ_page']) + $remplace .= ''.$erreurs['champ_page'].''; + $value = $args['contexte']['champ_page'] ? $args['contexte']['champ_page'] : $args['contexte']['page']; + $remplace .= ''; + $remplace .= '
  • '; + $flux['data'] = preg_replace($cherche, $remplace, $flux['data'],1); + $flux['data'] = preg_replace($cherche, '', $flux['data']); + } + return $flux; +} + +/** + * Insertion dans le pipeline pre_edition (SPIP) + * + * Si on édite un article : + * - Si on récupère un champ "champ_page" dans les _request() et qu'il est différent de "article", + * on transforme l'article en page unique, id_rubrique devient -1 + * - Si on ne récupère pas de champ_page et que id_parent est supérieur à 0, on le passe en article et on vide + * son champ page pour pouvoir réaliser le processus inverse dans le futur + * + * @param array $flux Le contexte du pipeline + * @return array $flux Le contexte modifié + */ +function pages_pre_edition_ajouter_page($flux){ + if (is_array($flux) and isset($flux['args']['type']) && $flux['args']['type'] == 'article'){ + if ((($page = _request('champ_page')) != '') AND ($page != 'article')){ + /** + * On ajoute le "champ_page" du formulaire qui deviendra "page" dans la table + * On force l'id_rubrique à -1 + */ + $flux['data']['page'] = $page; + $flux['data']['id_rubrique'] = '-1'; + $flux['data']['id_secteur'] = '0'; + } + /** + * si l'id_parent est supérieur à 0 on que l'on ne récupère pas de champ_page, + * on pense à vider le champ "page", pour pouvoir revenir après coup en page + */ + if (!_request('champ_page') && (_request('id_parent') > 0)){ + $flux['data']['page'] = ''; + } + } + return $flux; +} + +/** + * Insertion dans le pipeline boite_infos (SPIP) + * + * Ajouter un lien pour transformer une article normal en page inversement + * + * @param array $flux + * Le contexte du pipeline + * @return array $flux + * Le contexte modifié + */ +function pages_boite_infos($flux){ + if ($flux['args']['type'] == 'article' and autoriser('modifier', 'article', $flux['args']['id'])){ + include_spip('inc/presentation'); + if (sql_getfetsel('page', 'spip_articles', 'id_article='. $flux['args']['id']) == '') + $flux['data'] .= icone_horizontale(_T('pages:convertir_page'), parametre_url(parametre_url(generer_url_ecrire('article_edit'), 'id_article', $flux['args']['id']), 'modele', 'page'), 'page', $fonction="", $dummy="", $javascript=""); + else + $flux['data'] .= icone_horizontale(_T('pages:convertir_article'), parametre_url(parametre_url(generer_url_ecrire('article_edit'), 'id_article', $flux['args']['id']), 'modele', 'article'), 'article', $fonction="", $dummy="", $javascript=""); + } + return $flux; +} + + +/** + * Insertion dans le pipeline affiche_hierarchie (SPIP) + * Pour les pages, faire pointer la racine vers la liste des pages au lieux des rubriques + * Pour savoir si on se trouve sur une page, on vérifie que le champ "page" existe, faute de mieux + * + * @param array $flux + * Le contexte du pipeline + * @return array $flux + * Le contexte modifié + */ +function pages_affiche_hierarchie($flux){ + + $objet = $flux['args']['objet']; + $id_article = $flux['args']['id_objet']; + if ( + $objet == 'article' + and sql_getfetsel('page', 'spip_articles', 'id_article='.sql_quote($id_article)) + ){ + $cherche = "" . _T('info_racine_site') . ""; + $remplace = "" . _T('pages:pages_uniques') . ""; + $flux['data'] = str_replace($cherche,$remplace,$flux['data']); + } + + + return $flux; +} + +?>