gitlab_support_readiness 1.0.0
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.
- checksums.yaml +7 -0
- data/lib/support_readiness/client.rb +108 -0
- data/lib/support_readiness/gitlab/client.rb +64 -0
- data/lib/support_readiness/gitlab/configuration.rb +46 -0
- data/lib/support_readiness/gitlab/groups.rb +180 -0
- data/lib/support_readiness/gitlab/issues.rb +410 -0
- data/lib/support_readiness/gitlab/namespaces.rb +190 -0
- data/lib/support_readiness/gitlab/projects.rb +510 -0
- data/lib/support_readiness/gitlab/repositories.rb +267 -0
- data/lib/support_readiness/gitlab/users.rb +488 -0
- data/lib/support_readiness/gitlab.rb +19 -0
- data/lib/support_readiness/pagerduty/client.rb +66 -0
- data/lib/support_readiness/pagerduty/configuration.rb +43 -0
- data/lib/support_readiness/pagerduty/escalation_policies.rb +123 -0
- data/lib/support_readiness/pagerduty/schedules.rb +223 -0
- data/lib/support_readiness/pagerduty/services.rb +132 -0
- data/lib/support_readiness/pagerduty.rb +16 -0
- data/lib/support_readiness/redis.rb +90 -0
- data/lib/support_readiness/zendesk/articles.rb +210 -0
- data/lib/support_readiness/zendesk/automations.rb +304 -0
- data/lib/support_readiness/zendesk/client.rb +84 -0
- data/lib/support_readiness/zendesk/configuration.rb +49 -0
- data/lib/support_readiness/zendesk/group_memberships.rb +256 -0
- data/lib/support_readiness/zendesk/groups.rb +249 -0
- data/lib/support_readiness/zendesk/job_statuses.rb +188 -0
- data/lib/support_readiness/zendesk/macros.rb +267 -0
- data/lib/support_readiness/zendesk/organization_fields.rb +233 -0
- data/lib/support_readiness/zendesk/organization_memberships.rb +257 -0
- data/lib/support_readiness/zendesk/organizations.rb +515 -0
- data/lib/support_readiness/zendesk/roles.rb +194 -0
- data/lib/support_readiness/zendesk/search.rb +159 -0
- data/lib/support_readiness/zendesk/sla_policies.rb +232 -0
- data/lib/support_readiness/zendesk/ticket_fields.rb +222 -0
- data/lib/support_readiness/zendesk/ticket_forms.rb +290 -0
- data/lib/support_readiness/zendesk/tickets.rb +854 -0
- data/lib/support_readiness/zendesk/triggers.rb +269 -0
- data/lib/support_readiness/zendesk/users.rb +946 -0
- data/lib/support_readiness/zendesk/views.rb +469 -0
- data/lib/support_readiness/zendesk.rb +31 -0
- data/lib/support_readiness.rb +29 -0
- metadata +215 -0
@@ -0,0 +1,946 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module Readiness.
|
4
|
+
module Readiness
|
5
|
+
# Defines the module Zendesk
|
6
|
+
module Zendesk
|
7
|
+
##
|
8
|
+
# Defines the class Users within the module {Readiness::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
# @todo Merge users
|
13
|
+
class Users < Readiness::Client
|
14
|
+
attr_accessor :active, :alias, :custom_role_id, :default_group_id, :details, :email, :external_id, :iana_time_zone, :id, :last_login_at, :locale, :locale_id, :moderator, :name, :notes, :only_private_comments, :organization_id, :phone, :report_csv, :restricted_agent, :role, :role_type, :shared, :shared_agent, :shared_phone_number, :signature, :suspended, :tags, :ticket_restriction, :time_zone, :two_factor_auth_enabled, :user_fields, :verified
|
15
|
+
|
16
|
+
##
|
17
|
+
# Creates a new {Readiness::Zendesk::Users} instance
|
18
|
+
#
|
19
|
+
# @author Jason Colyer
|
20
|
+
# @since 1.0.0
|
21
|
+
# @param object [Object] An instance of {Readiness::Zendesk::Users}
|
22
|
+
# @example
|
23
|
+
# require 'support_readiness'
|
24
|
+
# Readiness::Zendesk::Users.new
|
25
|
+
def initialize(object = {})
|
26
|
+
@active = object['active']
|
27
|
+
@alias = object['alias']
|
28
|
+
@custom_role_id = object['custom_role_id']
|
29
|
+
@default_group_id = object['default_group_id']
|
30
|
+
@details = object['details']
|
31
|
+
@email = object['email']
|
32
|
+
@external_id = object['external_id']
|
33
|
+
@iana_time_zone = object['iana_time_zone']
|
34
|
+
@id = object['id']
|
35
|
+
@last_login_at = object['last_login_at']
|
36
|
+
@locale = object['locale']
|
37
|
+
@locale_id = object['locale_id']
|
38
|
+
@moderator = object['moderator']
|
39
|
+
@name = object['name']
|
40
|
+
@notes = object['notes']
|
41
|
+
@only_private_comments = object['only_private_comments']
|
42
|
+
@organization_id = object['organization_id']
|
43
|
+
@phone = object['phone']
|
44
|
+
@report_csv = object['report_csv']
|
45
|
+
@restricted_agent = object['restricted_agent']
|
46
|
+
@role = object['role']
|
47
|
+
@role_type = object['role_type']
|
48
|
+
@shared = object['shared']
|
49
|
+
@shared_agent = object['shared_agent']
|
50
|
+
@shared_phone_number = object['shared_phone_number']
|
51
|
+
@signature = object['signature']
|
52
|
+
@suspended = object['suspended']
|
53
|
+
@tags = object['tags']
|
54
|
+
@ticket_restriction = object['ticket_restriction']
|
55
|
+
@time_zone = object['time_zone']
|
56
|
+
@two_factor_auth_enabled = object['two_factor_auth_enabled']
|
57
|
+
@user_fields = object['user_fields']
|
58
|
+
@verified = object['verified']
|
59
|
+
end
|
60
|
+
|
61
|
+
##
|
62
|
+
# Lists the first 100 users
|
63
|
+
#
|
64
|
+
# @author Jason Colyer
|
65
|
+
# @since 1.0.0
|
66
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
67
|
+
# @param permission_set [Integer] The custom_role_id to use in the listing. Set to false to show all.
|
68
|
+
# @param roles [Array] The roles to use in the listing. Leave blank to show all.
|
69
|
+
# @return [Array]
|
70
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-users Zendesk API > Users > List Users
|
71
|
+
# @example
|
72
|
+
# require 'support_readiness'
|
73
|
+
# config = Readiness::Zendesk::Configuration.new
|
74
|
+
# config.username = 'alice@example.com'
|
75
|
+
# config.token = 'test123abc'
|
76
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
77
|
+
# client = Readiness::Zendesk::Client.new(config)
|
78
|
+
# users = Readiness::Zendesk::Users.list(client)
|
79
|
+
# pp users.first.name
|
80
|
+
# # => "Johnny Agent"
|
81
|
+
def self.list(client, permission_set = false, roles = [])
|
82
|
+
opts = ''
|
83
|
+
opts += "&permission_set=#{permission_set}" if permission_set
|
84
|
+
opts += roles.map { |r| "&role[]=#{r}" }.join('') unless roles.count.zero?
|
85
|
+
response = client.connection.get("users?page[size]=100&#{opts}")
|
86
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
87
|
+
Oj.load(response.body)['users'].map { |u| Users.new(u) }
|
88
|
+
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# Lists many users. Does not stop until it ends or the page limit is hit.
|
92
|
+
# This method can take a long time to run depending on the parameters used.
|
93
|
+
#
|
94
|
+
# @author Jason Colyer
|
95
|
+
# @since 1.0.0
|
96
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
97
|
+
# @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
|
98
|
+
# @param permission_set [Integer] The custom_role_id to use in the listing. Set to false to show all.
|
99
|
+
# @param roles [Array] The roles to use in the listing. Leave blank to show all.
|
100
|
+
# @return [Array]
|
101
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-users Zendesk API > Users > List Users
|
102
|
+
# @example
|
103
|
+
# require 'support_readiness'
|
104
|
+
# config = Readiness::Zendesk::Configuration.new
|
105
|
+
# config.username = 'alice@example.com'
|
106
|
+
# config.token = 'test123abc'
|
107
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
108
|
+
# client = Readiness::Zendesk::Client.new(config)
|
109
|
+
# users = Readiness::Zendesk::Users.list_many(client, 15)
|
110
|
+
# pp users.count
|
111
|
+
# # => 1500
|
112
|
+
def self.list_many(client, limit = 0, permission_set = false, roles = [])
|
113
|
+
array = []
|
114
|
+
opts = "page[size]=100"
|
115
|
+
opts += "&permission_set=#{permission_set}" if permission_set
|
116
|
+
opts += roles.map { |r| "&role[]=#{r}" }.join('') unless roles.count.zero?
|
117
|
+
loop do
|
118
|
+
response = client.connection.get("users?#{opts}")
|
119
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
120
|
+
body = Oj.load(response.body)
|
121
|
+
array += body['users'].map { |u| Users.new(u) }
|
122
|
+
break if limit != 0 && array.count >= (limit * 100)
|
123
|
+
break unless body['meta']['has_more']
|
124
|
+
|
125
|
+
opts = body['links'] ['next'].split('?').last
|
126
|
+
end
|
127
|
+
array
|
128
|
+
end
|
129
|
+
|
130
|
+
##
|
131
|
+
# Show information on the approximate count of users.
|
132
|
+
#
|
133
|
+
# @author Jason Colyer
|
134
|
+
# @since 1.0.0
|
135
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
136
|
+
# @param permission_set [Integer] The custom_role_id to use in the listing. Set to false to show all.
|
137
|
+
# @param roles [Array] The roles to use in the listing. Leave blank to show all.
|
138
|
+
# @return [Hash]
|
139
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#count-users Zendesk API > Users > Count Users
|
140
|
+
# @example
|
141
|
+
# require 'support_readiness'
|
142
|
+
# config = Readiness::Zendesk::Configuration.new
|
143
|
+
# config.username = 'alice@example.com'
|
144
|
+
# config.token = 'test123abc'
|
145
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
146
|
+
# client = Readiness::Zendesk::Client.new(config)
|
147
|
+
# count = Readiness::Zendesk::Users.count(client)
|
148
|
+
# pp count['value']
|
149
|
+
# # => 102
|
150
|
+
def self.count(client, permission_set = false, roles = [])
|
151
|
+
opts = ''
|
152
|
+
opts += "&permission_set=#{permission_set}" if permission_set
|
153
|
+
opts += roles.map { |r| "&role[]=#{r}" }.join('') unless roles.count.zero?
|
154
|
+
response = client.connection.get("users/count?#{opts}")
|
155
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
156
|
+
Oj.load(response.body)['count']
|
157
|
+
end
|
158
|
+
|
159
|
+
##
|
160
|
+
# Locates an user within Zendesk. This will not exit on error (except Authentication errors)
|
161
|
+
#
|
162
|
+
# @author Jason Colyer
|
163
|
+
# @since 1.0.0
|
164
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
165
|
+
# @param uid [Integer] The user ID to find
|
166
|
+
# @return [Object] An instance of {Readiness::Zendesk::Users}
|
167
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#show-user Zendesk API > Users > Show User
|
168
|
+
# @example
|
169
|
+
# require 'support_readiness'
|
170
|
+
# config = Readiness::Zendesk::Configuration.new
|
171
|
+
# config.username = 'alice@example.com'
|
172
|
+
# config.token = 'test123abc'
|
173
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
174
|
+
# client = Readiness::Zendesk::Client.new(config)
|
175
|
+
# user = Readiness::Zendesk::Users.find(client, 35436)
|
176
|
+
# pp email.email
|
177
|
+
# # => "johny_agent@example.com"
|
178
|
+
def self.find(client, uid)
|
179
|
+
response = client.connection.get("users/#{uid}")
|
180
|
+
handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: uid }) unless response.status == 200
|
181
|
+
return Users.new(Oj.load(response.body)['user']) if response.status == 200
|
182
|
+
|
183
|
+
Oj.load(response.body)
|
184
|
+
end
|
185
|
+
|
186
|
+
##
|
187
|
+
# Locates an user within Zendesk. This will exit on error
|
188
|
+
#
|
189
|
+
# @author Jason Colyer
|
190
|
+
# @since 1.0.0
|
191
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
192
|
+
# @param uid [Integer] The user ID to find
|
193
|
+
# @return [Object] An instance of {Readiness::Zendesk::Users}
|
194
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#show-user Zendesk API > Users > Show User
|
195
|
+
# @example
|
196
|
+
# require 'support_readiness'
|
197
|
+
# config = Readiness::Zendesk::Configuration.new
|
198
|
+
# config.username = 'alice@example.com'
|
199
|
+
# config.token = 'test123abc'
|
200
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
201
|
+
# client = Readiness::Zendesk::Client.new(config)
|
202
|
+
# user = Readiness::Zendesk::Users.find!(client, 35436)
|
203
|
+
# pp email.email
|
204
|
+
# # => "johny_agent@example.com"
|
205
|
+
def self.find!(client, uid)
|
206
|
+
response = client.connection.get("users/#{uid}")
|
207
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Find user', id: uid }) unless response.status == 200
|
208
|
+
Users.new(Oj.load(response.body)['user'])
|
209
|
+
end
|
210
|
+
|
211
|
+
##
|
212
|
+
# Locates up to 100 users within Zendesk.
|
213
|
+
#
|
214
|
+
# @author Jason Colyer
|
215
|
+
# @since 1.0.0
|
216
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
217
|
+
# @param uids [Array] The user IDs to find
|
218
|
+
# @return [Array]
|
219
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#show-many-organizations Zendesk API > Organizations > Show Many Organizations
|
220
|
+
# @example
|
221
|
+
# require 'support_readiness'
|
222
|
+
# config = Readiness::Zendesk::Configuration.new
|
223
|
+
# config.username = 'alice@example.com'
|
224
|
+
# config.token = 'test123abc'
|
225
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
226
|
+
# client = Readiness::Zendesk::Client.new(config)
|
227
|
+
# users = Readiness::Zendesk::Users.find!(client, [35436, 35436])
|
228
|
+
# pp users.count
|
229
|
+
# # => 2
|
230
|
+
def self.find_many(client, uids)
|
231
|
+
response = client.connection.get("users/show_many?ids=#{uids.join(',')}")
|
232
|
+
handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: uids }) unless response.status == 200
|
233
|
+
Oj.load(response.body)['users'].map { |o| Users.new(o) }
|
234
|
+
end
|
235
|
+
|
236
|
+
##
|
237
|
+
# Creates an user. Will exit if unsuccessful
|
238
|
+
#
|
239
|
+
# @author Jason Colyer
|
240
|
+
# @since 1.0.0
|
241
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
242
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
243
|
+
# @return [Object] An instance of {Readiness::Zendesk::Users}
|
244
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#create-user Zendesk API > Users > Create User
|
245
|
+
# @example
|
246
|
+
# require 'support_readiness'
|
247
|
+
# config = Readiness::Zendesk::Configuration.new
|
248
|
+
# config.username = 'alice@example.com'
|
249
|
+
# config.token = 'test123abc'
|
250
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
251
|
+
# client = Readiness::Zendesk::Client.new(config)
|
252
|
+
# user = Readiness::Zendesk::Users.new
|
253
|
+
# user.custom_role_id = 123456
|
254
|
+
# user.email = 'roge@example.org'
|
255
|
+
# user.name = 'Roger Wilco'
|
256
|
+
# user.organization_id = 57542
|
257
|
+
# user.role = 'agent'
|
258
|
+
# user.role_type = 0
|
259
|
+
# create = Readiness::Zendesk::Users.create!(client, user)
|
260
|
+
# pp create.id
|
261
|
+
# # => 9873843
|
262
|
+
def self.create!(client, user)
|
263
|
+
response = client.connection.post 'users', to_clean_json_with_key(user, 'user')
|
264
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Create user', message: Oj.load(response.body)}) unless response.status == 201
|
265
|
+
Users.new(Oj.load(response.body)['user'])
|
266
|
+
end
|
267
|
+
|
268
|
+
##
|
269
|
+
# Creates or updates an user. Will exit if unsuccessful
|
270
|
+
#
|
271
|
+
# @author Jason Colyer
|
272
|
+
# @since 1.0.0
|
273
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
274
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
275
|
+
# @return [Object] An instance of {Readiness::Zendesk::Users}
|
276
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#create-or-update-user Zendesk API > Users > Create Or Update User
|
277
|
+
# @example
|
278
|
+
# require 'support_readiness'
|
279
|
+
# config = Readiness::Zendesk::Configuration.new
|
280
|
+
# config.username = 'alice@example.com'
|
281
|
+
# config.token = 'test123abc'
|
282
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
283
|
+
# client = Readiness::Zendesk::Client.new(config)
|
284
|
+
# user = Readiness::Zendesk::Users.new
|
285
|
+
# user.custom_role_id = 123456
|
286
|
+
# user.email = 'roge@example.org'
|
287
|
+
# user.name = 'Roger Wilco'
|
288
|
+
# user.organization_id = 57542
|
289
|
+
# user.role = 'agent'
|
290
|
+
# user.role_type = 0
|
291
|
+
# create = Readiness::Zendesk::Users.create_or_update!(client, user)
|
292
|
+
# pp create.id
|
293
|
+
# # => 9873843
|
294
|
+
# @example
|
295
|
+
# require 'support_readiness'
|
296
|
+
# config = Readiness::Zendesk::Configuration.new
|
297
|
+
# config.username = 'alice@example.com'
|
298
|
+
# config.token = 'test123abc'
|
299
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
300
|
+
# client = Readiness::Zendesk::Client.new(config)
|
301
|
+
# user = Readiness::Zendesk::Users.find!(client, 9873843)
|
302
|
+
# user.name = 'Roger Wilco II'
|
303
|
+
# create = Readiness::Zendesk::Users.create_or_update!(client, user)
|
304
|
+
# pp create.name
|
305
|
+
# # => "Roger Wilco II"
|
306
|
+
def self.create_or_update!(client, user)
|
307
|
+
response = client.connection.post 'users/create_or_update', to_clean_json_with_key(user, 'user')
|
308
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Create or update user', id: user.email, message: Oj.load(response.body)}) unless [200, 201].include?(response.status)
|
309
|
+
Users.new(Oj.load(response.body)['user'])
|
310
|
+
end
|
311
|
+
|
312
|
+
##
|
313
|
+
# Updates an user. Will exit if unsuccessful
|
314
|
+
#
|
315
|
+
# @author Jason Colyer
|
316
|
+
# @since 1.0.0
|
317
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
318
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
319
|
+
# @return [Object] An instance of {Readiness::Zendesk::Organizations}
|
320
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#update-user Zendesk API > Users > Update User
|
321
|
+
# @example
|
322
|
+
# require 'support_readiness'
|
323
|
+
# config = Readiness::Zendesk::Configuration.new
|
324
|
+
# config.username = 'alice@example.com'
|
325
|
+
# config.token = 'test123abc'
|
326
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
327
|
+
# client = Readiness::Zendesk::Client.new(config)
|
328
|
+
# user = Readiness::Zendesk::Users.find!(client, 9873843)
|
329
|
+
# user.name = 'Roger Wilco II'
|
330
|
+
# update = Readiness::Zendesk::Users.update!(client, user)
|
331
|
+
# pp update.name
|
332
|
+
# # => "Roger Wilco II"
|
333
|
+
def self.update!(client, user)
|
334
|
+
response = client.connection.put "users/#{user.id}", to_clean_json_with_key(user, 'user')
|
335
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Update user', id: user.id, message: Oj.load(response.body)}) unless response.status == 200
|
336
|
+
Users.new(Oj.load(response.body)['user'])
|
337
|
+
end
|
338
|
+
|
339
|
+
##
|
340
|
+
# Deletes an user. Will exit if unsuccessful
|
341
|
+
#
|
342
|
+
# @author Jason Colyer
|
343
|
+
# @since 1.0.0
|
344
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
345
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
346
|
+
# @return [Boolean]
|
347
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#delete-user Zendesk API > Users > Delete User
|
348
|
+
# @example
|
349
|
+
# require 'support_readiness'
|
350
|
+
# config = Readiness::Zendesk::Configuration.new
|
351
|
+
# config.username = 'alice@example.com'
|
352
|
+
# config.token = 'test123abc'
|
353
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
354
|
+
# client = Readiness::Zendesk::Client.new(config)
|
355
|
+
# user = Readiness::Zendesk::Users.find!(client, 9873843)
|
356
|
+
# delete = Readiness::Zendesk::Users.delete!(client, user)
|
357
|
+
# pp delete
|
358
|
+
# # => true
|
359
|
+
def self.delete!(client, user)
|
360
|
+
response = client.connection.delete "users/#{user.id}"
|
361
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Delete an user', id: user.id, message: Oj.load(response.body)}) unless response.status == 204
|
362
|
+
true
|
363
|
+
end
|
364
|
+
|
365
|
+
##
|
366
|
+
# Deletes a deleted user. This will exit if unsuccessful
|
367
|
+
#
|
368
|
+
# @author Jason Colyer
|
369
|
+
# @since 1.0.0
|
370
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
371
|
+
# @param uid [Integer] The deleted user's ID
|
372
|
+
# @return [Hash]
|
373
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#permanently-delete-user Zendesk API > Users > Permanently Delete User
|
374
|
+
# @example
|
375
|
+
# require 'support_readiness'
|
376
|
+
# config = Readiness::Zendesk::Configuration.new
|
377
|
+
# config.username = 'alice@example.com'
|
378
|
+
# config.token = 'test123abc'
|
379
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
380
|
+
# client = Readiness::Zendesk::Client.new(config)
|
381
|
+
# delete = Readiness::Zendesk::Users.delete_permanently!(client, 9873843)
|
382
|
+
# pp delete.id
|
383
|
+
# # => 189304711533
|
384
|
+
def self.delete_permanently!(client, uid)
|
385
|
+
response = client.connection.delete "deleted_users/#{uid}"
|
386
|
+
handle_request_error(1, 'Zendesk', response.status) unless response.status == 200
|
387
|
+
Oj.load(response.body['deleted_user'])
|
388
|
+
end
|
389
|
+
|
390
|
+
##
|
391
|
+
# Lists the first 100 deleted users
|
392
|
+
#
|
393
|
+
# @author Jason Colyer
|
394
|
+
# @since 1.0.0
|
395
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
396
|
+
# @return [Array]
|
397
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-deleted-users Zendesk API > Users > List Deleted Users
|
398
|
+
# @example
|
399
|
+
# require 'support_readiness'
|
400
|
+
# config = Readiness::Zendesk::Configuration.new
|
401
|
+
# config.username = 'alice@example.com'
|
402
|
+
# config.token = 'test123abc'
|
403
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
404
|
+
# client = Readiness::Zendesk::Client.new(config)
|
405
|
+
# deletes = Readiness::Zendesk::Users.list_deleted(client)
|
406
|
+
# pp deletes.first.id
|
407
|
+
# # => 189304711533
|
408
|
+
def self.list_deleted(client)
|
409
|
+
response = client.connection.get("deleted_users?page[size]=100")
|
410
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
411
|
+
Oj.load(response.body)['deleted_users']
|
412
|
+
end
|
413
|
+
|
414
|
+
##
|
415
|
+
# Lists many deleted users. Does not stop until it ends or the page limit is hit.
|
416
|
+
# This method can take a long time to run depending on the parameters used.
|
417
|
+
#
|
418
|
+
# @author Jason Colyer
|
419
|
+
# @since 1.0.0
|
420
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
421
|
+
# @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
|
422
|
+
# @return [Array]
|
423
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-deleted-users Zendesk API > Users > List Deleted Users
|
424
|
+
# @example
|
425
|
+
# require 'support_readiness'
|
426
|
+
# config = Readiness::Zendesk::Configuration.new
|
427
|
+
# config.username = 'alice@example.com'
|
428
|
+
# config.token = 'test123abc'
|
429
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
430
|
+
# client = Readiness::Zendesk::Client.new(config)
|
431
|
+
# deletes = Readiness::Zendesk::Users.list_many_deleted(client, 7)
|
432
|
+
# pp deletes.count
|
433
|
+
# # => 700
|
434
|
+
def self.list_many_deleted(client, limit = 0, permission_set = false)
|
435
|
+
array = []
|
436
|
+
opts = "page[size]=100"
|
437
|
+
loop do
|
438
|
+
response = client.connection.get("deleted_users?#{opts}")
|
439
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
440
|
+
body = Oj.load(response.body)
|
441
|
+
array += body['deleted_users']
|
442
|
+
break if limit != 0 && array.count >= (limit * 100)
|
443
|
+
break unless body['meta']['has_more']
|
444
|
+
|
445
|
+
opts = body['links'] ['next'].split('?').last
|
446
|
+
end
|
447
|
+
array
|
448
|
+
end
|
449
|
+
|
450
|
+
##
|
451
|
+
# Show information on the approximate count of deleted users.
|
452
|
+
#
|
453
|
+
# @author Jason Colyer
|
454
|
+
# @since 1.0.0
|
455
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
456
|
+
# @return [Hash]
|
457
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#count-deleted-users Zendesk API > Users > Count Deleted Users
|
458
|
+
# @example
|
459
|
+
# require 'support_readiness'
|
460
|
+
# config = Readiness::Zendesk::Configuration.new
|
461
|
+
# config.username = 'alice@example.com'
|
462
|
+
# config.token = 'test123abc'
|
463
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
464
|
+
# client = Readiness::Zendesk::Client.new(config)
|
465
|
+
# deletes = Readiness::Zendesk::Users.deleted_count(client)
|
466
|
+
# pp deletes['value']
|
467
|
+
# # => 13
|
468
|
+
def self.deleted_count(client)
|
469
|
+
response = client.connection.get("deleted_users/count?#{opts}")
|
470
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
471
|
+
Oj.load(response.body)['count']
|
472
|
+
end
|
473
|
+
|
474
|
+
##
|
475
|
+
# Show information on a deleted user
|
476
|
+
#
|
477
|
+
# @author Jason Colyer
|
478
|
+
# @since 1.0.0
|
479
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
480
|
+
# @param did [Integer] The deleted user's ID
|
481
|
+
# @return [Hash]
|
482
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#show-deleted-user Zendesk API > Users > Show Deleted User
|
483
|
+
# @example
|
484
|
+
# require 'support_readiness'
|
485
|
+
# config = Readiness::Zendesk::Configuration.new
|
486
|
+
# config.username = 'alice@example.com'
|
487
|
+
# config.token = 'test123abc'
|
488
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
489
|
+
# client = Readiness::Zendesk::Client.new(config)
|
490
|
+
# deleted = Readiness::Zendesk::Users.find_deleted!(client, 189304711533)
|
491
|
+
# pp deleted['name']
|
492
|
+
# # => "David"
|
493
|
+
def self.find_deleted!(client, did)
|
494
|
+
response = client.connection.get("deleted_users/#{did}")
|
495
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
496
|
+
Oj.load(response.body)['deleted_user']
|
497
|
+
end
|
498
|
+
|
499
|
+
##
|
500
|
+
# Force logs out users
|
501
|
+
#
|
502
|
+
# @author Jason Colyer
|
503
|
+
# @since 1.0.0
|
504
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
505
|
+
# @param uids [Array] An array of user IDs
|
506
|
+
# @return [Hash]
|
507
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#logout-many-users Zendesk API > Users > Logout many users
|
508
|
+
# @example
|
509
|
+
# require 'support_readiness'
|
510
|
+
# config = Readiness::Zendesk::Configuration.new
|
511
|
+
# config.username = 'alice@example.com'
|
512
|
+
# config.token = 'test123abc'
|
513
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
514
|
+
# client = Readiness::Zendesk::Client.new(config)
|
515
|
+
# log_out = Readiness::Zendesk::Users.logout_many(client, [1, 2])
|
516
|
+
# pp log_out
|
517
|
+
# # => true
|
518
|
+
def self.logout_many(client, uids)
|
519
|
+
response = client.connection.get("users/logout_many?ids=#{uids.join(',')}")
|
520
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 202
|
521
|
+
true
|
522
|
+
end
|
523
|
+
|
524
|
+
##
|
525
|
+
# Lists all tickets involving an user (requested, cc'd, assigned).
|
526
|
+
#
|
527
|
+
# @author Jason Colyer
|
528
|
+
# @since 1.0.0
|
529
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
530
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
531
|
+
# @return [Array]
|
532
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
|
533
|
+
# @example
|
534
|
+
# require 'support_readiness'
|
535
|
+
# config = Readiness::Zendesk::Configuration.new
|
536
|
+
# config.username = 'alice@example.com'
|
537
|
+
# config.token = 'test123abc'
|
538
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
539
|
+
# client = Readiness::Zendesk::Client.new(config)
|
540
|
+
# user = Readiness::Zendesk::Users.find!(client, 123456)
|
541
|
+
# tickets = Readiness::Zendesk::Users.all_tickets(client, user)
|
542
|
+
# pp tickets.count
|
543
|
+
# # => 18
|
544
|
+
def self.all_tickets(client, user)
|
545
|
+
(tickets(client, user) + ccd_tickets(client, user) + assigned_tickets(client, user)).uniq { |t| t.id }.sort_by { |t| t.id }
|
546
|
+
end
|
547
|
+
|
548
|
+
##
|
549
|
+
# Lists requests for an user.
|
550
|
+
#
|
551
|
+
# @author Jason Colyer
|
552
|
+
# @since 1.0.0
|
553
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
554
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
555
|
+
# @return [Array]
|
556
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
|
557
|
+
# @example
|
558
|
+
# require 'support_readiness'
|
559
|
+
# config = Readiness::Zendesk::Configuration.new
|
560
|
+
# config.username = 'alice@example.com'
|
561
|
+
# config.token = 'test123abc'
|
562
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
563
|
+
# client = Readiness::Zendesk::Client.new(config)
|
564
|
+
# user = Readiness::Zendesk::Users.find!(client, 123456)
|
565
|
+
# tickets = Readiness::Zendesk::Users.tickets(client, user)
|
566
|
+
# pp tickets.count
|
567
|
+
# # => 10
|
568
|
+
def self.tickets(client, user)
|
569
|
+
array = []
|
570
|
+
opts = "page[size]=100"
|
571
|
+
loop do
|
572
|
+
response = client.connection.get("users/#{user.id}/tickets/requested?#{opts}")
|
573
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
574
|
+
body = Oj.load(response.body)
|
575
|
+
array += body['tickets'].map { |t| Tickets.new(t) }
|
576
|
+
break unless body['meta']['has_more']
|
577
|
+
|
578
|
+
opts = body['links'] ['next'].split('?').last
|
579
|
+
end
|
580
|
+
array
|
581
|
+
end
|
582
|
+
|
583
|
+
##
|
584
|
+
# Lists tickets that a user is CC'd on.
|
585
|
+
#
|
586
|
+
# @author Jason Colyer
|
587
|
+
# @since 1.0.0
|
588
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
589
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
590
|
+
# @return [Array]
|
591
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
|
592
|
+
# @example
|
593
|
+
# require 'support_readiness'
|
594
|
+
# config = Readiness::Zendesk::Configuration.new
|
595
|
+
# config.username = 'alice@example.com'
|
596
|
+
# config.token = 'test123abc'
|
597
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
598
|
+
# client = Readiness::Zendesk::Client.new(config)
|
599
|
+
# user = Readiness::Zendesk::Users.find!(client, 123456)
|
600
|
+
# tickets = Readiness::Zendesk::Users.ccd_tickets(client, user)
|
601
|
+
# pp tickets.count
|
602
|
+
# # => 6
|
603
|
+
def self.ccd_tickets(client, user)
|
604
|
+
array = []
|
605
|
+
opts = "page[size]=100"
|
606
|
+
loop do
|
607
|
+
response = client.connection.get("users/#{user.id}/tickets/ccd?#{opts}")
|
608
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
609
|
+
body = Oj.load(response.body)
|
610
|
+
array += body['tickets'].map { |t| Tickets.new(t) }
|
611
|
+
break unless body['meta']['has_more']
|
612
|
+
|
613
|
+
opts = body['links'] ['next'].split('?').last
|
614
|
+
end
|
615
|
+
array
|
616
|
+
end
|
617
|
+
|
618
|
+
##
|
619
|
+
# Lists tickets that a user is assigned.
|
620
|
+
#
|
621
|
+
# @author Jason Colyer
|
622
|
+
# @since 1.0.0
|
623
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
624
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
625
|
+
# @return [Array]
|
626
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
|
627
|
+
# @example
|
628
|
+
# require 'support_readiness'
|
629
|
+
# config = Readiness::Zendesk::Configuration.new
|
630
|
+
# config.username = 'alice@example.com'
|
631
|
+
# config.token = 'test123abc'
|
632
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
633
|
+
# client = Readiness::Zendesk::Client.new(config)
|
634
|
+
# user = Readiness::Zendesk::Users.find!(client, 123456)
|
635
|
+
# tickets = Readiness::Zendesk::Users.assigned_tickets(client, user)
|
636
|
+
# pp tickets.count
|
637
|
+
# # => 2
|
638
|
+
def self.assigned_tickets(client, user)
|
639
|
+
array = []
|
640
|
+
opts = "page[size]=100"
|
641
|
+
loop do
|
642
|
+
response = client.connection.get("users/#{user.id}/tickets/assigned?#{opts}")
|
643
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
644
|
+
body = Oj.load(response.body)
|
645
|
+
array += body['tickets'].map { |t| Tickets.new(t) }
|
646
|
+
break unless body['meta']['has_more']
|
647
|
+
|
648
|
+
opts = body['links'] ['next'].split('?').last
|
649
|
+
end
|
650
|
+
array
|
651
|
+
end
|
652
|
+
|
653
|
+
##
|
654
|
+
# Lists organization a user is part of.
|
655
|
+
#
|
656
|
+
# @author Jason Colyer
|
657
|
+
# @since 1.0.0
|
658
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
659
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
660
|
+
# @return [Object] An instance of {Readiness::Zendesk::Organizations}
|
661
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#show-organization Zendesk API > Organizations > Show Organization
|
662
|
+
# @example
|
663
|
+
# require 'support_readiness'
|
664
|
+
# config = Readiness::Zendesk::Configuration.new
|
665
|
+
# config.username = 'alice@example.com'
|
666
|
+
# config.token = 'test123abc'
|
667
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
668
|
+
# client = Readiness::Zendesk::Client.new(config)
|
669
|
+
# user = Readiness::Zendesk::Users.find!(client, 123456)
|
670
|
+
# organization = Readiness::Zendesk::Users.organization(client, user)
|
671
|
+
# pp organization.name
|
672
|
+
# # => "Groablet Enterprises"
|
673
|
+
def self.organization(client, user)
|
674
|
+
return nil if user.organization_id.nil?
|
675
|
+
|
676
|
+
Organizations.find(client, user.organization_id)
|
677
|
+
end
|
678
|
+
|
679
|
+
##
|
680
|
+
# Creates multiple users via a batch job
|
681
|
+
#
|
682
|
+
# @author Jason Colyer
|
683
|
+
# @since 1.0.0
|
684
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
685
|
+
# @param users [Array] An array of {Readiness::Zendesk::Users} instances
|
686
|
+
# @return [object] A {Readiness::Zendesk::JobStatuses} instance
|
687
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#create-many-users Zendesk API > Users > Create Many Users
|
688
|
+
# @example
|
689
|
+
# require 'support_readiness'
|
690
|
+
# config = Readiness::Zendesk::Configuration.new
|
691
|
+
# config.username = 'alice@example.com'
|
692
|
+
# config.token = 'test123abc'
|
693
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
694
|
+
# client = Readiness::Zendesk::Client.new(config)
|
695
|
+
# user1 = Readiness::Zendesk::Users.new
|
696
|
+
# user1.email = 'alice@example.com'
|
697
|
+
# user1.name = 'Alice Example'
|
698
|
+
# user2 = Readiness::Zendesk::Users.new
|
699
|
+
# user2.email = 'bob@example.com'
|
700
|
+
# user2.name = 'Bob Example'
|
701
|
+
# users = [user1, user2]
|
702
|
+
# creates = Readiness::Zendesk::Users.create_many!(client, users)
|
703
|
+
# pp creates.id
|
704
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
705
|
+
def self.create_many!(client, users)
|
706
|
+
data = { users: users.map { |u| to_hash(u).compact } }.to_json
|
707
|
+
response = client.connection.post('users/create_many', data)
|
708
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Create many users', message: Oj.load(response.body)}) unless response.status == 200
|
709
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
710
|
+
end
|
711
|
+
|
712
|
+
##
|
713
|
+
# Creates or updates multiple users via a batch job
|
714
|
+
#
|
715
|
+
# @author Jason Colyer
|
716
|
+
# @since 1.0.0
|
717
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
718
|
+
# @param users [Array] An array of {Readiness::Zendesk::Users} instances
|
719
|
+
# @return [object] A {Readiness::Zendesk::JobStatuses} instance
|
720
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#create-or-update-many-users Zendesk API > Users > Create Or Update Many Users
|
721
|
+
# @example
|
722
|
+
# require 'support_readiness'
|
723
|
+
# config = Readiness::Zendesk::Configuration.new
|
724
|
+
# config.username = 'alice@example.com'
|
725
|
+
# config.token = 'test123abc'
|
726
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
727
|
+
# client = Readiness::Zendesk::Client.new(config)
|
728
|
+
# user1 = Readiness::Zendesk::Users.new
|
729
|
+
# user1.email = 'alice@example.com'
|
730
|
+
# user1.name = 'Alice Example'
|
731
|
+
# user2 = Readiness::Zendesk::Users.find!(client, 456)
|
732
|
+
# user2.name = 'Bob Example'
|
733
|
+
# users = [user1, user2]
|
734
|
+
# creates = Readiness::Zendesk::Users.create_or_update_many!(client, users)
|
735
|
+
# pp creates.id
|
736
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
737
|
+
def self.create_or_update_many!(client, users)
|
738
|
+
data = { users: users.map { |u| to_hash(u).compact } }.to_json
|
739
|
+
response = client.connection.post('users/create_or_update_many', data)
|
740
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Create or update many users', message: Oj.load(response.body)}) unless response.status == 200
|
741
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
742
|
+
end
|
743
|
+
|
744
|
+
##
|
745
|
+
# Updates multiple users via a batch job
|
746
|
+
#
|
747
|
+
# @author Jason Colyer
|
748
|
+
# @since 1.0.0
|
749
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
750
|
+
# @param users [Array] An array of {Readiness::Zendesk::Users} instances
|
751
|
+
# @return [object] A {Readiness::Zendesk::JobStatuses} instance
|
752
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/users/#update-many-users Zendesk API > Users > Update Many Users
|
753
|
+
# @example
|
754
|
+
# require 'support_readiness'
|
755
|
+
# config = Readiness::Zendesk::Configuration.new
|
756
|
+
# config.username = 'alice@example.com'
|
757
|
+
# config.token = 'test123abc'
|
758
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
759
|
+
# client = Readiness::Zendesk::Client.new(config)
|
760
|
+
# user1 = Readiness::Zendesk::Users.find!(client, 123)
|
761
|
+
# user1.name = 'Alice Example'
|
762
|
+
# user2 = Readiness::Zendesk::Users.find!(client, 456)
|
763
|
+
# user2.name = 'Bob Example'
|
764
|
+
# users = [user1, user2]
|
765
|
+
# updates = Readiness::Zendesk::Users.update_many!(client, users)
|
766
|
+
# pp updates.id
|
767
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
768
|
+
def self.update_many!(client, users)
|
769
|
+
data = { users: users.map { |u| to_hash(u).compact } }.to_json
|
770
|
+
response = client.connection.post('users/update_many', data)
|
771
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Update many users', message: Oj.load(response.body)}) unless response.status == 200
|
772
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
773
|
+
end
|
774
|
+
|
775
|
+
##
|
776
|
+
# Deletes multiple users via a batch job
|
777
|
+
#
|
778
|
+
# @author Jason Colyer
|
779
|
+
# @since 1.0.0
|
780
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
781
|
+
# @param uids [Array] An array of user IDs
|
782
|
+
# @return [object] A {Readiness::Zendesk::JobStatuses} instance
|
783
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#bulk-delete-tickets Zendesk API > Tickets > Bulk Delete Tickets
|
784
|
+
# @example
|
785
|
+
# require 'support_readiness'
|
786
|
+
# config = Readiness::Zendesk::Configuration.new
|
787
|
+
# config.username = 'alice@example.com'
|
788
|
+
# config.token = 'test123abc'
|
789
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
790
|
+
# client = Readiness::Zendesk::Client.new(config)
|
791
|
+
# delete = Readiness::Zendesk::Users.delete_many!(client, [35436, 35437])
|
792
|
+
# pp delete.id
|
793
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
794
|
+
def self.delete_many!(client, uids)
|
795
|
+
response = client.connection.delete("users/destroy_many?ids=#{uids.join(',')}")
|
796
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many users', message: Oj.load(response.body)}) unless response.status == 200
|
797
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
798
|
+
end
|
799
|
+
|
800
|
+
##
|
801
|
+
# Lists organization memberships for a user
|
802
|
+
#
|
803
|
+
# @author Jason Colyer
|
804
|
+
# @since 1.0.0
|
805
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
806
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
807
|
+
# @return [Array]
|
808
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#list-memberships Zendesk API > Organization Memberships > List Memberships
|
809
|
+
# @example
|
810
|
+
# require 'support_readiness'
|
811
|
+
# config = Readiness::Zendesk::Configuration.new
|
812
|
+
# config.username = 'alice@example.com'
|
813
|
+
# config.token = 'test123abc'
|
814
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
815
|
+
# client = Readiness::Zendesk::Client.new(config)
|
816
|
+
# user = Readiness::Zendesk::Users.find!(client, 123)
|
817
|
+
# members = Readiness::Zendesk::Users.organization_memberships(client, user)
|
818
|
+
# pp members.first.organization_id
|
819
|
+
# # => 456
|
820
|
+
def self.organization_memberships(client, user)
|
821
|
+
array = []
|
822
|
+
opts = "page[size]=100"
|
823
|
+
loop do
|
824
|
+
response = client.connection.get("user/#{user.id}/organization_memberships?#{opts}")
|
825
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
826
|
+
body = Oj.load(response.body)
|
827
|
+
array += body['organization_memberships'].map { |o| OrganizationMemberships.new(o) }
|
828
|
+
break if limit != 0 && array.count >= (limit * 100)
|
829
|
+
break unless body['meta']['has_more']
|
830
|
+
|
831
|
+
opts = body['links'] ['next'].split('?').last
|
832
|
+
end
|
833
|
+
array
|
834
|
+
end
|
835
|
+
|
836
|
+
##
|
837
|
+
# Sets the default organization membership of a given user
|
838
|
+
#
|
839
|
+
# @author Jason Colyer
|
840
|
+
# @since 1.0.0
|
841
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
842
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
843
|
+
# @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
|
844
|
+
# @return [Array]
|
845
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#set-organization-as-default Zendesk API > Organization Memberships > Set Organization as Default
|
846
|
+
# @example
|
847
|
+
# require 'support_readiness'
|
848
|
+
# config = Readiness::Zendesk::Configuration.new
|
849
|
+
# config.username = 'alice@example.com'
|
850
|
+
# config.token = 'test123abc'
|
851
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
852
|
+
# client = Readiness::Zendesk::Client.new(config)
|
853
|
+
# user = Readiness::Zendesk::Users.find!(client, 123)
|
854
|
+
# org = Readiness::Zendesk::Organizations.find!(client, 456)
|
855
|
+
# member = Readiness::Zendesk::Users.set_default_organization!(client, user, org)
|
856
|
+
# pp member.id
|
857
|
+
# # => 4
|
858
|
+
def self.set_default_organization!(client, user, organization)
|
859
|
+
response = client.connection.put("users/#{user.id}/organizations/#{organization.id}/make_default")
|
860
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Set org as default', message: Oj.load(response.body)}) unless response.status == 200
|
861
|
+
OrganizationMemberships.new(Oj.load(response.body)['organization_membership'])
|
862
|
+
end
|
863
|
+
|
864
|
+
##
|
865
|
+
# Lists group memberships for a user
|
866
|
+
#
|
867
|
+
# @author Jason Colyer
|
868
|
+
# @since 1.0.0
|
869
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
870
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
871
|
+
# @return [Array]
|
872
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#list-memberships Zendesk API > Group Memberships > List Memberships
|
873
|
+
# @example
|
874
|
+
# require 'support_readiness'
|
875
|
+
# config = Readiness::Zendesk::Configuration.new
|
876
|
+
# config.username = 'alice@example.com'
|
877
|
+
# config.token = 'test123abc'
|
878
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
879
|
+
# client = Readiness::Zendesk::Client.new(config)
|
880
|
+
# user = Readiness::Zendesk::Users.find!(client, 123)
|
881
|
+
# members = Readiness::Zendesk::Users.group_memberships(client, user)
|
882
|
+
# pp members.first.group_id
|
883
|
+
# # => 456
|
884
|
+
def self.group_memberships(client, user)
|
885
|
+
response = client.connection.get("users/#{user.id}/group_memberships?page[size]=100")
|
886
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
887
|
+
Oj.load(response.body)['group_memberships'].map { |m| GroupMemberships.new(m) }
|
888
|
+
end
|
889
|
+
|
890
|
+
##
|
891
|
+
# Sets the default group membership of a given user
|
892
|
+
#
|
893
|
+
# @author Jason Colyer
|
894
|
+
# @since 1.0.0
|
895
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
896
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
897
|
+
# @param group [Object] An instance of {Readiness::Zendesk::Group}
|
898
|
+
# @return [Array]
|
899
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#set-membership-as-default Zendesk API > Group Memberships > Set Membership as Default
|
900
|
+
# @example
|
901
|
+
# require 'support_readiness'
|
902
|
+
# config = Readiness::Zendesk::Configuration.new
|
903
|
+
# config.username = 'alice@example.com'
|
904
|
+
# config.token = 'test123abc'
|
905
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
906
|
+
# client = Readiness::Zendesk::Client.new(config)
|
907
|
+
# user = Readiness::Zendesk::Users.find!(client, 123)
|
908
|
+
# group = Readiness::Zendesk::Groups.find!(client, 456)
|
909
|
+
# member = Readiness::Zendesk::Users.set_default_group!(client, user, group)
|
910
|
+
# pp member.id
|
911
|
+
# # => 4
|
912
|
+
def self.set_default_group!(client, user, group)
|
913
|
+
response = client.connection.put("users/#{user.id}/group_memberships/#{group.id}/make_default")
|
914
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Set group as default', message: Oj.load(response.body)}) unless response.status == 200
|
915
|
+
GroupMemberships.new(Oj.load(response.body)['group_memberships'])
|
916
|
+
end
|
917
|
+
|
918
|
+
##
|
919
|
+
# Sets the password for a user
|
920
|
+
#
|
921
|
+
# @author Jason Colyer
|
922
|
+
# @since 1.0.0
|
923
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
924
|
+
# @param user [Object] An instance of {Readiness::Zendesk::Users}
|
925
|
+
# @param password [String] The password to set
|
926
|
+
# @return [Array]
|
927
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/users/user_passwords/#set-a-users-password Zendesk API > User Password > Set a User's Password
|
928
|
+
# @example
|
929
|
+
# require 'support_readiness'
|
930
|
+
# config = Readiness::Zendesk::Configuration.new
|
931
|
+
# config.username = 'alice@example.com'
|
932
|
+
# config.token = 'test123abc'
|
933
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
934
|
+
# client = Readiness::Zendesk::Client.new(config)
|
935
|
+
# user = Readiness::Zendesk::Users.find!(client, 123)
|
936
|
+
# action = Readiness::Zendesk::Users.set_password!(client, user, 'test123!')
|
937
|
+
# pp action
|
938
|
+
# # => true
|
939
|
+
def self.set_password!(client, user, password)
|
940
|
+
response = client.connection.post "users/#{user.id}/password", { password: password }.to_json
|
941
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Set user password', id: user.id, message: Oj.load(response.body)}) unless response.status == 200
|
942
|
+
true
|
943
|
+
end
|
944
|
+
end
|
945
|
+
end
|
946
|
+
end
|