Completed
Push — master ( ac2b84...734f6a )
by James
03:21
created

Client::DisconnectPhoneCall()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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