Class: Viewpoint::EWS::MailboxUser

Inherits:
Object
  • Object
show all
Includes:
Model
Defined in:
lib/model/mailbox_user.rb

Overview

TODO:

Design a Class method that resolves to an Array of MailboxUsers

This represents a Mailbox object in the Exchange data store

See Also:

Direct Known Subclasses

Attendee

Instance Attribute Summary

Attributes included from Model

#ews_methods, #ews_methods_undef

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(mbox_user) ⇒ MailboxUser

Returns a new instance of MailboxUser.



64
65
66
67
68
# File 'lib/model/mailbox_user.rb', line 64

def initialize(mbox_user)
  super() # Calls initialize in Model (creates @ews_methods Array)
  @ews_item = mbox_user
  define_str_var :name, :email_address, :routing_type, :mailbox_type, :item_id
end

Class Method Details

.find_user(resolve) ⇒ MailboxUser, Array

TODO:
  • rename “resolve” to something more descriptive

  • standardize on a common return type???

Resolve a user in the Exchange Data Store

Parameters:

  • resolve (String)

    A user to resolve to.

Returns:

  • (MailboxUser, Array)

    If it resolves to one user then it returns a MailboxUser. If it resolves to more than one user an Array of MailboxUsers are returned. If an error ocurrs an exception is raised.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/model/mailbox_user.rb', line 35

def self.find_user(resolve)
  resp = (Viewpoint::EWS::EWS.instance).ews.resolve_names(resolve)
  if(resp.status == 'Success')
    return self.new(resp.items.first[:mailbox])
  elsif(resp.code == 'ErrorNameResolutionMultipleResults')
    users = []
    resp.items.each do |u|
      users << self.new(u[:mailbox])
    end
    return users
  else
    raise EwsError, "Find User produced an error: #{resp.code}: #{resp.message}"
  end
end

.get_user_availability(email_address, start_time, end_time) ⇒ Object

Get information about when the user with the given email address is available.

Parameters:

  • email_address (String)

    The email address of the person to find availability for.

  • start_time (String)

    The start of the time range to check as an xs:dateTime.

  • end_time (String)

    The end of the time range to check as an xs:dateTime.

See Also:



55
56
57
58
59
60
61
62
# File 'lib/model/mailbox_user.rb', line 55

def self.get_user_availability(email_address, start_time, end_time)
  resp = (Viewpoint::EWS::EWS.instance).ews.get_user_availability(email_address, start_time, end_time)
  if(resp.status == 'Success')
    return resp.items
  else
    raise EwsError, "GetUserAvailability produced an error: #{resp.code}: #{resp.message}"
  end
end

Instance Method Details

#add_delegate!(delegate_email, permissions) ⇒ true

Adds one or more delegates to a principal’s mailbox and sets specific access permissions

Parameters:

  • delegate_email (String, MailboxUser)

    The user you would like to give delegate access to. This can either be a simple String e-mail address or you can pass in a MailboxUser object.

  • permissions (Hash)

    A hash of folder type keys and permission type values. An example would be => ‘Editor’. Possible keys are: :calendar_folder_permission_level, :tasks_folder_permission_level, :inbox_folder_permission_level :contacts_folder_permission_level, :notes_folder_permission_level, :journal_folder_permission_level and possible values are: None/Editor/Reviewer/Author/Custom

Returns:

  • (true)

    This method either returns true or raises an error with the message as to why this operation did not succeed.

See Also:



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/model/mailbox_user.rb', line 103

def add_delegate!(delegate_email, permissions)
  # Use a new hash so the passed hash is not modified in case we are in a loop.
  # Thanks to Markus Roberts for pointing this out.
  formatted_perms = {}
  # Modify permissions so we can pass it to the builders
  permissions.each_pair do |k,v|
    formatted_perms[k] = {:text => v}
  end

  resp = (Viewpoint::EWS::EWS.instance).ews.add_delegate(self.email_address, delegate_email, formatted_perms)
  if(resp.status == 'Success')
    return true
  else
    raise EwsError, "Could not add delegate access for user #{delegate_email}: #{resp.code}, #{resp.message}"
  end
end

#get_delegate_infoObject



135
136
137
138
139
140
141
142
# File 'lib/model/mailbox_user.rb', line 135

def get_delegate_info()
  resp = (Viewpoint::EWS::EWS.instance).ews.get_delegate(self.email_address)
 # if(resp.status == 'Success')
 #   return true
 # else
 #   raise EwsError, "Could not update delegate access for user #{delegate_email}: #{resp.code}, #{resp.message}"
 # end
end

#get_oofObject



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/model/mailbox_user.rb', line 70

def get_oof
  mailbox = {:mailbox => {:address => {:text => email_address}}}
  resp = (Viewpoint::EWS::EWS.instance).ews.get_user_oof_settings(mailbox)
  s = resp[:oof_settings]
  @oof_state = s[:oof_state][:text]
  @oof_ext_audience = s[:external_audience][:text]
  @oof_start = DateTime.parse(s[:duration][:start_time][:text])
  @oof_end = DateTime.parse(s[:duration][:end_time][:text])
  @oof_internal_reply = s[:internal_reply][:message][:text]
  @oof_external_reply = s[:internal_reply][:message][:text]
  true
end

#get_user_availability(start_time, end_time) ⇒ Object

Get information about when this user is available.

Parameters:

  • start_time (String)

    The start of the time range to check as an xs:dateTime.

  • end_time (String)

    The end of the time range to check as an xs:dateTime.

See Also:



87
88
89
# File 'lib/model/mailbox_user.rb', line 87

def get_user_availability(start_time, end_time)
  return MailboxUser.get_user_availability(self.email_address, start_time, end_time)
end

#update_delegate!(delegate_email, permissions) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/model/mailbox_user.rb', line 120

def update_delegate!(delegate_email, permissions)
  # Modify permissions so we can pass it to the builders
  formatted_perms = {}
  permissions.each_pair do |k,v|
    formatted_perms[k] = {:text => v}
  end

  resp = (Viewpoint::EWS::EWS.instance).ews.update_delegate(self.email_address, delegate_email, formatted_perms)
  if(resp.status == 'Success')
    return true
  else
    raise EwsError, "Could not update delegate access for user #{delegate_email}: #{resp.code}, #{resp.message}"
  end
end