EventHandler::getRecurEventToDisplay()   F
last analyzed

Complexity

Conditions 37
Paths 25

Size

Total Lines 196
Code Lines 126

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 126
dl 0
loc 196
rs 3.3333
c 0
b 0
f 0
cc 37
nc 25
nop 3

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace XoopsModules\Extcal;
4
5
/*
6
 * You may not change or alter any portion of this comment or credits
7
 * of supporting developers from this source code or any supporting source code
8
 * which is considered copyrighted (c) material of the original comment or credit authors.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
 */
14
15
/**
16
 * @copyright    {@link https://xoops.org/ XOOPS Project}
17
 * @license      {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later}
18
 * @package      extcal
19
 * @since
20
 * @author       XOOPS Development Team,
21
 */
22
23
//use Punic\Exception;
24
use Xmf\Request;
25
use XoopsModules\Extcal\{Helper,
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, XoopsModules\Extcal\Helper. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
26
    Event,
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, XoopsModules\Extcal\Event. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
27
    Perm,
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, XoopsModules\Extcal\Perm. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
28
    Time,
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, XoopsModules\Extcal\Time. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
29
    Form
30
};
31
32
require_once \dirname(__DIR__) . '/include/constantes.php';
33
34
/**
35
 * Class EventHandler.
36
 */
37
class EventHandler extends ExtcalPersistableObjectHandler
38
{
39
    private $extcalPerm;
40
    private $extcalTime;
41
42
    /**
43
     * @param \XoopsDatabase|null $db
44
     */
45
    public function __construct(\XoopsDatabase $db = null)
46
    {
47
        if (null === $db) {
48
            $db = \XoopsDatabaseFactory::getDatabaseConnection();
49
        }
50
        $this->extcalPerm = Perm::getHandler();
51
        $this->extcalTime = Time::getHandler();
52
        parent::__construct($db, 'extcal_event', Event::class, 'event_id');
53
    }
54
55
    /**
56
     * @param $data
57
     *
58
     * @return bool
59
     */
60
    public function createEvent($data)
61
    {
62
        $event = $this->create();
63
        $this->checkDate($data);
64
        $this->userTimeToServerTime($data);
65
        $this->addRecurValue($data);
66
        $event->setVars($data);
67
68
        return $this->insert($event, true);
69
    }
70
71
    /**
72
     * @param $data
73
     *
74
     * @return \XoopsObject
75
     */
76
    public function createEventForPreview($data)
77
    {
78
        $event = $this->create();
79
        $this->checkDate($data);
80
        $this->addRecurValue($data);
81
        $event->setVars($data);
82
83
        return $event;
84
    }
85
86
    /**
87
     * @param $eventId
88
     * @param $data
89
     *
90
     * @return bool
91
     */
92
    public function modifyEvent($eventId, $data)
93
    {
94
        $event = $this->get($eventId);
95
        $this->checkDate($data);
96
        $this->userTimeToServerTime($data);
97
        $this->addRecurValue($data);
98
        $event->setVars($data);
99
100
        return $this->insert($event);
101
    }
102
103
    /**
104
     * @param $eventId
105
     */
106
    public function deleteEvent($eventId)
107
    {
108
        /* TODO :
109
           - Delete who's going
110
           - Delete who's not going
111
           - Delete comment
112
           - Delete notifications
113
          */
114
        $this->deleteById($eventId, true);
115
    }
116
117
    /**
118
     * @param null $criteria
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $criteria is correct as it would always require null to be passed?
Loading history...
119
     * @param bool $force
120
     * @param bool $asObject
121
     */
122
    public function deleteAllEvents($criteria = null, $force = true, $asObject = false)
123
    {
124
        /* TODO :
125
           - Delete who's going
126
           - Delete who's not going
127
           - Delete comment
128
           - Delete notifications
129
          */
130
        $this->deleteAll($criteria, $force, $asObject);
131
    }
132
133
    /**
134
     * @param null $criteria
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $criteria is correct as it would always require null to be passed?
Loading history...
135
     * @param bool $asObject
136
     *
137
     * @return array
138
     */
139
    public function getAllEvents($criteria = null, $asObject = false)
140
    {
141
        $rst = $this->getObjects($criteria, $asObject);
142
        if ($asObject) {
143
            return $rst;
144
        }
145
146
        return $this->objectToArray($rst);
147
    }
148
149
    // Return one approved event selected by his id
150
151
    /**
152
     * @param      $eventId
153
     * @param bool $skipPerm
154
     *
155
     * @return bool
156
     */
157
    public function getEvent($eventId, $skipPerm = false)
158
    {
159
        $user = $GLOBALS['xoopsUser'];
160
161
        $criteriaCompo = new \CriteriaCompo();
162
        $criteriaCompo->add(new \Criteria('event_id', $eventId));
163
        $criteriaCompo->add(new \Criteria('event_approved', 1));
164
        if (!$skipPerm) {
165
            $this->addCatPermCriteria($criteriaCompo, $user);
166
        }
167
        $ret = $this->getObjects($criteriaCompo);
168
        return $ret[0] ?? false;
169
    }
170
171
    // Return one event selected by his id (approve or not)
172
173
    /**
174
     * @param      $eventId
175
     * @param bool $skipPerm
176
     *
177
     * @return bool
178
     */
179
    public function getEventWithNotApprove($eventId, $skipPerm = false)
180
    {
181
        $user = $GLOBALS['xoopsUser'];
182
183
        $criteriaCompo = new \CriteriaCompo();
184
        $criteriaCompo->add(new \Criteria('event_id', $eventId));
185
        if (!$skipPerm) {
186
            $this->addCatPermCriteria($criteriaCompo, $user);
187
        }
188
        $ret = $this->getObjects($criteriaCompo);
189
        return $ret[0] ?? false;
190
    }
191
192
    /**
193
     * @param $events
194
     * @param $pattern
195
     */
196
    public function formatEventsDate(&$events, $pattern)
197
    {
198
        //        $max = count($events);
199
        //        for ($i = 0; $i < $max; ++$i) {
200
        //            $this->formatEventDate($events[$i], $pattern);
201
        //        }
202
        foreach ($events as $i => $iValue) {
203
            $this->formatEventDate($events[$i], $pattern);
204
        }
205
    }
206
207
    //  function getPicture1(&$event) {
208
    //      return $event['event_picture1'];
209
    //  }
210
    //  function getPicture2(&$event) {
211
    //      return $event['event_picture2'];
212
    //  }
213
    //  function getDesc(&$event) {
214
    //      return $event['event_desc'];
215
    //  }
216
217
    /**
218
     * @param $event
219
     * @param $pattern
220
     */
221
    public function formatEventDate(&$event, $pattern)
222
    {
223
        //TODO switch to using XOOPS function formatTimeStamp()
224
        if (!$event['event_isrecur']) {
225
            $event['formated_event_start'] = $this->extcalTime->getFormatedDate($pattern, $event['event_start']);
226
            $event['formated_event_end']   = $this->extcalTime->getFormatedDate($pattern, $event['event_end']);
227
        } else {
228
            $event['formated_event_start'] = $this->extcalTime->getFormatedDate($pattern, $event['event_start']);
229
            $event['formated_event_end']   = $this->extcalTime->getFormatedDate($pattern, $event['event_end']);
230
            $event['formated_reccur_rule'] = $this->extcalTime->getFormatedReccurRule($event['event_recur_rules']);
231
        }
232
        $event['formated_event_submitdate'] = $this->extcalTime->getFormatedDate($pattern, $event['event_submitdate']);
233
    }
234
235
    //JJD - to valid modif
236
    //     function checkDate(&$data)
237
    //     {
238
    //
239
    //         list($year, $month, $day) = explode("-", $data['event_start']['date']);
240
    //         $data['event_start']
241
    //             =
242
    //             mktime(0, 0, 0, $month, $day, $year) + $data['event_start']['time'];
243
    //         list($year, $month, $day) = explode("-", $data['event_end']['date']);
244
    //         $data['event_end']
245
    //             = mktime(0, 0, 0, $month, $day, $year) + $data['event_end']['time'];
246
    //
247
    //         if ($data['have_end'] == 0 || $data['event_start'] > $data['event_end']
248
    //) {
249
    //             $data['event_end'] = $data['event_start'];
250
    //         }
251
    //
252
    //     }
253
254
    /**
255
     * @param $data
256
     */
257
    public function checkDate(&$data)
258
    {
259
        $data['event_start'] = \strtotime($data['event_start']['date']) + $data['event_start']['time'];
260
        $data['event_end']   = \strtotime($data['event_end']['date']) + $data['event_end']['time'];
261
262
        if (0 == $data['have_end'] || $data['event_start'] > $data['event_end']) {
263
            $data['event_end'] = $data['event_start'];
264
        }
265
    }
266
267
    /**
268
     * @param $data
269
     */
270
    private function userTimeToServerTime(&$data)
271
    {
272
        $user = $GLOBALS['xoopsUser'];
273
274
        $data['event_start'] = \userTimeToServerTime($data['event_start'], $this->extcalTime->getUserTimeZone($user));
275
        $data['event_end']   = \userTimeToServerTime($data['event_end'], $this->extcalTime->getUserTimeZone($user));
276
    }
277
278
    /**
279
     * @param $data
280
     */
281
    public function serverTimeToUserTime(&$data)
282
    {
283
        $user = $GLOBALS['xoopsUser'];
284
285
        $data['event_start']      = \xoops_getUserTimestamp($data['event_start'], $this->extcalTime->getUserTimeZone($user));
286
        $data['event_end']        = \xoops_getUserTimestamp($data['event_end'], $this->extcalTime->getUserTimeZone($user));
287
        $data['event_submitdate'] = \xoops_getUserTimestamp($data['event_submitdate'], $this->extcalTime->getUserTimeZone($user));
288
    }
289
290
    /**
291
     * @param $events
292
     */
293
    public function serverTimeToUserTimes(&$events)
294
    {
295
        foreach ($events as $i => $iValue) {
296
            $this->serverTimeToUserTime($events[$i]);
297
        }
298
    }
299
300
    /**
301
     * @param $data
302
     */
303
    public function addRecurValue(&$data)
304
    {
305
        $data['event_isrecur']     = $this->getIsRecur($_POST);
306
        $data['event_recur_rules'] = $this->getRecurRules($_POST);
307
        $data['event_recur_start'] = $this->getRecurStart($data, $_POST);
308
        $data['event_recur_end']   = $this->getRecurEnd($data, $_POST);
309
    }
310
311
    /***************************************************************
312
     * Return events on perioe
313
     **************************************************************
314
     *
315
     * @param $criteres
316
     *
317
     * @return array
318
     */
319
    public function getEventsOnPeriode($criteres)
320
    {
321
        //Utility::echoArray($criteres);
322
        $myts = \MyTextSanitizer::getInstance(); // MyTextSanitizer object
0 ignored issues
show
Unused Code introduced by
The assignment to $myts is dead and can be removed.
Loading history...
323
324
        $eventsU = $this->getEventsUniques($criteres);
325
        $eventsR = $this->getEventsRecurents($criteres);
326
        $events  = \array_merge($eventsU, $eventsR);
327
328
        //      $events = $eventsU;
329
330
        //Utility::echoArray($events);
331
332
        //Tri des evennement par date ascendante
333
        $ordre      = [];
334
        $eventArray = [];
335
336
        //        while (list($k, $v) = each($events)) {
337
        foreach ($events as $k => $v) {
338
            $ordre[] = (int)$v['event_start'];
339
            $this->formatEventDate($v, Helper::getInstance()->getConfig('event_date_week'));
340
            //$v['cat']['cat_light_color'] = $v['cat']['cat_color'];
341
            $v['cat']['cat_light_color'] = Utility::getLighterColor($v['cat']['cat_color'], \_EXTCAL_INFOBULLE_RGB_MIN, \_EXTCAL_INFOBULLE_RGB_MAX);
342
            if ('' == $v['event_icone']) {
343
                $v['event_icone'] = $v['cat']['cat_icone'];
344
            }
345
            $v['event_desc'] = \html_entity_decode($v['event_desc']);
346
            $eventArray[]    = $v;
347
        }
348
        \array_multisort($eventArray, \SORT_ASC, \SORT_NUMERIC, $ordre, \SORT_ASC, \SORT_NUMERIC);
0 ignored issues
show
Bug introduced by
SORT_NUMERIC cannot be passed to array_multisort() as the parameter $rest expects a reference. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

348
        \array_multisort($eventArray, \SORT_ASC, /** @scrutinizer ignore-type */ \SORT_NUMERIC, $ordre, \SORT_ASC, \SORT_NUMERIC);
Loading history...
Bug introduced by
SORT_ASC cannot be passed to array_multisort() as the parameter $rest expects a reference. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

348
        \array_multisort($eventArray, /** @scrutinizer ignore-type */ \SORT_ASC, \SORT_NUMERIC, $ordre, \SORT_ASC, \SORT_NUMERIC);
Loading history...
349
350
        return $eventArray;
351
    }
352
353
    /*****************************************************************
354
     *
355
     ****************************************************************
356
     * @param $criteres
357
     * @return array
358
     */
359
    public function getEventsUniques($criteres)
360
    {
361
        $cat = 0;
362
        //        while (list($k, $v) = each($criteres)) {
363
        foreach ($criteres as $k => $v) {
364
            ${$k} = $v;
365
        }
366
        if (!isset($nbDays)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $nbDays seems to never exist and therefore isset should always be false.
Loading history...
367
            $nbDays = 7;
368
        }
369
        if (!isset($sens)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $sens seems to never exist and therefore isset should always be false.
Loading history...
370
            $sens = 'ASC';
371
        }
372
        if (!isset($externalKeys)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $externalKeys seems to never exist and therefore isset should always be false.
Loading history...
373
            $externalKeys = ['cat_id'];
374
        }
375
        //------------------------------------------------------
376
        switch ($periode) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $periode seems to be never defined.
Loading history...
377
            case \_EXTCAL_EVENTS_CALENDAR_WEEK:
378
                $criteriaCompo = $this->getEventWeekCriteria($day, $month, $year, $cat, $nbDays);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $month seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $year seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $day seems to be never defined.
Loading history...
379
                if (!Helper::getInstance()->getConfig('diplay_past_event_cal')) {
380
                    $criteriaCompo->add(new \Criteria('event_end', \time(), '>'));
381
                }
382
                break;
383
            case \_EXTCAL_EVENTS_WEEK:
384
            case \_EXTCAL_EVENTS_AGENDA_WEEK:
385
                $criteriaCompo = $this->getEventWeekCriteria($day, $month, $year, $cat, $nbDays);
386
                if (!Helper::getInstance()->getConfig('diplay_past_event_list')) {
387
                    $criteriaCompo->add(new \Criteria('event_end', \time(), '>'));
388
                }
389
                break;
390
            case \_EXTCAL_EVENTS_CALENDAR_MONTH:
391
                $criteriaCompo = $this->getEventMonthCriteria($month, $year, $cat);
392
393
                if (!Helper::getInstance()->getConfig('diplay_past_event_cal')) {
394
                    $criteriaCompo->add(new \Criteria('event_end', \time(), '>'));
395
                }
396
                break;
397
            case \_EXTCAL_EVENTS_MONTH:
398
                $criteriaCompo = $this->getEventMonthCriteria($month, $year, $cat);
399
400
                if (!Helper::getInstance()->getConfig('diplay_past_event_list')) {
401
                    $criteriaCompo->add(new \Criteria('event_end', \time(), '>'));
402
                }
403
                break;
404
            case \_EXTCAL_EVENTS_DAY:
405
                $criteriaCompo = $this->getEventDayCriteria($day, $month, $year, $cat);
406
407
                break;
408
            case \_EXTCAL_EVENTS_YEAR:
409
                $criteriaCompo = $this->getEventYearCriteria($year, $cat);
410
                break;
411
            case \_EXTCAL_EVENTS_UPCOMING:
412
                $criteriaCompo = $this->getEventWeekCriteria($day, $month, $year, $cat, $nbDays);
413
                break;
414
        }
415
        //--------------------------------------------------------------------------
416
        $criteriaCompo->add(new \Criteria('event_isrecur', 0, '='));
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $criteriaCompo does not seem to be defined for all execution paths leading up to this point.
Loading history...
417
        $criteriaCompo->setOrder($sens);
418
419
        $result = $this->getObjects($criteriaCompo);
420
        $events = $this->objectToArray($result, $externalKeys);
421
        $this->serverTimeToUserTimes($events);
422
423
        return $events;
424
    }
