Browse Source

- correction génération prix d'un objet

- pouvoir changer l'ordre des prix
- prendre le premier bon prix lors de la génération du prix de l'objet
- formulaire prix, meix intégrer les extensions
svn/root/trunk
Rainer 1 year ago
parent
commit
e513b1be23

+ 1
- 0
.gitattributes View File

@@ -1,6 +1,7 @@
1 1
 * text=auto !eol
2 2
 /README.md -text
3 3
 action/eliminer_prix.php -text
4
+action/ordonner_prix_objets.php -text
4 5
 base/prix_objets.php -text
5 6
 formulaires/configurer_prix_objets.html -text
6 7
 formulaires/prix.html -text

+ 102
- 0
action/ordonner_prix_objets.php View File

@@ -0,0 +1,102 @@
1
+<?php
2
+
3
+/**
4
+ * Action ordonnant un lien sur une table de liens, adapté du plugin Media
5
+ *
6
+ * @plugin     Prix Objets
7
+ * @copyright  2012 - 2018
8
+ * @author     Rainer Müller
9
+ * @licence    GNU/GPL
10
+ * @package    SPIP\Prix_objets\Action
11
+ */
12
+
13
+if (!defined('_ECRIRE_INC_VERSION')) {
14
+	return;
15
+}
16
+
17
+function action_ordonner_prix_objets_dist() {
18
+
19
+	include_spip('inc/autoriser');
20
+	include_spip('base/objets');
21
+	include_spip('action/editer_liens');
22
+
23
+	// source (table spip_xx_liens)
24
+	$objet = 'prix_objet';
25
+
26
+	// objet lié
27
+	$objet_lie = _request('objet_lie');
28
+	$id_objet_lie = intval(_request('id_objet_lie'));
29
+
30
+	// ordre des éléments
31
+	$ordre = _request('ordre');
32
+
33
+	if (!$objet or !$objet_lie or !$id_objet_lie OR !$ordre) {
34
+		return envoyer_json_erreur(_T('medias:erreur_objet_absent') . ' ' . _T('medias:erreur_deplacement_impossible'));
35
+	}
36
+
37
+	if (!autoriser('modifier', $objet_lie, $id_objet_lie)) {
38
+		return envoyer_json_erreur(_T('medias:erreur_autorisation') . ' ' . _T('medias:erreur_deplacement_impossible'));
39
+	}
40
+
41
+	$_id_objet = 'id_prix_objet';
42
+	$table_liens = 'spip_prix_objets';
43
+
44
+	$success = $errors = array();
45
+
46
+	$actuels = sql_allfetsel(
47
+		array($_id_objet . ' AS id', 'rang_lien'),
48
+		$table_liens,
49
+		array(
50
+			sql_in($_id_objet, $ordre),
51
+			'objet = ' . sql_quote($objet_lie),
52
+			'id_objet = ' . sql_quote($id_objet_lie)
53
+		)
54
+		);
55
+
56
+	$futurs = array_flip($ordre);
57
+	// ordre de 1 à n (pas de 0 à n).
58
+	array_walk($futurs, function(&$v) { $v++; });
59
+
60
+	$updates = array();
61
+
62
+	foreach ($actuels as $l) {
63
+		if ($futurs[$l['id']] !== $l['rang_lien']) {
64
+			$updates[$l['id']] = $futurs[$l['id']];
65
+		}
66
+	}
67
+
68
+	if ($updates) {
69
+		foreach ($updates as $id => $ordre) {
70
+			sql_updateq(
71
+				$table_liens,
72
+				array('rang_lien' => $ordre),
73
+				array(
74
+					$_id_objet . ' = ' . $id,
75
+					'objet = ' . sql_quote($objet_lie),
76
+					'id_objet = ' . sql_quote($id_objet_lie)
77
+				)
78
+				);
79
+		}
80
+	}
81
+
82
+	return envoyer_json_envoi(array(
83
+		'done' => true,
84
+		'success' => $success,
85
+		'errors' => $errors,
86
+	));
87
+
88
+}
89
+
90
+
91
+function envoyer_json_envoi($data) {
92
+	header('Content-Type: application/json; charset=' . $GLOBALS['meta']['charset']);
93
+	echo json_encode($data);
94
+}
95
+
96
+function envoyer_json_erreur($msg) {
97
+	return envoyer_json_envoi(array(
98
+		'done' => false,
99
+		'success' => array(),
100
+		'errors' => array($msg)
101
+	));
102
+}

+ 93
- 92
base/prix_objets.php View File

@@ -11,111 +11,112 @@
11 11
 if (! defined("_ECRIRE_INC_VERSION"))
12 12
 	return;
13 13
 
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';
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
-	);
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'",
53
+		);
53 54
 
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
-	);
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
+		);
58 59
 
59
-	$spip_prix_objets_join = array(
60
-		"id_prix_objet" => "id_prix_objet",
61
-		"id_objet" => "id_objet",
62
-		"id_objet" => "id_article"
63
-	);
60
+		$spip_prix_objets_join = array(
61
+			"id_prix_objet" => "id_prix_objet",
62
+			"id_objet" => "id_objet",
63
+			"id_objet" => "id_article"
64
+		);
64 65
 
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
-	);
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
+		);
70 71
 
71
-	return $tables_principales;
72
-}
72
+		return $tables_principales;
73
+	}
73 74
 
