Changeset 90570 in spip-zone


Ignore:
Timestamp:
Jun 28, 2015, 7:49:49 PM (6 years ago)
Author:
cedric@…
Message:

normalisation de action/editer_produit (SPIP 3)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/produits/trunk/action/editer_produit.php

    r80934 r90570  
    66/**
    77 * Action de création / Modification d'un produit
    8  * @param unknown_type $arg
    9  * @return unknown_type
     8 * @param string|null $arg
     9 * @return array
    1010 */
    1111function action_editer_produit_dist($arg=null) {
     12        include_spip('inc/autoriser');
     13        $err="";
    1214        if (is_null($arg)){
    1315                $securiser_action = charger_fonction('securiser_action', 'inc');
     
    1719        // si id_produit n'est pas un nombre, c'est une creation
    1820        if (!$id_produit = intval($arg)) {
    19                 $id_produit = insert_produit(array('id_rubrique'=>_request('id_parent')));
     21                $id_produit = produit_inserer(_request('id_parent'));
    2022        }
    2123
    2224        // Enregistre l'envoi dans la BD
    23         if ($id_produit > 0) $err = produit_set($id_produit);
     25        if ($id_produit > 0) $err = produit_modifier($id_produit);
     26
     27        if ($err)
     28                spip_log("echec editeur produit: $err",_LOG_ERREUR);
    2429
    2530        return array($id_produit,$err);
     
    2934 * Crée un nouveau produit et retourne son ID
    3035 *
    31  * @param array $champs Un tableau avec les champs par défaut lors de l'insertion
    32  * @return int id_produit
    33  */
    34 function insert_produit($champs=array()) {
     36 * @param int $id_rubrique
     37 * @param array $set
     38 *   Un tableau avec les champs par défaut lors de l'insertion
     39 * @return int
     40 */
     41function produit_inserer($id_rubrique,$set=null) {
    3542        $id_produit = false;
    3643       
    3744        // On insère seulement s'il y a une rubrique correcte
    38         if (isset($champs['id_rubrique']) and $champs['id_rubrique'] = intval($champs['id_rubrique'])){
     45        if ($id_rubrique = intval($id_rubrique)){
     46                $champs = array();
    3947                // Si id_rubrique vaut 0 ou n'est pas definie, creer le produit dans la premiere rubrique racine
    40                 if (!$id_rubrique = intval($champs['id_rubrique'])) {
     48                if (!$id_rubrique = intval($id_rubrique)) {
    4149                        $row = sql_fetsel('id_rubrique, id_secteur, lang', 'spip_rubriques', 'id_parent=0','', '0+titre,titre', "1");
    4250                        $id_rubrique = $row['id_rubrique'];
    43                 } else $row = sql_fetsel('lang, id_secteur', 'spip_rubriques', "id_rubrique=$id_rubrique");
    44 
     51                } else $row = sql_fetsel('lang, id_secteur', 'spip_rubriques', "id_rubrique=".intval($id_rubrique));
     52
     53                $lang_rub = $row['lang'];
     54                $champs['id_rubrique'] = $id_rubrique;
    4555                // On propage le secteur
    4656                $champs['id_secteur'] = $row['id_secteur'];
     
    5565                $champs['statut'] = 'prop';
    5666               
     67                if ($set)
     68                        $champs = array_merge($champs, $set);
     69
    5770                // Envoyer aux plugins avant insertion
    5871                $champs = pipeline('pre_insertion',
     
    8497 *
    8598 * @param int $id_produit
    86  * @param unknown_type $set
    87  * @return $err
    88  */
    89 function produit_set($id_produit, $set=null) {
     99 * @param array $set
     100 * @return string
     101 */
     102function produit_modifier($id_produit, $set=null) {
    90103        $err = '';
    91        
    92         include_spip('inc/saisies');
    93         $saisies = saisies_chercher_formulaire('editer_produit', array($id_produit));
    94         $champs = saisies_lister_champs($saisies, false);
    95        
    96         $c = array();
    97         foreach ($champs as $champ)
    98                 $c[$champ] = _request($champ,$set);
    99 
    100         // on donne une taxe null si le champ est vide
    101         // MAIS spip < 2.3 ne gere pas les null avec sql_updateq..
    102         // nous appliquons une requete en plus pour ce cas
    103         if (isset($c['taxe']) and !strlen(trim($c['taxe']))) {
    104                 sql_update('spip_produits', array('taxe'=>'NULL'), 'id_produit='.$id_produit);
    105                 unset ($c['taxe']);
    106         }
    107                
     104
    108105        include_spip('inc/modifier');
    109         revision_produit($id_produit, $c);
    110        
    111         // Modification de statut, changement de rubrique ?
    112         $c = array();
    113         foreach (array(
    114                 'date', 'statut', 'id_parent'
    115         ) as $champ)
    116                 $c[$champ] = _request($champ, $set);
    117         $err .= instituer_produit($id_produit, $c);
    118        
    119         return $err;
    120 }
    121 
    122 /**
    123  * Enregistre une révision de produit
    124  *
    125  * @param int $id_produit
    126  * @param array $c
    127  * @return
    128  */
    129 function revision_produit($id_produit, $c=false) {
    130         $invalideur = "id='id_produit/$id_produit'";
    131 
    132         modifier_contenu('produit', $id_produit,
     106        include_spip('inc/filtres');
     107        $c = collecter_requests(
     108                // white list
     109                objet_info('produit','champs_editables'),
     110                // black list
     111                array('date','statut','id_parent'),
     112                // donnees eventuellement fournies
     113                $set
     114        );
     115
     116        // Si le produit est publie, invalider les caches et demander sa reindexation
     117        $t = sql_getfetsel("statut", "spip_produits", "id_produit=".intval($id_produit));
     118        $invalideur = $indexation = false;
     119        if ($t == 'publie') {
     120                $invalideur = "id='produit/$id_produit'";
     121                $indexation = true;
     122        }
     123
     124        if ($err = objet_modifier_champs('produit', $id_produit,
    133125                array(
    134126                        'nonvide' => array('titre' => _T('info_sans_titre')),
    135                         'invalideur' => $invalideur
     127                        'invalideur' => $invalideur,
     128                        'indexation' => $indexation,
    136129                ),
    137                 $c);
    138 
    139         return ''; // pas d'erreur
    140 }
     130                $c))
     131                return $err;
     132
     133        // Modification de statut, changement de rubrique ?
     134        $c = collecter_requests(array('date', 'statut', 'id_parent'),array(),$set);
     135        $err = produit_instituer($id_produit, $c);
     136
     137        return $err;
     138}
     139
    141140
    142141/**
     
    145144 * @param int $id_produit
    146145 * @param array $c
    147  * @return
    148  */
    149 function instituer_produit($id_produit, $c, $calcul_rub=true){
     146 * @param bool $calcul_rub
     147 * @return string
     148 */
     149function produit_instituer($id_produit, $c, $calcul_rub=true){
    150150        include_spip('inc/autoriser');
    151151        include_spip('inc/rubriques');
Note: See TracChangeset for help on using the changeset viewer.