1
|
|
|
<?php |
2
|
|
|
/* |
3
|
|
|
* You may not change or alter any portion of this comment or credits |
4
|
|
|
* of supporting developers from this source code or any supporting source code |
5
|
|
|
* which is considered copyrighted (c) material of the original comment or credit authors. |
6
|
|
|
* |
7
|
|
|
* This program is distributed in the hope that it will be useful, |
8
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
9
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
10
|
|
|
*/ |
11
|
|
|
|
12
|
|
|
/** |
13
|
|
|
* @copyright {@link http://xoops.org/ XOOPS Project} |
14
|
|
|
* @license {@link http://www.fsf.org/copyleft/gpl.html GNU public license} |
15
|
|
|
* @package |
16
|
|
|
* @since |
17
|
|
|
* @author XOOPS Development Team, |
18
|
|
|
* @author GIJ=CHECKMATE (PEAK Corp. http://www.peak.ne.jp/) |
19
|
|
|
* @author Antiques Promotion (http://www.antiquespromotion.ca) |
20
|
|
|
*/ |
21
|
|
|
|
22
|
|
|
if (!class_exists('APCal_xoops')) { |
23
|
|
|
/** |
24
|
|
|
* Class APCal_xoops |
25
|
|
|
*/ |
26
|
|
|
class APCal_xoops extends APCal |
27
|
|
|
{ |
28
|
|
|
/** |
29
|
|
|
* @param $data |
30
|
|
|
* @return mixed |
31
|
|
|
*/ |
32
|
|
|
public function textarea_sanitizer_for_sql($data) |
33
|
|
|
{ |
34
|
|
|
// preventing double-addslashes() |
35
|
|
|
// $myts = MyTextSanitizer::getInstance(); |
36
|
|
|
// return $myts->makeTareaData4Save($data); |
37
|
|
|
return $data; |
38
|
|
|
} |
39
|
|
|
|
40
|
|
|
/** |
41
|
|
|
* @param $data |
42
|
|
|
* @return mixed |
43
|
|
|
*/ |
44
|
|
|
public function textarea_sanitizer_for_show($data) |
45
|
|
|
{ |
46
|
|
|
$myts = MyTextSanitizer::getInstance(); |
47
|
|
|
|
48
|
|
|
return $myts->displayTarea($data); |
49
|
|
|
} |
50
|
|
|
|
51
|
|
|
/** |
52
|
|
|
* @param $data |
53
|
|
|
* @return mixed |
54
|
|
|
*/ |
55
|
|
|
public function textarea_sanitizer_for_edit($data) |
56
|
|
|
{ |
57
|
|
|
$myts = MyTextSanitizer::getInstance(); |
58
|
|
|
|
59
|
|
|
return $myts->htmlSpecialChars($data); |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
/** |
63
|
|
|
* @param $data |
64
|
|
|
* @return mixed |
65
|
|
|
*/ |
66
|
|
|
public function textarea_sanitizer_for_export_ics($data) |
67
|
|
|
{ |
68
|
|
|
$myts = MyTextSanitizer::getInstance(); |
69
|
|
|
|
70
|
|
|
return $myts->displayTarea($data); |
71
|
|
|
} |
72
|
|
|
|
73
|
|
|
/** |
74
|
|
|
* @param $data |
75
|
|
|
* @return mixed |
76
|
|
|
*/ |
77
|
|
|
public function text_sanitizer_for_show($data) |
78
|
|
|
{ |
79
|
|
|
$myts = MyTextSanitizer::getInstance(); |
80
|
|
|
|
81
|
|
|
return $myts->htmlSpecialChars($data); |
82
|
|
|
} |
83
|
|
|
|
84
|
|
|
/** |
85
|
|
|
* @param $data |
86
|
|
|
* @return mixed |
87
|
|
|
*/ |
88
|
|
|
public function text_sanitizer_for_edit($data) |
89
|
|
|
{ |
90
|
|
|
$myts = MyTextSanitizer::getInstance(); |
91
|
|
|
|
92
|
|
|
return $myts->htmlSpecialChars($data); |
93
|
|
|
} |
94
|
|
|
|
95
|
|
|
/** |
96
|
|
|
* @param $name |
97
|
|
|
* @param $ymd |
98
|
|
|
* @param string $long_ymdn |
99
|
|
|
* @return string |
100
|
|
|
*/ |
101
|
|
|
public function get_formtextdateselect($name, $ymd, $long_ymdn = '') |
102
|
|
|
{ |
103
|
|
|
require_once XOOPS_ROOT_PATH . '/class/xoopsformloader.php'; |
104
|
|
|
|
105
|
|
|
// day of week starting |
106
|
|
|
$first_day = $this->week_start ? 1 : 0; |
107
|
|
|
|
108
|
|
|
if ($this->jscalendar === 'xoops') { |
109
|
|
|
$jstime = formatTimestamp($this->unixtime, 'F j Y, H:i:s'); |
110
|
|
|
|
111
|
|
|
if ($this->week_start) { |
112
|
|
|
$js_cal_week_start = 'true'; |
113
|
|
|
} // Monday |
114
|
|
|
else { |
115
|
|
|
$js_cal_week_start = 'false'; |
116
|
|
|
} // Sunday |
117
|
|
|
|
118
|
|
|
// <input type='reset' value='...' onclick=' |
119
|
|
|
return " |
120
|
|
|
<input type='text' name='$name' id='$name' size='15' maxlength='15' value='$ymd' /> |
121
|
|
|
<input type='image' src='$this->images_url/button_date_selecting.gif' onclick=' |
122
|
|
|
|
123
|
|
|
var el = xoopsGetElementById(\"$name\"); |
124
|
|
|
if (calendar != null) { |
125
|
|
|
calendar.hide(); |
126
|
|
|
calendar.parseDate(el.value); |
127
|
|
|
} else { |
128
|
|
|
var cal = new Calendar($js_cal_week_start, new Date(\"$jstime\"), selected, closeHandler); |
129
|
|
|
calendar = cal; |
130
|
|
|
cal.setRange(2000, 2100); |
131
|
|
|
calendar.create(); |
132
|
|
|
calendar.parseDate(el.value); |
133
|
|
|
} |
134
|
|
|
calendar.sel = el; |
135
|
|
|
calendar.showAtElement(el); |
136
|
|
|
Calendar.addEvent(document, \"mousedown\", checkCalendar); |
137
|
|
|
|
138
|
|
|
return false; |
139
|
|
|
|
140
|
|
|
' /> |
141
|
|
|
"; |
142
|
|
|
} else { |
143
|
|
|
return " |
144
|
|
|
<input type='text' name='$name' id='$name' size='12' maxlength='12' value='$ymd' /> |
145
|
|
|
<img src='$this->images_url/button_date_selecting.gif' id='trigger_{$name}' style='cursor: pointer; vertical-align:bottom;' title='Date selector' /> |
146
|
|
|
<span id='display_{$name}'>$long_ymdn</span> |
147
|
|
|
|
148
|
|
|
<script type='text/javascript'> |
149
|
|
|
Calendar.setup({ |
150
|
|
|
inputField : '$name', |
151
|
|
|
button : 'trigger_{$name}', |
152
|
|
|
displayArea : 'display_{$name}', |
153
|
|
|
daFormat : '" . _APCAL_JSFMT_YMDN . "' , |
154
|
|
|
ifFormat : '%Y-%m-%d', |
155
|
|
|
showsTime : false, |
156
|
|
|
align :'Br', |
157
|
|
|
step : 1 , |
158
|
|
|
firstDay : $first_day , |
159
|
|
|
singleClick : false |
160
|
|
|
}); |
161
|
|
|
</script> |
162
|
|
|
"; |
163
|
|
|
} |
164
|
|
|
} |
165
|
|
|
|
166
|
|
|
/** |
167
|
|
|
* @param $uid |
168
|
|
|
* @return string |
169
|
|
|
*/ |
170
|
|
|
public function get_submitter_info($uid) |
171
|
|
|
{ |
172
|
|
|
if ($uid <= 0) { |
173
|
|
|
return _GUESTS; |
174
|
|
|
} |
175
|
|
|
|
176
|
|
|
$poster = new XoopsUser($uid); |
177
|
|
|
|
178
|
|
|
// check if invalid uid |
179
|
|
|
if ($poster->uname() === '') { |
180
|
|
|
return ''; |
181
|
|
|
} |
182
|
|
|
|
183
|
|
|
if ($this->nameoruname === 'uname') { |
184
|
|
|
$name = $poster->uname(); |
185
|
|
|
} else { |
186
|
|
|
$name = trim($poster->name()); |
187
|
|
|
if ($name === '') { |
188
|
|
|
$name = $poster->uname(); |
189
|
|
|
} |
190
|
|
|
} |
191
|
|
|
|
192
|
|
|
return "<a href='" . XOOPS_URL . "/userinfo.php?uid=$uid'>$name</a>"; |
193
|
|
|
} |
194
|
|
|
|
195
|
|
|
// XOOPS���?�Х븡����� |
196
|
|
|
|
197
|
|
|
/** |
198
|
|
|
* @param $keywords |
199
|
|
|
* @param $andor |
200
|
|
|
* @param $limit |
201
|
|
|
* @param $offset |
202
|
|
|
* @param $uid |
203
|
|
|
* @return array |
204
|
|
|
*/ |
205
|
|
|
public function get_xoops_search_result($keywords, $andor, $limit, $offset, $uid) |
206
|
|
|
{ |
207
|
|
|
// ������ |
208
|
|
|
$tzoffset = ($this->user_TZ - $this->server_TZ) * 3600; |
209
|
|
|
|
210
|
|
|
// ���ƥ����Ϣ��WHERE������ |
211
|
|
|
$whr_categories = $this->get_where_about_categories(); |
212
|
|
|
|
213
|
|
|
// CLASS��Ϣ��WHERE������ |
214
|
|
|
$whr_class = $this->get_where_about_class(); |
215
|
|
|
|
216
|
|
|
// ʸ������� |
217
|
|
|
if (!empty($keywords)) { |
218
|
|
|
switch (strtolower($andor)) { |
219
|
|
View Code Duplication |
case 'and': |
|
|
|
|
220
|
|
|
$whr_text = ''; |
221
|
|
|
foreach ($keywords as $keyword) { |
222
|
|
|
$whr_text .= "CONCAT(summary,' ',description) LIKE '%$keyword%' AND "; |
223
|
|
|
} |
224
|
|
|
$whr_text = substr($whr_text, 0, -5); |
225
|
|
|
break; |
226
|
|
View Code Duplication |
case 'or': |
|
|
|
|
227
|
|
|
$whr_text = ''; |
228
|
|
|
foreach ($keywords as $keyword) { |
229
|
|
|
$whr_text .= "CONCAT(summary,' ',description) LIKE '%$keyword%' OR "; |
230
|
|
|
} |
231
|
|
|
$whr_text = substr($whr_text, 0, -4); |
232
|
|
|
break; |
233
|
|
|
default: |
234
|
|
|
$whr_text = "CONCAT(summary,' ',description) LIKE '%{$keywords[0]}%'"; |
235
|
|
|
break; |
236
|
|
|
} |
237
|
|
|
} else { |
238
|
|
|
$whr_text = '1'; |
239
|
|
|
} |
240
|
|
|
|
241
|
|
|
// �桼��ID���� |
242
|
|
|
if ($uid > 0) { |
243
|
|
|
$whr_uid = "uid=$uid"; |
244
|
|
|
} else { |
245
|
|
|
$whr_uid = '1'; |
246
|
|
|
} |
247
|
|
|
|
248
|
|
|
// XOOPS Search module |
249
|
|
|
$showcontext = empty($_GET['showcontext']) ? 0 : 1; |
250
|
|
|
$select4con = $showcontext ? 'description' : "'' AS description"; |
251
|
|
|
|
252
|
|
|
// SQLʸ���� |
253
|
|
|
$sql = "SELECT id,uid,summary,UNIX_TIMESTAMP(dtstamp) AS udtstamp, start, end, allday, start_date, end_date, extkey0, $select4con FROM $this->table WHERE admission>0 AND (rrule_pid=0 OR rrule_pid=id) AND ($whr_categories) AND ($whr_class) AND ($whr_text) AND ($whr_uid) ORDER BY dtstamp DESC LIMIT $offset,$limit"; |
254
|
|
|
// ������ |
255
|
|
|
$rs = $GLOBALS['xoopsDB']->query($sql); |
256
|
|
|
|
257
|
|
|
$ret = array(); |
258
|
|
|
$context = ''; |
259
|
|
|
$myts = MyTextSanitizer::getInstance(); |
260
|
|
|
while ($event = $GLOBALS['xoopsDB']->fetchObject($rs)) { |
261
|
|
View Code Duplication |
if (isset($event->start_date)) { |
|
|
|
|
262
|
|
|
$start_str = $event->start_date; |
263
|
|
|
} elseif ($event->allday) { |
264
|
|
|
$start_str = $this->get_long_ymdn($event->start); |
265
|
|
|
} else { |
266
|
|
|
$start_str = $this->get_long_ymdn($event->start + $tzoffset); |
267
|
|
|
} |
268
|
|
|
|
269
|
|
View Code Duplication |
if (isset($event->end_date)) { |
|
|
|
|
270
|
|
|
$end_str = $event->end_date; |
271
|
|
|
} elseif ($event->allday) { |
272
|
|
|
$end_str = $this->get_long_ymdn($event->end - 300); |
273
|
|
|
} else { |
274
|
|
|
$end_str = $this->get_long_ymdn($event->end + $tzoffset); |
275
|
|
|
} |
276
|
|
|
|
277
|
|
|
$date_desc = ($start_str == $end_str) ? $start_str : "$start_str - $end_str"; |
278
|
|
|
|
279
|
|
|
// get context for module "search" |
280
|
|
|
if (function_exists('search_make_context') && $showcontext) { |
281
|
|
|
$full_context = strip_tags($myts->displayTarea($event->description, 1, 1, 1, 1, 1)); |
282
|
|
|
if (function_exists('easiestml')) { |
283
|
|
|
$full_context = easiestml($full_context); |
284
|
|
|
} |
285
|
|
|
$context = search_make_context($full_context, $keywords); |
286
|
|
|
} |
287
|
|
|
|
288
|
|
|
$ret[] = array( |
289
|
|
|
'image' => 'assets/images/apcal.gif', |
290
|
|
|
'link' => "index.php?action=View&event_id=$event->id", |
291
|
|
|
'title' => "[$date_desc] $event->summary", |
292
|
|
|
'time' => $event->udtstamp, |
293
|
|
|
'uid' => $uid, |
294
|
|
|
'context' => $context |
295
|
|
|
); |
296
|
|
|
} |
297
|
|
|
|
298
|
|
|
return $ret; |
299
|
|
|
} |
300
|
|
|
|
301
|
|
|
// Notifications |
302
|
|
|
// triggerEvent ���Ϥ�URI�ϡ�& �Ƕ��ڤ� (& �ǤϤʤ�) |
303
|
|
|
/** |
304
|
|
|
* @param $event_id |
305
|
|
|
* @return bool |
306
|
|
|
*/ |
307
|
|
|
public function notify_new_event($event_id) |
308
|
|
|
{ |
309
|
|
|
$rs = $GLOBALS['xoopsDB']->query("SELECT summary,admission,categories,class,uid,groupid FROM $this->table WHERE id='$event_id'"); |
310
|
|
|
$event = $GLOBALS['xoopsDB']->fetchObject($rs); |
311
|
|
|
|
312
|
|
|
// No notification if not admitted yet |
313
|
|
|
if (!$event->admission) { |
314
|
|
|
return false; |
315
|
|
|
} |
316
|
|
|
|
317
|
|
|
// Private events |
318
|
|
|
if ($event->class === 'PRIVATE') { |
319
|
|
|
if ($event->groupid > 0) { |
320
|
|
|
$memberHandler = xoops_getHandler('member'); |
321
|
|
|
$user_list = $memberHandler->getUsersByGroup($event->groupid); |
322
|
|
|
} else { |
323
|
|
|
$user_list = array($event->uid); |
324
|
|
|
} |
325
|
|
|
} else { |
326
|
|
|
$user_list = array(); |
327
|
|
|
} |
328
|
|
|
|
329
|
|
|
$notificationHandler = xoops_getHandler('notification'); |
330
|
|
|
|
331
|
|
|
// �����٥�Ȥ���Ͽ�������ƥ���ˤΥȥꥬ�� |
332
|
|
|
$notificationHandler->triggerEvent('global', 0, 'new_event', array( |
333
|
|
|
'EVENT_SUMMARY' => $event->summary, |
334
|
|
|
'EVENT_URI' => "$this->base_url/index.php?action=View&event_id=$event_id" |
335
|
|
|
), $user_list, null, 0); |
336
|
|
|
|
337
|
|
|
// �����٥�Ȥ���Ͽ�ʥ��ƥ����ˤΥȥꥬ�� |
338
|
|
|
$cids = explode(',', $event->categories); |
339
|
|
|
foreach ($cids as $cid) { |
340
|
|
|
$cid = (int)$cid; |
341
|
|
|
if (isset($this->categories[$cid])) { |
342
|
|
|
$notificationHandler->triggerEvent('category', $cid, 'new_event', array( |
343
|
|
|
'EVENT_SUMMARY' => $event->summary, |
344
|
|
|
'CATEGORY_TITLE' => $this->text_sanitizer_for_show($this->categories[$cid]->cat_title), |
345
|
|
|
'EVENT_URI' => "$this->base_url/index.php?smode=List&cid=$cid" |
346
|
|
|
), $user_list, null, 0); |
347
|
|
|
} |
348
|
|
|
} |
349
|
|
|
|
350
|
|
|
return true; |
351
|
|
|
} |
352
|
|
|
|
353
|
|
|
// $this->caldate���ͽ��֥�å�������֤� |
354
|
|
|
|
355
|
|
|
/** |
356
|
|
|
* @param string $get_target |
357
|
|
|
* @return array |
358
|
|
|
*/ |
359
|
|
|
public function get_blockarray_date_event($get_target = '') |
360
|
|
|
{ |
361
|
|
|
// if( $get_target == '' ) $get_target = $_SERVER['SCRIPT_NAME'] ; |
362
|
|
|
|
363
|
|
|
// ����������Ĥġ�WHERE��δ�֤˴ؤ��������� |
364
|
|
|
$tzoffset = (int)(($this->user_TZ - $this->server_TZ) * 3600); |
365
|
|
|
$toptime_of_day = $this->unixtime + $this->day_start - $tzoffset; |
366
|
|
|
$bottomtime_of_day = $toptime_of_day + 86400; |
367
|
|
|
$whr_term = "(allday AND start<='$this->unixtime' AND end>'$this->unixtime') || ( ! allday AND start<'$bottomtime_of_day' AND (start='$toptime_of_day' OR end>'$toptime_of_day'))"; |
368
|
|
|
|
369
|
|
|
// ���ƥ����Ϣ��WHERE������ |
370
|
|
|
$whr_categories = $this->get_where_about_categories(); |
371
|
|
|
|
372
|
|
|
// CLASS��Ϣ��WHERE������ |
373
|
|
|
$whr_class = $this->get_where_about_class(); |
374
|
|
|
|
375
|
|
|
// ����Υ������塼����� |
376
|
|
|
$yrs = $GLOBALS['xoopsDB']->query("SELECT start,end,summary,id,uid,allday,location,contact,description,(start>='$toptime_of_day') AS is_start_date,(end<='$bottomtime_of_day') AS is_end_date FROM $this->table WHERE admission>0 AND ($whr_term) AND ($whr_categories) AND ($whr_class) ORDER BY start,end"); |
377
|
|
|
$num_rows = $GLOBALS['xoopsDB']->getRowsNum($yrs); |
378
|
|
|
|
379
|
|
|
$block = array( |
380
|
|
|
'insertable' => $this->insertable, |
381
|
|
|
'num_rows' => $num_rows, |
382
|
|
|
'get_target' => $get_target, |
383
|
|
|
'images_url' => $this->images_url, |
384
|
|
|
'caldate' => $this->caldate, |
385
|
|
|
'lang_APCAL_MB_CONTINUING' => _APCAL_MB_CONTINUING, |
386
|
|
|
'lang_APCAL_MB_NOEVENT' => _APCAL_MB_NOEVENT, |
387
|
|
|
'lang_APCAL_MB_ADDEVENT' => _APCAL_MB_ADDEVENT, |
388
|
|
|
'lang_APCAL_MB_ALLDAY_EVENT' => _APCAL_MB_ALLDAY_EVENT |
389
|
|
|
); |
390
|
|
|
|
391
|
|
|
while ($event = $GLOBALS['xoopsDB']->fetchObject($yrs)) { |
392
|
|
|
if (!$event->allday) { |
393
|
|
|
// �̾磻�٥�� |
394
|
|
|
// $event->start,end �ϥ����л��� $start,$end �ϥ桼������ |
395
|
|
|
$start = $event->start + $tzoffset; |
396
|
|
|
$end = $event->end + $tzoffset; |
397
|
|
|
|
398
|
|
|
// ����˳��Ϥ佪λ���뤫�ǥɥå�GIF���ؤ��� |
399
|
|
|
if ($event->is_start_date) { |
400
|
|
|
$dot = 'dot_startday.gif'; |
401
|
|
|
} elseif ($event->is_end_date) { |
402
|
|
|
$dot = 'dot_endday.gif'; |
403
|
|
|
} else { |
404
|
|
|
$dot = 'dot_interimday.gif'; |
405
|
|
|
} |
406
|
|
|
|
407
|
|
|
// $day_start ���꤬������Ρ�24:00�ʹߤν��� |
408
|
|
View Code Duplication |
if ($event->is_start_date && $bottomtime_of_day - $event->start <= $this->day_start) { |
|
|
|
|
409
|
|
|
$start_desc = $this->get_middle_hi($start, true); |
410
|
|
|
} else { |
411
|
|
|
$start_desc = $this->get_middle_hi($start); |
412
|
|
|
} |
413
|
|
|
|
414
|
|
|
if ($event->is_end_date) { |
415
|
|
|
// $day_start ���꤬������Ρ�24:00�ʹߤν��� |
416
|
|
View Code Duplication |
if ($bottomtime_of_day - $event->end <= $this->day_start) { |
|
|
|
|
417
|
|
|
$end_desc = $this->get_middle_hi($end, true); |
418
|
|
|
} else { |
419
|
|
|
$end_desc = $this->get_middle_hi($end); |
420
|
|
|
} |
421
|
|
|
} else { |
422
|
|
|
$end_desc = $this->get_middle_md($end); |
423
|
|
|
} |
424
|
|
|
|
425
|
|
|
// �̾磻�٥�Ȥ����å� |
426
|
|
|
$block['events'][] = array( |
427
|
|
|
'summary' => $this->text_sanitizer_for_show($event->summary), |
428
|
|
|
'location' => $this->text_sanitizer_for_show($event->location), |
429
|
|
|
'contact' => $this->text_sanitizer_for_show($event->contact), |
430
|
|
|
'description' => $this->textarea_sanitizer_for_show($event->description), |
431
|
|
|
'allday' => $event->allday, |
432
|
|
|
'start' => $start, |
433
|
|
|
'start_desc' => $start_desc, |
434
|
|
|
'end' => $end, |
435
|
|
|
'end_desc' => $end_desc, |
436
|
|
|
'id' => $event->id, |
437
|
|
|
'uid' => $event->uid, |
438
|
|
|
'dot_gif' => $dot, |
439
|
|
|
'is_start_date' => $event->is_start_date, |
440
|
|
|
'is_end_date' => $event->is_end_date |
441
|
|
|
); |
442
|
|
|
} else { |
443
|
|
|
// ����٥�Ȥ����å� |
444
|
|
|
$block['events'][] = array( |
445
|
|
|
'summary' => $this->text_sanitizer_for_show($event->summary), |
446
|
|
|
'location' => $this->text_sanitizer_for_show($event->location), |
447
|
|
|
'contact' => $this->text_sanitizer_for_show($event->contact), |
448
|
|
|
'description' => $this->textarea_sanitizer_for_show($event->description), |
449
|
|
|
'allday' => $event->allday, |
450
|
|
|
'start' => $event->start, |
451
|
|
|
'end' => $event->end, |
452
|
|
|
'id' => $event->id, |
453
|
|
|
'uid' => $event->uid, |
454
|
|
|
'dot_gif' => 'dot_allday.gif', |
455
|
|
|
'is_start_date' => $event->is_start_date, |
456
|
|
|
'is_end_date' => $event->is_end_date |
457
|
|
|
); |
458
|
|
|
} |
459
|
|
|
} |
460
|
|
|
|
461
|
|
|
return $block; |
462
|
|
|
} |
463
|
|
|
|
464
|
|
|
// $this->caldate�ʹߤ�ͽ��֥�å�������֤� |
465
|
|
|
|
466
|
|
|
/** |
467
|
|
|
* @param string $get_target |
468
|
|
|
* @param int $num |
469
|
|
|
* @param bool $for_coming |
470
|
|
|
* @param int $untildays |
471
|
|
|
* @return array |
472
|
|
|
*/ |
473
|
|
|
public function get_blockarray_coming_event($get_target = '', $num = 5, $for_coming = false, $untildays = 0) |
474
|
|
|
{ |
475
|
|
|
// if( $get_target == '' ) $get_target = $_SERVER['SCRIPT_NAME'] ; |
476
|
|
|
$now = $for_coming ? time() : $this->unixtime + $this->day_start; |
477
|
|
|
|
478
|
|
|
// ����������Ƥ��� |
479
|
|
|
$tzoffset = (int)(($this->user_TZ - $this->server_TZ) * 3600); |
480
|
|
|
|
481
|
|
|
if ($for_coming) { |
482
|
|
|
// �ֺ����ͽ��פΤߡ�����оݤ����ն����ǤϤʤ��������� (thx Chado) |
483
|
|
|
$whr_term = "end>'$now'"; |
484
|
|
|
} elseif ($tzoffset == 0) { |
485
|
|
|
$whr_term = "end>'$now'"; |
486
|
|
|
} else { |
487
|
|
|
// ������������ϡ�allday�ˤ�äƾ��ʬ�� |
488
|
|
|
$whr_term = "(allday AND end>'$now') || ( ! allday AND ( start >= '$now' OR end>'" . ($now - $tzoffset) . "'))"; |
489
|
|
|
} |
490
|
|
|
|
491
|
|
|
// ���ƥ����Ϣ��WHERE������ |
492
|
|
|
$whr_categories = $this->get_where_about_categories(); |
493
|
|
|
|
494
|
|
|
// CLASS��Ϣ��WHERE������ |
495
|
|
|
$whr_class = $this->get_where_about_class(); |
496
|
|
|
|
497
|
|
|
// ������ |
498
|
|
|
// $yrs = $xoopsDB->query("SELECT COUNT(*) FROM $this->table WHERE admission>0 AND ($whr_term) AND ($whr_categories) AND ($whr_class)"); |
499
|
|
|
// $num_rows = mysql_result($yrs, 0, 0); |
500
|
|
|
// $yrs = $xoopsDB->query("SELECT start,end,summary,id,uid,allday,location,contact,description,mainCategory FROM $this->table WHERE admission>0 AND ($whr_term) AND ($whr_categories) AND ($whr_class) ORDER BY start LIMIT $num"); |
501
|
|
|
|
502
|
|
|
$yrs = $GLOBALS['xoopsDB']->query("SELECT COUNT(*) FROM $this->table WHERE admission>0 AND ($whr_term) AND ($whr_categories) AND ($whr_class)"); |
503
|
|
|
$num_rows = 0; |
504
|
|
|
$resultRow = $GLOBALS['xoopsDB']->fetchRow($yrs); |
505
|
|
|
if (false !== $resultRow && isset($resultRow[0])) { |
506
|
|
|
$num_rows = $resultRow[0]; |
507
|
|
|
} |
508
|
|
|
$yrs = $GLOBALS['xoopsDB']->query("SELECT start,end,summary,id,uid,allday,location,contact,description,mainCategory,extkey0 FROM $this->table WHERE admission>0 AND ($whr_term) AND ($whr_categories) AND ($whr_class) ORDER BY start LIMIT $num"); |
509
|
|
|
|
510
|
|
|
$block = array( |
511
|
|
|
'insertable' => $this->insertable, |
512
|
|
|
'num_rows' => $num_rows, |
513
|
|
|
'get_target' => $get_target, |
514
|
|
|
'images_url' => $this->images_url, |
515
|
|
|
'caldate' => $this->caldate, |
516
|
|
|
'lang_APCAL_MB_CONTINUING' => _APCAL_MB_CONTINUING, |
517
|
|
|
'lang_APCAL_MB_NOEVENT' => _APCAL_MB_NOEVENT, |
518
|
|
|
'lang_APCAL_MB_ADDEVENT' => _APCAL_MB_ADDEVENT, |
519
|
|
|
'lang_APCAL_MB_RESTEVENT_PRE' => _APCAL_MB_RESTEVENT_PRE, |
520
|
|
|
'lang_APCAL_MB_RESTEVENT_SUF' => _APCAL_MB_RESTEVENT_SUF, |
521
|
|
|
'lang_APCAL_MB_ALLDAY_EVENT' => _APCAL_MB_ALLDAY_EVENT |
522
|
|
|
); |
523
|
|
|
|
524
|
|
|
$count = 0; |
525
|
|
|
// while ($event = $xoopsDB->fetchObject($yrs)) { |
526
|
|
|
while ($event = $GLOBALS['xoopsDB']->fetchObject($yrs)) { |
527
|
|
|
if (++$count > $num) { |
528
|
|
|
break; |
529
|
|
|
} |
530
|
|
|
|
531
|
|
|
// ������$untildays�����Ǥ���С��������Ǥ��ڤ� |
532
|
|
|
if ($untildays > 0 && $event->start > $this->unixtime + $untildays * 86400) { |
533
|
|
|
$num_rows = $count; |
534
|
|
|
break; |
535
|
|
|
} |
536
|
|
|
|
537
|
|
|
// $event->start,end �ϥ����л��� $start,$end �ϥ桼������ |
538
|
|
|
if ($event->allday) { |
539
|
|
|
$can_time_disp = false; |
540
|
|
|
$start_for_time = $start_for_date = $event->start + $tzoffset; |
541
|
|
|
$end_for_time = $end_for_date = $event->end - 300 + $tzoffset; |
542
|
|
|
} else { |
543
|
|
|
$can_time_disp = $for_coming; |
544
|
|
|
$start_for_time = $event->start + $tzoffset; |
545
|
|
|
$start_for_date = $event->start + $tzoffset - $this->day_start; |
546
|
|
|
$end_for_time = $event->end + $tzoffset; |
547
|
|
|
$end_for_date = $event->end + $tzoffset - $this->day_start; |
548
|
|
|
} |
549
|
|
|
|
550
|
|
|
if ($event->start < $now) { // TODO zer0fill $now + $tzoffset ���?��? |
551
|
|
|
// already started |
552
|
|
|
$distance = 0; |
553
|
|
|
$dot = 'dot_started.gif'; |
554
|
|
|
$start_desc = ''; |
555
|
|
View Code Duplication |
if ($event->end - $now < 86400 && $can_time_disp) { |
|
|
|
|
556
|
|
|
if (date('G', $end_for_time) * 3600 <= $this->day_start) { |
557
|
|
|
$end_desc = $this->get_middle_hi($end_for_time, true); |
558
|
|
|
} else { |
559
|
|
|
$end_desc = $this->get_middle_hi($end_for_time); |
560
|
|
|
} |
561
|
|
|
} else { |
562
|
|
|
$end_desc = $this->get_middle_md($end_for_date); |
563
|
|
|
} |
564
|
|
|
} elseif ($event->start - $now < 86400) { |
565
|
|
|
// near event (24hour) |
566
|
|
|
$dot = 'dot_today.gif'; |
567
|
|
View Code Duplication |
if ($can_time_disp) { |
|
|
|
|
568
|
|
|
if (date('G', $start_for_time) * 3600 < $this->day_start) { |
569
|
|
|
$start_desc = $this->get_middle_hi($start_for_time, true); |
570
|
|
|
} else { |
571
|
|
|
$start_desc = $this->get_middle_hi($start_for_time); |
572
|
|
|
} |
573
|
|
|
} else { |
574
|
|
|
$start_desc = $this->get_middle_md($start_for_date); |
575
|
|
|
} |
576
|
|
|
if ($event->end - $now < 86400 && $can_time_disp) { |
577
|
|
|
if (date('G', $end_for_time) * 3600 <= $this->day_start) { |
578
|
|
|
$end_desc = $this->get_middle_hi($end_for_time, true); |
579
|
|
|
} else { |
580
|
|
|
$end_desc = $this->get_middle_hi($end_for_time); |
581
|
|
|
} |
582
|
|
|
$distance = 1; |
583
|
|
|
} else { |
584
|
|
|
$end_desc = $this->get_middle_md($end_for_date); |
585
|
|
|
$distance = 2; |
586
|
|
|
} |
587
|
|
|
} else { |
588
|
|
|
// far event (>1day) |
589
|
|
|
$distance = 3; |
590
|
|
|
$dot = 'dot_future.gif'; |
591
|
|
|
$start_desc = $this->get_middle_md($start_for_date); |
592
|
|
|
$end_desc = $this->get_middle_md($end_for_date); |
593
|
|
|
} |
594
|
|
|
|
595
|
|
|
$multiday = (int)date('j', $end_for_time) > (int)date('j', $start_for_time); |
596
|
|
|
|
597
|
|
|
$pic = $GLOBALS['xoopsDB']->fetchObject($GLOBALS['xoopsDB']->query("SELECT picture FROM {$this->pic_table} WHERE event_id={$event->id} AND main_pic=1 LIMIT 0,1")); |
598
|
|
|
$cat = $GLOBALS['xoopsDB']->fetchObject($GLOBALS['xoopsDB']->query("SELECT cat_title FROM {$this->cat_table} WHERE cid={$event->mainCategory} LIMIT 0,1")); |
599
|
|
|
|
600
|
|
|
$block['events'][] = array( |
601
|
|
|
'summary' => $this->text_sanitizer_for_show($event->summary), |
602
|
|
|
'location' => $this->text_sanitizer_for_show($event->location), |
603
|
|
|
'contact' => $this->text_sanitizer_for_show($event->contact), |
604
|
|
|
'description' => $this->textarea_sanitizer_for_show($event->description), |
605
|
|
|
'allday' => $event->allday, |
606
|
|
|
'start' => $start_for_time, |
607
|
|
|
'start_desc' => $start_desc, |
608
|
|
|
'end' => $end_for_time, |
609
|
|
|
'end_desc' => $end_desc, |
610
|
|
|
'id' => $event->id, |
611
|
|
|
'uid' => $event->uid, |
612
|
|
|
'dot_gif' => $dot, |
613
|
|
|
'distance' => $distance, |
614
|
|
|
'multiday' => $multiday, |
615
|
|
|
'picture' => $pic ? $pic->picture : '', |
616
|
|
|
'extkey0' => $event->extkey0, |
617
|
|
|
'mainCat_id' => $event->mainCategory, |
618
|
|
|
'mainCat' => $cat ? htmlentities($cat->cat_title, ENT_QUOTES, 'UTF-8') : '' |
619
|
|
|
); |
620
|
|
|
} |
621
|
|
|
|
622
|
|
|
$block['num_rows_rest'] = $num_rows - $count; |
623
|
|
|
|
624
|
|
|
return $block; |
625
|
|
|
} |
626
|
|
|
|
627
|
|
|
// ��������Ͽ���줿ͽ��֥�å�������֤� |
628
|
|
|
|
629
|
|
|
/** |
630
|
|
|
* @param string $get_target |
631
|
|
|
* @param int $num |
632
|
|
|
* @return array |
633
|
|
|
*/ |
634
|
|
|
public function get_blockarray_new_event($get_target = '', $num = 5) |
635
|
|
|
{ |
636
|
|
|
// if( $get_target == '' ) $get_target = $_SERVER['SCRIPT_NAME'] ; |
637
|
|
|
|
638
|
|
|
// tzoffset |
639
|
|
|
$tzoffset = ($this->user_TZ - $this->server_TZ) * 3600; |
640
|
|
|
|
641
|
|
|
// ���ƥ����Ϣ��WHERE������ |
642
|
|
|
$whr_categories = $this->get_where_about_categories(); |
643
|
|
|
|
644
|
|
|
// CLASS��Ϣ��WHERE������ |
645
|
|
|
$whr_class = $this->get_where_about_class(); |
646
|
|
|
|
647
|
|
|
// ��������˥������塼����� |
648
|
|
|
$yrs = $GLOBALS['xoopsDB']->query("SELECT id,uid,summary,UNIX_TIMESTAMP(dtstamp) AS udtstamp , start, end, allday, start_date, end_date FROM $this->table WHERE admission>0 AND ($whr_categories) AND ($whr_class) AND (rrule_pid=0 OR rrule_pid=id) ORDER BY dtstamp DESC"); |
649
|
|
|
|
650
|
|
|
$num_rows = $GLOBALS['xoopsDB']->getRowsNum($yrs); |
651
|
|
|
|
652
|
|
|
$block = array( |
653
|
|
|
'insertable' => $this->insertable, |
654
|
|
|
'num_rows' => $num_rows, |
655
|
|
|
'get_target' => $get_target, |
656
|
|
|
'images_url' => $this->images_url, |
657
|
|
|
'caldate' => $this->caldate, |
658
|
|
|
'lang_APCAL_MB_CONTINUING' => _APCAL_MB_CONTINUING, |
659
|
|
|
'lang_APCAL_MB_NOEVENT' => _APCAL_MB_NOEVENT, |
660
|
|
|
'lang_APCAL_MB_ADDEVENT' => _APCAL_MB_ADDEVENT, |
661
|
|
|
'lang_APCAL_MB_RESTEVENT_PRE' => _APCAL_MB_RESTEVENT_PRE, |
662
|
|
|
'lang_APCAL_MB_RESTEVENT_SUF' => _APCAL_MB_RESTEVENT_SUF, |
663
|
|
|
'lang_APCAL_MB_ALLDAY_EVENT' => _APCAL_MB_ALLDAY_EVENT |
664
|
|
|
); |
665
|
|
|
|
666
|
|
|
$count = 0; |
667
|
|
|
while ($event = $GLOBALS['xoopsDB']->fetchObject($yrs)) { |
668
|
|
|
if (++$count > $num) { |
669
|
|
|
break; |
670
|
|
|
} |
671
|
|
|
|
672
|
|
View Code Duplication |
if (isset($event->start_date)) { |
|
|
|
|
673
|
|
|
$start_str = $event->start_date; |
674
|
|
|
} elseif ($event->allday) { |
675
|
|
|
$start_str = $this->get_long_ymdn($event->start); |
676
|
|
|
} else { |
677
|
|
|
$start_str = $this->get_long_ymdn($event->start + $tzoffset); |
678
|
|
|
} |
679
|
|
|
|
680
|
|
View Code Duplication |
if (isset($event->end_date)) { |
|
|
|
|
681
|
|
|
$end_str = $event->end_date; |
682
|
|
|
} elseif ($event->allday) { |
683
|
|
|
$end_str = $this->get_long_ymdn($event->end - 300); |
684
|
|
|
} else { |
685
|
|
|
$end_str = $this->get_long_ymdn($event->end + $tzoffset); |
686
|
|
|
} |
687
|
|
|
|
688
|
|
|
$date_desc = ($start_str == $end_str) ? $start_str : "$start_str - $end_str"; |
689
|
|
|
$block['events'][] = array( |
690
|
|
|
'summary' => $this->text_sanitizer_for_show($event->summary), |
691
|
|
|
'allday' => $event->allday, |
692
|
|
|
'start' => $event->start, |
693
|
|
|
'start_desc' => $start_str, |
694
|
|
|
'end' => $event->end, |
695
|
|
|
'end_desc' => $end_str, |
696
|
|
|
'date_desc' => $date_desc, |
697
|
|
|
'post_date' => formatTimestamp($event->udtstamp), |
698
|
|
|
'uid' => $event->uid, |
699
|
|
|
'id' => $event->id |
700
|
|
|
); |
701
|
|
|
} |
702
|
|
|
|
703
|
|
|
$block['num_rows_rest'] = $num_rows - $count; |
704
|
|
|
|
705
|
|
|
return $block; |
706
|
|
|
} |
707
|
|
|
|
708
|
|
|
// Get the events list view |
709
|
|
|
|
710
|
|
|
/** |
711
|
|
|
* @param $tpl |
712
|
|
|
* @param string $get_target |
713
|
|
|
* @return bool |
714
|
|
|
*/ |
715
|
|
|
public function assign_event_list(&$tpl, $get_target = '') |
716
|
|
|
{ |
717
|
|
|
$pos = isset($_GET['pos']) ? (int)$_GET['pos'] : 0; |
718
|
|
|
$num = isset($_GET['num']) ? (int)$_GET['num'] : 20; |
719
|
|
|
|
720
|
|
|
$roimage = XOOPS_URL . '/modules/apcal/assets/images/regonline/regonline.png'; // added by goffy: image for online registration |
721
|
|
|
|
722
|
|
|
// �����Ƚ� |
723
|
|
|
$orders = array( |
724
|
|
|
'summary' => _APCAL_TH_SUMMARY . ' ' . _APCAL_MB_ORDER_ASC, |
725
|
|
|
'summary DESC' => _APCAL_TH_SUMMARY . ' ' . _APCAL_MB_ORDER_DESC, |
726
|
|
|
'start' => _APCAL_TH_STARTDATETIME . ' ' . _APCAL_MB_ORDER_ASC, |
727
|
|
|
'start DESC' => _APCAL_TH_STARTDATETIME . ' ' . _APCAL_MB_ORDER_DESC, |
728
|
|
|
'dtstamp' => _APCAL_TH_LASTMODIFIED . ' ' . _APCAL_MB_ORDER_ASC, |
729
|
|
|
'dtstamp DESC' => _APCAL_TH_LASTMODIFIED . ' ' . _APCAL_MB_ORDER_DESC, |
730
|
|
|
'uid' => _APCAL_TH_SUBMITTER . ' ' . _APCAL_MB_ORDER_ASC, |
731
|
|
|
'uid DESC' => _APCAL_TH_SUBMITTER . ' ' . _APCAL_MB_ORDER_DESC |
732
|
|
|
); |
733
|
|
|
if (isset($_GET['order']) && isset($orders[$_GET['order']])) { |
734
|
|
|
$order = $_GET['order']; |
735
|
|
|
} else { |
736
|
|
|
$order = 'start'; |
737
|
|
|
} |
738
|
|
|
|
739
|
|
|
// tzoffset |
740
|
|
|
$tzoffset = ($this->user_TZ - $this->server_TZ) * 3600; |
|
|
|
|
741
|
|
|
|
742
|
|
|
$cat_desc = !empty($this->now_cid) |
743
|
|
|
&& !empty($this->categories[$this->now_cid]) ? $this->textarea_sanitizer_for_show($this->categories[$this->now_cid]->cat_desc) : ''; |
744
|
|
|
|
745
|
|
|
$whr_categories = $this->get_where_about_categories(); |
746
|
|
|
$whr_class = $this->get_where_about_class(); |
747
|
|
|
|
748
|
|
|
$categories_selform = $this->get_categories_selform($get_target); |
749
|
|
|
|
750
|
|
|
$ops = array( |
751
|
|
|
'after' => _APCAL_MB_OP_AFTER, |
752
|
|
|
'on' => _APCAL_MB_OP_ON, |
753
|
|
|
'before' => _APCAL_MB_OP_BEFORE, |
754
|
|
|
'all' => _APCAL_MB_OP_ALL |
755
|
|
|
); |
756
|
|
|
|
757
|
|
|
$op = empty($_GET['op']) ? '' : preg_replace('/[^a-zA-Z0-9_-]/', '', $_GET['op']); |
758
|
|
|
$tzoffset = (int)(($this->user_TZ - $this->server_TZ) * 3600); |
759
|
|
|
$toptime_of_day = $this->unixtime + $this->day_start; |
760
|
|
|
switch ($op) { |
761
|
|
|
case 'all': |
762
|
|
|
$whr_term = '1'; |
763
|
|
|
break; |
764
|
|
|
case 'before': |
765
|
|
|
$whr_term = "(allday AND start<='$this->unixtime') || ( ! allday AND start<='" . ($toptime_of_day + 86400 - $tzoffset) . "')"; |
766
|
|
|
//$whr_term = "start<$this->unixtime" ; |
767
|
|
|
break; |
768
|
|
|
default: |
769
|
|
|
case 'after': |
|
|
|
|
770
|
|
|
$op = 'after'; |
771
|
|
|
$whr_term = "(allday AND end>'$this->unixtime') || ( ! allday AND end>'" . ($toptime_of_day - $tzoffset) . "')"; |
772
|
|
|
//$whr_term = "end>$this->unixtime" ; |
773
|
|
|
break; |
774
|
|
|
case 'on': |
775
|
|
|
$whr_term = "(allday AND start<='$this->unixtime' AND end>'$this->unixtime') || ( ! allday AND start<='" |
776
|
|
|
. ($toptime_of_day + 86400 - $tzoffset) |
777
|
|
|
. "' AND end>'" |
778
|
|
|
. ($toptime_of_day |
779
|
|
|
- $tzoffset) |
780
|
|
|
. "')"; |
781
|
|
|
break; |
782
|
|
|
} |
783
|
|
|
|
784
|
|
|
// ���ձ黻�Ҥ��������� |
785
|
|
|
$op_options = ''; |
786
|
|
|
foreach ($ops as $op_id => $op_title) { |
787
|
|
|
if ($op_id == $op) { |
788
|
|
|
$op_options .= "\t\t\t<option value='$op_id' selected>$op_title</option>\n"; |
789
|
|
|
} else { |
790
|
|
|
$op_options .= "\t\t\t<option value='$op_id'>$op_title</option>\n"; |
791
|
|
|
} |
792
|
|
|
} |
793
|
|
|
|
794
|
|
|
// ǯ�������(2001��2020 �Ȥ���) |
795
|
|
|
$year_options = ''; |
796
|
|
View Code Duplication |
for ($y = 2001; $y <= 2020; ++$y) { |
|
|
|
|
797
|
|
|
if ($y == $this->year) { |
798
|
|
|
$year_options .= "\t\t\t<option value='$y' selected>" . sprintf(strip_tags(_APCAL_FMT_YEAR), $y) . "</option>\n"; |
799
|
|
|
} else { |
800
|
|
|
$year_options .= "\t\t\t<option value='$y'>" . sprintf(strip_tags(_APCAL_FMT_YEAR), $y) . "</option>\n"; |
801
|
|
|
} |
802
|
|
|
} |
803
|
|
|
|
804
|
|
|
// �������� |
805
|
|
|
$month_options = ''; |
806
|
|
View Code Duplication |
for ($m = 1; $m <= 12; ++$m) { |
|
|
|
|
807
|
|
|
if ($m == $this->month) { |
808
|
|
|
$month_options .= "\t\t\t<option value='$m' selected>{$this->month_short_names[$m]}</option>\n"; |
809
|
|
|
} else { |
810
|
|
|
$month_options .= "\t\t\t<option value='$m'>{$this->month_short_names[$m]}</option>\n"; |
811
|
|
|
} |
812
|
|
|
} |
813
|
|
|
|
814
|
|
|
// �������� |
815
|
|
|
$date_options = ''; |
816
|
|
View Code Duplication |
for ($d = 1; $d <= 31; ++$d) { |
|
|
|
|
817
|
|
|
if ($d == $this->date) { |
818
|
|
|
$date_options .= "\t\t\t<option value='$d' selected>{$this->date_short_names[$d]}</option>\n"; |
819
|
|
|
} else { |
820
|
|
|
$date_options .= "\t\t\t<option value='$d'>{$this->date_short_names[$d]}</option>\n"; |
821
|
|
|
} |
822
|
|
|
} |
823
|
|
|
|
824
|
|
|
$ymdo_selects = sprintf(_APCAL_FMT_YMDO, "<select name='apcal_year'>$year_options</select>", "<select name='apcal_month'>$month_options</select>", |
825
|
|
|
"<select name='apcal_date'>$date_options</select>", "<select name='op'>$op_options</select>"); |
826
|
|
|
|
827
|
|
|
// �쥳���ɿ��μ��� |
828
|
|
|
$whr = "($whr_term) AND ($whr_categories) AND ($whr_class)"; |
829
|
|
|
$yrs = $GLOBALS['xoopsDB']->query("SELECT *,UNIX_TIMESTAMP(dtstamp) AS udtstamp , start, end, allday, start_date, end_date, extkey0 FROM $this->table WHERE $whr"); |
830
|
|
|
$num_rows = $GLOBALS['xoopsDB']->getRowsNum($yrs); |
831
|
|
|
|
832
|
|
|
// �ܥ����� |
833
|
|
|
$yrs = $GLOBALS['xoopsDB']->query("SELECT *,UNIX_TIMESTAMP(dtstamp) AS udtstamp , start, end, allday, start_date, end_date, mainCategory, extkey0 FROM $this->table WHERE $whr ORDER BY $order LIMIT $pos,$num"); |
834
|
|
|
|
835
|
|
|
// �ڡ���ʬ����� |
836
|
|
|
require_once XOOPS_ROOT_PATH . '/class/pagenav.php'; |
837
|
|
|
$nav = new XoopsPageNav($num_rows, $num, $pos, 'pos', "smode=List&cid=$this->now_cid&num=$num&order=$order&op=$op&caldate=$this->caldate"); |
838
|
|
|
$nav_html = $nav->renderNav(5); |
839
|
|
View Code Duplication |
if ($num_rows <= 0) { |
|
|
|
|
840
|
|
|
$nav_num_info = _NONE; |
841
|
|
|
} elseif ($pos + $num > $num_rows) { |
842
|
|
|
$nav_num_info = ($pos + 1) . "-$num_rows/$num_rows"; |
843
|
|
|
} else { |
844
|
|
|
$nav_num_info = ($pos + 1) . '-' . ($pos + $num) . '/' . $num_rows; |
845
|
|
|
} |
846
|
|
|
|
847
|
|
|
// �����ѿ��Υ������� |
848
|
|
|
$tpl->assign(array( |
849
|
|
|
'page_nav' => $nav_html, |
850
|
|
|
'page_nav_info' => $nav_num_info, |
851
|
|
|
'categories_selform' => $categories_selform, |
852
|
|
|
'cat_desc' => $cat_desc, |
853
|
|
|
'insertable' => $this->insertable, |
854
|
|
|
'get_target' => $get_target, |
855
|
|
|
'num' => $num, |
856
|
|
|
'now_cid' => $this->now_cid, |
857
|
|
|
'num_rows' => $num_rows, |
858
|
|
|
'images_url' => $this->images_url, |
859
|
|
|
'mod_url' => $this->base_url, |
860
|
|
|
'caldate' => $this->caldate, |
861
|
|
|
'op' => $op, |
862
|
|
|
'order' => $order, |
863
|
|
|
'user_can_output_ics' => $this->can_output_ics, |
864
|
|
|
'print_link' => "$this->base_url/print.php?cid=$this->now_cid&smode=List&num=$num&pos=$pos&order=" |
865
|
|
|
. urlencode($order) |
866
|
|
|
. "&caldate=$this->caldate", |
867
|
|
|
'apcal_copyright' => _MD_APCAL_COPYRIGHT, |
868
|
|
|
'ymdo_selects' => $ymdo_selects, |
869
|
|
|
'calhead_bgcolor' => $this->calhead_bgcolor, |
870
|
|
|
'calhead_color' => $this->calhead_color, |
871
|
|
|
'alt_list' => _APCAL_ICON_LIST, |
872
|
|
|
'alt_daily' => _APCAL_ICON_DAILY, |
873
|
|
|
'alt_weekly' => _APCAL_ICON_WEEKLY, |
874
|
|
|
'alt_monthly' => _APCAL_ICON_MONTHLY, |
875
|
|
|
'alt_yearly' => _APCAL_ICON_YEARLY, |
876
|
|
|
'alt_print' => _APCAL_BTN_PRINT, |
877
|
|
|
'lang_checkeditems' => _APCAL_MB_LABEL_CHECKEDITEMS, |
878
|
|
|
'lang_icalendar_output' => _APCAL_MB_LABEL_OUTPUTICS, |
879
|
|
|
'lang_button_export' => _APCAL_BTN_EXPORT, |
880
|
|
|
'lang_button_jump' => _APCAL_BTN_JUMP, |
881
|
|
|
'lang_order' => $orders[$order], |
882
|
|
|
'lang_summary' => _APCAL_TH_SUMMARY, |
883
|
|
|
'lang_startdatetime' => _APCAL_TH_STARTDATETIME, |
884
|
|
|
'lang_enddatetime' => _APCAL_TH_ENDDATETIME, |
885
|
|
|
'lang_location' => _APCAL_TH_LOCATION, |
886
|
|
|
'lang_contact' => _APCAL_TH_CONTACT, |
887
|
|
|
'lang_description' => _APCAL_TH_DESCRIPTION, |
888
|
|
|
'lang_categories' => _APCAL_TH_CATEGORIES, |
889
|
|
|
'lang_submitter' => _APCAL_TH_SUBMITTER, |
890
|
|
|
'lang_class' => _APCAL_TH_CLASS, |
891
|
|
|
'lang_rrule' => _APCAL_TH_RRULE, |
892
|
|
|
'lang_admissionstatus' => _APCAL_TH_ADMISSIONSTATUS, |
893
|
|
|
'lang_lastmodified' => _APCAL_TH_LASTMODIFIED, |
894
|
|
|
'lang_cursortedby' => _APCAL_MB_CURSORTEDBY, |
895
|
|
|
'lang_sortby' => _APCAL_MB_SORTBY, |
896
|
|
|
'ro_image' => $roimage |
897
|
|
|
)); |
898
|
|
|
|
899
|
|
|
// ���٥�ȥ�������롼�� |
900
|
|
|
$count = 0; |
901
|
|
|
$events = array(); |
902
|
|
|
while ($event = $GLOBALS['xoopsDB']->fetchObject($yrs)) { |
903
|
|
View Code Duplication |
if ($event->gmlat > 0 || $event->gmlong > 0) { |
|
|
|
|
904
|
|
|
$this->gmPoints[] = array( |
905
|
|
|
'summary' => $event->summary, |
906
|
|
|
'gmlat' => $event->gmlat, |
907
|
|
|
'gmlong' => $event->gmlong, |
908
|
|
|
'location' => $event->location, |
909
|
|
|
'contact' => $event->contact, |
910
|
|
|
'startDate' => date('j', $event->start), |
911
|
|
|
'event_id' => $event->id |
912
|
|
|
); |
913
|
|
|
} |
914
|
|
|
if (++$count > $num) { |
915
|
|
|
break; |
916
|
|
|
} |
917
|
|
|
|
918
|
|
|
// �Խ���ǽ���ɤ��� |
919
|
|
|
$editable = ($this->isadmin || $event->uid == $this->user_id && $this->editable); |
920
|
|
|
// �Խ���ǽ�Ǥʤ�̤��ǧ�쥳���ɤ�ɽ�����ʤ� |
921
|
|
|
if (!$editable && $event->admission == 0) { |
922
|
|
|
continue; |
923
|
|
|
} |
924
|
|
|
|
925
|
|
|
// ���ϻ��� |
926
|
|
View Code Duplication |
if (isset($event->start_date)) { |
|
|
|
|
927
|
|
|
$start_date_desc = $event->start_date; |
928
|
|
|
$start_time_desc = ''; |
929
|
|
|
$start = 0; |
930
|
|
|
} elseif ($event->allday) { |
931
|
|
|
$start_date_desc = $this->get_long_ymdn($event->start); |
932
|
|
|
$start_time_desc = ''; |
933
|
|
|
$start = $event->start; |
934
|
|
|
} else { |
935
|
|
|
$start = $event->start + $tzoffset; |
936
|
|
|
$start_date_desc = $this->get_long_ymdn($start); |
937
|
|
|
$start_time_desc = $this->get_middle_hi($start); |
938
|
|
|
} |
939
|
|
|
|
940
|
|
|
// ����� |
941
|
|
View Code Duplication |
if (isset($event->end_date)) { |
|
|
|
|
942
|
|
|
$end_date_desc = $event->end_date; |
943
|
|
|
$end_time_desc = ''; |
944
|
|
|
$end = 0x7fffffff; |
945
|
|
|
} elseif ($event->allday) { |
946
|
|
|
$end_date_desc = $this->get_long_ymdn($event->end - 300); |
947
|
|
|
$end_time_desc = ''; |
948
|
|
|
$end = $event->end; |
949
|
|
|
} else { |
950
|
|
|
$end = $event->end + $tzoffset; |
951
|
|
|
$end_date_desc = $this->get_long_ymdn($end); |
952
|
|
|
$end_time_desc = $this->get_middle_hi($end); |
953
|
|
|
} |
954
|
|
|
|
955
|
|
|
// ����¾��ɽ���������� |
956
|
|
|
$admission_status = $event->admission ? _APCAL_MB_EVENT_ADMITTED : _APCAL_MB_EVENT_NEEDADMIT; |
957
|
|
|
$last_modified = $this->get_long_ymdn($event->udtstamp - (int)(($this->user_TZ - $this->server_TZ) * 3600)); |
958
|
|
|
$description = $this->textarea_sanitizer_for_show($event->description); |
959
|
|
|
$summary = $this->text_sanitizer_for_show($event->summary); |
960
|
|
|
$location = $this->text_sanitizer_for_show($event->location); |
961
|
|
|
$contact = $this->text_sanitizer_for_show($event->contact); |
962
|
|
|
$eventURL = $this->make_event_link($event->id, $get_target, date('Y-n-j', $event->start)); |
963
|
|
|
// Get picture |
964
|
|
|
$pic = $GLOBALS['xoopsDB']->fetchObject($GLOBALS['xoopsDB']->query("SELECT picture FROM {$this->pic_table} WHERE event_id={$event->id} AND main_pic=1 LIMIT 0,1")); |
965
|
|
|
$picture = $pic && $this->showPicList ? "<img src='" . XOOPS_UPLOAD_URL . "/apcal/{$pic->picture}' alt='{$summary}' height='50' style='vertical-align: middle;' />" : ''; |
966
|
|
|
// Get maincat |
967
|
|
|
$cat = $GLOBALS['xoopsDB']->fetchObject($GLOBALS['xoopsDB']->query("SELECT cat_title FROM {$this->cat_table} WHERE cid={$event->mainCategory} LIMIT 0,1")); //added by goffy |
968
|
|
|
$maincat = $cat ? htmlentities($cat->cat_title, ENT_QUOTES, 'UTF-8') : ''; //added by goffy |
969
|
|
|
|
970
|
|
|
$events[] = array( |
971
|
|
|
'count' => $count, |
972
|
|
|
'oddeven' => $count & 1 == 1 ? 'odd' : 'even', |
973
|
|
|
'eventURL' => $eventURL, |
974
|
|
|
'picture' => $picture, |
975
|
|
|
'summary' => $summary, |
976
|
|
|
'location' => $location, |
977
|
|
|
'contact' => $contact, |
978
|
|
|
'description' => $description, |
979
|
|
|
'admission' => $admission_status, |
980
|
|
|
'editable' => $editable, |
981
|
|
|
'allday' => $event->allday, |
982
|
|
|
'start' => $start, |
983
|
|
|
'start_date_desc' => $start_date_desc, |
984
|
|
|
'start_time_desc' => $start_time_desc, |
985
|
|
|
'end' => $end, |
986
|
|
|
'end_date_desc' => $end_date_desc, |
987
|
|
|
'end_time_desc' => $end_time_desc, |
988
|
|
|
'post_date' => $last_modified, |
989
|
|
|
'rrule' => $this->rrule_to_human_language($event->rrule), |
990
|
|
|
'uid' => $event->uid, |
991
|
|
|
'submitter_info' => $this->get_submitter_info($event->uid), |
992
|
|
|
'id' => $event->id, |
993
|
|
|
'target_id' => ($event->rrule_pid > 0) ? $event->rrule_pid : $event->id, |
994
|
|
|
'maincat' => $maincat, //added by goffy |
995
|
|
|
'regonline' => $event->extkey0 //added by goffy |
996
|
|
|
); |
997
|
|
|
} |
998
|
|
|
$tpl->assign('events', $events); |
999
|
|
|
|
1000
|
|
|
$tpl->assign('YEARLYVIEW', $this->make_cal_link($get_target, 'Yearly', $this->now_cid, $this->caldate)); |
1001
|
|
|
$tpl->assign('MONTHLYVIEW', $this->make_cal_link($get_target, 'Monthly', $this->now_cid, $this->caldate)); |
1002
|
|
|
$tpl->assign('WEEKLYVIEW', $this->make_cal_link($get_target, 'Weekly', $this->now_cid, $this->caldate)); |
1003
|
|
|
$tpl->assign('DAILYVIEW', $this->make_cal_link($get_target, 'Daily', $this->now_cid, $this->caldate)); |
1004
|
|
|
$tpl->assign('isAdmin', $this->isadmin); |
1005
|
|
|
$tpl->assign('showSubmitter', $this->nameoruname !== 'none'); |
1006
|
|
|
|
1007
|
|
|
return true; |
1008
|
|
|
} |
1009
|
|
|
|
1010
|
|
|
// get public ICS via snoopy |
1011
|
|
|
|
1012
|
|
|
/** |
1013
|
|
|
* @param $uri |
1014
|
|
|
* @param bool $force_http |
1015
|
|
|
* @param string $user_uri |
1016
|
|
|
* @return string |
1017
|
|
|
*/ |
1018
|
|
|
public function import_ics_via_fopen($uri, $force_http = true, $user_uri = '') |
1019
|
|
|
{ |
1020
|
|
|
$user_uri = empty($user_uri) ? '' : $uri; |
|
|
|
|
1021
|
|
|
// changing webcal://* to http://* |
1022
|
|
|
$uri = str_replace('webcal://', 'http://', $uri); |
1023
|
|
|
|
1024
|
|
|
if ($force_http) { |
1025
|
|
|
if (0 !== strpos($uri, 'http://')) { |
1026
|
|
|
$uri = 'http://' . $uri; |
1027
|
|
|
} |
1028
|
|
|
} |
1029
|
|
|
|
1030
|
|
|
// temporary file for store ics via http |
1031
|
|
|
$ics_cache_file = XOOPS_CACHE_PATH . '/apcal_getics_' . uniqid(''); |
1032
|
|
|
|
1033
|
|
|
// http get via Snoopy |
1034
|
|
|
$error_level_stored = error_reporting(); |
1035
|
|
|
error_reporting($error_level_stored & ~E_NOTICE); |
1036
|
|
|
// includes Snoopy class for remote file access |
1037
|
|
|
require_once XOOPS_ROOT_PATH . '/class/snoopy.php'; |
1038
|
|
|
$snoopy = new Snoopy; |
1039
|
|
|
// TIMEOUT from config |
1040
|
|
|
// $snoopy->read_timeout = $config['snoopy_timeout'] ; |
1041
|
|
|
$snoopy->read_timeout = 10; |
1042
|
|
|
// Set proxy if needed |
1043
|
|
|
//if ( trim( $config['proxy_host'] ) != '' ) { |
1044
|
|
|
//$snoopy->proxy_host = $config['proxy_host'] ; |
1045
|
|
|
//$snoopy->proxy_port = $config['proxy_port'] > 0 ? (int)( $config['proxy_port'] ) : 8080 ; |
1046
|
|
|
//$snoopy->user = $config['proxy_user'] ; |
1047
|
|
|
//$snoopy->pass = $config['proxy_pass'] ; |
1048
|
|
|
//} |
1049
|
|
|
//URL fetch |
1050
|
|
|
if (!$snoopy->fetch($uri) || !$snoopy->results) { |
1051
|
|
|
return "-1:Could not open uri: $uri"; |
1052
|
|
|
} |
1053
|
|
|
|
1054
|
|
|
$data = $snoopy->results; |
1055
|
|
|
error_reporting($error_level_stored); |
1056
|
|
|
|
1057
|
|
|
$fp = fopen($ics_cache_file, 'w'); |
1058
|
|
|
fwrite($fp, $data); |
1059
|
|
|
fclose($fp); |
1060
|
|
|
|
1061
|
|
|
$ret = parent::import_ics_via_fopen($ics_cache_file, false, $uri); |
1062
|
|
|
list($records, $calname, $tmpname) = explode(':', $ret, 3); |
|
|
|
|
1063
|
|
|
@unlink($ics_cache_file); |
|
|
|
|
1064
|
|
|
|
1065
|
|
|
if ($records < 1) { |
1066
|
|
|
return "$records:$calname:$uri"; |
1067
|
|
|
} else { |
1068
|
|
|
return $ret; |
1069
|
|
|
} |
1070
|
|
|
} |
1071
|
|
|
|
1072
|
|
|
// returns assigned array for extensible mini calendar block |
1073
|
|
|
|
1074
|
|
|
/** |
1075
|
|
|
* @param int $gifaday |
1076
|
|
|
* @param int $just1gif |
1077
|
|
|
* @param array $plugins |
1078
|
|
|
* @return array |
1079
|
|
|
*/ |
1080
|
|
|
public function get_minical_ex($gifaday = 2, $just1gif = 0, $plugins = array()) |
1081
|
|
|
{ |
1082
|
|
|
$db = XoopsDatabaseFactory::getDatabaseConnection(); |
1083
|
|
|
$myts = MyTextSanitizer::getInstance(); |
1084
|
|
|
|
1085
|
|
|
$tzoffset_s2u = (int)(($this->user_TZ - $this->server_TZ) * 3600); |
1086
|
|
|
$now = time(); |
1087
|
|
|
$user_now_Ynj = date('Y-n-j', $now + $tzoffset_s2u); |
1088
|
|
|
|
1089
|
|
|
// prev_month points the tail, next_month points the head |
1090
|
|
|
$prev_month = date('Y-n-j', mktime(0, 0, 0, $this->month, 0, $this->year)); |
1091
|
|
|
$next_month = date('Y-n-j', mktime(0, 0, 0, $this->month + 1, 1, $this->year)); |
1092
|
|
|
|
1093
|
|
|
$block = array( |
1094
|
|
|
'xoops_url' => XOOPS_URL, |
1095
|
|
|
'mod_url' => $this->base_url, |
1096
|
|
|
'root_url' => '', |
1097
|
|
|
|
1098
|
|
|
'skinpath' => $this->images_url, |
1099
|
|
|
'frame_css' => $this->frame_css, |
1100
|
|
|
'month_name' => $this->month_middle_names[$this->month], |
1101
|
|
|
'year_month_title' => sprintf(_APCAL_FMT_YEAR_MONTH, $this->year, $this->month_middle_names[$this->month]), |
1102
|
|
|
'prev_month' => $prev_month, |
1103
|
|
|
'next_month' => $next_month, |
1104
|
|
|
'lang_prev_month' => _APCAL_MB_PREV_MONTH, |
1105
|
|
|
'lang_next_month' => _APCAL_MB_NEXT_MONTH, |
1106
|
|
|
|
1107
|
|
|
'calhead_bgcolor' => $this->calhead_bgcolor, |
1108
|
|
|
'calhead_color' => $this->calhead_color |
1109
|
|
|
); |
1110
|
|
|
|
1111
|
|
|
$first_date = getdate(mktime(0, 0, 0, $this->month, 1, $this->year)); |
1112
|
|
|
$date = (-$first_date['wday'] + $this->week_start - 7) % 7; |
1113
|
|
|
$wday_end = 7 + $this->week_start; |
1114
|
|
|
|
1115
|
|
|
// Loop of weeknames |
1116
|
|
|
$daynames = array(); |
1117
|
|
View Code Duplication |
for ($wday = $this->week_start; $wday < $wday_end; ++$wday) { |
|
|
|
|
1118
|
|
|
if ($wday % 7 == 0) { |
1119
|
|
|
// Sunday |
1120
|
|
|
$bgcolor = $this->sunday_bgcolor; |
1121
|
|
|
$color = $this->sunday_color; |
1122
|
|
|
} elseif ($wday == 6) { |
1123
|
|
|
// Saturday |
1124
|
|
|
$bgcolor = $this->saturday_bgcolor; |
1125
|
|
|
$color = $this->saturday_color; |
1126
|
|
|
} else { |
1127
|
|
|
// Weekday |
1128
|
|
|
$bgcolor = $this->weekday_bgcolor; |
1129
|
|
|
$color = $this->weekday_color; |
1130
|
|
|
} |
1131
|
|
|
|
1132
|
|
|
// assigning weeknames |
1133
|
|
|
$daynames[] = array( |
1134
|
|
|
'bgcolor' => $bgcolor, |
1135
|
|
|
'color' => $color, |
1136
|
|
|
'dayname' => $this->week_short_names[$wday % 7] |
1137
|
|
|
); |
1138
|
|
|
} |
1139
|
|
|
$block['daynames'] = $daynames; |
1140
|
|
|
|
1141
|
|
|
// get the result of plugins |
1142
|
|
|
$plugin_returns = array(); |
1143
|
|
|
$tzoffset_s2u = (int)(($this->user_TZ - $this->server_TZ) * 3600); |
1144
|
|
|
$block['plugins'] = $plugins; |
1145
|
|
|
foreach ($plugins as $plugin) { |
1146
|
|
|
$plugin_fullpath = $this->base_path . '/' . $this->plugins_path_monthly . '/' . $plugin['file']; |
1147
|
|
|
if (file_exists($plugin_fullpath)) { |
1148
|
|
|
include $plugin_fullpath; |
1149
|
|
|
} |
1150
|
|
|
} |
1151
|
|
|
|
1152
|
|
|
// Loop of week (row) |
1153
|
|
|
$weeks = array(); |
1154
|
|
|
for ($week = 0; $week < 6; ++$week) { |
1155
|
|
|
$days = array(); |
1156
|
|
|
// Loop of day (col) |
1157
|
|
|
for ($wday = $this->week_start; $wday < $wday_end; ++$wday) { |
1158
|
|
|
++$date; |
1159
|
|
|
|
1160
|
|
|
$time = mktime(0, 0, 0, $this->month, $date, $this->year); |
1161
|
|
|
|
1162
|
|
|
// Out of the month |
1163
|
|
|
if (!checkdate($this->month, $date, $this->year)) { |
1164
|
|
|
$days[] = array( |
1165
|
|
|
'date' => date('j', $time), |
1166
|
|
|
'type' => 0 |
1167
|
|
|
); |
1168
|
|
|
continue; |
1169
|
|
|
} |
1170
|
|
|
|
1171
|
|
|
$link = "$this->year-$this->month-$date"; |
1172
|
|
|
|
1173
|
|
|
// COLORS of days |
1174
|
|
View Code Duplication |
if (isset($this->holidays[$link])) { |
|
|
|
|
1175
|
|
|
// Holiday |
1176
|
|
|
$bgcolor = $this->holiday_bgcolor; |
1177
|
|
|
$color = $this->holiday_color; |
1178
|
|
|
} elseif ($wday % 7 == 0) { |
1179
|
|
|
// Sunday |
1180
|
|
|
$bgcolor = $this->sunday_bgcolor; |
1181
|
|
|
$color = $this->sunday_color; |
1182
|
|
|
} elseif ($wday == 6) { |
1183
|
|
|
// Saturday |
1184
|
|
|
$bgcolor = $this->saturday_bgcolor; |
1185
|
|
|
$color = $this->saturday_color; |
1186
|
|
|
} else { |
1187
|
|
|
// Weekday |
1188
|
|
|
$bgcolor = $this->weekday_bgcolor; |
1189
|
|
|
$color = $this->weekday_color; |
1190
|
|
|
} |
1191
|
|
|
|
1192
|
|
|
// Hi-Lighting the SELECTED DATE |
1193
|
|
|
if ($link == $user_now_Ynj) { |
1194
|
|
|
$bgcolor = $this->targetday_bgcolor; |
1195
|
|
|
} |
1196
|
|
|
|
1197
|
|
|
// Preparing the returns from plugins |
1198
|
|
|
$ex = empty($plugin_returns[$date]) ? array() : array_slice($plugin_returns[$date], 0, $gifaday); |
1199
|
|
|
// if( ! empty( $ex ) ) var_dump( $ex ) ; |
1200
|
|
|
|
1201
|
|
|
// Assigning attribs of the day |
1202
|
|
|
$days[] = array( |
1203
|
|
|
'bgcolor' => $bgcolor, |
1204
|
|
|
'color' => $color, |
1205
|
|
|
'link' => $link, |
1206
|
|
|
'date' => $date, |
1207
|
|
|
'type' => 1, |
1208
|
|
|
'ex' => $ex |
1209
|
|
|
); |
1210
|
|
|
} |
1211
|
|
|
$weeks[] = $days; |
1212
|
|
|
} |
1213
|
|
|
$block['weeks'] = $weeks; |
1214
|
|
|
|
1215
|
|
|
return $block; |
1216
|
|
|
} |
1217
|
|
|
|
1218
|
|
|
// ���ꤵ�줿type�Υץ饰����������֤� |
1219
|
|
|
|
1220
|
|
|
/** |
1221
|
|
|
* @param $type |
1222
|
|
|
* @return array |
1223
|
|
|
*/ |
1224
|
|
|
public function get_plugins($type) |
1225
|
|
|
{ |
1226
|
|
|
global $xoopsDB, $xoopsUser; |
1227
|
|
|
|
1228
|
|
|
// MyTextSanitizer |
1229
|
|
|
$myts = MyTextSanitizer::getInstance(); |
1230
|
|
|
|
1231
|
|
|
// allowed modules |
1232
|
|
|
$modulepermHandler = xoops_getHandler('groupperm'); |
1233
|
|
|
$groups = is_object($xoopsUser) ? $xoopsUser->getGroups() : XOOPS_GROUP_ANONYMOUS; |
1234
|
|
|
$allowed_mids = $modulepermHandler->getItemIds('module_read', $groups); |
1235
|
|
|
|
1236
|
|
|
// plugins |
1237
|
|
|
$plugins = array(); |
1238
|
|
|
$prs = $GLOBALS['xoopsDB']->query("SELECT pi_title,pi_dirname AS dirname,pi_file AS file,pi_dotgif AS dotgif,pi_options AS options FROM $this->plugin_table WHERE pi_type='" |
1239
|
|
|
. addslashes($type) |
1240
|
|
|
. "' AND pi_enabled ORDER BY pi_weight"); |
1241
|
|
|
while ($plugin = $GLOBALS['xoopsDB']->fetchArray($prs)) { |
1242
|
|
|
$dirname4sql = addslashes($plugin['dirname']); |
1243
|
|
|
$mrs = $GLOBALS['xoopsDB']->query('SELECT mid,name FROM ' . $GLOBALS['xoopsDB']->prefix('modules') . " WHERE dirname='$dirname4sql'"); |
1244
|
|
|
if ($mrs && $GLOBALS['xoopsDB']->getRowsNum($mrs)) { |
1245
|
|
|
list($mid, $name) = $GLOBALS['xoopsDB']->fetchRow($mrs); |
1246
|
|
|
if (!in_array($mid, $allowed_mids)) { |
1247
|
|
|
continue; |
1248
|
|
|
} |
1249
|
|
|
$plugin['pi_title'] = $myts->htmlSpecialChars($plugin['pi_title']); |
1250
|
|
|
$plugin['name'] = $myts->htmlSpecialChars($name); |
1251
|
|
|
$plugin['mid'] = $mid; |
1252
|
|
|
$plugins[] = $plugin; |
1253
|
|
|
} |
1254
|
|
|
} |
1255
|
|
|
|
1256
|
|
|
return $plugins; |
1257
|
|
|
} |
1258
|
|
|
|
1259
|
|
|
// The End of Class |
1260
|
|
|
} |
1261
|
|
|
} |
1262
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.