Completed
Push — master ( 00e474...9d3fbd )
by Michael
04:26
created

class/oledrion_manufacturer.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
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 http://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 fabricants
22
 */
23
require __DIR__ . '/classheader.php';
24
25
/**
26
 * Class Oledrion_manufacturer
27
 */
28
class Oledrion_manufacturer extends Oledrion_Object
29
{
30
    /**
31
     * constructor
32
     *
33
     * normally, this is called from child classes only
34
     *
35
     * @access public
36
     */
37
    public function __construct()
38
    {
39
        $this->initVar('manu_id', XOBJ_DTYPE_INT, null, false);
40
        $this->initVar('manu_name', XOBJ_DTYPE_TXTBOX, null, false);
41
        $this->initVar('manu_commercialname', XOBJ_DTYPE_TXTBOX, null, false);
42
        $this->initVar('manu_email', XOBJ_DTYPE_TXTBOX, null, false);
43
        $this->initVar('manu_bio', XOBJ_DTYPE_TXTAREA, null, false);
44
        $this->initVar('manu_url', XOBJ_DTYPE_TXTBOX, null, false);
45
        $this->initVar('manu_photo1', XOBJ_DTYPE_TXTBOX, null, false);
46
        $this->initVar('manu_photo2', XOBJ_DTYPE_TXTBOX, null, false);
47
        $this->initVar('manu_photo3', XOBJ_DTYPE_TXTBOX, null, false);
48
        $this->initVar('manu_photo4', XOBJ_DTYPE_TXTBOX, null, false);
49
        $this->initVar('manu_photo5', XOBJ_DTYPE_TXTBOX, null, false);
50
        // Pour autoriser le html
51
        $this->initVar('dohtml', XOBJ_DTYPE_INT, 1, false);
52
    }
53
54
    /**
55
     * Retourne l'URL d'une des 5 images du fabricant courant
56
     *
57
     * @param  integer $pictureNumber Le numéro (de 1 à 5) de l'image que l'on souhaite récupérer
58
     * @return mixed   L'URL    Soit l'url de l'image soit False si l'indice passé en paramètre n'est pas correct
59
     */
60 View Code Duplication
    public function getPictureUrl($pictureNumber)
61
    {
62
        $pictureNumber = (int)$pictureNumber;
63
        if ($pictureNumber > 0 && $pictureNumber < 6) {
64
            return OLEDRION_PICTURES_URL . '/' . $this->getVar('manu_photo' . $pictureNumber);
65
        } else {
66
            return false;
67
        }
68
    }
69
70
    /**
71
     * Retourne le chemin de l'une des 5 images du fabricant courant
72
     *
73
     * @param  integer $pictureNumber Le numéro (de 1 à 5) de l'image que l'on souhaite récupérer
74
     * @return string  Le chemin
75
     */
76 View Code Duplication
    public function getPicturePath($pictureNumber)
77
    {
78
        $pictureNumber = (int)$pictureNumber;
79
        if ($pictureNumber > 0 && $pictureNumber < 6) {
80
            return OLEDRION_PICTURES_PATH . '/' . $this->getVar('manu_photo' . $pictureNumber);
81
        } else {
82
            return false;
83
        }
84
    }
85
86
    /**
87
     * Indique si une des 5 images du fabricant existe
88
     *
89
     * @param  integer $pictureNumber Le numéro (de 1 à 5) de l'image que l'on souhaite récupérer
90
     * @return boolean Vrai si l'image existe sinon faux
91
     */
92
    public function pictureExists($pictureNumber)
93
    {
94
        $pictureNumber = (int)$pictureNumber;
95
        $return        = false;
96
        if ($pictureNumber > 0 && $pictureNumber < 6) {
97
            if (xoops_trim($this->getVar('manu_photo' . $pictureNumber)) != ''
98
                && file_exists(OLEDRION_PICTURES_PATH . '/' . $this->getVar('manu_photo' . $pictureNumber))
99
            ) {
100
                $return = true;
101
            }
102
        }
103
104
        return $return;
105
    }
106
107
    /**
108
     * Supprime une des 5 images du fabricant
109
     *
110
     * @param  integer $pictureNumber Le numéro (de 1 à 5) de l'image que l'on souhaite récupérer
111
     * @return void
112
     */
113
    public function deletePicture($pictureNumber)
114
    {
115
        $pictureNumber = (int)$pictureNumber;
116
        if ($pictureNumber > 0 && $pictureNumber < 6) {
117
            if ($this->pictureExists($pictureNumber)) {
118
                @unlink(OLEDRION_PICTURES_PATH . '/' . $this->getVar('manu_photo' . $pictureNumber));
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
119
            }
120
            $this->setVar('manu_photo' . $pictureNumber, '');
121
        }
122
    }
123
124
    /**
125
     * Supprime toutes les images du fabricant (raccourcis)
126
     * @return void
127
     */
128
    public function deletePictures()
129
    {
130
        for ($i = 1; $i <= 5; ++$i) {
131
            $this->deletePicture($i);
132
        }
133
    }
134
135
    /**
136
     * Retourne l'url à utiliser pour accéder à la page d'un fabricant
137
     *
138
     * @return string
139
     */
140 View Code Duplication
    public function getLink()
141
    {
142
        $url = '';
143
        if (Oledrion_utils::getModuleOption('urlrewriting') == 1) { // On utilise l'url rewriting
144
            $url = OLEDRION_URL . 'manufacturer-' . $this->getVar('manu_id') . Oledrion_utils::makeSeoUrl($this->getVar('manu_commercialname', 'n') . ' ' . $this->getVar('manu_name')) . '.html';
145
        } else { // Pas d'utilisation de l'url rewriting
146
            $url = OLEDRION_URL . 'manufacturer.php?manu_id=' . $this->getVar('manu_id');
147
        }
148
149
        return $url;
150
    }
151
152
    /**
153
     * Rentourne la chaine à envoyer dans une balise <a> pour l'attribut href
154
     *
155
     * @return string
156
     */
157
    public function getHrefTitle()
158
    {
159
        return Oledrion_utils::makeHrefTitle($this->getVar('manu_commercialname') . ' ' . $this->getVar('manu_name'));
160
    }
161
162
    /**
163
     * Retourne l'initiale du fabricant (à modifier selon le sens de l'écriture !)
164
     * @return string L'initiale
165
     */
166
    public function getInitial()
167
    {
168
        return strtoupper(substr($this->getVar('manu_name'), 0, 1));
169
    }
170
171
    /**
172
     * Retourne les éléments du fabricant formatés pour affichage
173
     *
174
     * @param  string $format Le format à utiliser
175
     * @return array  Les informations formatées
176
     */
177
    public function toArray($format = 's')
178
    {
179
        $ret = array();
180
        $ret = parent::toArray($format);
181
        for ($i = 1; $i <= 5; ++$i) {
182
            $ret['manu_photo' . $i . '_url'] = $this->getPictureUrl($i);
183
        }
184
        $ret['manu_url_rewrited'] = $this->getLink();
185
        $ret['manu_href_title']   = $this->getHrefTitle();
186
        $ret['manu_initial']      = $this->getInitial();
187
188
        return $ret;
189
    }
190
}
191
192
/**
193
 * Class OledrionOledrion_manufacturerHandler
194
 */
