Completed
Push — master ( 9d3fbd...af269e )
by Michael
09:48
created

OledrionOledrion_commandsHandler::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 25 and the first side effect is on line 23.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
/*
3
 You may not change or alter any portion of this comment or credits
4
 of supporting developers from this source code or any supporting source code
5
 which is considered copyrighted (c) material of the original comment or credit authors.
6
7
 This program is distributed in the hope that it will be useful,
8
 but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
*/
11
12
/**
13
 * oledrion
14
 *
15
 * @copyright   {@link https://xoops.org/ XOOPS Project}
16
 * @license     {@link http://www.fsf.org/copyleft/gpl.html GNU public license}
17
 * @author      Hervé Thouzard (http://www.herve-thouzard.com/)
18
 */
19
20
/**
21
 * Gestion des commandes clients
22
 */
23
require_once __DIR__ . '/classheader.php';
24
25
define('OLEDRION_STATE_NOINFORMATION', 0); // Pas encore d'informations sur la commande
26
define('OLEDRION_STATE_VALIDATED', 1); // Commande validée par la passerelle de paiement
27
define('OLEDRION_STATE_PENDING', 2); // En attente
28
define('OLEDRION_STATE_FAILED', 3); // Echec
29
define('OLEDRION_STATE_CANCELED', 4); // Annulée
30
define('OLEDRION_STATE_FRAUD', 5); // Fraude
31
define('OLEDRION_STATE_PACKED', 6);
32
define('OLEDRION_STATE_SUBMITED', 7);
33
define('OLEDRION_STATE_DELIVERYED', 8);
34
35
/**
36
 * Class Oledrion_commands
37
 */
