Browse Source

PSR et indentation

pull/18/head
Cerdic 4 weeks ago
parent
commit
cccca0a733
  1. 9
      action/abandonner_commande.php
  2. 37
      action/distribuer_commande.php
  3. 810
      action/editer_commande.php
  4. 110
      action/instituer_commande.php
  5. 118
      action/lier_commande.php
  6. 6
      action/supprimer_commande.php
  7. 102
      action/supprimer_detail_commande.php
  8. 145
      base/commandes.php
  9. 203
      commandes_administrations.php
  10. 427
      commandes_autorisations.php
  11. 530
      commandes_fonctions.php
  12. 1097
      commandes_pipelines.php
  13. 535
      formulaires/configurer_commandes.php
  14. 103
      formulaires/dater_commande.php
  15. 473
      formulaires/editer_commande.php
  16. 530
      formulaires/editer_commandes_detail.php
  17. 229
      formulaires/lier_commande.php
  18. 816
      inc/commandes.php
  19. 6
      inc/commandes_arrondir_quantite.php
  20. 59
      inc/commandes_echeances.php
  21. 10
      inc/commandes_reference.php
  22. 10
      inc/lier_commande_auteur.php
  23. 61
      notifications/commande_client.php
  24. 65
      notifications/commande_vendeur.php
  25. 15
      phpcs.xml.dist
  26. 8
      prix/commande.php
  27. 29
      prix/commandes_detail.php

9
action/abandonner_commande.php