74
-/**
75
- * Actualise la bd
76
- *
77
- * @param string $version_cible
78
- *        	la version de la bd
79
- */
80
-function po_upgrade($version_cible) {
75
+	/**
76
+	 * Actualise la bd
77
+	 *
78
+	 * @param string $version_cible
79
+	 *        	la version de la bd
80
+	 */
81
+	function po_upgrade($version_cible) {
81 82
 
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');
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');
88 89
 
89
-		$extensions = array(
90
-			'declinaison',
91
-			'po_periode'
92
-		);
90
+			$extensions = array(
91
+				'declinaison',
92
+				'po_periode'
93
+			);
93 94
 
94
-		foreach ($extensions as $extension) {
95
-			if ($identifiant_extension = id_table_objet($extension) and
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
-}

+ 12
- 0
css/prix_objets_admin.css View File

@@ -1,3 +1,15 @@
1 1
 .formulaire_spip select.code_devise {
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
+}

+ 101
- 7
formulaires/inc-prix_affichage.html View File

@@ -1,6 +1,8 @@
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">
6 8
 			(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{prix_objets:info_1_prix,prix_objets:info_nb_prix}})
@@ -9,14 +11,14 @@
9 11
 	<thead>
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}}
22 24
 		#SET{taxes,<:prix_objets:prix_ht:>}
@@ -24,16 +26,23 @@
24 26
 		#SET{prix,#VALEUR|table_valeur{prix}}
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>
30 32
 			<td>#GET{taxes}</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:>">
39 48
 					<img src="#CHEMIN_IMAGE{supprimer-12.png}" />
@@ -45,3 +54,88 @@
45 54
 </table>
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>

+ 2
- 3
formulaires/prix.html View File

@@ -13,7 +13,6 @@
13 13
 
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}}
19 18
 		[<div class='erreur_message'>(#ENV**{erreurs}|table_valeur{code_devise})</div>]
@@ -21,7 +20,7 @@
21 20
 			<div class="obligatoire editer editer_prix saisie_input [ (#ENV**{erreurs}|table_valeur{prix_ht}) erreur]">
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}}>
27 26
 					[(#ENV{devises}|table_valeur{0}|traduire_devise)]
@@ -51,7 +50,7 @@
51 50
 
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
 
57 56
 </BOUCLE_test0>

+ 25
- 4
formulaires/prix.php View File

@@ -75,7 +75,6 @@ function formulaires_prix_charger_dist($id_objet, $objet = 'article') {
75 75
 		$valeurs['extensions'] = _request('extensions');
76 76
 
77 77
 		$valeurs['_saisies_extras'] = array_merge(
78
-			$saisies,
79 78
 			array(
80 79
 				array(
81 80
 					'saisie' => 'hidden',
@@ -83,6 +82,14 @@ function formulaires_prix_charger_dist($id_objet, $objet = 'article') {
83 82
 						'nom' => 'extensions',
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
 			)
88 95
 		);
@@ -168,11 +175,24 @@ function formulaires_prix_traiter_dist($id_objet, $objet = 'article') {
168 175
 		}
169 176
 	}
170 177
 
178
+
171 179
 	$titres_secondaires = implode(' / ', $titres_secondaires);
172 180
 
181
+
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
178 198
 	$valeurs =  array(
@@ -182,7 +202,8 @@ function formulaires_prix_traiter_dist($id_objet, $objet = 'article') {
182 202
 			'titre' => $titre,
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
 
188 209
 	if ($ttc = _request('taxes_inclus')) {
@@ -193,7 +214,7 @@ function formulaires_prix_traiter_dist($id_objet, $objet = 'article') {
193 214
 	}
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
199 220
 	foreach($valeurs_extensions as $valeur_extension) {

+ 2
- 0
lang/prix_objets_fr.php View File

@@ -29,6 +29,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
29 29
 
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',
34 36
 	'infos_generales' => 'Informations Générales',

+ 2
- 1
paquet.xml View File

@@ -6,7 +6,7 @@
6 6
 	compatibilite="[3.0.5;3.2.*]"
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
 
12 12
 	<nom>Prix Objets</nom>
@@ -32,4 +32,5 @@
32 32
 	<pipeline nom="shop_objets" inclure="prix_objets_pipelines.php" />
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>

+ 3
- 0
prix_objets_administrations.php View File

@@ -67,6 +67,9 @@ function prix_objets_upgrade($nom_meta_base_version, $version_cible) {
67 67
 		array('sql_alter','TABLE spip_prix_objets ADD INDEX `id_objet` (`id_objet`,`id_prix_objet_source`,`objet`,`id_extension`,`extension`)'),
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');
72 75
 	maj_plugin($nom_meta_base_version, $version_cible, $maj);

+ 25
- 59
prix_objets_fonctions.php View File

@@ -417,86 +417,52 @@ function prix_objets_devise_defaut($config = '') {
417 417
  */
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 420
 
423
-	$fonction_prix = charger_fonction($type, 'prix', TRUE);
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);
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
+		);
428 435
 
429
-	$prix_objets = array();
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);
458
+		// On choisit le premier prix applicable.
459
+		if (count($applicables) == $i) {
460
+			$prix =$fonction_prix('prix_objet', $id_prix_objet);
461
+			break;
454 462
 		}
455 463
 	}
456 464
 
457 465
 
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
-	}
499
-
500 466
 	// Permettre d'intervenir sur le prix
501 467
 	return pipeline('prix_par_objet', array(
502 468
 			'data' => $prix,

+ 14
- 0
prix_objets_pipelines.php View File

@@ -116,3 +116,17 @@ function prix_objets_header_prive($flux){
116 116
 	$flux .= '<link rel="stylesheet" href="' . _DIR_PLUGIN_PRIX_OBJETS .'css/prix_objets_admin.css" type="text/css" media="all" />';
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
+}

Loading…
Cancel
Save