425
426
    /*****************************************************************
427
     * evennement récurents
428
     ****************************************************************
429
     * @param $criteres
430
     * @return array
431
     */
432
433
    public function getEventsRecurents($criteres)
434
    {
435
        //        while (list($k, $v) = each($criteres)) {
436
        foreach ($criteres as $k => $v) {
437
            ${$k} = $v;
438
        }
439
        if (!isset($nbDays)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $nbDays seems to never exist and therefore isset should always be false.
Loading history...
440
            $nbDays = 7;
441
        }
442
        if (!isset($sens)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $sens seems to never exist and therefore isset should always be false.
Loading history...
443
            $sens = 'ASC';
444
        }
445
        if (!isset($externalKeys)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $externalKeys seems to never exist and therefore isset should always be false.
Loading history...
446
            $externalKeys = ['cat_id'];
447
        }
448
        $user = $GLOBALS['xoopsUser'];
449
        //------------------------------------------------------
450
451
        $criteriaCompo = new \CriteriaCompo();
452
453
        switch ($periode) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $periode seems to be never defined.
Loading history...
454
            case \_EXTCAL_EVENTS_WEEK:
455
            case \_EXTCAL_EVENTS_CALENDAR_WEEK:
456
            case \_EXTCAL_EVENTS_AGENDA_WEEK:
457
            case \_EXTCAL_EVENTS_UPCOMING:
458
                $start = \userTimeToServerTime(\mktime(0, 0, 0, $month, $day, $year), $this->extcalTime->getUserTimeZone($user));
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $month seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $day seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $year seems to be never defined.
Loading history...
459
                $end   = \userTimeToServerTime(\mktime(0, 0, 0, $month, $day + $nbDays + 1, $year), $this->extcalTime->getUserTimeZone($user));
460
                //$end = $start + (($nbDays + 1 )* _EXTCAL_TS_DAY);
461
                //$end = userTimeToServerTime(mktime(0, 0, 0, $month, $day+(($nbJours)+1 * _EXTCAL_TS_DAY), $year), $this->extcalTime->getUserTimeZone($user));;
462
                break;
463
            case \_EXTCAL_EVENTS_MONTH:
464
            case \_EXTCAL_EVENTS_CALENDAR_MONTH:
465
                $start = \userTimeToServerTime(\mktime(0, 0, 0, $month, 1, $year), $this->extcalTime->getUserTimeZone($user));
466
                $end   = \userTimeToServerTime(\mktime(23, 59, 59, $month + 1, 1, $year) - \_EXTCAL_TS_DAY, $this->extcalTime->getUserTimeZone($user));
467
468
                $criteriaCompo->add(new \Criteria('event_start', $end, '<='));
469
                //$criteriaCompo->add( new \Criteria('event_end', $start, '>='));
470
471
                break;
472
            case \_EXTCAL_EVENTS_DAY:
473
                $start = \userTimeToServerTime(\mktime(0, 0, 0, $month, $day, $year), $this->extcalTime->getUserTimeZone($user));
474
                $end   = \userTimeToServerTime(\mktime(0, 0, 0, $month, $day + 1, $year), $this->extcalTime->getUserTimeZone($user));
475
                //$criteriaCompo->add( new \Criteria('event_start', $end, '<='));
476
477
                break;
478
            case \_EXTCAL_EVENTS_YEAR:
479
                $start = \userTimeToServerTime(\mktime(0, 0, 0, 1, 1, $year), $this->extcalTime->getUserTimeZone($user));
480
                $end   = \userTimeToServerTime(\mktime(0, 0, 0, 12, 31, $year), $this->extcalTime->getUserTimeZone($user));
481
                break;
482
        }
483
        $formatDate = Helper::getInstance()->getConfig('event_date_week');
0 ignored issues
show
Unused Code introduced by
The assignment to $formatDate is dead and can be removed.
Loading history...
484
        //--------------------------------------------------------------------------
485
        $criteriaCompo->add(new \Criteria('event_isrecur', 1, '='));
486
        $criteriaCompo->setOrder($sens);
487
488
        $result = $this->getObjects($criteriaCompo);
489
        $events = $this->objectToArray($result, $externalKeys);
490
        $this->serverTimeToUserTimes($events);
491
492
        //Scanning of all recurring events and creation of all events
493
        $eventsR = [];
494
        //        while (list($k, $event) = each($events)) {
495
        foreach ($events as $k => $event) {
496
            //$te = $this->GetInterval($event, $start, $end);
497
            //$eventsR = array_merge($eventsR, $te);
498
            //echo 'event : ' . $event['event_id'] . '<br>';
499
            //Utility::echoArray($event);
500
            $recurEvents = $this->getRecurEventToDisplay($event, $start, $end);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $end does not seem to be defined for all execution paths leading up to this point.
Loading history...
Comprehensibility Best Practice introduced by
The variable $start does not seem to be defined for all execution paths leading up to this point.
Loading history...
501
502
            if (\count($recurEvents) > 0) {
503
                $eventsR = \array_merge($eventsR, $recurEvents);
504
            }
505
506
            // Formating date
507
            //$eventsR = array_merge($eventsArray, $recurEvents);
508
        }
509
510
        return $eventsR;
511
    }
512
513
    /*****************************************************************
514
     *
515
     ****************************************************************
516
     * @param        $period
517
     * @param string $caption
518
     */
519
    public function echoDateArray($period, $caption = '')
520
    {
521
        if ('' != $caption) {
522
            echo "<hr>echoDateArray -> {$caption}<br>";
523
        } else {
524
            echo '<hr>echoDateArray<br>';
525
        }
526
527
        \reset($period);
528
        foreach ($period as $dt) {
529
            echo $dt->format("l d-m-Y H:i:s\n") . '<br>';
530
        }
531
    }
532
533
    /*****************************************************************
534
     * Criteria
535
     ****************************************************************
536
     * @param     $day
537
     * @param     $month
538
     * @param     $year
539
     * @param int $cat
540
     * @return \CriteriaCompo
541
     */
542
    // Return the criteria compo object for a day
543
    public function getEventDayCriteria($day, $month, $year, $cat = 0)
544
    {
545
        $user = $GLOBALS['xoopsUser'];
546
547
        $dayStart      = \userTimeToServerTime(\mktime(0, 0, 0, $month, $day, $year), $this->extcalTime->getUserTimeZone($user));
548
        $dayEnd        = \userTimeToServerTime(\mktime(23, 59, 59, $month, $day, $year), $this->extcalTime->getUserTimeZone($user));
549
        $criteriaCompo = $this->getListCriteriaCompo($dayStart, $dayEnd, $cat, $user);
550
551
        return $criteriaCompo;
552
    }
553
554
    // Return the criteria compo object for a week
555
556
    /**
557
     * @param     $day
558
     * @param     $month
559
     * @param     $year
560
     * @param int $cat
561
     * @param int $nbDays
562
     *
563
     * @return \CriteriaCompo
564
     */
565
    public function getEventWeekCriteria($day, $month, $year, $cat = 0, $nbDays = 7)
566
    {
567
        $user = $GLOBALS['xoopsUser'];
568
569
        $userStartTime = \mktime(0, 0, 0, $month, $day, $year);
570
        $userEndTime   = $userStartTime + (\_EXTCAL_TS_DAY * $nbDays);
571
        $weekStart     = \userTimeToServerTime($userStartTime, $this->extcalTime->getUserTimeZone($user));
572
        $weekEnd       = \userTimeToServerTime($userEndTime, $this->extcalTime->getUserTimeZone($user));
573
        $criteriaCompo = $this->getCriteriaCompo($weekStart, $weekEnd, $cat, $user);
574
575
        return $criteriaCompo;
576
    }
577
578
    // Return the criteria compo object for a month
579
580
    /**
581
     * @param     $month
582
     * @param     $year
583
     * @param int $cat
584
     *
585
     * @return \CriteriaCompo
586
     */
587
    public function getEventMonthCriteria($month, $year, $cat = 0)
588
    {
589
        $user = $GLOBALS['xoopsUser'];
590
591
        $userStartTime = \mktime(0, 0, 0, $month, 1, $year);
592
        $userEndTime   = \mktime(23, 59, 59, $month + 1, 0, $year);
593
        $monthStart    = \userTimeToServerTime($userStartTime, $this->extcalTime->getUserTimeZone($user));
594
        $monthEnd      = \userTimeToServerTime($userEndTime, $this->extcalTime->getUserTimeZone($user));
595
        $criteriaCompo = $this->getCriteriaCompo($monthStart, $monthEnd, $cat, $user);
596
597
        return $criteriaCompo;
598
    }
599
600
    // Return the criteria compo object for event occuring on a given year
601
602
    /**
603
     * @param     $year
604
     * @param int $cat
605
     *
606
     * @return \CriteriaCompo
607
     */
608
    public function getEventYearCriteria($year, $cat = 0)
609
    {
610
        $user = $GLOBALS['xoopsUser'];
611
612
        $userStartTime = \mktime(0, 0, 0, 1, 1, $year);
613
        $userEndTime   = \mktime(23, 59, 59, 12, 31, $year);
614
        $yearStart     = \userTimeToServerTime($userStartTime, $this->extcalTime->getUserTimeZone($user));
615
        $yearEnd       = \userTimeToServerTime($userEndTime, $this->extcalTime->getUserTimeZone($user));
616
        $criteriaCompo = $this->getListCriteriaCompo($yearStart, $yearEnd, $cat, $user);
617
618
        return $criteriaCompo;
619
    }
620
621
    /**********************************************************************
622
     * Debut de - A virer in fine
623
     **********************************************************************/
624
625
    /**********************************************************************
626
     * FIN de  - A virer in fine
627
     **********************************************************************/
628
629
    /**********************************************************************
630
     * Construction of criteria according to the period
631
     *********************************************************************
632
     * @param int      $start
633
     * @param int      $end
634
     * @param int      $cat
635
     * @param int|null $user
636
     * @return \CriteriaCompo
637
     */
638
639
    public function getCriteriaCompo($start, $end, $cat = 0, $user = null)
640
    {
641
        $criteriaNoRecur = new \CriteriaCompo();
642
        $criteriaNoRecur->add(new \Criteria('event_start', $end, '<='));
643
        $criteriaNoRecur->add(new \Criteria('event_end', $start, '>='));
644
        $criteriaNoRecur->add(new \Criteria('event_isrecur', 0));
645
646
        $criteriaRecur = new \CriteriaCompo();
647
        $criteriaRecur->add(new \Criteria('event_recur_start', $end, '<='));
648
        $criteriaRecur->add(new \Criteria('event_recur_end', $start, '>='));
649
        $criteriaRecur->add(new \Criteria('event_isrecur', 1));
650
651
        $criteriaCompoDate = new \CriteriaCompo();
652
        $criteriaCompoDate->add($criteriaNoRecur, 'OR');
653
        $criteriaCompoDate->add($criteriaRecur, 'OR');
654
655
        $criteriaCompo = new \CriteriaCompo();
656
        $criteriaCompo->add($criteriaCompoDate);
657
658
        $criteriaCompo->add(new \Criteria('event_approved', 1));
659
        $this->addCatSelectCriteria($criteriaCompo, $cat);
660
        $this->addCatPermCriteria($criteriaCompo, $user);
661
        $criteriaCompo->setSort('event_start');
662
663
        return $criteriaCompo;
664
    }
665
666
    /**
667
     * @param int             $start
668
     * @param int             $end
669
     * @param int $cat
670
     * @param \XoopsUser|null $user
671
     *
672
     * @return \CriteriaCompo
673
     */
674
    public function getCalendarCriteriaCompo($start, $end, $cat = 0, $user = null)
675
    {
676
        $criteriaCompo = $this->getCriteriaCompo($start, $end, $cat, $user);
0 ignored issues
show
Bug introduced by
It seems like $user can also be of type XoopsUser; however, parameter $user of XoopsModules\Extcal\Even...ler::getCriteriaCompo() does only seem to accept integer|null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

676
        $criteriaCompo = $this->getCriteriaCompo($start, $end, $cat, /** @scrutinizer ignore-type */ $user);
Loading history...
677
        if (!Helper::getInstance()->getConfig('diplay_past_event_cal')) {
678
            $criteriaCompo->add(new \Criteria('event_end', \time(), '>'));
679
        }
680
681
        return $criteriaCompo;
682
    }
683
684
    /**
685
     * @param     $start
686
     * @param     $end
687
     * @param int $cat
688
     * @param \XoopsUser|null $user
689
     *
690
     * @return \CriteriaCompo
691
     */
692
    public function getListCriteriaCompo($start, $end, $cat = 0, $user = null)
693
    {
694
        $criteriaCompo = $this->getCriteriaCompo($start, $end, $cat, $user);
0 ignored issues
show
Bug introduced by
It seems like $user can also be of type XoopsUser; however, parameter $user of XoopsModules\Extcal\Even...ler::getCriteriaCompo() does only seem to accept integer|null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

694
        $criteriaCompo = $this->getCriteriaCompo($start, $end, $cat, /** @scrutinizer ignore-type */ $user);
Loading history...
695
        if (!Helper::getInstance()->getConfig('diplay_past_event_list')) {
696
            $criteriaCompo->add(new \Criteria('event_end', \time(), '>'));
697
        }
698
699
        return $criteriaCompo;
700
    }
