Changeset 53662 in spip-zone for _plugins_/acces_restreint


Ignore:
Timestamp:
Oct 20, 2011, 9:15:10 AM (10 years ago)
Author:
cedric@…
Message:

Mise a jour du formulaire d'edition de la zone, et des fonctions de action/editer_zone pour coller aux conventions SPIP 3
utilisation de l'api editer_liens pour la gestion des liens (beneficie des pipelines etc...)

Location:
_plugins_/acces_restreint/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/acces_restreint/trunk/action/affecter_zone.php

    r53604 r53662  
    1919                if ($id_auteur==-1)
    2020                        $id_auteur = array_map('reset',sql_allfetsel('id_auteur','spip_auteurs',"statut!='poub'"));
    21                 accesrestreint_revision_zone_objets_lies($id_zone=='-1'?'':$id_zone,$id_auteur,'auteur');
     21                zone_lier($id_zone=='-1'?'':$id_zone,'auteur',$id_auteur);
    2222        }
    2323}
  • _plugins_/acces_restreint/trunk/action/editer_zone.php

    r53633 r53662  
    1010 * editer une zone (action apres creation/modif de zone)
    1111 *
     12 * @param int $arg
    1213 * @return array
    1314 */
    14 function action_editer_zone_dist(){
     15function action_editer_zone_dist($arg=null){
    1516
    16         $securiser_action = charger_fonction('securiser_action', 'inc');
    17         $arg = $securiser_action();
     17        if (is_null($arg)){
     18                $securiser_action = charger_fonction('securiser_action', 'inc');
     19                $arg = $securiser_action();
     20        }
    1821
    19         // si id_article n'est pas un nombre, c'est une creation
    20         // mais on verifie qu'on a toutes les donnees qu'il faut.
     22        // Envoi depuis le formulaire d'edition d'une zone
    2123        if (!$id_zone = intval($arg)) {
    22                 if (!$id_zone = accesrestreint_action_insert_zone())
    23                         return array(false,_L('echec'));
    24                 // ajouter les droits a l'admin si demande, lors de la creation
    25                 if (_request('droits_admin')){
    26                         accesrestreint_revision_zone_objets_lies($id_zone,$GLOBALS['visiteur_session']['id_auteur'],'auteur');
    27                 }
     24                $id_zone = zone_inserer();
    2825        }
    29        
    30         $err = action_zone_set($id_zone);
     26
     27        if (!$id_zone)
     28                return array(0,''); // erreur
     29
     30        if (_request('droits_admin')){
     31                zone_lier($id_zone,'auteur',$GLOBALS['visiteur_session']['id_auteur']);
     32        }
     33
     34        $err = zone_modifier($id_zone);
     35
    3136        return array($id_zone,$err);
    3237}
    3338
     39
    3440/**
    35  * mettre a jour une zone
     41 * Inserer une zone en base
     42 *
     43 * @return int
     44 */
     45function zone_inserer() {
     46
     47        include_spip('inc/autoriser');
     48        if (!autoriser('creer','zone'))
     49                return false;
     50
     51        $champs = array(
     52                'publique'=>'non',
     53                'privee'=>'non',
     54        );
     55       
     56        // Envoyer aux plugins
     57        $champs = pipeline('pre_insertion',
     58                array(
     59                        'args' => array(
     60                                'table' => 'spip_zones',
     61                        ),
     62                        'data' => $champs
     63                )
     64        );
     65        $id_zone = sql_insertq("spip_zones", $champs);
     66        pipeline('post_insertion',
     67                array(
     68                        'args' => array(
     69                                'table' => 'spip_zones',
     70                                'id_objet' => $id_zone
     71                        ),
     72                        'data' => $champs
     73                )
     74        );
     75        return $id_zone;
     76}
     77
     78
     79/**
     80 * Modifier une zone en base
     81 * $c est un contenu (par defaut on prend le contenu via _request())
    3682 *
    3783 * @param int $id_zone
    38  * @return string
     84 * @param array $set
     85 * @return string|bool
    3986 */
    40 function action_zone_set($id_zone){
    41         $err = '';
    42 
    43         $c = array();
    44         foreach (array(
    45                 'titre', 'descriptif',
    46         ) as $champ)
    47                 $c[$champ] = _request($champ);
    48         foreach (array(
    49                 'publique', 'privee'
    50         ) as $champ)
    51                 $c[$champ] = _request($champ)=='oui'?'oui':'non';
     87function zone_modifier ($id_zone, $set=null) {
    5288
    5389        include_spip('inc/modifier');
    54         accesrestreint_revision_zone($id_zone, $c);
    55         accesrestreint_revision_zone_objets_lies($id_zone, _request('rubriques'),'rubrique','set');
     90        $c = collecter_requests(
     91                // white list
     92                array('titre', 'descriptif','publique', 'privee'),
     93                // black list
     94                array(),
     95                // donnees eventuellement fournies
     96                $set
     97        );
    5698
     99        // Si la zone est publiee, invalider les caches et demander sa reindexation
     100        $t = sql_getfetsel("statut", "spip_zones", "id_zone=$id_zone");
     101        if ($t == 'publie') {
     102                $invalideur = "id='zone/$id_zone'";
     103                $indexation = true;
     104        }
     105
     106        if ($err = objet_modifier_champs('zone', $id_zone,
     107                array(
     108                        'nonvide' => array('titre' => _T('info_sans_titre')),
     109                        'invalideur' => $invalideur,
     110                        'indexation' => $indexation
     111                ),
     112                $c))
     113                return $err;
     114
     115
     116        zone_lier($id_zone, 'rubrique', _request('rubriques'),'set');
    57117        return $err;
    58118}
     
    67127 *
    68128 * @param int|array $zones
     129 * @param string $type
    69130 * @param int|array $ids
    70  * @param string $type
    71131 * @param string $operation
    72132 */
    73 function accesrestreint_revision_zone_objets_lies($zones,$ids,$type,$operation = 'add'){
     133function zone_lier($zones,$type,$ids,$operation = 'add'){
    74134        include_spip('inc/autoriser');
    75         $in = "";
    76         if ($zones){
    77                 $in = sql_in('id_zone',$zones);
     135        include_spip('action/editer_liens');
     136        if (!$zones)
     137                $zones="*";
     138        if (!$ids)
     139                $ids = array();
     140        elseif (!is_array($ids))
     141                $ids = array($ids);
     142
     143        if ($operation=='del'){
     144                // on supprime les ids listes
     145                objet_dissocier(array('zone'=>$zones),array($type=>$ids));
    78146        }
    79         $liste = sql_allfetsel('id_zone','spip_zones',$in);
    80         foreach($liste as $row){
    81                 if ($operation=='del'){
    82                         // on supprime les ids listes
    83                         sql_delete("spip_zones_liens",array("id_zone=".intval($row['id_zone']),"objet='$type'",sql_in("id_objet",$ids)));
     147        else {
     148                // si c'est une affectation exhaustive, supprimer les existants qui ne sont pas dans ids
     149                // si c'est un ajout, ne rien effacer
     150                if ($operation=='set'){
     151                        objet_dissocier(array('zone'=>$zones),array($type=>array("NOT",$ids)));
    84152                }
    85                 else {
    86                         if (!$ids) $ids = array();
    87                         elseif (!is_array($ids)) $ids = array($ids);
    88                         // si c'est une affectation exhaustive, supprimer les existants qui ne sont pas dans ids
    89                         // si c'est un ajout, ne rien effacer
    90                         if ($operation=='set')
    91                                 sql_delete("spip_zones_liens",array("id_zone=".intval($row['id_zone']),"objet='$type'",sql_in("id_objet",$ids,"NOT")));
    92                         $deja = array_map('reset',sql_allfetsel("id_objet","spip_zones_liens","objet='$type' AND id_zone=".intval($row['id_zone'])));
    93                         $add = array_diff($ids,$deja);
    94                         foreach ($add as $id) {
    95                                 if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$row['id_zone'])))
    96                                         sql_insertq("spip_zones_liens",array('id_zone'=>$row['id_zone'],"objet"=>$type,"id_objet"=>intval($id)));
    97                         }
     153                foreach ($ids as $id) {
     154                        if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$zones)))
     155                                objet_associer(array('zone'=>$zones),array($type=>$id));
    98156                }
    99         }       
     157        }
    100158}
    101159
    102 /**
    103  * Creer une nouvelle zone
    104  *
    105  * @return int
    106  */
    107 function accesrestreint_action_insert_zone(){
    108         include_spip('inc/autoriser');
    109         if (!autoriser('creer','zone'))
    110                 return false;
    111         // nouvel zone
    112         $id_zone = sql_insertq("spip_zones", array("maj"=>"NOW()", 'publique'=>'non','privee'=>'non'));
    113160
    114         if (!$id_zone){
    115                 spip_log("accesrestreint action : impossible d'ajouter un zone");
    116                 return false;
    117         }
    118         return $id_zone;       
    119 }
    120 
    121 /**
    122  * Enregistre la revision d'une zone
    123  *
    124  * @param int $id_zone
    125  * @param array|bool $c
    126  * @return string
    127  */
    128 function accesrestreint_revision_zone($id_zone, $c=false) {
    129 
    130         modifier_contenu('zone', $id_zone,
    131                 array(
    132                         'nonvide' => array('titre' => _T('info_sans_titre')),
    133                 ),
    134                 $c);
    135 
    136         return ''; // pas d'erreur
    137 }
    138161
    139162/**
     
    143166 * @return int
    144167 */
    145 function accesrestreint_supprime_zone($id_zone){
    146         $supp_zone = sql_getfetsel("id_zone", "spip_zones", "id_zone=" . intval($id_zone));
    147         if (intval($id_zone) AND        intval($id_zone) == intval($supp_zone)){
    148                 // d'abord les auteurs et zones en un coup
    149                 sql_delete("spip_zones_liens", "id_zone=".intval($id_zone));
    150                 // puis la zone
    151                 sql_delete("spip_zones", "id_zone=".intval($id_zone));
    152         }
     168function zone_supprimer($id_zone){
     169        include_spip('action/editer_liens');
     170        objet_dissocier(array('zone'=>$id_zone),array('*'=>'*'));
     171
     172        // puis la zone
     173        sql_delete("spip_zones", "id_zone=".intval($id_zone));
     174
    153175        $id_zone = 0;
    154176        return $id_zone;
  • _plugins_/acces_restreint/trunk/action/retirer_zone.php

    r53604 r53662  
    1717                include_spip('action/editer_zone');
    1818                if ($id_objet=='-1')
    19                         accesrestreint_revision_zone_objets_lies($id_zone,array(),$type,'set');
     19                        zone_lier($id_zone,$type,array(),'set');
    2020                else
    21                         accesrestreint_revision_zone_objets_lies($id_zone,$id_objet,$type,'del');
     21                        zone_lier($id_zone,$type,$id_objet,'del');
    2222        }
    2323}
  • _plugins_/acces_restreint/trunk/action/supprimer_zone.php

    r53604 r53662  
    1414         AND autoriser('supprimer','zone',$id_zone)) {
    1515                include_spip('action/editer_zone');
    16                 accesrestreint_supprime_zone($id_zone);
     16                zone_supprimer($id_zone);
    1717        }
    1818}
  • _plugins_/acces_restreint/trunk/base/accesrestreint.php

    r53633 r53662  
    3535
    3636                'principale' => "oui",
     37                'champs_editables' => array('titre', 'descriptif','publique', 'privee'),
    3738                'field'=> array(
    3839                        "id_zone"       => "bigint(21) NOT NULL",
  • _plugins_/acces_restreint/trunk/formulaires/affecter_zones.php

    r53604 r53662  
    1919        /* ajout d'une zone */
    2020        include_spip('action/editer_zone');
    21         accesrestreint_revision_zone_objets_lies(intval(_request('zone')),$id_auteur,'auteur');
     21        zone_lier(intval(_request('zone')),'auteur',$id_auteur);
    2222        return array('editable'=>true,'message'=>'');
    2323}
  • _plugins_/acces_restreint/trunk/formulaires/editer_zone.html

    r53627 r53662  
    77                parametre : url d'action ]
    88                #ACTION_FORMULAIRE{#ENV{action}}
    9                 <input type='hidden' name='id_zone' value='#ID_ZONE' />
    109          <ul>
    11             <li class="editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]">
    12                 <label for="titre"><:accesrestreint:titre_zones_acces:></label>
    13                                 [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span>]
    14                                 <input type='text' class='text' name='titre' id='titre' value="#ENV{titre}" />
     10            <li class="editer editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]">
     11                <label for="titre"><:accesrestreint:titre_zones_acces:></label>[
     12                                <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span>
     13                                ]<input type='text' class='text' name='titre' id='titre' value="#ENV{titre}" />
    1514            </li>
    1615            [(#ENV{id_zone}|intval|non|et{#AUTORISER{modifier,zone}})
    17             <li class='editer_droit_admin'>
     16            <li class='editer editer_droit_admin'>
    1817                <div class='choix'><input type='checkbox' name='droits_admin' value='oui' id='droits_admin' checked="checked" />
    1918                <label for='droits_admin'><:accesrestreint:ajouter_droits_auteur:></label></div>
    2019            </li>]
    21             <li class='editer_publique_privee'>
     20            <li class='editer editer_publique_privee'>
    2221                <div class='choix'><input type='checkbox' name='publique' value='oui' id='publique'[ (#PUBLIQUE|=={oui}|oui)checked="checked"] />
    2322                <label for='publique'><:accesrestreint:zone_restreinte_publique:></label></div>
     
    2524                <label for='privee'><:accesrestreint:zone_restreinte_espace_prive:></label></div>
    2625            </li>
    27             <li class="editer_descriptif[ (#ENV**{erreurs}|table_valeur{descriptif}|oui)erreur]">
     26            <li class="editer editer_descriptif[ (#ENV**{erreurs}|table_valeur{descriptif}|oui)erreur]">
    2827                        <label for="descriptif"><:accesrestreint:descriptif:></label>[
    2928                        <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{descriptif})</span>
    3029                        ]<textarea name='descriptif' rows='5' id='descriptif'>[(#ENV{descriptif})]</textarea>
    3130            </li>
    32                   <li class='editer_rubriques fieldset'><fieldset><legend><:accesrestreint:rubriques_zones_acces:></legend>
     31                  <li class='editer editer_rubriques fieldset'><fieldset><legend><:accesrestreint:rubriques_zones_acces:></legend>
    3332                  [(#INCLURE{fond=formulaires/inc-select_rubriques}{rubriques=#ENV{rubriques}})]</fieldset>
    3433                  </li>
  • _plugins_/acces_restreint/trunk/formulaires/editer_zone.php

    r53604 r53662  
    4242
    4343function formulaires_editer_zone_traiter_dist($id_zone='new', $retour='', $config_fonc='zones_edit_config', $row=array(), $hidden=''){
     44        if (_request('publique')!=='oui')
     45                set_request('publique','non');
     46        if (_request('privee')!=='oui')
     47                set_request('privee','non');
    4448
    45         $message = "";
    46         $action_editer = charger_fonction("editer_zone",'action');
    47         list($id,$err) = $action_editer();
    48         if ($err){
    49                 $message .= $err;
     49        $res = formulaires_editer_objet_traiter('zone',$id_zone,0,0,$retour,$config_fonc,$row,$hidden);
     50
     51        if ($retour AND $res['id_zone']) {
     52                $res['redirect'] = parametre_url($retour,'id_zone',$res['id_zone']);
    5053        }
    51         elseif ($retour) {
    52                 include_spip('inc/headers');
    53                 $retour = parametre_url($retour,'id_zone',$id);
    54                 $message .= redirige_formulaire($retour);
    55         }
    56         return $message;
     54        return $res;
    5755}
    5856
  • _plugins_/acces_restreint/trunk/inc/accesrestreint_autoriser.php

    r53604 r53662  
    4747        include_spip('inc/accesrestreint');
    4848        if ($opts['id_zone']
    49           AND !accesrestreint_test_appartenance_zone_auteur($opts['id_zone'], $qui['id_auteur']))
    50           return false;
    51  return true;
     49          AND accesrestreint_test_appartenance_zone_auteur($opts['id_zone'], $qui['id_auteur']))
     50          return true;
     51 return false;
    5252}
    5353
Note: See TracChangeset for help on using the changeset viewer.