@ -1,4 +1,5 @@
<?php
/**
* Action du plugin Commandes
*
@ -10,7 +11,7 @@
*/
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) {
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@ -32,7 +33,7 @@ if (!defined("_ECRIRE_INC_VERSION")) {
function action_abandonner_commande_dist($arg = null) {
// Si $arg n'est pas donné directement, le récupérer via _POST ou _GET
if (is_null($arg)){
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
@ -44,8 +45,8 @@ function action_abandonner_commande_dist($arg = null) {
spip_log("Commande $id_commande → abandon", 'commandes');
sql_updateq(
'spip_commandes',
array('statut' => 'abandonne'),
'id_commande = '.intval($id_commande)
['statut' => 'abandonne'],
'id_commande = ' . intval($id_commande)
);
// Retirer la commande si elle est en session
include_spip('inc/session');

37
action/distribuer_commande.php

@ -1,16 +1,18 @@
<?php
/**
* API d'édition du plugin Commandes
* API d'édition du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Editer
*/
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) { return;
}
/**
* Distribuer une commande : pour chaque ligne de la commande on appelle l'api distribuer
@ -21,33 +23,32 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
*
* @param int $id_commande
*/
function action_distribuer_commande_dist($id_commande){
if ($id_commande = intval($id_commande)
and $commande = sql_fetsel("*","spip_commandes","id_commande=".intval($id_commande))) {
function action_distribuer_commande_dist($id_commande) {
if (
$id_commande = intval($id_commande)
and $commande = sql_fetsel('*', 'spip_commandes', 'id_commande=' . intval($id_commande))
) {
// appeler un pipeline qui permet aux plugins peripheriques de gerer
// exemple creer a la volee un compte client si on est arrive jusqu'ici avec id_auteur=0 (nouveau client, workflow simplifie)
// un plugin peut aussi annuler la distribution pour la remettre a plus tard en retournant false
$commande = pipeline('commandes_pre_distribuer_commande',$commande);
$commande = pipeline('commandes_pre_distribuer_commande', $commande);
spip_log("action_distribuer_commande_dist distribuer la commande #$id_commande",'commandes');
spip_log("action_distribuer_commande_dist distribuer la commande #$id_commande", 'commandes');
if ($commande and $id_commande = $commande['id_commande']) {
if ($details = sql_allfetsel("*","spip_commandes_details","id_commande=".intval($id_commande)) ){
foreach ($details as $detail){
if ($details = sql_allfetsel('*', 'spip_commandes_details', 'id_commande=' . intval($id_commande))) {
foreach ($details as $detail) {
$objet = $detail['objet'];
if ($distribuer = charger_fonction($objet, "distribuer", true)){
if ($distribuer = charger_fonction($objet, 'distribuer', true)) {
$s = $distribuer($detail['id_objet'], $detail, $commande);
spip_log("action_distribuer_commande_dist distribuer commande #$id_commande detail : $objet #".$detail['id_objet']." -> $s",'commandes');
if ($s and in_array($s, array('attente','envoye','retour'))) {
sql_updateq('spip_commandes_details',array('statut' => $s), 'id_commandes_detail='.intval($detail['id_commandes_detail']));
spip_log("action_distribuer_commande_dist distribuer commande #$id_commande detail : $objet #" . $detail['id_objet'] . " -> $s", 'commandes');
if ($s and in_array($s, ['attente','envoye','retour'])) {
sql_updateq('spip_commandes_details', ['statut' => $s], 'id_commandes_detail=' . intval($detail['id_commandes_detail']));
}
}
}
}
}
}
}

810
action/editer_commande.php

@ -1,405 +1,405 @@
<?php
/**
* API d'édition du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Editer
*/
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Point d'entrée d'édition d'une commande
*
* On ne peut entrer que par un appel en fournissant `$id_commande`
* mais pas pas une url
*
* @uses commande_inserer()
* @uses commande_modifier()
*
* @param int $id_commande
* Identifiant de la commande
* @return array
* Identifiant de la commande et message d'erreur eventuel
*/
function action_editer_commande_dist($id_commande=null) {
// appel direct depuis une url interdit
if (is_null($id_commande)){
//$securiser_action = charger_fonction('securiser_action', 'inc');
//$id_commande = $securiser_action();
include_spip('inc/minipres');
echo minipres(_T('info_acces_interdit'));
die();
}
// si id_commande n'est pas un nombre, c'est une creation
if (!$id_commande = intval($id_commande)) {
$id_commande = commande_inserer(null,array('id_auteur'=>_request('id_auteur')));
}
if (!($id_commande = intval($id_commande))>0)
return array($id_commande,_L('echec enregistrement en base'));
// Enregistre l'envoi dans la BD
$err = commande_modifier($id_commande);
return array($id_commande,$err);
}
/**
* Crée une nouvelle commande et retourne son identifiant
*
* Les notifications par email sont traitées après l'insertion en base et l'appel des pipelines
*
* @uses commandes_notifier()
*
* @pipeline_appel pre_insertion
* @pipeline_appel post_insertion
* @param null $id_parent
* Paramètre inutilisé, présent pour compatibilité avec api modifier objet
* @param array $champs
* Couples des champs/valeurs par défaut
* @return int|bool
* - Identifiant de la commande si succès
* - False en cas d'erreur
*/
function commande_inserer($id_parent=null, $champs=array()) {
$id_commande = false;
// On insère seulement s'il y a un auteur correct
$id_auteur = 0;
if (isset($champs['id_auteur'])) {
$id_auteur = intval($champs['id_auteur']);
}
include_spip('inc/autoriser');
if (autoriser('commander','',0,$id_auteur)){
// La date de tout de suite
$champs['date'] = date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']);
// Le statut en cours par défaut
if (!isset($champs['statut'])) {
$champs['statut'] = 'encours';
}
// Envoyer aux plugins avant insertion
$champs = pipeline('pre_insertion',
array(
'args' => array(
'table' => 'spip_commandes',
),
'data' => $champs
)
);
// Si on veut insérer des échéances et que ce n'est pas déjà sérialisé, on sérialise TOUJOURS ce champ
if (isset($champs['echeances']) and @unserialize($champs['echeances']) === false) {
$champs['echeances'] = serialize($champs['echeances']);
}
// Insérer l'objet
$id_commande = sql_insertq("spip_commandes", $champs);
// La référence si elle n'est pas déjà donnée : on attend d'avoir l'id_commande pour pouvoir generer un numero unique
if (!isset($champs['reference'])) {
$commandes_reference = charger_fonction('commandes_reference', 'inc/');
$champs['reference'] = $commandes_reference($id_commande, $id_auteur=0);
sql_updateq('spip_commandes', array('reference' => $champs['reference']), 'id_commande=' . intval($id_commande));
}
// Envoyer aux plugins après insertion
pipeline('post_insertion',
array(
'args' => array(
'table' => 'spip_commandes',
'id_objet' => $id_commande
),
'data' => $champs
)
);
// Envoi des notifications par email
spip_log("inserer_commande : appel des notifications pour la commande $id_commande",'commandes.'._LOG_INFO);
include_spip('inc/commandes');
// c'est une creation : statut_ancien=''
commandes_notifier($id_commande, '');
}
return $id_commande;
}
/**
* Appelle les fonctions de modification d'une commande
*
* @uses objet_modifier_champs()
* @uses commande_instituer()
*
* @param int $id_commande
* Identifiant de la commande
* @param array|null $set
* Couples des champs/valeurs à modifier
* @return mixed|string $err
* Message d'erreur éventuel
*/
function commande_modifier($id_commande, $set=null) {
$err = '';
include_spip('inc/modifier');
include_spip('inc/filtres');
$c = collecter_requests(
// whitelist
objet_info('commande','champs_editables'),
// blacklist
array('date','statut'),
// donnees eventuellement fournies
$set
);
// Si on veut insérer des échéances et que ce n'est pas déjà sérialisé, on sérialise TOUJOURS ce champ
if (isset($c['echeances']) and @unserialize($c['echeances']) === false) {
$c['echeances'] = serialize($c['echeances']);
}
// Si l'objet est publie, invalider les caches et demander sa reindexation
if (objet_test_si_publie('commande',$id_commande)){
$invalideur = "id='id_commande/$id_commande'";
$indexation = true;
}
else {
$invalideur = "";
$indexation = false;
}
if ($err = objet_modifier_champs('commande', $id_commande,
array(
'data' => $set,
'nonvide' => array('statut' => _T('info_sans_statut')),
'invalideur' => $invalideur,
'indexation' => $indexation,
),
$c))
return $err;
// Modification de statut
$c = array();
foreach (array('id_auteur', 'date', 'statut',) as $champ)
$c[$champ] = _request($champ, $set);
$err = commande_instituer($id_commande, $c);
return $err;
}
/**
* Instituer une commande
*
* Modifie des éléments à part que sont l'auteur, la date, le statut
*
* @uses editer_commande_details()
* @uses commandes_notifier()
*
* @pipeline_appel pre_edition
* @pipeline_appel post_edition
* @param int $id_commande
* Identifiant de la commande
* @param array $c
* Couples champ/valeur à modifier
* @param bool $calcul_details
* (?) Inutilisé
* @return mixed|string
*/
function commande_instituer($id_commande, $c, $calcul_details=true){
include_spip('inc/autoriser');
include_spip('inc/modifier');
$row = sql_fetsel("statut, date, id_auteur", "spip_commandes", "id_commande=$id_commande");
$id_auteur = $row['id_auteur'];
$statut_ancien = $statut = $row['statut'];
$date_ancienne = $date = $row['date'];
$champs = array();
$d = isset($c['date']) ? $c['date'] : null;
$s = isset($c['statut']) ? $c['statut'] : $statut;
// On ne modifie le statut que si c'est autorisé
if ($s != $statut or ($d AND $d != $date)) {
//todo = donner l'autorisation a commandes_paypal_traitement_paypal
//if (autoriser('modifier', 'commande', $id_commande))
$statut = $champs['statut'] = $s;
//else
// spip_log("editer_commande $id_commande refus " . join(' ', $c),'commandes');
// Si on doit changer la date explicitement
if ($d){
$champs['date'] = $date = $d;
}
}
$champs['id_auteur'] = $id_auteur;
// Mettre à jour les dates de paiement ou d'envoi pour les statuts correspondants
if ($statut != $statut_ancien)
foreach (array('partiel'=>'paiement', 'paye'=>'paiement', 'envoye'=>'envoi') as $k=>$v)
if ($statut == $k)
$champs["date_$v"] = date('Y-m-d H:i:s');
// Envoyer aux plugins avant édition
$champs = pipeline(
'pre_edition',
array(
'args' => array(
'table' => 'spip_commandes',
'id_objet' => $id_commande,
'action' => 'instituer',
'statut_ancien' => $statut_ancien,
),
'data' => $champs
)
);
if (!count($champs)) return;
// Envoyer les modifications et calculer les héritages
editer_commande_details($id_commande, $champs, $calcul_details);
// Invalider les caches
include_spip('inc/invalideur');
suivre_invalideur("id='id_commande/$id_commande'");
include_spip('inc/commandes');
// distribuer la commande si payee
if ($statut != $statut_ancien
and $statut=='paye'
and in_array($statut_ancien,array('encours','attente','partiel','erreur','poubelle'))
and $distribuer_commande = charger_fonction('distribuer_commande','action',true)){
$distribuer_commande($id_commande);
}
spip_log("instituer_commande : flux post_edition pour la commande $id_commande",'commandes.'._LOG_INFO);
// Envoyer aux plugins après édition
pipeline(
'post_edition',
array(
'args' => array(
'table' => 'spip_commandes',
'id_objet' => $id_commande,
'action' => 'instituer',
'statut_ancien' => $statut_ancien,
),
'data' => $champs
)
);
// Envoi des notifications par email
if ($statut != $statut_ancien) {
spip_log("instituer_commande : appel des notifications pour la commande $id_commande",'commandes.'._LOG_INFO);
commandes_notifier($id_commande, $statut_ancien);
}
return ''; // pas d'erreur
}
/**
* Fabrique la requête d'institution de la commande
*
* Modifie la commande en calculant les dépendances des détails
*
* @param int $id_commande
* Identifiant de la commande
* @param array $champs
* Couples des champs/valeurs à modifier
* @param bool $cond
* (?) inutilisé
* @return void
*/
function editer_commande_details($id_commande, $champs, $cond=true) {
if (!$champs) return;
sql_updateq(table_objet_sql('commande'), $champs, "id_commande=$id_commande");
// Changer le statut des elements concernes ? (voir details)
/*
if ($cond) {
include_spip('inc/rubriques');
$postdate = ($GLOBALS['meta']["post_dates"] == "non" and isset($champs['date']) and (strtotime($champs['date']) < time())) ? $champs['date'] : false;
calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate);
}
*/
}
// Ci dessous, fonctions dépréciées gardées pour rétro-compatibilité
/**
* Enregistre une modification d'une commande
*
* @deprecated Alias de 'commande_modifier' pour rétro-compatibilité
* @uses commande_modifier()
*
* @param int $id_commande
* Identifiant de la commande
* @param array $c
* Couples des champs/valeurs modifiées
* @return mixed|string
*/
function revision_commande($id_commande, $c=false) {
return commande_modifier($id_commande, $c);
}
/**
* Crée une nouvelle commande
*
* @deprecated Alias de 'commande_inserer' pour rétro-compatibilité
* @uses commande_inserer()
*
* @param array $champs
* Couples des champs/valeurs par défaut
* @return
*/
function commande_insert($champs=array()){
return commande_inserer(null,$champs);
}
/**
* Appelle les fonctions de modification d'une commande
*
* @deprecated Alias de 'commande_modifier' pour rétro-compatibilité
* @uses commande_modifier()
*
* @param int $id_commande
* Identifiant de la commande
* @param array|null $set
* Couples des champs/valeurs à modifier
* @return
*/
function commande_set($id_commande, $set=null){
return commande_modifier($id_commande, $set);
}
/**
* Modifie des éléments à part que sont l'auteur, la date, le statut
*
* @deprecated Alias de 'commande_instituer' pour rétro-compatibilité
* @uses commande_instituer()
*
* @param int $id_commande
* Identifiant de la commande
* @param array $c
* Couples des champs/valeurs à modifier
* @param bool $calcul_details
* (?) Inutilisé
* @return
*/
function instituer_commande($id_commande, $c, $calcul_details=true){
return commande_instituer($id_commande, $c, $calcul_details);
}
?>
<?php
/**
* API d'édition du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Editer
*/
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Point d'entrée d'édition d'une commande
*
* On ne peut entrer que par un appel en fournissant `$id_commande`
* mais pas pas une url
*
* @param int $id_commande
* Identifiant de la commande
* @return array
* Identifiant de la commande et message d'erreur eventuel
* @uses commande_inserer()
* @uses commande_modifier()
*
*/
function action_editer_commande_dist($id_commande = null) {
// appel direct depuis une url interdit
if (is_null($id_commande)) {
//$securiser_action = charger_fonction('securiser_action', 'inc');
//$id_commande = $securiser_action();
include_spip('inc/minipres');
echo minipres(_T('info_acces_interdit'));
die();
}
// si id_commande n'est pas un nombre, c'est une creation
if (!$id_commande = intval($id_commande)) {
$id_commande = commande_inserer(null, ['id_auteur' => _request('id_auteur')]);
}
if (!($id_commande = intval($id_commande)) > 0) {
return [$id_commande, _L('echec enregistrement en base')];
}
// Enregistre l'envoi dans la BD
$err = commande_modifier($id_commande);
return [$id_commande, $err];
}
/**
* Crée une nouvelle commande et retourne son identifiant
*
* Les notifications par email sont traitées après l'insertion en base et l'appel des pipelines
*
* @param null $id_parent
* Paramètre inutilisé, présent pour compatibilité avec api modifier objet
* @param array $champs
* Couples des champs/valeurs par défaut
* @return int|bool
* - Identifiant de la commande si succès
* - False en cas d'erreur
* @uses commandes_notifier()
*
* @pipeline_appel pre_insertion
* @pipeline_appel post_insertion
*/
function commande_inserer($id_parent = null, $champs = []) {
$id_commande = false;
// On insère seulement s'il y a un auteur correct
$id_auteur = 0;
if (isset($champs['id_auteur'])) {
$id_auteur = intval($champs['id_auteur']);
}
include_spip('inc/autoriser');
if (autoriser('commander', '', 0, $id_auteur)) {
// La date de tout de suite
$champs['date'] = date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']);
// Le statut en cours par défaut
if (!isset($champs['statut'])) {
$champs['statut'] = 'encours';
}
// Envoyer aux plugins avant insertion
$champs = pipeline(
'pre_insertion',
[
'args' => [
'table' => 'spip_commandes',
],
'data' => $champs
]
);
// Si on veut insérer des échéances et que ce n'est pas déjà sérialisé, on sérialise TOUJOURS ce champ
if (isset($champs['echeances']) and @unserialize($champs['echeances']) === false) {
$champs['echeances'] = serialize($champs['echeances']);
}
// Insérer l'objet
$id_commande = sql_insertq('spip_commandes', $champs);
// La référence si elle n'est pas déjà donnée : on attend d'avoir l'id_commande pour pouvoir generer un numero unique
if (!isset($champs['reference'])) {
$commandes_reference = charger_fonction('commandes_reference', 'inc/');
$champs['reference'] = $commandes_reference($id_commande, $id_auteur = 0);
sql_updateq('spip_commandes', ['reference' => $champs['reference']], 'id_commande=' . intval($id_commande));
}
// Envoyer aux plugins après insertion
pipeline(
'post_insertion',
[
'args' => [
'table' => 'spip_commandes',
'id_objet' => $id_commande
],
'data' => $champs
]
);
// Envoi des notifications par email
spip_log("inserer_commande : appel des notifications pour la commande $id_commande", 'commandes.' . _LOG_INFO);
include_spip('inc/commandes');
// c'est une creation : statut_ancien=''
commandes_notifier($id_commande, '');
}
return $id_commande;
}
/**
* Appelle les fonctions de modification d'une commande
*
* @param int $id_commande
* Identifiant de la commande
* @param array|null $set
* Couples des champs/valeurs à modifier
* @return mixed|string $err
* Message d'erreur éventuel
* @uses commande_instituer()
*
* @uses objet_modifier_champs()
*/
function commande_modifier($id_commande, $set = null) {
$err = '';
include_spip('inc/modifier');
include_spip('inc/filtres');
$c = collecter_requests(// whitelist
objet_info('commande', 'champs_editables'), // blacklist
['date', 'statut'], // donnees eventuellement fournies
$set
);
// Si on veut insérer des échéances et que ce n'est pas déjà sérialisé, on sérialise TOUJOURS ce champ
if (isset($c['echeances']) and @unserialize($c['echeances']) === false) {
$c['echeances'] = serialize($c['echeances']);
}
// Si l'objet est publie, invalider les caches et demander sa reindexation
if (objet_test_si_publie('commande', $id_commande)) {
$invalideur = "id='id_commande/$id_commande'";
$indexation = true;
} else {
$invalideur = '';
$indexation = false;
}
if (
$err = objet_modifier_champs(
'commande',
$id_commande,
[
'data' => $set,
'nonvide' => ['statut' => _T('info_sans_statut')],
'invalideur' => $invalideur,
'indexation' => $indexation,
],
$c
)
) {
return $err;
}
// Modification de statut
$c = [];
foreach (['id_auteur', 'date', 'statut',] as $champ) {
$c[$champ] = _request($champ, $set);
}
$err = commande_instituer($id_commande, $c);
return $err;
}
/**
* Instituer une commande
*
* Modifie des éléments à part que sont l'auteur, la date, le statut
*
* @param int $id_commande
* Identifiant de la commande
* @param array $c
* Couples champ/valeur à modifier
* @param bool $calcul_details
* (?) Inutilisé
* @return mixed|string
* @uses editer_commande_details()
* @uses commandes_notifier()
*
* @pipeline_appel pre_edition
* @pipeline_appel post_edition
*/
function commande_instituer($id_commande, $c, $calcul_details = true) {
include_spip('inc/autoriser');
include_spip('inc/modifier');
$row = sql_fetsel('statut, date, id_auteur', 'spip_commandes', "id_commande=$id_commande");
$id_auteur = $row['id_auteur'];
$statut_ancien = $statut = $row['statut'];
$date_ancienne = $date = $row['date'];
$champs = [];
$d = isset($c['date']) ? $c['date'] : null;
$s = isset($c['statut']) ? $c['statut'] : $statut;
// On ne modifie le statut que si c'est autorisé
if ($s != $statut or ($d and $d != $date)) {
//todo = donner l'autorisation a commandes_paypal_traitement_paypal
//if (autoriser('modifier', 'commande', $id_commande))
$statut = $champs['statut'] = $s;
//else
// spip_log("editer_commande $id_commande refus " . join(' ', $c),'commandes');
// Si on doit changer la date explicitement
if ($d) {
$champs['date'] = $date = $d;
}
}
$champs['id_auteur'] = $id_auteur;
// Mettre à jour les dates de paiement ou d'envoi pour les statuts correspondants
if ($statut != $statut_ancien) {
foreach (['partiel' => 'paiement', 'paye' => 'paiement', 'envoye' => 'envoi'] as $k => $v) {
if ($statut == $k) {
$champs["date_$v"] = date('Y-m-d H:i:s');
}
}
}
// Envoyer aux plugins avant édition
$champs = pipeline('pre_edition', [
'args' => [
'table' => 'spip_commandes',
'id_objet' => $id_commande,
'action' => 'instituer',
'statut_ancien' => $statut_ancien,
],
'data' => $champs
]);
if (!count($champs)) {
return;
}
// Envoyer les modifications et calculer les héritages
editer_commande_details($id_commande, $champs, $calcul_details);
// Invalider les caches
include_spip('inc/invalideur');
suivre_invalideur("id='id_commande/$id_commande'");
include_spip('inc/commandes');
// distribuer la commande si payee
if (
$statut != $statut_ancien
and $statut == 'paye'
and in_array($statut_ancien, ['encours', 'attente', 'partiel', 'erreur', 'poubelle'])
and $distribuer_commande = charger_fonction('distribuer_commande', 'action', true)
) {
$distribuer_commande($id_commande);
}
spip_log("instituer_commande : flux post_edition pour la commande $id_commande", 'commandes.' . _LOG_INFO);
// Envoyer aux plugins après édition
pipeline('post_edition', [
'args' => [
'table' => 'spip_commandes',
'id_objet' => $id_commande,
'action' => 'instituer',
'statut_ancien' => $statut_ancien,
],
'data' => $champs
]);
// Envoi des notifications par email
if ($statut != $statut_ancien) {
spip_log("instituer_commande : appel des notifications pour la commande $id_commande", 'commandes.' . _LOG_INFO);
commandes_notifier($id_commande, $statut_ancien);
}
// pas d'erreur
return '';
}
/**
* Fabrique la requête d'institution de la commande
*
* Modifie la commande en calculant les dépendances des détails
*
* @param int $id_commande
* Identifiant de la commande
* @param array $champs
* Couples des champs/valeurs à modifier
* @param bool $cond
* (?) inutilisé
* @return void
*/
function editer_commande_details($id_commande, $champs, $cond = true) {
if (!$champs) {
return;
}
// Changer le statut des elements concernes ? (voir details)
sql_updateq(table_objet_sql('commande'), $champs, "id_commande=$id_commande");
/*
if ($cond) {
include_spip('inc/rubriques');
$postdate = ($GLOBALS['meta']["post_dates"] == "non" and isset($champs['date']) and (strtotime($champs['date']) < time())) ? $champs['date'] : false;
calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate);
}
*/
}
// Ci dessous, fonctions dépréciées gardées pour rétro-compatibilité
/**
* Enregistre une modification d'une commande
*
* @param int $id_commande
* Identifiant de la commande
* @param array $c
* Couples des champs/valeurs modifiées
* @return mixed|string
* @uses commande_modifier()
*
* @deprecated Alias de 'commande_modifier' pour rétro-compatibilité
*/
function revision_commande($id_commande, $c = false) {
return commande_modifier($id_commande, $c);
}
/**
* Crée une nouvelle commande
*
* @param array $champs
* Couples des champs/valeurs par défaut
* @return
* @deprecated Alias de 'commande_inserer' pour rétro-compatibilité
* @uses commande_inserer()
*
*/
function commande_insert($champs = []) {
return commande_inserer(null, $champs);
}
/**
* Appelle les fonctions de modification d'une commande
*
* @param int $id_commande
* Identifiant de la commande
* @param array|null $set
* Couples des champs/valeurs à modifier
* @return
* @uses commande_modifier()
*
* @deprecated Alias de 'commande_modifier' pour rétro-compatibilité
*/
function commande_set($id_commande, $set = null) {
return commande_modifier($id_commande, $set);
}
/**
* Modifie des éléments à part que sont l'auteur, la date, le statut
*
* @param int $id_commande
* Identifiant de la commande
* @param array $c
* Couples des champs/valeurs à modifier
* @param bool $calcul_details
* (?) Inutilisé
* @return
* @deprecated Alias de 'commande_instituer' pour rétro-compatibilité
* @uses commande_instituer()
*
*/
function instituer_commande($id_commande, $c, $calcul_details = true) {
return commande_instituer($id_commande, $c, $calcul_details);
}

110
action/instituer_commande.php

@ -1,51 +1,59 @@
<?php
/**
* Action du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Action
*/
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Change le statut d'une commande
*
* @example
* ```
* #URL_ACTION_AUTEUR{instituer_commande,#ID_COMMANDE-envoye,#SELF}
* ```
*
* @uses commande_instituer()
*
* @param $arg string
* arguments séparés par un charactère non alphanumérique
*
* - id_commande : identifiant de la commande
* - statut : nouveau statut
* @return void
*/
function action_instituer_commande($arg=null) {
// Si $arg n'est pas donné directement, le récupérer via _POST ou _GET
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
list($id_commande, $statut) = preg_split('/\W/', $arg);
if (!$statut) $statut = _request('statut_nouv'); // cas POST
if (!$statut) return; // impossible mais sait-on jamais
if ($id_commande = intval($id_commande)) {
spip_log("action_instituer_commande id_commande=$id_commande et statut=$statut",'commandes');
include_spip('action/editer_commande');
commande_instituer($id_commande, array('statut' => $statut));
}
}
?>
<?php
/**
* Action du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Action
*/
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Change le statut d'une commande
*
* @param $arg string
* arguments séparés par un charactère non alphanumérique
*
* - id_commande : identifiant de la commande
* - statut : nouveau statut
* @return void
* @example
* ```
* #URL_ACTION_AUTEUR{instituer_commande,#ID_COMMANDE-envoye,#SELF}
* ```
*
* @uses commande_instituer()
*
*/
function action_instituer_commande($arg = null) {
// Si $arg n'est pas donné directement, le récupérer via _POST ou _GET
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
list($id_commande, $statut) = preg_split('/\W/', $arg);
// cas POST
if (!$statut) {
$statut = _request('statut_nouv');
}
// impossible mais sait-on jamais
if (!$statut) {
return;
}
if ($id_commande = intval($id_commande)) {
spip_log("action_instituer_commande id_commande=$id_commande et statut=$statut", 'commandes');
include_spip('action/editer_commande');
commande_instituer($id_commande, ['statut' => $statut]);
}
}

118
action/lier_commande.php

@ -1,59 +1,59 @@
<?php
/**
* Action du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Action
*/
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* "Lie" une commande à un objet
*
* Attention : il n'y a pas de table de liens `spip_commandes_liens`,
* il ne s'agit donc pas à proprement parler d'associer une commande avec un objet.
* L'action fait appel à la fonction `lier_commande_{objet}` s'il y a un fichier éponyme dans `/inc`.
* Si l'objet est un auteur, la fonction appelée remplit le champ `id_auteur` dans la table `spip_commandes`.
*
* @example
* ```
* #URL_ACTION_AUTEUR{lier_commande,#ID_COMMANDE/#ID_AUTEUR/auteur,#SELF}
* ```
*
* @param $arg string
* arguments séparés par un slash `/`
*
* - id_commande : identifiant de la commande
* - id_objet : identifiant de l'objet
* - objet : type d'objet
* @return void
*/
function action_lier_commande_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
//id_commande/id_objet/objet
$arg = explode('/', $arg);
$id_commande =intval($arg[0]);
$id_objet =intval($arg[1]);
$objet = $arg[2];
if (is_null($objet))
$objet = "auteur";
if ($f=charger_fonction('lier_commande_'.$objet, 'inc')) {
$f($id_commande,$id_objet);
} else {
spip_log("action_lier_commande_".$objet."_dist $arg pas compris","commandes");
}
}
?>
<?php
/**
* Action du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Action
*/
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* "Lie" une commande à un objet
*
* Attention : il n'y a pas de table de liens `spip_commandes_liens`,
* il ne s'agit donc pas à proprement parler d'associer une commande avec un objet.
* L'action fait appel à la fonction `lier_commande_{objet}` s'il y a un fichier éponyme dans `/inc`.
* Si l'objet est un auteur, la fonction appelée remplit le champ `id_auteur` dans la table `spip_commandes`.
*
* @param $arg string
* arguments séparés par un slash `/`
*
* - id_commande : identifiant de la commande
* - id_objet : identifiant de l'objet
* - objet : type d'objet
* @return void
* @example
* ```
* #URL_ACTION_AUTEUR{lier_commande,#ID_COMMANDE/#ID_AUTEUR/auteur,#SELF}
* ```
*
*/
function action_lier_commande_dist($arg = null) {
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
//id_commande/id_objet/objet
$arg = explode('/', $arg);
$id_commande = intval($arg[0]);
$id_objet = intval($arg[1]);
$objet = $arg[2];
if (is_null($objet)) {
$objet = 'auteur';
}
if ($f = charger_fonction('lier_commande_' . $objet, 'inc')) {
$f($id_commande, $id_objet);
} else {
spip_log('action_lier_commande_' . $objet . "_dist $arg pas compris", 'commandes');
}
}

6
action/supprimer_commande.php

@ -1,4 +1,5 @@
<?php
/**
* Action du plugin Commandes
*
@ -49,8 +50,8 @@ function action_supprimer_commande_dist($arg = null) {
spip_log("Commande $id_commande → poubelle", 'commandes');
sql_updateq(
'spip_commandes',
array('statut' => 'poubelle'),
'id_commande = '.intval($id_commande)
['statut' => 'poubelle'],
'id_commande = ' . intval($id_commande)
);
// Retirer la commande si elle est en session
include_spip('inc/session');
@ -60,5 +61,4 @@ function action_supprimer_commande_dist($arg = null) {
}
pipeline('commande_supprimer', ['id_commande' => $id_commande]);
}

102
action/supprimer_detail_commande.php

@ -1,51 +1,51 @@
<?php
/**
* Action du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Action
*/
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Supprime un détail d'une commande, dans la table `spip_commandes_details`
*
* @example
* ```
* #URL_ACTION_AUTEUR{supprimer_detail_commande,#ID_COMMANDE-#ID_COMMANDES_DETAIL,#SELF}
* ```
*
* @uses commandes_supprimer_detail()
*
* @param $arg string
* arguments séparés par un charactère non alphanumérique
*
* - id_commande : identifiant de la commande
* - id_commandes_details : identifiant du détail
* @return void
*/
function action_supprimer_detail_commande($arg=null) {
// Si $arg n'est pas donné directement, le récupérer via _POST ou _GET
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
list($id_commande, $id_detail) = preg_split('/[\W]/', $arg);
if (
$id_commande = intval($id_commande)
and $id_detail = intval($id_detail)
) {
include_spip('inc/commandes');
commandes_supprimer_detail($id_commande,$id_detail);
}
}
?>
<?php
/**
* Action du plugin Commandes
*
* @plugin Commandes
* @copyright 2014
* @author Ateliers CYM, Matthieu Marcillaud, Les Développements Durables
* @licence GPL 3
* @package SPIP\Commandes\Action
*/
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Supprime un détail d'une commande, dans la table `spip_commandes_details`
*
* @param $arg string
* arguments séparés par un charactère non alphanumérique
*
* - id_commande : identifiant de la commande
* - id_commandes_details : identifiant du détail
* @return void
* @example
* ```
* #URL_ACTION_AUTEUR{supprimer_detail_commande,#ID_COMMANDE-#ID_COMMANDES_DETAIL,#SELF}
* ```
*
* @uses commandes_supprimer_detail()
*
*/
function action_supprimer_detail_commande($arg = null) {
// Si $arg n'est pas donné directement, le récupérer via _POST ou _GET
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
list($id_commande, $id_detail) = preg_split('/[\W]/', $arg);
if (
$id_commande = intval($id_commande)
and $id_detail = intval($id_detail)
) {
include_spip('inc/commandes');
commandes_supprimer_detail($id_commande, $id_detail);
}
}

145
base/commandes.php

@ -9,6 +9,7 @@
* @licence GPL 3
* @package SPIP\Commandes\Pipelines
*/
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
@ -48,10 +49,10 @@ function commandes_declarer_tables_interfaces($interfaces) {
function commandes_declarer_tables_objets_sql($tables) {
// Table principale des commandes
$tables['spip_commandes'] = array(
$tables['spip_commandes'] = [
'type' => 'commande',
'principale' => "oui",
'field' => array(
'principale' => 'oui',
'field' => [
'id_commande' => 'bigint(21) not null',
'reference' => 'varchar(255) not null default ""',
'source' => 'varchar(255) not null default ""', // par exemple "panier#xx" "achatrapide"...
@ -67,27 +68,27 @@ function commandes_declarer_tables_objets_sql($tables) {
'echeances_date_debut' => 'datetime not null default "0000-00-00 00:00:00"', // date de debut des echeances, eventuellement si dans le futur (facultatif)
'echeances' => 'text not null default ""', // tableau sérialisé décrivant les échéances
'taxe_exoneree_raison' => 'varchar(25) not null default ""',
),
'key' => array(
"PRIMARY KEY" => "id_commande",
"KEY statut" => "statut",
"KEY id_auteur" => "id_auteur",
),
'date' => "date",
],
'key' => [
'PRIMARY KEY' => 'id_commande',
'KEY statut' => 'statut',
'KEY id_auteur' => 'id_auteur',
],
'date' => 'date',
'titre' => "reference AS titre, '' AS lang",
'champs_editables' => array('reference', 'id_auteur', 'date_paiement', 'date_envoi', 'mode', 'bank_uid', 'taxe_exoneree_raison'),
'champs_versionnes' => array('reference', 'id_auteur', 'date', 'date_paiement', 'date_envoi', 'bank_uid', 'taxe_exoneree_raison'),
'rechercher_champs' => array('reference' => 8, 'id_commande' => 8),
'rechercher_jointures' => array(
'auteur' => array('nom' => 1),
'commandes_detail' => array('descriptif' => 4)
),
'tables_jointures' => array('spip_commandes_liens'),
'join' => array(
'champs_editables' => ['reference', 'id_auteur', 'date_paiement', 'date_envoi', 'mode', 'bank_uid', 'taxe_exoneree_raison'],
'champs_versionnes' => ['reference', 'id_auteur', 'date', 'date_paiement', 'date_envoi', 'bank_uid', 'taxe_exoneree_raison'],
'rechercher_champs' => ['reference' => 8, 'id_commande' => 8],
'rechercher_jointures' => [
'auteur' => ['nom' => 1],
'commandes_detail' => ['descriptif' => 4]
],
'tables_jointures' => ['spip_commandes_liens'],
'join' => [
'id_commande' => 'id_commande',
'id_auteur' => 'id_auteur',
),
'statut_textes_instituer' => array(
],
'statut_textes_instituer' => [
'encours' => 'commandes:statut_encours',
'attente' => 'commandes:statut_attente',
'partiel' => 'commandes:statut_partiel',
@ -98,8 +99,8 @@ function commandes_declarer_tables_objets_sql($tables) {
'erreur' => 'commandes:statut_erreur',
'abandonne' => 'commandes:statut_abandonne',
'poubelle' => 'commandes:statut_poubelle',
),
'statut_images' => array(
],
'statut_images' => [
'encours' => 'puce-commande-encours.png',
'attente' => 'puce-commande-attente.png',
'partiel' => 'puce-commande-partiel.png',
@ -110,16 +111,16 @@ function commandes_declarer_tables_objets_sql($tables) {
'erreur' => 'puce-commande-erreur.png',
'abandonne' => 'puce-commande-abandonne.png',
'poubelle' => 'puce-commande-poubelle.png',
),
'statut' => array(
array(
],
'statut' => [
[
'champ' => 'statut',
'publie' => 'encours,attente,partiel,paye,envoye,retour,retour_partiel',
'previsu' => 'encours,attente,partiel,paye,envoye,retour,retour_partiel',
'post_date' => 'date',
'exception' => array('statut', 'tout')
)
),
'exception' => ['statut', 'tout']
]
],
'texte_changer_statut' => 'commandes:texte_changer_statut_commande',
'texte_creer' => 'commandes:commande_creer',
'texte_objets' => 'commandes:commandes_titre',
@ -129,14 +130,14 @@ function commandes_declarer_tables_objets_sql($tables) {
'info_aucun_objet' => 'commandes:info_aucun_commande',
'info_1_objet' => 'commandes:info_1_commande',
'info_nb_objets' => 'commandes:info_nb_commandes',
);
];
// Détails d'une commande
$tables['spip_commandes_details'] = array(
$tables['spip_commandes_details'] = [
'type' => 'commandes_detail',
'principale' => 'oui',
'page' => false,
'field' => array(
'field' => [
'id_commandes_detail' => 'bigint(21) not null',
'id_commande' => 'bigint(21) not null default 0',
'descriptif' => 'text not null default ""',
@ -149,37 +150,37 @@ function commandes_declarer_tables_objets_sql($tables) {
'objet' => 'varchar(25) not null default ""',
'id_objet' => 'bigint(21) not null default 0',
'maj' => 'timestamp'
),
'key' => array(
],
'key' => [
'PRIMARY KEY' => 'id_commandes_detail',
'KEY id_commande' => 'id_commande'
),
'join' => array(
],
'join' => [
'id_commandes_detail' => 'id_commandes_detail',
'id_commande' => 'id_commande'
),
],
'titre' => 'descriptif as titre, "" as lang',
'champs_editables' => array('id_commande', 'descriptif', 'quantite', 'prix_unitaire_ht', 'reduction', 'taxe', 'objet', 'id_objet'),
'champs_versionnes' => array('id_commande', 'descriptif', 'quantite', 'prix_unitaire_ht', 'reduction', 'taxe', 'objet', 'id_objet'),
'rechercher_champs' => array('descriptif' => 8),
'statut' => array(
array(
'champs_editables' => ['id_commande', 'descriptif', 'quantite', 'prix_unitaire_ht', 'reduction', 'taxe', 'objet', 'id_objet'],
'champs_versionnes' => ['id_commande', 'descriptif', 'quantite', 'prix_unitaire_ht', 'reduction', 'taxe', 'objet', 'id_objet'],
'rechercher_champs' => ['descriptif' => 8],
'statut' => [
[
'champ' => 'statut',
'publie' => 'attente,envoye,retour',
'previsu' => 'attente,envoye,retour',
'exception' => array('statut', 'tout')
)
),
'statut_textes_instituer' => array(
'attente' => 'commandes:statut_attente',
'envoye' => 'commandes:statut_envoye',
'retour' => 'commandes:statut_retour',
),
'statut_images' => array(
'attente' => 'puce-commande-attente.png',
'envoye' => 'puce-commande-envoye.png',
'retour' => 'puce-commande-retour.png',
),
'exception' => ['statut', 'tout']
]
],
'statut_textes_instituer' => [
'attente' => 'commandes:statut_attente',
'envoye' => 'commandes:statut_envoye',
'retour' => 'commandes:statut_retour',
],
'statut_images' => [
'attente' => 'puce-commande-attente.png',
'envoye' => 'puce-commande-envoye.png',
'retour' => 'puce-commande-retour.png',
],
'texte_ajouter' => 'commandes:detail_ajouter',
'texte_changer_statut' => 'commandes:texte_changer_statut_commande_detail',
'texte_creer' => 'commandes:detail_creer',
@ -190,7 +191,7 @@ function commandes_declarer_tables_objets_sql($tables) {
'info_aucun_objet' => 'commandes:info_aucun_detail',
'info_1_objet' => 'commandes:info_1_detail',
'info_nb_objets' => 'commandes:info_nb_details',
);
];
// Jointures auto sur les commandes pour tous les objets
$tables[]['tables_jointures'][] = 'commandes_liens';
@ -206,23 +207,23 @@ function commandes_declarer_tables_objets_sql($tables) {
* @return array Retourne le tableau des tables auxiliaires possiblement modifié
* */
function commandes_declarer_tables_auxiliaires($tables_auxiliaires) {
$spip_commandes_liens = array(
"id_commande" => "bigint(21) DEFAULT '0' NOT NULL",
"id_objet" => "bigint(21) DEFAULT '0' NOT NULL",
"objet" => "VARCHAR (50) DEFAULT '' NOT NULL"
);
$spip_commandes_liens = [
'id_commande' => "bigint(21) DEFAULT '0' NOT NULL",
'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
'objet' => "VARCHAR (50) DEFAULT '' NOT NULL"
];
$spip_commandes_liens_key = array(
"PRIMARY KEY" => "id_commande,id_objet,objet",
"KEY id_commande" => "id_commande",
"KEY id_objet" => "id_objet",
"KEY objet" => "objet",
);
$spip_commandes_liens_key = [
'PRIMARY KEY' => 'id_commande,id_objet,objet',
'KEY id_commande' => 'id_commande',
'KEY id_objet' => 'id_objet',
'KEY objet' => 'objet',
];
$tables_auxiliaires['spip_commandes_liens'] = array(
$tables_auxiliaires['spip_commandes_liens'] = [
'field' => &$spip_commandes_liens,
'key' => &$spip_commandes_liens_key
);
];
return $tables_auxiliaires;
}
@ -240,8 +241,8 @@ function commandes_declarer_tables_auxiliaires($tables_auxiliaires) {
*/
function inc_rechercher_joints_commande_auteur_dist($table, $table_liee, $ids, $serveur) {
if (!autoriser('voir', 'commande')) {
return array("id_commande", "id_auteur", array());
return ['id_commande', 'id_auteur', []];
}
$s = sql_select("id_commande, id_auteur", "spip_commandes", sql_in("id_auteur", $ids), '', '', '', '', $serveur);
return array("id_commande", "id_auteur", $s);
$s = sql_select('id_commande, id_auteur', 'spip_commandes', sql_in('id_auteur', $ids), '', '', '', '', $serveur);
return ['id_commande', 'id_auteur', $s];
}

203
commandes_administrations.php

@ -9,6 +9,7 @@
* @licence GPL 3
* @package SPIP\Commandes\Installation
*/
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
@ -29,139 +30,139 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function commandes_upgrade($nom_meta_base_version, $version_cible) {
include_spip('commandes_fonctions');
include_spip('inc/config');
$maj = array();
$maj = [];
$config = lire_config('commandes');
if (!is_array($config)) {
$config = array();
$config = [];
}
$id_webmestre = commandes_id_premier_webmestre();
$config = array_merge(array(
'duree_vie' => '',
'activer' => '',
'quand' => array_keys(commandes_lister_statuts()),
'expediteur' => 'webmaster',
'expediteur_webmaster' => $id_webmestre,
'expediteur_administrateur' => '',
'expediteur_email' => '',
'vendeur' => 'webmaster',
'vendeur_webmaster' => $id_webmestre,
'vendeur_administrateur' => '',
'vendeur_email' => '',
'client' => 'on'
), $config);
$maj['create'] = array(
array(
'maj_tables', array('spip_commandes', 'spip_commandes_details', 'spip_commandes_liens'),
),
array(