Changeset 110820 in spip-zone
- Timestamp:
- Jun 23, 2018, 4:03:28 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/prix_objets/trunk/prix_objets_fonctions.php
r110482 r110820 187 187 188 188 $req = sql_select( 189 190 191 192 189 'code_devise,prix', 190 'spip_prix_objets', 191 'id_objet=' . $id_objet . ' AND objet=' . sql_quote($objet) 192 ); 193 193 while ($row = sql_fetch($req)) { 194 194 $prix = $row['prix'] . ' ' . traduire_devise($row['code_devise']); … … 338 338 // Si il y a un cookie 'devise_selectionnee' et qu'il figure parmis les devises disponibles on le prend 339 339 if (isset($_COOKIE['devise_selectionnee']) 340 341 342 343 344 // Sinon on regarde si il ya une devise defaut valable345 else {346 $devise = prix_objets_devise_defaut($config);347 }340 and in_array($_COOKIE['devise_selectionnee'], $devises)) { 341 $devise = $_COOKIE['devise_selectionnee']; 342 $GLOBALS['devise_defaut'] = $devise; 343 } 344 // Sinon on regarde si il ya une devise defaut valable 345 else { 346 $devise = prix_objets_devise_defaut($config); 347 } 348 348 } 349 349 … … 360 360 } 361 361 362 362 // Si PECL intl est présent on dermine le format de l'affichage de la devise selon la langue du contexte 363 363 if (function_exists('numfmt_create') and is_float($prix)) { 364 364 $fmt = numfmt_create($lang, NumberFormatter::CURRENCY); … … 426 426 } 427 427 428 $prix_source = sql_select( 429 'id_prix_objet,prix_total,titre', 430 'spip_prix_objets', 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') 428 if (isset($options['mode']) and !empty($options['mode'])) { 429 $mode = $options['mode']; 430 } 431 else { 432 include_spip('inc/config'); 433 $mode = lire_config('prix_objets/prix_par_objet_mode', 'global'); 434 } 435 436 if ($mode == 'prorata') { 437 $sequence = isset($options['sequence']) ? $options['sequence'] : ''; 438 $horaire = isset($options['horaire']) ? $options['horaire'] : ''; 439 $format = isset($options['date_format']) ? $options['date_format'] : ''; 440 441 if (!$sequence) { 442 if (isset($contexte['date_debut']) and 443 isset($contexte['date_fin']) and 444 include_spip('filtres/dates_outils') and 445 function_exists('dates_intervalle')) { 446 $sequence = dates_intervalle($contexte['date_debut'], $contexte['date_fin'], 0, -1, $horaire, $format); 447 } 448 else { 449 $sequence = array(); 450 } 451 } 452 453 $nr_elements_sequence = count($sequence); 454 $contexte['date_fin'] = $contexte['date_debut']; 455 } 456 else { 457 $nr_elements_sequence = 0; 458 } 459 460 $prix_source = sql_allfetsel( 461 'id_prix_objet,prix_total,titre', 462 'spip_prix_objets', 463 'id_prix_objet_source=0 AND objet LIKE ' . sql_quote(trim($objet)) . ' AND id_objet=' . $id_objet, 464 '', 465 array('rang_lien', 'titre', 'prix_ht') 434 466 ); 435 467 $prix_elements = array(); 436 468 // On parcours les extension pour chaque prix principal. 437 while ($data_source = sql_fetch($prix_source)) { 469 $dates_applicables = array(); 470 foreach ($prix_source as $index => $data_source) { 471 438 472 $id_prix_objet = $data_source['id_prix_objet']; 439 473 set_request('prix_total', $data_source['prix_total']); 440 474 $extensions = sql_allfetsel( 441 'extension,id_extension,titre', 442 'spip_prix_objets', 443 'id_prix_objet_source=' . $id_prix_objet); 475 'extension,id_extension,titre', 476 'spip_prix_objets', 477 'id_prix_objet_source=' . $id_prix_objet); 478 $prix = $fonction_prix('prix_objet', $id_prix_objet); 444 479 445 480 if (count($extensions) > 0) { 446 481 $applicables = array(); 482 447 483 $i = 0; 448 484 449 485 foreach ($extensions as $data_extension) { 450 $i++; 486 $id_extension = $data_extension['id_extension']; 487 451 488 if($extension = charger_fonction($data_extension['extension'], 'prix_objet/', TRUE)) { 452 if ($extension($data_extension['id_extension'], $contexte)) { 489 switch ($mode) { 490 case 'global': 491 if ($applicable = $extension($id_extension, $contexte, $mode)) { 492 $applicables[] = $applicable; 493 } 494 break; 495 case 'prorata': 496 if (is_array($sequence)) { 497 498 foreach ($sequence as $index => $element) { 499 $contexte['date_debut'] = $contexte['date_fin'] = $element; 500 //spip_log("element: $element", 'teste'); 501 //spip_log("id_extension: $id_extension", 'teste'); 502 if($applicable = $extension($id_extension, $contexte, $mode) and 503 $applicable == 1) { 504 $dates_applicables[$element][$id_extension][] = 1; 505 } 506 //spip_log("element: $element", 'teste'); 507 //spip_log(count($dates_applicables), 'teste'); 508 //spip_log($fonction_prix('prix_objet', $id_prix_objet), 'teste') 509 510 } 511 512 513 } 514 break; 515 } 516 } 517 else { 453 518 $applicables[] = 1; 454 519 } 455 } 456 else { 457 $applicables[] = 1; 458 } 459 } 460 // On choisit le premier prix applicable. 461 if (count($applicables) == $i) { 462 $prix = $fonction_prix('prix_objet', $id_prix_objet); 463 break; 464 } 465 } 466 else { 467 $prix = $fonction_prix('prix_objet', $id_prix_objet); 468 } 469 } 470 520 521 switch ($mode) { 522 case 'global': 523 // On choisit le premier prix applicable. 524 if (count($applicables) == $i) { 525 //$prix = $fonction_prix('prix_objet', $id_prix_objet); 526 break; 527 } 528 529 } 530 531 } 532 spip_log($dates_applicables, 'teste'); 533 534 535 if (is_array($dates_applicables[$id_prix_objet]) and 536 $sum = array_sum($dates_applicables[$id_prix_objet]) and 537 $sum > 0 and 538 $sum == count($extensions)) { 539 $prix_elements[$element] = $fonction_prix('prix_objet', $id_prix_objet); 540 unset($sequence[$index]); 541 spip_log($prix_elements, 'teste'); 542 } 543 } 544 545 } 546 if ($mode == "prorata") { 547 spip_log($prix_elements, 'teste'); 548 $nr_prix_prorata = count($prix_elements); 549 $sum_prix_prorata = array_sum($prix_elements); 550 551 if ($nr_prix_prorata == $nr_elements_sequence) { 552 if($nr_prix_prorata > 0) { 553 $prix = $sum_prix_prorata / $nr_prix_prorata; 554 } 555 else { 556 $prix = $sum_prix_prorata; 557 } 558 } 559 elseif ($nr_prix_prorata > 0) { 560 $prix = (($sum_prix_prorata / $nr_prix_prorata) + $prix) / 2; 561 } 562 } 471 563 472 564 // Permettre d'intervenir sur le prix
Note: See TracChangeset
for help on using the changeset viewer.