Changeset 110362 in spip-zone
- Timestamp:
- May 24, 2018, 3:49:26 PM (3 years ago)
- Location:
- _plugins_/prix_objets/trunk
- Files:
-
- 1 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/prix_objets/trunk/base/prix_objets.php
r110334 r110362 12 12 return; 13 13 14 /**15 * Déclaration des alias de tables et filtres automatiques de champs16 *17 * @pipeline declarer_tables_interfaces18 * @param array $interfaces19 * Déclarations d'interface pour le compilateur20 * @return array21 * Déclarations d'interface pour le compilateur22 */23 function prix_objets_declarer_tables_interfaces($tables_interfaces) {24 $tables_interfaces['table_des_tables']['prix_objets'] = 'prix_objets';14 /** 15 * Déclaration des alias de tables et filtres automatiques de champs 16 * 17 * @pipeline declarer_tables_interfaces 18 * @param array $interfaces 19 * Déclarations d'interface pour le compilateur 20 * @return array 21 * Déclarations d'interface pour le compilateur 22 */ 23 function prix_objets_declarer_tables_interfaces($tables_interfaces) { 24 $tables_interfaces['table_des_tables']['prix_objets'] = 'prix_objets'; 25 25 26 return $tables_interfaces;27 }26 return $tables_interfaces; 27 } 28 28 29 /** 30 * Déclaration des tables principales. 31 * 32 * @pipeline declarer_tables_interfaces 33 * @param array $tables_principales 34 * Déclarations des tables principales pour le compilateur 35 * @return array 36 * Déclarations des tables principales pour le compilateur 37 */ 38 function prix_objets_declarer_tables_principales($tables_principales) { 39 $spip_prix_objets = array( 40 "id_prix_objet" => "bigint(21) NOT NULL", 41 "id_prix_objet_source" => "bigint(21) NOT NULL", 42 'objet' => 'varchar(25) not null default ""', 43 "id_objet" => "bigint(21) NOT NULL", 44 "titre" => "varchar(255) DEFAULT '' NOT NULL", 45 "reference" => "varchar(255) DEFAULT '' NOT NULL", 46 "code_devise" => "varchar(3) NOT NULL", 47 "prix_ht" => "decimal(15,2) NOT NULL DEFAULT '0.00'", 48 "prix" => "decimal(15,2) NOT NULL DEFAULT '0.00'", 49 "taxe" => "varchar(10) DEFAULT '' NOT NULL", 50 'extension' => 'varchar(50) not null default ""', 51 "id_extension" => "bigint(21) NOT NULL" 52 ); 53 54 $spip_prix_objets_key = array( 55 "PRIMARY KEY" => "id_prix_objet", 56 "KEY id_objet" => "id_prix_objet_source,id_objet,objet,id_extension,extension" 57 ); 58 59 $spip_prix_objets_join = array( 60 "id_prix_objet" => "id_prix_objet", 61 "id_objet" => "id_objet", 62 "id_objet" => "id_article" 63 ); 64 65 $tables_principales['spip_prix_objets'] = array( 66 'field' => &$spip_prix_objets, 67 'key' => &$spip_prix_objets_key, 68 'join' => &$spip_prix_objets_join 69 ); 70 71 return $tables_principales; 72 } 73 74 /** 75 * Actualise la bd 76 * 77 * @param string $version_cible 78 * la version de la bd 79 */ 80 function po_upgrade($version_cible) { 81 82 // Remplace les champs "id_EXTENSION" par id_extension extension. 83 if ($version_cible == '2.0.0') { 84 $trouver_table = charger_fonction('trouver_table', 'base'); 85 $table = 'spip_prix_objets'; 86 $decription_table = $trouver_table($table); 87 include_spip('inc/prix_objets'); 88 89 $extensions = array( 90 'declinaison', 91 'po_periode' 29 /** 30 * Déclaration des tables principales. 31 * 32 * @pipeline declarer_tables_interfaces 33 * @param array $tables_principales 34 * Déclarations des tables principales pour le compilateur 35 * @return array 36 * Déclarations des tables principales pour le compilateur 37 */ 38 function prix_objets_declarer_tables_principales($tables_principales) { 39 $spip_prix_objets = array( 40 "id_prix_objet" => "bigint(21) NOT NULL", 41 "id_prix_objet_source" => "bigint(21) NOT NULL", 42 'objet' => 'varchar(25) not null default ""', 43 "id_objet" => "bigint(21) NOT NULL", 44 "titre" => "varchar(255) DEFAULT '' NOT NULL", 45 "reference" => "varchar(255) DEFAULT '' NOT NULL", 46 "code_devise" => "varchar(3) NOT NULL", 47 "prix_ht" => "decimal(15,2) NOT NULL DEFAULT '0.00'", 48 "prix" => "decimal(15,2) NOT NULL DEFAULT '0.00'", 49 "taxe" => "varchar(10) DEFAULT '' NOT NULL", 50 'extension' => 'varchar(50) not null default ""', 51 "id_extension" => "bigint(21) NOT NULL", 52 "rang_lien" => "int(4) NOT NULL DEFAULT '0'", 92 53 ); 93 54 94 foreach ($extensions as $extension) { 95 if ($identifiant_extension = id_table_objet($extension) and 55 $spip_prix_objets_key = array( 56 "PRIMARY KEY" => "id_prix_objet", 57 "KEY id_objet" => "id_prix_objet_source,id_objet,objet,id_extension,extension" 58 ); 59 60 $spip_prix_objets_join = array( 61 "id_prix_objet" => "id_prix_objet", 62 "id_objet" => "id_objet", 63 "id_objet" => "id_article" 64 ); 65 66 $tables_principales['spip_prix_objets'] = array( 67 'field' => &$spip_prix_objets, 68 'key' => &$spip_prix_objets_key, 69 'join' => &$spip_prix_objets_join 70 ); 71 72 return $tables_principales; 73 } 74 75 /** 76 * Actualise la bd 77 * 78 * @param string $version_cible 79 * la version de la bd 80 */ 81 function po_upgrade($version_cible) { 82 83 // Remplace les champs "id_EXTENSION" par id_extension extension. 84 if ($version_cible == '2.0.0') { 85 $trouver_table = charger_fonction('trouver_table', 'base'); 86 $table = 'spip_prix_objets'; 87 $decription_table = $trouver_table($table); 88 include_spip('inc/prix_objets'); 89 90 $extensions = array( 91 'declinaison', 92 'po_periode' 93 ); 94 95 foreach ($extensions as $extension) { 96 if ($identifiant_extension = id_table_objet($extension) and 96 97 isset($decription_table['field'][$identifiant_extension])) { 97 $sql = sql_select('*', 'spip_prix_objets',98 $identifiant_extension . '>0');98 $sql = sql_select('*', 'spip_prix_objets', 99 $identifiant_extension . '>0'); 99 100 100 while ($data = sql_fetch($sql)) {101 sql_insertq('spip_prix_objets',102 array(103 'id_prix_objet_source' => $data['id_prix_objet'],104 'extension' => $extension,105 'id_extension' => $data[$identifiant_extension],106 'objet' => $data['objet'],107 'id_objet' => $data['id_objet'],108 'titre' => extraire_multi(101 while ($data = sql_fetch($sql)) { 102 sql_insertq('spip_prix_objets', 103 array( 104 'id_prix_objet_source' => $data['id_prix_objet'], 105 'extension' => $extension, 106 'id_extension' => $data[$identifiant_extension], 107 'objet' => $data['objet'], 108 'id_objet' => $data['id_objet'], 109 'titre' => extraire_multi( 109 110 supprimer_numero( 110 generer_info_entite( 111 $data[$identifiant_extension], 112 $extension, 113 'titre', '*'))), 114 'prix' => $data['prix_ht'] 115 )); 116 } 117 sql_alter("TABLE $table DROP COLUMN $identifiant_extension"); 111 generer_info_entite( 112 $data[$identifiant_extension], 113 $extension, 114 'titre', '*'))), 115 'prix' => $data['prix_ht'] 116 )); 117 } 118 sql_alter("TABLE $table DROP COLUMN $identifiant_extension"); 119 } 118 120 } 119 121 } 120 122 } 121 } -
_plugins_/prix_objets/trunk/css/prix_objets_admin.css
r108423 r110362 2 2 width: auto; 3 3 } 4 5 .fieldset_extensions .editer { 6 width : 234px; 7 float : left; 8 } 9 10 .fieldset_extensions .saisie_ajouter_action { 11 width: 72px; 12 float: left; 13 clear: none; 14 padding: 0 10px; 15 } -
_plugins_/prix_objets/trunk/formulaires/inc-prix_affichage.html
r110035 r110362 1 1 <B_prix> 2 2 <div class="liste prix"> 3 <table class='spip liste'> 3 <table class="spip liste ordonner_rang_lien liste_items prix_objets" 4 id="prix_choisis" 5 data-lien="[(#OBJET|concat{'/',#ID_OBJET}|attribut_html)]"> 4 6 [<caption> 5 7 <strong class="caption"> … … 10 12 <tr class='first_row'> 11 13 <th class='prix' scope='col'><:prix_objets:info_prix:></th> 12 <th class='statut' scope='col'><:prix_objets: devises_choisis:></th>14 <th class='statut' scope='col'><:prix_objets:choix_devise:></th> 13 15 <th class='taxes' scope='col'><:prix_objets:taxes:></th> 14 16 <th class='titre' scope='col'><:ecrire:info_titre:></th> 15 <th class='titre' scope='col'><: spip:lien_supprimer:></th>17 <th class='titre' scope='col'><:prix_objets:info_actions:></th> 16 18 </tr> 17 19 </thead> 18 <tbody >19 <BOUCLE_prix( POUR){tableau #ENV{prix_choisis}}>20 <tbody class="sortable"> 21 <BOUCLE_prix(DATA){source tableau, #ENV{prix_choisis}} {par rang_lien, titre, prix_ht}> 20 22 [(#VALEUR|table_valeur{prix_ht}|!={0.00}|?{ 21 23 #SET{prix,#VALEUR|table_valeur{prix_ht}} … … 25 27 #SET{taxes,<:prix_objets:prix_ttc:>} 26 28 })] 27 <tr class= '[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]'>29 <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]" id="prix#ID_PRIX_OBJET"> 28 30 <td>#GET{prix}</td> 29 31 <td>[(#VALEUR|table_valeur{code_devise}|traduire_devise)]</td> … … 31 33 <td>#VALEUR{titre}</td> 32 34 <td> 35 <span class="deplacer-prix" data-rang="#RANG_LIEN"> 36 <img src='#CHEMIN_IMAGE{deplacer-16.png}' 37 width='16' 38 height='16' 39 alt='<:medias:ordonner_ce_document|attribut_html:>' 40 title='<:medias:ordonner_ce_document|attribut_html:>' /> 41 </span> 33 42 <a 34 43 class="ajax" 35 44 href="[(#URL_ACTION_AUTEUR{ 36 eliminer_prix, [(#VALEUR|table_valeur{id_prix_objet})],[(#SELF|parametre_url{retour_action,oui})]45 eliminer_prix,#ID_PRIX_OBJET,[(#SELF|parametre_url{retour_action,oui})] 37 46 })]#edition_prix" 38 47 title="<:spip:lien_supprimer:>"> … … 46 55 </div> 47 56 </B_prix> 57 58 <script type="text/javascript"> 59 /* Gestion du tri des listes de documents et de leur enregistrement */ 60 61 $(function($){ 62 63 if ($.fn.sortable) { 64 $(".liste.prix .ordonner_rang_lien[data-lien]").find('.sortable').each(function () { 65 66 // détruire / recréer le sortable à chaque appel ajax 67 if ($(this).has('.ui-sortable').length) { 68 $(this).sortable('destroy'); 69 } 70 // pas de tri possible s'il n'y a qu'un seul élément. 71 if ($(this).find('tr').length < 2) { 72 $(this).find('.deplacer-document').hide(); 73 return true; // continue 74 } else { 75 $(this).find('.deplacer-document').show(); 76 } 77 $(this).sortable({ 78 /*axis: "y",*/ /* minidoc a un affichage en case */ 79 placeholder: ".ui-state-highlight", 80 cursor: "move", 81 containment: "parent", 82 tolerance: "pointer", 83 update: function (event, ui) { 84 var items = $(this); 85 var item = ui.item; 86 var liste = items.sortable('toArray'); 87 var ordre = []; 88 89 $.each(liste, function(i, id) { 90 if (id) { 91 ordre.push( id.substring(4) ); // prix123 => 123 92 } 93 }); 94 95 // l'objet lié est indiqué dans l'attribut data-lien sur la liste 96 var lien = items.parents(".liste_items.prix_objets").data("lien").split("/"); 97 var objet_lie = lien[0]; 98 var id_objet_lie = lien[1]; 99 var action = '[(#VAL{ordonner_prix_objets}|generer_url_action{"", 1})]'; 100 var params = { 101 objet_source: 'prix_objet', 102 objet_lie: objet_lie, 103 id_objet_lie: id_objet_lie, 104 ordre: ordre, 105 }; 106 107 $.ajax({ 108 url: action, 109 data: params, 110 dataType: 'json', 111 cache: false, 112 }).done(function(data) { 113 114 var couleur_origine = item.css('background-color'); 115 var couleur_erreur = $("<div class='remove'></div>").css('background-color'); 116 var couleur_succes = $("<div class='append'></div>").css('background-color'); 117 118 if (data.errors.length) { 119 items.sortable('cancel'); 120 item.css({backgroundColor: couleur_erreur}).animate({backgroundColor: couleur_origine}, 'normal', function(){ 121 item.css({backgroundColor: ''}); 122 }); 123 } else { 124 item.css({backgroundColor: couleur_succes}).animate({backgroundColor: couleur_origine}, 'normal', function(){ 125 item.css({backgroundColor: ''}); 126 }); 127 items.parent().find('.tout_desordonner').show(); 128 } 129 }); 130 } 131 }); 132 // bouton "désordonner" 133 if ($(this).parent().find('.deplacer-document[data-rang!=0]').length) { 134 $(this).parent().find('.tout_desordonner').show(); 135 } else { 136 $(this).parent().find('.tout_desordonner').hide(); 137 } 138 }); 139 } 140 }); 141 </script> -
_plugins_/prix_objets/trunk/formulaires/prix.html
r110035 r110362 14 14 [(#GET{plie}|debut_block_depliable{#GET{identifiant}})] 15 15 <BOUCLE_test0(CONDITION){si #ENV{devises}|count|>{0}}> 16 17 16 <form id="form_prix" name="form_prix" action="#ENV{action}#form_prix" method="post"><div> 18 17 #ACTION_FORMULAIRE{#ENV{action}} … … 22 21 <div> 23 22 [<div class='erreur_message'>(#ENV**{erreurs}|table_valeur{prix})</div>] 24 <label><:prix_objets: ajouter_prix:></label>23 <label><:prix_objets:info_prix:></label> 25 24 <input type="text" name="prix" value="#ENV{prix}"/> 26 25 <BOUCLE_test(CONDITION){si #ENV{devises}|count|<{2}}> … … 52 51 <!--fini champs!--> 53 52 </div> 54 <p class="boutons"><input type="submit" class="submit" value="<:prix_objets:ajouter :>" /></p></div>53 <p class="boutons"><input type="submit" class="submit" value="<:prix_objets:ajouter_prix:>" /></p></div> 55 54 </form> 56 55 -
_plugins_/prix_objets/trunk/formulaires/prix.php
r110312 r110362 76 76 77 77 $valeurs['_saisies_extras'] = array_merge( 78 $saisies,79 78 array( 80 79 array( … … 84 83 'defaut' => implode(',', $extensions), 85 84 ) 85 ), 86 array( 87 'saisie' => 'fieldset', 88 'options' => array( 89 'nom' => 'extensions', 90 'label' => _T('prix_objets:info_extensions'), 91 ), 92 'saisies' => $saisies, 86 93 ) 87 94 ) … … 169 176 } 170 177 178 171 179 $titres_secondaires = implode(' / ', $titres_secondaires); 180 181 172 182 173 183 if ($titres_secondaires) { 174 184 $titre = $titre . ' - ' . $titres_secondaires; 175 } 185 } 186 187 $table = 'spip_prix_objets'; 188 189 $dernier_rang = sql_getfetsel( 190 'rang_lien', 191 $table, 192 'id_objet=' .$id_objet . ' AND objet LIKE ' . sql_quote($objet) . ' AND id_prix_objet_source=0', 193 '', 194 'rang_lien DESC' 195 ); 176 196 177 197 // On inscrit dans la bd … … 183 203 'taxe' => _request('taxe'), 184 204 'prix' => 0, 185 'prix_ht' => 0 205 'prix_ht' => 0, 206 'rang_lien' => $dernier_rang + 1, 186 207 ); 187 208 … … 194 215 195 216 // Enregistrement du prix 196 $id_prix_objet = sql_insertq( 'spip_prix_objets', $valeurs);217 $id_prix_objet = sql_insertq($table, $valeurs); 197 218 198 219 // Enregistrement des extensions -
_plugins_/prix_objets/trunk/lang/prix_objets_fr.php
r110041 r110362 30 30 // I 31 31 'info_1_prix' => 'Un prix attaché', 32 'info_actions' => 'Actions', 33 'info_extensions' => 'Extensions', 32 34 'info_nb_prix' => '@nb@ prix attachés', 33 35 'info_prix' => 'Prix', -
_plugins_/prix_objets/trunk/paquet.xml
r110334 r110362 7 7 logo="prive/themes/spip/images/prix_objets-64.png" 8 8 documentation="https://contrib.spip.net/Prix-Objets" 9 schema="2. 0.0"9 schema="2.1.0" 10 10 > 11 11 … … 33 33 <pipeline nom="header_prive" inclure="prix_objets_pipelines.php" /> 34 34 <pipeline nom="reservation_evenement_objets_configuration" inclure="prix_objets_pipelines.php" /> 35 <pipeline nom="jqueryui_plugins" inclure="prix_objets_pipelines.php" /> 35 36 </paquet> -
_plugins_/prix_objets/trunk/prix_objets_administrations.php
r110312 r110362 68 68 array('po_upgrade',$version_cible), 69 69 ); 70 $maj['2.1.0'] = array( 71 array('maj_tables', array('spip_prix_objets')), 72 ); 70 73 71 74 include_spip('base/upgrade'); -
_plugins_/prix_objets/trunk/prix_objets_fonctions.php
r110334 r110362 418 418 function prix_par_objet($objet, $id_objet, $contexte, $type = 'prix_ht', $options = array()) { 419 419 $prix = 0; 420 $prix_priorite = isset($options['prix_priorite']) ? $options['prix_priorite'] : 'plus_cher'; 421 $prix_fallback = isset($options['prix_fallback']) ? $options['prix_fallback'] : $prix_priorite; 422 423 $fonction_prix = charger_fonction($type, 'prix', TRUE); 420 421 if ($type == 'prix_ht') { 422 $fonction_prix = charger_fonction('ht', 'inc/prix'); 423 } 424 else { 425 $fonction_prix = charger_fonction('prix', 'inc'); 426 } 427 424 428 $prix_source = sql_select( 425 429 'id_prix_objet', 426 430 'spip_prix_objets', 427 'id_prix_objet_source=0 AND objet LIKE ' . sql_quote($objet) . ' AND id_objet=' . $id_objet); 428 429 $prix_objets = array(); 431 'id_prix_objet_source=0 AND objet LIKE ' . sql_quote($objet) . ' AND id_objet=' . $id_objet, 432 '', 433 array('rang_lien', 'titre', 'prix_ht') 434 ); 435 430 436 // On parcours les extension pour chaque prix principal. 431 437 while ($data_source = sql_fetch($prix_source)) { 432 438 $id_prix_objet = $data_source['id_prix_objet']; 433 439 $extensions = sql_select( 434 'extension,id_extension ',440 'extension,id_extension,titre', 435 441 'spip_prix_objets', 436 442 'id_prix_objet_source=' . $id_prix_objet); 437 $applicable = FALSE; 443 $applicables = array(); 444 $i = 0; 438 445 while ($data_extension = sql_fetch($extensions)) { 439 if($extension = charger_fonction($data_extension['extension'], 'prix_objet', TRUE)) { 440 $applicable = $extension($data_extension['id_extension'], $contexte); 446 $i++; 447 448 if($extension = charger_fonction($data_extension['extension'], 'prix_objet/', TRUE)) { 449 if ($extension($data_extension['id_extension'], $contexte)) { 450 $applicables[] = 1; 451 } 441 452 } 442 453 else { 443 $applicable = TRUE;454 $applicables[] = 1; 444 455 } 445 456 } 446 457 447 // Les prix applicables. 448 if ($applicable) { 449 $prix_objets['applicable'][] =$fonction_prix('prix_objet', $id_prix_objet); 450 } 451 // Les prix non applicables 452 else { 453 $prix_objets['non_applicable'][] = $fonction_prix('prix_objet', $id_prix_objet); 454 } 455 } 456 457 458 // Si plusieurs prix, on choisit selon préférence 459 if (count($prix_objets) > 0) { 460 // Parmis les prix applicables 461 if (isset($prix_objets['applicable'])) { 462 foreach ($prix_objets['applicable'] as $prix_objet) { 463 switch($prix_priorite) { 464 case 'plus_cher': 465 if ($prix_objet > $prix) { 466 $prix = $prix_objet; 467 } 468 break; 469 case 'moins_cher': 470 $prix = ''; 471 if (!$prix or $prix_objet < $prix) { 472 $prix = $prix_objet; 473 } 474 break; 475 } 476 } 477 } 478 // sinon parmis tous les prix 479 else { 480 foreach ($prix_objets['non_applicable'] as $prix_objet) { 481 switch($prix_fallback) { 482 case 'plus_cher': 483 if ($prix_objet > $prix) { 484 $prix = $prix_objet; 485 } 486 break; 487 case 'moins_cher': 488 $prix = ''; 489 if (!$prix or $prix_objet < $prix) { 490 $prix = $prix_objet; 491 } 492 break; 493 case 'aucun': 494 break; 495 } 496 } 497 } 498 } 458 // On choisit le premier prix applicable. 459 if (count($applicables) == $i) { 460 $prix =$fonction_prix('prix_objet', $id_prix_objet); 461 break; 462 } 463 } 464 499 465 500 466 // Permettre d'intervenir sur le prix -
_plugins_/prix_objets/trunk/prix_objets_pipelines.php
r110034 r110362 117 117 return $flux; 118 118 } 119 120 /** 121 * Active des modules de jquery ui 122 * 123 * @pipeline jqueryui_plugins 124 * 125 * @param array $scripts 126 * Données du pipeline 127 * @return array 128 */ 129 function prix_objets_jqueryui_plugins($scripts) { 130 $scripts[] = "jquery.ui.sortable"; 131 return $scripts; 132 }
Note: See TracChangeset
for help on using the changeset viewer.