38
class Oledrion_commands extends Oledrion_Object
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
39
{
40
    /**
41
     * constructor
42
     *
43
     * normally, this is called from child classes only
44
     *
45
     * @access public
46
     */
47
    public function __construct()
48
    {
49
        $this->initVar('cmd_id', XOBJ_DTYPE_INT, null, false);
50
        $this->initVar('cmd_uid', XOBJ_DTYPE_INT, null, false);
51
        $this->initVar('cmd_date', XOBJ_DTYPE_TXTBOX, null, false);
52
        $this->initVar('cmd_create', XOBJ_DTYPE_INT, null, false);
53
        $this->initVar('cmd_state', XOBJ_DTYPE_INT, null, false);
54
        $this->initVar('cmd_ip', XOBJ_DTYPE_TXTBOX, null, false);
55
        $this->initVar('cmd_lastname', XOBJ_DTYPE_TXTBOX, null, false);
56
        $this->initVar('cmd_firstname', XOBJ_DTYPE_TXTBOX, null, false);
57
        $this->initVar('cmd_adress', XOBJ_DTYPE_TXTAREA, null, false);
58
        $this->initVar('cmd_zip', XOBJ_DTYPE_TXTBOX, null, false);
59
        $this->initVar('cmd_town', XOBJ_DTYPE_TXTBOX, null, false);
60
        $this->initVar('cmd_country', XOBJ_DTYPE_TXTBOX, null, false);
61
        $this->initVar('cmd_telephone', XOBJ_DTYPE_TXTBOX, null, false);
62
        $this->initVar('cmd_mobile', XOBJ_DTYPE_TXTBOX, null, false);
63
        $this->initVar('cmd_email', XOBJ_DTYPE_TXTBOX, null, false);
64
        $this->initVar('cmd_articles_count', XOBJ_DTYPE_INT, null, false);
65
        $this->initVar('cmd_total', XOBJ_DTYPE_TXTBOX, null, false);
66
        $this->initVar('cmd_shipping', XOBJ_DTYPE_TXTBOX, null, false);
67
        $this->initVar('cmd_packing_price', XOBJ_DTYPE_TXTBOX, null, false);
68
        $this->initVar('cmd_bill', XOBJ_DTYPE_INT, null, false);
69
        $this->initVar('cmd_password', XOBJ_DTYPE_TXTBOX, null, false);
70
        $this->initVar('cmd_text', XOBJ_DTYPE_TXTAREA, null, false);
71
        $this->initVar('cmd_cancel', XOBJ_DTYPE_TXTBOX, null, false);
72
        $this->initVar('cmd_comment', XOBJ_DTYPE_TXTAREA, null, false);
73
        $this->initVar('cmd_vat_number', XOBJ_DTYPE_TXTAREA, null, false);
74
        $this->initVar('cmd_packing', XOBJ_DTYPE_TXTBOX, null, false);
75
        $this->initVar('cmd_packing_id', XOBJ_DTYPE_INT, null, false);
76
        $this->initVar('cmd_location', XOBJ_DTYPE_TXTBOX, null, false);
77
        $this->initVar('cmd_location_id', XOBJ_DTYPE_INT, null, false);
78
        $this->initVar('cmd_delivery', XOBJ_DTYPE_TXTBOX, null, false);
79
        $this->initVar('cmd_delivery_id', XOBJ_DTYPE_INT, null, false);
80
        $this->initVar('cmd_payment', XOBJ_DTYPE_TXTBOX, null, false);
81
        $this->initVar('cmd_payment_id', XOBJ_DTYPE_INT, null, false);
82
        $this->initVar('cmd_status', XOBJ_DTYPE_INT, null, false);
83
        $this->initVar('cmd_track', XOBJ_DTYPE_TXTBOX, null, false);
84
        $this->initVar('cmd_gift', XOBJ_DTYPE_TXTBOX, null, false);
85
    }
86
87
    /**
88
     * Retourne les éléments du produits formatés pour affichage
89
     *
90
     * @param  string $format Le format à utiliser
91
     * @return array  Les informations formatées
92
     */
93
    public function toArray($format = 's')
94
    {
95
        $ret = array();
0 ignored issues
show
Unused Code introduced by
$ret is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
96
        $ret = parent::toArray($format);
97
        require_once XOOPS_ROOT_PATH . '/class/xoopslists.php';
98
        $countries                           = array();
0 ignored issues
show
Unused Code introduced by
$countries is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
99
        $countries                           = XoopsLists::getCountryList();
100
        $oledrion_Currency                   = Oledrion_Currency::getInstance();
101
        $ret['cmd_total_fordisplay']         = $oledrion_Currency->amountForDisplay($this->getVar('cmd_total')); // Montant TTC de la commande
102
        $ret['cmd_shipping_fordisplay']      = $oledrion_Currency->amountForDisplay($this->getVar('cmd_shipping')); // Montant TTC des frais de port
103
        $ret['cmd_packing_price_fordisplay'] = $oledrion_Currency->amountForDisplay($this->getVar('cmd_packing_price'));
104
        $ret['cmd_text_fordisplay']          = nl2br($this->getVar('cmd_text')); // Liste des réductions accordées
105
        if (isset($countries[$this->getVar('cmd_country')])) { // Libellé du pays de l'acheteur
106
            $ret['cmd_country_label'] = $countries[$this->getVar('cmd_country')];
107
        }
108
        if ($this->getVar('cmd_uid') > 0) {
109
            $ret['cmd_uname'] = XoopsUser::getUnameFromId($this->getVar('cmd_uid'));
110
        }
111
        $ret['cmd_create_date'] = formatTimestamp($this->getVar('cmd_create'), _MEDIUMDATESTRING);
112
113
        return $ret;
114
    }
115
}
116
117
/**
118
 * Class OledrionOledrion_commandsHandler
119
 */
