Client::FindItem()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
nc 1
nop 1
1
<?php
2
/**
3
 * Contains \jamesiarmes\PhpEws\Client.
4
 */
5
6
namespace jamesiarmes\PhpEws;
7
8
use \jamesiarmes\PhpNtlm\SoapClient;
9
10
/**
11
 * Base class of the Exchange Web Services application.
12
 *
13
 * @package php-ews\Client
14
 *
15
 * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
16
 * @SuppressWarnings(PHPMD.ExcessiveClassLength)
17
 * @SuppressWarnings(PHPMD.TooManyMethods)
18
 */
19
class Client
20
{
21
    /**
22
     * Microsoft Exchange 2007
23
     *
24
     * @var string
25
     */
26
    const VERSION_2007 = 'Exchange2007';
27
28
    /**
29
     * Microsoft Exchange 2007 SP1
30
     *
31
     * @var string
32
     */
33
    const VERSION_2007_SP1 = 'Exchange2007_SP1';
34
35
    /**
36
     * Microsoft Exchange 2007 SP2
37
     *
38
     * @var string
39
     */
40
    const VERSION_2009 = 'Exchange2009';
41
42
    /**
43
     * Microsoft Exchange 2010
44
     *
45
     * @var string
46
     */
47
    const VERSION_2010 = 'Exchange2010';
48
49
    /**
50
     * Microsoft Exchange 2010 SP1
51
     *
52
     * @var string
53
     */
54
    const VERSION_2010_SP1 = 'Exchange2010_SP1';
55
56
    /**
57
     * Microsoft Exchange 2010 SP2
58
     *
59
     * @var string
60
     */
61
    const VERSION_2010_SP2 = 'Exchange2010_SP2';
62
63
    /**
64
     * Microsoft Exchange 2013.
65
     *
66
     * @var string
67
     */
68
    const VERSION_2013 = 'Exchange2013';
69
70
    /**
71
     * Microsoft Exchange 2013 SP1.
72
     *
73
     * @var string
74
     */
75
    const VERSION_2013_SP1 = 'Exchange2013_SP1';
76
77
    /**
78
     * Microsoft Exchange 2016.
79
     *
80
     * @var string
81
     */
82
    const VERSION_2016 = 'Exchange2016';
83
84
    /**
85
     * cURL options to be passed to the SOAP client.
86
     *
87
     * @var array
88
     */
89
    protected $curl_options = array();
90
91
    /**
92
     * SOAP headers used for requests.
93
     *
94
     * @var \SoapHeader[]
95
     */
96
    protected $headers = array();
97
98
    /**
99
     * Password to use when connecting to the Exchange server.
100
     *
101
     * @var string
102
     */
103
    protected $password;
104
105
    /**
106
     * Location of the Exchange server.
107
     *
108
     * @var string
109
     */
110
    protected $server;
111
112
    /**
113
     * SOAP client used to make the request.
114
     *
115
     * @var null|\jamesiarmes\PhpNtlm\SoapClient
116
     */
117
    protected $soap;
118
119
    /**
120
     * Timezone to be used for all requests.
121
     *
122
     * @var string
123
     */
124
    protected $timezone;
125
126
    /**
127
     * Username to use when connecting to the Exchange server.
128
     *
129
     * @var string
130
     */
131
    protected $username;
132
133
    /**
134
     * Exchange impersonation
135
     *
136
     * @var \jamesiarmes\PhpEws\Type\ExchangeImpersonationType
137
     */
138
    protected $impersonation;
139
140
    /**
141
     * Microsoft Exchange version that we are going to connect to
142
     *
143
     * @var string
144
     *
145
     * @see Client::VERSION_2007
146
     * @see Client::VERSION_2007_SP1
147
     * @see Client::VERSION_2007_SP2
148
     * @see Client::VERSION_2007_SP3
149
     * @see Client::VERSION_2010
150
     * @see Client::VERSION_2010_SP1
151
     * @see Client::VERSION_2010_SP2
152
     */
153
    protected $version;
154
155
    /**
156
     * Constructor for the ExchangeWebServices class
157
     *
158
     * @param string $server
159
     * @param string $username
160
     * @param string $password
161
     * @param string $version
162
     *   One of the Client::VERSION_* constants.
163
     */
164
    public function __construct(
165
        $server = null,
166
        $username = null,
167
        $password = null,
168
        $version = self::VERSION_2013
169
    ) {
170
        // Set the object properties.
171
        $this->setServer($server);
172
        $this->setUsername($username);
173
        $this->setPassword($password);
174
        $this->setVersion($version);
175
    }
176
177
    /**
178
     * Returns the SOAP Client that may be used to make calls against the server
179
     *
180
     * @return \jamesiarmes\PhpNtlm\SoapClient
181
     */
182
    public function getClient()
183
    {
184
        // If the SOAP client has yet to be initialized then do so now.
185
        if (empty($this->soap)) {
186
            $this->initializeSoapClient();
187
        }
188
189
        return $this->soap;
190
    }
191
192
    /**
193
     * Sets the cURL options that will be set on the SOAP client.
194
     *
195
     * @param array $options
196
     */
197
    public function setCurlOptions(array $options)
198
    {
199
        $this->curl_options = $options;
200
201
        // We need to reinitialize the SOAP client.
202
        $this->soap = null;
203
    }
204
205
    /**
206
     * Sets the impersonation property
207
     *
208
     * @param \jamesiarmes\PhpEws\Type\ExchangeImpersonationType $impersonation
209
     */
210
    public function setImpersonation($impersonation)
211
    {
212
        $this->impersonation = $impersonation;
213
214
        // We need to re-build the SOAP headers.
215
        $this->headers = array();
216
    }
217
218
    /**
219
     * Sets the password property
220
     *
221
     * @param string $password
222
     */
223
    public function setPassword($password)
224
    {
225
        $this->password = $password;
226
227
        // We need to reinitialize the SOAP client.
228
        $this->soap = null;
229
    }
230
231
    /**
232
     * Sets the server property
233
     *
234
     * @param string $server
235
     */
236
    public function setServer($server)
237
    {
238
        $this->server = $server;
239
240
        // We need to reinitialize the SOAP client.
241
        $this->soap = null;
242
    }
243
244
    /**
245
     * Sets the timezone to be used for all requests.
246
     *
247
     * @param string $timezone
248
     */
249
    public function setTimezone($timezone)
250
    {
251
        $this->timezone = $timezone;
252
253
        // We need to re-build the SOAP headers.
254
        $this->headers = array();
255
    }
256
257
    /**
258
     * Sets the user name property
259
     *
260
     * @param string $username
261
     */
262
    public function setUsername($username)
263
    {
264
        $this->username = $username;
265
266
        // We need to reinitialize the SOAP client.
267
        $this->soap = null;
268
    }
269
270
    /**
271
     * Sets the version property
272
     *
273
     * @param string $version
274
     */
275
    public function setVersion($version)
276
    {
277
        $this->version = $version;
278
279
        // We need to re-build the SOAP headers.
280
        $this->headers = array();
281
    }
282
283
    /**
284
     * Adds one or more delegates to a principal's mailbox and sets specific
285
     * access permissions.
286
     *
287
     * @since Exchange 2007 SP1
288
     *
289
     * @param \jamesiarmes\PhpEws\Request\AddDelegateType $request
290
     * @return \jamesiarmes\PhpEws\Response\AddDelegateResponseMessageType
291
     */
292
    public function AddDelegate($request)
293
    {
294
        return $this->makeRequest(__FUNCTION__, $request);
295
    }
296
297
    /**
298
     * Adds a distribution group to the instant messaging (IM) list in the
299
     * Unified Contact Store.
300
     *
301
     * @since Exchange 2013
302
     *
303
     * @param \jamesiarmes\PhpEws\Request\AddDistributionGroupToImListType $request
304
     * @return \jamesiarmes\PhpEws\Response\AddDistributionGroupToImListResponseMessageType
305
     */
306
    public function AddDistributionGroupToImList($request)
307
    {
308
        return $this->makeRequest(__FUNCTION__, $request);
309
    }
310
311
    /**
312
     * Adds an existing instant messaging (IM) contact to a group.
313
     *
314
     * @since Exchange 2013
315
     *
316
     * @param \jamesiarmes\PhpEws\Request\AddImContactToGroup $request
317
     * @return \jamesiarmes\PhpEws\Response\AddImContactToGroupResponseMessageType
318
     */
319
    public function AddImContactToGroup($request)
320
    {
321
        return $this->makeRequest(__FUNCTION__, $request);
322
    }
323
324
    /**
325
     * Adds a new instant messaging (IM) group to a mailbox.
326
     *
327
     * @since Exchange 2013
328
     *
329
     * @param \jamesiarmes\PhpEws\Request\AddImGroupType $request
330
     * @return \jamesiarmes\PhpEws\Response\AddImGroupResponseMessageType
331
     */
332
    public function AddImGroup($request)
333
    {
334
        return $this->makeRequest(__FUNCTION__, $request);
335
    }
336
337
    /**
338
     * Adds a new contact to an instant messaging (IM) group.
339
     *
340
     * @since Exchange 2013
341
     *
342
     * @param \jamesiarmes\PhpEws\Request\AddNewImContactToGroup $request
343
     * @return \jamesiarmes\PhpEws\Response\AddNewImContactToGroupResponseMessageType
344
     */
345
    public function AddNewImContactToGroup($request)
346
    {
347
        return $this->makeRequest(__FUNCTION__, $request);
348
    }
349
350
    /**
351
     * Adds a new contact to a group based on a contact's phone number.
352
     *
353
     * @since Exchange 2013
354
     *
355
     * @param \jamesiarmes\PhpEws\Request\AddNewTelUriContactToGroupType $request
356
     * @return \jamesiarmes\PhpEws\Response\AddNewTelUriContactToGroupResponse
357
     */
358
    public function AddNewTelUriContactToGroup($request)
359
    {
360
        return $this->makeRequest(__FUNCTION__, $request);
361
    }
362
363
    /**
364
     * Sets a one-time or follow up action on all the items in a conversation.
365
     *
366
     * This operation allows you to categorize, move, copy, delete, and set the
367
     * read state on all items in a conversation. Actions can also be set for
368
     * new messages in a conversation.
369
     *
370
     * @since Exchange 2010 SP1
371
     *
372
     * @param \jamesiarmes\PhpEws\Request\ApplyConversationActionType $request
373
     * @return \jamesiarmes\PhpEws\Response\ApplyConversationActionResponseType
374
     */
375
    public function ApplyConversationAction($request)
376
    {
377
        return $this->makeRequest(__FUNCTION__, $request);
378
    }
379
380
    /**
381
     * Moves an item into the mailbox user's archive mailbox.
382
     *
383
     * @since Exchange 2013
384
     *
385
     * @param \jamesiarmes\PhpEws\Request\ArchiveItemType $request
386
     * @return \jamesiarmes\PhpEws\Response\ArchiveItemResponse
387
     */
388
    public function ArchiveItem($request)
389
    {
390
        return $this->makeRequest(__FUNCTION__, $request);
391
    }
392
393
    /**
394
     * Converts item and folder identifiers between formats that are accepted by
395
     * Exchange Online, Exchange Online as part of Office 365, and on-premises
396
     * versions of Exchange.
397
     *
398
     * @since Exchange 2007 SP1
399
     *
400
     * @param \jamesiarmes\PhpEws\Request\ConvertIdType $request
401
     * @return \jamesiarmes\PhpEws\Response\ConvertIdResponseType
402
     */
403
    public function ConvertId($request)
404
    {
405
        return $this->makeRequest(__FUNCTION__, $request);
406
    }
407
408
    /**
409
     * Copies folders in a mailbox.
410
     *
411
     * @since Exchange 2007
412
     *
413
     * @param \jamesiarmes\PhpEws\Request\CopyFolderType $request
414
     * @return \jamesiarmes\PhpEws\Response\CopyFolderResponseType
415
     */
416
    public function CopyFolder($request)
417
    {
418
        return $this->makeRequest(__FUNCTION__, $request);
419
    }
420
421
    /**
422
     * Copies items and puts the items in a different folder.
423
     *
424
     * @since Exchange 2007
425
     *
426
     * @param \jamesiarmes\PhpEws\Request\CopyItemType $request
427
     * @return \jamesiarmes\PhpEws\Response\CopyItemResponseType
428
     */
429
    public function CopyItem($request)
430
    {
431
        return $this->makeRequest(__FUNCTION__, $request);
432
    }
433
434
    /**
435
     * Creates either an item or file attachment and attaches it to the
436
     * specified item.
437
     *
438
     * @since Exchange 2007
439
     *
440
     * @param \jamesiarmes\PhpEws\Request\CreateAttachmentType $request
441
     * @return \jamesiarmes\PhpEws\Response\CreateAttachmentResponseType
442
     */
443
    public function CreateAttachment($request)
444
    {
445
        return $this->makeRequest(__FUNCTION__, $request);
446
    }
447
448
    /**
449
     * Creates folders, calendar folders, contacts folders, tasks folders, and
450
     * search folders.
451
     *
452
     * @since Exchange 2007
453
     *
454
     * @param \jamesiarmes\PhpEws\Request\CreateFolderType $request
455
     * @return \jamesiarmes\PhpEws\Response\CreateFolderResponseType
456
     */
457
    public function CreateFolder($request)
458
    {
459
        return $this->makeRequest(__FUNCTION__, $request);
460
    }
461
462
    /**
463
     * Creates a folder hierarchy.
464
     *
465
     * @since Exchange 2013
466
     *
467
     * @param \jamesiarmes\PhpEws\Request\CreateFolderPathType $request
468
     * @return \jamesiarmes\PhpEws\Response\CreateFolderPathResponseType
469
     */
470
    public function CreateFolderPath($request)
471
    {
472
        return $this->makeRequest(__FUNCTION__, $request);
473
    }
474
475
    /**
476
     * Creates items in the Exchange store.
477
     *
478
     * @since Exchange 2007
479
     *
480
     * @param \jamesiarmes\PhpEws\Request\CreateItemType $request
481
     * @return \jamesiarmes\PhpEws\Response\CreateItemResponseType
482
     */
483
    public function CreateItem($request)
484
    {
485
        return $this->makeRequest(__FUNCTION__, $request);
486
    }
487
488
    /**
489
     * Creates a managed folder in the Exchange store.
490
     *
491
     * @since Exchange 2007
492
     *
493
     * @param \jamesiarmes\PhpEws\Request\CreateManagedFolderRequestType $request
494
     * @return \jamesiarmes\PhpEws\Response\CreateManagedFolderResponseType
495
     */
496
    public function CreateManagedFolder($request)
497
    {
498
        return $this->makeRequest(__FUNCTION__, $request);
499
    }
500
501
    /**
502
     * Creates a user configuration object on a folder.
503
     *
504
     * @since Exchange 2010
505
     *
506
     * @param \jamesiarmes\PhpEws\Request\CreateUserConfigurationType $request
507
     * @return \jamesiarmes\PhpEws\Response\CreateUserConfigurationResponseType
508
     */
509
    public function CreateUserConfiguration($request)
510
    {
511
        return $this->makeRequest(__FUNCTION__, $request);
512
    }
513
514
    /**
515
     * Deletes file and item attachments from an existing item in the Exchange
516
     * store.
517
     *
518
     * @since Exchange 2007
519
     *
520
     * @param \jamesiarmes\PhpEws\Request\DeleteAttachmentType $request
521
     * @return \jamesiarmes\PhpEws\Response\DeleteAttachmentResponseType
522
     */
523
    public function DeleteAttachment($request)
524
    {
525
        return $this->makeRequest(__FUNCTION__, $request);
526
    }
527
528
    /**
529
     * Deletes folders from a mailbox.
530
     *
531
     * @since Exchange 2007
532
     *
533
     * @param \jamesiarmes\PhpEws\Request\DeleteFolderType $request
534
     * @return \jamesiarmes\PhpEws\Response\DeleteFolderResponseType
535
     */
536
    public function DeleteFolder($request)
537
    {
538
        return $this->makeRequest(__FUNCTION__, $request);
539
    }
540
541
    /**
542
     * Deletes items in the Exchange store.
543
     *
544
     * @since Exchange 2007
545
     *
546
     * @param \jamesiarmes\PhpEws\Request\DeleteItemType $request
547
     * @return \jamesiarmes\PhpEws\Response\DeleteItemResponseType
548
     */
549
    public function DeleteItem($request)
550
    {
551
        return $this->makeRequest(__FUNCTION__, $request);
552
    }
553
554
    /**
555
     * Deletes a user configuration object on a folder.
556
     *
557
     * @since Exchange 2010
558
     *
559
     * @param \jamesiarmes\PhpEws\Request\DeleteUserConfigurationType $request
560
     * @return \jamesiarmes\PhpEws\Response\DeleteUserConfigurationResponseType
561
     */
562
    public function DeleteUserConfiguration($request)
563
    {
564
        return $this->makeRequest(__FUNCTION__, $request);
565
    }
566
567
    /**
568
     * Disables a mail app for Outlook.
569
     *
570
     * @since Exchange 2013
571
     *
572
     * @param \jamesiarmes\PhpEws\Request\DisableAppType $request
573
     * @return \jamesiarmes\PhpEws\Response\DisableAppResponseType
574
     */
575
    public function DisableApp($request)
576
    {
577
        return $this->makeRequest(__FUNCTION__, $request);
578
    }
579
580
    /**
581
     * Terminates a telephone call.
582
     *
583
     * @since Exchange 2010
584
     *
585
     * @param \jamesiarmes\PhpEws\Request\DisconnectPhoneCallType $request
586
     * @return \jamesiarmes\PhpEws\Response\DisconnectPhoneCallResponseMessageType
587
     */
588
    public function DisconnectPhoneCall($request)
589
    {
590
        return $this->makeRequest(__FUNCTION__, $request);
591
    }
592
593
    /**
594
     * Empties folders in a mailbox.
595
     *
596
     * Optionally, this operation enables you to delete the subfolders of the
597
     * specified folder. When a subfolder is deleted, the subfolder and the
598
     * messages within the subfolder are deleted.
599
     *
600
     * @since Exchange 2010
601
     *
602
     * @param \jamesiarmes\PhpEws\Request\EmptyFolderType $request
603
     * @return \jamesiarmes\PhpEws\Response\EmptyFolderResponseType
604
     */
605
    public function EmptyFolder($request)
606
    {
607
        return $this->makeRequest(__FUNCTION__, $request);
608
    }
609
610
    /**
611
     * Exposes the full membership of distribution lists.
612
     *
613
     * @since Exchange 2007
614
     *
615
     * @param \jamesiarmes\PhpEws\Request\ExpandDLType $request
616
     * @return \jamesiarmes\PhpEws\Response\ExpandDLResponseType
617
     */
618
    public function ExpandDL($request)
619
    {
620
        return $this->makeRequest(__FUNCTION__, $request);
621
    }
622
623
    /**
624
     * Exports items out of a mailbox.
625
     *
626
     * @since Exchange 2010 SP1
627
     *
628
     * @param \jamesiarmes\PhpEws\Request\ExportItemsType $request
629
     * @return \jamesiarmes\PhpEws\Response\ExportItemsResponseType
630
     */
631
    public function ExportItems($request)
632
    {
633
        return $this->makeRequest(__FUNCTION__, $request);
634
    }
635
636
    /**
637
     * Enumerates a list of conversations in a folder.
638
     *
639
     * @param \jamesiarmes\PhpEws\Request\FindConversationType $request
640
     * @return \jamesiarmes\PhpEws\Response\FindConversationResponseMessageType
641
     */
642
    public function FindConversation($request)
643
    {
644
        return $this->makeRequest(__FUNCTION__, $request);
645
    }
646
647
    /**
648
     * Finds subfolders of an identified folder and returns a set of properties
649
     * that describe the set of subfolders.
650
     *
651
     * @since Exchange 2007
652
     *
653
     * @param \jamesiarmes\PhpEws\Request\FindFolderType $request
654
     * @return \jamesiarmes\PhpEws\Response\FindFolderResponseType
655
     */
656
    public function FindFolder($request)
657
    {
658
        return $this->makeRequest(__FUNCTION__, $request);
659
    }
660
661
    /**
662
     * Searches for items that are located in a user’s mailbox.
663
     *
664
     * This operation provides many ways to filter and format how search results
665
     * are returned to the caller.
666
     *
667
     * @since Exchange 2007
668
     *
669
     * @param \jamesiarmes\PhpEws\Request\FindItemType $request
670
     * @return \jamesiarmes\PhpEws\Response\FindItemResponseType
671
     */
672
    public function FindItem($request)
673
    {
674
        return $this->makeRequest(__FUNCTION__, $request);
675
    }
676
677
    /**
678
     * Finds messages that meet the specified criteria.
679
     *
680
     * @since Exchange 2010
681
     *
682
     * @param \jamesiarmes\PhpEws\Request\FindMessageTrackingReportRequestType $request
683
     * @return \jamesiarmes\PhpEws\Response\FindMessageTrackingReportResponseMessageType
684
     */
685
    public function FindMessageTrackingReport($request)
686
    {
687
        return $this->makeRequest(__FUNCTION__, $request);
688
    }
689
690
    /**
691
     * Returns all persona objects from a specified Contacts folder or retrieves
692
     * contacts that match a specified query string.
693
     *
694
     * @since Exchange 2013
695
     *
696
     * @param \jamesiarmes\PhpEws\Request\FindPeopleType $request
697
     * @return \jamesiarmes\PhpEws\Response\FindPeopleResponseMessageType
698
     */
699
    public function FindPeople($request)
700
    {
701
        return $this->makeRequest(__FUNCTION__, $request);
702
    }
703
704
    /**
705
     * Retrieves app manifests.
706
     *
707
     * @since Exchange 2013 SP1
708
     *
709
     * @param \jamesiarmes\PhpEws\Request\GetAppManifestsType $request
710
     * @return \jamesiarmes\PhpEws\Response\GetAppManifestsResponseType
711
     */
712
    public function GetAppManifests($request)
713
    {
714
        return $this->makeRequest(__FUNCTION__, $request);
715
    }
716
717
    /**
718
     * Retrieves the URL for the app marketplace that a client can visit to
719
     * acquire apps to install in a mailbox.
720
     *
721
     * @since Exchange 2013 SP1
722
     *
723
     * @param \jamesiarmes\PhpEws\Request\GetAppMarketplaceUrl $request
724
     * @return \jamesiarmes\PhpEws\Response\GetAppMarketplaceUrlResponseMessageType
725
     */
726
    public function GetAppMarketplaceUrl($request)
727
    {
728
        return $this->makeRequest(__FUNCTION__, $request);
729
    }
730
731
    /**
732
     * Retrieves existing attachments on items in the Exchange store.
733
     *
734
     * @since Exchange 2007
735
     *
736
     * @param \jamesiarmes\PhpEws\Request\GetAttachmentType $request
737
     * @return \jamesiarmes\PhpEws\Response\GetAttachmentResponseType
738
     */
739
    public function GetAttachment($request)
740
    {
741
        return $this->makeRequest(__FUNCTION__, $request);
742
    }
743
744
    /**
745
     * Gets a client access token for a mail app for Outlook.
746
     *
747
     * @since Exchange 2013
748
     *
749
     * @param \jamesiarmes\PhpEws\Request\GetClientAccessTokenType $request
750
     * @return \jamesiarmes\PhpEws\Response\GetClientAccessTokenResponseType
751
     */
752
    public function GetClientAccessToken($request)
753
    {
754
        return $this->makeRequest(__FUNCTION__, $request);
755
    }
756
757
    /**
758
     * Retrieves one or more sets of items that are organized in to nodes in a
759
     * conversation.
760
     *
761
     * @since Exchange 2013
762
     *
763
     * @param \jamesiarmes\PhpEws\Request\GetConversationItemsType $request
764
     * @return \jamesiarmes\PhpEws\Response\GetConversationItemsResponseType
765
     */
766
    public function GetConversationItems($request)
767
    {
768
        return $this->makeRequest(__FUNCTION__, $request);
769
    }
770
771
    /**
772
     * Retrieves the delegate settings for a specified mailbox.
773
     *
774
     * @since Exchange 2007 SP1
775
     *
776
     * @param \jamesiarmes\PhpEws\Request\GetDelegateType $request
777
     * @return \jamesiarmes\PhpEws\Response\GetDelegateResponseMessageType
778
     */
779
    public function GetDelegate($request)
780
    {
781
        return $this->makeRequest(__FUNCTION__, $request);
782
    }
783
784
    /**
785
     * Returns configuration information for in-place holds, saved discovery
786
     * searches, and the mailboxes that are enabled for discovery search.
787
     *
788
     * @since Exchange 2013
789
     *
790
     * @param \jamesiarmes\PhpEws\Request\GetDiscoverySearchConfigurationType $request
791
     * @return \jamesiarmes\PhpEws\Response\GetDiscoverySearchConfigurationResponseMessageType
792
     */
793
    public function GetDiscoverySearchConfiguration($request)
794
    {
795
        return $this->makeRequest(__FUNCTION__, $request);
796
    }
797
798
    /**
799
     * Used by pull subscription clients to request notifications from the
800
     * Client Access server.
801
     *
802
     * The response returns an array of items and events that have occurred in a
803
     * mailbox since the last the notification.
804
     *
805
     * @since Exchange 2007
806
     *
807
     * @param \jamesiarmes\PhpEws\Request\GetEventsType $request
808
     * @return \jamesiarmes\PhpEws\Response\GetEventsResponseType
809
     */
810
    public function GetEvents($request)
811
    {
812
        return $this->makeRequest(__FUNCTION__, $request);
813
    }
814
815
    /**
816
     * Gets folders from the Exchange store.
817
     *
818
     * @since Exchange 2007
819
     *
820
     * @param \jamesiarmes\PhpEws\Request\GetFolderType $request
821
     * @return \jamesiarmes\PhpEws\Response\GetFolderResponseType
822
     */
823
    public function GetFolder($request)
824
    {
825
        return $this->makeRequest(__FUNCTION__, $request);
826
    }
827
828
    /**
829
     * Retrieves the mailboxes that are under a specific hold and the associated
830
     * hold query.
831
     *
832
     * @since Exchange 2013
833
     *
834
     * @param \jamesiarmes\PhpEws\Request\GetHoldOnMailboxesType $request
835
     * @return \jamesiarmes\PhpEws\Response\GetHoldOnMailboxesResponseMessageType
836
     */
837
    public function GetHoldOnMailboxes($request)
838
    {
839
        return $this->makeRequest(__FUNCTION__, $request);
840
    }
841
842
    /**
843
     * Retrieves the list of instant messaging (IM) groups and IM contact
844
     * personas in a mailbox.
845
     *
846
     * @since Exchange 2013
847
     *
848
     * @param \jamesiarmes\PhpEws\Request\GetImItemListType $request
849
     * @return \jamesiarmes\PhpEws\Response\GetImItemListResponseMessageType
850
     */
851
    public function GetImItemList($request)
852
    {
853
        return $this->makeRequest(__FUNCTION__, $request);
854
    }
855
856
    /**
857
     * Retrieves information about instant messaging (IM) groups and IM contact
858
     * personas.
859
     *
860
     * @since Exchange 2013
861
     *
862
     * @param \jamesiarmes\PhpEws\Request\GetImItemsType $request
863
     * @return \jamesiarmes\PhpEws\Response\GetImItemsResponse
864
     */
865
    public function GetImItems($request)
866
    {
867
        return $this->makeRequest(__FUNCTION__, $request);
868
    }
869
870
    /**
871
     * Retrieves Inbox rules in the identified user's mailbox.
872
     *
873
     * @since Exchange 2010
874
     *
875
     * @param \jamesiarmes\PhpEws\Request\GetInboxRulesRequestType $request
876
     * @return \jamesiarmes\PhpEws\Response\GetInboxRulesResponseType
877
     */
878
    public function GetInboxRules($request)
879
    {
880
        return $this->makeRequest(__FUNCTION__, $request);
881
    }
882
883
    /**
884
     * Gets folders from the Exchange store.
885
     *
886
     * @since Exchange 2007
887
     *
888
     * @param \jamesiarmes\PhpEws\Request\GetItemType $request
889
     * @return \jamesiarmes\PhpEws\Response\GetItemResponseType
890
     */
891
    public function GetItem($request)
892
    {
893
        return $this->makeRequest(__FUNCTION__, $request);
894
    }
895
896
    /**
897
     * Retrieves the mail tips information for the specified mailbox.
898
     *
899
     * @since Exchange 2010
900
     *
901
     * @param \jamesiarmes\PhpEws\Request\GetMailTipsType $request
902
     * @return \jamesiarmes\PhpEws\Response\GetMailTipsResponseMessageType
903
     */
904
    public function GetMailTips($request)
905
    {
906
        return $this->makeRequest(__FUNCTION__, $request);
907
    }
908
909
    /**
910
     * Retrieves tracking information about the specified messages.
911
     *
912
     * @since Exchange 2010
913
     *
914
     * @param \jamesiarmes\PhpEws\Request\GetMessageTrackingReportRequestType $request
915
     * @return \jamesiarmes\PhpEws\Response\GetMessageTrackingReportResponseMessageType
916
     */
917
    public function GetMessageTrackingReport($request)
918
    {
919
        return $this->makeRequest(__FUNCTION__, $request);
920
    }
921
922
    /**
923
     * Retrieves details about items that cannot be indexed.
924
     *
925
     * This includes, but is not limited to, the item identifier, an error code,
926
     * an error description, when an attempt was made to index the item, and
927
     * additional information about the file.
928
     *
929
     * @since Exchange 2013
930
     *
931
     * @param \jamesiarmes\PhpEws\Request\GetNonIndexableItemDetailsType $request
932
     * @return \jamesiarmes\PhpEws\Response\GetNonIndexableItemDetailsResponseMessageType
933
     */
934
    public function GetNonIndexableItemDetails($request)
935
    {
936
        return $this->makeRequest(__FUNCTION__, $request);
937
    }
938
939
    /**
940
     * Retrieves the count of items that cannot be indexed in a mailbox.
941
     *
942
     * @since Exchange 2013
943
     *
944
     * @param \jamesiarmes\PhpEws\Request\GetNonIndexableItemStatisticsType $request
945
     * @return \jamesiarmes\PhpEws\Response\GetNonIndexableItemStatisticsResponseMessageType
946
     */
947
    public function GetNonIndexableItemStatistics($request)
948
    {
949
        return $this->makeRequest(__FUNCTION__, $request);
950
    }
951
952
    /**
953
     * Provides the email account password expiration date for the current user.
954
     *
955
     * @since Exchange 2010 SP2
956
     *
957
     * @param \jamesiarmes\PhpEws\Request\GetPasswordExpirationDateType $request
958
     * @return \jamesiarmes\PhpEws\Response\GetPasswordExpirationDateResponseMessageType
959
     */
960
    public function GetPasswordExpirationDate($request)
961
    {
962
        return $this->makeRequest(__FUNCTION__, $request);
963
    }
964
965
    /**
966
     * Retrieves a set of properties that are associated with a persona.
967
     *
968
     * @since Exchange 2013
969
     *
970
     * @param \jamesiarmes\PhpEws\Request\GetPersonaType $request
971
     * @return \jamesiarmes\PhpEws\Response\GetPersonaResponseMessageType
972
     */
973
    public function GetPersona($request)
974
    {
975
        return $this->makeRequest(__FUNCTION__, $request);
976
    }
977
978
    /**
979
     * Retrieves information about the specified telephone call.
980
     *
981
     * @since Exchange 2010
982
     *
983
     * @param \jamesiarmes\PhpEws\Request\GetPhoneCallInformationType $request
984
     * @return \jamesiarmes\PhpEws\Response\GetPhoneCallInformationResponseMessageType
985
     */
986
    public function GetPhoneCallInformation($request)
987
    {
988
        return $this->makeRequest(__FUNCTION__, $request);
989
    }
990
991
    /**
992
     * Retrieves reminders for calendar and task items.
993
     *
994
     * @since Exchange 2013
995
     *
996
     * @param \jamesiarmes\PhpEws\Request\GetRemindersType $request
997
     * @return \jamesiarmes\PhpEws\Response\GetRemindersResponseMessageType
998
     */
999
    public function GetReminders($request)
1000
    {
1001
        return $this->makeRequest(__FUNCTION__, $request);
1002
    }
1003
1004
    /**
1005
     * Retrieves the room lists that are available within the Exchange
1006
     * organization.
1007
     *
1008
     * @since Exchange 2010
1009
     *
1010
     * @param \jamesiarmes\PhpEws\Request\GetRoomListsType $request
1011
     * @return \jamesiarmes\PhpEws\Response\GetRoomListsResponseMessageType
1012
     */
1013
    public function GetRoomLists($request)
1014
    {
1015
        return $this->makeRequest(__FUNCTION__, $request);
1016
    }
1017
1018
    /**
1019
     * Retrieves the rooms within the specified room list.
1020
     *
1021
     * @since Exchange 2010 SP1
1022
     *
1023
     * @param \jamesiarmes\PhpEws\Request\GetRoomsType $request
1024
     * @return \jamesiarmes\PhpEws\Response\GetRoomsResponseMessageType
1025
     */
1026
    public function GetRooms($request)
1027
    {
1028
        return $this->makeRequest(__FUNCTION__, $request);
1029
    }
1030
1031
    /**
1032
     * Retrieves a scoped set of searchable mailboxes for discovery searches.
1033
     *
1034
     * The scope of searchable mailboxes returned in the response is determined
1035
     * by the search filter and whether distribution group membership is
1036
     * expanded.
1037
     *
1038
     * @since Exchange 2013
1039
     *
1040
     * @param \jamesiarmes\PhpEws\Request\GetSearchableMailboxesType $request
1041
     * @return \jamesiarmes\PhpEws\Response\GetSearchableMailboxesResponseMessageType
1042
     */
1043
    public function GetSearchableMailboxes($request)
1044
    {
1045
        return $this->makeRequest(__FUNCTION__, $request);
1046
    }
1047
1048
    /**
1049
     * Retrieve the timezones supported by the server.
1050
     *
1051
     * @since Exchange 2010
1052
     *
1053
     * @param \jamesiarmes\PhpEws\Request\GetServerTimeZonesType $request
1054
     * @return \jamesiarmes\PhpEws\Response\GetServerTimeZonesResponseType
1055
     */
1056
    public function GetServerTimeZones($request)
1057
    {
1058
        return $this->makeRequest(__FUNCTION__, $request);
1059
    }
1060
1061
    /**
1062
     * Retrieves configuration information for the specified type of service.
1063
     *
1064
     * This operation can return configuration settings for the Unified
1065
     * Messaging, Protection Rules, and Mail Tips services.
1066
     *
1067
     * @since Exchange 2010
1068
     *
1069
     * @param \jamesiarmes\PhpEws\Request\GetServiceConfigurationType $request
1070
     * @return \jamesiarmes\PhpEws\Response\GetServiceConfigurationResponseMessageType
1071
     */
1072
    public function GetServiceConfiguration($request)
1073
    {
1074
        return $this->makeRequest(__FUNCTION__, $request);
1075
    }
1076
1077
    /**
1078
     * Retrieves the local folder identifier of a specified shared folder.
1079
     *
1080
     * @since Exchange 2010
1081
     *
1082
     * @param \jamesiarmes\PhpEws\Request\GetSharingFolderType $request
1083
     * @return \jamesiarmes\PhpEws\Response\GetSharingFolderResponseMessageType
1084
     */
1085
    public function GetSharingFolder($request)
1086
    {
1087
        return $this->makeRequest(__FUNCTION__, $request);
1088
    }
1089
1090
    /**
1091
     * Gets an opaque authentication token that identifies a sharing invitation.
1092
     *
1093
     * @since Exchange 2010
1094
     *
1095
     * @param \jamesiarmes\PhpEws\Request\GetSharingMetadataType $request
1096
     * @return \jamesiarmes\PhpEws\Response\GetSharingMetadataResponseMessageType
1097
     */
1098
    public function GetSharingMetadata($request)
1099
    {
1100
        return $this->makeRequest(__FUNCTION__, $request);
1101
    }
1102
1103
    /**
1104
     * Requests notifications from the Client Access server.
1105
     *
1106
     * The GetStreamingEvents response returns an array of items and events that
1107
     * have occurred in a mailbox since the last the notification.
1108
     *
1109
     * @since Exchange 2010 SP1
1110
     *
1111
     * @param \jamesiarmes\PhpEws\Request\GetStreamingEventsType $request
1112
     * @return \jamesiarmes\PhpEws\Response\GetStreamingEventsResponseType
1113
     */
1114
    public function GetStreamingEvents($request)
1115
    {
1116
        return $this->makeRequest(__FUNCTION__, $request);
1117
    }
1118
1119
    /**
1120
     * Provides detailed information about the availability of a set of users,
1121
     * rooms, and resources within a specified time period.
1122
     *
1123
     * @since Exchange 2007
1124
     *
1125
     * @param \jamesiarmes\PhpEws\Request\GetUserAvailabilityRequestType $request
1126
     * @return \jamesiarmes\PhpEws\Response\GetUserAvailabilityResponseType
1127
     */
1128
    public function GetUserAvailability($request)
1129
    {
1130
        return $this->makeRequest(__FUNCTION__, $request);
1131
    }
1132
1133
    /**
1134
     * Retrieves a user configuration object from a folder.
1135
     *
1136
     * @since Exchange 2010
1137
     *
1138
     * @param \jamesiarmes\PhpEws\Request\GetUserConfigurationType $request
1139
     * @return \jamesiarmes\PhpEws\Response\GetUserConfigurationResponseType
1140
     */
1141
    public function GetUserConfiguration($request)
1142
    {
1143
        return $this->makeRequest(__FUNCTION__, $request);
1144
    }
1145
1146
    /**
1147
     * Gets a mailbox user's Out of Office (OOF) settings and messages.
1148
     *
1149
     * @since Exchange 2007
1150
     *
1151
     * @param \jamesiarmes\PhpEws\Request\GetUserOofSettingsRequest $request
1152
     * @return \jamesiarmes\PhpEws\Response\GetUserOofSettingsResponse
1153
     */
1154
    public function GetUserOofSettings($request)
1155
    {
1156
        return $this->makeRequest(__FUNCTION__, $request);
1157
    }
1158
1159
    /**
1160
     * Retrieves a user photo from Active Directory Domain Services (AD DS).
1161
     *
1162
     * @since Exchange 2013
1163
     *
1164
     * @param \jamesiarmes\PhpEws\Request\GetUserPhotoType $request
1165
     * @return \jamesiarmes\PhpEws\Response\GetUserPhotoResponseMessageType
1166
     */
1167
    public function GetUserPhoto($request)
1168
    {
1169
        return $this->makeRequest(__FUNCTION__, $request);
1170
    }
1171
1172
    /**
1173
     * Retrieves a list of all default, system folder, and personal tags that
1174
     * are associated with a user by means of a system policy or that were
1175
     * applied by the user.
1176
     *
1177
     * @since Exchange 2013
1178
     *
1179
     * @param \jamesiarmes\PhpEws\Request\GetUserRetentionPolicyTagsType $request
1180
     * @return \jamesiarmes\PhpEws\Response\GetUserRetentionPolicyTagsResponseMessageType
1181
     */
1182
    public function GetUserRetentionPolicyTags($request)
1183
    {
1184
        return $this->makeRequest(__FUNCTION__, $request);
1185
    }
1186
1187
    /**
1188
     * Installs a mail app for Outlook in a mailbox.
1189
     *
1190
     * @since Exchange 2013
1191
     *
1192
     * @param \jamesiarmes\PhpEws\Request\InstallAppType $request
1193
     * @return \jamesiarmes\PhpEws\Response\InstallAppResponseType
1194
     */
1195
    public function InstallApp($request)
1196
    {
1197
        return $this->makeRequest(__FUNCTION__, $request);
1198
    }
1199
1200
    /**
1201
     * Sets the IsRead property on all items, in one or more folders, to
1202
     * indicate that all items are either read or unread.
1203
     *
1204
     * @since Exchange 2013
1205
     *
1206
     * @param \jamesiarmes\PhpEws\Request\MarkAllItemsAsRead $request
1207
     * @return \jamesiarmes\PhpEws\Response\MarkAllItemsAsReadResponseType
1208
     */
1209
    public function MarkAllItemsAsRead($request)
1210
    {
1211
        return $this->makeRequest(__FUNCTION__, $request);
1212
    }
1213
1214
    /**
1215
     * Adds and removes users from the blocked email list and moves email
1216
     * messages to the Junk Email folder.
1217
     *
1218
     * @since Exchange 2013
1219
     *
1220
     * @param \jamesiarmes\PhpEws\Request\MarkAsJunkType $request
1221
     * @return \jamesiarmes\PhpEws\Response\MarkAsJunkResponseType
1222
     */
1223
    public function MarkAsJunk($request)
1224
    {
1225
        return $this->makeRequest(__FUNCTION__, $request);
1226
    }
1227
1228
    /**
1229
     * Moves folders from a specified folder and puts them in another folder.
1230
     *
1231
     * @since Exchange 2007
1232
     *
1233
     * @param \jamesiarmes\PhpEws\Request\MoveFolderType $request
1234
     * @return \jamesiarmes\PhpEws\Response\MoveFolderResponseType
1235
     */
1236
    public function MoveFolder($request)
1237
    {
1238
        return $this->makeRequest(__FUNCTION__, $request);
1239
    }
1240
1241
    /**
1242
     * Moves one or more items to a single destination folder.
1243
     *
1244
     * @since Exchange 2007
1245
     *
1246
     * @param \jamesiarmes\PhpEws\Request\MoveItemType $request
1247
     * @return \jamesiarmes\PhpEws\Response\MoveItemResponseType
1248
     */
1249
    public function MoveItem($request)
1250
    {
1251
        return $this->makeRequest(__FUNCTION__, $request);
1252
    }
1253
1254
    /**
1255
     * Initiates a dismiss or snooze action on a reminder.
1256
     *
1257
     * @since Exchange 2013
1258
     *
1259
     * @param \jamesiarmes\PhpEws\Request\PerformReminderActionType $request
1260
     * @return \jamesiarmes\PhpEws\Response\PerformReminderActionResponseMessageType
1261
     */
1262
    public function PerformReminderAction($request)
1263
    {
1264
        return $this->makeRequest(__FUNCTION__, $request);
1265
    }
1266
1267
    /**
1268
     * Initiates an outbound call and plays a message over the telephone.
1269
     *
1270
     * @since Exchange 2010
1271
     *
1272
     * @param \jamesiarmes\PhpEws\Request\PlayOnPhoneType $request
1273
     * @return \jamesiarmes\PhpEws\Response\PlayOnPhoneResponseMessageType
1274
     */
1275
    public function PlayOnPhone($request)
1276
    {
1277
        return $this->makeRequest(__FUNCTION__, $request);
1278
    }
1279
1280
    /**
1281
     * Refreshes the specified local folder with the latest data from the folder
1282
     * that is being shared.
1283
     *
1284
     * @since Exchange 2010
1285
     *
1286
     * @param \jamesiarmes\PhpEws\Request\RefreshSharingFolderType $request
1287
     * @return \jamesiarmes\PhpEws\Response\RefreshSharingFolderResponseMessageType
1288
     */
1289
    public function RefreshSharingFolder($request)
1290
    {
1291
        return $this->makeRequest(__FUNCTION__, $request);
1292
    }
1293
1294
    /**
1295
     * Removes contacts from the Lync instant messaging (IM) list when Lync uses
1296
     * Exchange for the contact store.
1297
     *
1298
     * @since Exchange 2013
1299
     *
1300
     * @param \jamesiarmes\PhpEws\Request\RemoveContactFromImListType $request
1301
     * @return \jamesiarmes\PhpEws\Response\RemoveContactFromImListResponseMessageType
1302
     */
1303
    public function RemoveContactFromImList($request)
1304
    {
1305
        return $this->makeRequest(__FUNCTION__, $request);
1306
    }
1307
1308
    /**
1309
     * Removes one or more delegates from a user's mailbox.
1310
     *
1311
     * @since Exchange 2007 SP1
1312
     *
1313
     * @param \jamesiarmes\PhpEws\Request\RemoveDelegateType $request
1314
     * @return \jamesiarmes\PhpEws\Response\RemoveDelegateResponseMessageType
1315
     */
1316
    public function RemoveDelegate($request)
1317
    {
1318
        return $this->makeRequest(__FUNCTION__, $request);
1319
    }
1320
1321
    /**
1322
     * Removes a distribution group from the Lync instant messaging (IM) list
1323
     * when Lync uses Exchange for the contact store.
1324
     *
1325
     * @since Exchange 2013
1326
     *
1327
     * @param \jamesiarmes\PhpEws\Request\RemoveDistributionGroupFromImListType $request
1328
     * @return \jamesiarmes\PhpEws\Response\RemoveDistributionGroupFromImListResponseMessageType
1329
     */
1330
    public function RemoveDistributionGroupFromImList($request)
1331
    {
1332
        return $this->makeRequest(__FUNCTION__, $request);
1333
    }
1334
1335
    /**
1336
     * Removes a single IM contact from an IM group.
1337
     *
1338
     * @since Exchange 2013
1339
     *
1340
     * @param \jamesiarmes\PhpEws\Request\RemoveImContactFromGroupType $request
1341
     * @return \jamesiarmes\PhpEws\Response\RemoveImContactFromGroupResponseMessageType
1342
     */
1343
    public function RemoveImContactFromGroup($request)
1344
    {
1345
        return $this->makeRequest(__FUNCTION__, $request);
1346
    }
1347
1348
    /**
1349
     * Removes a single instant messaging (IM) group from a mailbox.
1350
     *
1351
     * @since Exchange 2013
1352
     *
1353
     * @param \jamesiarmes\PhpEws\Request\RemoveImGroupType $request
1354
     * @return \jamesiarmes\PhpEws\Response\RemoveImGroupResponseMessageType
1355
     */
1356
    public function RemoveImGroup($request)
1357
    {
1358
        return $this->makeRequest(__FUNCTION__, $request);
1359
    }
1360
1361
    /**
1362
     * Resolves ambiguous email addresses and display names.
1363
     *
1364
     * @since Exchange 2007
1365
     *
1366
     * @param \jamesiarmes\PhpEws\Request\ResolveNamesType $request
1367
     * @return \jamesiarmes\PhpEws\Response\ResolveNamesResponseType
1368
     */
1369
    public function ResolveNames($request)
1370
    {
1371
        return $this->makeRequest(__FUNCTION__, $request);
1372
    }
1373
1374
    /**
1375
     * Searches mailboxes for occurrences of terms in mailbox items.
1376
     *
1377
     * @since Exchange 2013
1378
     *
1379
     * @param \jamesiarmes\PhpEws\Request\SearchMailboxesType $request
1380
     * @return \jamesiarmes\PhpEws\Response\SearchMailboxesResponseType
1381
     */
1382
    public function SearchMailboxes($request)
1383
    {
1384
        return $this->makeRequest(__FUNCTION__, $request);
1385
    }
1386
1387
    /**
1388
     * Sends e-mail messages that are located in the Exchange store.
1389
     *
1390
     * @since Exchange 2007
1391
     *
1392
     * @param \jamesiarmes\PhpEws\Request\SendItemType $request
1393
     * @return \jamesiarmes\PhpEws\Response\SendItemResponseType
1394
     */
1395
    public function SendItem($request)
1396
    {
1397
        return $this->makeRequest(__FUNCTION__, $request);
1398
    }
1399
1400
    /**
1401
     * Sets a mailbox hold policy on mailboxes.
1402
     *
1403
     * @since Exchange 2013
1404
     *
1405
     * @param \jamesiarmes\PhpEws\Request\SetHoldOnMailboxesType $request
1406
     * @return \jamesiarmes\PhpEws\Response\SetHoldOnMailboxesResponseMessageType
1407
     */
1408
    public function SetHoldOnMailboxes($request)
1409
    {
1410
        return $this->makeRequest(__FUNCTION__, $request);
1411
    }
1412
1413
    /**
1414
     * Changes the display name of an instant messaging (IM) group.
1415
     *
1416
     * @since Exchange 2013
1417
     *
1418
     * @param \jamesiarmes\PhpEws\Request\SetImGroupType $request
1419
     * @return \jamesiarmes\PhpEws\Response\SetImGroupResponseMessageType
1420
     */
1421
    public function SetImGroup($request)
1422
    {
1423
        return $this->makeRequest(__FUNCTION__, $request);
1424
    }
1425
1426
    /**
1427
     * Sets a mailbox user's Out of Office (OOF) settings and message.
1428
     *
1429
     * @since Exchange 2007
1430
     *
1431
     * @param \jamesiarmes\PhpEws\Request\SetUserOofSettingsRequest $request
1432
     * @return \jamesiarmes\PhpEws\Response\SetUserOofSettingsResponse
1433
     */
1434
    public function SetUserOofSettings($request)
1435
    {
1436
        return $this->makeRequest(__FUNCTION__, $request);
1437
    }
1438
1439
    /**
1440
     * Subscribes client applications to either push or pull notifications.
1441
     *
1442
     * It is important to be aware that the structure of the request messages
1443
     * and responses is different depending on the type of event notification.
1444
     *
1445
     * @since Exchange 2007
1446
     *
1447
     * @param \jamesiarmes\PhpEws\Request\SubscribeType $request
1448
     * @return \jamesiarmes\PhpEws\Response\SubscribeResponseType
1449
     */
1450
    public function Subscribe($request)
1451
    {
1452
        return $this->makeRequest(__FUNCTION__, $request);
1453
    }
1454
1455
    /**
1456
     * Synchronizes folders between the computer that is running Microsoft
1457
     * Exchange Server and the client.
1458
     *
1459
     * @since Exchange 2007
1460
     *
1461
     * @param \jamesiarmes\PhpEws\Request\SyncFolderHierarchyType $request
1462
     * @return \jamesiarmes\PhpEws\Response\SyncFolderHierarchyResponseType
1463
     */
1464
    public function SyncFolderHierarchy($request)
1465
    {
1466
        return $this->makeRequest(__FUNCTION__, $request);
1467
    }
1468
1469
    /**
1470
     * Synchronizes items between the Exchange server and the client.
1471
     *
1472
     * @since Exchange 2007
1473
     *
1474
     * @param \jamesiarmes\PhpEws\Request\SyncFolderItemsType $request
1475
     * @return \jamesiarmes\PhpEws\Response\SyncFolderItemsResponseType
1476
     */
1477
    public function SyncFolderItems($request)
1478
    {
1479
        return $this->makeRequest(__FUNCTION__, $request);
1480
    }
1481
1482
    /**
1483
     * Uninstalls a mail app for Outlook.
1484
     *
1485
     * @since Exchange 2013
1486
     *
1487
     * @param \jamesiarmes\PhpEws\Request\UninstallAppType $request
1488
     * @return \jamesiarmes\PhpEws\Response\UninstallAppResponseType
1489
     */
1490
    public function UninstallApp($request)
1491
    {
1492
        return $this->makeRequest(__FUNCTION__, $request);
1493
    }
1494
1495
    /**
1496
     * Ends a pull notification subscription.
1497
     *
1498
     * Use this operation rather than letting a subscription timeout. This
1499
     * operation is only valid for pull notifications.
1500
     *
1501
     * @since Exchange 2007
1502
     *
1503
     * @param \jamesiarmes\PhpEws\Request\UnsubscribeType $request
1504
     * @return \jamesiarmes\PhpEws\Response\UnsubscribeResponseType
1505
     */
1506
    public function Unsubscribe($request)
1507
    {
1508
        return $this->makeRequest(__FUNCTION__, $request);
1509
    }
1510
1511
    /**
1512
     * Updates delegate permissions on a principal's mailbox.
1513
     *
1514
     * @since Exchange 2007 SP1
1515
     *
1516
     * @param \jamesiarmes\PhpEws\Request\UpdateDelegateType $request
1517
     * @return \jamesiarmes\PhpEws\Response\UpdateDelegateResponseMessageType
1518
     */
1519
    public function UpdateDelegate($request)
1520
    {
1521
        return $this->makeRequest(__FUNCTION__, $request);
1522
    }
1523
1524
    /**
1525
     * Modifies properties of an existing item in the Exchange store.
1526
     *
1527
     * Each UpdateFolder operation consists of the following:
1528
     * - A FolderId element that specifies a folder to update.
1529
     * - An internal path of an element in the folder, as specified by the
1530
     *   folder shape, which specifies the data to update.
1531
     * - A folder that contains the new value of the updated field, if the
1532
     *   update is not a deletion.
1533
     *
1534
     * @since Exchange 2007
1535
     *
1536
     * @param \jamesiarmes\PhpEws\Request\UpdateFolderType $request
1537
     * @return \jamesiarmes\PhpEws\Response\UpdateFolderResponseType
1538
     */
1539
    public function UpdateFolder($request)
1540
    {
1541
        return $this->makeRequest(__FUNCTION__, $request);
1542
    }
1543
1544
    /**
1545
     * Updates the authenticated user's Inbox rules by applying the specified
1546
     * operations.
1547
     *
1548
     * This operation is used to create an Inbox rule, to set an Inbox rule, or
1549
     * to delete an Inbox rule.
1550
     *
1551
     * @since Exchange 2010 SP1
1552
     *
1553
     * @param \jamesiarmes\PhpEws\Request\UpdateInboxRulesRequestType $request
1554
     * @return \jamesiarmes\PhpEws\Response\UpdateInboxRulesResponseType
1555
     */
1556
    public function UpdateInboxRules($request)
1557
    {
1558
        return $this->makeRequest(__FUNCTION__, $request);
1559
    }
1560
1561
    /**
1562
     * Used to modify the properties of an existing item in the Exchange store.
1563
     *
1564
     * @since Exchange 2007
1565
     *
1566
     * @param \jamesiarmes\PhpEws\Request\UpdateItemType $request
1567
     * @return \jamesiarmes\PhpEws\Response\UpdateItemResponseType
1568
     */
1569
    public function UpdateItem($request)
1570
    {
1571
        return $this->makeRequest(__FUNCTION__, $request);
1572
    }
1573
1574
    /**
1575
     * Updates a user configuration object on a folder.
1576
     *
1577
     * @since Exchange 2010
1578
     *
1579
     * @param \jamesiarmes\PhpEws\Request\UpdateUserConfigurationType $request
1580
     * @return \jamesiarmes\PhpEws\Response\UpdateUserConfigurationResponseType
1581
     */
1582
    public function UpdateUserConfiguration($request)
1583
    {
1584
        return $this->makeRequest(__FUNCTION__, $request);
1585
    }
1586
1587
    /**
1588
     * Uploads a stream of items into an Exchange mailbox.
1589
     *
1590
     * @since Exchange 2010 SP1
1591
     *
1592
     * @param \jamesiarmes\PhpEws\Request\UploadItemsType $request
1593
     * @return \jamesiarmes\PhpEws\Response\UploadItemsResponseType
1594
     */
1595
    public function UploadItems($request)
1596
    {
1597
        return $this->makeRequest(__FUNCTION__, $request);
1598
    }
1599
1600
    /**
1601
     * Initializes the SoapClient object to make a request
1602
     *
1603
     * @return \jamesiarmes\PhpNtlm\SoapClient
1604
     */
1605
    protected function initializeSoapClient()
1606
    {
1607
        $this->soap = new SoapClient(
1608
            dirname(__FILE__) . '/assets/services.wsdl',
1609
            array(
1610
                'user' => $this->username,
1611
                'password' => $this->password,
1612
                'location' => 'https://' . $this->server . '/EWS/Exchange.asmx',
1613
                'classmap' => $this->classMap(),
1614
                'curlopts' => $this->curl_options,
1615
                'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
1616
            )
1617
        );
1618
1619
        return $this->soap;
1620
    }
1621
1622
    /**
1623
     * The class map used to process SOAP requests and responses.
1624
     *
1625
     * @return string[]
1626
     *
1627
     * @see \jamesiarmes\PhpEws\ClassMap::getMap()
1628
     */
1629
    protected function classMap()
1630
    {
1631
        $class_map = new ClassMap();
1632
1633
        return $class_map->getMap();
1634
    }
1635
1636
    /**
1637
     * Makes the SOAP call for a request.
1638
     *
1639
     * @param string $operation
1640
     *   The operation to be called.
1641
     * @param \jamesiarmes\PhpEws\Request $request
1642
     *   The request object for the operation.
1643
     * @return \jamesiarmes\PhpEws\Response
1644
     *   The response object for the operation.
1645
     *
1646
     * @suppress PhanTypeMismatchReturn
1647
     */
1648
    protected function makeRequest($operation, $request)
1649
    {
1650
        $this->getClient()->__setSoapHeaders($this->soapHeaders());
1651
        $response = $this->soap->{$operation}($request);
1652
1653
        return $this->processResponse($response);
1654
    }
1655
1656
    /**
1657
     * Process a response to verify that it succeeded and take the appropriate
1658
     * action
1659
     *
1660
     * @throws \Exception
1661
     *
1662
     * @param \stdClass $response
1663
     * @return \stdClass
1664
     */
1665
    protected function processResponse($response)
1666
    {
1667
        // If the soap call failed then we need to throw an exception.
1668
        $code = $this->soap->getResponseCode();
1669
        if ($code != 200) {
1670
            throw new \Exception(
1671
                "SOAP client returned status of $code.",
1672
                $code
1673
            );
1674
        }
1675
1676
        return $response;
1677
    }
1678
1679
    /**
1680
     * Builds the soap headers to be included with the request.
1681
     *
1682
     * @return \SoapHeader[]
1683
     */
1684
    protected function soapHeaders()
1685
    {
1686
        // If the headers have already been built, no need to do so again.
1687
        if (!empty($this->headers)) {
1688
            return $this->headers;
1689
        }
1690
1691
        $this->headers = array();
1692
1693
        // Set the schema version.
1694
        $this->headers[] = new \SoapHeader(
1695
            'http://schemas.microsoft.com/exchange/services/2006/types',
1696
            'RequestServerVersion Version="' . $this->version . '"'
1697
        );
1698
1699
        // If impersonation was set then add it to the headers.
1700
        if (!empty($this->impersonation)) {
1701
            $this->headers[] = new \SoapHeader(
1702
                'http://schemas.microsoft.com/exchange/services/2006/types',
1703
                'ExchangeImpersonation',
1704
                $this->impersonation
1705
            );
1706
        }
1707
1708
        if (!empty($this->timezone)) {
1709
            $this->headers[] = new \SoapHeader(
1710
                'http://schemas.microsoft.com/exchange/services/2006/types',
1711
                'TimeZoneContext',
1712
                array(
1713
                    'TimeZoneDefinition' => array(
1714
                        'Id' => $this->timezone,
1715
                    )
1716
                )
1717
            );
1718
        }
1719
1720
        return $this->headers;
1721
    }
1722
}
1723