Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like iCal_parser often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use iCal_parser, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 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) |
||
| 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) |
||
| 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) |
||
| 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) |
||
| 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) |
||
| 666 | |||
| 667 | /** |
||
| 668 | * @param $now |
||
| 669 | * @param $then |
||
| 670 | * @return mixed |
||
| 671 | */ |
||
| 672 | public function yearCompare($now, $then) |
||
| 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) |
||
| 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) |
||
| 741 | |||
| 742 | /** |
||
| 743 | * @param $time |
||
| 744 | * @return string |
||
| 745 | */ |
||
| 746 | public function chooseOffset($time) |
||
| 770 | |||
| 771 | // ¥³¥ó¥¹¥È¥é¥¯¥¿ |
||
| 772 | |||
| 773 | /** |
||
| 774 | * iCal_parser constructor. |
||
| 775 | */ |
||
| 776 | public function __construct() |
||
| 779 | |||
| 780 | // ¥Õ¥¡¥¤¥ë¤ò¥Ñ¡¼¥¹¤·¤Æ¡¢ÆâÉôÊÑ¿ô¤Ë¼è¤ê¹þ¤à |
||
| 781 | |||
| 782 | /** |
||
| 783 | * @param $filename |
||
| 784 | * @param $calendar_name |
||
| 785 | * @return string |
||
| 786 | */ |
||
| 787 | public function parse($filename, $calendar_name) |
||
| 1214 | |||
| 1215 | // ¥Ñ¡¼¥¹¤·¤¿iCalendar¥Ç¡¼¥¿¤«¤é¡¢INSERT,UPDATEÍѤÎSETʸÇÛÎó¤òÀ¸À®¤¹¤ë´Ø¿ô |
||
| 1216 | |||
| 1217 | /** |
||
| 1218 | * @return array |
||
| 1219 | */ |
||
| 1220 | public function output_setsqls() |
||
| 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) |
||
| 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) |
|
| 1371 | |||
| 1372 | // ¥µ¥Ë¥¿¥¤¥º´ØÏ¢¤Î´Ø¿ô (¥µ¥Ö¥¯¥é¥¹¤òºîÀ®¤¹¤ë»þ¤ÎOverrideÂоÝ) |
||
| 1373 | |||
| 1374 | /** |
||
| 1375 | * @param $data |
||
| 1376 | * @return string |
||
| 1377 | */ |
||
| 1378 | public function textarea_sanitizer_for_sql($data) |
||
| 1401 | |||
| 1402 | /** |
||
| 1403 | * @param $data |
||
| 1404 | * @return string |
||
| 1405 | */ |
||
| 1406 | public function text_sanitizer_for_sql($data) |
||
| 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.