Changeset 53633 in spip-zone for _plugins_/acces_restreint


Ignore:
Timestamp:
Oct 19, 2011, 12:32:01 PM (10 years ago)
Author:
cedric@…
Message:

Passer en une table de lien unique spip_zones_liens

Location:
_plugins_/acces_restreint/trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/acces_restreint/trunk/accesrestreint_administrations.php

    r53602 r53633  
    1616 */
    1717function accesrestreint_upgrade($nom_meta_base_version,$version_cible){
    18         $current_version = 0.0;
    19         if (   (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
    20                         || (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
    21                 include_spip('base/accesrestreint');
    22                 if (version_compare($current_version,'0.0','<=')){
    23                         include_spip('base/create');
    24                         include_spip('base/abstract_sql');
    25                         creer_base();
    26                         // ajout des champs publique/privee si pas existants
    27                         $desc = sql_showtable("spip_zones", true);
    28                         if (!isset($desc['field']['publique']))
    29                                 sql_alter("TABLE spip_zones ADD publique ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER descriptif");
    30                         if (!isset($desc['field']['privee']))
    31                                 sql_alter("TABLE spip_zones ADD privee ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER publique");
    32                         echo "AccesRestreint Install<br/>";
    33                         effacer_meta($nom_meta_base_version); // salade de majuscules
    34                         ecrire_meta($nom_meta_base_version,$current_version=$version_cible,'non');
    35                 }
    36                 if (version_compare($current_version,'0.2','<')){
    37                         include_spip('base/create');
    38                         include_spip('base/abstract_sql');
    39                         // ajout des champs publique/privee si pas existants
    40                         $desc = sql_showtable("spip_zones", true);
    41                         if (!isset($desc['field']['publique']))
    42                                 sql_alter("TABLE spip_zones ADD publique ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER descriptif");
    43                         if (!isset($desc['field']['privee']))
    44                                 sql_alter("TABLE spip_zones ADD privee ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER publique");
    45                         echo "AccesRestreint@0.2<br />";
    46                         ecrire_meta($nom_meta_base_version,$current_version='0.2','non');
    47                 }
    48                 if (version_compare($current_version,'0.3','<')){
    49                         sql_alter("TABLE `zones_auteurs` DROP INDEX `id_zone`");
    50                         sql_alter("TABLE `zones_auteurs` ADD PRIMARY KEY ( `id_zone` , `id_auteur` )");
    51                         sql_alter("TABLE `zones_rubriques` DROP INDEX `id_zone`");
    52                         sql_alter("TABLE `zones_rubriques` ADD PRIMARY KEY ( `id_zone` , `id_rubrique` )");
    53                         echo "AccesRestreint@0.3<br />";
    54                         ecrire_meta($nom_meta_base_version,$current_version='0.3','non');
    55                 }
    56                 if (version_compare($current_version,'0.3.0.1','<')){
    57                         #ecrire_meta('creer_htaccess','oui');
    58                         echo "AccesRestreint@0.3.0.1<br />";
    59                         ecrire_meta($nom_meta_base_version,$current_version='0.3.0.1','non');
    60                 }
    61                 if (version_compare($current_version,'0.3.0.2','<')){
    62                         #ecrire_meta('creer_htaccess','oui');
    63                         sql_alter("TABLE spip_zone ALTER titre SET DEFAULT ''");
    64                         sql_alter("TABLE spip_zone ALTER descriptif SET DEFAULT ''");
    65                         echo "AccesRestreint@0.3.0.2<br />";
    66                         ecrire_meta($nom_meta_base_version,$current_version='0.3.0.2','non');
    67                 }
    68         }
     18
     19        $maj = array();
     20        $maj['create'] = array(
     21                array('maj_tables',array('spip_zones','spip_zones_liens')),
     22        );
     23
     24        $maj['0.1.0'] = array(
     25                array('maj_tables',array('spip_zones')), // publique, privee
     26        );
     27        $maj['0.2.0'] = array(
     28                array('maj_tables',array('spip_zones')), // publique, privee
     29        );
     30        $maj['0.3.0'] = array(
     31                array('sql_alter',"TABLE zones_auteurs DROP INDEX id_zone"),
     32                array('sql_alter',"TABLE zones_auteurs ADD PRIMARY KEY ( id_zone , id_auteur )"),
     33                array('sql_alter',"TABLE zones_rubriques DROP INDEX id_zone"),
     34                array('sql_alter',"TABLE zones_rubriques ADD PRIMARY KEY ( id_zone , id_rubrique )"),
     35        );
     36        $maj['0.3.1'] = array(
     37                array('sql_alter',"TABLE spip_zone ALTER titre SET DEFAULT ''"),
     38                array('sql_alter',"TABLE spip_zone ALTER descriptif SET DEFAULT ''"),
     39        );
     40
     41        include_spip('maj/svn10000');
     42        $maj['0.4.0'] = array(
     43                array('maj_liens','zone'), // creer la table zones_liens
     44                array('maj_liens','zone','auteur'),
     45                array('sql_drop_table',"spip_zones_auteurs"),
     46                array('maj_liens','zone','rubrique'),
     47                array('sql_drop_table',"spip_zones_rubriques"),
     48        );
     49
     50        include_spip('base/upgrade');
     51        maj_plugin($nom_meta_base_version, $version_cible, $maj);
    6952}
    7053
     
    7659function accesrestreint_vider_tables($nom_meta_base_version) {
    7760        sql_drop_table("spip_zones");
    78         sql_drop_table("spip_zones_auteurs");
    79         sql_drop_table("spip_zones_rubriques");
     61        sql_drop_table("spip_zones_liens");
    8062        effacer_meta('creer_htaccess');
    8163        effacer_meta($nom_meta_base_version);
  • _plugins_/acces_restreint/trunk/accesrestreint_fonctions.php

    r53609 r53633  
    140140function accesrestreint_zones_rubrique($id_rubrique) {
    141141        // on teste notre rubrique deja
    142         $idz = sql_allfetsel('id_zone', 'spip_zones_rubriques', 'id_rubrique='. intval($id_rubrique));
     142        $idz = sql_allfetsel('id_zone', 'spip_zones_liens', "objet='rubrique' AND id_objet=". intval($id_rubrique));
    143143        if (is_array($idz)) {
    144144                $idz = array_map('reset', $idz);
     
    196196        }
    197197
    198         $where = array('z.id_zone = zr.id_zone');
     198        $where = array("zr.objet='rubrique'");
    199199        if (!$tout) {
    200200                if ($_publique) {
    201                         $where[] = 'publique=' . sql_quote('oui');
     201                        $where[] = 'z.publique=' . sql_quote('oui');
    202202                } else {
    203                         $where[] = 'privee=' . sql_quote('oui');
     203                        $where[] = 'z.privee=' . sql_quote('oui');
    204204                }
    205205        }
    206206       
    207         $idz = sql_allfetsel('DISTINCT(id_rubrique)', array('spip_zones_rubriques AS zr', 'spip_zones AS z'), $where);
     207        $idz = sql_allfetsel('DISTINCT(zr.id_objet)', 'spip_zones_liens AS zr JOIN spip_zones AS z ON z.id_zone = zr.id_zone', $where);
    208208       
    209209        if (is_array($idz)) {
  • _plugins_/acces_restreint/trunk/action/editer_zone.php

    r53604 r53633  
    6666 * $operation = add/set/del pour ajouter, affecter uniquement, ou supprimer les objets listes dans ids.
    6767 *
    68  * @param int/array $zones
    69  * @param int/array $ids
     68 * @param int|array $zones
     69 * @param int|array $ids
    7070 * @param string $type
     71 * @param string $operation
    7172 */
    7273function accesrestreint_revision_zone_objets_lies($zones,$ids,$type,$operation = 'add'){
     
    8081                if ($operation=='del'){
    8182                        // on supprime les ids listes
    82                         sql_delete("spip_zones_{$type}s",array("id_zone=".intval($row['id_zone']),sql_in("id_$type",$ids)));                   
     83                        sql_delete("spip_zones_liens",array("id_zone=".intval($row['id_zone']),"objet='$type'",sql_in("id_objet",$ids)));
    8384                }
    8485                else {
     
    8889                        // si c'est un ajout, ne rien effacer
    8990                        if ($operation=='set')
    90                                 sql_delete("spip_zones_{$type}s",array("id_zone=".intval($row['id_zone']),sql_in("id_$type",$ids,"NOT")));
    91                         $deja = array_map('reset',sql_allfetsel("id_$type","spip_zones_{$type}s","id_zone=".intval($row['id_zone'])));
     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'])));
    9293                        $add = array_diff($ids,$deja);
    9394                        foreach ($add as $id) {
    9495                                if (autoriser('affecterzones',$type,$id,null,array('id_zone'=>$row['id_zone'])))
    95                                         sql_insertq("spip_zones_{$type}s",array('id_zone'=>$row['id_zone'],"id_$type"=>intval($id)));
     96                                        sql_insertq("spip_zones_liens",array('id_zone'=>$row['id_zone'],"objet"=>$type,"id_objet"=>intval($id)));
    9697                        }
    9798                }
     
    122123 *
    123124 * @param int $id_zone
    124  * @param array $c
     125 * @param array|bool $c
    125126 * @return string
    126127 */
     
    139140 * Supprimer une zone
    140141 *
    141  * @param unknown_type $supp_zone
    142  * @return unknown
     142 * @param int $id_zone
     143 * @return int
    143144 */
    144145function accesrestreint_supprime_zone($id_zone){
    145146        $supp_zone = sql_getfetsel("id_zone", "spip_zones", "id_zone=" . intval($id_zone));
    146147        if (intval($id_zone) AND        intval($id_zone) == intval($supp_zone)){
    147                 // d'abord les auteurs
    148                 sql_delete("spip_zones_auteurs", "id_zone=".intval($id_zone));
    149                 // puis la portee
    150                 sql_delete("spip_zones_rubriques", "id_zone=".intval($id_zone));
     148                // d'abord les auteurs et zones en un coup
     149                sql_delete("spip_zones_liens", "id_zone=".intval($id_zone));
    151150                // puis la zone
    152151                sql_delete("spip_zones", "id_zone=".intval($id_zone));
  • _plugins_/acces_restreint/trunk/base/accesrestreint.php

    r53627 r53633  
    1010
    1111function accesrestreint_declarer_tables_interfaces($interface){
    12         $interface['tables_jointures']['spip_auteurs'][] = 'zones_auteurs';
    13         $interface['tables_jointures']['spip_zones'][] = 'zones_auteurs';
    14        
    15         $interface['tables_jointures']['spip_rubriques'][] = 'zones_rubriques';
    16         $interface['tables_jointures']['spip_zones'][] = 'zones_rubriques';
    17        
     12        $interface['tables_jointures']['spip_auteurs'][] = 'zones_liens';
     13        $interface['tables_jointures']['spip_zones'][] = 'zones_liens';
     14        $interface['tables_jointures']['spip_rubriques'][] = 'zones_liens';
     15
    1816        //-- Table des tables ----------------------------------------------------
    1917       
    2018        $interface['table_des_tables']['zones']='zones';
    2119
    22         /*if (version_compare($spip_version_code,'1.9250','<')) {
    23                 $table_des_tables['zones_rubriques']='zones_rubriques';
    24                 $table_des_tables['zones_auteurs']='zones_auteurs';
    25         }*/
    2620        return $interface;
    2721}
     
    4135
    4236                'principale' => "oui",
    43                         'field'=> array(
     37                'field'=> array(
    4438                        "id_zone"       => "bigint(21) NOT NULL",
    4539                        "titre"         => "varchar(255) DEFAULT '' NOT NULL",
     
    5953
    6054function accesrestreint_declarer_tables_auxiliaires($tables_auxiliaires){
    61         $spip_zones_auteurs = array(
    62                 "id_zone"       => "bigint(21) NOT NULL",
    63                 "id_auteur"     => "bigint(21) NOT NULL");
    64        
    65         $spip_zones_auteurs_key = array(
    66                 "PRIMARY KEY"   => "id_zone, id_auteur",
    67                 "KEY id_auteur" => "id_auteur");
    68        
    69         $tables_auxiliaires['spip_zones_auteurs'] = array(
    70                 'field' => &$spip_zones_auteurs,
    71                 'key' => &$spip_zones_auteurs_key);
    72        
    73         $spip_zones_rubriques = array(
    74                 "id_zone"       => "bigint(21) NOT NULL",
    75                 "id_rubrique"   => "bigint(21) NOT NULL");
    76        
    77         $spip_zones_rubriques_key = array(
    78                 "PRIMARY KEY"   => "id_zone, id_rubrique",
    79                 "KEY id_rubrique" => "id_rubrique");
    80        
    81         $tables_auxiliaires['spip_zones_rubriques'] = array(
    82                 'field' => &$spip_zones_rubriques,
    83                 'key' => &$spip_zones_rubriques_key);
     55
     56        $spip_zones_liens = array(
     57                        "id_zone"       => "bigint(21) DEFAULT '0' NOT NULL",
     58                        "id_objet"      => "bigint(21) DEFAULT '0' NOT NULL",
     59                        "objet" => "VARCHAR (25) DEFAULT '' NOT NULL"
     60        );
     61
     62        $spip_zones_liens_key = array(
     63                        "PRIMARY KEY"           => "id_zone,id_objet,objet",
     64                        "KEY id_zone"   => "id_zone"
     65        );
     66
     67        $tables_auxiliaires['spip_zones_liens'] = array(
     68                'field' => &$spip_zones_liens,
     69                'key' => &$spip_zones_liens_key
     70        );
     71
    8472        return $tables_auxiliaires;
    8573}
  • _plugins_/acces_restreint/trunk/inc/accesrestreint.php

    r53602 r53633  
    4242 * si id_zone = '' : toutes les rub en acces restreint
    4343 *
    44  * @param int/string $id_zone
     44 * @param int|string $id_zone
    4545 * @return array
    4646 */
     
    5353        elseif ($id_zone)
    5454                $where = $id_zone;
     55
     56        if (is_array($where))
     57                $where[] = "zr.objet='rubrique'";
     58        else
     59                $where = "($where) AND zr.objet='rubrique'";
     60
    5561        include_spip('base/abstract_sql');
    56         $liste_rubriques = sql_allfetsel('id_rubrique','spip_zones_rubriques AS zr INNER JOIN spip_zones AS z ON zr.id_zone=z.id_zone',$where);
     62        $liste_rubriques = sql_allfetsel('id_objet','spip_zones_liens AS zr INNER JOIN spip_zones AS z ON zr.id_zone=z.id_zone',$where);
    5763        $liste_rubriques = array_map('reset',$liste_rubriques);
    5864        $liste_rubriques = array_unique($liste_rubriques);
     
    113119        if (!isset($liste_zones[$id_auteur])){
    114120                include_spip('base/abstract_sql');
    115                 $liste_zones[$id_auteur] = sql_allfetsel("id_zone","spip_zones_auteurs","id_auteur=".intval($id_auteur));
     121                $liste_zones[$id_auteur] = sql_allfetsel("id_zone","spip_zones_liens","objet='auteur' AND id_objet=".intval($id_auteur));
    116122                $liste_zones[$id_auteur] = array_map('reset',$liste_zones[$id_auteur]);
    117123        }
     
    141147        $liste_auteurs=array();
    142148        include_spip('base/abstract_sql');
    143         $liste_auteurs = sql_allfetsel("id_auteur","spip_zones_auteurs","id_zone=".intval($id_zone));
     149        $liste_auteurs = sql_allfetsel("id_objet","spip_zones_liens","objet='auteur' AND id_zone=".intval($id_zone));
    144150        $liste_auteurs = array_map('reset',$liste_auteurs);
    145151        return $liste_auteurs;
  • _plugins_/acces_restreint/trunk/paquet.xml

    r53609 r53633  
    66        compatibilite="[3.0.0-dev;3.0.*]"
    77        logo="prive/themes/spip/images/zone-32.png"
    8         schema="0.3.0.2"
     8        schema="0.4.0"
    99        documentation="http://www.spip-contrib.net/Acces-Restreint-3-0"
    1010>       
Note: See TracChangeset for help on using the changeset viewer.