You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

52 lines
1.7 KiB

<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function roles_gis_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(
// supprimer la clé primaire actuelle pour pouvoir en changer en ajoutant la colonne rôle
array('sql_alter', 'TABLE spip_gis_liens DROP PRIMARY KEY'),
// ajout de la colonne role
array('maj_tables', array('spip_gis_liens')),
// la nouvelle colonne est la, mettre sa nouvelle clé primaire
array('sql_alter', 'TABLE spip_gis_liens ADD PRIMARY KEY (id_gis,id_objet,objet,role)'),
// on passe par défaut tous les liens gis en rôle : action
array('sql_updateq', 'spip_gis_liens', array('role' => 'action'),array('role=' .sql_quote('')))
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
function roles_gis_vider_tables($nom_meta_base_version) {
// tant qu'il existe des doublons, on supprime une ligne doublonnée
// sinon on ne pourra pas modifier la cle primaire ensuite
// cet algo est certainement a optimiser
while ($doublons = sql_allfetsel(
array('id_gis', 'id_objet', 'objet', 'role'),
array('spip_gis_liens'),
'',
'id_gis,id_objet,objet',
'',
'',
'COUNT(*) > 1'
)) {
foreach ($doublons as $d) {
$where = array();
foreach ($d as $cle => $valeur) {
$where[] = "$cle=".sql_quote($valeur);
}
sql_delete('spip_gis_liens', $where);
}
}
// supprimer la clé primaire, la colonne rôle, et remettre l'ancienne clé primaire
sql_alter('TABLE spip_gis_liens DROP PRIMARY KEY');
sql_alter('TABLE spip_gis_liens DROP COLUMN role');
sql_alter('TABLE spip_gis_liens ADD PRIMARY KEY (id_gis,id_objet,objet)');
effacer_meta($nom_meta_base_version);
}