[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / prive / formulaires / instituer_objet.php
index 20f03b6..e0e2c45 100644 (file)
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  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;
+/**
+ * Gestion du formulaire d'institution (changement de statut) d'un objet
+ *
+ * @package SPIP\Core\Formulaires
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 include_spip('inc/editer');
 include_spip('inc/autoriser');
 include_spip('inc/puce_statut');
 
 /**
- * filtres les statuts utilisable selon les droits de publication
+ * Filtres les statuts utilisable selon les droits de publication
+ *
  * @param array $desc
  * @param bool $publiable
  * @return array
  */
-function lister_statuts_proposes($desc,$publiable = true){
-       if (!isset($desc['statut_textes_instituer']))
+function lister_statuts_proposes($desc, $publiable = true) {
+       if (!isset($desc['statut_textes_instituer'])) {
                return false;
+       }
 
        $l = $desc['statut_textes_instituer'];
-       if (!$publiable){
+       if (!$publiable) {
                unset($l['publie']);
                unset($l['refuse']);
        }
+
        return $l;
 }
 
 /**
- * Charger #FORMULAIRE_INSTITUER_OBJET
+ * Chargement du formulaire instituer objet
+ *
+ * @uses formulaires_editer_objet_charger()
+ *
  * @param string $objet
+ *     Type d'objet
  * @param int $id_objet
+ *     Identifiant de l'objet
  * @param string $retour
+ *     URL de redirection après le traitement
+ * @param bool $editable
+ *     Indique si le statut est éditable ou non.
+ *     Dans tous les cas, si l'on n'a pas la permission de modifier l'objet,
+ *     cette option sera mise à false.
  * @return array|bool
+ *     Environnement du formulaire ou false si aucun affichage à faire.
  */
-function formulaires_instituer_objet_charger_dist($objet,$id_objet,$retour="",$editable = true){
-       $editable = ($editable?true:false);
+function formulaires_instituer_objet_charger_dist($objet, $id_objet, $retour = '', $editable = true) {
+       $editable = ($editable ? true : false);
 
        $table = table_objet_sql($objet);
        $desc = lister_tables_objets_sql($table);
 
-       if (!isset($desc['statut_textes_instituer']))
+       if (!isset($desc['statut_textes_instituer'])) {
                return false;
+       }
 
-       if (!autoriser('modifier', $objet, $id_objet))
+       if (!autoriser('modifier', $objet, $id_objet)) {
                $editable = false;
+       }
 
        // charger le contenu de l'objet
        // dont son champ statut
-       $v = formulaires_editer_objet_charger($objet,$id_objet,0,0,'','');
+       $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', '');
 
        $publiable = true;
        $statuts = lister_statuts_proposes($desc);
        // tester si on a le droit de publier, si un statut publie existe
-       if (isset($statuts['publie'])){
-               if (!autoriser('instituer', $objet, $id_objet, null, array('statut'=>'publie'))){
-                       if ($v['statut'] == 'publie')
+       if (isset($statuts['publie'])) {
+               if (!autoriser('instituer', $objet, $id_objet, null, array('statut' => 'publie'))) {
+                       if ($v['statut'] == 'publie') {
                                $editable = false;
-                       else
+                       } else {
                                $publiable = false;
+                       }
                }
        }
+       $statuts = lister_statuts_proposes($desc, $editable ? $publiable : true);
+       if (count($statuts) == 1 and isset($statuts[$v['statut']])) {
+               $editable = false;
+       }
+
        $valeurs = array(
                'editable' => $editable,
                'statut' => $v['statut'],
                '_objet' => $objet,
                '_id_objet' => $id_objet,
-               '_statuts' => lister_statuts_proposes($desc, $editable?$publiable:true),
+               '_statuts' => $statuts,
                '_publiable' => $publiable,
-               '_label' => isset($desc['texte_changer_statut'])?$desc['texte_changer_statut']:'texte_article_statut',
-               '_aide' => isset($desc['aide_changer_statut'])?$desc['aide_changer_statut']:'',
-               '_hidden' => "<input type='hidden' name='statut_old' value='".$v['statut']."' />",
+               '_label' => isset($desc['texte_changer_statut']) ? $desc['texte_changer_statut'] : 'texte_article_statut',
+               '_aide' => isset($desc['aide_changer_statut']) ? $desc['aide_changer_statut'] : '',
+               '_hidden' => "<input type='hidden' name='statut_old' value='" . $v['statut'] . "' />",
        );
 
        #if (!count($valeurs['statuts']))
@@ -85,65 +115,86 @@ function formulaires_instituer_objet_charger_dist($objet,$id_objet,$retour="",$e
 }
 
 /**
- * Verifier #FORMULAIRE_INSTITUER_OBJET
+ * Vérifications du formulaire instituer objet
+ *
+ * @uses formulaires_editer_objet_charger()
+ *
  * @param string $objet
+ *     Type d'objet
  * @param int $id_objet
+ *     Identifiant de l'objet
  * @param string $retour
+ *     URL de redirection après le traitement
+ * @param bool $editable
+ *     Indique si le statut est éditable ou non.
  * @return array
+ *     Tableau des erreurs
  */
-function formulaires_instituer_objet_verifier_dist($objet,$id_objet,$retour="",$editable = true){
+function formulaires_instituer_objet_verifier_dist($objet, $id_objet, $retour = '', $editable = true) {
        $erreurs = array();
        // charger le contenu de l'objet
        // dont son champ statut
-       $v = formulaires_editer_objet_charger($objet,$id_objet,0,0,'','');
+       $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', '');
 
-       if ($v['statut']!==_request('statut_old'))
+       if ($v['statut'] !== _request('statut_old')) {
                $erreurs['statut'] = _T('instituer_erreur_statut_a_change');
-       else {
+       else {
                $table = table_objet_sql($objet);
                $desc = lister_tables_objets_sql($table);
 
                $publiable = true;
                if (isset($v['id_rubrique'])
-                       AND !autoriser('publierdans', 'rubrique', $v['id_rubrique'])) {
+                       and !autoriser('publierdans', 'rubrique', $v['id_rubrique'])
+               ) {
                        $publiable = false;
                }
                $l = lister_statuts_proposes($desc, $publiable);
                $statut = _request('statut');
                if (!isset($l[$statut])
-                 OR !autoriser('instituer',$objet,$id_objet,'',array('statut'=>$statut)))
+                       or !autoriser('instituer', $objet, $id_objet, '', array('statut' => $statut))
+               ) {
                        $erreurs['statut'] = _T('instituer_erreur_statut_non_autorise');
+               }
        }
 
        return $erreurs;
 }
 
 /**
- * Traiter #FORMULAIRE_INSTITUER_OBJET
+ * Traitements du formulaire instituer objet
+ *
  * @param string $objet
+ *     Type d'objet
  * @param int $id_objet
+ *     Identifiant de l'objet
  * @param string $retour
+ *     URL de redirection après le traitement
+ * @param bool $editable
+ *     Indique si le statut est éditable ou non.
  * @return array
+ *     Retour des traitements
  */
-function formulaires_instituer_objet_traiter_dist($objet,$id_objet,$retour="",$editable = true){
+function formulaires_instituer_objet_traiter_dist($objet, $id_objet, $retour = '', $editable = true) {
 
        $c = array('statut' => _request('statut'));
        // si on a envoye une 'date_posterieure', l'enregistrer
        // todo dans le HTML
-       if ($d = _request('date_posterieure'))
+       if ($d = _request('date_posterieure')) {
                $c['date'] = $d;
+       }
 
 
        include_spip('action/editer_objet');
-       if ($err=objet_instituer($objet, $id_objet, $c))
-               $res = array('message_erreur'=>$err);
-       else {
-               $res = array('message_ok'=>_T('info_modification_enregistree'));
-               if ($retour)
+       if ($err = objet_instituer($objet, $id_objet, $c)) {
+               $res = array('message_erreur' => $err);
+       else {
+               $res = array('message_ok' => _T('info_modification_enregistree'));
+               if ($retour) {
                        $res['redirect'] = $retour;
+               }
                set_request('statut');
                set_request('date_posterieure');
        }
 
        return $res;
-}
\ No newline at end of file
+}