@@ -49,39 +49,39 @@ |
||
| 49 | 49 | |
| 50 | 50 | case 'server.index.load.custom': |
| 51 | 51 | switch ($data['name']) { |
| 52 | - case 'files_get_recipients': |
|
| 53 | - RecipientHandler::doGetRecipients(); |
|
| 52 | + case 'files_get_recipients': |
|
| 53 | + RecipientHandler::doGetRecipients(); |
|
| 54 | 54 | |
| 55 | - break; |
|
| 55 | + break; |
|
| 56 | 56 | |
| 57 | - case 'download_file': |
|
| 58 | - DownloadHandler::doDownload(); |
|
| 57 | + case 'download_file': |
|
| 58 | + DownloadHandler::doDownload(); |
|
| 59 | 59 | |
| 60 | - break; |
|
| 60 | + break; |
|
| 61 | 61 | |
| 62 | - case 'upload_file': |
|
| 63 | - UploadHandler::doUpload(); |
|
| 62 | + case 'upload_file': |
|
| 63 | + UploadHandler::doUpload(); |
|
| 64 | 64 | |
| 65 | - break; |
|
| 65 | + break; |
|
| 66 | 66 | |
| 67 | - case 'form': |
|
| 68 | - if (isset($_GET['backend'])) { |
|
| 69 | - $backend = urldecode($_GET['backend']); |
|
| 70 | - } else { |
|
| 71 | - $backend = ''; |
|
| 72 | - } |
|
| 73 | - $backendstore = Files\Backend\BackendStore::getInstance(); |
|
| 67 | + case 'form': |
|
| 68 | + if (isset($_GET['backend'])) { |
|
| 69 | + $backend = urldecode($_GET['backend']); |
|
| 70 | + } else { |
|
| 71 | + $backend = ''; |
|
| 72 | + } |
|
| 73 | + $backendstore = Files\Backend\BackendStore::getInstance(); |
|
| 74 | 74 | |
| 75 | - if ($backendstore->backendExists($backend)) { |
|
| 76 | - $backendInstance = $backendstore->getInstanceOfBackend($backend); |
|
| 77 | - $formdata = $backendInstance->getFormConfig(); |
|
| 75 | + if ($backendstore->backendExists($backend)) { |
|
| 76 | + $backendInstance = $backendstore->getInstanceOfBackend($backend); |
|
| 77 | + $formdata = $backendInstance->getFormConfig(); |
|
| 78 | 78 | |
| 79 | - exit($formdata); |
|
| 80 | - } |
|
| 79 | + exit($formdata); |
|
| 80 | + } |
|
| 81 | 81 | |
| 82 | - exit('Specified backend does not exist!'); |
|
| 82 | + exit('Specified backend does not exist!'); |
|
| 83 | 83 | |
| 84 | - break; |
|
| 84 | + break; |
|
| 85 | 85 | } |
| 86 | 86 | |
| 87 | 87 | break; |
@@ -34,14 +34,14 @@ |
||
| 34 | 34 | } |
| 35 | 35 | |
| 36 | 36 | switch ($this->status) { |
| 37 | - case 'good': |
|
| 38 | - return OCSP_CERT_STATUS_GOOD; |
|
| 37 | + case 'good': |
|
| 38 | + return OCSP_CERT_STATUS_GOOD; |
|
| 39 | 39 | |
| 40 | - case 'revoked': |
|
| 41 | - return OCSP_CERT_STATUS_REVOKED; |
|
| 40 | + case 'revoked': |
|
| 41 | + return OCSP_CERT_STATUS_REVOKED; |
|
| 42 | 42 | |
| 43 | - default: |
|
| 44 | - return OCSP_CERT_STATUS_UNKOWN; |
|
| 43 | + default: |
|
| 44 | + return OCSP_CERT_STATUS_UNKOWN; |
|
| 45 | 45 | } |
| 46 | 46 | } |
| 47 | 47 | } |
@@ -215,18 +215,18 @@ discard block |
||
| 215 | 215 | $errorInfo = []; |
| 216 | 216 | |
| 217 | 217 | switch (mapi_last_hresult()) { |
| 218 | - case MAPI_E_NO_ACCESS: |
|
| 219 | - $errorInfo['error_message'] = _('Unable to perform search query, no permissions to create search folder.'); |
|
| 218 | + case MAPI_E_NO_ACCESS: |
|
| 219 | + $errorInfo['error_message'] = _('Unable to perform search query, no permissions to create search folder.'); |
|
| 220 | 220 | |
| 221 | - break; |
|
| 221 | + break; |
|
| 222 | 222 | |
| 223 | - case MAPI_E_NOT_FOUND: |
|
| 224 | - $errorInfo['error_message'] = _('Unable to perform search query, search folder not found.'); |
|
| 223 | + case MAPI_E_NOT_FOUND: |
|
| 224 | + $errorInfo['error_message'] = _('Unable to perform search query, search folder not found.'); |
|
| 225 | 225 | |
| 226 | - break; |
|
| 226 | + break; |
|
| 227 | 227 | |
| 228 | - default: |
|
| 229 | - $errorInfo['error_message'] = _('Unable to perform search query, store might not support searching.'); |
|
| 228 | + default: |
|
| 229 | + $errorInfo['error_message'] = _('Unable to perform search query, store might not support searching.'); |
|
| 230 | 230 | } |
| 231 | 231 | |
| 232 | 232 | $errorInfo['original_error_message'] = _('Error in creating search folder.'); |
@@ -381,45 +381,45 @@ discard block |
||
| 381 | 381 | $subres = $restriction[1]; |
| 382 | 382 | |
| 383 | 383 | switch ($subres[ULPROPTAG]) { |
| 384 | - case PR_SUBJECT: |
|
| 385 | - $patterns['subject'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 384 | + case PR_SUBJECT: |
|
| 385 | + $patterns['subject'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 386 | 386 | |
| 387 | - break; |
|
| 387 | + break; |
|
| 388 | 388 | |
| 389 | - case PR_BODY: |
|
| 390 | - $patterns['content'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 391 | - $patterns['attachments'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 389 | + case PR_BODY: |
|
| 390 | + $patterns['content'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 391 | + $patterns['attachments'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 392 | 392 | |
| 393 | - break; |
|
| 393 | + break; |
|
| 394 | 394 | |
| 395 | - case PR_SENDER_NAME: |
|
| 396 | - $patterns['sender'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 395 | + case PR_SENDER_NAME: |
|
| 396 | + $patterns['sender'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 397 | 397 | |
| 398 | - break; |
|
| 398 | + break; |
|
| 399 | 399 | |
| 400 | - case PR_SENT_REPRESENTING_NAME: |
|
| 401 | - $patterns['from'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 400 | + case PR_SENT_REPRESENTING_NAME: |
|
| 401 | + $patterns['from'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 402 | 402 | |
| 403 | - break; |
|
| 403 | + break; |
|
| 404 | 404 | |
| 405 | - case PR_DISPLAY_TO: |
|
| 406 | - case PR_DISPLAY_CC: |
|
| 407 | - $patterns['recipients'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 405 | + case PR_DISPLAY_TO: |
|
| 406 | + case PR_DISPLAY_CC: |
|
| 407 | + $patterns['recipients'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 408 | 408 | |
| 409 | - break; |
|
| 409 | + break; |
|
| 410 | 410 | |
| 411 | - case PR_MESSAGE_CLASS: |
|
| 412 | - if (empty($patterns['message_classes'])) { |
|
| 413 | - $patterns['message_classes'] = []; |
|
| 414 | - } |
|
| 415 | - $patterns['message_classes'][] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 411 | + case PR_MESSAGE_CLASS: |
|
| 412 | + if (empty($patterns['message_classes'])) { |
|
| 413 | + $patterns['message_classes'] = []; |
|
| 414 | + } |
|
| 415 | + $patterns['message_classes'][] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 416 | 416 | |
| 417 | - break; |
|
| 417 | + break; |
|
| 418 | 418 | |
| 419 | - case PR_DISPLAY_NAME: |
|
| 420 | - $patterns['others'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 419 | + case PR_DISPLAY_NAME: |
|
| 420 | + $patterns['others'] = $subres[VALUE][$subres[ULPROPTAG]]; |
|
| 421 | 421 | |
| 422 | - break; |
|
| 422 | + break; |
|
| 423 | 423 | } |
| 424 | 424 | } elseif (RES_AND == $type || RES_OR == $type) { |
| 425 | 425 | foreach ($restriction[1] as $subres) { |
@@ -270,18 +270,18 @@ |
||
| 270 | 270 | $errorInfo = []; |
| 271 | 271 | |
| 272 | 272 | switch (mapi_last_hresult()) { |
| 273 | - case MAPI_E_NO_ACCESS: |
|
| 274 | - $errorInfo['error_message'] = _('Unable to perform search query, no permissions to create search folder.'); |
|
| 273 | + case MAPI_E_NO_ACCESS: |
|
| 274 | + $errorInfo['error_message'] = _('Unable to perform search query, no permissions to create search folder.'); |
|
| 275 | 275 | |
| 276 | - break; |
|
| 276 | + break; |
|
| 277 | 277 | |
| 278 | - case MAPI_E_NOT_FOUND: |
|
| 279 | - $errorInfo['error_message'] = _('Unable to perform search query, search folder not found.'); |
|
| 278 | + case MAPI_E_NOT_FOUND: |
|
| 279 | + $errorInfo['error_message'] = _('Unable to perform search query, search folder not found.'); |
|
| 280 | 280 | |
| 281 | - break; |
|
| 281 | + break; |
|
| 282 | 282 | |
| 283 | - default: |
|
| 284 | - $errorInfo['error_message'] = _('Unable to perform search query, store might not support searching.'); |
|
| 283 | + default: |
|
| 284 | + $errorInfo['error_message'] = _('Unable to perform search query, store might not support searching.'); |
|
| 285 | 285 | } |
| 286 | 286 | |
| 287 | 287 | $errorInfo['original_error_message'] = _('Error in creating search folder.'); |
@@ -353,44 +353,44 @@ |
||
| 353 | 353 | $result = true; |
| 354 | 354 | |
| 355 | 355 | switch ($loader) { |
| 356 | - case LOAD_RELEASE: |
|
| 357 | - if (!is_file(BASE_PATH . '/client/grommunio.js')) { |
|
| 358 | - $this->error('<strong>LOAD_RELEASE configured, but no release files found</strong>', $help_msg); |
|
| 359 | - $result = false; |
|
| 360 | - } elseif (is_dir(BASE_PATH . '/client/zarafa')) { |
|
| 361 | - $this->error('<strong>LOAD_RELEASE configured, but source files were found</strong>', $help_msg); |
|
| 362 | - $result = false; |
|
| 363 | - } |
|
| 356 | + case LOAD_RELEASE: |
|
| 357 | + if (!is_file(BASE_PATH . '/client/grommunio.js')) { |
|
| 358 | + $this->error('<strong>LOAD_RELEASE configured, but no release files found</strong>', $help_msg); |
|
| 359 | + $result = false; |
|
| 360 | + } elseif (is_dir(BASE_PATH . '/client/zarafa')) { |
|
| 361 | + $this->error('<strong>LOAD_RELEASE configured, but source files were found</strong>', $help_msg); |
|
| 362 | + $result = false; |
|
| 363 | + } |
|
| 364 | 364 | |
| 365 | - break; |
|
| 365 | + break; |
|
| 366 | 366 | |
| 367 | - case LOAD_DEBUG: |
|
| 368 | - if (!is_file(BASE_PATH . '/client/zarafa-debug.js')) { |
|
| 369 | - $this->error('<strong>LOAD_DEBUG configured, but no debug files found</strong>', $help_msg); |
|
| 370 | - $result = false; |
|
| 371 | - } elseif (is_dir(BASE_PATH . '/client/zarafa')) { |
|
| 372 | - $this->error('<strong>LOAD_DEBUG configured, but source files were found</strong>', $help_msg); |
|
| 373 | - $result = false; |
|
| 374 | - } |
|
| 367 | + case LOAD_DEBUG: |
|
| 368 | + if (!is_file(BASE_PATH . '/client/zarafa-debug.js')) { |
|
| 369 | + $this->error('<strong>LOAD_DEBUG configured, but no debug files found</strong>', $help_msg); |
|
| 370 | + $result = false; |
|
| 371 | + } elseif (is_dir(BASE_PATH . '/client/zarafa')) { |
|
| 372 | + $this->error('<strong>LOAD_DEBUG configured, but source files were found</strong>', $help_msg); |
|
| 373 | + $result = false; |
|
| 374 | + } |
|
| 375 | 375 | |
| 376 | - break; |
|
| 376 | + break; |
|
| 377 | 377 | |
| 378 | - case LOAD_SOURCE: |
|
| 379 | - if (!is_dir(BASE_PATH . '/client/zarafa')) { |
|
| 380 | - $this->error('<strong>LOAD_SOURCE configured, but no source files found</strong>', $help_msg); |
|
| 381 | - $result = false; |
|
| 382 | - } elseif (is_file(BASE_PATH . '/client/grommunio.js') || is_file(BASE_PATH . '/client/zarafa-debug.js')) { |
|
| 383 | - $this->error('<strong>LOAD_SOURCE configured, but release & debug file were found</strong>', $help_msg); |
|
| 384 | - $result = false; |
|
| 385 | - } |
|
| 378 | + case LOAD_SOURCE: |
|
| 379 | + if (!is_dir(BASE_PATH . '/client/zarafa')) { |
|
| 380 | + $this->error('<strong>LOAD_SOURCE configured, but no source files found</strong>', $help_msg); |
|
| 381 | + $result = false; |
|
| 382 | + } elseif (is_file(BASE_PATH . '/client/grommunio.js') || is_file(BASE_PATH . '/client/zarafa-debug.js')) { |
|
| 383 | + $this->error('<strong>LOAD_SOURCE configured, but release & debug file were found</strong>', $help_msg); |
|
| 384 | + $result = false; |
|
| 385 | + } |
|
| 386 | 386 | |
| 387 | - break; |
|
| 387 | + break; |
|
| 388 | 388 | |
| 389 | - default: |
|
| 390 | - $this->error('<strong>Unknown \'DEBUG_LOADER\' value: ' . $loader . '</strong>', $help_msg); |
|
| 391 | - $result = false; |
|
| 389 | + default: |
|
| 390 | + $this->error('<strong>Unknown \'DEBUG_LOADER\' value: ' . $loader . '</strong>', $help_msg); |
|
| 391 | + $result = false; |
|
| 392 | 392 | |
| 393 | - break; |
|
| 393 | + break; |
|
| 394 | 394 | } |
| 395 | 395 | |
| 396 | 396 | return $result; |
@@ -662,23 +662,23 @@ |
||
| 662 | 662 | $props = mapi_getprops($store, [PR_DISPLAY_NAME]); |
| 663 | 663 | |
| 664 | 664 | switch ($e->getCode()) { |
| 665 | - case MAPI_E_NO_ACCESS: |
|
| 666 | - $msg = 'Unable to open FINDER_ROOT for store: %s.'; |
|
| 667 | - error_log(sprintf($msg, $props[PR_DISPLAY_NAME])); |
|
| 665 | + case MAPI_E_NO_ACCESS: |
|
| 666 | + $msg = 'Unable to open FINDER_ROOT for store: %s.'; |
|
| 667 | + error_log(sprintf($msg, $props[PR_DISPLAY_NAME])); |
|
| 668 | 668 | |
| 669 | - break; |
|
| 669 | + break; |
|
| 670 | 670 | |
| 671 | - case MAPI_E_NOT_FOUND: |
|
| 672 | - $msg = 'Unable to open FINDER_ROOT for store: %s. Folder not found.'; |
|
| 673 | - error_log(sprintf($msg, $props[PR_DISPLAY_NAME])); |
|
| 671 | + case MAPI_E_NOT_FOUND: |
|
| 672 | + $msg = 'Unable to open FINDER_ROOT for store: %s. Folder not found.'; |
|
| 673 | + error_log(sprintf($msg, $props[PR_DISPLAY_NAME])); |
|
| 674 | 674 | |
| 675 | - break; |
|
| 675 | + break; |
|
| 676 | 676 | |
| 677 | - default: |
|
| 678 | - $msg = 'Unable to open FINDER_ROOT for store: %s. Unknown MAPI Error %s.'; |
|
| 679 | - error_log(sprintf($msg, $props[PR_DISPLAY_NAME], get_mapi_error_name($e->getCode()))); |
|
| 677 | + default: |
|
| 678 | + $msg = 'Unable to open FINDER_ROOT for store: %s. Unknown MAPI Error %s.'; |
|
| 679 | + error_log(sprintf($msg, $props[PR_DISPLAY_NAME], get_mapi_error_name($e->getCode()))); |
|
| 680 | 680 | |
| 681 | - break; |
|
| 681 | + break; |
|
| 682 | 682 | } |
| 683 | 683 | } |
| 684 | 684 | } |
@@ -205,158 +205,158 @@ |
||
| 205 | 205 | |
| 206 | 206 | function mapi_strerror($e) { |
| 207 | 207 | switch ($e) { |
| 208 | - case S_OK: return 'success'; |
|
| 208 | + case S_OK: return 'success'; |
|
| 209 | 209 | |
| 210 | - case MAPI_E_CALL_FAILED: return 'An error of unexpected or unknown origin occurred'; |
|
| 210 | + case MAPI_E_CALL_FAILED: return 'An error of unexpected or unknown origin occurred'; |
|
| 211 | 211 | |
| 212 | - case MAPI_E_NOT_ENOUGH_MEMORY: return 'Not enough memory was available to complete the operation'; |
|
| 212 | + case MAPI_E_NOT_ENOUGH_MEMORY: return 'Not enough memory was available to complete the operation'; |
|
| 213 | 213 | |
| 214 | - case MAPI_E_INVALID_PARAMETER: return 'An invalid parameter was passed to a function or remote procedure call'; |
|
| 214 | + case MAPI_E_INVALID_PARAMETER: return 'An invalid parameter was passed to a function or remote procedure call'; |
|
| 215 | 215 | |
| 216 | - case MAPI_E_INTERFACE_NOT_SUPPORTED: return 'MAPI interface not supported'; |
|
| 216 | + case MAPI_E_INTERFACE_NOT_SUPPORTED: return 'MAPI interface not supported'; |
|
| 217 | 217 | |
| 218 | - case MAPI_E_NO_ACCESS: return 'An attempt was made to access a message store or object for which the user has insufficient permissions'; |
|
| 218 | + case MAPI_E_NO_ACCESS: return 'An attempt was made to access a message store or object for which the user has insufficient permissions'; |
|
| 219 | 219 | |
| 220 | - case MAPI_E_NO_SUPPORT: return 'Function is not implemented'; |
|
| 220 | + case MAPI_E_NO_SUPPORT: return 'Function is not implemented'; |
|
| 221 | 221 | |
| 222 | - case MAPI_E_BAD_CHARWIDTH: return 'An incompatibility exists in the character sets supported by the caller and the implementation'; |
|
| 222 | + case MAPI_E_BAD_CHARWIDTH: return 'An incompatibility exists in the character sets supported by the caller and the implementation'; |
|
| 223 | 223 | |
| 224 | - case MAPI_E_STRING_TOO_LONG: return 'In the context of this method call, a string exceeds the maximum permitted length'; |
|
| 224 | + case MAPI_E_STRING_TOO_LONG: return 'In the context of this method call, a string exceeds the maximum permitted length'; |
|
| 225 | 225 | |
| 226 | - case MAPI_E_UNKNOWN_FLAGS: return 'One or more values for a flags parameter were not valid'; |
|
| 226 | + case MAPI_E_UNKNOWN_FLAGS: return 'One or more values for a flags parameter were not valid'; |
|
| 227 | 227 | |
| 228 | - case MAPI_E_INVALID_ENTRYID: return 'invalid entryid'; |
|
| 228 | + case MAPI_E_INVALID_ENTRYID: return 'invalid entryid'; |
|
| 229 | 229 | |
| 230 | - case MAPI_E_INVALID_OBJECT: return 'A method call was made using a reference to an object that has been destroyed or is not in a viable state'; |
|
| 230 | + case MAPI_E_INVALID_OBJECT: return 'A method call was made using a reference to an object that has been destroyed or is not in a viable state'; |
|
| 231 | 231 | |
| 232 | - case MAPI_E_OBJECT_CHANGED: return 'An attempt to commit changes failed because the object was changed separately'; |
|
| 232 | + case MAPI_E_OBJECT_CHANGED: return 'An attempt to commit changes failed because the object was changed separately'; |
|
| 233 | 233 | |
| 234 | - case MAPI_E_OBJECT_DELETED: return 'An operation failed because the object was deleted separately'; |
|
| 234 | + case MAPI_E_OBJECT_DELETED: return 'An operation failed because the object was deleted separately'; |
|
| 235 | 235 | |
| 236 | - case MAPI_E_BUSY: return 'A table operation failed because a separate operation was in progress at the same time'; |
|
| 236 | + case MAPI_E_BUSY: return 'A table operation failed because a separate operation was in progress at the same time'; |
|
| 237 | 237 | |
| 238 | - case MAPI_E_NOT_ENOUGH_DISK: return 'Not enough disk space was available to complete the operation'; |
|
| 238 | + case MAPI_E_NOT_ENOUGH_DISK: return 'Not enough disk space was available to complete the operation'; |
|
| 239 | 239 | |
| 240 | - case MAPI_E_NOT_ENOUGH_RESOURCES: return 'Not enough system resources were available to complete the operation'; |
|
| 240 | + case MAPI_E_NOT_ENOUGH_RESOURCES: return 'Not enough system resources were available to complete the operation'; |
|
| 241 | 241 | |
| 242 | - case MAPI_E_NOT_FOUND: return 'The requested object could not be found at the server'; |
|
| 242 | + case MAPI_E_NOT_FOUND: return 'The requested object could not be found at the server'; |
|
| 243 | 243 | |
| 244 | - case MAPI_E_VERSION: return 'Client and server versions are not compatible'; |
|
| 244 | + case MAPI_E_VERSION: return 'Client and server versions are not compatible'; |
|
| 245 | 245 | |
| 246 | - case MAPI_E_LOGON_FAILED: return 'A client was unable to log on to the server'; |
|
| 246 | + case MAPI_E_LOGON_FAILED: return 'A client was unable to log on to the server'; |
|
| 247 | 247 | |
| 248 | - case MAPI_E_SESSION_LIMIT: return 'A server or service is unable to create any more sessions'; |
|
| 248 | + case MAPI_E_SESSION_LIMIT: return 'A server or service is unable to create any more sessions'; |
|
| 249 | 249 | |
| 250 | - case MAPI_E_USER_CANCEL: return 'An operation failed because a user cancelled it'; |
|
| 250 | + case MAPI_E_USER_CANCEL: return 'An operation failed because a user cancelled it'; |
|
| 251 | 251 | |
| 252 | - case MAPI_E_UNABLE_TO_ABORT: return 'A ropAbort or ropAbortSubmit ROP request was unsuccessful'; |
|
| 252 | + case MAPI_E_UNABLE_TO_ABORT: return 'A ropAbort or ropAbortSubmit ROP request was unsuccessful'; |
|
| 253 | 253 | |
| 254 | - case MAPI_E_NETWORK_ERROR: return 'An operation was unsuccessful because of a problem with network operations or services'; |
|
| 254 | + case MAPI_E_NETWORK_ERROR: return 'An operation was unsuccessful because of a problem with network operations or services'; |
|
| 255 | 255 | |
| 256 | - case MAPI_E_DISK_ERROR: return 'There was a problem writing to or reading from disk'; |
|
| 256 | + case MAPI_E_DISK_ERROR: return 'There was a problem writing to or reading from disk'; |
|
| 257 | 257 | |
| 258 | - case MAPI_E_TOO_COMPLEX: return 'The operation requested is too complex for the server to handle (often w.r.t. restrictions)'; |
|
| 258 | + case MAPI_E_TOO_COMPLEX: return 'The operation requested is too complex for the server to handle (often w.r.t. restrictions)'; |
|
| 259 | 259 | |
| 260 | - case MAPI_E_BAD_COLUMN: return 'The column requested is not allowed in this type of table'; |
|
| 260 | + case MAPI_E_BAD_COLUMN: return 'The column requested is not allowed in this type of table'; |
|
| 261 | 261 | |
| 262 | - case MAPI_E_EXTENDED_ERROR: return 'extended error'; |
|
| 262 | + case MAPI_E_EXTENDED_ERROR: return 'extended error'; |
|
| 263 | 263 | |
| 264 | - case MAPI_E_COMPUTED: return 'A property cannot be updated because it is read-only, computed by the server'; |
|
| 264 | + case MAPI_E_COMPUTED: return 'A property cannot be updated because it is read-only, computed by the server'; |
|
| 265 | 265 | |
| 266 | - case MAPI_E_CORRUPT_DATA: return 'There is an internal inconsistency in a database, or in a complex property value'; |
|
| 266 | + case MAPI_E_CORRUPT_DATA: return 'There is an internal inconsistency in a database, or in a complex property value'; |
|
| 267 | 267 | |
| 268 | - case MAPI_E_UNCONFIGURED: return 'unconfigured'; |
|
| 268 | + case MAPI_E_UNCONFIGURED: return 'unconfigured'; |
|
| 269 | 269 | |
| 270 | - case MAPI_E_FAILONEPROVIDER: return 'failoneprovider'; |
|
| 270 | + case MAPI_E_FAILONEPROVIDER: return 'failoneprovider'; |
|
| 271 | 271 | |
| 272 | - case MAPI_E_UNKNOWN_CPID: return 'The server is not configured to support the code page requested by the client'; |
|
| 272 | + case MAPI_E_UNKNOWN_CPID: return 'The server is not configured to support the code page requested by the client'; |
|
| 273 | 273 | |
| 274 | - case MAPI_E_UNKNOWN_LCID: return 'The server is not configured to support the locale requested by the client'; |
|
| 274 | + case MAPI_E_UNKNOWN_LCID: return 'The server is not configured to support the locale requested by the client'; |
|
| 275 | 275 | |
| 276 | - case MAPI_E_PASSWORD_CHANGE_REQUIRED: return 'password change required'; |
|
| 276 | + case MAPI_E_PASSWORD_CHANGE_REQUIRED: return 'password change required'; |
|
| 277 | 277 | |
| 278 | - case MAPI_E_PASSWORD_EXPIRED: return 'password expired'; |
|
| 278 | + case MAPI_E_PASSWORD_EXPIRED: return 'password expired'; |
|
| 279 | 279 | |
| 280 | - case MAPI_E_INVALID_WORKSTATION_ACCOUNT: return 'invalid workstation account'; |
|
| 280 | + case MAPI_E_INVALID_WORKSTATION_ACCOUNT: return 'invalid workstation account'; |
|
| 281 | 281 | |
| 282 | - case MAPI_E_INVALID_ACCESS_TIME: return 'The operation failed due to clock skew between servers'; |
|
| 282 | + case MAPI_E_INVALID_ACCESS_TIME: return 'The operation failed due to clock skew between servers'; |
|
| 283 | 283 | |
| 284 | - case MAPI_E_ACCOUNT_DISABLED: return 'account disabled'; |
|
| 284 | + case MAPI_E_ACCOUNT_DISABLED: return 'account disabled'; |
|
| 285 | 285 | |
| 286 | - case MAPI_E_END_OF_SESSION: return 'The server session has been destroyed, possibly by a server restart'; |
|
| 286 | + case MAPI_E_END_OF_SESSION: return 'The server session has been destroyed, possibly by a server restart'; |
|
| 287 | 287 | |
| 288 | - case MAPI_E_UNKNOWN_ENTRYID: return 'The EntryID passed to OpenEntry was created by a different MAPI provider'; |
|
| 288 | + case MAPI_E_UNKNOWN_ENTRYID: return 'The EntryID passed to OpenEntry was created by a different MAPI provider'; |
|
| 289 | 289 | |
| 290 | - case MAPI_E_MISSING_REQUIRED_COLUMN: return 'missing required column'; |
|
| 290 | + case MAPI_E_MISSING_REQUIRED_COLUMN: return 'missing required column'; |
|
| 291 | 291 | |
| 292 | - case MAPI_W_NO_SERVICE: return 'no service'; |
|
| 292 | + case MAPI_W_NO_SERVICE: return 'no service'; |
|
| 293 | 293 | |
| 294 | - case MAPI_E_BAD_VALUE: return 'bad value'; |
|
| 294 | + case MAPI_E_BAD_VALUE: return 'bad value'; |
|
| 295 | 295 | |
| 296 | - case MAPI_E_INVALID_TYPE: return 'invalid type'; |
|
| 296 | + case MAPI_E_INVALID_TYPE: return 'invalid type'; |
|
| 297 | 297 | |
| 298 | - case MAPI_E_TYPE_NO_SUPPORT: return 'type no support'; |
|
| 298 | + case MAPI_E_TYPE_NO_SUPPORT: return 'type no support'; |
|
| 299 | 299 | |
| 300 | - case MAPI_E_UNEXPECTED_TYPE: return 'unexpected_type'; |
|
| 300 | + case MAPI_E_UNEXPECTED_TYPE: return 'unexpected_type'; |
|
| 301 | 301 | |
| 302 | - case MAPI_E_TOO_BIG: return 'The table is too big for the requested operation to complete'; |
|
| 302 | + case MAPI_E_TOO_BIG: return 'The table is too big for the requested operation to complete'; |
|
| 303 | 303 | |
| 304 | - case MAPI_E_DECLINE_COPY: return 'The provider implements this method by calling a support object method, and the caller has passed the MAPI_DECLINE_OK flag'; |
|
| 304 | + case MAPI_E_DECLINE_COPY: return 'The provider implements this method by calling a support object method, and the caller has passed the MAPI_DECLINE_OK flag'; |
|
| 305 | 305 | |
| 306 | - case MAPI_E_UNEXPECTED_ID: return 'unexpected id'; |
|
| 306 | + case MAPI_E_UNEXPECTED_ID: return 'unexpected id'; |
|
| 307 | 307 | |
| 308 | - case MAPI_W_ERRORS_RETURNED: return 'The call succeeded, but the message store provider has error information available'; |
|
| 308 | + case MAPI_W_ERRORS_RETURNED: return 'The call succeeded, but the message store provider has error information available'; |
|
| 309 | 309 | |
| 310 | - case MAPI_E_UNABLE_TO_COMPLETE: return 'A complex operation such as building a table row set could not be completed'; |
|
| 310 | + case MAPI_E_UNABLE_TO_COMPLETE: return 'A complex operation such as building a table row set could not be completed'; |
|
| 311 | 311 | |
| 312 | - case MAPI_E_TIMEOUT: return 'An asynchronous operation did not succeed within the specified time-out'; |
|
| 312 | + case MAPI_E_TIMEOUT: return 'An asynchronous operation did not succeed within the specified time-out'; |
|
| 313 | 313 | |
| 314 | - case MAPI_E_TABLE_EMPTY: return 'A table essential to the operation is empty'; |
|
| 314 | + case MAPI_E_TABLE_EMPTY: return 'A table essential to the operation is empty'; |
|
| 315 | 315 | |
| 316 | - case MAPI_E_TABLE_TOO_BIG: return 'The table is too big for the requested operation to complete'; |
|
| 316 | + case MAPI_E_TABLE_TOO_BIG: return 'The table is too big for the requested operation to complete'; |
|
| 317 | 317 | |
| 318 | - case MAPI_E_INVALID_BOOKMARK: return 'The bookmark passed to a table operation was not created on the same table'; |
|
| 318 | + case MAPI_E_INVALID_BOOKMARK: return 'The bookmark passed to a table operation was not created on the same table'; |
|
| 319 | 319 | |
| 320 | - case MAPI_W_POSITION_CHANGED: return 'position changed'; |
|
| 320 | + case MAPI_W_POSITION_CHANGED: return 'position changed'; |
|
| 321 | 321 | |
| 322 | - case MAPI_W_APPROX_COUNT: return 'approx count'; |
|
| 322 | + case MAPI_W_APPROX_COUNT: return 'approx count'; |
|
| 323 | 323 | |
| 324 | - case MAPI_E_WAIT: return 'A wait time-out has expired'; |
|
| 324 | + case MAPI_E_WAIT: return 'A wait time-out has expired'; |
|
| 325 | 325 | |
| 326 | - case MAPI_E_CANCEL: return 'The operation had to be canceled'; |
|
| 326 | + case MAPI_E_CANCEL: return 'The operation had to be canceled'; |
|
| 327 | 327 | |
| 328 | - case MAPI_E_NOT_ME: return 'not me'; |
|
| 328 | + case MAPI_E_NOT_ME: return 'not me'; |
|
| 329 | 329 | |
| 330 | - case MAPI_W_CANCEL_MESSAGE: return 'cancel message'; |
|
| 330 | + case MAPI_W_CANCEL_MESSAGE: return 'cancel message'; |
|
| 331 | 331 | |
| 332 | - case MAPI_E_CORRUPT_STORE: return 'corrupt store'; |
|
| 332 | + case MAPI_E_CORRUPT_STORE: return 'corrupt store'; |
|
| 333 | 333 | |
| 334 | - case MAPI_E_NOT_IN_QUEUE: return 'not in queue'; |
|
| 334 | + case MAPI_E_NOT_IN_QUEUE: return 'not in queue'; |
|
| 335 | 335 | |
| 336 | - case MAPI_E_NO_SUPPRESS: return 'The server does not support the suppression of read receipts'; |
|
| 336 | + case MAPI_E_NO_SUPPRESS: return 'The server does not support the suppression of read receipts'; |
|
| 337 | 337 | |
| 338 | - case MAPI_E_COLLISION: return 'A folder or item cannot be created because one with the same name or other criteria already exists'; |
|
| 338 | + case MAPI_E_COLLISION: return 'A folder or item cannot be created because one with the same name or other criteria already exists'; |
|
| 339 | 339 | |
| 340 | - case MAPI_E_NOT_INITIALIZED: return 'The subsystem is not ready'; |
|
| 340 | + case MAPI_E_NOT_INITIALIZED: return 'The subsystem is not ready'; |
|
| 341 | 341 | |
| 342 | - case MAPI_E_NON_STANDARD: return 'non standard'; |
|
| 342 | + case MAPI_E_NON_STANDARD: return 'non standard'; |
|
| 343 | 343 | |
| 344 | - case MAPI_E_NO_RECIPIENTS: return 'A message cannot be sent because it has no recipients'; |
|
| 344 | + case MAPI_E_NO_RECIPIENTS: return 'A message cannot be sent because it has no recipients'; |
|
| 345 | 345 | |
| 346 | - case MAPI_E_SUBMITTED: return 'A message cannot be opened for modification because it has already been sent'; |
|
| 346 | + case MAPI_E_SUBMITTED: return 'A message cannot be opened for modification because it has already been sent'; |
|
| 347 | 347 | |
| 348 | - case MAPI_E_HAS_FOLDERS: return 'A folder cannot be deleted because it still contains subfolders'; |
|
| 348 | + case MAPI_E_HAS_FOLDERS: return 'A folder cannot be deleted because it still contains subfolders'; |
|
| 349 | 349 | |
| 350 | - case MAPI_E_HAS_MESSAGES: return 'A folder cannot be deleted because it still contains messages'; |
|
| 350 | + case MAPI_E_HAS_MESSAGES: return 'A folder cannot be deleted because it still contains messages'; |
|
| 351 | 351 | |
| 352 | - case MAPI_E_FOLDER_CYCLE: return 'A folder move or copy operation would create a cycle'; |
|
| 352 | + case MAPI_E_FOLDER_CYCLE: return 'A folder move or copy operation would create a cycle'; |
|
| 353 | 353 | |
| 354 | - case MAPI_W_PARTIAL_COMPLETION: return 'The call succeeded, but not all entries were successfully operated on'; |
|
| 354 | + case MAPI_W_PARTIAL_COMPLETION: return 'The call succeeded, but not all entries were successfully operated on'; |
|
| 355 | 355 | |
| 356 | - case MAPI_E_AMBIGUOUS_RECIP: return 'An unresolved recipient matches more than one directory entry'; |
|
| 356 | + case MAPI_E_AMBIGUOUS_RECIP: return 'An unresolved recipient matches more than one directory entry'; |
|
| 357 | 357 | |
| 358 | - case MAPI_E_STORE_FULL: return 'Store full'; |
|
| 358 | + case MAPI_E_STORE_FULL: return 'Store full'; |
|
| 359 | 359 | |
| 360 | - default: return sprintf('%xh', $e); |
|
| 360 | + default: return sprintf('%xh', $e); |
|
| 361 | 361 | } |
| 362 | 362 | } |
@@ -1718,186 +1718,186 @@ |
||
| 1718 | 1718 | // Loop through the entire recurrence range of dates, and check for each occurrence whether it is in the view range. |
| 1719 | 1719 | |
| 1720 | 1720 | switch ($this->recur['type']) { |
| 1721 | - case 10: |
|
| 1722 | - // Daily |
|
| 1723 | - if ($this->recur['everyn'] <= 0) { |
|
| 1724 | - $this->recur['everyn'] = 1440; |
|
| 1725 | - } |
|
| 1726 | - |
|
| 1727 | - if (0 == $this->recur['subtype']) { |
|
| 1728 | - // Every Nth day |
|
| 1729 | - for ($now = $daystart; $now <= $dayend && (0 == $limit || count($items) < $limit); $now += 60 * $this->recur['everyn']) { |
|
| 1730 | - $this->processOccurrenceItem($items, $start, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1721 | + case 10: |
|
| 1722 | + // Daily |
|
| 1723 | + if ($this->recur['everyn'] <= 0) { |
|
| 1724 | + $this->recur['everyn'] = 1440; |
|
| 1731 | 1725 | } |
| 1732 | - } else { |
|
| 1733 | - // Every workday |
|
| 1734 | - for ($now = $daystart; $now <= $dayend && (0 == $limit || count($items) < $limit); $now += 60 * 1440) { |
|
| 1735 | - $nowtime = $this->gmtime($now); |
|
| 1736 | - if ($nowtime['tm_wday'] > 0 && $nowtime['tm_wday'] < 6) { // only add items in the given timespace |
|
| 1726 | + |
|
| 1727 | + if (0 == $this->recur['subtype']) { |
|
| 1728 | + // Every Nth day |
|
| 1729 | + for ($now = $daystart; $now <= $dayend && (0 == $limit || count($items) < $limit); $now += 60 * $this->recur['everyn']) { |
|
| 1737 | 1730 | $this->processOccurrenceItem($items, $start, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
| 1738 | 1731 | } |
| 1732 | + } else { |
|
| 1733 | + // Every workday |
|
| 1734 | + for ($now = $daystart; $now <= $dayend && (0 == $limit || count($items) < $limit); $now += 60 * 1440) { |
|
| 1735 | + $nowtime = $this->gmtime($now); |
|
| 1736 | + if ($nowtime['tm_wday'] > 0 && $nowtime['tm_wday'] < 6) { // only add items in the given timespace |
|
| 1737 | + $this->processOccurrenceItem($items, $start, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1738 | + } |
|
| 1739 | + } |
|
| 1739 | 1740 | } |
| 1740 | - } |
|
| 1741 | 1741 | |
| 1742 | - break; |
|
| 1743 | - |
|
| 1744 | - case 11: |
|
| 1745 | - // Weekly |
|
| 1746 | - if ($this->recur['everyn'] <= 0) { |
|
| 1747 | - $this->recur['everyn'] = 1; |
|
| 1748 | - } |
|
| 1742 | + break; |
|
| 1749 | 1743 | |
| 1750 | - // If sliding flag is set then move to 'n' weeks |
|
| 1751 | - if ($this->recur['regen']) { |
|
| 1752 | - $daystart += (60 * 60 * 24 * 7 * $this->recur['everyn']); |
|
| 1753 | - } |
|
| 1744 | + case 11: |
|
| 1745 | + // Weekly |
|
| 1746 | + if ($this->recur['everyn'] <= 0) { |
|
| 1747 | + $this->recur['everyn'] = 1; |
|
| 1748 | + } |
|
| 1754 | 1749 | |
| 1755 | - for ($now = $daystart; $now <= $dayend && (0 == $limit || count($items) < $limit); $now += (60 * 60 * 24 * 7 * $this->recur['everyn'])) { |
|
| 1750 | + // If sliding flag is set then move to 'n' weeks |
|
| 1756 | 1751 | if ($this->recur['regen']) { |
| 1757 | - $this->processOccurrenceItem($items, $start, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1758 | - } else { |
|
| 1759 | - // Loop through the whole following week to the first occurrence of the week, add each day that is specified |
|
| 1760 | - for ($wday = 0; $wday < 7; ++$wday) { |
|
| 1761 | - $daynow = $now + $wday * 60 * 60 * 24; |
|
| 1762 | - // checks weather the next coming day in recurring pattern is less than or equal to end day of the recurring item |
|
| 1763 | - if ($daynow <= $dayend) { |
|
| 1764 | - $nowtime = $this->gmtime($daynow); // Get the weekday of the current day |
|
| 1765 | - if (($this->recur['weekdays'] & (1 << $nowtime['tm_wday']))) { // Selected ? |
|
| 1766 | - $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1752 | + $daystart += (60 * 60 * 24 * 7 * $this->recur['everyn']); |
|
| 1753 | + } |
|
| 1754 | + |
|
| 1755 | + for ($now = $daystart; $now <= $dayend && (0 == $limit || count($items) < $limit); $now += (60 * 60 * 24 * 7 * $this->recur['everyn'])) { |
|
| 1756 | + if ($this->recur['regen']) { |
|
| 1757 | + $this->processOccurrenceItem($items, $start, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1758 | + } else { |
|
| 1759 | + // Loop through the whole following week to the first occurrence of the week, add each day that is specified |
|
| 1760 | + for ($wday = 0; $wday < 7; ++$wday) { |
|
| 1761 | + $daynow = $now + $wday * 60 * 60 * 24; |
|
| 1762 | + // checks weather the next coming day in recurring pattern is less than or equal to end day of the recurring item |
|
| 1763 | + if ($daynow <= $dayend) { |
|
| 1764 | + $nowtime = $this->gmtime($daynow); // Get the weekday of the current day |
|
| 1765 | + if (($this->recur['weekdays'] & (1 << $nowtime['tm_wday']))) { // Selected ? |
|
| 1766 | + $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1767 | + } |
|
| 1767 | 1768 | } |
| 1768 | 1769 | } |
| 1769 | 1770 | } |
| 1770 | 1771 | } |
| 1771 | - } |
|
| 1772 | 1772 | |
| 1773 | - break; |
|
| 1774 | - |
|
| 1775 | - case 12: |
|
| 1776 | - // Monthly |
|
| 1777 | - if ($this->recur['everyn'] <= 0) { |
|
| 1778 | - $this->recur['everyn'] = 1; |
|
| 1779 | - } |
|
| 1773 | + break; |
|
| 1780 | 1774 | |
| 1781 | - // Loop through all months from start to end of occurrence, starting at beginning of first month |
|
| 1782 | - for ($now = $this->monthStartOf($daystart); $now <= $dayend && (0 == $limit || count($items) < $limit); $now += $this->daysInMonth($now, $this->recur['everyn']) * 24 * 60 * 60) { |
|
| 1783 | - if (isset($this->recur['monthday']) && ('undefined' != $this->recur['monthday']) && !$this->recur['regen']) { // Day M of every N months |
|
| 1784 | - $difference = 1; |
|
| 1785 | - if ($this->daysInMonth($now, $this->recur['everyn']) < $this->recur['monthday']) { |
|
| 1786 | - $difference = $this->recur['monthday'] - $this->daysInMonth($now, $this->recur['everyn']) + 1; |
|
| 1787 | - } |
|
| 1788 | - $daynow = $now + (($this->recur['monthday'] - $difference) * 24 * 60 * 60); |
|
| 1789 | - // checks weather the next coming day in recurrence pattern is less than or equal to end day of the recurring item |
|
| 1790 | - if ($daynow <= $dayend) { |
|
| 1791 | - $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1792 | - } |
|
| 1793 | - } elseif (isset($this->recur['nday'], $this->recur['weekdays'])) { // Nth [weekday] of every N months |
|
| 1794 | - // Sanitize input |
|
| 1795 | - if (0 == $this->recur['weekdays']) { |
|
| 1796 | - $this->recur['weekdays'] = 1; |
|
| 1797 | - } |
|
| 1775 | + case 12: |
|
| 1776 | + // Monthly |
|
| 1777 | + if ($this->recur['everyn'] <= 0) { |
|
| 1778 | + $this->recur['everyn'] = 1; |
|
| 1779 | + } |
|
| 1798 | 1780 | |
| 1799 | - // If nday is not set to the last day in the month |
|
| 1800 | - if ($this->recur['nday'] < 5) { |
|
| 1801 | - // keep the track of no. of time correct selection pattern(like 2nd weekday, 4th fiday, etc.)is matched |
|
| 1802 | - $ndaycounter = 0; |
|
| 1803 | - // Find matching weekday in this month |
|
| 1804 | - for ($day = 0, $total = $this->daysInMonth($now, 1); $day < $total; ++$day) { |
|
| 1805 | - $daynow = $now + $day * 60 * 60 * 24; |
|
| 1806 | - $nowtime = $this->gmtime($daynow); // Get the weekday of the current day |
|
| 1781 | + // Loop through all months from start to end of occurrence, starting at beginning of first month |
|
| 1782 | + for ($now = $this->monthStartOf($daystart); $now <= $dayend && (0 == $limit || count($items) < $limit); $now += $this->daysInMonth($now, $this->recur['everyn']) * 24 * 60 * 60) { |
|
| 1783 | + if (isset($this->recur['monthday']) && ('undefined' != $this->recur['monthday']) && !$this->recur['regen']) { // Day M of every N months |
|
| 1784 | + $difference = 1; |
|
| 1785 | + if ($this->daysInMonth($now, $this->recur['everyn']) < $this->recur['monthday']) { |
|
| 1786 | + $difference = $this->recur['monthday'] - $this->daysInMonth($now, $this->recur['everyn']) + 1; |
|
| 1787 | + } |
|
| 1788 | + $daynow = $now + (($this->recur['monthday'] - $difference) * 24 * 60 * 60); |
|
| 1789 | + // checks weather the next coming day in recurrence pattern is less than or equal to end day of the recurring item |
|
| 1790 | + if ($daynow <= $dayend) { |
|
| 1791 | + $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1792 | + } |
|
| 1793 | + } elseif (isset($this->recur['nday'], $this->recur['weekdays'])) { // Nth [weekday] of every N months |
|
| 1794 | + // Sanitize input |
|
| 1795 | + if (0 == $this->recur['weekdays']) { |
|
| 1796 | + $this->recur['weekdays'] = 1; |
|
| 1797 | + } |
|
| 1807 | 1798 | |
| 1808 | - if ($this->recur['weekdays'] & (1 << $nowtime['tm_wday'])) { // Selected ? |
|
| 1809 | - ++$ndaycounter; |
|
| 1810 | - } |
|
| 1811 | - // check the selected pattern is same as asked Nth weekday,If so set the firstday |
|
| 1812 | - if ($this->recur['nday'] == $ndaycounter) { |
|
| 1813 | - $firstday = $day; |
|
| 1799 | + // If nday is not set to the last day in the month |
|
| 1800 | + if ($this->recur['nday'] < 5) { |
|
| 1801 | + // keep the track of no. of time correct selection pattern(like 2nd weekday, 4th fiday, etc.)is matched |
|
| 1802 | + $ndaycounter = 0; |
|
| 1803 | + // Find matching weekday in this month |
|
| 1804 | + for ($day = 0, $total = $this->daysInMonth($now, 1); $day < $total; ++$day) { |
|
| 1805 | + $daynow = $now + $day * 60 * 60 * 24; |
|
| 1806 | + $nowtime = $this->gmtime($daynow); // Get the weekday of the current day |
|
| 1807 | + |
|
| 1808 | + if ($this->recur['weekdays'] & (1 << $nowtime['tm_wday'])) { // Selected ? |
|
| 1809 | + ++$ndaycounter; |
|
| 1810 | + } |
|
| 1811 | + // check the selected pattern is same as asked Nth weekday,If so set the firstday |
|
| 1812 | + if ($this->recur['nday'] == $ndaycounter) { |
|
| 1813 | + $firstday = $day; |
|
| 1814 | 1814 | |
| 1815 | - break; |
|
| 1815 | + break; |
|
| 1816 | + } |
|
| 1816 | 1817 | } |
| 1817 | - } |
|
| 1818 | - // $firstday is the day of the month on which the asked pattern of nth weekday matches |
|
| 1819 | - $daynow = $now + $firstday * 60 * 60 * 24; |
|
| 1820 | - } else { |
|
| 1821 | - // Find last day in the month ($now is the firstday of the month) |
|
| 1822 | - $NumDaysInMonth = $this->daysInMonth($now, 1); |
|
| 1823 | - $daynow = $now + (($NumDaysInMonth - 1) * 24 * 60 * 60); |
|
| 1818 | + // $firstday is the day of the month on which the asked pattern of nth weekday matches |
|
| 1819 | + $daynow = $now + $firstday * 60 * 60 * 24; |
|
| 1820 | + } else { |
|
| 1821 | + // Find last day in the month ($now is the firstday of the month) |
|
| 1822 | + $NumDaysInMonth = $this->daysInMonth($now, 1); |
|
| 1823 | + $daynow = $now + (($NumDaysInMonth - 1) * 24 * 60 * 60); |
|
| 1824 | 1824 | |
| 1825 | - $nowtime = $this->gmtime($daynow); |
|
| 1826 | - while (($this->recur['weekdays'] & (1 << $nowtime['tm_wday'])) == 0) { |
|
| 1827 | - $daynow -= 86400; |
|
| 1828 | 1825 | $nowtime = $this->gmtime($daynow); |
| 1826 | + while (($this->recur['weekdays'] & (1 << $nowtime['tm_wday'])) == 0) { |
|
| 1827 | + $daynow -= 86400; |
|
| 1828 | + $nowtime = $this->gmtime($daynow); |
|
| 1829 | + } |
|
| 1829 | 1830 | } |
| 1830 | - } |
|
| 1831 | 1831 | |
| 1832 | - /* |
|
| 1832 | + /* |
|
| 1833 | 1833 | * checks weather the next coming day in recurrence pattern is less than or equal to end day of the * recurring item.Also check weather the coming day in recurrence pattern is greater than or equal to start * of recurring pattern, so that appointment that fall under the recurrence range are only displayed. |
| 1834 | 1834 | */ |
| 1835 | - if ($daynow <= $dayend && $daynow >= $daystart) { |
|
| 1836 | - $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1837 | - } |
|
| 1838 | - } elseif ($this->recur['regen']) { |
|
| 1839 | - $next_month_start = $now + ($this->daysInMonth($now, 1) * 24 * 60 * 60); |
|
| 1840 | - $now = $daystart + ($this->daysInMonth($next_month_start, $this->recur['everyn']) * 24 * 60 * 60); |
|
| 1835 | + if ($daynow <= $dayend && $daynow >= $daystart) { |
|
| 1836 | + $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1837 | + } |
|
| 1838 | + } elseif ($this->recur['regen']) { |
|
| 1839 | + $next_month_start = $now + ($this->daysInMonth($now, 1) * 24 * 60 * 60); |
|
| 1840 | + $now = $daystart + ($this->daysInMonth($next_month_start, $this->recur['everyn']) * 24 * 60 * 60); |
|
| 1841 | 1841 | |
| 1842 | - if ($now <= $dayend) { |
|
| 1843 | - $this->processOccurrenceItem($items, $daystart, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1842 | + if ($now <= $dayend) { |
|
| 1843 | + $this->processOccurrenceItem($items, $daystart, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1844 | + } |
|
| 1844 | 1845 | } |
| 1845 | 1846 | } |
| 1846 | - } |
|
| 1847 | 1847 | |
| 1848 | - break; |
|
| 1848 | + break; |
|
| 1849 | 1849 | |
| 1850 | - case 13: |
|
| 1851 | - // Yearly |
|
| 1852 | - if ($this->recur['everyn'] <= 0) { |
|
| 1853 | - $this->recur['everyn'] = 12; |
|
| 1854 | - } |
|
| 1850 | + case 13: |
|
| 1851 | + // Yearly |
|
| 1852 | + if ($this->recur['everyn'] <= 0) { |
|
| 1853 | + $this->recur['everyn'] = 12; |
|
| 1854 | + } |
|
| 1855 | 1855 | |
| 1856 | - for ($now = $this->yearStartOf($daystart); $now <= $dayend && (0 == $limit || count($items) < $limit); $now += $this->daysInMonth($now, $this->recur['everyn']) * 24 * 60 * 60) { |
|
| 1857 | - if (isset($this->recur['monthday']) && !$this->recur['regen']) { // same as monthly, but in a specific month |
|
| 1858 | - // recur["month"] is in minutes since the beginning of the year |
|
| 1859 | - $month = $this->monthOfYear($this->recur['month']); // $month is now month of year [0..11] |
|
| 1860 | - $monthday = $this->recur['monthday']; // $monthday is day of the month [1..31] |
|
| 1861 | - $monthstart = $now + $this->daysInMonth($now, $month) * 24 * 60 * 60; // $monthstart is the timestamp of the beginning of the month |
|
| 1862 | - if ($monthday > $this->daysInMonth($monthstart, 1)) { |
|
| 1863 | - $monthday = $this->daysInMonth($monthstart, 1); |
|
| 1864 | - } // Cap $monthday on month length (eg 28 feb instead of 29 feb) |
|
| 1865 | - $daynow = $monthstart + ($monthday - 1) * 24 * 60 * 60; |
|
| 1866 | - $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1867 | - } elseif (isset($this->recur['nday'], $this->recur['weekdays'])) { // Nth [weekday] in month X of every N years |
|
| 1868 | - // Go the correct month |
|
| 1869 | - $monthnow = $now + $this->daysInMonth($now, $this->monthOfYear($this->recur['month'])) * 24 * 60 * 60; |
|
| 1870 | - |
|
| 1871 | - // Find first matching weekday in this month |
|
| 1872 | - for ($wday = 0; $wday < 7; ++$wday) { |
|
| 1873 | - $daynow = $monthnow + $wday * 60 * 60 * 24; |
|
| 1874 | - $nowtime = $this->gmtime($daynow); // Get the weekday of the current day |
|
| 1875 | - |
|
| 1876 | - if ($this->recur['weekdays'] & (1 << $nowtime['tm_wday'])) { // Selected ? |
|
| 1877 | - $firstday = $wday; |
|
| 1856 | + for ($now = $this->yearStartOf($daystart); $now <= $dayend && (0 == $limit || count($items) < $limit); $now += $this->daysInMonth($now, $this->recur['everyn']) * 24 * 60 * 60) { |
|
| 1857 | + if (isset($this->recur['monthday']) && !$this->recur['regen']) { // same as monthly, but in a specific month |
|
| 1858 | + // recur["month"] is in minutes since the beginning of the year |
|
| 1859 | + $month = $this->monthOfYear($this->recur['month']); // $month is now month of year [0..11] |
|
| 1860 | + $monthday = $this->recur['monthday']; // $monthday is day of the month [1..31] |
|
| 1861 | + $monthstart = $now + $this->daysInMonth($now, $month) * 24 * 60 * 60; // $monthstart is the timestamp of the beginning of the month |
|
| 1862 | + if ($monthday > $this->daysInMonth($monthstart, 1)) { |
|
| 1863 | + $monthday = $this->daysInMonth($monthstart, 1); |
|
| 1864 | + } // Cap $monthday on month length (eg 28 feb instead of 29 feb) |
|
| 1865 | + $daynow = $monthstart + ($monthday - 1) * 24 * 60 * 60; |
|
| 1866 | + $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1867 | + } elseif (isset($this->recur['nday'], $this->recur['weekdays'])) { // Nth [weekday] in month X of every N years |
|
| 1868 | + // Go the correct month |
|
| 1869 | + $monthnow = $now + $this->daysInMonth($now, $this->monthOfYear($this->recur['month'])) * 24 * 60 * 60; |
|
| 1878 | 1870 | |
| 1879 | - break; |
|
| 1871 | + // Find first matching weekday in this month |
|
| 1872 | + for ($wday = 0; $wday < 7; ++$wday) { |
|
| 1873 | + $daynow = $monthnow + $wday * 60 * 60 * 24; |
|
| 1874 | + $nowtime = $this->gmtime($daynow); // Get the weekday of the current day |
|
| 1875 | + |
|
| 1876 | + if ($this->recur['weekdays'] & (1 << $nowtime['tm_wday'])) { // Selected ? |
|
| 1877 | + $firstday = $wday; |
|
| 1878 | + |
|
| 1879 | + break; |
|
| 1880 | + } |
|
| 1880 | 1881 | } |
| 1881 | - } |
|
| 1882 | 1882 | |
| 1883 | - // Same as above (monthly) |
|
| 1884 | - $daynow = $monthnow + ($firstday + ($this->recur['nday'] - 1) * 7) * 60 * 60 * 24; |
|
| 1883 | + // Same as above (monthly) |
|
| 1884 | + $daynow = $monthnow + ($firstday + ($this->recur['nday'] - 1) * 7) * 60 * 60 * 24; |
|
| 1885 | 1885 | |
| 1886 | - while ($this->monthStartOf($daynow) != $this->monthStartOf($monthnow)) { |
|
| 1887 | - $daynow -= 7 * 60 * 60 * 24; |
|
| 1888 | - } |
|
| 1886 | + while ($this->monthStartOf($daynow) != $this->monthStartOf($monthnow)) { |
|
| 1887 | + $daynow -= 7 * 60 * 60 * 24; |
|
| 1888 | + } |
|
| 1889 | 1889 | |
| 1890 | - $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1891 | - } elseif ($this->recur['regen']) { |
|
| 1892 | - $year_starttime = $this->gmtime($now); |
|
| 1893 | - $is_next_leapyear = $this->isLeapYear($year_starttime['tm_year'] + 1900 + 1); // +1 next year |
|
| 1894 | - $now = $daystart + ($is_next_leapyear ? 31622400 /* Leap year in seconds */ : 31536000 /* year in seconds */); |
|
| 1890 | + $this->processOccurrenceItem($items, $start, $end, $daynow, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1891 | + } elseif ($this->recur['regen']) { |
|
| 1892 | + $year_starttime = $this->gmtime($now); |
|
| 1893 | + $is_next_leapyear = $this->isLeapYear($year_starttime['tm_year'] + 1900 + 1); // +1 next year |
|
| 1894 | + $now = $daystart + ($is_next_leapyear ? 31622400 /* Leap year in seconds */ : 31536000 /* year in seconds */); |
|
| 1895 | 1895 | |
| 1896 | - if ($now <= $dayend) { |
|
| 1897 | - $this->processOccurrenceItem($items, $daystart, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1896 | + if ($now <= $dayend) { |
|
| 1897 | + $this->processOccurrenceItem($items, $daystart, $end, $now, $this->recur['startocc'], $this->recur['endocc'], $this->tz, $remindersonly); |
|
| 1898 | + } |
|
| 1898 | 1899 | } |
| 1899 | 1900 | } |
| 1900 | - } |
|
| 1901 | 1901 | } |
| 1902 | 1902 | // to get all exception items |
| 1903 | 1903 | if (!empty($this->recur['changed_occurrences'])) { |