zimbra 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/.irbrc +6 -0
- data/Gemfile +6 -0
- data/README +3 -2
- data/Rakefile +1 -0
- data/lib/zimbra.rb +31 -6
- data/lib/zimbra/appointment.rb +274 -0
- data/lib/zimbra/appointment/alarm.rb +101 -0
- data/lib/zimbra/appointment/attendee.rb +97 -0
- data/lib/zimbra/appointment/invite.rb +360 -0
- data/lib/zimbra/appointment/recur_exception.rb +83 -0
- data/lib/zimbra/appointment/recur_rule.rb +184 -0
- data/lib/zimbra/appointment/reply.rb +91 -0
- data/lib/zimbra/calendar.rb +27 -0
- data/lib/zimbra/delegate_auth_token.rb +49 -0
- data/lib/zimbra/ext/hash.rb +72 -0
- data/lib/zimbra/extra/date_helpers.rb +111 -0
- data/lib/zimbra/folder.rb +100 -0
- data/lib/zimbra/handsoap_account_service.rb +44 -0
- data/lib/zimbra/handsoap_service.rb +1 -1
- data/lib/zimbra/version.rb +3 -0
- data/spec/fixtures/xml_api_requests/appointments/create.xml +84 -0
- data/spec/fixtures/xml_api_responses/alarms/15_minutes_before.xml +26 -0
- data/spec/fixtures/xml_api_responses/alarms/using_all_intervals.xml +26 -0
- data/spec/fixtures/xml_api_responses/appointments/appointment_response_1.xml +40 -0
- data/spec/fixtures/xml_api_responses/attendees/one_attendee_and_one_reply.xml +27 -0
- data/spec/fixtures/xml_api_responses/attendees/three_attendees_response_1.xml +30 -0
- data/spec/fixtures/xml_api_responses/multiple_invites/recurring_with_exceptions.xml +109 -0
- data/spec/fixtures/xml_api_responses/recur_rules/day_27_of_every_2_months.xml +27 -0
- data/spec/fixtures/xml_api_responses/recur_rules/every_2_days.xml +26 -0
- data/spec/fixtures/xml_api_responses/recur_rules/every_3_weeks_on_tuesday_and_friday.xml +30 -0
- data/spec/fixtures/xml_api_responses/recur_rules/every_day_50_instances.xml +27 -0
- data/spec/fixtures/xml_api_responses/recur_rules/every_monday_wednesday_friday.xml +31 -0
- data/spec/fixtures/xml_api_responses/recur_rules/every_tuesday.xml +29 -0
- data/spec/fixtures/xml_api_responses/recur_rules/every_weekday_with_end_date.xml +34 -0
- data/spec/fixtures/xml_api_responses/recur_rules/every_year_on_february_2.xml +28 -0
- data/spec/fixtures/xml_api_responses/recur_rules/first_day_of_every_month.xml +36 -0
- data/spec/fixtures/xml_api_responses/recur_rules/first_monday_of_every_february.xml +31 -0
- data/spec/fixtures/xml_api_responses/recur_rules/first_weekend_day_of_every_month.xml +31 -0
- data/spec/fixtures/xml_api_responses/recur_rules/last_day_of_every_month.xml +36 -0
- data/spec/fixtures/xml_api_responses/recur_rules/second_day_of_every_2_months.xml +36 -0
- data/spec/fixtures/xml_api_responses/recur_rules/second_wednesday_of_every_month.xml +29 -0
- data/spec/fixtures/xml_api_responses/recur_rules/weekly_with_an_exception.xml +44 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/zimbra/acl_spec.rb +11 -0
- data/spec/zimbra/appointment/alarm_spec.rb +33 -0
- data/spec/zimbra/appointment/invite_spec.rb +62 -0
- data/spec/zimbra/appointment/recur_rule_spec.rb +307 -0
- data/spec/zimbra/appointment_spec.rb +175 -0
- data/spec/zimbra/common_elements_spec.rb +33 -0
- data/spec/zimbra/distribution_list_spec.rb +54 -0
- data/zimbra.gemspec +28 -0
- metadata +165 -68
@@ -0,0 +1,111 @@
|
|
1
|
+
module Zimbra
|
2
|
+
class DateHelpers
|
3
|
+
class Frequency
|
4
|
+
FREQUENCIES = [
|
5
|
+
{ name: :secondly, zimbra_name: 'SEC', abbreviations: [] },
|
6
|
+
{ name: :minutely, zimbra_name: 'MIN', abbreviations: [] },
|
7
|
+
{ name: :hourly, zimbra_name: 'HOU', abbreviations: [] },
|
8
|
+
{ name: :daily, zimbra_name: 'DAI', abbreviations: [] },
|
9
|
+
{ name: :weekly, zimbra_name: 'WEE', abbreviations: [] },
|
10
|
+
{ name: :monthly, zimbra_name: 'MON', abbreviations: [] },
|
11
|
+
{ name: :yearly, zimbra_name: 'YEA', abbreviations: [] }
|
12
|
+
]
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def all
|
16
|
+
@all ||= FREQUENCIES.inject([]) do |frequencies, data|
|
17
|
+
frequencies << new(data)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def find(name_or_abbreviation)
|
22
|
+
all.find { |frequency| frequency.match?(name_or_abbreviation) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_accessor :name, :zimbra_name, :abbreviations
|
27
|
+
|
28
|
+
def initialize(args = {})
|
29
|
+
@name = args[:name]
|
30
|
+
@zimbra_name = args[:zimbra_name]
|
31
|
+
@abbreviations = args[:abbreviations]
|
32
|
+
end
|
33
|
+
|
34
|
+
def match?(name_or_abbreviation)
|
35
|
+
downcased_matcher = name_or_abbreviation.to_s.downcase
|
36
|
+
([name.to_s, zimbra_name.to_s] + abbreviations).map(&:downcase).include?(downcased_matcher)
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_sym
|
40
|
+
name.downcase.to_sym
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class WeekDay
|
45
|
+
WEEK_DAYS = [
|
46
|
+
{
|
47
|
+
id: 1, name: :Sunday, zimbra_name: 'SU',
|
48
|
+
abbreviations: ['su', 'sun']
|
49
|
+
},
|
50
|
+
{
|
51
|
+
id: 2, name: :Monday, zimbra_name: 'MO',
|
52
|
+
abbreviations: ['mo', 'mon']
|
53
|
+
},
|
54
|
+
{
|
55
|
+
id: 3, name: :Tuesday, zimbra_name: 'TU',
|
56
|
+
abbreviations: ['tu', 'tue']
|
57
|
+
},
|
58
|
+
{
|
59
|
+
id: 4, name: :Wednesday, zimbra_name: 'WE',
|
60
|
+
abbreviations: ['we', 'wed']
|
61
|
+
},
|
62
|
+
{
|
63
|
+
id: 5, name: :Thursday, zimbra_name: 'TH',
|
64
|
+
abbreviations: ['th', 'thu', 'thur', 'thurs']
|
65
|
+
},
|
66
|
+
{
|
67
|
+
id: 6, name: :Friday, zimbra_name: 'FR',
|
68
|
+
abbreviations: ['fr', 'fri']
|
69
|
+
},
|
70
|
+
{
|
71
|
+
id: 7, name: :Saturday, zimbra_name: 'SA',
|
72
|
+
abbreviations: ['sa', 'sat']
|
73
|
+
}
|
74
|
+
] unless const_defined?(:WEEK_DAYS)
|
75
|
+
|
76
|
+
class << self
|
77
|
+
def all
|
78
|
+
@all ||= WEEK_DAYS.inject([]) do |week_days, data|
|
79
|
+
week_days << new(data)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def find(id_name_or_abbreviation)
|
84
|
+
all.find { |week_day| week_day.match?(id_name_or_abbreviation) }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
attr_accessor :id, :name, :abbreviations, :zimbra_name
|
89
|
+
|
90
|
+
def initialize(args = {})
|
91
|
+
@id = args[:id]
|
92
|
+
@name = args[:name]
|
93
|
+
@zimbra_name = args[:zimbra_name]
|
94
|
+
@abbreviations = args[:abbreviations]
|
95
|
+
end
|
96
|
+
|
97
|
+
def match?(id_name_or_abbreviation)
|
98
|
+
if id_name_or_abbreviation.is_a?(Fixnum)
|
99
|
+
id_name_or_abbreviation == id
|
100
|
+
else
|
101
|
+
downcased_matcher = id_name_or_abbreviation.to_s.downcase
|
102
|
+
([name.to_s, zimbra_name.to_s] + abbreviations).map(&:downcase).include?(downcased_matcher)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def to_sym
|
107
|
+
name.downcase.to_sym
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# http://files.zimbra.com/docs/soap_api/8.0.4/soap-docs-804/api-reference/zimbraMail/GetFolder.html
|
2
|
+
module Zimbra
|
3
|
+
class Folder
|
4
|
+
class << self
|
5
|
+
def all
|
6
|
+
FolderService.all
|
7
|
+
end
|
8
|
+
|
9
|
+
def find_all_by_view(view)
|
10
|
+
FolderService.find_all_by_view(view)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
ATTRS = [
|
15
|
+
:id, :uuid, :name, :view, :absolute_folder_path,
|
16
|
+
:parent_folder_id, :parent_folder_uuid,
|
17
|
+
:non_folder_item_count, :non_folder_item_size,
|
18
|
+
:revision, :imap_next_uid, :imap_modified_sequence, :modified_sequence, :activesync_disabled,
|
19
|
+
:modified_date
|
20
|
+
] unless const_defined?(:ATTRS)
|
21
|
+
|
22
|
+
attr_accessor *ATTRS
|
23
|
+
|
24
|
+
def initialize(args = {})
|
25
|
+
self.attributes = args
|
26
|
+
end
|
27
|
+
|
28
|
+
def attributes=(args = {})
|
29
|
+
ATTRS.each do |attr_name|
|
30
|
+
self.send(:"#{attr_name}=", (args[attr_name] || args[attr_name.to_s])) if args.has_key?(attr_name) || args.has_key?(attr_name.to_s)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class FolderService < HandsoapAccountService
|
36
|
+
def all
|
37
|
+
xml = invoke("n2:GetFolderRequest")
|
38
|
+
parse_xml_responses(xml)
|
39
|
+
end
|
40
|
+
|
41
|
+
def find_all_by_view(view)
|
42
|
+
xml = invoke("n2:GetFolderRequest") do |message|
|
43
|
+
Builder.find_all_by_view(message, view)
|
44
|
+
end
|
45
|
+
parse_xml_responses(xml)
|
46
|
+
end
|
47
|
+
|
48
|
+
def parse_xml_responses(xml)
|
49
|
+
Parser.get_all_response(xml)
|
50
|
+
end
|
51
|
+
|
52
|
+
class Builder
|
53
|
+
class << self
|
54
|
+
def find_all_by_view(message, view)
|
55
|
+
message.set_attr 'view', view
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class Parser
|
61
|
+
ATTRIBUTE_MAPPING = {
|
62
|
+
:id => :id,
|
63
|
+
:uuid => :uuid,
|
64
|
+
:name => :name,
|
65
|
+
:view => :view,
|
66
|
+
:absFolderPath => :absolute_folder_path,
|
67
|
+
:l => :parent_folder_id,
|
68
|
+
:luuid => :parent_folder_uuid,
|
69
|
+
:n => :non_folder_item_count,
|
70
|
+
:s => :non_folder_item_size,
|
71
|
+
:rev => :revision,
|
72
|
+
:i4next => :imap_next_uid,
|
73
|
+
:i4ms => :imap_modified_sequence,
|
74
|
+
:ms => :modified_sequence,
|
75
|
+
:activesyncdisabled => :activesync_disabled,
|
76
|
+
:md => :modified_date
|
77
|
+
}
|
78
|
+
|
79
|
+
class << self
|
80
|
+
def get_all_response(response)
|
81
|
+
(response/"//n2:folder").map do |node|
|
82
|
+
folder_response(node)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def folder_response(node)
|
87
|
+
folder_attributes = ATTRIBUTE_MAPPING.inject({}) do |attrs, (xml_name, attr_name)|
|
88
|
+
attrs[attr_name] = (node/"@#{xml_name}").to_s
|
89
|
+
attrs
|
90
|
+
end
|
91
|
+
initialize_from_attributes(folder_attributes)
|
92
|
+
end
|
93
|
+
|
94
|
+
def initialize_from_attributes(folder_attributes)
|
95
|
+
Zimbra::Folder.new(folder_attributes)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'handsoap'
|
2
|
+
|
3
|
+
module Zimbra
|
4
|
+
module HandsoapAccountNamespaces
|
5
|
+
def request_namespaces(doc)
|
6
|
+
doc.alias 'n1', "urn:zimbra"
|
7
|
+
doc.alias 'n2', "urn:zimbraMail"
|
8
|
+
doc.alias 'env', 'http://schemas.xmlsoap.org/soap/envelope/'
|
9
|
+
end
|
10
|
+
def response_namespaces(doc)
|
11
|
+
doc.add_namespace 'n2', "urn:zimbraMail"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module HandsoapAccountUriOverrides
|
16
|
+
def uri
|
17
|
+
Zimbra.account_api_url
|
18
|
+
end
|
19
|
+
def envelope_namespace
|
20
|
+
'http://www.w3.org/2003/05/soap-envelope'
|
21
|
+
end
|
22
|
+
def request_content_type
|
23
|
+
"application/soap+xml"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class HandsoapAccountService < Handsoap::Service
|
28
|
+
include HandsoapErrors
|
29
|
+
include HandsoapAccountNamespaces
|
30
|
+
extend HandsoapAccountUriOverrides
|
31
|
+
|
32
|
+
def on_create_document(doc)
|
33
|
+
request_namespaces(doc)
|
34
|
+
header = doc.find("Header")
|
35
|
+
header.add "n1:context" do |s|
|
36
|
+
s.set_attr "env:mustUnderstand", "0"
|
37
|
+
s.add "n1:authToken", Zimbra.account_auth_token
|
38
|
+
end
|
39
|
+
end
|
40
|
+
def on_response_document(doc)
|
41
|
+
response_namespaces(doc)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
<?xml version='1.0' ?>
|
2
|
+
<CreateAppointmentRequest>
|
3
|
+
<m l="10">
|
4
|
+
<inv allDay="0" loc="Conference Room" status="CONF">
|
5
|
+
<comp class="PUB" fb="B" isOrg="1" name="fdsafdsafdsafdsafdsafdsa" transp="O">
|
6
|
+
<description>This is a recurring series</description>
|
7
|
+
<s u="1386597600000" d="20131209T140000Z" />
|
8
|
+
<e u="1386599400000" d="20131209T143000Z" />
|
9
|
+
<alarm action="DISPLAY">
|
10
|
+
<trigger>
|
11
|
+
<rel neg="1" m="5" related="START" />
|
12
|
+
</trigger>
|
13
|
+
</alarm>
|
14
|
+
<recur>
|
15
|
+
<add>
|
16
|
+
<rule freq="DAI">
|
17
|
+
<interval ival="1" />
|
18
|
+
<byday>
|
19
|
+
<wkday day="MO" />
|
20
|
+
<wkday day="TU" />
|
21
|
+
<wkday day="WE" />
|
22
|
+
<wkday day="TH" />
|
23
|
+
<wkday day="FR" />
|
24
|
+
</byday>
|
25
|
+
</rule>
|
26
|
+
</add>
|
27
|
+
</recur>
|
28
|
+
<or a="mail03@greenviewdata.com" />
|
29
|
+
</comp>
|
30
|
+
</inv>
|
31
|
+
<inv allDay="0" loc="" status="CONF">
|
32
|
+
<comp class="PUB" fb="B" isOrg="1" name="fdsafdsafdsafdsafdsafdsa" transp="O">
|
33
|
+
<s u="1387551600000" d="20131220T150000Z" />
|
34
|
+
<e u="1387553400000" d="20131220T153000Z" />
|
35
|
+
<alarm action="DISPLAY">
|
36
|
+
<trigger>
|
37
|
+
<rel neg="1" m="5" related="START" />
|
38
|
+
</trigger>
|
39
|
+
</alarm>
|
40
|
+
<or a="mail03@greenviewdata.com" />
|
41
|
+
<exceptId d="20131220T090000" tz="America/New_York" />
|
42
|
+
</comp>
|
43
|
+
</inv>
|
44
|
+
<inv allDay="0" loc="" status="CONF">
|
45
|
+
<comp class="PUB" fb="B" isOrg="1" name="fdsafdsafdsafdsafdsafdsa" transp="O">
|
46
|
+
<description>This instance occurs at 1PM instead</description>
|
47
|
+
<s u="1390500000000" d="20140123T180000Z" />
|
48
|
+
<e u="1390501800000" d="20140123T183000Z" />
|
49
|
+
<alarm action="DISPLAY">
|
50
|
+
<trigger>
|
51
|
+
<rel neg="1" m="5" related="START" />
|
52
|
+
</trigger>
|
53
|
+
</alarm>
|
54
|
+
<or a="mail03@greenviewdata.com" />
|
55
|
+
<exceptId d="20140123T090000" tz="America/New_York" />
|
56
|
+
</comp>
|
57
|
+
</inv>
|
58
|
+
<inv allDay="0" loc="" status="CONF">
|
59
|
+
<comp class="PUB" fb="B" isOrg="1" name="fdsafdsafdsafdsafdsafdsa" transp="O">
|
60
|
+
<description>This is a recurring series
|
61
|
+
|
62
|
+
with a few exceptions</description>
|
63
|
+
<s u="1390928400000" d="20140128T170000Z" />
|
64
|
+
<e u="1390930200000" d="20140128T173000Z" />
|
65
|
+
<alarm action="DISPLAY">
|
66
|
+
<trigger>
|
67
|
+
<rel neg="1" m="5" related="START" />
|
68
|
+
</trigger>
|
69
|
+
</alarm>
|
70
|
+
<or a="mail03@greenviewdata.com" />
|
71
|
+
<exceptId d="20140128T090000" tz="America/New_York" />
|
72
|
+
</comp>
|
73
|
+
</inv>
|
74
|
+
<inv allDay="0" loc="" status="CANC">
|
75
|
+
<comp class="PUB" fb="B" isOrg="1" name="Cancelled: fdsafdsafdsafdsafdsafdsa" transp="O">
|
76
|
+
<comment>A single instance of a recurring meeting has been cancelled.</comment>
|
77
|
+
<s u="1391176800000" d="20140131T140000Z" />
|
78
|
+
<e u="1391178600000" d="20140131T143000Z" />
|
79
|
+
<or a="mail03@greenviewdata.com" />
|
80
|
+
<exceptId d="20140131T090000" tz="America/New_York" />
|
81
|
+
</comp>
|
82
|
+
</inv>
|
83
|
+
</m>
|
84
|
+
</CreateAppointmentRequest>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<appt uid="1b33102b-6d2e-4d98-ad27-c59a92de9798" id="498" rev="27627" nextAlarm="1387486500000" d="1387472221000" s="0" l="10">
|
2
|
+
<inv id="497" seq="3" compNum="0" type="appt">
|
3
|
+
<tz id="America/New_York" stdoff="-300" stdname="EST" dayoff="-240" dayname="EDT">
|
4
|
+
<standard wkday="1" min="0" sec="0" mon="11" hour="2" week="1"/>
|
5
|
+
<daylight wkday="1" min="0" sec="0" mon="3" hour="2" week="2"/>
|
6
|
+
</tz>
|
7
|
+
<comp uid="1b33102b-6d2e-4d98-ad27-c59a92de9798" d="1387472221000" status="CONF" noBlob="1" ciFolder="10" isOrg="1" class="PUB" loc="" compNum="0" apptId="498" url="" fb="B" calItemId="498" x_uid="1b33102b-6d2e-4d98-ad27-c59a92de9798" name="RECURTEST" seq="3" rsvp="0" fba="B" method="PUBLISH" transp="O">
|
8
|
+
<alarm action="DISPLAY">
|
9
|
+
<trigger>
|
10
|
+
<rel neg="1" m="15" related="START"/>
|
11
|
+
</trigger>
|
12
|
+
<desc/>
|
13
|
+
</alarm>
|
14
|
+
<or d="Mail03" a="mail03@greenviewdata.com" url="mail03@greenviewdata.com"/>
|
15
|
+
<recur>
|
16
|
+
<add>
|
17
|
+
<rule freq="DAI">
|
18
|
+
<interval ival="2"/>
|
19
|
+
</rule>
|
20
|
+
</add>
|
21
|
+
</recur>
|
22
|
+
<s u="1387486800000" d="20131219T160000" tz="America/New_York"/>
|
23
|
+
<e u="1387490400000" d="20131219T170000" tz="America/New_York"/>
|
24
|
+
</comp>
|
25
|
+
</inv>
|
26
|
+
</appt>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<appt uid="1b33102b-6d2e-4d98-ad27-c59a92de9798" id="498" rev="27627" nextAlarm="1387486500000" d="1387472221000" s="0" l="10">
|
2
|
+
<inv id="497" seq="3" compNum="0" type="appt">
|
3
|
+
<tz id="America/New_York" stdoff="-300" stdname="EST" dayoff="-240" dayname="EDT">
|
4
|
+
<standard wkday="1" min="0" sec="0" mon="11" hour="2" week="1"/>
|
5
|
+
<daylight wkday="1" min="0" sec="0" mon="3" hour="2" week="2"/>
|
6
|
+
</tz>
|
7
|
+
<comp uid="1b33102b-6d2e-4d98-ad27-c59a92de9798" d="1387472221000" status="CONF" noBlob="1" ciFolder="10" isOrg="1" class="PUB" loc="" compNum="0" apptId="498" url="" fb="B" calItemId="498" x_uid="1b33102b-6d2e-4d98-ad27-c59a92de9798" name="RECURTEST" seq="3" rsvp="0" fba="B" method="PUBLISH" transp="O">
|
8
|
+
<alarm action="DISPLAY">
|
9
|
+
<trigger>
|
10
|
+
<rel neg="0" m="15" w="1" d="2" h="3" s="25" count="2" related="END"/>
|
11
|
+
</trigger>
|
12
|
+
<desc/>
|
13
|
+
</alarm>
|
14
|
+
<or d="Mail03" a="mail03@greenviewdata.com" url="mail03@greenviewdata.com"/>
|
15
|
+
<recur>
|
16
|
+
<add>
|
17
|
+
<rule freq="DAI">
|
18
|
+
<interval ival="2"/>
|
19
|
+
</rule>
|
20
|
+
</add>
|
21
|
+
</recur>
|
22
|
+
<s u="1387486800000" d="20131219T160000" tz="America/New_York"/>
|
23
|
+
<e u="1387490400000" d="20131219T170000" tz="America/New_York"/>
|
24
|
+
</comp>
|
25
|
+
</inv>
|
26
|
+
</appt>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
2
|
+
<soap:Header>
|
3
|
+
<context xmlns="urn:zimbra">
|
4
|
+
<change token="27762"/>
|
5
|
+
</context>
|
6
|
+
</soap:Header>
|
7
|
+
<soap:Body>
|
8
|
+
<GetAppointmentResponse xmlns="urn:zimbraMail">
|
9
|
+
<appt id="518" uid="1c71d474-5c1f-4048-84e3-9725c0825a44" nextAlarm="1392233100000" d="1387571704000" rev="27656" s="0" l="10">
|
10
|
+
<inv id="517" seq="4" compNum="0" type="appt">
|
11
|
+
<tz id="America/New_York" stdoff="-300" dayname="EDT" dayoff="-240" stdname="EST">
|
12
|
+
<standard min="0" wkday="1" sec="0" mon="11" hour="2" week="1"/>
|
13
|
+
<daylight min="0" wkday="1" sec="0" mon="3" hour="2" week="2"/>
|
14
|
+
</tz>
|
15
|
+
<comp uid="1c71d474-5c1f-4048-84e3-9725c0825a44" d="1387571704000" status="CONF" noBlob="1" ciFolder="10" isOrg="1" class="PUB" loc="" compNum="0" apptId="518" fb="B" url="" calItemId="518" x_uid="1c71d474-5c1f-4048-84e3-9725c0825a44" name="Test2222" seq="4" rsvp="0" fba="B" method="PUBLISH" transp="O">
|
16
|
+
<alarm action="DISPLAY">
|
17
|
+
<trigger>
|
18
|
+
<rel neg="1" m="5" related="START"/>
|
19
|
+
</trigger>
|
20
|
+
<desc/>
|
21
|
+
</alarm>
|
22
|
+
<or d="Mail03" a="mail03@greenviewdata.com" url="mail03@greenviewdata.com"/>
|
23
|
+
<recur>
|
24
|
+
<add>
|
25
|
+
<rule freq="MON">
|
26
|
+
<interval ival="1"/>
|
27
|
+
<byday>
|
28
|
+
<wkday ordwk="2" day="WE"/>
|
29
|
+
</byday>
|
30
|
+
</rule>
|
31
|
+
</add>
|
32
|
+
</recur>
|
33
|
+
<s u="1355340600000" d="20121212T143000" tz="America/New_York"/>
|
34
|
+
<e d="20121212T153000" u="1355344200000" tz="America/New_York"/>
|
35
|
+
</comp>
|
36
|
+
</inv>
|
37
|
+
</appt>
|
38
|
+
</GetAppointmentResponse>
|
39
|
+
</soap:Body>
|
40
|
+
</soap:Envelope>
|