Changeset 110315 in spip-zone


Ignore:
Timestamp:
May 19, 2018, 7:33:42 AM (15 months ago)
Author:
abelass@…
Message:

v 2.0.0 Permettre de choisir plusieurs extension du même type

Attention! Changement de manière d'enregistrement des extensions (comme déclinaisons).
Auparavant une seule ligne par prix avec une colone id_declinaison.

Maintenant chaque extension obtient sa probre ligne. Prix principal et extensions sont liés par id_prix_objet_source (les extensions prenant id_prix_objet comme id_prix_objet_source)

les extension son distuingiué par les colonnes extension et id_extension

Location:
_plugins_/prix_objets/branches/v1
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/prix_objets/branches/v1

  • _plugins_/prix_objets/branches/v1/base/prix_objets.php

    r106816 r110315  
    11<?php
    2 if (!defined("_ECRIRE_INC_VERSION")) return;
     2if (! defined("_ECRIRE_INC_VERSION"))
     3        return;
    34
    4 function prix_objets_declarer_tables_interfaces($tables_interfaces){
     5function prix_objets_declarer_tables_interfaces($tables_interfaces) {
     6        $tables_interfaces['table_des_tables']['prix_objets'] = 'prix_objets';
    57
    6                 $tables_interfaces['table_des_tables']['prix_objets'] = 'prix_objets';
    7 
    8                 return $tables_interfaces;
     8        return $tables_interfaces;
    99}
    1010
    11 function prix_objets_declarer_tables_principales($tables_principales){
     11function prix_objets_declarer_tables_principales($tables_principales) {
    1212        $spip_prix_objets = array(
    13                 "id_prix_objet"         => "bigint(21) NOT NULL",
    14                 "id_objet"      => "bigint(21) NOT NULL",
    15                 "titre"   => "varchar(255)  DEFAULT '' NOT NULL",
    16                 "reference"   => "varchar(255)  DEFAULT '' NOT NULL",
     13                "id_prix_objet" => "bigint(21) NOT NULL",
     14                "id_prix_objet_source" => "bigint(21) NOT NULL",
    1715                'objet' => 'varchar(25) not null default ""',
    18                 "code_devise"   => "varchar(3) NOT NULL",
    19                 "prix_ht"               => "decimal(15,2) NOT NULL DEFAULT '0.00'",
    20                 "prix"       => "decimal(15,2) NOT NULL DEFAULT '0.00'",
    21                 "taxe"   => "varchar(10)  DEFAULT '' NOT NULL",
    22                 );
     16                "id_objet" => "bigint(21) NOT NULL",
     17                "titre" => "varchar(255)  DEFAULT '' NOT NULL",
     18                "reference" => "varchar(255)  DEFAULT '' NOT NULL",
     19                "code_devise" => "varchar(3) NOT NULL",
     20                "prix_ht" => "decimal(15,2) NOT NULL DEFAULT '0.00'",
     21                "prix" => "decimal(15,2) NOT NULL DEFAULT '0.00'",
     22                "taxe" => "varchar(10)  DEFAULT '' NOT NULL",
     23                'extension' => 'varchar(50) not null default ""',
     24                "id_extension" => "bigint(21) NOT NULL"
     25        );
    2326
    2427        $spip_prix_objets_key = array(
    25                 "PRIMARY KEY"   => "id_prix_objet",
    26                 "KEY id_objet"  => "id_objet",
    27                 );
     28                "PRIMARY KEY" => "id_prix_objet",
     29                "KEY id_objet" => "id_prix_objet_source,id_objet,objet,id_extension,extension"
     30        );
    2831
    2932        $spip_prix_objets_join = array(
    30                 "id_prix_objet" => "id_prix_objet",
    31                 "id_objet"      => "id_objet",
    32                 "id_objet"      => "id_article",
    33                 );
     33                "id_prix_objet" => "id_prix_objet",
     34                "id_objet" => "id_objet",
     35                "id_objet" => "id_article"
     36        );
    3437
    3538        $tables_principales['spip_prix_objets'] = array(
     
    4043
    4144        return $tables_principales;
     45}
     46
     47/**
     48 * Actualise la bd
     49 *
     50 * @param string $version_cible
     51 *              la version de la bd
     52 */
     53function po_upgrade($version_cible) {
     54
     55        // Remplace les champs "id_EXTENSION" par id_extension extension.
     56        if ($version_cible == '2.0.0') {
     57                $trouver_table = charger_fonction('trouver_table', 'base');
     58                $table = 'spip_prix_objets';
     59                $decription_table = $trouver_table($table);
     60                include_spip('inc/prix_objets');
     61
     62                $extensions = array(
     63                        'declinaison',
     64                        'po_periode'
     65                );
     66
     67                foreach ($extensions as $extension) {
     68                        if ($identifiant_extension = id_table_objet($extension) and
     69                                        isset($decription_table['field'][$identifiant_extension])) {
     70                                $sql = sql_select('*', 'spip_prix_objets',
     71                                                $identifiant_extension . '>0');
     72
     73                                while ($data = sql_fetch($sql)) {
     74                                        sql_insertq('spip_prix_objets',
     75                                                        array(
     76                                                                'id_prix_objet_source' => $data['id_prix_objet'],
     77                                                                'extension' => $extension,
     78                                                                'id_extension' => $data[$identifiant_extension],
     79                                                                'objet' => $data['objet'],
     80                                                                'id_objet' => $data['id_objet'],
     81                                                                'titre' => extraire_multi(
     82                                                                                supprimer_numero(
     83                                                                                                generer_info_entite(
     84                                                                                                                $data[$identifiant_extension],
     85                                                                                                                $extension,
     86                                                                                                                'titre', '*'))),
     87                                                                'prix' => $data['prix_ht']
     88                                                        ));
     89                                }
     90                                sql_alter("TABLE $table DROP COLUMN  $identifiant_extension");
     91                        }
     92                }
    4293        }
     94}
    4395
    4496
  • _plugins_/prix_objets/branches/v1/formulaires/prix.php

    r110047 r110315  
    1212        $taxes_inclus = lire_config('prix_objets/taxes_inclus');
    1313        $taxes = lire_config('prix_objets/taxes');
     14        $table = 'spip_prix_objets';
    1415
    1516        // Devise par défaut si rien configuré
    16         if (!$devises_dispos)
     17        if (!$devises_dispos) {
    1718                $devises_dispos = array(
    1819                        '0' => 'EUR'
    1920                );
     21        }
     22
    2023        $devises_choisis = array();
    2124        $prix_choisis = array();
    22         if (is_array($id_objet))
     25        if (is_array($id_objet)) {
    2326                $id_objet_produit = implode(',', $id_objet);
     27        }
    2428
    2529        if ($id_objet) {
    26                 $d = sql_select('*', 'spip_prix_objets', 'id_objet IN(' . $id_objet . ') AND objet =' . sql_quote($objet));
     30                $d = sql_select(
     31                        '*',
     32                        'spip_prix_objets',
     33                        'id_prix_objet_source = 0 AND id_objet IN(' . $id_objet . ') AND objet =' . sql_quote($objet)
     34                );
    2735        }
    2836
    2937        // établit les devises diponible moins ceux déjà utilisés
    3038        while ($row = sql_fetch($d)) {
    31                 // $devises_choisis[$row['code_devise']] = $row['code_devise'];
    3239                $prix_choisis[] = $row;
    3340        }
     
    5057        $valeurs['_hidden'] = '<input type="hidden" name="objet" value="' . $objet . '">';
    5158        $valeurs['_hidden'] .= '<input type="hidden" name="id_objet" value="' . $id_objet . '">';
    52         // Si le plugin declinaisons est activé
    53         /*if (test_plugin_actif('declinaisons')) {
    54                 $valeurs['id_objet_titre'] = '';
    55                 $valeurs['_hidden'] .= '<input type="hidden" name="id_objet_titre" value="' . $id_objet . '">';
    56                 $valeurs['id_declinaison'] = '';
    57         }*/
    58 
    59         // Inclus les extensions.
     59
     60        // Inclure les extensions.
    6061        $valeurs['_saisies_extras'] = prix_objets_extensions_declaration($valeurs);
    61         $extensions = array();
    62         foreach (saisies_lister_par_nom($valeurs['_saisies_extras']) as $nom => $definition) {
    63                 $valeurs[$nom] = _request($nom);
    64                 if (preg_match('|id_prix_extension_|', $nom)) {
    65                         $extension = str_replace('id_prix_extension_', '', $nom);
    66                         $extensions[] = $extension;
     62        $extensions = array_keys($valeurs['_saisies_extras']);
     63        $saisies = array();
     64
     65        foreach ($valeurs['_saisies_extras'] as $s) {
     66                $saisies = array_merge($saisies, $s);
     67                foreach (saisies_lister_par_nom($s) as $nom => $definition) {
     68                        $valeurs[$nom] = _request($nom);
    6769                }
    6870        }
     
    7072        // Déclarer les extensions
    7173        if (count($extensions) > 0) {
    72                 $saisie = array(
     74
     75                $valeurs['extensions'] = _request('extensions');
     76
     77                $valeurs['_saisies_extras'] = array_merge(
     78                        $saisies,
     79                        array(
    7380                                array(
    74                                 'saisie' => 'hidden',
    75                                 'options' => array(
    76                                         'nom' => 'extensions',
    77                                         'defaut' => implode(',', $extensions),
     81                                        'saisie' => 'hidden',
     82                                        'options' => array(
     83                                                'nom' => 'extensions',
     84                                                'defaut' => implode(',', $extensions),
     85                                        )
    7886                                )
    7987                        )
    8088                );
    81                 $valeurs['extensions'] = _request('extensions');
    82                 $valeurs['_saisies_extras'] = array_merge($valeurs['_saisies_extras'], $saisie);
    8389        }
    8490
     
    115121        }
    116122
     123        // Les infos des extensions
    117124        $titre_secondaire = array();
    118         $valeurs = array();
     125        $valeurs_extensions = array();
    119126        foreach($extensions as $extension) {
    120                 if ($id_prix_extension = _request('id_prix_extension_' . $extension)) {
    121                         $titre_secondaire[] = extraire_multi(
     127                if ($id_extension = _request('id_prix_extension_' . $extension)) {
     128                        if (!is_array($id_extension)) {
     129                                $titre_secondaire = extraire_multi(
    122130                                        supprimer_numero(
     131                                                generer_info_entite(
     132                                                        $id_extension,
     133                                                        $extension,
     134                                                        'titre', '*'
     135                                                        )
     136                                                )
     137                                        );
     138                                $titres_secondaires[] = $titre_secondaire;
     139                                $valeurs_extensions[] = array(
     140                                        'objet' => $objet,
     141                                        'id_objet' => $id_objet,
     142                                        'titre' => $titre_secondaire,
     143                                        'extension' => $extension,
     144                                        'id_extension' => $id_extension
     145                                );
     146                        }
     147                        else {
     148                                foreach ($id_extension as $id) {
     149                                        $titre_secondaire = extraire_multi(
     150                                                supprimer_numero(
    123151                                                        generer_info_entite(
    124                                                                         $id_prix_extension,
    125                                                                         $extension,
    126                                                                         'titre', '*'
    127                                                                         )
     152                                                                $id,
     153                                                                $extension,
     154                                                                'titre', '*'
     155                                                                )
    128156                                                        )
     157                                                );
     158                                        $titres_secondaires[] = $titre_secondaire;
     159                                        $valeurs_extensions[] = array(
     160                                                'objet' => $objet,
     161                                                'id_objet' => $id_objet,
     162                                                'titre' => $titre_secondaire,
     163                                                'extension' => $extension,
     164                                                'id_extension' => $id
    129165                                        );
    130                         $valeurs['id_' . $extension] = $id_prix_extension;
     166                                }
     167                        }
    131168                }
    132169        }
    133170
    134                 $titre_secondaire = implode(' / ', $titre_secondaire);
    135 
    136         if ($titre_secondaire)
    137                 $titre = $titre . ' - ' . $titre_secondaire;
     171        $titres_secondaires = implode(' / ', $titres_secondaires);
     172
     173        if ($titres_secondaires) {
     174                $titre = $titre . ' - ' . $titres_secondaires;
     175                }
    138176
    139177        // On inscrit dans la bd
    140         $valeurs = array_merge($valeurs, array(
     178        $valeurs = array(
    141179                        'id_objet' => $id_objet,
    142180                        'objet' => $objet,
     
    146184                        'prix' => 0,
    147185                        'prix_ht' => 0
    148                 )
    149         );
    150 
    151         if ($ttc = _request('taxes_inclus'))
     186                );
     187
     188        if ($ttc = _request('taxes_inclus')) {
    152189                $valeurs['prix'] = $prix;
    153         else
     190        }
     191        else {
    154192                $valeurs['prix_ht'] = $prix;
    155 
    156         $result = sql_insertq('spip_prix_objets', $valeurs);
     193        }
     194
     195        // Enregistrement du prix
     196        $id_prix_objet = sql_insertq('spip_prix_objets', $valeurs);
     197
     198        // Enregistrement des extensions
     199        foreach($valeurs_extensions as $valeur_extension) {
     200                $valeur_extension['id_prix_objet_source'] = $id_prix_objet;
     201                sql_insertq('spip_prix_objets', $valeur_extension);
     202        }
    157203
    158204        // Ivalider le cache
     
    162208        return $valeur['message_ok'] = true;
    163209}
    164 
    165 ?>
  • _plugins_/prix_objets/branches/v1/inc/prix_objets.php

    r110045 r110315  
    99 * @return array
    1010 */
    11 function prix_objets_extensions_declaration($valeurs) {
     11function prix_objets_extensions_declaration($valeurs = array()) {
    1212
    1313        return pipeline(
  • _plugins_/prix_objets/branches/v1/paquet.xml

    r110047 r110315  
    22        prefix="prix_objets"
    33        categorie="edition"
    4         version="1.8.0"
     4        version="2.0.0"
    55        etat="stable"
    66        compatibilite="[3.0.5;3.2.*]"
    77        logo="prive/themes/spip/images/prix_objets-64.png"
    88        documentation="https://contrib.spip.net/Prix-Objets"
    9         schema="1.5.0"
     9        schema="2.0.0"
    1010>
    1111
  • _plugins_/prix_objets/branches/v1/prix_objets_administrations.php

    r106816 r110315  
    1818**/
    1919function prix_objets_upgrade($nom_meta_base_version, $version_cible) {
    20                 include_spip('inc/config');
     20        include_spip('inc/config');
    2121
    2222        $maj = array();
    23         $maj['create'] = array(array('maj_tables', array('spip_prix_objets')));
    24                 $maj['1.1.0']  = array(
    25                                 array('sql_alter','TABLE spip_prix_objets RENAME TO spip_prix_objets')
    26                                 );
    27                 $maj['1.1.2']  = array(
    28                                 array('sql_alter','TABLE spip_prix_objets CHANGE prix prix_ht float (38,2) NOT NULL'),
    29                                 array('maj_tables', array('spip_prix_objets')),
    30                                 );
    31                 $maj['1.1.3']  = array(
    32                                 array('sql_alter','TABLE spip_prix_objets CHANGE prix prix float (38,2) NOT NULL'),
    33                                 );
    34                 $maj['1.1.4']  = array(
    35                                 array('sql_alter','TABLE spip_prix_objets CHANGE id_prix id_prix_objet bigint(21) NOT NULL'),
    36                                 );
    37                 $maj['1.1.5'] = array(array('maj_tables', array('spip_prix_objets')));
    38                 $maj['1.2.4'] = array(array('maj_tables', array('spip_prix_objets')));
    39                 $maj['1.3.0'] = array(array('maj_tables', array('spip_prix_objets')));
    40                 $maj['1.4.0'] = array(
    41                                 array('ecrire_config', 'prix_objets',lire_config('shop_prix',array())),
    42                                 array('ecrire_config', 'shop_prix',array()),
    43                                 array('effacer_meta', 'shop_prix_base_version')
    44                                 );
    45                 $maj['1.5.0']  = array(
    46                         array('sql_alter','TABLE spip_prix_objets CHANGE prix prix decimal(15,2) NOT NULL DEFAULT "0.00"'),
    47                         array('sql_alter','TABLE spip_prix_objets CHANGE prix_ht prix_ht decimal(15,2) NOT NULL DEFAULT "0.00"'),
    48                 );
     23        $maj['create'] = array(
     24                array('maj_tables', array('spip_prix_objets'))
     25        );
     26        $maj['1.1.0']  = array(
     27                        array('sql_alter','TABLE spip_prix_objets RENAME TO spip_prix_objets')
     28                        );
     29        $maj['1.1.2']  = array(
     30                        array('sql_alter','TABLE spip_prix_objets CHANGE prix prix_ht float (38,2) NOT NULL'),
     31                        array('maj_tables', array('spip_prix_objets')),
     32                        );
     33        $maj['1.1.3']  = array(
     34                        array('sql_alter','TABLE spip_prix_objets CHANGE prix prix float (38,2) NOT NULL'),
     35                        );
     36        $maj['1.1.4']  = array(
     37                        array('sql_alter','TABLE spip_prix_objets CHANGE id_prix id_prix_objet bigint(21) NOT NULL'),
     38                        );
     39        $maj['1.1.5'] = array(array('maj_tables', array('spip_prix_objets')));
     40        $maj['1.2.4'] = array(array('maj_tables', array('spip_prix_objets')));
     41        $maj['1.3.0'] = array(array('maj_tables', array('spip_prix_objets')));
     42        $maj['1.4.0'] = array(
     43                        array('ecrire_config', 'prix_objets',lire_config('shop_prix',array())),
     44                        array('ecrire_config', 'shop_prix',array()),
     45                        array('effacer_meta', 'shop_prix_base_version')
     46                        );
     47        $maj['1.5.0']  = array(
     48                array('sql_alter','TABLE spip_prix_objets CHANGE prix prix decimal(15,2) NOT NULL DEFAULT "0.00"'),
     49                array('sql_alter','TABLE spip_prix_objets CHANGE prix_ht prix_ht decimal(15,2) NOT NULL DEFAULT "0.00"'),
     50        );
     51        $maj['2.0.0']  = array(
     52                array('maj_tables', array('spip_prix_objets')),
     53                array('sql_alter','TABLE spip_prix_objets DROP INDEX id_objet'),
     54                array('sql_alter','TABLE spip_prix_objets ADD INDEX `id_objet` (`id_objet`,`id_prix_objet_source`,`objet`,`id_extension`,`extension`)'),
     55                array('po_upgrade',$version_cible),
     56        );
    4957
    5058        include_spip('base/upgrade');
Note: See TracChangeset for help on using the changeset viewer.