701
702
    // Return upcomming event
703
704
    /**
705
     * @param     $nbEvent
706
     * @param int $cat
707
     *
708
     * @return array
709
     */
710
    public function getUpcommingEvent($nbEvent, $cat = 0)
711
    {
712
        $now = \time();
713
714
        $criteriaNoRecur = new \CriteriaCompo();
715
        $criteriaNoRecur->add(new \Criteria('event_start', $now, '>='));
716
        $criteriaNoRecur->add(new \Criteria('event_isrecur', 0));
717
718
        $criteriaRecur = new \CriteriaCompo();
719
        $criteriaRecur->add(new \Criteria('event_recur_start', $now, '>='));
720
        $criteriaRecur->add(new \Criteria('event_isrecur', 1));
721
722
        $criteriaCompoDate = new \CriteriaCompo();
723
        $criteriaCompoDate->add($criteriaNoRecur, 'OR');
724
        $criteriaCompoDate->add($criteriaRecur, 'OR');
725
726
        $criteriaCompo = new \CriteriaCompo();
727
        $criteriaCompo->add($criteriaCompoDate);
728
729
        $criteriaCompo->add(new \Criteria('event_approved', 1));
730
        $this->addCatSelectCriteria($criteriaCompo, $cat);
731
        $this->addCatPermCriteria($criteriaCompo, $GLOBALS['xoopsUser']);
732
733
        //mb ---------- TESTING ---------------------------
734
        //        $eventsU = $this->getEventsUniques($criteriaNoRecur);
735
        //        $eventsR = $this->getEventsRecurents($criteriaRecur);
736
        //        $events  = array_merge($eventsU, $eventsR);
737
738
        //var_dump($events);
739
740
        $criteriaCompo->setSort('event_start');
741
        $criteriaCompo->setLimit($nbEvent);
742
743
        //var_dump($this->getObjects($criteriaCompo));
744
        //mb -------------------------------------
745
        return $this->getObjects($criteriaCompo);
746
    }
747
748
    // Return event occuring this day
749
750
    /**
751
     * @param     $nbEvent
752
     * @param int $cat
753
     *
754
     * @return array
755
     */
756
    public function getThisDayEvent($nbEvent, $cat = 0)
757
    {
758
        $day   = \date('j');
759
        $month = \date('n');
760
        $year  = \date('Y');
761
762
        $dayStart = \mktime(0, 0, 0, $month, $day, $year);
0 ignored issues
show
Bug introduced by
$day of type string is incompatible with the type integer expected by parameter $day of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

762
        $dayStart = \mktime(0, 0, 0, $month, /** @scrutinizer ignore-type */ $day, $year);
Loading history...
Bug introduced by
$year of type string is incompatible with the type integer expected by parameter $year of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

762
        $dayStart = \mktime(0, 0, 0, $month, $day, /** @scrutinizer ignore-type */ $year);
Loading history...
Bug introduced by
$month of type string is incompatible with the type integer expected by parameter $month of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

762
        $dayStart = \mktime(0, 0, 0, /** @scrutinizer ignore-type */ $month, $day, $year);
Loading history...
763
        $dayEnd   = \mktime(0, 0, 0, $month, $day + 1, $year);
764
765
        $criteriaCompo = new \CriteriaCompo();
766
        $this->addCatSelectCriteria($criteriaCompo, $cat);
767
        $this->addCatPermCriteria($criteriaCompo, $GLOBALS['xoopsUser']);
768
        $criteriaCompo->add(new \Criteria('event_end', $dayStart, '>='));
769
        $criteriaCompo->add(new \Criteria('event_start', $dayEnd, '<'));
770
        $criteriaCompo->add(new \Criteria('event_approved', 1));
771
        $criteriaCompo->setSort('event_start');
772
        $criteriaCompo->setLimit($nbEvent);
773
774
        return $this->getObjects($criteriaCompo);
775
    }
776
777
    // Return last added event
778
779
    /**
780
     * @param      $start
781
     * @param      $limit
782
     * @param int  $cat
783
     * @param bool $skipPerm
784
     *
785
     * @return array
786
     */
787
    public function getNewEvent($start, $limit, $cat = 0, $skipPerm = false)
788
    {
789
        $criteriaCompo = new \CriteriaCompo();
790
        $this->addCatSelectCriteria($criteriaCompo, $cat);
791
        if (!$skipPerm) {
792
            $this->addCatPermCriteria($criteriaCompo, $GLOBALS['xoopsUser']);
793
        }
794
        $criteriaCompo->add(new \Criteria('event_approved', 1));
795
        $criteriaCompo->setSort('event_id');
796
        $criteriaCompo->setOrder('DESC');
797
        $criteriaCompo->setStart($start);
798
        $criteriaCompo->setLimit($limit);
799
800
        return $this->getObjects($criteriaCompo);
801
    }
802
803
    /**
804
     * @return int
805
     */
806
    public function getCountNewEvent()
807
    {
808
        $criteriaCompo = new \CriteriaCompo();
809
        $this->addCatSelectCriteria($criteriaCompo, 0);
810
        $criteriaCompo->add(new \Criteria('event_approved', 1));
811
        $criteriaCompo->setSort('event_id');
812
813
        return $this->getCount($criteriaCompo);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getCount($criteriaCompo) also could return the type array which is incompatible with the documented return type integer.
Loading history...
814
    }
815
816
    // Return random upcomming event
817
818
    /**
819
     * @param     $nbEvent
820
     * @param int $cat
821
     *
822
     * @return array
823
     */
824
    public function getRandomEvent($nbEvent, $cat = 0)
825
    {
826
        $criteriaCompo = new \CriteriaCompo();
827
        $this->addCatSelectCriteria($criteriaCompo, $cat);
828
        $this->addCatPermCriteria($criteriaCompo, $GLOBALS['xoopsUser']);
829
        $criteriaCompo->add(new \Criteria('event_start', \time(), '>='));
830
        $criteriaCompo->add(new \Criteria('event_approved', 1));
831
        $criteriaCompo->setSort('RAND()');
832
        $criteriaCompo->setLimit($nbEvent);
833
834
        return $this->getObjects($criteriaCompo);
835
    }
836
837
    /**
838
     * @return array
839
     */
840
    public function getPendingEvent()
841
    {
842
        $criteriaCompo = new \CriteriaCompo();
843
        $criteriaCompo->add(new \Criteria('event_approved', 0));
844
        $criteriaCompo->setSort('event_start');
845
846
        return $this->getObjects($criteriaCompo);
847
    }
848
849
    /**
850
     * @param \CriteriaCompo   $criteria
851
     * @param                  $user
852
     */
853
    public function addCatPermCriteria(\CriteriaCompo $criteria, $user)
