Changeset 110334 in spip-zone
- Timestamp:
- May 21, 2018, 1:51:40 PM (3 years ago)
- Location:
- _plugins_/prix_objets/trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/prix_objets/trunk/base/prix_objets.php
r110329 r110334 3 3 * Déclarations relatives à la base de données 4 4 * 5 * @plugin Déclinaisons Prix5 * @plugin Prix Objets 6 6 * @copyright 2012 - 2018 7 7 * @author Rainer Müller -
_plugins_/prix_objets/trunk/paquet.xml
r110314 r110334 2 2 prefix="prix_objets" 3 3 categorie="edition" 4 version="2. 0.0"4 version="2.1.0" 5 5 etat="stable" 6 6 compatibilite="[3.0.5;3.2.*]" … … 21 21 <utilise nom="shop" compatibilite="[1.2.0;]" /> 22 22 23 <!-- Déclaration de pipelines -->23 <!-- Déclaration des pipelines --> 24 24 <pipeline nom="prix_objets_extensions" action='' /> 25 <pipeline nom="prix_par_objet" action='' /> 25 26 26 27 <!-- Appels des pipelines --> -
_plugins_/prix_objets/trunk/prix/prix_objet.php
r103686 r110334 55 55 return $prix; 56 56 } 57 -
_plugins_/prix_objets/trunk/prix_objets_fonctions.php
r110035 r110334 401 401 return $devise_defaut; 402 402 } 403 404 /** 405 * Donne le prix pour un objet 406 * 407 * @param string $objet 408 * Objet dont on cherche le prix 409 * @param string $id_objet 410 * Identifiant de l'objet dont on cherche le prix 411 * @param array $contexte 412 * Les variables de l'environnement. 413 * @param array $options 414 * 415 * @return string 416 * Le prix applicable. 417 */ 418 function prix_par_objet($objet, $id_objet, $contexte, $type = 'prix_ht', $options = array()) { 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); 424 $prix_source = sql_select( 425 'id_prix_objet', 426 '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(); 430 // On parcours les extension pour chaque prix principal. 431 while ($data_source = sql_fetch($prix_source)) { 432 $id_prix_objet = $data_source['id_prix_objet']; 433 $extensions = sql_select( 434 'extension,id_extension', 435 'spip_prix_objets', 436 'id_prix_objet_source=' . $id_prix_objet); 437 $applicable = FALSE; 438 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); 441 } 442 else { 443 $applicable = TRUE; 444 } 445 } 446 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 } 499 500 // Permettre d'intervenir sur le prix 501 return pipeline('prix_par_objet', array( 502 'data' => $prix, 503 'args' => array( 504 'objet' => $objet, 505 'id_objet' => $id_objet, 506 'contexte' => $contexte, 507 'type' => $type, 508 'options' => $options, 509 ) 510 ) 511 ); 512 }
Note: See TracChangeset
for help on using the changeset viewer.