|
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
|
|
|
// ORIGINAL: PHP iCalendar (http://phapcalendar.sourceforge.net/) |
|
23
|
|
|
// PROJECT ADMINS |
|
24
|
|
|
// -------------- |
|
25
|
|
|
// Chad Little <[email protected]> |
|
26
|
|
|
// Jared Wangen <[email protected]> |
|
27
|
|
|
// |
|
28
|
|
|
// DEVELOPERS |
|
29
|
|
|
// ---------- |
|
30
|
|
|
// Patrick Berry <[email protected]> |
|
31
|
|
|
// Bill Fenner <[email protected]> |
|
32
|
|
|
// David Reindl <[email protected]> |
|
33
|
|
|
// |
|
34
|
|
|
// CODE CONTRIBUTORS |
|
35
|
|
|
// ----------------- |
|
36
|
|
|
// Greg Westin <[email protected]> |
|
37
|
|
|
// Blaine Cook <[email protected]> |
|
38
|
|
|
|
|
39
|
|
|
// mb_internal_encoding¤Î¥¨¥ß¥å¥ì¡¼¥È (¾ï¤ËASCII¤òÊÖ¤¹) |
|
40
|
|
|
if (!function_exists('mb_internal_encoding')) { |
|
41
|
|
|
/** |
|
42
|
|
|
* @return string |
|
43
|
|
|
*/ |
|
44
|
|
|
function mb_internal_encoding() |
|
45
|
|
|
{ |
|
46
|
|
|
return 'ASCII'; |
|
47
|
|
|
} |
|
48
|
|
|
} |
|
49
|
|
|
|
|
50
|
|
|
/** |
|
51
|
|
|
* Class iCal_parser |
|
52
|
|
|
*/ |
|
53
|
|
|
class iCal_parser |
|
54
|
|
|
{ |
|
55
|
|
|
public $week_start_day = 'Sunday'; |
|
56
|
|
|
public $timezone = '+0900'; |
|
57
|
|
|
public $events = array(); |
|
58
|
|
|
public $language = 'japanese'; |
|
59
|
|
|
|
|
60
|
|
|
// From timezones.php |
|
61
|
|
|
public $tz_array = array( |
|
62
|
|
|
'GMT' => array('+0000', '+0000'), |
|
63
|
|
|
'Africa/Addis_Ababa' => array('+0300', '+0300'), |
|
64
|
|
|
'Africa/Algiers' => array('+0100', '+0100'), |
|
65
|
|
|
'Africa/Asmera' => array('+0300', '+0300'), |
|
66
|
|
|
'Africa/Bangui' => array('+0100', '+0100'), |
|
67
|
|
|
'Africa/Blantyre' => array('+0200', '+0200'), |
|
68
|
|
|
'Africa/Brazzaville' => array('+0100', '+0100'), |
|
69
|
|
|
'Africa/Bujumbura' => array('+0200', '+0200'), |
|
70
|
|
|
'Africa/Cairo' => array('+0200', '+0300'), |
|
71
|
|
|
'Africa/Ceuta' => array('+0100', '+0200'), |
|
72
|
|
|
'Africa/Dar_es_Salaam' => array('+0300', '+0300'), |
|
73
|
|
|
'Africa/Djibouti' => array('+0300', '+0300'), |
|
74
|
|
|
'Africa/Douala' => array('+0100', '+0100'), |
|
75
|
|
|
'Africa/Gaborone' => array('+0200', '+0200'), |
|
76
|
|
|
'Africa/Harare' => array('+0200', '+0200'), |
|
77
|
|
|
'Africa/Johannesburg' => array('+0200', '+0200'), |
|
78
|
|
|
'Africa/Kampala' => array('+0300', '+0300'), |
|
79
|
|
|
'Africa/Khartoum' => array('+0300', '+0300'), |
|
80
|
|
|
'Africa/Kigali' => array('+0200', '+0200'), |
|
81
|
|
|
'Africa/Kinshasa' => array('+0100', '+0100'), |
|
82
|
|
|
'Africa/Lagos' => array('+0100', '+0100'), |
|
83
|
|
|
'Africa/Libreville' => array('+0100', '+0100'), |
|
84
|
|
|
'Africa/Luanda' => array('+0100', '+0100'), |
|
85
|
|
|
'Africa/Lubumbashi' => array('+0200', '+0200'), |
|
86
|
|
|
'Africa/Lusaka' => array('+0200', '+0200'), |
|
87
|
|
|
'Africa/Malabo' => array('+0100', '+0100'), |
|
88
|
|
|
'Africa/Maputo' => array('+0200', '+0200'), |
|
89
|
|
|
'Africa/Maseru' => array('+0200', '+0200'), |
|
90
|
|
|
'Africa/Mbabane' => array('+0200', '+0200'), |
|
91
|
|
|
'Africa/Mogadishu' => array('+0300', '+0300'), |
|
92
|
|
|
'Africa/Nairobi' => array('+0300', '+0300'), |
|
93
|
|
|
'Africa/Ndjamena' => array('+0100', '+0100'), |
|
94
|
|
|
'Africa/Niamey' => array('+0100', '+0100'), |
|
95
|
|
|
'Africa/Porto-Novo' => array('+0100', '+0100'), |
|
96
|
|
|
'Africa/Tripoli' => array('+0200', '+0200'), |
|
97
|
|
|
'Africa/Tunis' => array('+0100', '+0100'), |
|
98
|
|
|
'Africa/Windhoek' => array('+0200', '+0100'), |
|
99
|
|
|
'America/Adak' => array('-1000', '-0900'), |
|
100
|
|
|
'America/Anchorage' => array('-0900', '-0800'), |
|
101
|
|
|
'America/Anguilla' => array('-0400', '-0400'), |
|
102
|
|
|
'America/Antigua' => array('-0400', '-0400'), |
|
103
|
|
|
'America/Araguaina' => array('-0200', '-0300'), |
|
104
|
|
|
'America/Aruba' => array('-0400', '-0400'), |
|
105
|
|
|
'America/Asuncion' => array('-0300', '-0400'), |
|
106
|
|
|
'America/Atka' => array('-1000', '-0900'), |
|
107
|
|
|
'America/Barbados' => array('-0400', '-0400'), |
|
108
|
|
|
'America/Belem' => array('-0300', '-0300'), |
|
109
|
|
|
'America/Belize' => array('-0600', '-0600'), |
|
110
|
|
|
'America/Boa_Vista' => array('-0400', '-0400'), |
|
111
|
|
|
'America/Bogota' => array('-0500', '-0500'), |
|
112
|
|
|
'America/Boise' => array('-0700', '-0600'), |
|
113
|
|
|
'America/Buenos_Aires' => array('-0300', '-0300'), |
|
114
|
|
|
'America/Cambridge_Bay' => array('-0700', '-0600'), |
|
115
|
|
|
'America/Cancun' => array('-0600', '-0500'), |
|
116
|
|
|
'America/Caracas' => array('-0400', '-0400'), |
|
117
|
|
|
'America/Catamarca' => array('-0300', '-0300'), |
|
118
|
|
|
'America/Cayenne' => array('-0300', '-0300'), |
|
119
|
|
|
'America/Cayman' => array('-0500', '-0500'), |
|
120
|
|
|
'America/Chicago' => array('-0600', '-0500'), |
|
121
|
|
|
'America/Chihuahua' => array('-0700', '-0600'), |
|
122
|
|
|
'America/Cordoba' => array('-0300', '-0300'), |
|
123
|
|
|
'America/Costa_Rica' => array('-0600', '-0600'), |
|
124
|
|
|
'America/Cuiaba' => array('-0300', '-0400'), |
|
125
|
|
|
'America/Curacao' => array('-0400', '-0400'), |
|
126
|
|
|
'America/Dawson' => array('-0800', '-0700'), |
|
127
|
|
|
'America/Dawson_Creek' => array('-0700', '-0700'), |
|
128
|
|
|
'America/Denver' => array('-0700', '-0600'), |
|
129
|
|
|
'America/Detroit' => array('-0500', '-0400'), |
|
130
|
|
|
'America/Dominica' => array('-0400', '-0400'), |
|
131
|
|
|
'America/Edmonton' => array('-0700', '-0600'), |
|
132
|
|
|
'America/Eirunepe' => array('-0500', '-0500'), |
|
133
|
|
|
'America/El_Salvador' => array('-0600', '-0600'), |
|
134
|
|
|
'America/Ensenada' => array('-0800', '-0700'), |
|
135
|
|
|
'America/Fort_Wayne' => array('-0500', '-0500'), |
|
136
|
|
|
'America/Fortaleza' => array('-0300', '-0300'), |
|
137
|
|
|
'America/Glace_Bay' => array('-0400', '-0300'), |
|
138
|
|
|
'America/Godthab' => array('-0300', '-0200'), |
|
139
|
|
|
'America/Goose_Bay' => array('-0400', '-0300'), |
|
140
|
|
|
'America/Grand_Turk' => array('-0500', '-0400'), |
|
141
|
|
|
'America/Grenada' => array('-0400', '-0400'), |
|
142
|
|
|
'America/Guadeloupe' => array('-0400', '-0400'), |
|
143
|
|
|
'America/Guatemala' => array('-0600', '-0600'), |
|
144
|
|
|
'America/Guayaquil' => array('-0500', '-0500'), |
|
145
|
|
|
'America/Guyana' => array('-0400', '-0400'), |
|
146
|
|
|
'America/Halifax' => array('-0400', '-0300'), |
|
147
|
|
|
'America/Havana' => array('-0500', '-0400'), |
|
148
|
|
|
'America/Hermosillo' => array('-0700', '-0700'), |
|
149
|
|
|
'America/Indiana/Indianapolis' => array('-0500', '-0500'), |
|
150
|
|
|
'America/Indiana/Knox' => array('-0500', '-0500'), |
|
151
|
|
|
'America/Indiana/Marengo' => array('-0500', '-0500'), |
|
152
|
|
|
'America/Indiana/Vevay' => array('-0500', '-0500'), |
|
153
|
|
|
'America/Indianapolis' => array('-0500', '-0500'), |
|
154
|
|
|
'America/Inuvik' => array('-0700', '-0600'), |
|
155
|
|
|
'America/Iqaluit' => array('-0500', '-0400'), |
|
156
|
|
|
'America/Jamaica' => array('-0500', '-0500'), |
|
157
|
|
|
'America/Jujuy' => array('-0300', '-0300'), |
|
158
|
|
|
'America/Juneau' => array('-0900', '-0800'), |
|
159
|
|
|
'America/Kentucky/Louisville' => array('-0500', '-0400'), |
|
160
|
|
|
'America/Kentucky/Monticello' => array('-0500', '-0400'), |
|
161
|
|
|
'America/Knox_IN' => array('-0500', '-0500'), |
|
162
|
|
|
'America/La_Paz' => array('-0400', '-0400'), |
|
163
|
|
|
'America/Lima' => array('-0500', '-0500'), |
|
164
|
|
|
'America/Los_Angeles' => array('-0800', '-0700'), |
|
165
|
|
|
'America/Louisville' => array('-0500', '-0400'), |
|
166
|
|
|
'America/Maceio' => array('-0300', '-0300'), |
|
167
|
|
|
'America/Managua' => array('-0600', '-0600'), |
|
168
|
|
|
'America/Manaus' => array('-0400', '-0400'), |
|
169
|
|
|
'America/Martinique' => array('-0400', '-0400'), |
|
170
|
|
|
'America/Mazatlan' => array('-0700', '-0600'), |
|
171
|
|
|
'America/Mendoza' => array('-0300', '-0300'), |
|
172
|
|
|
'America/Menominee' => array('-0600', '-0500'), |
|
173
|
|
|
'America/Merida' => array('-0600', '-0500'), |
|
174
|
|
|
'America/Mexico_City' => array('-0600', '-0500'), |
|
175
|
|
|
'America/Miquelon' => array('-0300', '-0200'), |
|
176
|
|
|
'America/Monterrey' => array('-0600', '-0500'), |
|
177
|
|
|
'America/Montevideo' => array('-0300', '-0300'), |
|
178
|
|
|
'America/Montreal' => array('-0500', '-0400'), |
|
179
|
|
|
'America/Montserrat' => array('-0400', '-0400'), |
|
180
|
|
|
'America/Nassau' => array('-0500', '-0400'), |
|
181
|
|
|
'America/New_York' => array('-0500', '-0400'), |
|
182
|
|
|
'America/Nipigon' => array('-0500', '-0400'), |
|
183
|
|
|
'America/Nome' => array('-0900', '-0800'), |
|
184
|
|
|
'America/Noronha' => array('-0200', '-0200'), |
|
185
|
|
|
'America/Panama' => array('-0500', '-0500'), |
|
186
|
|
|
'America/Pangnirtung' => array('-0500', '-0400'), |
|
187
|
|
|
'America/Paramaribo' => array('-0300', '-0300'), |
|
188
|
|
|
'America/Phoenix' => array('-0700', '-0700'), |
|
189
|
|
|
'America/Port-au-Prince' => array('-0500', '-0500'), |
|
190
|
|
|
'America/Port_of_Spain' => array('-0400', '-0400'), |
|
191
|
|
|
'America/Porto_Acre' => array('-0500', '-0500'), |
|
192
|
|
|
'America/Porto_Velho' => array('-0400', '-0400'), |
|
193
|
|
|
'America/Puerto_Rico' => array('-0400', '-0400'), |
|
194
|
|
|
'America/Rainy_River' => array('-0600', '-0500'), |
|
195
|
|
|
'America/Rankin_Inlet' => array('-0600', '-0500'), |
|
196
|
|
|
'America/Recife' => array('-0300', '-0300'), |
|
197
|
|
|
'America/Regina' => array('-0600', '-0600'), |
|
198
|
|
|
'America/Rio_Branco' => array('-0500', '-0500'), |
|
199
|
|
|
'America/Rosario' => array('-0300', '-0300'), |
|
200
|
|
|
'America/Santiago' => array('-0300', '-0400'), |
|
201
|
|
|
'America/Santo_Domingo' => array('-0400', '-0400'), |
|
202
|
|
|
'America/Sao_Paulo' => array('-0200', '-0300'), |
|
203
|
|
|
'America/Scoresbysund' => array('-0100', '+0000'), |
|
204
|
|
|
'America/Shiprock' => array('-0700', '-0600'), |
|
205
|
|
|
'America/St_Johns' => array('-031800', '-021800'), |
|
206
|
|
|
'America/St_Kitts' => array('-0400', '-0400'), |
|
207
|
|
|
'America/St_Lucia' => array('-0400', '-0400'), |
|
208
|
|
|
'America/St_Thomas' => array('-0400', '-0400'), |
|
209
|
|
|
'America/St_Vincent' => array('-0400', '-0400'), |
|
210
|
|
|
'America/Swift_Current' => array('-0600', '-0600'), |
|
211
|
|
|
'America/Tegucigalpa' => array('-0600', '-0600'), |
|
212
|
|
|
'America/Thule' => array('-0400', '-0300'), |
|
213
|
|
|
'America/Thunder_Bay' => array('-0500', '-0400'), |
|
214
|
|
|
'America/Tijuana' => array('-0800', '-0700'), |
|
215
|
|
|
'America/Tortola' => array('-0400', '-0400'), |
|
216
|
|
|
'America/Vancouver' => array('-0800', '-0700'), |
|
217
|
|
|
'America/Virgin' => array('-0400', '-0400'), |
|
218
|
|
|
'America/Whitehorse' => array('-0800', '-0700'), |
|
219
|
|
|
'America/Winnipeg' => array('-0600', '-0500'), |
|
220
|
|
|
'America/Yakutat' => array('-0900', '-0800'), |
|
221
|
|
|
'America/Yellowknife' => array('-0700', '-0600'), |
|
222
|
|
|
'Antarctica/Casey' => array('+0800', '+0800'), |
|
223
|
|
|
'Antarctica/Davis' => array('+0700', '+0700'), |
|
224
|
|
|
'Antarctica/DumontDUrville' => array('+1000', '+1000'), |
|
225
|
|
|
'Antarctica/Mawson' => array('+0600', '+0600'), |
|
226
|
|
|
'Antarctica/McMurdo' => array('+1300', '+1200'), |
|
227
|
|
|
'Antarctica/Palmer' => array('-0300', '-0400'), |
|
228
|
|
|
'Antarctica/South_Pole' => array('+1300', '+1200'), |
|
229
|
|
|
'Antarctica/Syowa' => array('+0300', '+0300'), |
|
230
|
|
|
'Antarctica/Vostok' => array('+0600', '+0600'), |
|
231
|
|
|
'Arctic/Longyearbyen' => array('+0100', '+0200'), |
|
232
|
|
|
'Asia/Aden' => array('+0300', '+0300'), |
|
233
|
|
|
'Asia/Almaty' => array('+0600', '+0700'), |
|
234
|
|
|
'Asia/Amman' => array('+0200', '+0300'), |
|
235
|
|
|
'Asia/Anadyr' => array('+1200', '+1300'), |
|
236
|
|
|
'Asia/Aqtau' => array('+0400', '+0500'), |
|
237
|
|
|
'Asia/Aqtobe' => array('+0500', '+0600'), |
|
238
|
|
|
'Asia/Ashgabat' => array('+0500', '+0500'), |
|
239
|
|
|
'Asia/Ashkhabad' => array('+0500', '+0500'), |
|
240
|
|
|
'Asia/Baghdad' => array('+0300', '+0400'), |
|
241
|
|
|
'Asia/Bahrain' => array('+0300', '+0300'), |
|
242
|
|
|
'Asia/Baku' => array('+0400', '+0500'), |
|
243
|
|
|
'Asia/Bangkok' => array('+0700', '+0700'), |
|
244
|
|
|
'Asia/Beirut' => array('+0200', '+0300'), |
|
245
|
|
|
'Asia/Bishkek' => array('+0500', '+0600'), |
|
246
|
|
|
'Asia/Brunei' => array('+0800', '+0800'), |
|
247
|
|
|
'Asia/Calcutta' => array('+051800', '+051800'), |
|
248
|
|
|
'Asia/Chungking' => array('+0800', '+0800'), |
|
249
|
|
|
'Asia/Colombo' => array('+0600', '+0600'), |
|
250
|
|
|
'Asia/Dacca' => array('+0600', '+0600'), |
|
251
|
|
|
'Asia/Damascus' => array('+0200', '+0300'), |
|
252
|
|
|
'Asia/Dhaka' => array('+0600', '+0600'), |
|
253
|
|
|
'Asia/Dili' => array('+0900', '+0900'), |
|
254
|
|
|
'Asia/Dubai' => array('+0400', '+0400'), |
|
255
|
|
|
'Asia/Dushanbe' => array('+0500', '+0500'), |
|
256
|
|
|
'Asia/Gaza' => array('+0200', '+0300'), |
|
257
|
|
|
'Asia/Harbin' => array('+0800', '+0800'), |
|
258
|
|
|
'Asia/Hong_Kong' => array('+0800', '+0800'), |
|
259
|
|
|
'Asia/Hovd' => array('+0700', '+0700'), |
|
260
|
|
|
'Asia/Irkutsk' => array('+0800', '+0900'), |
|
261
|
|
|
'Asia/Istanbul' => array('+0200', '+0300'), |
|
262
|
|
|
'Asia/Jakarta' => array('+0700', '+0700'), |
|
263
|
|
|
'Asia/Jayapura' => array('+0900', '+0900'), |
|
264
|
|
|
'Asia/Jerusalem' => array('+0200', '+0300'), |
|
265
|
|
|
'Asia/Kabul' => array('+041800', '+041800'), |
|
266
|
|
|
'Asia/Kamchatka' => array('+1200', '+1300'), |
|
267
|
|
|
'Asia/Karachi' => array('+0500', '+0500'), |
|
268
|
|
|
'Asia/Kashgar' => array('+0800', '+0800'), |
|
269
|
|
|
'Asia/Katmandu' => array('+052700', '+052700'), |
|
270
|
|
|
'Asia/Krasnoyarsk' => array('+0700', '+0800'), |
|
271
|
|
|
'Asia/Kuala_Lumpur' => array('+0800', '+0800'), |
|
272
|
|
|
'Asia/Kuching' => array('+0800', '+0800'), |
|
273
|
|
|
'Asia/Kuwait' => array('+0300', '+0300'), |
|
274
|
|
|
'Asia/Macao' => array('+0800', '+0800'), |
|
275
|
|
|
'Asia/Magadan' => array('+1100', '+1200'), |
|
276
|
|
|
'Asia/Manila' => array('+0800', '+0800'), |
|
277
|
|
|
'Asia/Muscat' => array('+0400', '+0400'), |
|
278
|
|
|
'Asia/Nicosia' => array('+0200', '+0300'), |
|
279
|
|
|
'Asia/Novosibirsk' => array('+0600', '+0700'), |
|
280
|
|
|
'Asia/Omsk' => array('+0600', '+0700'), |
|
281
|
|
|
'Asia/Phnom_Penh' => array('+0700', '+0700'), |
|
282
|
|
|
'Asia/Pyongyang' => array('+0900', '+0900'), |
|
283
|
|
|
'Asia/Qatar' => array('+0300', '+0300'), |
|
284
|
|
|
'Asia/Rangoon' => array('+061800', '+061800'), |
|
285
|
|
|
'Asia/Riyadh' => array('+0300', '+0300'), |
|
286
|
|
|
'Asia/Riyadh87' => array('+03424', '+03424'), |
|
287
|
|
|
'Asia/Riyadh88' => array('+03424', '+03424'), |
|
288
|
|
|
'Asia/Riyadh89' => array('+03424', '+03424'), |
|
289
|
|
|
'Asia/Saigon' => array('+0700', '+0700'), |
|
290
|
|
|
'Asia/Samarkand' => array('+0500', '+0500'), |
|
291
|
|
|
'Asia/Seoul' => array('+0900', '+0900'), |
|
292
|
|
|
'Asia/Shanghai' => array('+0800', '+0800'), |
|
293
|
|
|
'Asia/Singapore' => array('+0800', '+0800'), |
|
294
|
|
|
'Asia/Taipei' => array('+0800', '+0800'), |
|
295
|
|
|
'Asia/Tashkent' => array('+0500', '+0500'), |
|
296
|
|
|
'Asia/Tbilisi' => array('+0400', '+0500'), |
|
297
|
|
|
'Asia/Tehran' => array('+031800', '+041800'), |
|
298
|
|
|
'Asia/Tel_Aviv' => array('+0200', '+0300'), |
|
299
|
|
|
'Asia/Thimbu' => array('+0600', '+0600'), |
|
300
|
|
|
'Asia/Thimphu' => array('+0600', '+0600'), |
|
301
|
|
|
'Asia/Tokyo' => array('+0900', '+0900'), |
|
302
|
|
|
'Asia/Ujung_Pandang' => array('+0800', '+0800'), |
|
303
|
|
|
'Asia/Ulaanbaatar' => array('+0800', '+0800'), |
|
304
|
|
|
'Asia/Ulan_Bator' => array('+0800', '+0800'), |
|
305
|
|
|
'Asia/Urumqi' => array('+0800', '+0800'), |
|
306
|
|
|
'Asia/Vientiane' => array('+0700', '+0700'), |
|
307
|
|
|
'Asia/Vladivostok' => array('+1000', '+1100'), |
|
308
|
|
|
'Asia/Yakutsk' => array('+0900', '+1000'), |
|
309
|
|
|
'Asia/Yekaterinburg' => array('+0500', '+0600'), |
|
310
|
|
|
'Asia/Yerevan' => array('+0400', '+0500'), |
|
311
|
|
|
'Atlantic/Azores' => array('-0100', '+0000'), |
|
312
|
|
|
'Atlantic/Bermuda' => array('-0400', '-0300'), |
|
313
|
|
|
'Atlantic/Canary' => array('+0000', '+0100'), |
|
314
|
|
|
'Atlantic/Cape_Verde' => array('-0100', '-0100'), |
|
315
|
|
|
'Atlantic/Faeroe' => array('+0000', '+0100'), |
|
316
|
|
|
'Atlantic/Jan_Mayen' => array('-0100', '-0100'), |
|
317
|
|
|
'Atlantic/Madeira' => array('+0000', '+0100'), |
|
318
|
|
|
'Atlantic/South_Georgia' => array('-0200', '-0200'), |
|
319
|
|
|
'Atlantic/Stanley' => array('-0300', '-0400'), |
|
320
|
|
|
'Australia/ACT' => array('+1100', '+1000'), |
|
321
|
|
|
'Australia/Adelaide' => array('+101800', '+091800'), |
|
322
|
|
|
'Australia/Brisbane' => array('+1000', '+1000'), |
|
323
|
|
|
'Australia/Broken_Hill' => array('+101800', '+091800'), |
|
324
|
|
|
'Australia/Canberra' => array('+1100', '+1000'), |
|
325
|
|
|
'Australia/Darwin' => array('+091800', '+091800'), |
|
326
|
|
|
'Australia/Hobart' => array('+1100', '+1000'), |
|
327
|
|
|
'Australia/LHI' => array('+1100', '+101800'), |
|
328
|
|
|
'Australia/Lindeman' => array('+1000', '+1000'), |
|
329
|
|
|
'Australia/Lord_Howe' => array('+1100', '+101800'), |
|
330
|
|
|
'Australia/Melbourne' => array('+1100', '+1000'), |
|
331
|
|
|
'Australia/NSW' => array('+1100', '+1000'), |
|
332
|
|
|
'Australia/North' => array('+091800', '+091800'), |
|
333
|
|
|
'Australia/Perth' => array('+0800', '+0800'), |
|
334
|
|
|
'Australia/Queensland' => array('+1000', '+1000'), |
|
335
|
|
|
'Australia/South' => array('+101800', '+091800'), |
|
336
|
|
|
'Australia/Sydney' => array('+1100', '+1000'), |
|
337
|
|
|
'Australia/Tasmania' => array('+1100', '+1000'), |
|
338
|
|
|
'Australia/Victoria' => array('+1100', '+1000'), |
|
339
|
|
|
'Australia/West' => array('+0800', '+0800'), |
|
340
|
|
|
'Australia/Yancowinna' => array('+101800', '+091800'), |
|
341
|
|
|
'Brazil/Acre' => array('-0500', '-0500'), |
|
342
|
|
|
'Brazil/DeNoronha' => array('-0200', '-0200'), |
|
343
|
|
|
'Brazil/East' => array('-0200', '-0300'), |
|
344
|
|
|
'Brazil/West' => array('-0400', '-0400'), |
|
345
|
|
|
'CET' => array('+0100', '+0200'), |
|
346
|
|
|
'CST6CDT' => array('-0600', '-0500'), |
|
347
|
|
|
'Canada/Atlantic' => array('-0400', '-0300'), |
|
348
|
|
|
'Canada/Central' => array('-0600', '-0500'), |
|
349
|
|
|
'Canada/East-Saskatchewan' => array('-0600', '-0600'), |
|
350
|
|
|
'Canada/Eastern' => array('-0500', '-0400'), |
|
351
|
|
|
'Canada/Mountain' => array('-0700', '-0600'), |
|
352
|
|
|
'Canada/Newfoundland' => array('-031800', '-021800'), |
|
353
|
|
|
'Canada/Pacific' => array('-0800', '-0700'), |
|
354
|
|
|
'Canada/Saskatchewan' => array('-0600', '-0600'), |
|
355
|
|
|
'Canada/Yukon' => array('-0800', '-0700'), |
|
356
|
|
|
'Chile/Continental' => array('-0300', '-0400'), |
|
357
|
|
|
'Chile/EasterIsland' => array('-0500', '-0600'), |
|
358
|
|
|
'Cuba' => array('-0500', '-0400'), |
|
359
|
|
|
'EET' => array('+0200', '+0300'), |
|
360
|
|
|
'EST' => array('-0500', '-0500'), |
|
361
|
|
|
'EST5EDT' => array('-0500', '-0400'), |
|
362
|
|
|
'Egypt' => array('+0200', '+0300'), |
|
363
|
|
|
'Eire' => array('+0000', '+0100'), |
|
364
|
|
|
'Etc/GMT+1' => array('-0100', '-0100'), |
|
365
|
|
|
'Etc/GMT+10' => array('-1000', '-1000'), |
|
366
|
|
|
'Etc/GMT+11' => array('-1100', '-1100'), |
|
367
|
|
|
'Etc/GMT+12' => array('-1200', '-1200'), |
|
368
|
|
|
'Etc/GMT+2' => array('-0200', '-0200'), |
|
369
|
|
|
'Etc/GMT+3' => array('-0300', '-0300'), |
|
370
|
|
|
'Etc/GMT+4' => array('-0400', '-0400'), |
|
371
|
|
|
'Etc/GMT+5' => array('-0500', '-0500'), |
|
372
|
|
|
'Etc/GMT+6' => array('-0600', '-0600'), |
|
373
|
|
|
'Etc/GMT+7' => array('-0700', '-0700'), |
|
374
|
|
|
'Etc/GMT+8' => array('-0800', '-0800'), |
|
375
|
|
|
'Etc/GMT+9' => array('-0900', '-0900'), |
|
376
|
|
|
'Etc/GMT-1' => array('+0100', '+0100'), |
|
377
|
|
|
'Etc/GMT-10' => array('+1000', '+1000'), |
|
378
|
|
|
'Etc/GMT-11' => array('+1100', '+1100'), |
|
379
|
|
|
'Etc/GMT-12' => array('+1200', '+1200'), |
|
380
|
|
|
'Etc/GMT-13' => array('+1300', '+1300'), |
|
381
|
|
|
'Etc/GMT-14' => array('+1400', '+1400'), |
|
382
|
|
|
'Etc/GMT-2' => array('+0200', '+0200'), |
|
383
|
|
|
'Etc/GMT-3' => array('+0300', '+0300'), |
|
384
|
|
|
'Etc/GMT-4' => array('+0400', '+0400'), |
|
385
|
|
|
'Etc/GMT-5' => array('+0500', '+0500'), |
|
386
|
|
|
'Etc/GMT-6' => array('+0600', '+0600'), |
|
387
|
|
|
'Etc/GMT-7' => array('+0700', '+0700'), |
|
388
|
|
|
'Etc/GMT-8' => array('+0800', '+0800'), |
|
389
|
|
|
'Etc/GMT-9' => array('+0900', '+0900'), |
|
390
|
|
|
'Europe/Amsterdam' => array('+0100', '+0200'), |
|
391
|
|
|
'Europe/Andorra' => array('+0100', '+0200'), |
|
392
|
|
|
'Europe/Athens' => array('+0200', '+0300'), |
|
393
|
|
|
'Europe/Belfast' => array('+0000', '+0100'), |
|
394
|
|
|
'Europe/Belgrade' => array('+0100', '+0200'), |
|
395
|
|
|
'Europe/Berlin' => array('+0100', '+0200'), |
|
396
|
|
|
'Europe/Bratislava' => array('+0100', '+0200'), |
|
397
|
|
|
'Europe/Brussels' => array('+0100', '+0200'), |
|
398
|
|
|
'Europe/Bucharest' => array('+0200', '+0300'), |
|
399
|
|
|
'Europe/Budapest' => array('+0100', '+0200'), |
|
400
|
|
|
'Europe/Chisinau' => array('+0200', '+0300'), |
|
401
|
|
|
'Europe/Copenhagen' => array('+0100', '+0200'), |
|
402
|
|
|
'Europe/Dublin' => array('+0000', '+0100'), |
|
403
|
|
|
'Europe/Gibraltar' => array('+0100', '+0200'), |
|
404
|
|
|
'Europe/Helsinki' => array('+0200', '+0300'), |
|
405
|
|
|
'Europe/Istanbul' => array('+0200', '+0300'), |
|
406
|
|
|
'Europe/Kaliningrad' => array('+0200', '+0300'), |
|
407
|
|
|
'Europe/Kiev' => array('+0200', '+0300'), |
|
408
|
|
|
'Europe/Lisbon' => array('+0000', '+0100'), |
|
409
|
|
|
'Europe/Ljubljana' => array('+0100', '+0200'), |
|
410
|
|
|
'Europe/London' => array('+0000', '+0100'), |
|
411
|
|
|
'Europe/Luxembourg' => array('+0100', '+0200'), |
|
412
|
|
|
'Europe/Madrid' => array('+0100', '+0200'), |
|
413
|
|
|
'Europe/Malta' => array('+0100', '+0200'), |
|
414
|
|
|
'Europe/Minsk' => array('+0200', '+0300'), |
|
415
|
|
|
'Europe/Monaco' => array('+0100', '+0200'), |
|
416
|
|
|
'Europe/Moscow' => array('+0300', '+0400'), |
|
417
|
|
|
'Europe/Nicosia' => array('+0200', '+0300'), |
|
418
|
|
|
'Europe/Oslo' => array('+0100', '+0200'), |
|
419
|
|
|
'Europe/Paris' => array('+0100', '+0200'), |
|
420
|
|
|
'Europe/Prague' => array('+0100', '+0200'), |
|
421
|
|
|
'Europe/Riga' => array('+0200', '+0300'), |
|
422
|
|
|
'Europe/Rome' => array('+0100', '+0200'), |
|
423
|
|
|
'Europe/Samara' => array('+0400', '+0500'), |
|
424
|
|
|
'Europe/San_Marino' => array('+0100', '+0200'), |
|
425
|
|
|
'Europe/Sarajevo' => array('+0100', '+0200'), |
|
426
|
|
|
'Europe/Simferopol' => array('+0200', '+0300'), |
|
427
|
|
|
'Europe/Skopje' => array('+0100', '+0200'), |
|
428
|
|
|
'Europe/Sofia' => array('+0200', '+0300'), |
|
429
|
|
|
'Europe/Stockholm' => array('+0100', '+0200'), |
|
430
|
|
|
'Europe/Tallinn' => array('+0200', '+0200'), |
|
431
|
|
|
'Europe/Tirane' => array('+0100', '+0200'), |
|
432
|
|
|
'Europe/Tiraspol' => array('+0200', '+0300'), |
|
433
|
|
|
'Europe/Uzhgorod' => array('+0200', '+0300'), |
|
434
|
|
|
'Europe/Vaduz' => array('+0100', '+0200'), |
|
435
|
|
|
'Europe/Vatican' => array('+0100', '+0200'), |
|
436
|
|
|
'Europe/Vienna' => array('+0100', '+0200'), |
|
437
|
|
|
'Europe/Vilnius' => array('+0200', '+0200'), |
|
438
|
|
|
'Europe/Warsaw' => array('+0100', '+0200'), |
|
439
|
|
|
'Europe/Zagreb' => array('+0100', '+0200'), |
|
440
|
|
|
'Europe/Zaporozhye' => array('+0200', '+0300'), |
|
441
|
|
|
'Europe/Zurich' => array('+0100', '+0200'), |
|
442
|
|
|
'GB' => array('+0000', '+0100'), |
|
443
|
|
|
'GB-Eire' => array('+0000', '+0100'), |
|
444
|
|
|
'HST' => array('-1000', '-1000'), |
|
445
|
|
|
'Hongkong' => array('+0800', '+0800'), |
|
446
|
|
|
'Indian/Antananarivo' => array('+0300', '+0300'), |
|
447
|
|
|
'Indian/Chagos' => array('+0500', '+0500'), |
|
448
|
|
|
'Indian/Christmas' => array('+0700', '+0700'), |
|
449
|
|
|
'Indian/Cocos' => array('+061800', '+061800'), |
|
450
|
|
|
'Indian/Comoro' => array('+0300', '+0300'), |
|
451
|
|
|
'Indian/Kerguelen' => array('+0500', '+0500'), |
|
452
|
|
|
'Indian/Mahe' => array('+0400', '+0400'), |
|
453
|
|
|
'Indian/Maldives' => array('+0500', '+0500'), |
|
454
|
|
|
'Indian/Mauritius' => array('+0400', '+0400'), |
|
455
|
|
|
'Indian/Mayotte' => array('+0300', '+0300'), |
|
456
|
|
|
'Indian/Reunion' => array('+0400', '+0400'), |
|
457
|
|
|
'Iran' => array('+031800', '+041800'), |
|
458
|
|
|
'Israel' => array('+0200', '+0300'), |
|
459
|
|
|
'Jamaica' => array('-0500', '-0500'), |
|
460
|
|
|
'Japan' => array('+0900', '+0900'), |
|
461
|
|
|
'Kwajalein' => array('+1200', '+1200'), |
|
462
|
|
|
'Libya' => array('+0200', '+0200'), |
|
463
|
|
|
'MET' => array('+0100', '+0200'), |
|
464
|
|
|
'MST' => array('-0700', '-0700'), |
|
465
|
|
|
'MST7MDT' => array('-0700', '-0600'), |
|
466
|
|
|
'Mexico/BajaNorte' => array('-0800', '-0700'), |
|
467
|
|
|
'Mexico/BajaSur' => array('-0700', '-0600'), |
|
468
|
|
|
'Mexico/General' => array('-0600', '-0500'), |
|
469
|
|
|
'Mideast/Riyadh87' => array('+03424', '+03424'), |
|
470
|
|
|
'Mideast/Riyadh88' => array('+03424', '+03424'), |
|
471
|
|
|
'Mideast/Riyadh89' => array('+03424', '+03424'), |
|
472
|
|
|
'NZ' => array('+1300', '+1200'), |
|
473
|
|
|
'NZ-CHAT' => array('+132700', '+122700'), |
|
474
|
|
|
'Navajo' => array('-0700', '-0600'), |
|
475
|
|
|
'PRC' => array('+0800', '+0800'), |
|
476
|
|
|
'PST8PDT' => array('-0800', '-0700'), |
|
477
|
|
|
'Pacific/Apia' => array('-1100', '-1100'), |
|
478
|
|
|
'Pacific/Auckland' => array('+1300', '+1200'), |
|
479
|
|
|
'Pacific/Chatham' => array('+132700', '+122700'), |
|
480
|
|
|
'Pacific/Easter' => array('-0500', '-0600'), |
|
481
|
|
|
'Pacific/Efate' => array('+1100', '+1100'), |
|
482
|
|
|
'Pacific/Enderbury' => array('+1300', '+1300'), |
|
483
|
|
|
'Pacific/Fakaofo' => array('-1000', '-1000'), |
|
484
|
|
|
'Pacific/Fiji' => array('+1200', '+1200'), |
|
485
|
|
|
'Pacific/Funafuti' => array('+1200', '+1200'), |
|
486
|
|
|
'Pacific/Galapagos' => array('-0600', '-0600'), |
|
487
|
|
|
'Pacific/Gambier' => array('-0900', '-0900'), |
|
488
|
|
|
'Pacific/Guadalcanal' => array('+1100', '+1100'), |
|
489
|
|
|
'Pacific/Guam' => array('+1000', '+1000'), |
|
490
|
|
|
'Pacific/Honolulu' => array('-1000', '-1000'), |
|
491
|
|
|
'Pacific/Johnston' => array('-1000', '-1000'), |
|
492
|
|
|
'Pacific/Kiritimati' => array('+1400', '+1400'), |
|
493
|
|
|
'Pacific/Kosrae' => array('+1100', '+1100'), |
|
494
|
|
|
'Pacific/Kwajalein' => array('+1200', '+1200'), |
|
495
|
|
|
'Pacific/Majuro' => array('+1200', '+1200'), |
|
496
|
|
|
'Pacific/Marquesas' => array('-091800', '-091800'), |
|
497
|
|
|
'Pacific/Midway' => array('-1100', '-1100'), |
|
498
|
|
|
'Pacific/Nauru' => array('+1200', '+1200'), |
|
499
|
|
|
'Pacific/Niue' => array('-1100', '-1100'), |
|
500
|
|
|
'Pacific/Norfolk' => array('+111800', '+111800'), |
|
501
|
|
|
'Pacific/Noumea' => array('+1100', '+1100'), |
|
502
|
|
|
'Pacific/Pago_Pago' => array('-1100', '-1100'), |
|
503
|
|
|
'Pacific/Palau' => array('+0900', '+0900'), |
|
504
|
|
|
'Pacific/Pitcairn' => array('-0800', '-0800'), |
|
505
|
|
|
'Pacific/Ponape' => array('+1100', '+1100'), |
|
506
|
|
|
'Pacific/Port_Moresby' => array('+1000', '+1000'), |
|
507
|
|
|
'Pacific/Rarotonga' => array('-1000', '-1000'), |
|
508
|
|
|
'Pacific/Saipan' => array('+1000', '+1000'), |
|
509
|
|
|
'Pacific/Samoa' => array('-1100', '-1100'), |
|
510
|
|
|
'Pacific/Tahiti' => array('-1000', '-1000'), |
|
511
|
|
|
'Pacific/Tarawa' => array('+1200', '+1200'), |
|
512
|
|
|
'Pacific/Tongatapu' => array('+1300', '+1300'), |
|
513
|
|
|
'Pacific/Truk' => array('+1000', '+1000'), |
|
514
|
|
|
'Pacific/Wake' => array('+1200', '+1200'), |
|
515
|
|
|
'Pacific/Wallis' => array('+1200', '+1200'), |
|
516
|
|
|
'Pacific/Yap' => array('+1000', '+1000'), |
|
517
|
|
|
'Poland' => array('+0100', '+0200'), |
|
518
|
|
|
'Portugal' => array('+0000', '+0100'), |
|
519
|
|
|
'ROC' => array('+0800', '+0800'), |
|
520
|
|
|
'ROK' => array('+0900', '+0900'), |
|
521
|
|
|
'Singapore' => array('+0800', '+0800'), |
|
522
|
|
|
'SystemV/AST4' => array('-0400', '-0400'), |
|
523
|
|
|
'SystemV/AST4ADT' => array('-0400', '-0300'), |
|
524
|
|
|
'SystemV/CST6' => array('-0600', '-0600'), |
|
525
|
|
|
'SystemV/CST6CDT' => array('-0600', '-0500'), |
|
526
|
|
|
'SystemV/EST5' => array('-0500', '-0500'), |
|
527
|
|
|
'SystemV/EST5EDT' => array('-0500', '-0400'), |
|
528
|
|
|
'SystemV/HST10' => array('-1000', '-1000'), |
|
529
|
|
|
'SystemV/MST7' => array('-0700', '-0700'), |
|
530
|
|
|
'SystemV/MST7MDT' => array('-0700', '-0600'), |
|
531
|
|
|
'SystemV/PST8' => array('-0800', '-0800'), |
|
532
|
|
|
'SystemV/PST8PDT' => array('-0800', '-0700'), |
|
533
|
|
|
'SystemV/YST9' => array('-0900', '-0900'), |
|
534
|
|
|
'SystemV/YST9YDT' => array('-0900', '-0800'), |
|
535
|
|
|
'Turkey' => array('+0200', '+0300'), |
|
536
|
|
|
'US/Alaska' => array('-0900', '-0800'), |
|
537
|
|
|
'US/Aleutian' => array('-1000', '-0900'), |
|
538
|
|
|
'US/Arizona' => array('-0700', '-0700'), |
|
539
|
|
|
'US/Central' => array('-0600', '-0500'), |
|
540
|
|
|
'US/East-Indiana' => array('-0500', '-0500'), |
|
541
|
|
|
'US/Eastern' => array('-0500', '-0400'), |
|
542
|
|
|
'US/Hawaii' => array('-1000', '-1000'), |
|
543
|
|
|
'US/Indiana-Starke' => array('-0500', '-0500'), |
|
544
|
|
|
'US/Michigan' => array('-0500', '-0400'), |
|
545
|
|
|
'US/Mountain' => array('-0700', '-0600'), |
|
546
|
|
|
'US/Pacific' => array('-0800', '-0700'), |
|
547
|
|
|
'US/Samoa' => array('-1100', '-1100'), |
|
548
|
|
|
'W-SU' => array('+0300', '+0400'), |
|
549
|
|
|
'WET' => array('+0000', '+0100') |
|
550
|
|
|
); |
|
551
|
|
|
|
|
552
|
|
|
// From date_functions.php |
|
553
|
|
|
|
|
554
|
|
|
// takes iCalendar 2 day format and makes it into 3 characters |
|
555
|
|
|
// if $txt is true, it returns the 3 letters, otherwise it returns the |
|
556
|
|
|
// integer of that day; 0=Sun, 1=Mon, etc. |
|
557
|
|
|
/** |
|
558
|
|
|
* @param $day |
|
559
|
|
|
* @param bool $txt |
|
560
|
|
|
* @return string |
|
|
|
|
|
|
561
|
|
|
*/ |
|
562
|
|
|
public function two2threeCharDays($day, $txt = true) |
|
563
|
|
|
{ |
|
564
|
|
|
switch ($day) { |
|
565
|
|
|
case 'SU': |
|
566
|
|
|
return ($txt ? 'sun' : '0'); |
|
567
|
|
|
case 'MO': |
|
568
|
|
|
return ($txt ? 'mon' : '1'); |
|
569
|
|
|
case 'TU': |
|
570
|
|
|
return ($txt ? 'tue' : '2'); |
|
571
|
|
|
case 'WE': |
|
572
|
|
|
return ($txt ? 'wed' : '3'); |
|
573
|
|
|
case 'TH': |
|
574
|
|
|
return ($txt ? 'thu' : '4'); |
|
575
|
|
|
case 'FR': |
|
576
|
|
|
return ($txt ? 'fri' : '5'); |
|
577
|
|
|
case 'SA': |
|
578
|
|
|
return ($txt ? 'sat' : '6'); |
|
579
|
|
|
} |
|
580
|
|
|
} |
|
581
|
|
|
|
|
582
|
|
|
// dateOfWeek() takes a date in Ymd and a day of week in 3 letters or more |
|
583
|
|
|
// and returns the date of that day. (ie: "sun" or "sunday" would be acceptable values of $day but not "su") |
|
584
|
|
|
/** |
|
585
|
|
|
* @param $Ymd |
|
586
|
|
|
* @param $day |
|
587
|
|
|
* @return bool|string |
|
588
|
|
|
*/ |
|
589
|
|
|
public function dateOfWeek($Ymd, $day) |
|
590
|
|
|
{ |
|
591
|
|
|
if (!isset($this->week_start_day)) { |
|
592
|
|
|
$this->week_start_day = 'Sunday'; |
|
593
|
|
|
} |
|
594
|
|
|
$timestamp = strtotime($Ymd); |
|
595
|
|
|
$num = date('w', strtotime($this->week_start_day)); |
|
596
|
|
|
$start_day_time = strtotime((date('w', $timestamp) == $num ? "$this->week_start_day" : "last $this->week_start_day"), $timestamp); |
|
597
|
|
|
$ret_unixtime = strtotime($day, $start_day_time); |
|
598
|
|
|
$ret_unixtime = strtotime('+12 hours', $ret_unixtime); |
|
599
|
|
|
$ret = date('Ymd', $ret_unixtime); |
|
600
|
|
|
|
|
601
|
|
|
return $ret; |
|
602
|
|
|
} |
|
603
|
|
|
|
|
604
|
|
|
// function to compare to dates in Ymd and return the number of weeks |
|
605
|
|
|
// that differ between them. requires dateOfWeek() |
|
606
|
|
|
/** |
|
607
|
|
|
* @param $now |
|
608
|
|
|
* @param $then |
|
609
|
|
|
* @return float |
|
610
|
|
|
*/ |
|
611
|
|
|
public function weekCompare($now, $then) |
|
612
|
|
|
{ |
|
613
|
|
|
$sun_now = $this->dateOfWeek($now, $this->week_start_day); |
|
614
|
|
|
$sun_then = $this->dateOfWeek($then, $this->week_start_day); |
|
615
|
|
|
$seconds_now = strtotime($sun_now); |
|
616
|
|
|
$seconds_then = strtotime($sun_then); |
|
617
|
|
|
$diff_seconds = $seconds_now - $seconds_then; |
|
618
|
|
|
$diff_minutes = $diff_seconds / 60; |
|
619
|
|
|
$diff_hours = $diff_minutes / 60; |
|
620
|
|
|
$diff_days = round($diff_hours / 24); |
|
621
|
|
|
$diff_weeks = $diff_days / 7; |
|
622
|
|
|
|
|
623
|
|
|
return $diff_weeks; |
|
624
|
|
|
} |
|
625
|
|
|
|
|
626
|
|
|
// function to compare to dates in Ymd and return the number of days |
|
627
|
|
|
// that differ between them. |
|
628
|
|
|
/** |
|
629
|
|
|
* @param $now |
|
630
|
|
|
* @param $then |
|
631
|
|
|
* @return float |
|
632
|
|
|
*/ |
|
633
|
|
|
public function dayCompare($now, $then) |
|
634
|
|
|
{ |
|
635
|
|
|
$seconds_now = strtotime($now); |
|
636
|
|
|
$seconds_then = strtotime($then); |
|
637
|
|
|
$diff_seconds = $seconds_now - $seconds_then; |
|
638
|
|
|
$diff_minutes = $diff_seconds / 60; |
|
639
|
|
|
$diff_hours = $diff_minutes / 60; |
|
640
|
|
|
$diff_days = round($diff_hours / 24); |
|
641
|
|
|
|
|
642
|
|
|
return $diff_days; |
|
643
|
|
|
} |
|
644
|
|
|
|
|
645
|
|
|
// function to compare to dates in Ymd and return the number of months |
|
646
|
|
|
// that differ between them. |
|
647
|
|
|
/** |
|
648
|
|
|
* @param $now |
|
649
|
|
|
* @param $then |
|
650
|
|
|
* @return int |
|
|
|
|
|
|
651
|
|
|
*/ |
|
652
|
|
|
public function monthCompare($now, $then) |
|
653
|
|
|
{ |
|
654
|
|
|
preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $now, $date_now); |
|
655
|
|
|
preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $then, $date_then); |
|
656
|
|
|
$diff_years = $date_now[1] - $date_then[1]; |
|
657
|
|
|
$diff_months = $date_now[2] - $date_then[2]; |
|
658
|
|
|
if ($date_now[2] < $date_then[2]) { |
|
659
|
|
|
--$diff_years; |
|
660
|
|
|
$diff_months = ($diff_months + 12) % 12; |
|
661
|
|
|
} |
|
662
|
|
|
$diff_months = ($diff_years * 12) + $diff_months; |
|
663
|
|
|
|
|
664
|
|
|
return $diff_months; |
|
665
|
|
|
} |
|
666
|
|
|
|
|
667
|
|
|
/** |
|
668
|
|
|
* @param $now |
|
669
|
|
|
* @param $then |
|
670
|
|
|
* @return mixed |
|
671
|
|
|
*/ |
|
672
|
|
|
public function yearCompare($now, $then) |
|
673
|
|
|
{ |
|
674
|
|
|
preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $now, $date_now); |
|
675
|
|
|
preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $then, $date_then); |
|
676
|
|
|
$diff_years = $date_now[1] - $date_then[1]; |
|
677
|
|
|
|
|
678
|
|
|
return $diff_years; |
|
679
|
|
|
} |
|
680
|
|
|
|
|
681
|
|
|
// localizeDate() - similar to strftime but uses our preset arrays of localized |
|
682
|
|
|
// months and week days and only supports %A, %a, %B, %b, %e, and %Y |
|
683
|
|
|
// more can be added as needed but trying to keep it small while we can |
|
684
|
|
|
/*function localizeDate($format, $timestamp) { |
|
685
|
|
|
global $daysofweek_lang, $daysofweekshort_lang, $daysofweekreallyshort_lang, $monthsofyear_lang, $monthsofyear_lang, $monthsofyearshort_lang; |
|
686
|
|
|
$year = date("Y", $timestamp); |
|
687
|
|
|
$month = date("n", $timestamp)-1; |
|
688
|
|
|
$day = date("j", $timestamp); |
|
689
|
|
|
$dayofweek = date("w", $timestamp); |
|
690
|
|
|
|
|
691
|
|
|
$date = str_replace('%Y', $year, $format); |
|
692
|
|
|
$date = str_replace('%e', $day, $date); |
|
693
|
|
|
$date = str_replace('%B', $monthsofyear_lang[$month], $date); |
|
694
|
|
|
$date = str_replace('%b', $monthsofyearshort_lang[$month], $date); |
|
695
|
|
|
$date = str_replace('%A', $daysofweek_lang[$dayofweek], $date); |
|
696
|
|
|
$date = str_replace('%a', $daysofweekshort_lang[$dayofweek], $date); |
|
697
|
|
|
|
|
698
|
|
|
return $date; |
|
699
|
|
|
|
|
700
|
|
|
}*/ |
|
701
|
|
|
// calcOffset takes an offset (ie, -0500) and returns it in the number of seconds |
|
702
|
|
|
/** |
|
703
|
|
|
* @param $offset_str |
|
704
|
|
|
* @return int |
|
705
|
|
|
*/ |
|
706
|
|
|
public function calcOffset($offset_str) |
|
707
|
|
|
{ |
|
708
|
|
|
$sign = substr($offset_str, 0, 1); |
|
709
|
|
|
$hours = substr($offset_str, 1, 2); |
|
710
|
|
|
$mins = substr($offset_str, 3, 2); |
|
711
|
|
|
$secs = ((int)$hours * 3600) + ((int)$mins * 60); |
|
712
|
|
|
if ($sign == '-') { |
|
713
|
|
|
$secs = 0 - $secs; |
|
714
|
|
|
} |
|
715
|
|
|
|
|
716
|
|
|
return $secs; |
|
717
|
|
|
} |
|
718
|
|
|
|
|
719
|
|
|
// calcTime calculates the unixtime of a new offset by comparing it to the current offset |
|
720
|
|
|
// $have is the current offset (ie, '-0500') |
|
721
|
|
|
// $want is the wanted offset (ie, '-0700') |
|
722
|
|
|
// $time is the unixtime relative to $have |
|
723
|
|
|
/** |
|
724
|
|
|
* @param $have |
|
725
|
|
|
* @param $want |
|
726
|
|
|
* @param $time |
|
727
|
|
|
* @return int |
|
728
|
|
|
*/ |
|
729
|
|
|
public function calcTime($have, $want, $time) |
|
730
|
|
|
{ |
|
731
|
|
|
if ($have === 'none' || $want === 'none') { |
|
732
|
|
|
return $time; |
|
733
|
|
|
} |
|
734
|
|
|
$have_secs = $this->calcOffset($have); |
|
735
|
|
|
$want_secs = $this->calcOffset($want); |
|
736
|
|
|
$diff = $want_secs - $have_secs; |
|
737
|
|
|
$time += $diff; |
|
738
|
|
|
|
|
739
|
|
|
return $time; |
|
740
|
|
|
} |
|
741
|
|
|
|
|
742
|
|
|
/** |
|
743
|
|
|
* @param $time |
|
744
|
|
|
* @return string |
|
745
|
|
|
*/ |
|
746
|
|
|
public function chooseOffset($time) |
|
|
|
|
|
|
747
|
|
|
{ |
|
748
|
|
|
return $this->timezone; |
|
749
|
|
|
/* ¥µ¥Þ¡¼¥¿¥¤¥à¤Î½èÍý¤ò¤ä¤Ã¤Æ¤¤¤ë¤Î¤À¤í¤¦¤±¤É¡¢¤È¤ê¤¢¤¨¤º¥³¥á¥ó¥È¥¢¥¦¥È |
|
750
|
|
|
if (!isset($this->timezone)) $this->timezone = ''; |
|
751
|
|
|
switch ($this->timezone) { |
|
752
|
|
|
case '': |
|
753
|
|
|
$offset = 'none'; |
|
754
|
|
|
break; |
|
755
|
|
|
case 'Same as Server': |
|
756
|
|
|
$offset = date('O', $time); |
|
757
|
|
|
break; |
|
758
|
|
|
default: |
|
759
|
|
|
if (is_array($this->tz_array) && array_key_exists($this->timezone, $this->tz_array)) { |
|
760
|
|
|
$dlst = date('I', $time); |
|
761
|
|
|
$offset = $this->tz_array[$this->timezone][$dlst]; |
|
762
|
|
|
} else { |
|
763
|
|
|
$offset = '+0000'; |
|
764
|
|
|
} |
|
765
|
|
|
} |
|
766
|
|
|
|
|
767
|
|
|
return $offset; |
|
768
|
|
|
*/ |
|
769
|
|
|
} |
|
770
|
|
|
|
|
771
|
|
|
// ¥³¥ó¥¹¥È¥é¥¯¥¿ |
|
772
|
|
|
|
|
773
|
|
|
/** |
|
774
|
|
|
* iCal_parser constructor. |
|
775
|
|
|
*/ |
|
776
|
|
|
public function __construct() |
|
777
|
|
|
{ |
|
778
|
|
|
} |
|
779
|
|
|
|
|
780
|
|
|
// ¥Õ¥¡¥¤¥ë¤ò¥Ñ¡¼¥¹¤·¤Æ¡¢ÆâÉôÊÑ¿ô¤Ë¼è¤ê¹þ¤à |
|
781
|
|
|
|
|
782
|
|
|
/** |
|
783
|
|
|
* @param $filename |
|
784
|
|
|
* @param $calendar_name |
|
785
|
|
|
* @return string |
|
786
|
|
|
*/ |
|
787
|
|
|
public function parse($filename, $calendar_name) |
|
788
|
|
|
{ |
|
789
|
|
|
$ifile = @fopen($filename, 'r'); |
|
790
|
|
|
if ($ifile === false) { |
|
791
|
|
|
return "-1: File cannot open. filename: $filename"; |
|
792
|
|
|
} |
|
793
|
|
|
$nextline = fgets($ifile, 1024); |
|
794
|
|
|
if (trim($nextline) !== 'BEGIN:VCALENDAR') { |
|
795
|
|
|
return "-2: This file is not iCalendar(RFC2445). filename: $filename"; |
|
796
|
|
|
} |
|
797
|
|
|
|
|
798
|
|
|
// Set a value so we can check to make sure $master_array contains valid data |
|
799
|
|
|
// $master_array['-1'] = 'valid cal file'; |
|
800
|
|
|
|
|
801
|
|
|
// Set default calendar name - can be overridden by X-WR-CALNAME |
|
802
|
|
|
// $calendar_name = $filename; |
|
803
|
|
|
// $master_array['calendar_name'] = $filename; |
|
804
|
|
|
|
|
805
|
|
|
// auxiliary array for determining overlaps of events |
|
806
|
|
|
// $overlap_array = array (); |
|
807
|
|
|
|
|
808
|
|
|
// using $uid to set specific points in array, if $uid is not in the |
|
809
|
|
|
// .ics file, we need to have some unique place in the array |
|
810
|
|
|
$uid_counter = 0; |
|
811
|
|
|
|
|
812
|
|
|
// read file in line by line |
|
813
|
|
|
// XXX end line is skipped because of the 1-line readahead |
|
814
|
|
|
while (!feof($ifile)) { |
|
815
|
|
|
$line = $nextline; |
|
816
|
|
|
$nextline = fgets($ifile, 1024); |
|
817
|
|
|
$nextline = preg_replace("/[\r\n]/", '', $nextline); |
|
818
|
|
|
while (substr($nextline, 0, 1) === ' ') { |
|
819
|
|
|
$line .= substr($nextline, 1); |
|
820
|
|
|
$nextline = fgets($ifile, 1024); |
|
821
|
|
|
$nextline = preg_replace("/[\r\n]/", '', $nextline); |
|
822
|
|
|
} |
|
823
|
|
|
$line = trim($line); |
|
824
|
|
|
if ($line === 'BEGIN:VEVENT') { |
|
825
|
|
|
// each of these vars were being set to an empty string |
|
826
|
|
|
unset($start_time, $end_time, $start_date, $end_date, $summary, $allday_start, $allday_end, $start, $end, $the_duration, $beginning, $rrule, $start_of_vevent, $description, $status, $class, $categories, $contact, $location, $dtstamp, $sequence, $tz_dtstart, $tz_dtend, $event_tz, $valarm_description, $start_unixtime, $end_unixtime, $recurrence_id, $uid, $uid_valid); |
|
827
|
|
|
|
|
828
|
|
|
$except_dates = array(); |
|
|
|
|
|
|
829
|
|
|
$except_times = array(); |
|
|
|
|
|
|
830
|
|
|
$first_duration = true; |
|
|
|
|
|
|
831
|
|
|
$count = 1000000; |
|
|
|
|
|
|
832
|
|
|
$valarm_set = false; |
|
|
|
|
|
|
833
|
|
|
} elseif ($line === 'END:VEVENT') { |
|
834
|
|
|
// make sure we have some value for $uid |
|
835
|
|
|
if (!isset($uid)) { |
|
836
|
|
|
$uid = $uid_counter; |
|
837
|
|
|
++$uid_counter; |
|
838
|
|
|
$uid_valid = false; |
|
839
|
|
|
} else { |
|
840
|
|
|
$uid_valid = true; |
|
841
|
|
|
} |
|
842
|
|
|
|
|
843
|
|
|
if (empty($summary)) { |
|
844
|
|
|
$summary = ''; |
|
845
|
|
|
} |
|
846
|
|
|
if (empty($description)) { |
|
847
|
|
|
$description = ''; |
|
848
|
|
|
} |
|
849
|
|
|
if (empty($location)) { |
|
850
|
|
|
$location = ''; |
|
851
|
|
|
} |
|
852
|
|
|
if (empty($contact)) { |
|
853
|
|
|
$contact = ''; |
|
854
|
|
|
} |
|
855
|
|
|
if (empty($sequence)) { |
|
856
|
|
|
$sequence = 0; |
|
857
|
|
|
} |
|
858
|
|
|
if (empty($rrule)) { |
|
859
|
|
|
$rrule = ''; |
|
860
|
|
|
} |
|
861
|
|
|
|
|
862
|
|
|
// Handling of the all day events¡ÊÁ´Æü¥¤¥Ù¥ó¥È¡Ë |
|
863
|
|
|
if (isset($allday_start) && $allday_start !== '') { |
|
864
|
|
|
$start_unixtime = strtotime($allday_start); |
|
865
|
|
|
if (isset($allday_end) && $allday_end !== '') { |
|
866
|
|
|
$end_unixtime = strtotime($allday_end); |
|
867
|
|
|
if ($start_unixtime == $end_unixtime) { |
|
868
|
|
|
$end_unixtime = $start_unixtime + 86400; |
|
869
|
|
|
} |
|
870
|
|
|
} else { |
|
871
|
|
|
// allday_end ¤Î»ØÄ꤬¤Ê¤±¤ì¤Ð°ìÆü¤Î¤ß¤È¸«¤Ê¤¹ |
|
872
|
|
|
$end_unixtime = $start_unixtime + 86400; |
|
873
|
|
|
} |
|
874
|
|
|
} |
|
875
|
|
|
|
|
876
|
|
|
$this->events[$uid] = compact('start_unixtime', 'end_unixtime', 'summary', 'description', 'status', 'class', 'categories', 'contact', 'location', 'dtstamp', 'sequence', 'allday_start', |
|
877
|
|
|
'allday_end', 'tz_dtstart', 'tz_dtend', 'event_tz', 'rrule', 'uid_valid'); // GIJ added 03/05/27 |
|
878
|
|
|
|
|
879
|
|
|
// Begin VTODO Support |
|
880
|
|
|
/* } elseif ($line == 'END:VTODO') { |
|
881
|
|
|
if ((!$vtodo_priority) && ($status == 'COMPLETED')) { |
|
882
|
|
|
$vtodo_sort = 11; |
|
883
|
|
|
} elseif (!$vtodo_priority) { |
|
884
|
|
|
$vtodo_sort = 10; |
|
885
|
|
|
} else { |
|
886
|
|
|
$vtodo_sort = $vtodo_priority; |
|
887
|
|
|
} |
|
888
|
|
|
$master_array['-2']["$vtodo_sort"]["$uid"] = array ('start_date' => $start_date, 'start_time' => $start_time, 'vtodo_text' => $summary, 'due_date'=> $due_date, 'due_time'=> $due_time, 'completed_date' => $completed_date, 'completed_time' => $completed_time, 'priority' => $vtodo_priority, 'status' => $status, 'class' => $class, 'categories' => $vtodo_categories); |
|
889
|
|
|
unset ($due_date, $due_time, $completed_date, $completed_time, $vtodo_priority, $status, $class, $vtodo_categories, $summary); |
|
890
|
|
|
$vtodo_set = FALSE; |
|
891
|
|
|
} elseif ($line == 'BEGIN:VTODO') { |
|
892
|
|
|
$vtodo_set = TRUE; |
|
893
|
|
|
} elseif ($line == 'BEGIN:VALARM') { |
|
894
|
|
|
$valarm_set = TRUE; |
|
895
|
|
|
} elseif ($line == 'END:VALARM') { |
|
896
|
|
|
$valarm_set = FALSE; |
|
897
|
|
|
*/ |
|
898
|
|
|
} else { |
|
899
|
|
|
unset($field, $data, $prop_pos, $property); |
|
900
|
|
|
preg_match('(/[^:]+):(.*)/', $line, $line); |
|
901
|
|
|
$field = $line[1]; |
|
902
|
|
|
$data = $line[2]; |
|
903
|
|
|
|
|
904
|
|
|
$property = $field; |
|
905
|
|
|
$prop_pos = strpos($property, ';'); |
|
906
|
|
|
if ($prop_pos !== false) { |
|
907
|
|
|
$property = substr($property, 0, $prop_pos); |
|
908
|
|
|
} |
|
909
|
|
|
$property = strtoupper($property); |
|
910
|
|
|
|
|
911
|
|
|
switch ($property) { |
|
912
|
|
|
|
|
913
|
|
|
// Start VTODO Parsing |
|
914
|
|
|
// |
|
915
|
|
|
/* case 'DUE': |
|
916
|
|
|
$zulu_time = false; |
|
917
|
|
|
if (substr($data,-1) == 'Z') $zulu_time = true; |
|
918
|
|
|
$data = preg_replace('/T/', '', $data); |
|
919
|
|
|
$data = preg_replace('/Z/', '', $data); |
|
920
|
|
|
if (preg_match("/^DUE;VALUE=DATE/i", $field)) { |
|
921
|
|
|
$allday_start = $data; |
|
922
|
|
|
$start_date = $allday_start; |
|
923
|
|
|
} else { |
|
924
|
|
|
if (preg_match("/^DUE;TZID=/i", $field)) { |
|
925
|
|
|
$tz_tmp = explode('=', $field); |
|
926
|
|
|
$tz_due = $tz_tmp[1]; |
|
927
|
|
|
unset($tz_tmp); |
|
928
|
|
|
} elseif ($zulu_time) { |
|
929
|
|
|
$tz_due = 'GMT'; |
|
930
|
|
|
} |
|
931
|
|
|
|
|
932
|
|
|
preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs); |
|
933
|
|
|
$start_date = $regs[1] . $regs[2] . $regs[3]; |
|
934
|
|
|
$start_time = $regs[4] . $regs[5]; |
|
935
|
|
|
$start_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]); |
|
936
|
|
|
|
|
937
|
|
|
$dlst = date('I', $start_unixtime); |
|
938
|
|
|
$server_offset_tmp = $this->chooseOffset($start_unixtime); |
|
939
|
|
|
if (isset($tz_due)) { |
|
940
|
|
|
if (array_key_exists($tz_due, $this->tz_array)) { |
|
941
|
|
|
$offset_tmp = $this->tz_array[$tz_due][$dlst]; |
|
942
|
|
|
} else { |
|
943
|
|
|
$offset_tmp = '+0000'; |
|
944
|
|
|
} |
|
945
|
|
|
} elseif (isset($calendar_tz)) { |
|
946
|
|
|
if (array_key_exists($calendar_tz, $this->tz_array)) { |
|
947
|
|
|
$offset_tmp = $this->tz_array[$calendar_tz][$dlst]; |
|
948
|
|
|
} else { |
|
949
|
|
|
$offset_tmp = '+0000'; |
|
950
|
|
|
} |
|
951
|
|
|
} else { |
|
952
|
|
|
$offset_tmp = $server_offset_tmp; |
|
953
|
|
|
} |
|
954
|
|
|
$start_unixtime = $this->calcTime($offset_tmp, $server_offset_tmp, $start_unixtime); |
|
955
|
|
|
$due_date = date('Ymd', $start_unixtime); |
|
956
|
|
|
$due_time = date('Hi', $start_unixtime); |
|
957
|
|
|
unset($server_offset_tmp); |
|
958
|
|
|
} |
|
959
|
|
|
break; |
|
960
|
|
|
*/ |
|
961
|
|
|
/* case 'COMPLETED': |
|
962
|
|
|
$zulu_time = false; |
|
963
|
|
|
if (substr($data,-1) == 'Z') $zulu_time = true; |
|
964
|
|
|
$data = ereg_replace('T', '', $data); |
|
965
|
|
|
$data = ereg_replace('Z', '', $data); |
|
966
|
|
|
if (preg_match("/^COMPLETED;VALUE=DATE/i", $field)) { |
|
967
|
|
|
$allday_start = $data; |
|
968
|
|
|
$start_date = $allday_start; |
|
969
|
|
|
} else { |
|
970
|
|
|
if (preg_match("/^COMPLETED;TZID=/i", $field)) { |
|
971
|
|
|
$tz_tmp = explode('=', $field); |
|
972
|
|
|
$tz_completed = $tz_tmp[1]; |
|
973
|
|
|
unset($tz_tmp); |
|
974
|
|
|
} elseif ($zulu_time) { |
|
975
|
|
|
$tz_completed = 'GMT'; |
|
976
|
|
|
} |
|
977
|
|
|
|
|
978
|
|
|
ereg ('([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})', $data, $regs); |
|
979
|
|
|
$start_date = $regs[1] . $regs[2] . $regs[3]; |
|
980
|
|
|
$start_time = $regs[4] . $regs[5]; |
|
981
|
|
|
$start_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]); |
|
982
|
|
|
|
|
983
|
|
|
$dlst = date('I', $start_unixtime); |
|
984
|
|
|
$server_offset_tmp = $this->chooseOffset($start_unixtime); |
|
985
|
|
|
if (isset($tz_completed)) { |
|
986
|
|
|
if (array_key_exists($tz_completed, $this->tz_array)) { |
|
987
|
|
|
$offset_tmp = $this->tz_array[$tz_completed][$dlst]; |
|
988
|
|
|
} else { |
|
989
|
|
|
$offset_tmp = '+0000'; |
|
990
|
|
|
} |
|
991
|
|
|
} elseif (isset($calendar_tz)) { |
|
992
|
|
|
if (array_key_exists($calendar_tz, $this->tz_array)) { |
|
993
|
|
|
$offset_tmp = $this->tz_array[$calendar_tz][$dlst]; |
|
994
|
|
|
} else { |
|
995
|
|
|
$offset_tmp = '+0000'; |
|
996
|
|
|
} |
|
997
|
|
|
} else { |
|
998
|
|
|
$offset_tmp = $server_offset_tmp; |
|
999
|
|
|
} |
|
1000
|
|
|
$start_unixtime = $this->calcTime($offset_tmp, $server_offset_tmp, $start_unixtime); |
|
1001
|
|
|
$completed_date = date('Ymd', $start_unixtime); |
|
1002
|
|
|
$completed_time = date('Hi', $start_unixtime); |
|
1003
|
|
|
unset($server_offset_tmp); |
|
1004
|
|
|
} |
|
1005
|
|
|
break; |
|
1006
|
|
|
|
|
1007
|
|
|
case 'PRIORITY': |
|
1008
|
|
|
$vtodo_priority = "$data"; |
|
1009
|
|
|
break; |
|
1010
|
|
|
*/ |
|
1011
|
|
|
case 'STATUS': |
|
1012
|
|
|
// VEVENT: TENTATIVE, CONFIRMED, CANCELLED |
|
1013
|
|
|
// VTODO: NEEDS-ACTION, COMPLETED, IN-PROCESS, CANCELLED |
|
1014
|
|
|
$status = "$data"; |
|
1015
|
|
|
break; |
|
1016
|
|
|
|
|
1017
|
|
|
case 'CLASS': |
|
1018
|
|
|
// VEVENT, VTODO: PUBLIC, PRIVATE, CONFIDENTIAL |
|
1019
|
|
|
$class = "$data"; |
|
1020
|
|
|
break; |
|
1021
|
|
|
|
|
1022
|
|
|
case 'CATEGORIES': |
|
1023
|
|
|
$categories = mb_convert_encoding($data, mb_internal_encoding(), 'UTF-8'); |
|
1024
|
|
|
break; |
|
1025
|
|
|
// |
|
1026
|
|
|
// End VTODO Parsing |
|
1027
|
|
|
|
|
1028
|
|
|
case 'DTSTART': |
|
1029
|
|
|
$zulu_time = false; |
|
1030
|
|
|
if (substr($data, -1) === 'Z') { |
|
1031
|
|
|
$zulu_time = true; |
|
1032
|
|
|
} |
|
1033
|
|
|
$data = preg_replace('/T/', '', $data); |
|
1034
|
|
|
$data = preg_replace('/Z/', '', $data); |
|
1035
|
|
|
$field = preg_replace('/;VALUE=DATE-TIME/', '', $field); |
|
1036
|
|
|
if (preg_match('/^DTSTART;VALUE=DATE/i', $field)) { |
|
1037
|
|
|
$allday_start = $data; |
|
1038
|
|
|
$start_date = $allday_start; |
|
1039
|
|
|
} else { |
|
1040
|
|
View Code Duplication |
if (preg_match('/^DTSTART;TZID=/i', $field)) { |
|
|
|
|
|
|
1041
|
|
|
$tz_tmp = explode('=', $field); |
|
1042
|
|
|
$tz_dtstart = $tz_tmp[1]; |
|
1043
|
|
|
unset($tz_tmp); |
|
1044
|
|
|
} elseif ($zulu_time) { |
|
1045
|
|
|
$tz_dtstart = 'GMT'; |
|
1046
|
|
|
} |
|
1047
|
|
|
|
|
1048
|
|
|
preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs); |
|
1049
|
|
|
$start_date = $regs[1] . $regs[2] . $regs[3]; |
|
|
|
|
|
|
1050
|
|
|
$start_time = $regs[4] . $regs[5]; |
|
|
|
|
|
|
1051
|
|
|
$start_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]); |
|
1052
|
|
|
|
|
1053
|
|
|
$dlst = date('I', $start_unixtime); |
|
1054
|
|
|
$server_offset_tmp = $this->chooseOffset($start_unixtime); |
|
1055
|
|
|
if (isset($tz_dtstart)) { |
|
1056
|
|
|
if (array_key_exists($tz_dtstart, $this->tz_array)) { |
|
1057
|
|
|
$offset_tmp = $this->tz_array[$tz_dtstart][$dlst]; |
|
1058
|
|
|
} else { |
|
1059
|
|
|
$offset_tmp = '+0000'; |
|
1060
|
|
|
} |
|
1061
|
|
|
} elseif (isset($calendar_tz)) { |
|
1062
|
|
|
if (array_key_exists($calendar_tz, $this->tz_array)) { |
|
1063
|
|
|
$offset_tmp = $this->tz_array[$calendar_tz][$dlst]; |
|
1064
|
|
|
} else { |
|
1065
|
|
|
$offset_tmp = '+0000'; |
|
1066
|
|
|
} |
|
1067
|
|
|
$tz_dtstart = $calendar_tz; // GIJ added |
|
1068
|
|
|
} else { |
|
1069
|
|
|
$offset_tmp = $server_offset_tmp; |
|
1070
|
|
|
} |
|
1071
|
|
|
$start_unixtime = $this->calcTime($offset_tmp, $server_offset_tmp, $start_unixtime); |
|
1072
|
|
|
$event_tz = $this->calcOffset($offset_tmp) / 3600; |
|
1073
|
|
|
$start_date = date('Ymd', $start_unixtime); |
|
1074
|
|
|
$start_time = date('Hi', $start_unixtime); |
|
1075
|
|
|
unset($server_offset_tmp); |
|
1076
|
|
|
} |
|
1077
|
|
|
break; |
|
1078
|
|
|
|
|
1079
|
|
|
case 'DTEND': |
|
1080
|
|
|
$zulu_time = false; |
|
1081
|
|
|
if (substr($data, -1) === 'Z') { |
|
1082
|
|
|
$zulu_time = true; |
|
1083
|
|
|
} |
|
1084
|
|
|
$data = preg_replace('/T/', '', $data); |
|
1085
|
|
|
$data = preg_replace('/Z/', '', $data); |
|
1086
|
|
|
$field = preg_replace('/;VALUE=DATE-TIME/', '', $field); |
|
1087
|
|
|
if (preg_match('/^DTEND;VALUE=DATE/i', $field)) { |
|
1088
|
|
|
$allday_end = $data; |
|
1089
|
|
|
} else { |
|
1090
|
|
View Code Duplication |
if (preg_match('/^DTEND;TZID=/i', $field)) { |
|
|
|
|
|
|
1091
|
|
|
$tz_tmp = explode('=', $field); |
|
1092
|
|
|
$tz_dtend = $tz_tmp[1]; |
|
1093
|
|
|
unset($tz_tmp); |
|
1094
|
|
|
} elseif ($zulu_time) { |
|
1095
|
|
|
$tz_dtend = 'GMT'; |
|
1096
|
|
|
} |
|
1097
|
|
|
|
|
1098
|
|
|
preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs); |
|
1099
|
|
|
$end_date = $regs[1] . $regs[2] . $regs[3]; |
|
|
|
|
|
|
1100
|
|
|
$end_time = $regs[4] . $regs[5]; |
|
|
|
|
|
|
1101
|
|
|
$end_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]); |
|
1102
|
|
|
|
|
1103
|
|
|
$dlst = date('I', $end_unixtime); |
|
1104
|
|
|
$server_offset_tmp = $this->chooseOffset($end_unixtime); |
|
1105
|
|
|
if (isset($tz_dtend)) { |
|
1106
|
|
|
$offset_tmp = $this->tz_array[$tz_dtend][$dlst]; |
|
1107
|
|
|
} elseif (isset($calendar_tz)) { |
|
1108
|
|
|
$offset_tmp = $this->tz_array[$calendar_tz][$dlst]; |
|
1109
|
|
|
$tz_dtend = $calendar_tz; // GIJ added |
|
1110
|
|
|
} else { |
|
1111
|
|
|
$offset_tmp = $server_offset_tmp; |
|
1112
|
|
|
} |
|
1113
|
|
|
$end_unixtime = $this->calcTime($offset_tmp, $server_offset_tmp, $end_unixtime); |
|
1114
|
|
|
if (!isset($event_tz)) { |
|
1115
|
|
|
$event_tz = $this->calcOffset($offset_tmp) / 3600; |
|
1116
|
|
|
} |
|
1117
|
|
|
$end_date = date('Ymd', $end_unixtime); |
|
1118
|
|
|
$end_time = date('Hi', $end_unixtime); |
|
1119
|
|
|
unset($server_offset_tmp); |
|
1120
|
|
|
} |
|
1121
|
|
|
break; |
|
1122
|
|
|
|
|
1123
|
|
|
/* case 'EXDATE': |
|
1124
|
|
|
$data = explode(",", $data); |
|
1125
|
|
|
foreach ($data as $exdata) { |
|
1126
|
|
|
$exdata = preg_replace('/T/', '', $exdata); |
|
1127
|
|
|
$exdata = preg_replace('/Z/', '', $exdata); |
|
1128
|
|
|
preg_match ('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $exdata, $regs); |
|
1129
|
|
|
$except_dates[] = $regs[1] . $regs[2] . $regs[3]; |
|
1130
|
|
|
$except_times[] = $regs[4] . $regs[5]; |
|
1131
|
|
|
} |
|
1132
|
|
|
break; |
|
1133
|
|
|
*/ |
|
1134
|
|
|
case 'SUMMARY': |
|
1135
|
|
|
$summary = mb_convert_encoding($data, mb_internal_encoding(), 'UTF-8'); |
|
1136
|
|
|
break; |
|
1137
|
|
|
|
|
1138
|
|
|
case 'DESCRIPTION': |
|
1139
|
|
|
$description = mb_convert_encoding($data, mb_internal_encoding(), 'UTF-8'); |
|
1140
|
|
|
break; |
|
1141
|
|
|
|
|
1142
|
|
|
case 'CONTACT': |
|
1143
|
|
|
// RFC2445 4.8.4.2 GIJ added |
|
1144
|
|
|
$contact = mb_convert_encoding($data, mb_internal_encoding(), 'UTF-8'); |
|
1145
|
|
|
break; |
|
1146
|
|
|
|
|
1147
|
|
|
case 'LOCATION': |
|
1148
|
|
|
// RFC2445 4.8.1.7 GIJ added |
|
1149
|
|
|
$location = mb_convert_encoding($data, mb_internal_encoding(), 'UTF-8'); |
|
1150
|
|
|
break; |
|
1151
|
|
|
|
|
1152
|
|
|
case 'DTSTAMP': |
|
1153
|
|
|
// RFC2445 4.8.7.2 GIJ added |
|
1154
|
|
|
$data = str_replace('T', '', $data); |
|
1155
|
|
|
$dtstamp = str_replace('Z', '', $data); |
|
1156
|
|
|
break; |
|
1157
|
|
|
|
|
1158
|
|
|
case 'SEQUENCE': |
|
1159
|
|
|
// RFC2445 4.8.7.4 GIJ added |
|
1160
|
|
|
$sequence = (int)$data; |
|
1161
|
|
|
break; |
|
1162
|
|
|
|
|
1163
|
|
|
case 'UID': |
|
1164
|
|
|
$uid = $data; |
|
1165
|
|
|
break; |
|
1166
|
|
|
|
|
1167
|
|
|
case 'X-WR-CALNAME': |
|
1168
|
|
|
$calendar_name = mb_convert_encoding($data, mb_internal_encoding(), 'UTF-8'); |
|
1169
|
|
|
break; |
|
1170
|
|
|
|
|
1171
|
|
|
case 'X-WR-TIMEZONE': |
|
1172
|
|
|
$calendar_tz = $data; |
|
1173
|
|
|
break; |
|
1174
|
|
|
|
|
1175
|
|
|
/* case 'DURATION': |
|
1176
|
|
|
if (($first_duration === true) && (!stristr($field, '=DURATION'))) { |
|
1177
|
|
|
preg_match('/^P([0-9]{1,2})?([W,D]{0,1}[T])?([0-9]{1,2}[H])?([0-9]{1,2}[M])?([0-9]{1,2}[S])?/', $data, $duration); |
|
1178
|
|
|
if ($duration[2] = 'W') { |
|
1179
|
|
|
$weeks = $duration[1]; |
|
1180
|
|
|
$days = 0; |
|
1181
|
|
|
} else { |
|
1182
|
|
|
$days = $duration[1]; |
|
1183
|
|
|
$weeks = 0; |
|
1184
|
|
|
} |
|
1185
|
|
|
$hours = preg_replace('/H/', '', $duration[3]); |
|
1186
|
|
|
$minutes = preg_replace('/M/', '', $duration[4]); |
|
1187
|
|
|
$seconds = preg_replace('/S/', '', $duration[5]); |
|
1188
|
|
|
$the_duration = ($weeks * 60 * 60 * 24 * 7) + ($days * 60 * 60 * 24) + ($hours * 60 * 60) + ($minutes * 60) + ($seconds); |
|
1189
|
|
|
$end_unixtime = $start_unixtime + $the_duration; |
|
1190
|
|
|
$end_time = date ('Hi', $end_unixtime); |
|
1191
|
|
|
$first_duration = FALSE; |
|
1192
|
|
|
} |
|
1193
|
|
|
break; |
|
1194
|
|
|
*/ |
|
1195
|
|
|
case 'RRULE': |
|
1196
|
|
|
$rrule = strtoupper($data); |
|
1197
|
|
|
break; |
|
1198
|
|
|
|
|
1199
|
|
|
/* case 'ATTENDEE': |
|
1200
|
|
|
$attendee = $data; |
|
1201
|
|
|
break; |
|
1202
|
|
|
*/ |
|
1203
|
|
|
} |
|
1204
|
|
|
} |
|
1205
|
|
|
} |
|
1206
|
|
|
|
|
1207
|
|
|
//If you want to see the values in the arrays, uncomment below. |
|
1208
|
|
|
//print '<pre>'; |
|
1209
|
|
|
//print_r($this->events); |
|
1210
|
|
|
//print_r($rrule); |
|
1211
|
|
|
//print '</pre>'; |
|
1212
|
|
|
return "0: $calendar_name :"; |
|
1213
|
|
|
} |
|
1214
|
|
|
|
|
1215
|
|
|
// ¥Ñ¡¼¥¹¤·¤¿iCalendar¥Ç¡¼¥¿¤«¤é¡¢INSERT,UPDATEÍѤÎSETʸÇÛÎó¤òÀ¸À®¤¹¤ë´Ø¿ô |
|
1216
|
|
|
|
|
1217
|
|
|
/** |
|
1218
|
|
|
* @return array |
|
1219
|
|
|
*/ |
|
1220
|
|
|
public function output_setsqls() |
|
1221
|
|
|
{ |
|
1222
|
|
|
$rets = array(); |
|
1223
|
|
|
|
|
1224
|
|
|
foreach ($this->events as $uid => $event) { |
|
1225
|
|
|
$ret = ''; |
|
1226
|
|
|
|
|
1227
|
|
|
// $event[] ¤ò¥í¡¼¥«¥ëÊÑ¿ô¤ËŸ³« |
|
1228
|
|
|
unset($start_unixtime, $end_unixtime, $summary, $description, $status, $class, $categories, $contact, $location, $dtstamp, $sequence, $allday_start, $allday_end, $tz_dtstart, $tz_dtend, $event_tz, $uid_valid); |
|
1229
|
|
|
extract($event); |
|
1230
|
|
|
|
|
1231
|
|
|
// Unique-ID (¼«Æ°ÉÕ²ÃÈÖ¹æ¤Î¾ì¹ç¤Ï¡¢¤½¤ì¤Ã¤Ý¤¯À¸À®¤¹¤ë) |
|
1232
|
|
|
if (!$uid_valid) { |
|
1233
|
|
|
$unique_id = 'apcal060-' . md5("{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}") . "-$uid"; |
|
1234
|
|
|
} else { |
|
1235
|
|
|
$unique_id = $uid; |
|
1236
|
|
|
} |
|
1237
|
|
|
$ret .= "unique_id='" . addslashes($unique_id) . "',"; |
|
1238
|
|
|
|
|
1239
|
|
|
// DTEND¤Îµ½Ò¤¬¤Ê¤¤¥Ç¡¼¥¿¤Ø¤ÎÂкö |
|
1240
|
|
|
if (!isset($end_unixtime)) { |
|
1241
|
|
|
$end_unixtime = $start_unixtime + 300; |
|
1242
|
|
|
} |
|
1243
|
|
|
|
|
1244
|
|
|
// start¤Èend¤¬È¿Å¾¤·¤Æ¤¤¤ë¥Ç¡¼¥¿¤Ø¤ÎÂкö |
|
1245
|
|
|
if ($start_unixtime > $end_unixtime) { |
|
1246
|
|
|
list($start_unixtime, $end_unixtime) = array($end_unixtime, $start_unixtime); |
|
1247
|
|
|
} |
|
1248
|
|
|
|
|
1249
|
|
|
// 5ʬñ°Ì¤Ë·¤¨¤ë |
|
1250
|
|
|
$start_unixtime = (int)($start_unixtime / 300) * 300; |
|
1251
|
|
|
$end_unixtime = (int)($end_unixtime / 300) * 300; |
|
1252
|
|
|
|
|
1253
|
|
|
// »þ´Ö¤Î¥»¥Ã¥È |
|
1254
|
|
|
$ret .= "start='$start_unixtime',end='$end_unixtime',"; |
|
1255
|
|
|
if (isset($allday_start) && $allday_start !== '') { |
|
1256
|
|
|
// Á´Æü¥¤¥Ù¥ó¥È |
|
1257
|
|
|
$ret .= "allday='1',"; |
|
1258
|
|
|
} else { |
|
1259
|
|
|
// Ä̾磻¥Ù¥ó¥È |
|
1260
|
|
|
$ret .= "allday='0',"; |
|
1261
|
|
|
} |
|
1262
|
|
|
|
|
1263
|
|
|
// tzid ¤ÎµÏ¿¡Ê°ì±þ¡Ë |
|
1264
|
|
|
if (isset($tz_dtstart) && $tz_dtstart !== '') { |
|
1265
|
|
|
$ret .= "tzid='$tz_dtstart',"; |
|
1266
|
|
|
} elseif (isset($tz_dtend) && $tz_dtend !== '') { |
|
1267
|
|
|
$ret .= "tzid='$tz_dtend',"; |
|
1268
|
|
|
} |
|
1269
|
|
|
|
|
1270
|
|
|
// event_tz ¤ÎµÏ¿ |
|
1271
|
|
|
if (isset($event_tz)) { |
|
1272
|
|
|
$ret .= "event_tz='$event_tz',"; |
|
1273
|
|
|
} |
|
1274
|
|
|
|
|
1275
|
|
|
// summary¤Î¥Á¥§¥Ã¥¯¡Ê̤µÆþ¤Ê¤é¤½¤Î»Ý¤òÄÉ²Ã¡Ë |
|
1276
|
|
|
if (empty($summary) || $summary === '') { |
|
1277
|
|
|
$event['summary'] = '¡Ê·ï̾¤Ê¤·¡Ë'; |
|
1278
|
|
|
} |
|
1279
|
|
|
|
|
1280
|
|
|
// ¤½¤Î¾¤Î¥«¥é¥à (dtstamp ¤Ï¤¢¤¨¤Æ³°¤¹) |
|
1281
|
|
|
$cols = array( |
|
1282
|
|
|
'summary' => '255:J:1', |
|
1283
|
|
|
'location' => '255:J:0', |
|
1284
|
|
|
'contact' => '255:J:0', |
|
1285
|
|
|
'categories' => '255:J:0', |
|
1286
|
|
|
'rrule' => '255:E:0', /* "dtstamp" => "14:E:0" ,*/ |
|
1287
|
|
|
'sequence' => 'I:N:0', |
|
1288
|
|
|
'description' => 'A:J:0' |
|
1289
|
|
|
); |
|
1290
|
|
|
$ret .= $this->get_sql_set($event, $cols); |
|
1291
|
|
|
|
|
1292
|
|
|
$rets[] = $ret; |
|
1293
|
|
|
} |
|
1294
|
|
|
|
|
1295
|
|
|
return $rets; |
|
1296
|
|
|
} |
|
1297
|
|
|
|
|
1298
|
|
|
// Ï¢ÁÛÇÛÎó¤ò°ú¿ô¤Ë¼è¤ê¡¢$event¤«¤éINSERT,UPDATEÍѤÎSETʸ¤òÀ¸À®¤¹¤ë¥¯¥é¥¹´Ø¿ô |
|
1299
|
|
|
|
|
1300
|
|
|
/** |
|
1301
|
|
|
* @param $event |
|
1302
|
|
|
* @param $cols |
|
1303
|
|
|
* @return string |
|
1304
|
|
|
*/ |
|
1305
|
|
|
public function get_sql_set($event, $cols) |
|
1306
|
|
|
{ |
|
1307
|
|
|
$ret = ''; |
|
1308
|
|
|
|
|
1309
|
|
|
foreach ($cols as $col => $types) { |
|
1310
|
|
|
list($field, $lang, $essential) = explode(':', $types); |
|
|
|
|
|
|
1311
|
|
|
|
|
1312
|
|
|
$data = empty($event[$col]) ? '' : $event[$col]; |
|
1313
|
|
|
|
|
1314
|
|
|
// ¸À¸ì¡¦¿ô»ú¤Ê¤É¤ÎÊ̤ˤè¤ë½èÍý |
|
1315
|
|
View Code Duplication |
switch ($lang) { |
|
|
|
|
|
|
1316
|
|
|
case 'N': // ¿ôÃÍ (·å¼è¤ê¤Î , ¤ò¼è¤ë) |
|
1317
|
|
|
$data = str_replace(',', '', $data); |
|
1318
|
|
|
break; |
|
1319
|
|
|
case 'J': // ÆüËÜ¸ì¥Æ¥¥¹¥È (Ⱦ³Ñ¥«¥Ê¢ªÁ´³Ñ¤«¤Ê) |
|
1320
|
|
|
$data = $this->mb_convert_kana($data, 'KV'); |
|
1321
|
|
|
break; |
|
1322
|
|
|
case 'E': // Ⱦ³Ñ±Ñ¿ô»ú¤Î¤ß (Á´³Ñ±Ñ¿ô¢ªÈ¾³Ñ±Ñ¿ô) |
|
1323
|
|
|
$data = $this->mb_convert_kana($data, 'as'); |
|
1324
|
|
|
break; |
|
1325
|
|
|
} |
|
1326
|
|
|
|
|
1327
|
|
|
// ¥Õ¥£¡¼¥ë¥É¤Î·¿¤Ë¤è¤ë½èÍý |
|
1328
|
|
|
switch ($field) { |
|
1329
|
|
|
case 'A': // textarea |
|
1330
|
|
|
$data = $this->textarea_sanitizer_for_sql($data); |
|
1331
|
|
|
break; |
|
1332
|
|
|
case 'I': // integer |
|
1333
|
|
|
$data = (int)$data; |
|
1334
|
|
|
break; |
|
1335
|
|
|
default: // varchar(¥Ç¥Õ¥©¥ë¥È)¤Ï¿ôÃͤˤè¤ëʸ»ú¿ô»ØÄê |
|
1336
|
|
|
$data = $this->text_sanitizer_for_sql($data); |
|
1337
|
|
|
if ($field < 1) { |
|
1338
|
|
|
$field = 255; |
|
1339
|
|
|
} |
|
1340
|
|
|
$data = mb_strcut($data, 0, $field); |
|
1341
|
|
|
} |
|
1342
|
|
|
|
|
1343
|
|
|
// ºÇ¸å¤Ëaddslashes |
|
1344
|
|
|
$data = addslashes($data); |
|
1345
|
|
|
|
|
1346
|
|
|
$ret .= "$col='$data',"; |
|
1347
|
|
|
} |
|
1348
|
|
|
|
|
1349
|
|
|
// ºÇ¸å¤Î , ¤òºï½ü |
|
1350
|
|
|
$ret = substr($ret, 0, -1); |
|
1351
|
|
|
|
|
1352
|
|
|
return $ret; |
|
1353
|
|
|
} |
|
1354
|
|
|
|
|
1355
|
|
|
// mb_convert_kana¤Î½èÍý |
|
1356
|
|
|
|
|
1357
|
|
|
/** |
|
1358
|
|
|
* @param $str |
|
1359
|
|
|
* @param $option |
|
1360
|
|
|
* @return string |
|
1361
|
|
|
*/ |
|
1362
|
|
View Code Duplication |
public function mb_convert_kana($str, $option) |
|
|
|
|
|
|
1363
|
|
|
{ |
|
1364
|
|
|
// convert_kana ¤Î½èÍý¤Ï¡¢ÆüËܸì¤Ç¤Î¤ß¹Ô¤¦ |
|
1365
|
|
|
if ($this->language !== 'japanese' || !function_exists('mb_convert_kana')) { |
|
1366
|
|
|
return $str; |
|
1367
|
|
|
} else { |
|
1368
|
|
|
return mb_convert_kana($str, $option); |
|
1369
|
|
|
} |
|
1370
|
|
|
} |
|
1371
|
|
|
|
|
1372
|
|
|
// ¥µ¥Ë¥¿¥¤¥º´ØÏ¢¤Î´Ø¿ô (¥µ¥Ö¥¯¥é¥¹¤òºîÀ®¤¹¤ë»þ¤ÎOverrideÂоÝ) |
|
1373
|
|
|
|
|
1374
|
|
|
/** |
|
1375
|
|
|
* @param $data |
|
1376
|
|
|
* @return string |
|
1377
|
|
|
*/ |
|
1378
|
|
|
public function textarea_sanitizer_for_sql($data) |
|
1379
|
|
|
{ |
|
1380
|
|
|
// '\n' ¤ò "\n" ¤Ë¤¹¤ë |
|
1381
|
|
|
$data = str_replace('\n', "\n", $data); |
|
1382
|
|
|
|
|
1383
|
|
|
if (class_exists('MyTextSanitizer')) { |
|
1384
|
|
|
// XOOPS¤Î¥µ¥Ë¥¿¥¤¥¶¥¯¥é¥¹¤¬¤¢¤ì¤Ð¡¢¸ÄÊ̤Ëbb code¥¿¥°¤Ø¤ÎÊÑ´¹¤ò¤·¤Æ¤ß¤ë |
|
1385
|
|
|
$search = array( |
|
1386
|
|
|
"/mailto:(\S+)(\s)/i", |
|
1387
|
|
|
"/http:\/\/(\S+)(\s)/i" |
|
1388
|
|
|
); |
|
1389
|
|
|
$replace = array( |
|
1390
|
|
|
"[email]\\1[/email]\\2", |
|
1391
|
|
|
"[url=\\1]\\1[/url]\\2" |
|
1392
|
|
|
); |
|
1393
|
|
|
$data = preg_replace($search, $replace, $data); |
|
1394
|
|
|
|
|
1395
|
|
|
return strip_tags($data); |
|
1396
|
|
|
} else { |
|
1397
|
|
|
// ¤Ê¤±¤ì¤Ð¡¢Ã±¤ËÁ´¥¿¥°¤ò̵¸ú¤È¤¹¤ë |
|
1398
|
|
|
return strip_tags($data); |
|
1399
|
|
|
} |
|
1400
|
|
|
} |
|
1401
|
|
|
|
|
1402
|
|
|
/** |
|
1403
|
|
|
* @param $data |
|
1404
|
|
|
* @return string |
|
1405
|
|
|
*/ |
|
1406
|
|
|
public function text_sanitizer_for_sql($data) |
|
1407
|
|
|
{ |
|
1408
|
|
|
// Á´¥¿¥°¤ò̵¸ú¤È¤¹¤ësanitize |
|
1409
|
|
|
// ¼ÂºÝ¤Ë¤Ï¡¢Outlook¤Ê¤É¤Ç¤Ï¥¿¥°¤òľ½ñ¤¤¹¤ë¤Î¤Ç¡¢²èÌ̽ÐÎϤΥµ¥Ë¥¿¥¤¥º¤µ¤¨ |
|
1410
|
|
|
// ¤¤Á¤ó¤È¹Ô¤ï¤ì¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢¤³¤³¤Ç¤Îstrip_tags ¤Ï¾Ã¤·¤Æ¤âÎɤ¤¤Ï¤º |
|
1411
|
|
|
return strip_tags($data); |
|
1412
|
|
|
} |
|
1413
|
|
|
|
|
1414
|
|
|
// The End of Class |
|
1415
|
|
|
} |
|
1416
|
|
|
|
This check compares the return type specified in the
@returnannotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.