195
class OledrionOledrion_manufacturerHandler extends Oledrion_XoopsPersistableObjectHandler
196
{
197
    /**
198
     * OledrionOledrion_manufacturerHandler constructor.
199
     * @param XoopsDatabase|null $db
200
     */
201
    public function __construct(XoopsDatabase $db)
202
    { //                            Table                   Classe               Id            Identifiant
203
        parent::__construct($db, 'oledrion_manufacturer', 'oledrion_manufacturer', 'manu_id', 'manu_commercialname');
204
    }
205
206
    /**
207
     * Renvoie l'alphabet à partir de la première lettre du nom des fabricants
208
     *
209
     * @return array l'alphabet des lettres utilisées !
210
     */
211 View Code Duplication
    public function getAlphabet()
0 ignored issues
show
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...
212
    {
213
        global $myts;
214
        $ret    = array();
215
        $sql    = 'SELECT DISTINCT (UPPER(SUBSTRING(manu_name, 1, 1))) as oneletter FROM ' . $this->table;
216
        $result = $this->db->query($sql);
217
        if (!$result) {
218
            return $ret;
219
        }
220
        while ($myrow = $this->db->fetchArray($result)) {
221
            $ret[] = $myts->htmlSpecialChars($myrow['oneletter']);
222
        }
223
224
        return $ret;
225
    }
226
227
    /**
228
     * Supprime un fabricant et tout ce qui est relatif
229
     *
230
     * @param  oledrion_manufacturer $manufacturer
231
     * @return boolean               Le résultat de la suppression
232
     */
233
    public function deleteManufacturer(Oledrion_manufacturer $manufacturer)
234
    {
235
        $manufacturer->deletePictures();
236
237
        return $this->delete($manufacturer, true);
238
    }
239
240
    /**
241
     * Retourne le nombre de produits associés à un fabricant
242
     *
243
     * @param  integer $manu_id L'identifiant du fabricant
244
     * @return integer Le nombre de produis associés à un fabricant
245
     */
246
    public function getManufacturerProductsCount($manu_id)
247
    {
248
        global $h_oledrion_productsmanu;
249
250
        return $h_oledrion_productsmanu->getManufacturerProductsCount($manu_id);
251
    }
252
253
    /**
254
     * Retourne des fabricants en fonction de leur IDs
255
     *
256
     * @param  array $ids Les identifiants des produits
257
     * @return array Tableau d'objets de type oledrion_productsmanu
258
     */
259 View Code Duplication
    public function getManufacturersFromIds($ids)
260
    {
261
        $ret = array();
262
        if (is_array($ids) && count($ids) > 0) {
263
            $criteria = new Criteria('manu_id', '(' . implode(',', $ids) . ')', 'IN');
264
            $ret      = $this->getObjects($criteria, true, true, '*', false);
265
        }
266
267
        return $ret;
268
    }
269
270
    /**
271
     * Retourne les produits d'un fabricant (note, ce code serait mieux dans une facade)
272
     *
273
     * @param  integer $manu_id Le fabricant dont on veut récupérer les produits
274
     * @param  integer $start   Position de départ
275
     * @param  integer $limit   Nombre maximum d'enregistrements à renvoyer
276
     * @return array   Objects de type oledrion_products
277
     */
278
    public function getManufacturerProducts($manu_id, $start = 0, $limit = 0)
279
    {
280
        $ret = $productsIds = array();
281
        global $h_oledrion_productsmanu, $h_oledrion_products;
282
        // On commence par récupérer les ID des produits
283
        $productsIds = $h_oledrion_productsmanu->getProductsIdsFromManufacturer($manu_id, $start, $limit);
284
        // Puis les produits eux même
285
        $ret = $h_oledrion_products->getProductsFromIDs($productsIds);
286
287
        return $ret;
288
    }
289
}
290