120
class OledrionOledrion_commandsHandler extends Oledrion_XoopsPersistableObjectHandler
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
121
{
122
    /**
123
     * OledrionOledrion_commandsHandler constructor.
124
     * @param XoopsDatabase|null $db
125
     */
126
    public function __construct(XoopsDatabase $db)
127
    { //                        Table                   Classe           Id
128
        parent::__construct($db, 'oledrion_commands', 'oledrion_commands', 'cmd_id');
129
    }
130
131
    /**
132
     * Indique si c'est la première commande d'un client
133
     *
134
     * @param  integer $uid Identifiant de l'utilisateur
135
     * @return boolean Indique si c'est le cas ou pas
136
     */
137
    public function isFirstCommand($uid = 0)
138
    {
139
        if ($uid == 0) {
140
            $uid = OledrionUtility::getCurrentUserID();
141
        }
142
        $critere = new Criteria('cmd_uid', (int)$uid, '=');
143
        if ($this->getCount($critere) > 0) {
144
            return true;
145
        } else {
146
            return false;
147
        }
148
    }
149
150
    /**
151
     * Indique si un produit a déajà été acheté par un utilisateur
152
     *
153
     * @param  integer $uid       Identifiant de l'utilisateur
154
     * @param  integer $productId Identifiant du produit
155
     * @return boolean Indique si c'est le cas ou pas
0 ignored issues
show
Documentation introduced by
Should the return type not be integer|boolean?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
156
     */
157
    public function productAlreadyBought($uid = 0, $productId = 0)
158
    {
159
        if ($uid == 0) {
160
            $uid = OledrionUtility::getCurrentUserID();
161
        }
162
        $sql    = 'SELECT Count(*) AS cpt FROM ' . $this->db->prefix('oledrion_caddy') . ' c, ' . $this->db->prefix('oledrion_commands') . ' f WHERE c.caddy_product_id = ' . (int)$productId . ' AND c.caddy_cmd_id = f.cmd_id AND f.cmd_uid = ' . (int)$uid;
163
        $result = $this->db->query($sql);
164
        if (!$result) {
165
            return 0;
166
        }
167
        list($count) = $this->db->fetchRow($result);
168
        if ($count > 0) {
169
            return true;
170
        } else {
171
            return false;
172
        }
173
    }
174
175
    /**
176
     * Mise à jour des stocks pour chaque produit composant la commande
177
     *
178
     * @param  object $order La commande à traiter
179
     * @return void
0 ignored issues
show
Documentation introduced by
Should the return type not be boolean?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
180
     */
181
    public function updateStocks($order)
182
    {
183
        global $h_oledrion_caddy, $h_oledrion_products, $h_oledrion_persistent_cart;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
184
        $orderId = $order->getVar('cmd_id');
185
        // Recherche de tous les produits du caddy
186
        $caddy  = $h_oledrion_caddy->getCaddyFromCommand($orderId);
187
        $tblTmp = $tblProducts = array();
0 ignored issues
show
Unused Code introduced by
$tblProducts is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
188
        foreach ($caddy as $item) {
189
            $tblTmp[] = $item->getVar('caddy_product_id');
190
        }
191
        // Chargement de tous les produits
192
        $critere     = new Criteria('product_id', '(' . implode(',', $tblTmp) . ')', 'IN');
193
        $tblProducts = $h_oledrion_products->getObjects($critere, true);
194
        // Boucle sur le caddy pour mettre à jour les quantités
195
        foreach ($caddy as $item) {
196
            if (isset($tblProducts[$item->getVar('caddy_product_id')])) {
197
                $product = $tblProducts[$item->getVar('caddy_product_id')];
198
                $h_oledrion_products->decreaseStock($product, $item->getVar('caddy_qte'));
199
                $h_oledrion_products->verifyLowStock($product); // Vérification du stock d'alerte
200
                $h_oledrion_persistent_cart->deleteUserProduct($item->getVar('caddy_product_id'), $order->getVar('cmd_uid'));
201
            }
202
        }
203
204
        return true;
205
    }
206
207
    /**
208
     * Retourne la liste des URLs de téléchargement liés à une commande
209
     *
210
     * @param  object|Oledrion_commands $order La commande en question
211
     * @return array                    Les URL
212
     */
213
    public function getOrderUrls(Oledrion_commands $order)
214
    {
215
        global $h_oledrion_caddy, $h_oledrion_products;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
216
        $retval = array();
217
        // Recherche des produits du caddy associés à cette commande
218
        $carts = $productsList = $products = array();
0 ignored issues
show
Unused Code introduced by
$products is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
Unused Code introduced by
$carts is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
219
        $carts = $h_oledrion_caddy->getObjects(new Criteria('caddy_cmd_id', $order->getVar('cmd_id'), '='));
220
        foreach ($carts as $item) {
221
            $productsList[] = $item->getVar('caddy_product_id');
222
        }
223
        if (count($productsList) > 0) {
224
            $products = $h_oledrion_products->getObjects(new Criteria('product_id', '(' . implode(',', $productsList) . ')', 'IN'), true);
225
            if (count($products) > 0) {
226
                foreach ($carts as $item) {
227
                    $produit = null;
0 ignored issues
show
Unused Code introduced by
$produit is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
228
                    if (isset($products[$item->getVar('caddy_product_id')])) {
229
                        $produit = $products[$item->getVar('caddy_product_id')];
230
                        if (xoops_trim($produit->getVar('product_download_url')) != '') {
231
                            $retval[] = OLEDRION_URL . 'download.php?download_id=' . $item->getVar('caddy_pass');
232
                        }
233
                    }
234
                }
235
            }
236
        }
237
238
        return $retval;
239
    }
240
241
    /**
242
     * Envoi du mail chargé de prévenir le client et le magasin qu'une commande est validée
243
     *
244
     * @param object|Oledrion_commands $order   La commande en question
245
     * @param string                   $comment Optionel, un commentaire pour le webmaster
246
     */
247
    public function notifyOrderValidated(Oledrion_commands $order, $comment = '')
248
    {
249
        global $xoopsConfig;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
250
        $msg                       = array();
251
        $Urls                      = array();
0 ignored issues
show
Unused Code introduced by
$Urls is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
252
        $Urls                      = $this->getOrderUrls($order); // On récupère les URL des fichiers à télécharger
253
        $msg['ADDITIONAL_CONTENT'] = '';
254
        $msg['NUM_COMMANDE']       = $order->getVar('cmd_id');
255
        $msg['COMMENT']            = $comment;
256
        if (count($Urls) > 0) {
257
            $msg['ADDITIONAL_CONTENT'] = _OLEDRION_YOU_CAN_DOWNLOAD . "\n" . implode("\n", $Urls);
258
        }
259
        OledrionUtility::sendEmailFromTpl('command_shop_verified.tpl', OledrionUtility::getEmailsFromGroup(OledrionUtility::getModuleOption('grp_sold')), _OLEDRION_GATEWAY_VALIDATED, $msg);
260
        OledrionUtility::sendEmailFromTpl('command_client_verified.tpl', $order->getVar('cmd_email'), sprintf(_OLEDRION_GATEWAY_VALIDATED, $xoopsConfig['sitename']), $msg);
261
    }
262
263
    /**
264
     * Validation d'une commande et mise à jour des stocks
265
     *
266
     * @param  object|Oledrion_commands $order   La commande à traiter
267
     * @param  string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
268
     * @return bool                     Indique si la validation de la commande s'est bien faite ou pas
269
     */
270
    public function validateOrder(Oledrion_commands $order, $comment = '')
271
    {
272
        $retval = false;
0 ignored issues
show
Unused Code introduced by
$retval is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
273
        $order->setVar('cmd_state', OLEDRION_STATE_VALIDATED);
274
        $order->setVar('cmd_comment', $comment);
275
        $retval = $this->insert($order, true);
276
        if ($retval) {
277
            $this->updateStocks($order);
278
            // B.R. Validation emails redundant since order emails now sent @gateway (paypal) validation
279
            // B.R. $this->notifyOrderValidated($order, $comment);
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
280
        }
281
282
        return $retval;
283
    }
284
285
    /**
286
     * pack d'une commande et mise à jour des stocks
287
     *
288
     * @param  object|Oledrion_commands $order   La commande à traiter
289
     * @param  string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
290
     * @return bool                     Indique si la validation de la commande s'est bien faite ou pas
291
     */
292 View Code Duplication
    public function packOrder(Oledrion_commands $order, $comment = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
293
    {
294
        $retval = false;
0 ignored issues
show
Unused Code introduced by
$retval is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
295
        $order->setVar('cmd_state', OLEDRION_STATE_PACKED);
296
        $order->setVar('cmd_comment', $comment);
297
        $retval = $this->insert($order, true);
298
299
        return $retval;
300
    }
301
302
    /**
303
     * submit d'une commande et mise à jour des stocks
304
     *
305
     * @param  object|Oledrion_commands $order   La commande à traiter
306
     * @param  string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
307
     * @return bool                     Indique si la validation de la commande s'est bien faite ou pas
308
     */
309 View Code Duplication
    public function submitOrder(Oledrion_commands $order, $comment = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
310
    {
311
        $retval = false;
0 ignored issues
show
Unused Code introduced by
$retval is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
312
        $order->setVar('cmd_state', OLEDRION_STATE_SUBMITED);
313
        $order->setVar('cmd_comment', $comment);
314
        $retval = $this->insert($order, true);
315
316
        return $retval;
317
    }
318
319
    /**
320
     * delivery d'une commande et mise à jour des stocks
321
     *
322
     * @param  object|Oledrion_commands $order   La commande à traiter
323
     * @param  string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
324
     * @return bool                     Indique si la validation de la commande s'est bien faite ou pas
325
     */
326 View Code Duplication
    public function deliveryOrder(Oledrion_commands $order, $comment = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
327
    {
328
        $retval = false;
0 ignored issues
show
Unused Code introduced by
$retval is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
329
        $order->setVar('cmd_state', OLEDRION_STATE_DELIVERYED);
330
        $order->setVar('cmd_comment', $comment);
331
        $retval = $this->insert($order, true);
332
333
        return $retval;
334
    }
335
336
    /**
337
     * Informe le propriétaire du site qu'une commande est frauduleuse
338
     *
339
     * @param object|Oledrion_commands $order   La commande en question
340
     * @param string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
341
     */
342 View Code Duplication
    public function notifyOrderFraudulent(Oledrion_commands $order, $comment = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
343
    {
344
        $msg                 = array();
345
        $msg['NUM_COMMANDE'] = $order->getVar('cmd_id');
346
        $msg['COMMENT']      = $comment;
347
        OledrionUtility::sendEmailFromTpl('command_shop_fraud.tpl', OledrionUtility::getEmailsFromGroup(OledrionUtility::getModuleOption('grp_sold')), _OLEDRION_GATEWAY_FRAUD, $msg);
348
    }
349
350
    /**
351
     * Applique le statut de commande frauduleuse à une commande
352
     *
353
     * @param obejct|Oledrion_commands $order   La commande à traiter
354
     * @param string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
355
     */
356
    public function setFraudulentOrder(Oledrion_commands $order, $comment = '')
357
    {
358
        $order->setVar('cmd_state', OLEDRION_STATE_FRAUD);
359
        $order->setVar('cmd_comment', $comment);
360
        $this->insert($order, true);
361
        $this->notifyOrderFraudulent($order, $comment);
362
    }
363
364
    /**
365
     * Informe le propriétaire du site qu'une commande est en attente
366
     *
367
     * @param object|Oledrion_commands $order   La commande en question
368
     * @param string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
369
     */
370 View Code Duplication
    public function notifyOrderPending(Oledrion_commands $order, $comment = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
371
    {
372
        $msg                 = array();
373
        $msg['NUM_COMMANDE'] = $order->getVar('cmd_id');
374
        $msg['COMMENT']      = $comment;
375
        OledrionUtility::sendEmailFromTpl('command_shop_pending.tpl', OledrionUtility::getEmailsFromGroup(OledrionUtility::getModuleOption('grp_sold')), _OLEDRION_GATEWAY_PENDING, $msg);
376
    }
377
378
    /**
379
     * Applique le statut de commande en attente à une commande
380
     *
381
     * @param object|Oledrion_commands $order   La commande à traiter
382
     * @param string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
383
     */
384
    public function setOrderPending(Oledrion_commands $order, $comment = '')
385
    {
386
        $order->setVar('cmd_state', OLEDRION_STATE_PENDING); // En attente
387
        $order->setVar('cmd_comment', $comment);
388
        $this->insert($order, true);
389
        $this->notifyOrderPending($order, $comment);
390
    }
391
392
    /**
393
     * Informe le propriétaire du site qu'une commande à échoué (le paiement)
394
     *
395
     * @param object|Oledrion_commands $order   La commande en question
396
     * @param string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
397
     */
398 View Code Duplication
    public function notifyOrderFailed(Oledrion_commands $order, $comment = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
399
    {
400
        $msg                 = array();
401
        $msg['NUM_COMMANDE'] = $order->getVar('cmd_id');
402
        $msg['COMMENT']      = $comment;
403
        OledrionUtility::sendEmailFromTpl('command_shop_failed.tpl', OledrionUtility::getEmailsFromGroup(OledrionUtility::getModuleOption('grp_sold')), _OLEDRION_GATEWAY_FAILED, $msg);
404
    }
405
406
    /**
407
     * Applique le statut de commande échouée à une commande
408
     *
409
     * @param object|Oledrion_commands $order   La commande à traiter
410
     * @param string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
411
     */
412
    public function setOrderFailed(Oledrion_commands $order, $comment = '')
413
    {
414
        $order->setVar('cmd_state', OLEDRION_STATE_FAILED); // Echec
415
        $order->setVar('cmd_comment', $comment);
416
        $this->insert($order, true);
417
        $this->notifyOrderFailed($order, $comment);
418
    }
419
420
    /**
421
     * Informe le propriétaire du site qu'une commande à échoué (le paiement)
422
     *
423
     * @param object|Oledrion_commands $order   La commande en question
424
     * @param string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
425
     */
426
    public function notifyOrderCanceled(Oledrion_commands $order, $comment = '')
427
    {
428
        $msg                 = array();
429
        $msg['NUM_COMMANDE'] = $order->getVar('cmd_id');
430
        $msg['COMMENT']      = $comment;
431
        OledrionUtility::sendEmailFromTpl('command_shop_cancel.tpl', OledrionUtility::getEmailsFromGroup(OledrionUtility::getModuleOption('grp_sold')), _OLEDRION_ORDER_CANCELED, $msg);
432
        OledrionUtility::sendEmailFromTpl('command_client_cancel.tpl', $order->getVar('cmd_email'), _OLEDRION_ORDER_CANCELED, $msg);
433
    }
434
435
    /**
436
     * Applique le statut de commande annulée à une commande
437
     *
438
     * @param object|Oledrion_commands $order   La commande à traiter
439
     * @param string                   $comment Optionel, un commentaire pour le mail envoyé au webmaster
440
     */
441
    public function setOrderCanceled(Oledrion_commands $order, $comment = '')
442
    {
443
        $order->setVar('cmd_state', OLEDRION_STATE_CANCELED); // Annulée
444
        $order->setVar('cmd_comment', $comment);
445
        $this->insert($order, true);
446
        $this->notifyOrderCanceled($order, $comment);
447
    }
448
449
    /**
450
     * Retourne une commande à partir de son mot de passe d'annulation
451
     *
452
     * @param  string $cmd_cancel Le mot de passe d'annulation
453
     * @return mixed  Soit un objet soit null
454
     */
455
    public function getOrderFromCancelPassword($cmd_cancel)
456
    {
457
        $critere = new Criteria('cmd_cancel', $cmd_cancel, '=');
458
        if ($this->getCount($critere) > 0) {
459
            $tblCmd = array();
0 ignored issues
show
Unused Code introduced by
$tblCmd is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
460
            $tblCmd = $this->getObjects($critere);
461
            if (count($tblCmd) > 0) {
462
                return $tblCmd[0];
463
            }
464
        }
465
466
        return null;
467
    }
468
469
    /**
470
     * Retourne la dernière commande d'un utilisateur (si elle existe)
471
     *
472
     * @param  integer $uid Identifiant de la commande
473
     * @return null
474
     */
475
    public function getLastUserOrder($uid)
476
    {
477
        $order    = null;
478
        $orders   = array();
0 ignored issues
show
Unused Code introduced by
$orders is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
479
        $criteria = new CriteriaCompo();
480
        $criteria->add(new Criteria('cmd_uid', $uid));
481
        $criteria->add(new Criteria('cmd_status', 2));
482
        $criteria->setSort('cmd_date');
483
        $criteria->setOrder('DESC');
484
        $criteria->setLimit(1);
485
        $orders = $this->getObjects($criteria, false);
486
        if (count($orders) > 0) {
487
            $order = $orders[0];
488
        }
489
490
        return $order;
491
    }
492
493
    /**
494
     * Supprime une commande et tout ce qui s'y rattache
495
     *
496
     * @param  oledrion_commands $order
497
     * @return boolean
498
     */
499
    public function removeOrder(Oledrion_commands $order)
500
    {
501
        $handlers = OledrionHandler::getInstance();
502
        $cmd_id   = $order->getVar('cmd_id');
503
        $res      = $this->delete($order);
504
        // Suppression des objets associés
505
        // 1) Ses propres caddies
506
        $handlers->h_oledrion_caddy->removeCartsFromOrderId($cmd_id);
507
        // 2) Les caddies des attributs
508
        $handlers->h_oledrion_caddy_attributes->removeCartsFromOrderId($cmd_id);
509
510
        return $res;
511
    }
512
}
513