854
    {
855
        $authorizedAccessCats = $this->extcalPerm->getAuthorizedCat($user, 'extcal_cat_view');
856
        $count                = \count($authorizedAccessCats);
0 ignored issues
show
Bug introduced by
$authorizedAccessCats of type boolean is incompatible with the type Countable|array expected by parameter $value of count(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

856
        $count                = \count(/** @scrutinizer ignore-type */ $authorizedAccessCats);
Loading history...
857
        if ($count > 0) {
858
            $in = '(' . $authorizedAccessCats[0];
859
            \array_shift($authorizedAccessCats);
0 ignored issues
show
Bug introduced by
$authorizedAccessCats of type boolean is incompatible with the type array expected by parameter $array of array_shift(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

859
            \array_shift(/** @scrutinizer ignore-type */ $authorizedAccessCats);
Loading history...
860
            foreach ($authorizedAccessCats as $authorizedAccessCat) {
861
                $in .= ',' . $authorizedAccessCat;
862
            }
863
            $in .= ')';
864
            $criteria->add(new \Criteria('cat_id', $in, 'IN'));
865
        } else {
866
            $criteria->add(new \Criteria('cat_id', '(0)', 'IN'));
867
        }
868
    }
869
870
    /**
871
     * @param $criteria
872
     * @param $cats
873
     */
874
    public function addCatSelectCriteria($criteria, $cats = null)
875
    {
876
        if (!\is_array($cats) && $cats > 0) {
877
            $criteria->add(new \Criteria('cat_id', $cats));
878
        }
879
        if (\is_array($cats)) {
880
            if (false === \array_search(0, $cats, true)) {
881
                $in = '(' . \current($cats);
882
                \array_shift($cats);
883
                foreach ($cats as $cat) {
884
                    $in .= ',' . $cat;
885
                }
886
                $in .= ')';
887
                $criteria->add(new \Criteria('cat_id', $in, 'IN'));
888
            }
889
        }
890
    }
891
892
    /**********************************************************************
893
     * formulaire d'edition des evennements*
894
     *********************************************************************
895
     * @param string $siteSide
896
     * @param string $mode
897
     * @param null   $data
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $data is correct as it would always require null to be passed?
Loading history...
898
     * @return Form\ThemeForm
899
     */
900
    public function getEventForm($siteSide = 'user', $mode = 'new', $data = null)
901
    {
902
        /** @var Helper $helper */
903
        $helper          = Helper::getInstance();
904
        $categoryHandler = $helper->getHandler(\_EXTCAL_CLN_CAT);
905
        $fileHandler     = $helper->getHandler(\_EXTCAL_CLN_FILE);
906
907
        /***************************************************/
908
        if ('admin' === $siteSide) {
909
            $action = 'event.php?op=enreg';
910
            $cats   = $categoryHandler->getAllCat($GLOBALS['xoopsUser'], 'all');
0 ignored issues
show
Bug introduced by
The method getAllCat() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoopsPersistableObjectHandler. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

910
            /** @scrutinizer ignore-call */ 
911
            $cats   = $categoryHandler->getAllCat($GLOBALS['xoopsUser'], 'all');
Loading history...
911
        } else {
912
            $action = 'post.php';
913
            $cats   = $categoryHandler->getAllCat($GLOBALS['xoopsUser']);
914
        }
915
        /***************************************************/
916
        $reccurOptions = [];
917
918
        if ('edit' === $mode || 'clone' === $mode) {
919
            /** @var Event $event */
920
            if (!$event = $this->getEventWithNotApprove($data['event_id'])) {
921
                return false;
0 ignored issues
show
Bug Best Practice introduced by
The expression return false returns the type false which is incompatible with the documented return type XoopsModules\Extcal\Form\ThemeForm.
Loading history...
922
            }
923
            if ('clone' === $mode) {
924
                $data['event_id'] = 0;
925
                $event->setVar('event_id', 0);
926
                $newTitle = $event->getVar('event_title') . ' (' . \_MD_EXTCAL_CLONE_OF . $data['event_id'] . ')';
927
                $event->setVar('event_title', $newTitle);
928
            }
929
930
            $formTitle      = \_MD_EXTCAL_EDIT_EVENT;
931
            $formName       = 'modify_event';
0 ignored issues
show
Unused Code introduced by
The assignment to $formName is dead and can be removed.
Loading history...
932
            $title          = $event->getVar('event_title', 'e');
933
            $cat            = $event->getVar('cat_id');
934
            $desc           = $event->getVar('event_desc', 'e');
935
            $nbMember       = $event->getVar('event_nbmember', 'e');
936
            $organisateur   = $event->getVar('event_organisateur');
937
            $contact        = $event->getVar('event_contact', 'e');
938
            $url            = $event->getVar('event_url', 'e');
939
            $email          = $event->getVar('event_email', 'e');
940
            $event_address  = $event->getVar('event_address', 'e');
941
            $startDateValue = \xoops_getUserTimestamp($event->getVar('event_start'), $this->extcalTime->getUserTimeZone($GLOBALS['xoopsUser']));
942
            $endDateValue   = \xoops_getUserTimestamp($event->getVar('event_end'), $this->extcalTime->getUserTimeZone($GLOBALS['xoopsUser']));
943
            $event_picture1 = $event->getVar('event_picture1');
944
            $event_picture2 = $event->getVar('event_picture2');
945
            $event_price    = $event->getVar('event_price');
946
            $event_location = $event->getVar('event_location');
947
            $event_icone    = $event->getVar('event_icone');
948
949
            // Configuring recurring form
950
            $eventOptions = \explode('|', $event->getVar('event_recur_rules'));
951
            $reccurMode   = $eventOptions[0];
952
            \array_shift($eventOptions);
953
            switch ($reccurMode) {
954
                case 'daily':
955
956
                    $reccurOptions['rrule_freq']           = 'daily';
957
                    $reccurOptions['rrule_daily_interval'] = $eventOptions[0];
958
959
                    break;
960
                case 'weekly':
961
962
                    $reccurOptions['rrule_freq']            = 'weekly';
963
                    $reccurOptions['rrule_weekly_interval'] = $eventOptions[0];
964
                    \array_shift($eventOptions);
965
                    $reccurOptions['rrule_weekly_bydays'] = $eventOptions;
966
967
                    break;
968
                case 'monthly':
969
970
                    $reccurOptions['rrule_freq']             = 'monthly';
971
                    $reccurOptions['rrule_monthly_interval'] = $eventOptions[0];
972
                    \array_shift($eventOptions);
973
                    if (0 !== mb_strpos($eventOptions[0], 'MD')) {
974
                        $reccurOptions['rrule_monthly_byday'] = $eventOptions[0];
975
                    } else {
976
                        $reccurOptions['rrule_bymonthday'] = mb_substr($eventOptions[0], 2);
977
                    }
978
979
                    break;
980
                case 'yearly':
981
982
                    $reccurOptions['rrule_freq']            = 'yearly';
983
                    $reccurOptions['rrule_yearly_interval'] = $eventOptions[0];
984
                    \array_shift($eventOptions);
985
                    $reccurOptions['rrule_yearly_byday'] = $eventOptions[0];
986
                    \array_shift($eventOptions);
987
                    $reccurOptions['rrule_yearly_bymonths'] = $eventOptions;
988
989
                    break;
990
            }
991
992
            $files = $fileHandler->objectToArray($fileHandler->getEventFiles($data['event_id']));
0 ignored issues
show
Bug introduced by
The method getEventFiles() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoopsPersistableObjectHandler. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

992
            $files = $fileHandler->objectToArray($fileHandler->/** @scrutinizer ignore-call */ getEventFiles($data['event_id']));
Loading history...
Bug introduced by
The method objectToArray() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoopsPersistableObjectHandler. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

992
            /** @scrutinizer ignore-call */ 
993
            $files = $fileHandler->objectToArray($fileHandler->getEventFiles($data['event_id']));
Loading history...
993
            $fileHandler->formatFilesSize($files);
0 ignored issues
show
Bug introduced by
The method formatFilesSize() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoopsPersistableObjectHandler. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

993
            $fileHandler->/** @scrutinizer ignore-call */ 
994
                          formatFilesSize($files);
Loading history...
994
        } elseif ('preview' === $mode) {
995
            $formTitle      = \_MD_EXTCAL_SUBMIT_EVENT;
996
            $formName       = 'submit_event';
997
            $title          = $data['event_title'];
998
            $cat            = $data['cat_id'];
999
            $desc           = $data['event_desc'];
1000
            $nbMember       = $data['event_nbmember'];
1001
            $organisateur   = $data['event_organisateur'];
1002
            $contact        = $data['event_contact'];
1003
            $url            = $data['event_url'];
1004
            $email          = $data['event_email'];
1005
            $event_address  = $data['event_address'];
1006
            $startDateValue = $data['event_start'];
1007
            $endDateValue   = $data['event_end'];
1008
            $eventEndOk     = $data['have_end'];
0 ignored issues
show
Unused Code introduced by
The assignment to $eventEndOk is dead and can be removed.
Loading history...
1009
            $event_picture1 = $data['event_picture1'];
1010
            $event_picture2 = $data['event_picture2'];
1011
            $event_price    = $data['event_price'];
1012
            $event_location = $data['event_location'];
1013
            $event_icone    = $data['event_icone'];
1014
1015
            // Configuring recurring form
1016
            $eventOptions = \explode('|', $this->getRecurRules($_POST));
1017
            $reccurMode   = $eventOptions[0];
1018
            \array_shift($eventOptions);
1019
            switch ($reccurMode) {
1020
                case 'daily':
1021
1022
                    $reccurOptions['rrule_freq']           = 'daily';
1023
                    $reccurOptions['rrule_daily_interval'] = $eventOptions[0];
1024
1025
                    break;
1026
                case 'weekly':
1027
1028
                    $reccurOptions['rrule_freq']            = 'weekly';
1029
                    $reccurOptions['rrule_weekly_interval'] = $eventOptions[0];
1030
                    \array_shift($eventOptions);
1031
                    $reccurOptions['rrule_weekly_bydays'] = $eventOptions;
1032
1033
                    break;
1034
                case 'monthly':
1035
1036
                    $reccurOptions['rrule_freq']             = 'monthly';
1037
                    $reccurOptions['rrule_monthly_interval'] = $eventOptions[0];
1038
                    \array_shift($eventOptions);
1039
                    if (0 !== mb_strpos($eventOptions[0], 'MD')) {
1040
                        $reccurOptions['rrule_monthly_byday'] = $eventOptions[0];
1041
                    } else {
1042
                        $reccurOptions['rrule_bymonthday'] = mb_substr($eventOptions[0], 2);
1043
                    }
1044
1045
                    break;
1046
                case 'yearly':
1047
1048
                    $reccurOptions['rrule_freq']            = 'yearly';
1049
                    $reccurOptions['rrule_yearly_interval'] = $eventOptions[0];
1050
                    \array_shift($eventOptions);
1051
                    $reccurOptions['rrule_yearly_byday'] = $eventOptions[0];
1052
                    \array_shift($eventOptions);
1053
                    $reccurOptions['rrule_yearly_bymonths'] = $eventOptions;
1054
1055
                    break;
1056
            }
1057
1058
            $files = $fileHandler->objectToArray($fileHandler->getEventFiles($data['event_id']));
1059
            $fileHandler->formatFilesSize($files);
1060
        } else {
1061
            $formTitle      = \_MD_EXTCAL_SUBMIT_EVENT;
1062
            $formName       = 'submit_event';
1063
            $title          = '';
1064
            $cat            = '';
1065
            $desc           = '';
1066
            $nbMember       = 0;
1067
            $organisateur   = '';
1068
            $contact        = '';
1069
            $url            = '';
1070
            $email          = '';
1071
            $event_address  = '';
1072
            $startDateValue = 0;
1073
            $endDateValue   = 0;
1074
            $eventEndOk     = 0;
1075
            $event_picture1 = '';
1076
            $event_picture2 = '';
1077
            $event_price    = '';
1078
            $event_location = '';
1079
            $files          = [];
1080
            $event_icone    = '';
1081
        }
1082
1083
        // Create XoopsForm Object
1084
        $form = new Form\ThemeForm($formTitle, 'event_form', $action, 'post', true);
1085
        // Add this extra to allow file upload
1086
        $form->setExtra('enctype="multipart/form-data"');
1087
1088
        //-----------------------------------------------
1089
        // Title
1090
        $form->addElement(new \XoopsFormText(\_MD_EXTCAL_TITLE, 'event_title', 80, 255, $title), true);
1091
        //-----------------------------------------------
1092
        // Category select
1093
        $catSelect = new \XoopsFormSelect(\_MD_EXTCAL_CATEGORY, 'cat_id', $cat);
1094
        foreach ($cats as $cat) {
1095
            $catSelect->addOption($cat->getVar('cat_id'), $cat->getVar('cat_name'));
1096
        }
1097
        $form->addElement($catSelect, true);
1098
        // Icon
1099
        if (1 == $helper->getConfig('formShowIcon', 1)) {
1100
            $file_path = \dirname(__DIR__) . '/assets/css/images';
1101
            $tf        = \XoopsLists::getImgListAsArray($file_path);
1102
            \array_unshift($tf, \_MD_EXTCAL_NONE);
1103
            $xfIcones = new \XoopsFormSelect(\_MD_EXTCAL_ICONE, 'event_icone', $event_icone, '');
0 ignored issues
show
Bug introduced by
'' of type string is incompatible with the type integer expected by parameter $size of XoopsFormSelect::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1103
            $xfIcones = new \XoopsFormSelect(\_MD_EXTCAL_ICONE, 'event_icone', $event_icone, /** @scrutinizer ignore-type */ '');
Loading history...
1104
            $xfIcones->addOptionArray($tf);
1105
            $form->addElement($xfIcones, false);
1106
        } else {
1107
            $form->addElement(new \XoopsFormHidden('event_icone', $event_icone), false);
1108
        }
1109
        //location
1110
        if (1 == $helper->getConfig('formShowLocation', 1)) {
1111
            $locationHandler = Helper::getInstance()->getHandler(\_EXTCAL_CLN_LOCATION);
1112
            $location_select = new \XoopsFormSelect(\_MD_EXTCAL_LOCATION, 'event_location', $event_location);
1113
            $criteria        = new \CriteriaCompo();
1114
            $criteria->setSort('nom');
1115
            $criteria->setOrder('ASC');
1116
1117
            //$lstLocation = $locationHandler->getList($criteria);
1118
            $location_arr = $locationHandler->getAll($criteria);
0 ignored issues
show
Bug introduced by
The method getAll() does not exist on XoopsObjectHandler. It seems like you code against a sub-type of XoopsObjectHandler such as XoUserHandler or XoopsPersistableObjectHandler. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1118
            /** @scrutinizer ignore-call */ 
1119
            $location_arr = $locationHandler->getAll($criteria);
Loading history...
1119
            $tEts         = [];
1120
            $tEts[0]      = \_MD_EXTCAL_NONE;
1121
            foreach (\array_keys($location_arr) as $i) {
1122
                $tEts[$location_arr[$i]->getVar('id')] = $location_arr[$i]->getVar('nom');
1123
                //            $tEts[$location_arr[$i]['id']] = $location_arr[$i]['nom'];
1124
            }
1125
            //array_unshift($tEts, _MD_EXTCAL_NONE);
1126
1127
            $location_select->addOptionArray($tEts);
1128
            $form->addElement($location_select, true);
1129
        } else {
1130
            $form->addElement(new \XoopsFormHidden('event_location', $event_location), false);
1131
        }
1132
1133
        //-----------------------------------------------------------
1134
1135
        // Start and end
1136
        new Form\FormDateTime($form, $startDateValue, $endDateValue); //mb
1137
1138
        global $xoopsUser, $xoopsModule;
1139
        $isAdmin = false;
1140
        if (\is_object($xoopsUser)) {
1141
            $isAdmin = $xoopsUser->isAdmin($helper->getModule()->getVar('mid'));
1142
        }
1143
1144
        // Description
1145
        if (\class_exists('XoopsFormEditor')) {
1146
            $options['name']   = 'event_desc';
0 ignored issues
show
Comprehensibility Best Practice introduced by
$options was never initialized. Although not strictly required by PHP, it is generally a good practice to add $options = array(); before regardless.
Loading history...
1147
            $options['value']  = $desc;
1148
            $options['rows']   = 5;
1149
            $options['cols']   = '100%';
1150
            $options['width']  = '100%';
1151
            $options['height'] = '200px';
1152
            if ($isAdmin) {
1153
                $descEditor = new \XoopsFormEditor(\_MD_EXTCAL_DESCRIPTION, $helper->getConfig('editorAdmin'), $options, $nohtml = false, $onfailure = 'textarea');
1154
            } else {
1155
                $descEditor = new \XoopsFormEditor(\_MD_EXTCAL_DESCRIPTION, $helper->getConfig('editorUser'), $options, $nohtml = false, $onfailure = 'textarea');
1156
            }
1157
        } else {
1158
            $descEditor = new \XoopsFormDhtmlTextArea(\_MD_EXTCAL_DESCRIPTION, 'event_desc', $desc, '100%', '100%');
0 ignored issues
show
Bug introduced by
'100%' of type string is incompatible with the type integer expected by parameter $rows of XoopsFormDhtmlTextArea::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1158
            $descEditor = new \XoopsFormDhtmlTextArea(\_MD_EXTCAL_DESCRIPTION, 'event_desc', $desc, /** @scrutinizer ignore-type */ '100%', '100%');
Loading history...
Bug introduced by
'100%' of type string is incompatible with the type integer expected by parameter $cols of XoopsFormDhtmlTextArea::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1158
            $descEditor = new \XoopsFormDhtmlTextArea(\_MD_EXTCAL_DESCRIPTION, 'event_desc', $desc, '100%', /** @scrutinizer ignore-type */ '100%');
Loading history...
1159
        }
1160
        $form->addElement($descEditor);
1161
1162
        // Max registered member for this event
1163
        $nbMemberElement = new \XoopsFormText(\_MD_EXTCAL_NBMEMBER, 'event_nbmember', 4, 4, $nbMember);
1164
        $nbMemberElement->setDescription(\_MD_EXTCAL_NBMEMBER_DESC);
1165
        $form->addElement($nbMemberElement, false);
1166
1167
        //Price and monnaie
1168
        if (1 == $helper->getConfig('formShowPrice', 1)) {
1169
            $monnaie_price = new \XoopsFormElementTray(\_MD_EXTCAL_PRICE, '');
1170
            //price
1171
            $monnaie_price->addElement(new \XoopsFormText('', 'event_price', 20, 255, $event_price));
1172
            //monnaie
1173
            $monnaie = new \XoopsFormLabel(\_MD_EXTCAL_DEVISE2, '');
1174
            $monnaie_price->addElement($monnaie);
1175
            $form->addElement($monnaie_price);
1176
        } else {
1177
            $form->addElement(new \XoopsFormHidden('event_price', $event_price), false);
1178
        }
1179
        //----------------------------------------------------------------
1180
        if (1 == $helper->getConfig('formShowOrganizer', 1)) {
1181
            $form->addElement(new \XoopsFormText(\_MD_EXTCAL_ORGANISATEUR, 'event_organisateur', 80, 255, $organisateur), false);
1182
        } else {
1183
            $form->addElement(new \XoopsFormHidden('event_organisateur', $organisateur), false);
1184
        }
1185
        // Contact
1186
        if (1 == $helper->getConfig('formShowContact', 1)) {
1187
            $form->addElement(new \XoopsFormText(\_MD_EXTCAL_CONTACT, 'event_contact', 80, 255, $contact), false);
1188
        } else {
1189
            $form->addElement(new \XoopsFormHidden('event_contact', $contact), false);
1190
        }
1191
        // Url
1192
        if (1 == $helper->getConfig('formShowUrl', 1)) {
1193
            $form->addElement(new \XoopsFormText(\_MD_EXTCAL_URL, 'event_url', 80, 255, $url), false);
1194
        } else {
1195
            $form->addElement(new \XoopsFormHidden('event_url', $url), false);
1196
        }
1197
        // Email
1198
        if (1 == $helper->getConfig('formShowEmail', 1)) {
1199
            $form->addElement(new \XoopsFormText(\_MD_EXTCAL_EMAIL, 'event_email', 80, 255, $email), false);
1200
        } else {
1201
            $form->addElement(new \XoopsFormHidden('event_email', $email), false);
1202
        }
1203
1204
        // Address
1205
        if (1 == $helper->getConfig('formShowAddress', 1)) {
1206
            if (\class_exists('XoopsFormEditor')) {
1207
                $options['name']   = 'event_address';
1208
                $options['value']  = $event_address;
1209
                $options['rows']   = 5;
1210
                $options['cols']   = '100%';
1211
                $options['width']  = '100%';
1212
                $options['height'] = '200px';
1213
                if ($isAdmin) {
1214
                    $addressEditor = new \XoopsFormEditor(\_MD_EXTCAL_ADDRESS, $helper->getConfig('editorAdmin'), $options, $nohtml = false, $onfailure = 'textarea');
1215
                } else {
1216
                    $addressEditor = new \XoopsFormEditor(\_MD_EXTCAL_ADDRESS, $helper->getConfig('editorUser'), $options, $nohtml = false, $onfailure = 'textarea');
1217
                }
1218
            } else {
1219
                $addressEditor = new \XoopsFormDhtmlTextArea(\_MD_EXTCAL_ADDRESS, 'event_address', $event_address, '100%', '100%');
1220
            }
1221
            $form->addElement($addressEditor);
1222
        } else {
1223
            $form->addElement(new \XoopsFormHidden('event_address', $event_address), false);
1224
        }
1225
1226
        // Recurence form
1227
        if (1 == $helper->getConfig('formShowRecurence', 1)) {
1228
            $form->addElement(new Form\FormRecurRules($reccurOptions));
1229
        }
1230
        // File attachement
1231
        if (1 == $helper->getConfig('formShowFile', 1)) {
1232
            $fileElmtTray = new \XoopsFormElementTray(\_MD_EXTCAL_FILE_ATTACHEMENT, '<br>');
1233
1234
            // If they are attached file to this event
1235
            if (\count($files) > 0) {
0 ignored issues
show
Bug introduced by
It seems like $files can also be of type null; however, parameter $value of count() does only seem to accept Countable|array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1235
            if (\count(/** @scrutinizer ignore-type */ $files) > 0) {
Loading history...
1236
                $eventFiles = new Form\FormFileCheckBox('', 'filetokeep');
1237
                foreach ($files as $file) {
1238
                    $name = $file['file_nicename'] . ' (<i>' . $file['file_mimetype'] . '</i>) ' . $file['formated_file_size'];
1239
                    $eventFiles->addOption($file['file_id'], $name);
1240
                }
1241
                $fileElmtTray->addElement($eventFiles);
1242
            }
1243
            $fileElmtTray->addElement(new \XoopsFormFile('', 'event_file', 3145728));
1244
            $form->addElement($fileElmtTray);
1245
        }
1246
        if (isset($data['event_id'])) {
1247
            $form->addElement(new \XoopsFormHidden('event_id', $data['event_id']), false);
1248
        }
1249
        //Hack Kraven0
1250
        ///////////////////////////////////////////////////////////////////////////////
1251
        if (1 == $helper->getConfig('formShowPicture', 1)) {
1252
            //Picture1
1253
            $file_tray = new \XoopsFormElementTray(\sprintf(\_MD_EXTCAL_FORM_IMG, 1), '');
1254
            if (!empty($event_picture1)) {
1255
                $file_tray->addElement(new \XoopsFormLabel('', "<img src='" . XOOPS_URL . '/uploads/extcal/' . $event_picture1 . "' name='image' id='image' alt=''><br><br>"));
1256
                $check_del_img = new \XoopsFormCheckBox('', 'delimg_1');
1257
                $check_del_img->addOption(1, \_MD_EXTCAL_DEL_IMG);
1258
                $file_tray->addElement($check_del_img);
1259
                $file_img = new \XoopsFormFile(\_MD_EXTCAL_IMG, 'attachedimage1', 2145728);
1260
                unset($check_del_img);
1261
            } else {
1262
                $file_img = new \XoopsFormFile('', 'attachedimage1', 2145728);
1263
            }
1264
            $file_img->setExtra("size ='40'");
1265
            $file_tray->addElement($file_img);
1266
            $msg        = \sprintf(\_MD_EXTCAL_IMG_CONFIG, (int)(400728 / 1000), 500);
1267
            $file_label = new \XoopsFormLabel('', '<br>' . $msg);
1268
            $file_tray->addElement($file_label);
1269
            $form->addElement($file_tray);
1270
            $form->addElement(new \XoopsFormHidden('file1', $event_picture1));
1271
            unset($file_img, $file_tray);
1272
            //Picture2
1273
            $file_tray = new \XoopsFormElementTray(\sprintf(\_MD_EXTCAL_FORM_IMG, 2), '');
1274
            if (!empty($event_picture2)) {
1275
                $file_tray->addElement(new \XoopsFormLabel('', "<img src='" . XOOPS_URL . '/uploads/extcal/' . $event_picture2 . "' name='image' id='image' alt=''><br><br>"));
1276
                $check_del_img = new \XoopsFormCheckBox('', 'delimg_2');
1277
                $check_del_img->addOption(1, \_MD_EXTCAL_DEL_IMG);
1278
                $file_tray->addElement($check_del_img);
1279
                $file_img = new \XoopsFormFile(\_MD_EXTCAL_IMG, 'attachedimage2', 2145728);
1280
                unset($check_del_img);
1281
            } else {
1282
                $file_img = new \XoopsFormFile('', 'attachedimage2', 2145728);
1283
            }
1284
            $file_img->setExtra("size ='40'");
1285
            $file_tray->addElement($file_img);
1286
            $msg        = \sprintf(\_MD_EXTCAL_IMG_CONFIG, (int)(400728 / 1000), 500);
1287
            $file_label = new \XoopsFormLabel('', '<br>' . $msg);
1288
            $file_tray->addElement($file_label);
1289
            $form->addElement($file_tray);
1290
            $form->addElement(new \XoopsFormHidden('file2', $event_picture2));
1291
            unset($file_img, $file_tray);
1292
        }
1293
        ///////////////////////////////////////////////////////////////////////////////
1294
1295
        $buttonElmtTray = new \XoopsFormElementTray('', '&nbsp;');
1296
        $buttonElmtTray->addElement(new \XoopsFormButton('', 'form_submit', \_SUBMIT, 'submit'), false);
1297
        if ('user' === $siteSide) {
1298
            $buttonElmtTray->addElement(new \XoopsFormButton('', 'form_preview', \_MD_EXTCAL_PREVIEW, 'submit'), false);
1299
        }
1300
        $form->addElement($buttonElmtTray);
1301
1302
        return $form;
1303
    }
1304
1305
    /********************************************************************/
1306
1307
    /**
1308
     * @param $parm
1309
     *
1310
     * @return bool
1311
     */
1312
    public function getIsRecur($parm)
1313
    {
1314
        $recurFreq = ['daily', 'weekly', 'monthly', 'yearly'];
1315
1316
        return \in_array($parm['rrule_freq'], $recurFreq);
1317
    }
1318
1319
    /**
1320
     * @param $parm
1321
     *
1322
     * @return string
1323
     */
1324
    public function getRecurRules($parm)
1325
    {
1326
        //Utility::echoArray($parm);exit;
1327
1328
        // If this isn't a reccuring event
1329
        if (!$this->getIsRecur($parm)) {
1330
            return '';
1331
        }
1332
1333
        $recurRules = '';
1334
1335
        $recurFreq = $parm['rrule_freq'];
1336
1337
        switch ($recurFreq) {
1338
            case 'daily':
1339
                if (!isset($parm['rrule_daily_interval'])) {
1340
                    $parm['rrule_daily_interval'] = 0;
1341
                }
1342
                $recurRules = 'daily|';
1343
                $recurRules .= $parm['rrule_daily_interval'];
1344
1345
                break;
1346
            case 'weekly':
1347
                if (!isset($parm['rrule_weekly_interval'])) {
1348
                    $parm['rrule_weekly_interval'] = 0;
1349
                }
1350
                $recurRules = 'weekly|';
1351
                $recurRules .= $parm['rrule_weekly_interval'];
1352
                foreach ($parm['rrule_weekly_bydays'] as $day) {
1353
                    $recurRules .= '|' . $day;
1354
                }
1355
1356
                break;
1357
            case 'monthly':
1358
                if (!isset($parm['rrule_monthly_interval'])) {
1359
                    $parm['rrule_monthly_interval'] = 0;
1360
                }
1361
                $recurRules = 'monthly|';
1362
                $recurRules .= $parm['rrule_monthly_interval'] . '|';
1363
                if ('' != $parm['rrule_monthly_byday']) {
1364
                    $recurRules .= $parm['rrule_monthly_byday'];
1365
                } else {
1366
                    $recurRules .= 'MD' . $parm['rrule_bymonthday'];
1367
                }
1368
1369
                break;
1370
            case 'yearly':
1371
                //JJD - to valid modif
1372
                //
1373
                //                 if ($parm['rrule_yearly_byday'] == "") {
1374
                //                     list($year, $month, $day) = explode("-", $parm['event_start']['date']);
1375
                //                     $parm['rrule_yearly_byday'] = date("j", mktime(0, 0, 0, $month, $day, $year));
1376
                //                 }
1377
                //
1378
                //                 $recurRules = 'yearly|';
1379
                //                 $recurRules .= $parm['rrule_yearly_interval'];
1380
                //                 $recurRules .= '|' . $parm['rrule_yearly_byday'];
1381
                //                 foreach (
1382
                //                     $parm['rrule_yearly_bymonths'] as $month
1383
                //) {
1384
                //                     $recurRules .= '|' . $month;
1385
                //                 }
1386
                //
1387
                //                 break;
1388
1389
                if (!isset($parm['rrule_yearly_interval'])) {
1390
                    $parm['rrule_yearly_interval'] = 0;
1391
                }
1392
                if ('' == $parm['rrule_yearly_byday']) {
1393
                    $time                       = \strtotime($parm['event_start']['date']);
1394
                    $parm['rrule_yearly_byday'] = \date('j', \mktime(0, 0, 0, \date('m', $time), \date('d', $time), \date('Y', $time)));
0 ignored issues
show
Bug introduced by
date('Y', $time) of type string is incompatible with the type integer expected by parameter $year of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1394
                    $parm['rrule_yearly_byday'] = \date('j', \mktime(0, 0, 0, \date('m', $time), \date('d', $time), /** @scrutinizer ignore-type */ \date('Y', $time)));
Loading history...
Bug introduced by
date('m', $time) of type string is incompatible with the type integer expected by parameter $month of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1394
                    $parm['rrule_yearly_byday'] = \date('j', \mktime(0, 0, 0, /** @scrutinizer ignore-type */ \date('m', $time), \date('d', $time), \date('Y', $time)));
Loading history...
Bug introduced by
date('d', $time) of type string is incompatible with the type integer expected by parameter $day of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1394
                    $parm['rrule_yearly_byday'] = \date('j', \mktime(0, 0, 0, \date('m', $time), /** @scrutinizer ignore-type */ \date('d', $time), \date('Y', $time)));
Loading history...
1395
                }
1396
1397
                $recurRules = 'yearly|';
1398
                $recurRules .= $parm['rrule_yearly_interval'];
1399
                $recurRules .= '|' . $parm['rrule_yearly_byday'];
1400
                foreach ($parm['rrule_yearly_bymonths'] as $month) {
1401
                    $recurRules .= '|' . $month;
1402
                }
1403
1404
                break;
1405
        }
1406
1407
        return $recurRules;
1408
    }
1409
1410
    /**
1411
     * @param $data
1412
     * @param $parm
1413
     *
1414
     * @return int
1415
     */
1416
    public function getRecurStart($data, $parm)
1417
    {
1418
        // If this isn't a reccuring event
1419
        if (!$this->getIsRecur($parm)) {
1420
            return 0;
1421
        }
1422
1423
        return $data['event_start'];
1424
    }
1425
1426
    /**
1427
     * @param $data
1428
     * @param $parm
1429
     *
1430
     * @return int
1431
     */
1432
    public function getRecurEnd($data, $parm)
1433
    {
1434
        if (!$this->getIsRecur($parm)) {
1435
            return 0;
1436
        }
1437
1438
        $recurFreq = $parm['rrule_freq'];
1439
1440
        $recurStart = $this->getRecurStart($data, $parm);
1441
1442
        switch ($recurFreq) {
1443
            case 'daily':
1444
                $interval = $parm['rrule_daily_interval'];
1445
                $recurEnd = $recurStart + ($interval * \_EXTCAL_TS_DAY) - 1;
1446
1447
                break;
1448
            case 'weekly':
1449
                // Getting the first weekday TS
1450
                $startWeekTS = \mktime(0, 0, 0, \date('n', $data['event_recur_start']), \date('j', $data['event_recur_start']), \date('Y', $data['event_recur_start']));
0 ignored issues
show
Bug introduced by
date('j', $data['event_recur_start']) of type string is incompatible with the type integer expected by parameter $day of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1450
                $startWeekTS = \mktime(0, 0, 0, \date('n', $data['event_recur_start']), /** @scrutinizer ignore-type */ \date('j', $data['event_recur_start']), \date('Y', $data['event_recur_start']));
Loading history...
Bug introduced by
date('Y', $data['event_recur_start']) of type string is incompatible with the type integer expected by parameter $year of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1450
                $startWeekTS = \mktime(0, 0, 0, \date('n', $data['event_recur_start']), \date('j', $data['event_recur_start']), /** @scrutinizer ignore-type */ \date('Y', $data['event_recur_start']));
Loading history...
Bug introduced by
date('n', $data['event_recur_start']) of type string is incompatible with the type integer expected by parameter $month of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1450
                $startWeekTS = \mktime(0, 0, 0, /** @scrutinizer ignore-type */ \date('n', $data['event_recur_start']), \date('j', $data['event_recur_start']), \date('Y', $data['event_recur_start']));
Loading history...
1451
                $offset      = \date('w', $startWeekTS) - Helper::getInstance()->getConfig('week_start_day');
1452
                $startWeekTS -= ($offset * \_EXTCAL_TS_DAY);
1453
1454
                $recurEnd = $startWeekTS + ($parm['rrule_weekly_interval'] * \_EXTCAL_TS_WEEK) - 1;
1455
1456
                break;
1457
            case 'monthly':
1458
                $recurEnd = $recurStart + ($parm['rrule_monthly_interval'] * 2678400) - 1;
1459
1460
                break;
1461
            case 'yearly':
1462
                $recurEnd = $recurStart + ($parm['rrule_yearly_interval'] * 32140800) - 1;
1463
1464
                break;
1465
        }
1466
1467
        return $recurEnd;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $recurEnd does not seem to be defined for all execution paths leading up to this point.
Loading history...
1468
    }
1469
1470
    /*******************************************************************
1471
     *
1472
     ******************************************************************
1473
     * @param $event
1474
     * @param $periodStart
1475
     * @param $periodEnd
1476
     * @return array
1477
     */
1478
    public function getRecurEventToDisplay($event, $periodStart, $periodEnd)
1479
    {
1480
        $recuEvents   = [];
1481
        $eventOptions = \explode('|', $event['event_recur_rules']);
1482
1483
        switch ($eventOptions[0]) {
1484
            case 'daily':
1485
                \array_shift($eventOptions);
1486
                $rRuleInterval = $eventOptions[0];
1487
                if ('' == $rRuleInterval || 0 == $rRuleInterval) {
1488
                    $rRuleInterval = 54;
1489
                }
1490
1491
                $occurEventStart = $event['event_recur_start'];
1492
                $occurEventEnd   = $event['event_recur_start'] + ($event['event_end'] - $event['event_start']);
1493
1494
                $nbOccur = 0;
1495
                // This variable is used to stop the loop after we add all occur on the view to keep good performance
1496
                $isOccurOnPeriod = false;
1497
                // Parse all occurence of this event
1498
                while ($nbOccur < $rRuleInterval) {
1499
                    // Add this event occurence only if it's on the period view
1500
                    if // Event start falls within search period
1501
                    ($occurEventStart <= $periodEnd
1502
                     && // Event end falls within search period
1503
                     $occurEventEnd >= $periodStart) {
1504
                        $event['event_start'] = $occurEventStart;
1505
                        $event['event_end']   = $occurEventEnd;
1506
1507
                        $recuEvents[]    = $event;
1508
                        $isOccurOnPeriod = true;
1509
                    } elseif ($isOccurOnPeriod) {
1510
                        break;
1511
                    }
1512
1513
                    $occurEventStart += \_EXTCAL_TS_DAY;
1514
                    $occurEventEnd   += \_EXTCAL_TS_DAY;
1515
1516
                    ++$nbOccur;
1517
                }
1518
1519
                break;
1520
            case 'weekly':
1521
1522
                \array_shift($eventOptions);
1523
                $rRuleInterval = $eventOptions[0];
1524
                if ('' == $rRuleInterval || 0 == $rRuleInterval) {
1525
                    $rRuleInterval = 54;
1526
                }
1527
                \array_shift($eventOptions);
1528
1529
                // Getting the first weekday TS
1530
                $startWeekTS = \mktime(0, 0, 0, \date('n', $event['event_recur_start']), \date('j', $event['event_recur_start']), \date('Y', $event['event_recur_start']));
0 ignored issues
show
Bug introduced by
date('Y', $event['event_recur_start']) of type string is incompatible with the type integer expected by parameter $year of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1530
                $startWeekTS = \mktime(0, 0, 0, \date('n', $event['event_recur_start']), \date('j', $event['event_recur_start']), /** @scrutinizer ignore-type */ \date('Y', $event['event_recur_start']));
Loading history...
Bug introduced by
date('n', $event['event_recur_start']) of type string is incompatible with the type integer expected by parameter $month of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1530
                $startWeekTS = \mktime(0, 0, 0, /** @scrutinizer ignore-type */ \date('n', $event['event_recur_start']), \date('j', $event['event_recur_start']), \date('Y', $event['event_recur_start']));
Loading history...
Bug introduced by
date('j', $event['event_recur_start']) of type string is incompatible with the type integer expected by parameter $day of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1530
                $startWeekTS = \mktime(0, 0, 0, \date('n', $event['event_recur_start']), /** @scrutinizer ignore-type */ \date('j', $event['event_recur_start']), \date('Y', $event['event_recur_start']));
Loading history...
1531
                $offset      = \date('w', $startWeekTS) - Helper::getInstance()->getConfig('week_start_day');
1532
                $startWeekTS = $startWeekTS - ($offset * \_EXTCAL_TS_DAY) + \_EXTCAL_TS_WEEK;
1533
1534
                $occurEventStart = $event['event_recur_start'];
1535
                $occurEventEnd   = $event['event_recur_start'] + ($event['event_end'] - $event['event_start']);
1536
1537
                $dayArray = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];
1538
1539
                $nbOccur = 0;
1540
1541
                // Parse all occurence of this event
1542
                while ($nbOccur < $rRuleInterval) {
1543
                    // Add this event occurence only if it's on the period view and according to day
1544
                    if ($occurEventStart <= $periodEnd // Event start falls within search period
1545
                        && $occurEventEnd >= $periodStart // Event end falls within search period
1546
                        && \in_array($dayArray[\date('w', $occurEventStart)], $eventOptions)) {
1547
                        // This week day is selected
1548
1549
                        $event['event_start'] = $occurEventStart;
1550
                        $event['event_end']   = $occurEventEnd;
1551
1552
                        $recuEvents[] = $event;
1553
                    }
1554
1555
                    $occurEventStart += \_EXTCAL_TS_DAY;
1556
                    $occurEventEnd   += \_EXTCAL_TS_DAY;
1557
1558
                    if ($occurEventStart >= $startWeekTS) {
1559
                        ++$nbOccur;
1560
                        $startWeekTS += \_EXTCAL_TS_WEEK;
1561
                    }
1562
                }
1563
1564
                break;
1565
            case 'monthly':
1566
                \array_shift($eventOptions);
1567
                $rRuleInterval = $eventOptions[0];
1568
                if ('' == $rRuleInterval || 0 == $rRuleInterval) {
1569
                    $rRuleInterval = 100;
1570
                }
1571
                \array_shift($eventOptions);
1572
1573
                $day   = \date('j', $event['event_recur_start']);
1574
                $month = \date('n', $event['event_recur_start']);
1575
                $year  = \date('Y', $event['event_recur_start']);
1576
1577
                $nbOccur = 0;
1578
1579
                $eventHourOccurStart = $event['event_recur_start'] - \mktime(0, 0, 0, $month, $day, $year);
1580
                $eventHourOccurEnd   = $event['event_end'] - $event['event_start'];
1581
1582
                // Parse all occurence of this event
1583
                while ($nbOccur < $rRuleInterval) {
1584
                    $eventDayOccurStart = $this->getOccurTS($month, $year, $eventOptions[0]);
1585
                    if (!$eventDayOccurStart) {
1586
                        $eventDayOccurStart = \mktime(0, 0, 0, $month, $day, $year);
1587
                    }
1588
1589
                    $occurEventStart = $eventDayOccurStart + $eventHourOccurStart;
1590
                    $occurEventEnd   = $occurEventStart + $eventHourOccurEnd;
1591
1592
                    if // Event start falls within search period
1593
                    ($occurEventStart <= $periodEnd
1594
                     && // Event end falls within search period
1595
                     $occurEventEnd >= $periodStart
1596
                     && // This occur is after start reccur date
1597
                     $occurEventStart >= $event['event_recur_start']) {
1598
                        $event['event_start'] = $occurEventStart;
1599
                        $event['event_end']   = $occurEventEnd;
1600
1601
                        $recuEvents[] = $event;
1602
                    } elseif ($occurEventStart > $periodEnd) {
1603
                        break;
1604
                    }
1605
1606
                    if (13 == ++$month) {
1607
                        $month = 1;
1608
                        ++$year;
1609
                    }
1610
1611
                    ++$nbOccur;
1612
                }
1613
1614
                break;
1615
            case 'yearly':
1616
                \array_shift($eventOptions);
1617
                $rRuleInterval = $eventOptions[0];
1618
                if ('' == $rRuleInterval || 0 == $rRuleInterval) {
1619
                    $rRuleInterval = 10;
1620
                }
1621
                \array_shift($eventOptions);
1622
                $dayCode = $eventOptions[0];
1623
                \array_shift($eventOptions);
1624
1625
                $day   = \date('j', $event['event_recur_start']);
1626
                $month = \date('n', $event['event_recur_start']);
1627
                $year  = \date('Y', $event['event_recur_start']);
1628
1629
                $nbOccur = 0;
1630
1631
                $eventHourOccurStart = $event['event_recur_start'] - \mktime(0, 0, 0, $month, $day, $year);
1632
                $eventHourOccurEnd   = $event['event_end'] - $event['event_start'];
1633
1634
                // If recurring month not specified, make it starting month
1635
                if (!\count($eventOptions)) {
1636
                    $eventOptions[] = $month;
1637
                }
1638
1639
                // Parse all occurence of this event
1640
                while ($nbOccur < $rRuleInterval) {
1641
                    $eventDayOccurStart = $this->getOccurTS($month, $year, $dayCode);
1642
                    if (!$eventDayOccurStart) {
1643
                        $eventDayOccurStart = \mktime(0, 0, 0, $month, $day, $year);
1644
                    }
1645
1646
                    $occurEventStart = $eventDayOccurStart + $eventHourOccurStart;
1647
                    $occurEventEnd   = $eventDayOccurStart + $eventHourOccurEnd;
1648
1649
                    if // Event start falls within search period
1650
                    (($occurEventStart <= $periodEnd)
1651
                     && // Event end falls within search period
1652
                     ($occurEventEnd >= $periodStart)
1653
                     && // This week day is selected
1654
                     \in_array($month, $eventOptions)) {
1655
                        $event['event_start'] = $occurEventStart;
1656
                        $event['event_end']   = $occurEventEnd;
1657
1658
                        $recuEvents[] = $event;
1659
                    } elseif ($occurEventStart > $periodEnd) {
1660
                        break;
1661
                    }
1662
1663
                    if (13 == ++$month) {
1664
                        $month = 1;
1665
                        ++$year;
1666
                        ++$nbOccur;
1667
                    }
1668
                }
1669
1670
                break;
1671
        }
1672
1673
        return $recuEvents;
1674
    }
1675
1676
    //-----------------------------------------------------------------
1677
1678
    /**
1679
     * @param $month
1680
     * @param $year
1681
     * @param $dayCode
1682
     *
1683
     * @return int
1684
     */
1685
    public function getOccurTS($month, $year, $dayCode)
1686
    {
1687
        if (0 === mb_strpos($dayCode, 'MD')) {
1688
            if ('' != mb_substr($dayCode, 2)) {
1689
                return \mktime(0, 0, 0, $month, mb_substr($dayCode, 2), $year);
0 ignored issues
show
Bug introduced by
mb_substr($dayCode, 2) of type string is incompatible with the type integer expected by parameter $day of mktime(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1689
                return \mktime(0, 0, 0, $month, /** @scrutinizer ignore-type */ mb_substr($dayCode, 2), $year);
Loading history...
1690
            }
1691
1692
            return 0;
1693
        }
1694
        switch ($dayCode) {
1695
            case '1SU':
1696
1697
                $ts        = \mktime(0, 0, 0, $month, 1, $year);
1698
                $dayOfWeek = \date('w', $ts);
1699
                $ts        = (0 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1700
                $i         = 0;
1701
                while (0 != $dayOfWeek % 7) {
1702
                    ++$dayOfWeek;
1703
                    ++$i;
1704
                }
1705
1706
                return $ts + (\_EXTCAL_TS_DAY * $i);
1707
                break;
0 ignored issues
show
Unused Code introduced by
break is not strictly necessary here and could be removed.

The break statement is not necessary if it is preceded for example by a return statement:

switch ($x) {
    case 1:
        return 'foo';
        break; // This break is not necessary and can be left off.
}

If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.

Loading history...
1708
            case '1MO':
1709
1710
                $ts        = \mktime(0, 0, 0, $month, 1, $year);
1711
                $dayOfWeek = \date('w', $ts);
1712
                $ts        = (1 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1713
                $i         = 0;
1714
                while (1 != $dayOfWeek % 7) {
1715
                    ++$dayOfWeek;
1716
                    ++$i;
1717
                }
1718
1719
                return $ts + (\_EXTCAL_TS_DAY * $i);
1720
                break;
1721
            case '1TU':
1722
1723
                $ts        = \mktime(0, 0, 0, $month, 1, $year);
1724
                $dayOfWeek = \date('w', $ts);
1725
                $ts        = (2 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1726
                $i         = 0;
1727
                while (2 != $dayOfWeek % 7) {
1728
                    ++$dayOfWeek;
1729
                    ++$i;
1730
                }
1731
1732
                return $ts + (\_EXTCAL_TS_DAY * $i);
1733
                break;
1734
            case '1WE':
1735
1736
                $ts        = \mktime(0, 0, 0, $month, 1, $year);
1737
                $dayOfWeek = \date('w', $ts);
1738
                $ts        = (3 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1739
                $i         = 0;
1740
                while (3 != $dayOfWeek % 7) {
1741
                    ++$dayOfWeek;
1742
                    ++$i;
1743
                }
1744
1745
                return $ts + (\_EXTCAL_TS_DAY * $i);
1746
                break;
1747
            case '1TH':
1748
1749
                $ts        = \mktime(0, 0, 0, $month, 1, $year);
1750
                $dayOfWeek = \date('w', $ts);
1751
                $ts        = (4 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1752
                $i         = 0;
1753
                while (4 != $dayOfWeek % 7) {
1754
                    ++$dayOfWeek;
1755
                    ++$i;
1756
                }
1757
1758
                return $ts + (\_EXTCAL_TS_DAY * $i);
1759
                break;
1760
            case '1FR':
1761
1762
                $ts        = \mktime(0, 0, 0, $month, 1, $year);
1763
                $dayOfWeek = \date('w', $ts);
1764
                $ts        = (5 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1765
                $i         = 0;
1766
                while (5 != $dayOfWeek % 7) {
1767
                    ++$dayOfWeek;
1768
                    ++$i;
1769
                }
1770
1771
                return $ts + (\_EXTCAL_TS_DAY * $i);
1772
                break;
1773
            case '1SA':
1774
1775
                $ts        = \mktime(0, 0, 0, $month, 1, $year);
1776
                $dayOfWeek = \date('w', $ts);
1777
                $ts        = (6 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1778
                $i         = 0;
1779
                while (6 != $dayOfWeek % 7) {
1780
                    ++$dayOfWeek;
1781
                    ++$i;
1782
                }
1783
1784
                return $ts + (\_EXTCAL_TS_DAY * $i);
1785
                break;
1786
            case '2SU':
1787
1788
                $ts        = \mktime(0, 0, 0, $month, 7, $year);
1789
                $dayOfWeek = \date('w', $ts);
1790
                $ts        = (0 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1791
                $i         = 0;
1792
                while (0 != $dayOfWeek % 7) {
1793
                    ++$dayOfWeek;
1794
                    ++$i;
1795
                }
1796
1797
                return $ts + (\_EXTCAL_TS_DAY * $i);
1798
                break;
1799
            case '2MO':
1800
1801
                $ts        = \mktime(0, 0, 0, $month, 7, $year);
1802
                $dayOfWeek = \date('w', $ts);
1803
                $ts        = (1 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1804
                $i         = 0;
1805
                while (1 != $dayOfWeek % 7) {
1806
                    ++$dayOfWeek;
1807
                    ++$i;
1808
                }
1809
1810
                return $ts + (\_EXTCAL_TS_DAY * $i);
1811
                break;
1812
            case '2TU':
1813
1814
                $ts        = \mktime(0, 0, 0, $month, 7, $year);
1815
                $dayOfWeek = \date('w', $ts);
1816
                $ts        = (2 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1817
                $i         = 0;
1818
                while (2 != $dayOfWeek % 7) {
1819
                    ++$dayOfWeek;
1820
                    ++$i;
1821
                }
1822
1823
                return $ts + (\_EXTCAL_TS_DAY * $i);
1824
                break;
1825
            case '2WE':
1826
1827
                $ts        = \mktime(0, 0, 0, $month, 7, $year);
1828
                $dayOfWeek = \date('w', $ts);
1829
                $ts        = (3 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1830
                $i         = 0;
1831
                while (3 != $dayOfWeek % 7) {
1832
                    ++$dayOfWeek;
1833
                    ++$i;
1834
                }
1835
1836
                return $ts + (\_EXTCAL_TS_DAY * $i);
1837
                break;
1838
            case '2TH':
1839
1840
                $ts        = \mktime(0, 0, 0, $month, 7, $year);
1841
                $dayOfWeek = \date('w', $ts);
1842
                $ts        = (4 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1843
                $i         = 0;
1844
                while (4 != $dayOfWeek % 7) {
1845
                    ++$dayOfWeek;
1846
                    ++$i;
1847
                }
1848
1849
                return $ts + (\_EXTCAL_TS_DAY * $i);
1850
                break;
1851
            case '2FR':
1852
1853
                $ts        = \mktime(0, 0, 0, $month, 7, $year);
1854
                $dayOfWeek = \date('w', $ts);
1855
                $ts        = (5 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1856
                $i         = 0;
1857
                while (5 != $dayOfWeek % 7) {
1858
                    ++$dayOfWeek;
1859
                    ++$i;
1860
                }
1861
1862
                return $ts + (\_EXTCAL_TS_DAY * $i);
1863
                break;
1864
            case '2SA':
1865
1866
                $ts        = \mktime(0, 0, 0, $month, 7, $year);
1867
                $dayOfWeek = \date('w', $ts);
1868
                $ts        = (6 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1869
                $i         = 0;
1870
                while (6 != $dayOfWeek % 7) {
1871
                    ++$dayOfWeek;
1872
                    ++$i;
1873
                }
1874
1875
                return $ts + (\_EXTCAL_TS_DAY * $i);
1876
                break;
1877
            case '3SU':
1878
1879
                $ts        = \mktime(0, 0, 0, $month, 14, $year);
1880
                $dayOfWeek = \date('w', $ts);
1881
                $ts        = (0 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1882
                $i         = 0;
1883
                while (0 != $dayOfWeek % 7) {
1884
                    ++$dayOfWeek;
1885
                    ++$i;
1886
                }
1887
1888
                return $ts + (\_EXTCAL_TS_DAY * $i);
1889
                break;
1890
            case '3MO':
1891
1892
                $ts        = \mktime(0, 0, 0, $month, 14, $year);
1893
                $dayOfWeek = \date('w', $ts);
1894
                $ts        = (1 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1895
                $i         = 0;
1896
                while (1 != $dayOfWeek % 7) {
1897
                    ++$dayOfWeek;
1898
                    ++$i;
1899
                }
1900
1901
                return $ts + (\_EXTCAL_TS_DAY * $i);
1902
                break;
1903
            case '3TU':
1904
1905
                $ts        = \mktime(0, 0, 0, $month, 14, $year);
1906
                $dayOfWeek = \date('w', $ts);
1907
                $ts        = (2 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1908
                $i         = 0;
1909
                while (2 != $dayOfWeek % 7) {
1910
                    ++$dayOfWeek;
1911
                    ++$i;
1912
                }
1913
1914
                return $ts + (\_EXTCAL_TS_DAY * $i);
1915
                break;
1916
            case '3WE':
1917
1918
                $ts        = \mktime(0, 0, 0, $month, 14, $year);
1919
                $dayOfWeek = \date('w', $ts);
1920
                $ts        = (3 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1921
                $i         = 0;
1922
                while (3 != $dayOfWeek % 7) {
1923
                    ++$dayOfWeek;
1924
                    ++$i;
1925
                }
1926
1927
                return $ts + (\_EXTCAL_TS_DAY * $i);
1928
                break;
1929
            case '3TH':
1930
1931
                $ts        = \mktime(0, 0, 0, $month, 14, $year);
1932
                $dayOfWeek = \date('w', $ts);
1933
                $ts        = (4 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1934
                $i         = 0;
1935
                while (4 != $dayOfWeek % 7) {
1936
                    ++$dayOfWeek;
1937
                    ++$i;
1938
                }
1939
1940
                return $ts + (\_EXTCAL_TS_DAY * $i);
1941
                break;
1942
            case '3FR':
1943
1944
                $ts        = \mktime(0, 0, 0, $month, 14, $year);
1945
                $dayOfWeek = \date('w', $ts);
1946
                $ts        = (5 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1947
                $i         = 0;
1948
                while (5 != $dayOfWeek % 7) {
1949
                    ++$dayOfWeek;
1950
                    ++$i;
1951
                }
1952
1953
                return $ts + (\_EXTCAL_TS_DAY * $i);
1954
                break;
1955
            case '3SA':
1956
1957
                $ts        = \mktime(0, 0, 0, $month, 14, $year);
1958
                $dayOfWeek = \date('w', $ts);
1959
                $ts        = (6 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1960
                $i         = 0;
1961
                while (6 != $dayOfWeek % 7) {
1962
                    ++$dayOfWeek;
1963
                    ++$i;
1964
                }
1965
1966
                return $ts + (\_EXTCAL_TS_DAY * $i);
1967
                break;
1968
            case '4SU':
1969
1970
                $ts        = \mktime(0, 0, 0, $month, 21, $year);
1971
                $dayOfWeek = \date('w', $ts);
1972
                $ts        = (0 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1973
                $i         = 0;
1974
                while (0 != $dayOfWeek % 7) {
1975
                    ++$dayOfWeek;
1976
                    ++$i;
1977
                }
1978
1979
                return $ts + (\_EXTCAL_TS_DAY * $i);
1980
                break;
1981
            case '4MO':
1982
1983
                $ts        = \mktime(0, 0, 0, $month, 21, $year);
1984
                $dayOfWeek = \date('w', $ts);
1985
                $ts        = (1 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1986
                $i         = 0;
1987
                while (1 != $dayOfWeek % 7) {
1988
                    ++$dayOfWeek;
1989
                    ++$i;
1990
                }
1991
1992
                return $ts + (\_EXTCAL_TS_DAY * $i);
1993
                break;
1994
            case '4TU':
1995
1996
                $ts        = \mktime(0, 0, 0, $month, 21, $year);
1997
                $dayOfWeek = \date('w', $ts);
1998
                $ts        = (2 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
1999
                $i         = 0;
2000
                while (2 != $dayOfWeek % 7) {
2001
                    ++$dayOfWeek;
2002
                    ++$i;
2003
                }
2004
2005
                return $ts + (\_EXTCAL_TS_DAY * $i);
2006
                break;
2007
            case '4WE':
2008
2009
                $ts        = \mktime(0, 0, 0, $month, 21, $year);
2010
                $dayOfWeek = \date('w', $ts);
2011
                $ts        = (3 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
2012
                $i         = 0;
2013
                while (3 != $dayOfWeek % 7) {
2014
                    ++$dayOfWeek;
2015
                    ++$i;
2016
                }
2017
2018
                return $ts + (\_EXTCAL_TS_DAY * $i);
2019
                break;
2020
            case '4TH':
2021
2022
                $ts        = \mktime(0, 0, 0, $month, 21, $year);
2023
                $dayOfWeek = \date('w', $ts);
2024
                $ts        = (4 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
2025
                $i         = 0;
2026
                while (4 != $dayOfWeek % 7) {
2027
                    ++$dayOfWeek;
2028
                    ++$i;
2029
                }
2030
2031
                return $ts + (\_EXTCAL_TS_DAY * $i);
2032
                break;
2033
            case '4FR':
2034
2035
                $ts        = \mktime(0, 0, 0, $month, 21, $year);
2036
                $dayOfWeek = \date('w', $ts);
2037
                $ts        = (5 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
2038
                $i         = 0;
2039
                while (5 != $dayOfWeek % 7) {
2040
                    ++$dayOfWeek;
2041
                    ++$i;
2042
                }
2043
2044
                return $ts + (\_EXTCAL_TS_DAY * $i);
2045
                break;
2046
            case '4SA':
2047
2048
                $ts        = \mktime(0, 0, 0, $month, 21, $year);
2049
                $dayOfWeek = \date('w', $ts);
2050
                $ts        = (6 == \date('w', $ts)) ? $ts + (\_EXTCAL_TS_DAY * 7) : $ts;
2051
                $i         = 0;
2052
                while (6 != $dayOfWeek % 7) {
2053
                    ++$dayOfWeek;
2054
                    ++$i;
2055
                }
2056
2057
                return $ts + (\_EXTCAL_TS_DAY * $i);
2058
                break;
2059
            case '-1SU':
2060
2061
                $ts        = \mktime(0, 0, 0, $month, \date('t', \mktime(0, 0, 0, $month, 1, $year)), $year);
2062
                $dayOfWeek = \date('w', $ts);
2063
                $i         = 0;
2064
                while (0 != $dayOfWeek % 7) {
2065
                    ++$dayOfWeek;
2066
                    ++$i;
2067
                }
2068
                if (0 == $i) {
2069
                    return $ts;
2070
                }
2071
2072
                return $ts + (\_EXTCAL_TS_DAY * ($i - 7));
2073
                break;
2074
            case '-1MO':
2075
2076
                $ts        = \mktime(0, 0, 0, $month, \date('t', \mktime(0, 0, 0, $month, 1, $year)), $year);
2077
                $dayOfWeek = \date('w', $ts);
2078
                $i         = 0;
2079
                while (1 != $dayOfWeek % 7) {
2080
                    ++$dayOfWeek;
2081
                    ++$i;
2082
                }
2083
                if (0 == $i) {
2084
                    return $ts;
2085
                }
2086
2087
                return $ts + (\_EXTCAL_TS_DAY * ($i - 7));
2088
                break;
2089
            case '-1TU':
2090
2091
                $ts        = \mktime(0, 0, 0, $month, \date('t', \mktime(0, 0, 0, $month, 1, $year)), $year);
2092
                $dayOfWeek = \date('w', $ts);
2093
                $i         = 0;
2094
                while (2 != $dayOfWeek % 7) {
2095
                    ++$dayOfWeek;
2096
                    ++$i;
2097
                }
2098
                if (0 == $i) {
2099
                    return $ts;
2100
                }
2101
2102
                return $ts + (\_EXTCAL_TS_DAY * ($i - 7));
2103
                break;
2104
            case '-1WE':
2105
2106
                $ts        = \mktime(0, 0, 0, $month, \date('t', \mktime(0, 0, 0, $month, 1, $year)), $year);
2107
                $dayOfWeek = \date('w', $ts);
2108
                $i         = 0;
2109
                while (3 != $dayOfWeek % 7) {
2110
                    ++$dayOfWeek;
2111
                    ++$i;
2112
                }
2113
                if (0 == $i) {
2114
                    return $ts;
2115
                }
2116
2117
                return $ts + (\_EXTCAL_TS_DAY * ($i - 7));
2118
                break;
2119
            case '-1TH':
2120
2121
                $ts        = \mktime(0, 0, 0, $month, \date('t', \mktime(0, 0, 0, $month, 1, $year)), $year);
2122
                $dayOfWeek = \date('w', $ts);
2123
                $i         = 0;
2124
                while (4 != $dayOfWeek % 7) {
2125
                    ++$dayOfWeek;
2126
                    ++$i;
2127
                }
2128
                if (0 == $i) {
2129
                    return $ts;
2130
                }
2131
2132
                return $ts + (\_EXTCAL_TS_DAY * ($i - 7));
2133
                break;
2134
            case '-1FR':
2135
2136
                $ts        = \mktime(0, 0, 0, $month, \date('t', \mktime(0, 0, 0, $month, 1, $year)), $year);
2137
                $dayOfWeek = \date('w', $ts);
2138
                $i         = 0;
2139
                while (5 != $dayOfWeek % 7) {
2140
                    ++$dayOfWeek;
2141
                    ++$i;
2142
                }
2143
                if (0 == $i) {
2144
                    return $ts;
2145
                }
2146
2147
                return $ts + (\_EXTCAL_TS_DAY * ($i - 7));
2148
                break;
2149
            case '-1SA':
2150
2151
                $ts        = \mktime(0, 0, 0, $month, \date('t', \mktime(0, 0, 0, $month, 1, $year)), $year);
2152
                $dayOfWeek = \date('w', $ts);
2153
                $i         = 0;
2154
                while (6 != $dayOfWeek % 7) {
2155
                    ++$dayOfWeek;
2156
                    ++$i;
2157
                }
2158
                if (0 == $i) {
2159
                    return $ts;
2160
                }
2161
2162
                return $ts + (\_EXTCAL_TS_DAY * ($i - 7));
2163
                break;
2164
            default:
2165
                return 0;
2166
                break;
2167
        }
2168
    }
2169
2170
    /*************************************************************************
2171
     *
2172
     ************************************************************************
2173
     * @param $year
2174
     * @param $month
2175
     * @param $day
2176
     * @param $cat
2177
     * @param $searchExp
2178
     * @param $andor
2179
     * @param $orderBy
2180
     * @return array
2181
     */
2182
    public function getSearchEvent2($year, $month, $day, $cat, $searchExp, $andor, $orderBy)
2183
    {
2184
        global $xoopsDB, $xoopsUser;
2185
2186
        if (isset($xoopsUser)) {
2187
            $userId = $xoopsUser->getVar('uid');
2188
            $result = $this->getSearchEvents($year, $month, $day, $cat, $searchExp, $andor, $orderBy, 0, 0, $userId, $xoopsUser);
2189
        } else {
2190
            $result = $this->getSearchEvents($year, $month, $day, $cat, $searchExp, $andor, $orderBy, 0, 0);
2191
        }
2192
2193
        $ret = [];
2194
        if ($result) {
2195
        while (false !== ($myrow = $xoopsDB->fetchArray($result))) {
2196
            $myrow['cat']['cat_name']        = $myrow['cat_name'];
2197
            $myrow['cat']['cat_color']       = $myrow['cat_color'];
2198
            $myrow['cat']['cat_light_color'] = Utility::getLighterColor($myrow['cat']['cat_color'], \_EXTCAL_INFOBULLE_RGB_MIN, \_EXTCAL_INFOBULLE_RGB_MAX);
2199
            if ('' == $myrow['event_icone']) {
2200
                $myrow['event_icone'] = $myrow['cat']['cat_icone'];
2201
            }
2202
            $ret[] = $myrow;
2203
        }
2204
        }
2205
        return $ret;
2206
    }
2207
2208
    //-----------------------------------------------------------
2209
2210
    /**
2211
     * @param int    $year
2212
     * @param int    $month
2213
     * @param int    $day
2214
     * @param int    $cat
2215
     * @param array|null  $queryarray
2216
     * @param bool|null   $andor
2217
     * @param string|null $orderBy
2218
     * @param int    $limit
2219
     * @param int    $offset
2220
     * @param int    $userId
2221
     * @param string $user
2222
     *
2223
     * @return mixed
2224
     */
2225
    public function getSearchEvents(
2226
        $year = 0,
2227
        $month = 0,
2228
        $day = 0,
2229
        $cat = 0,
2230
        $queryarray = null,
2231
        $andor = null,
2232
        $orderBy = null,
2233
        $limit = 0,
2234
        $offset = 0,
2235
        $userId = 0,
2236
        $user = ''
2237
    ) {
2238
        global $xoopsDB;
2239
2240
        //echo "<hr>{$andor}-{$limit}-{$offset}-{$userId}-{$user}<br>{$criteresPlus}";
2241
        $tEvent = $xoopsDB->prefix('extcal_event') . ' AS te';
2242
        $tCat   = $xoopsDB->prefix('extcal_cat') . ' AS tc';
2243
2244
        $sql = 'SELECT te.*, tc.cat_name , tc.cat_color, ' . 'year(FROM_UNIXTIME(event_start)) AS year,' . 'month(FROM_UNIXTIME(event_start)) AS month,' . 'day(FROM_UNIXTIME(event_start)) AS day' . " FROM {$tEvent}, {$tCat}";
2245
        //---------------------------------------------------
2246
        $tw   = [];
2247
        $tw[] = 'te.cat_id = tc.cat_id';
2248
        $tw[] = 'event_approved = 1';
2249
2250
        $authorizedAccessCats = $this->extcalPerm->getAuthorizedCat($user, 'extcal_cat_view');
2251
        $inCat                = 'te.cat_id IN (0)';
2252
        if (\count($authorizedAccessCats) > 0) {
0 ignored issues
show
Bug introduced by
$authorizedAccessCats of type boolean is incompatible with the type Countable|array expected by parameter $value of count(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2252
        if (\count(/** @scrutinizer ignore-type */ $authorizedAccessCats) > 0) {
Loading history...
2253
            $inCat = 'te.cat_id IN (' . \implode(',', $authorizedAccessCats) . ')';
0 ignored issues
show
Bug introduced by
$authorizedAccessCats of type boolean is incompatible with the type array expected by parameter $pieces of implode(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2253
            $inCat = 'te.cat_id IN (' . \implode(',', /** @scrutinizer ignore-type */ $authorizedAccessCats) . ')';
Loading history...
2254
        }
2255
        //echo $tw[count($tw)-1];
2256
2257
        if (0 != $userId) {
2258
            $tw[] .= "({$inCat} OR event_submitter = {$userId} )";
2259
        } else {
2260
            $tw[] = $inCat;
2261
        }
2262
        //--------------------------------------------------------
2263
        if ($cat > 0) {
2264
            $tw[] .= "te.cat_id = {$cat}";
2265
        }
2266
        if ($year > 0) {
2267
            $tw[] .= "year(FROM_UNIXTIME(event_start)) = {$year}";
2268
        }
2269
        if ($month > 0) {
2270
            $tw[] .= "month(FROM_UNIXTIME(event_start)) = {$month}";
2271
        }
2272
        if ($day > 0) {
2273
            $tw[] .= "day(FROM_UNIXTIME(event_start)) = {$day}";
2274
        }
2275
2276
        //echoArray($queryarray,false);
2277
        if (!\is_array($queryarray)) {
2278
            $queryarray = (('' != $queryarray) ? \explode(' ', $queryarray) : '');
0 ignored issues
show
Bug introduced by
$queryarray of type null is incompatible with the type string expected by parameter $string of explode(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2278
            $queryarray = (('' != $queryarray) ? \explode(' ', /** @scrutinizer ignore-type */ $queryarray) : '');
Loading history...
2279
        }
2280
2281
        if (\is_array($queryarray)) {
2282
            $tFields = [
2283
                'te.event_title',
2284
                'te.event_desc',
2285
                'te.event_contact',
2286
                'te.event_address',
2287
                'tc.cat_name',
2288
            ];
2289
            $t       = [];
0 ignored issues
show
Unused Code introduced by
The assignment to $t is dead and can be removed.
Loading history...
2290
            foreach ($queryarray as $i => $iValue) {
2291
                $t1[] = " %1\$s LIKE '#{$queryarray[$i]}#' ";
2292
            }
2293
2294
            $flt = '(' . \implode(" {$andor} ", $t1) . ')';
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $t1 seems to be defined by a foreach iteration on line 2290. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
2295
2296
            $t = [];
2297
            foreach ($tFields as $h => $hValue) {
2298
                $t[] = \sprintf($flt, $tFields[$h]);
2299
            }
2300
2301
            $filtre = \implode(' OR ', $t);
2302
            $filtre = \str_replace('#', '%', $filtre);
2303
            $tw[]   = '(' . $filtre . ')';
2304
        }
2305
2306
        $sql .= ' WHERE ' . \implode(' AND ', $tw);
2307
        //------------------------------------------------------------
2308
        if (\count($orderBy) > 0) {
0 ignored issues
show
Bug introduced by
$orderBy of type null|string is incompatible with the type Countable|array expected by parameter $value of count(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2308
        if (\count(/** @scrutinizer ignore-type */ $orderBy) > 0) {
Loading history...
2309
            $t = [];
2310
            foreach ($orderBy as $hValue) {
0 ignored issues
show
Bug introduced by
The expression $orderBy of type null|string is not traversable.
Loading history...
2311
                if ('' != $hValue) {
2312
                    $t[] = $hValue;
2313
                }
2314
            }
2315
            if (\count($t) > 0) {
2316
                $sql .= ' ORDER BY ' . \implode(',', $t);
2317
            }
2318
        }
2319
2320
        //----------------------------------------------------------------
2321
2322
        $result = $xoopsDB->query($sql, $limit, $offset);
2323
2324
        // echo "<hr>{$sql}<hr>";
2325
        return $result;
2326
    }
2327
2328
    //-----------------------------------------------------------
2329
2330
    /**
2331
     * @param $queryarray
2332
     * @param $andor
2333
     * @param $limit
2334
     * @param $offset
2335
     * @param $userId
2336
     * @param $user
2337
     *
2338
     * @return mixed
2339
     */
2340
    public function getSearchEvent($queryarray, $andor, $limit, $offset, $userId, $user)
0 ignored issues
show
Unused Code introduced by
The parameter $limit is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

2340
    public function getSearchEvent($queryarray, $andor, /** @scrutinizer ignore-unused */ $limit, $offset, $userId, $user)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $userId is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

2340
    public function getSearchEvent($queryarray, $andor, $limit, $offset, /** @scrutinizer ignore-unused */ $userId, $user)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $offset is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

2340
    public function getSearchEvent($queryarray, $andor, $limit, /** @scrutinizer ignore-unused */ $offset, $userId, $user)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $user is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

2340
    public function getSearchEvent($queryarray, $andor, $limit, $offset, $userId, /** @scrutinizer ignore-unused */ $user)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2341
    {
2342
        global $xoopsDB;
2343
2344
        $result = $this->getSearchEvents(0, 0, 0, 0, $queryarray, $andor, ['event_id DESC']);
0 ignored issues
show
Bug introduced by
array('event_id DESC') of type array<integer,string> is incompatible with the type null|string expected by parameter $orderBy of XoopsModules\Extcal\Even...dler::getSearchEvents(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2344
        $result = $this->getSearchEvents(0, 0, 0, 0, $queryarray, $andor, /** @scrutinizer ignore-type */ ['event_id DESC']);
Loading history...
2345
2346
        $i = 0;
2347
        while (false !== ($myrow = $xoopsDB->fetchArray($result))) {
2348
            $ret[$i]['image'] = 'assets/images/icons/extcal.gif';
2349
            $ret[$i]['link']  = 'event.php?event=' . $myrow['event_id'];
2350
            $ret[$i]['title'] = $myrow['event_title'];
2351
            $ret[$i]['time']  = $myrow['event_submitdate'];
2352
            $ret[$i]['uid']   = $myrow['event_submitter'];
2353
            ++$i;
2354
        }
2355
2356
        return $ret;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $ret does not seem to be defined for all execution paths leading up to this point.
Loading history...
2357
    }
2358
2359
    /**
2360
     * @param        $queryarray
2361
     * @param        $andor
2362
     * @param        $limit
2363
     * @param        $offset
2364
     * @param        $userId
2365
     * @param        $user
2366
     * @param string $criteresPlus
2367
     * @param bool   $xoopsSearch
2368
     *
2369
     * @return array
2370
     */
2371
    public function getSearchEvent3(
2372
        $queryarray,
2373
        $andor,
2374
        $limit,
2375
        $offset,
2376
        $userId,
2377
        $user,
2378
        $criteresPlus = '',
2379
        $xoopsSearch = true
2380
    ) {
2381
        global $xoopsDB;
2382
        //echo "<hr>{$andor}-{$limit}-{$offset}-{$userId}-{$user}<br>{$criteresPlus}";
2383
2384
        //        if ($cols == '') {
2385
        //            $cols = 'event_id, event_title, event_submitter, event_submitdate';
2386
        //        }
2387
        $tEvent = $xoopsDB->prefix('extcal_event');
2388
        $tCat   = $xoopsDB->prefix('extcal_cat');
2389
        $sql    = "SELECT {$tEvent}.*, {$tCat}.cat_name AS categorie, {$tCat}.cat_color " . " FROM {$tEvent}, {$tCat}" . " WHERE {$tEvent}.cat_id = {$tCat}.cat_id AND event_approved = '1'";
2390
2391
        $authorizedAccessCats = $this->extcalPerm->getAuthorizedCat($user, 'extcal_cat_view');
2392
        $count                = \count($authorizedAccessCats);
0 ignored issues
show
Bug introduced by
$authorizedAccessCats of type boolean is incompatible with the type Countable|array expected by parameter $value of count(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2392
        $count                = \count(/** @scrutinizer ignore-type */ $authorizedAccessCats);
Loading history...
2393
        if ($count > 0) {
2394
            $in = '(' . $authorizedAccessCats[0];
2395
            \array_shift($authorizedAccessCats);
0 ignored issues
show
Bug introduced by
$authorizedAccessCats of type boolean is incompatible with the type array expected by parameter $array of array_shift(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

2395
            \array_shift(/** @scrutinizer ignore-type */ $authorizedAccessCats);
Loading history...
2396
            foreach ($authorizedAccessCats as $authorizedAccessCat) {
2397
                $in .= ',' . $authorizedAccessCat;
2398
            }
2399
            $in .= ')';
2400
        } else {
2401
            $in = '(0)';
2402
        }
2403
        $sql .= " AND {$tEvent}.cat_id IN " . $in . '';
2404
        if (0 != $userId) {
2405
            $sql .= " AND event_submitter = '" . $userId . "'";
2406
        }
2407
2408
        //echoArray($queryarray,false);
2409
        if (\is_array($queryarray)) {
2410
            /*
2411
            $sql .= " AND ((event_title LIKE '%$queryarray[0]%' OR event_desc LIKE '%$queryarray[0]%' OR event_contact LIKE '%$queryarray[0]%' OR event_address LIKE '%$queryarray[0]%')";
2412
            for ($i = 1; $i < $count; ++$i) {
2413
                $sql .= " $andor ";
2414
                $sql .= "(event_title LIKE '%$queryarray[0]%' OR event_desc LIKE '%$queryarray[0]%' OR event_contact LIKE '%$queryarray[0]%' OR event_address LIKE '%$queryarray[0]%')";
2415
            }
2416
            $sql .= ") ";
2417
            */
2418
2419
            $tFields = ['event_title', 'event_desc', 'event_contact', 'event_address', 'cat_name'];
2420
            $t       = [];
0 ignored issues
show
Unused Code introduced by
The assignment to $t is dead and can be removed.
Loading history...
2421
            foreach ($queryarray as $i => $iValue) {
2422
                $t1[] = " %1\$s LIKE '#{$queryarray[$i]}#' ";
2423
            }
2424
2425
            $flt = '(' . \implode(" {$andor} ", $t1) . ')';
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $t1 seems to be defined by a foreach iteration on line 2421. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
2426
2427
            $t = [];
2428
            foreach ($tFields as $h => $hValue) {
2429
                $t[] = \sprintf($flt, $tFields[$h]);
2430
            }
2431
2432
            $filtre = \implode(' OR ', $t);
2433
            $filtre = \str_replace('#', '%', $filtre);
2434
            $sql    .= " AND ($filtre)";
2435
        }
2436
2437
        if ('' != $criteresPlus) {
2438
            $sql .= ' AND ' . $criteresPlus;
2439
        }
2440
        $sql .= ' ORDER BY event_id DESC';
2441
2442
        $result = $xoopsDB->query($sql, $limit, $offset);
2443
        $ret    = [];
2444
        $i      = 0;
2445
        if ($xoopsSearch) {
2446
            while (false !== ($myrow = $xoopsDB->fetchArray($result))) {
2447
                $ret[$i]['image'] = 'assets/images/icons/extcal.gif';
2448
                $ret[$i]['link']  = 'event.php?event=' . $myrow['event_id'];
2449
                $ret[$i]['title'] = $myrow['event_title'];
2450
                $ret[$i]['time']  = $myrow['event_submitdate'];
2451
                $ret[$i]['uid']   = $myrow['event_submitter'];
2452
                ++$i;
2453
            }
2454
        } else {
2455
            while (false !== ($myrow = $xoopsDB->fetchArray($result))) {
2456
                $myrow['cat']['cat_name']  = $myrow['cat_name'];
2457
                $myrow['cat']['cat_color'] = $myrow['cat_color'];
2458
                $ret[]                     = $myrow;
2459
                ++$i;
2460
            }
2461
        }
2462
2463
        return $ret;
2464
    }
2465
2466
    /**
2467
     * @param $event
2468
     * @param $eventsArray
2469
     * @param $startPeriod
2470
     * @param $endPeriod
2471
     */
2472
    public function addEventToCalArray(&$event, &$eventsArray, $startPeriod, $endPeriod)
2473
    {
2474
        global $timeHandler, $xoopsUser, $month, $year;
2475
2476
        // Calculating the start and the end of the event
2477
        $startEvent = $event['event_start'];
2478
        $endEvent   = $event['event_end'];
2479
2480
        // This event start before this month and finish after
2481
        if ($startEvent < $startPeriod && $endEvent > $endPeriod) {
2482
            $endFor = \date('t', \mktime(0, 0, 0, $month, 1, $year));
2483
            for ($i = 1; $i <= $endFor; ++$i) {
2484
                $event['status']   = 'middle';
2485
                $eventsArray[$i][] = $event;
2486
            }
2487
            // This event start before this month and finish during
2488
        } else {
2489
            if ($startEvent < $startPeriod) {
2490
                $endFor = \date('j', $endEvent);
2491
                for ($i = 1; $i <= $endFor; ++$i) {
2492
                    $event['status']   = ($i != $endFor) ? 'middle' : 'end';
2493
                    $eventsArray[$i][] = $event;
2494
                }
2495
                // This event start during this month and finish after
2496
            } else {
2497
                if ($endEvent > $endPeriod) {
2498
                    $startFor = \date('j', $startEvent);
2499
                    $endFor   = \date('t', \mktime(0, 0, 0, $month, 1, $year));
2500
                    for ($i = $startFor; $i <= $endFor; ++$i) {
2501
                        $event['status']   = ($i == $startFor) ? 'start' : 'middle';
2502
                        $eventsArray[$i][] = $event;
2503
                    }
2504
                    // This event start and finish during this month
2505
                } else {
2506
                    $startFor = \date('j', $startEvent);
2507
                    $endFor   = \date('j', $endEvent);
2508
                    for ($i = $startFor; $i <= $endFor; ++$i) {
2509
                        if ($startFor == $endFor) {
2510
                            $event['status'] = 'single';
2511
                        } else {
2512
                            if ($i == $startFor) {
2513
                                $event['status'] = 'start';
2514
                            } else {
2515
                                if ($i == $endFor) {
2516
                                    $event['status'] = 'end';
2517
                                } else {
2518
                                    $event['status'] = 'middle';
2519
                                }
2520
                            }
2521
                        }
2522
                        $eventsArray[$i][] = $event;
2523
                    }
2524
                }
2525
            }
2526
        }
2527
    }
2528
    //-------------------------------------------------
2529
} // -------- Fin e la classe ---------------------
2530