[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / breves / action / editer_breve.php
index d6e6eec..4fa9ded 100644 (file)
@@ -3,19 +3,38 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2019                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-// https://code.spip.net/@action_editer_breve_dist
-function action_editer_breve_dist($arg=null) {
+/**
+ * Gestion de l'action editer_breve
+ *
+ * @package SPIP\Breves\Actions
+ */
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
-       if (is_null($arg)){
+/**
+ * Action d'édition d'une brève dans la base de données dont
+ * l'identifiant est donné en paramètre de cette fonction ou
+ * en argument de l'action sécurisée
+ *
+ * Si aucun identifiant n'est donné, on crée alors une nouvelle brève.
+ *
+ * @param null|int $arg
+ *     Identifiant de la brève. En absence utilise l'argument
+ *     de l'action sécurisée.
+ * @return array
+ *     Liste : identifiant de la brève, texte d'erreur éventuel
+ **/
+function action_editer_breve_dist($arg = null) {
+
+       if (is_null($arg)) {
                $securiser_action = charger_fonction('securiser_action', 'inc');
                $arg = $securiser_action();
        }
@@ -25,33 +44,40 @@ function action_editer_breve_dist($arg=null) {
                $id_breve = breve_inserer(_request('id_parent'));
        }
 
-       if (!$id_breve)
-               return array(0,''); // erreur
+       if (!$id_breve) {
+               return array(0, '');
+       } // erreur
 
        $err = breve_modifier($id_breve);
 
-       return array($id_breve,$err);
+       return array($id_breve, $err);
 }
 
+
 /**
- * Inserer une breve en base
- * https://code.spip.net/@insert_breve
+ * Insertion d'une brève dans une rubrique
+ *
+ * @pipeline_appel pre_insertion
+ * @pipeline_appel post_insertion
  *
  * @param int $id_rubrique
+ *     Identifiant de la rubrique
+ * @param array|null $set
  * @return int
+ *     Identifiant de la nouvelle brève.
  */
-function breve_inserer($id_rubrique) {
+function breve_inserer($id_rubrique, $set = null) {
 
        include_spip('inc/rubriques');
 
        // Si id_rubrique vaut 0 ou n'est pas definie, creer la breve
        // dans la premiere rubrique racine
        if (!$id_rubrique = intval($id_rubrique)) {
-               $id_rubrique = sql_getfetsel("id_rubrique", "spip_rubriques", "id_parent=0",'', '0+titre,titre', "1");
+               $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', 'id_parent=0', '', '0+titre,titre', '1');
        }
 
        // La langue a la creation : c'est la langue de la rubrique
-       $row = sql_fetsel("lang, id_secteur", "spip_rubriques", "id_rubrique=$id_rubrique");
+       $row = sql_fetsel('lang, id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
        $lang = $row['lang'];
        $id_rubrique = $row['id_secteur']; // garantir la racine
 
@@ -60,10 +86,16 @@ function breve_inserer($id_rubrique) {
                'statut' => 'prop',
                'date_heure' => date('Y-m-d H:i:s'),
                'lang' => $lang,
-               'langue_choisie' => 'non');
-       
+               'langue_choisie' => 'non'
+       );
+
+       if ($set) {
+               $champs = array_merge($champs, $set);
+       }
+
        // Envoyer aux plugins
-       $champs = pipeline('pre_insertion',
+       $champs = pipeline(
+               'pre_insertion',
                array(
                        'args' => array(
                                'table' => 'spip_breves',
@@ -71,8 +103,9 @@ function breve_inserer($id_rubrique) {
                        'data' => $champs
                )
        );
-       $id_breve = sql_insertq("spip_breves", $champs);
-       pipeline('post_insertion',
+       $id_breve = sql_insertq('spip_breves', $champs);
+       pipeline(
+               'post_insertion',
                array(
                        'args' => array(
                                'table' => 'spip_breves',
@@ -81,21 +114,26 @@ function breve_inserer($id_rubrique) {
                        'data' => $champs
                )
        );
+
        return $id_breve;
 }
 
 
 /**
- * Modifier une breve en base
- * $c est un contenu (par defaut on prend le contenu via _request())
- *
- * https://code.spip.net/@revisions_breves
+ * Modifier une brève en base
  *
  * @param int $id_breve
- * @param array $set
- * @return string|bool
+ *     Identifiant de la brève à modifier
+ * @param array|null $set
+ *     Couples (colonne => valeur) de données à modifier.
+ *     En leur absence, on cherche les données dans les champs éditables
+ *     qui ont été postés (via _request())
+ * @return string|null
+ *     Chaîne vide si aucune erreur,
+ *     Null si aucun champ à modifier,
+ *     Chaîne contenant un texte d'erreur sinon.
  */
-function breve_modifier ($id_breve, $set=null) {
+function breve_modifier($id_breve, $set = null) {
 
        include_spip('inc/modifier');
        $c = collecter_requests(
@@ -107,88 +145,118 @@ function breve_modifier ($id_breve, $set=null) {
                $set
        );
 
+       $invalideur = '';
+       $indexation = false;
+
        // Si la breve est publiee, invalider les caches et demander sa reindexation
-       $t = sql_getfetsel("statut", "spip_breves", "id_breve=$id_breve");
+       $t = sql_getfetsel('statut', 'spip_breves', 'id_breve='.intval($id_breve));
        if ($t == 'publie') {
                $invalideur = "id='breve/$id_breve'";
                $indexation = true;
        }
 
-       if ($err = objet_modifier_champs('breve', $id_breve,
+       if ($err = objet_modifier_champs(
+               'breve',
+               $id_breve,
                array(
-                       'nonvide' => array('titre' => _T('breves:titre_nouvelle_breve')." "._T('info_numero_abbreviation').$id_breve),
+                       'data' => $set,
+                       'nonvide' => array('titre' => _T('breves:titre_nouvelle_breve') . ' ' . _T('info_numero_abbreviation') . $id_breve),
                        'invalideur' => $invalideur,
                        'indexation' => $indexation
                ),
-               $c))
+               $c
+       )) {
                return $err;
+       }
 
-       $c = collecter_requests(array('id_parent', 'statut'),array(),$set);
+       $c = collecter_requests(array('id_parent', 'statut'), array(), $set);
        $err = breve_instituer($id_breve, $c);
+
        return $err;
 }
 
+
 /**
- * Instituer une breve : modifier son statut ou son parent
+ * Instituer une brève : modifier son statut ou son parent
+ *
+ * @pipeline_appel pre_insertion
+ * @pipeline_appel post_insertion
  *
  * @param int $id_breve
+ *     Identifiant de la brève
  * @param array $c
- * @return string
+ *     Couples (colonne => valeur) des données à instituer
+ * @return string|null
+ *     Null si aucun champ à modifier, chaîne vide sinon.
  */
 function breve_instituer($id_breve, $c) {
        $champs = array();
 
        // Changer le statut de la breve ?
-       $row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=".intval($id_breve));
+       $row = sql_fetsel('statut, id_rubrique,lang, langue_choisie', 'spip_breves', 'id_breve=' . intval($id_breve));
        $id_rubrique = $row['id_rubrique'];
 
        $statut_ancien = $statut = $row['statut'];
        $langue_old = $row['lang'];
        $langue_choisie_old = $row['langue_choisie'];
 
-       if ($c['statut']
-       AND $c['statut'] != $statut
-       AND autoriser('publierdans', 'rubrique', $id_rubrique)) {
+       if (isset($c['statut'])
+               and $c['statut']
+               and $c['statut'] != $statut
+               and autoriser('publierdans', 'rubrique', $id_rubrique)
+       ) {
                $statut = $champs['statut'] = $c['statut'];
        }
 
        // Changer de rubrique ?
        // Verifier que la rubrique demandee est a la racine et differente
        // de la rubrique actuelle
-       if ($id_parent = intval($c['id_parent'])
-       AND $id_parent != $id_rubrique
-       AND (NULL !== ($lang=sql_getfetsel('lang', 'spip_rubriques', "id_parent=0 AND id_rubrique=".intval($id_parent))))) {
+       if (
+               isset($c['id_parent'])
+               and $id_parent = intval($c['id_parent'])
+               and $id_parent != $id_rubrique
+               and (null !== ($lang = sql_getfetsel(
+                       'lang',
+                       'spip_rubriques',
+                       'id_parent=0 AND id_rubrique=' . intval($id_parent)
+               )))
+       ) {
                $champs['id_rubrique'] = $id_parent;
                // - changer sa langue (si heritee)
-               if ($langue_choisie_old != "oui") {
-                       if ($lang != $langue_old)
+               if ($langue_choisie_old != 'oui') {
+                       if ($lang != $langue_old) {
                                $champs['lang'] = $lang;
+                       }
                }
                // si la breve est publiee
                // et que le demandeur n'est pas admin de la rubrique
                // repasser la breve en statut 'prop'.
                if ($statut == 'publie') {
-                       if (!autoriser('publierdans','rubrique',$id_parent))
+                       if (!autoriser('publierdans', 'rubrique', $id_parent)) {
                                $champs['statut'] = $statut = 'prop';
+                       }
                }
        }
 
        // Envoyer aux plugins
-       $champs = pipeline('pre_edition',
+       $champs = pipeline(
+               'pre_edition',
                array(
                        'args' => array(
                                'table' => 'spip_breves',
                                'id_objet' => $id_breve,
-                               'action'=>'instituer',
+                               'action' => 'instituer',
                                'statut_ancien' => $statut_ancien,
                        ),
                        'data' => $champs
                )
        );
 
-       if (!$champs) return;
+       if (!$champs) {
+               return;
+       }
 
-       sql_updateq('spip_breves', $champs, "id_breve=".intval($id_breve));
+       sql_updateq('spip_breves', $champs, 'id_breve=' . intval($id_breve));
 
        //
        // Post-modifications
@@ -198,17 +266,18 @@ function breve_instituer($id_breve, $c) {
        include_spip('inc/invalideur');
        suivre_invalideur("id='breve/$id_breve'");
 
-       // Au besoin, changer le statut des rubriques concernees 
+       // Au besoin, changer le statut des rubriques concernees
        include_spip('inc/rubriques');
        calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
 
        // Pipeline
-       pipeline('post_edition',
+       pipeline(
+               'post_edition',
                array(
                        'args' => array(
                                'table' => 'spip_breves',
                                'id_objet' => $id_breve,
-                               'action'=>'instituer',
+                               'action' => 'instituer',
                                'statut_ancien' => $statut_ancien,
                        ),
                        'data' => $champs
@@ -226,10 +295,42 @@ function breve_instituer($id_breve, $c) {
        return ''; // pas d'erreur
 }
 
+
+// Fonctions Dépréciées
+// --------------------
+
+/**
+ * Insertion d'une brève dans une rubrique
+ *
+ * @deprecated Utiliser breve_inserer()
+ * @see breve_inserer()
+ *
+ * @param int $id_rubrique
+ *     Identifiant de la rubrique
+ * @return int
+ *     Identifiant de la nouvelle brève.
+ */
 function insert_breve($id_rubrique) {
        return breve_inserer($id_rubrique);
 }
-function revisions_breves ($id_breve, $set=false) {
-       return breve_modifier($id_breve,$set);
+
+/**
+ * Créer une révision de brève
+ *
+ * @deprecated Utiliser breve_modifier()
+ * @see breve_modifier()
+ *
+ * @param int $id_breve
+ *     Identifiant de la brève à modifier
+ * @param array|null $set
+ *     Couples (colonne => valeur) de données à modifier.
+ *     En leur absence, on cherche les données dans les champs éditables
+ *     qui ont été postés (via _request())
+ * @return string|null
+ *     Chaîne vide si aucune erreur,
+ *     Null si aucun champ à modifier,
+ *     Chaîne contenant un texte d'erreur sinon.
+ */
+function revisions_breves($id_breve, $set = false) {
+       return breve_modifier($id_breve, $set);
 }
-?>
\ No newline at end of file