kaui 1.0.0 → 1.1.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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/kaui/kaui.js +118 -11
  3. data/app/assets/stylesheets/kaui/common.less +91 -6
  4. data/app/assets/stylesheets/kaui/payment.less +1 -0
  5. data/app/controllers/kaui/account_children_controller.rb +1 -4
  6. data/app/controllers/kaui/accounts_controller.rb +4 -7
  7. data/app/controllers/kaui/admin_allowed_users_controller.rb +24 -7
  8. data/app/controllers/kaui/admin_tenants_controller.rb +59 -20
  9. data/app/controllers/kaui/audit_logs_controller.rb +3 -2
  10. data/app/controllers/kaui/charges_controller.rb +1 -1
  11. data/app/controllers/kaui/credits_controller.rb +1 -1
  12. data/app/controllers/kaui/home_controller.rb +273 -10
  13. data/app/controllers/kaui/invoice_items_controller.rb +1 -1
  14. data/app/controllers/kaui/invoices_controller.rb +3 -3
  15. data/app/controllers/kaui/payments_controller.rb +5 -3
  16. data/app/controllers/kaui/refunds_controller.rb +2 -2
  17. data/app/controllers/kaui/subscriptions_controller.rb +2 -1
  18. data/app/helpers/kaui/object_helper.rb +4 -0
  19. data/app/helpers/kaui/plugin_helper.rb +36 -20
  20. data/app/helpers/kaui/uuid_helper.rb +9 -0
  21. data/app/models/kaui/admin.rb +3 -1
  22. data/app/models/kaui/admin_tenant.rb +58 -10
  23. data/app/models/kaui/allowed_user.rb +1 -0
  24. data/app/models/kaui/catalog.rb +2 -2
  25. data/app/models/kaui/credit.rb +0 -2
  26. data/app/models/kaui/overdue.rb +5 -5
  27. data/app/views/kaui/account_children/index.html.erb +3 -3
  28. data/app/views/kaui/accounts/_account_info.html.erb +45 -91
  29. data/app/views/kaui/accounts/_billing_info.html.erb +12 -8
  30. data/app/views/kaui/accounts/_parent.html.erb +1 -1
  31. data/app/views/kaui/accounts/_payment_methods.html.erb +1 -1
  32. data/app/views/kaui/accounts/_personal_info.html.erb +74 -0
  33. data/app/views/kaui/accounts/index.html.erb +4 -4
  34. data/app/views/kaui/accounts/show.html.erb +9 -3
  35. data/app/views/kaui/admin_allowed_users/_form.html.erb +38 -10
  36. data/app/views/kaui/admin_tenants/_form_plugin_config.erb +82 -17
  37. data/app/views/kaui/admin_tenants/_show_catalog_simple.erb +11 -3
  38. data/app/views/kaui/admin_tenants/_show_overdue.erb +4 -4
  39. data/app/views/kaui/admin_tenants/_tenant_details.html.erb +7 -1
  40. data/app/views/kaui/admin_tenants/new_overdue_config.html.erb +1 -1
  41. data/app/views/kaui/audit_logs/_show_history_modal.html.erb +1 -1
  42. data/app/views/kaui/audit_logs/index.html.erb +4 -0
  43. data/app/views/kaui/home/_advanced_search_modal.html.erb +80 -0
  44. data/app/views/kaui/home/index.html.erb +18 -5
  45. data/app/views/kaui/invoices/show.html.erb +7 -1
  46. data/app/views/kaui/layouts/kaui_flash.html.erb +14 -3
  47. data/app/views/kaui/layouts/kaui_navbar.html.erb +11 -9
  48. data/app/views/kaui/payments/_form.html.erb +8 -10
  49. data/app/views/kaui/payments/_payment_table.html.erb +40 -37
  50. data/app/views/kaui/payments/index.html.erb +1 -0
  51. data/app/views/kaui/payments/show.html.erb +5 -7
  52. data/app/views/kaui/queues/index.html.erb +22 -4
  53. data/app/views/kaui/subscriptions/_subscriptions_table.html.erb +1 -1
  54. data/app/views/kaui/tag_definitions/index.html.erb +1 -1
  55. data/config/routes.rb +2 -0
  56. data/lib/kaui/version.rb +1 -1
  57. data/test/functional/kaui/accounts_controller_test.rb +35 -0
  58. data/test/functional/kaui/admin_allowed_users_controller_test.rb +55 -2
  59. data/test/functional/kaui/admin_tenants_controller_test.rb +67 -6
  60. data/test/functional/kaui/home_controller_test.rb +389 -15
  61. data/test/functional/kaui/subscriptions_controller_test.rb +1 -1
  62. data/test/killbill_test_helper.rb +2 -2
  63. data/test/unit/helpers/kaui/uuid_helper_test.rb +16 -0
  64. data/test/unit/kaui/admin_tenant_test.rb +49 -0
  65. metadata +6 -4
  66. data/test/unit/kaui/uuid_helper_test.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e87e62224a7eee3e9ee134db6f88824cbe6efdbf
4
- data.tar.gz: 1f762a4df672efbaee3182d0eca916405cf057cc
3
+ metadata.gz: '0651238ca5895ad6646d03a02d6aea566789aecf'
4
+ data.tar.gz: 5f69d3a6033391e3fe1ee08e6a195a44475c33db
5
5
  SHA512:
6
- metadata.gz: 38bdfc7f29ad2711fec6a566ac962cbb2d0ecdadf60754522a0c786f4446433c71191dbabb40f9a80f8220da7c07da694e9f10077f2d6248030c1ab70d08b4d6
7
- data.tar.gz: d5fbd8de69aeeef43f4690e3ad84dff02c89dbe7215bb95b87dbd451915f88f5bf73a4a25499b186376b089b0afad5fc1c80e738fc89e24610102ecb47d61199
6
+ metadata.gz: eb800c76bba3c7073b21418059ec15614e3e6ba65c33e61101630d4a8ffaebf289dfe92296fcfbe72dbd87a66cef1fa2442302eaa405402024afbc9b27abd5c9
7
+ data.tar.gz: 89cbb200e3eabc97fe3c4475603a1906d83ab0c19baad61926b696a77cf58e7b3e83061fa39edb372bf9205e78caf312232fa72f376d695b636130634e6c3e48
@@ -198,43 +198,72 @@ jQuery(document).ready(function ($) {
198
198
  if (jqxhr.status == 0) {
199
199
  return;
200
200
  }
201
-
202
- var message = 'Request Status: ' + jqxhr.status + ' Status Text: ' + jqxhr.statusText + ' ' + jqxhr.responseText;
201
+
202
+ var message = 'Request Status: ' + jqxhr.status + ', Status Text: ' + jqxhr.statusText + ': ' + getMessageFromResponse(jqxhr);
203
203
 
204
204
  if (jqxhr.status == 200) {
205
205
  message = thrownError.message == undefined ? thrownError : thrownError.message;
206
206
  }
207
- ajaxAlert(message);
207
+ ajaxErrorAlert(message);
208
208
  });
209
209
 
210
+ function getMessageFromResponse(jqxhr) {
211
+ if (isBlank(jqxhr.responseJSON)) {
212
+ return jqxhr.responseText;
213
+ }
214
+
215
+ if (!isBlank(jqxhr.responseJSON.error)) {
216
+ return jqxhr.responseJSON.error;
217
+ }
218
+
219
+ return jqxhr.responseText;
220
+ }
221
+
210
222
  // this will prevent DataTable to show an alert message box when an error occurs
211
223
  $.fn.dataTable.ext.errMode = 'none';
212
224
  // this will try to register a DataTable error event to all tables, and if an error occurs will display the error on screen
213
225
  $( document ).find(".table").on('error.dt', function ( e, settings, techNote, message ) {
214
- ajaxAlert('An error has been reported by DataTables: ' + message);
215
- })
226
+ ajaxErrorAlert('An error has been reported by DataTables: ' + message);
227
+ });
216
228
 
229
+ setObjectIdPopover();
217
230
  });
218
231
 
219
- // global function used to show a error message that occurs on a Ajax call
220
- function ajaxAlert(message) {
232
+
233
+ // global function used to show an error message that occurs on a Ajax call, if timeout is passed the box will disappear when the time is up.
234
+ function ajaxErrorAlert(message, timeout) {
235
+ ajaxAlert("ajaxErrorAlert", message, timeout);
236
+ }
237
+
238
+ // global function used to show an information message.
239
+ function ajaxInfoAlert(message, timeout) {
240
+ ajaxAlert("ajaxInfoAlert", message, timeout);
241
+ }
242
+
243
+ // if timeout is passed the box will disappear when the time is up.
244
+ function ajaxAlert(alert_element_id, message, timeout) {
221
245
  // do not show ajax alert if there is already an server alert
222
246
  var serverAlertStatus = $(".server-alert").css("display");
223
247
  if (serverAlertStatus != undefined && serverAlertStatus != "none") {
224
248
  return;
225
249
  }
226
250
 
227
- var messageBox = $("#ajaxAlert");
228
- messageBox.find("#ajaxErrorMessage").text(message);
251
+ var messageBox = $("#" + alert_element_id);
252
+ messageBox.find("#" + alert_element_id + "Message").text(message);
229
253
  messageBox.show();
230
254
  messageBox.find("button").click(function(){
231
255
  ajaxCloseAlert(messageBox);
232
256
  });
257
+
258
+ //if timeout is passed the box will disappear when the time is up
259
+ if (!isBlank(timeout)) {
260
+ setTimeout(function(){ ajaxCloseAlert()}, timeout);
261
+ }
233
262
  }
234
263
 
235
264
  function ajaxCloseAlert(messageBox) {
236
- var messageBox = messageBox || $("#ajaxAlert");
237
- messageBox.find("#ajaxErrorMessage").text('');
265
+ var messageBox = messageBox || $(".ajaxAlert");
266
+ messageBox.find(".ajaxAlertMessage").text('');
238
267
  messageBox.hide();
239
268
  }
240
269
 
@@ -261,3 +290,81 @@ function isBlank(value) {
261
290
  return false;
262
291
  }
263
292
  }
293
+
294
+ // this function set popover for all tags that have class object-id-popover
295
+ // attributes:
296
+ // data-id = content of the popover,object id; required
297
+ // title = title of the popover; not required
298
+ // id = (must be {{id}}-popover) used to close popover when the copy image is clicked; if present; if not present a timeout of 5s will apply; not required
299
+ function setObjectIdPopover(){
300
+ $(".object-id-popover").each(function(idx, e){
301
+ $(this).popover('destroy');
302
+ $(this).off("shown.bs.popover");
303
+ $(this).data("index", idx);
304
+
305
+ $(this).popover({
306
+ html: true,
307
+ content: function() {
308
+ var template = '<div class="{{id}}-content" >' +
309
+ '{{id}}&emsp;<i id="{{id}}-copy" class="fa fa-clipboard copy-icon" aria-hidden="true"></i> ' +
310
+ '<input id="{{id}}-placeholder" class="form-control hidden"> ' +
311
+ '</div>';
312
+
313
+ var popover_html = Mustache.render( template , { id: $(this).data("id") });
314
+ return popover_html;
315
+ },
316
+ container: 'body',
317
+ trigger: 'hover',
318
+ delay: { "show": 100, "hide": 4000 }
319
+ });
320
+
321
+ $(this).on("show.bs.popover", function(e) {
322
+ var currentPopoverIndex = $(this).data('index');
323
+ $(".object-id-popover").each(function(idx, e){
324
+ var index = $(this).data('index');
325
+
326
+ if (currentPopoverIndex != index) {
327
+ $(this).popover('hide');
328
+ }
329
+ });
330
+ });
331
+
332
+ $(this).on("shown.bs.popover", function(e) {
333
+ var objectId = $(this).data('id');
334
+ var copyIdImg = $("#" + objectId + "-copy");
335
+
336
+ copyIdImg.data("popover",$(this).attr("id"));
337
+ copyIdImg.click(function(e){
338
+ var id = ($(this).attr("id")).replace('-copy','');
339
+ var placeholder = $("#" + objectId + "-placeholder");
340
+ var popover = $("#" + copyIdImg.data("popover"));
341
+ placeholder.val(id);
342
+ placeholder.removeClass("hidden");
343
+ placeholder.select();
344
+
345
+ document.execCommand("Copy");
346
+ placeholder.addClass("hidden");
347
+ ajaxInfoAlert("Id [" + id + "] was copied into the clipboard!", 4000);
348
+
349
+ if (!isBlank(popover)) {
350
+ popover.popover('hide');
351
+ }
352
+
353
+ });
354
+
355
+ });
356
+
357
+ });
358
+
359
+ // close all object id popover on modal show
360
+ $(".modal").on('show.bs.modal',function(e){
361
+ $(".object-id-popover").each(function(idx, e) {
362
+ $(this).popover('destroy');
363
+ });
364
+ });
365
+
366
+ // check if object id must be restored
367
+ $(".modal").on('hide.bs.modal',function(e){
368
+ setObjectIdPopover();
369
+ });
370
+ }
@@ -382,7 +382,7 @@ table.subtitle {
382
382
  }
383
383
 
384
384
  .fix-position {
385
- padding-left: 45px;
385
+ padding-left: 20px;
386
386
 
387
387
  @media (@phone) {
388
388
  padding-left: 15px;
@@ -553,6 +553,61 @@ form[id^="new_tag_definition"] {
553
553
  }
554
554
 
555
555
  /* The switch - the box around the slider */
556
+ .switch-half-container {
557
+ padding-top: 9px !important;
558
+ }
559
+
560
+ .switch-half {
561
+ position: relative;
562
+ display: inline-block;
563
+ margin-bottom: 0;
564
+ width: 20px;
565
+ height: 12px;
566
+
567
+
568
+ /* Hide default HTML checkbox */
569
+ input {display:none;}
570
+
571
+ /* The slider */
572
+ .slider {
573
+ position: absolute;
574
+ cursor: pointer;
575
+ top: 0;
576
+ left: 0;
577
+ right: 0;
578
+ bottom: 0;
579
+ background-color: #ccc;
580
+ -webkit-transition: .4s;
581
+ transition: .4s;
582
+ }
583
+
584
+ .slider:before {
585
+ position: absolute;
586
+ content: "";
587
+ height: 10px;
588
+ width: 10px;
589
+ left: 1px;
590
+ bottom: 1px;
591
+ background-color: white;
592
+ -webkit-transition: .4s;
593
+ transition: .4s;
594
+ }
595
+
596
+ input:checked + .slider {
597
+ background-color: #00919d;
598
+ }
599
+
600
+ input:focus + .slider {
601
+ box-shadow: 0 0 1px #2196F3;
602
+ }
603
+
604
+ input:checked + .slider:before {
605
+ -webkit-transform: translateX(8px);
606
+ -ms-transform: translateX(8px);
607
+ transform: translateX(8px);
608
+ }
609
+ }
610
+
556
611
  .switch {
557
612
  position: relative;
558
613
  display: inline-block;
@@ -595,12 +650,12 @@ form[id^="new_tag_definition"] {
595
650
  input:focus + .slider {
596
651
  box-shadow: 0 0 1px #2196F3;
597
652
  }
598
- }
599
653
 
600
- input:checked + .slider:before {
601
- -webkit-transform: translateX(16px);
602
- -ms-transform: translateX(16px);
603
- transform: translateX(16px);
654
+ input:checked + .slider:before {
655
+ -webkit-transform: translateX(16px);
656
+ -ms-transform: translateX(16px);
657
+ transform: translateX(16px);
658
+ }
604
659
  }
605
660
 
606
661
  /* Rounded sliders */
@@ -632,4 +687,34 @@ input:checked + .slider:before {
632
687
 
633
688
  .toggle-label {
634
689
  text-align: left !important;
690
+ }
691
+
692
+ .spinner {
693
+ padding-top: 3.5px;
694
+ width: 40px;
695
+ color: #00919d;
696
+ display: none;
697
+ }
698
+
699
+ .footer-notice {
700
+ .modal-footer {
701
+ text-align: left;
702
+ padding-bottom: 0;
703
+
704
+ .alert {
705
+ margin-bottom: 0;
706
+
707
+ .label-default {
708
+ color: white;
709
+ }
710
+ }
711
+ }
712
+ }
713
+
714
+ .copy-icon {
715
+ cursor: pointer;
716
+ }
717
+
718
+ .switch-tenant-active {
719
+ color: #00919d;
635
720
  }
@@ -10,6 +10,7 @@
10
10
 
11
11
  .payment-details {
12
12
  padding-bottom: 0;
13
+ padding-left: 45px;
13
14
 
14
15
  table.transparent {
15
16
  margin-bottom: 0;
@@ -34,12 +34,9 @@ class Kaui::AccountChildrenController < Kaui::EngineController
34
34
 
35
35
  formatter = lambda do |account_child|
36
36
  [
37
- view_context.link_to(account_child.name || '(not set)', account_path(account_child.account_id)),
38
- view_context.truncate_uuid(account_child.account_id),
37
+ view_context.link_to(account_child.account_id, account_path(account_child.account_id)),
39
38
  account_child.external_key,
40
39
  view_context.humanized_money_with_symbol(account_child.balance_to_money),
41
- account_child.city,
42
- account_child.country
43
40
  ]
44
41
  end
45
42
 
@@ -45,12 +45,9 @@ class Kaui::AccountsController < Kaui::EngineController
45
45
 
46
46
  [
47
47
  child_label,
48
- view_context.link_to(account.name || '(not set)', view_context.url_for(:action => :show, :account_id => account.account_id)),
49
- view_context.truncate_uuid(account.account_id),
48
+ view_context.link_to(account.account_id, view_context.url_for(:action => :show, :account_id => account.account_id)),
50
49
  account.external_key,
51
- view_context.humanized_money_with_symbol(account.balance_to_money),
52
- account.city,
53
- account.country
50
+ view_context.humanized_money_with_symbol(account.balance_to_money)
54
51
  ]
55
52
  end
56
53
 
@@ -171,7 +168,7 @@ class Kaui::AccountsController < Kaui::EngineController
171
168
  def trigger_invoice
172
169
  account_id = params.require(:account_id)
173
170
  target_date = params[:target_date].presence
174
- dry_run = params[:dry_run] == '1'
171
+ dry_run = params[:dry_run].nil? ? false : params[:dry_run] == '1'
175
172
 
176
173
  invoice = nil
177
174
  begin
@@ -233,7 +230,7 @@ class Kaui::AccountsController < Kaui::EngineController
233
230
  def pay_all_invoices
234
231
  payment = Kaui::InvoicePayment.new(:account_id => params.require(:account_id))
235
232
 
236
- payment.bulk_create(params[:is_external_payment] == 'true', current_user.kb_username, params[:reason], params[:comment], options_for_klient)
233
+ payment.bulk_create(params[:is_external_payment] == 'true', nil, nil, current_user.kb_username, params[:reason], params[:comment], options_for_klient)
237
234
 
238
235
  redirect_to account_path(payment.account_id), :notice => 'Successfully triggered a payment for all unpaid invoices'
239
236
  end
@@ -8,14 +8,17 @@ class Kaui::AdminAllowedUsersController < Kaui::EngineController
8
8
 
9
9
  def new
10
10
  @allowed_user = Kaui::AllowedUser.new
11
+ @is_killbill_managed = true
12
+
11
13
  @roles = []
12
14
  end
13
15
 
14
16
  def create
17
+ @is_killbill_managed = nil
15
18
  @allowed_user = Kaui::AllowedUser.new(allowed_user_params)
16
19
 
17
20
  existing_user = Kaui::AllowedUser.find_by_kb_username(@allowed_user.kb_username)
18
- if existing_user
21
+ unless existing_user.blank?
19
22
  flash[:error] = "User with name #{@allowed_user.kb_username} already exists!"
20
23
  @roles = roles_for_user(existing_user)
21
24
  render :new and return
@@ -24,10 +27,12 @@ class Kaui::AdminAllowedUsersController < Kaui::EngineController
24
27
  # Create locally only
25
28
  @allowed_user.save!
26
29
  else
27
- roles = params[:roles].split(',')
28
-
29
- # Create locally and in KB
30
- @allowed_user.create_in_kb!(params.require(:password), roles, current_user.kb_username, params[:reason], params[:comment], options_for_klient)
30
+ @allowed_user.create_in_kb!(params.require(:password) ,
31
+ params[:roles].blank? ? [] : params[:roles].split(','),
32
+ current_user.kb_username,
33
+ params[:reason],
34
+ params[:comment],
35
+ options_for_klient)
31
36
  end
32
37
 
33
38
  redirect_to kaui_engine.admin_allowed_user_path(@allowed_user.id), :notice => 'User was successfully configured'
@@ -46,6 +51,7 @@ class Kaui::AdminAllowedUsersController < Kaui::EngineController
46
51
 
47
52
  def edit
48
53
  @allowed_user = Kaui::AllowedUser.find(params.require(:id))
54
+ @is_killbill_managed = killbill_managed?(@allowed_user, options_for_klient)
49
55
 
50
56
  @roles = roles_for_user(@allowed_user)
51
57
  end
@@ -56,7 +62,7 @@ class Kaui::AdminAllowedUsersController < Kaui::EngineController
56
62
  @allowed_user.description = params[:allowed_user][:description].presence
57
63
 
58
64
  @allowed_user.update_in_kb!(params[:password].presence,
59
- params[:roles].presence.split(','),
65
+ params[:roles].blank? ? nil : params[:roles].split(','),
60
66
  current_user.kb_username,
61
67
  params[:reason],
62
68
  params[:comment],
@@ -103,6 +109,17 @@ class Kaui::AdminAllowedUsersController < Kaui::EngineController
103
109
 
104
110
  private
105
111
 
112
+ # this will check if the user is managed by killbill (not managed externally or internally by a shiro config file).
113
+ def killbill_managed?(allowed_user, options = {})
114
+ begin
115
+ Kaui::UserRole.find_roles_by_username(allowed_user.kb_username, options)
116
+ rescue KillBillClient::API::ClientError => _
117
+ return false
118
+ end
119
+
120
+ return true
121
+ end
122
+
106
123
  def allowed_user_params
107
124
  allowed_user = params.require(:allowed_user)
108
125
  allowed_user.require(:kb_username)
@@ -110,6 +127,6 @@ class Kaui::AdminAllowedUsersController < Kaui::EngineController
110
127
  end
111
128
 
112
129
  def roles_for_user(allowed_user)
113
- Kaui::UserRole.find_roles_by_username(allowed_user.kb_username, options_for_klient).map(&:presence).compact || []
130
+ Kaui::UserRole.find_roles_by_username(allowed_user.kb_username, options_for_klient).map(&:presence).compact rescue []
114
131
  end
115
132
  end
@@ -233,7 +233,7 @@ class Kaui::AdminTenantsController < Kaui::EngineController
233
233
  view_form_model['states'] = view_form_model['states'].values unless view_form_model['states'].blank?
234
234
 
235
235
  overdue = Kaui::Overdue::from_overdue_form_model(view_form_model)
236
- overdue.upload_tenant_overdue_config_json(options[:username], nil, comment, options)
236
+ Kaui::Overdue::upload_tenant_overdue_config_json(overdue.to_json,options[:username], nil, comment, options)
237
237
  redirect_to admin_tenant_path(current_tenant.id), :notice => 'Overdue config was successfully added '
238
238
  end
239
239
 
@@ -314,11 +314,16 @@ class Kaui::AdminTenantsController < Kaui::EngineController
314
314
  plugin_type = params[:plugin_type]
315
315
  plugin_key = params[:plugin_key]
316
316
 
317
- plugin_config = Kaui::AdminTenant.format_plugin_config(plugin_key, plugin_type, plugin_properties)
317
+ if plugin_properties.blank?
318
+ flash[:error] = 'Plugin properties cannot be blank'
319
+ else
320
+ plugin_config = Kaui::AdminTenant.format_plugin_config(plugin_key, plugin_type, plugin_properties)
318
321
 
319
- Kaui::AdminTenant.upload_tenant_plugin_config(plugin_name, plugin_config, options[:username], nil, comment, options)
322
+ Kaui::AdminTenant.upload_tenant_plugin_config(plugin_name, plugin_config, options[:username], nil, comment, options)
323
+ flash[:notice] = 'Config for plugin was successfully uploaded'
324
+ end
320
325
 
321
- redirect_to admin_tenant_path(current_tenant.id), :notice => 'Config for plugin was successfully uploaded'
326
+ redirect_to admin_tenant_path(current_tenant.id)
322
327
  end
323
328
 
324
329
  def remove_allowed_user
@@ -367,23 +372,15 @@ class Kaui::AdminTenantsController < Kaui::EngineController
367
372
  end
368
373
 
369
374
  def display_catalog_xml
370
- current_tenant = safely_find_tenant_by_id(params[:id])
371
- effective_date = params.require(:effective_date)
372
-
373
- options = tenant_options_for_client
374
- options[:api_key] = current_tenant.api_key
375
- options[:api_secret] = current_tenant.api_secret
376
-
377
- response = Kaui::Catalog.get_catalog_xml(effective_date, options) rescue response = {}
378
-
379
- catalog_xml = {}
380
- unless response.nil? && response.size > 0
381
- catalog_xml = response[0][:xml]
382
- end
383
-
375
+ catalog_xml = fetch_catalog_xml(params[:id], params.require(:effective_date))
384
376
  render xml: catalog_xml
385
377
  end
386
378
 
379
+ def download_catalog_xml
380
+ effective_date = params.require(:effective_date)
381
+ catalog_xml = fetch_catalog_xml(params[:id], effective_date)
382
+ send_data catalog_xml, filename: "catalog_#{effective_date}.xml", type: :xml
383
+ end
387
384
 
388
385
  def display_overdue_xml
389
386
  render xml: params.require(:xml)
@@ -440,6 +437,17 @@ class Kaui::AdminTenantsController < Kaui::EngineController
440
437
  end
441
438
  end
442
439
 
440
+ def switch_tenant
441
+ tenant = Kaui::Tenant.find_by_kb_tenant_id(params.require(:kb_tenant_id))
442
+
443
+ # Select the tenant, see TenantsController
444
+ session[:kb_tenant_id] = tenant.kb_tenant_id
445
+ session[:kb_tenant_name] = tenant.name
446
+ session[:tenant_id] = tenant.id
447
+
448
+ redirect_to admin_tenant_path(tenant.id), :notice => "Tenant was switched to #{tenant.name}"
449
+ end
450
+
443
451
  private
444
452
 
445
453
 
@@ -483,10 +491,10 @@ class Kaui::AdminTenantsController < Kaui::EngineController
483
491
 
484
492
  plugin_repository.each do |plugin|
485
493
  return plugin, [] if plugin[:plugin_name] == entered_plugin_name || plugin[:plugin_key] == entered_plugin_name
486
-
487
- splitted_plugin_name = split_camel_dash_underscore_space(plugin[:plugin_name])
488
494
  weight = { :plugin_name => plugin[:plugin_name], :plugin_key => plugin[:plugin_key],
489
495
  :plugin_type => plugin[:plugin_type], :installed => plugin[:installed], :worth_weight => 0.0 }
496
+
497
+ splitted_plugin_name = split_camel_dash_underscore_space(plugin[:plugin_name])
490
498
  splitted_entered_plugin_name.each do |entered|
491
499
  if splitted_plugin_name.include?(entered)
492
500
  weight[:worth_weight] = weight[:worth_weight] + 1.0
@@ -498,7 +506,23 @@ class Kaui::AdminTenantsController < Kaui::EngineController
498
506
  break
499
507
  end
500
508
  end
509
+
510
+ # perform a plugin key search, if weight is zero
511
+ next unless weight[:worth_weight] == 0
512
+ splitted_plugin_key = split_camel_dash_underscore_space(plugin[:plugin_key])
513
+
514
+ if splitted_plugin_key.include?(entered)
515
+ weight[:worth_weight] = weight[:worth_weight] + 1.0
516
+ end
517
+
518
+ splitted_plugin_key.each do |splitted|
519
+ if entered.chars.all? { |ch| splitted.include?(ch) }
520
+ weight[:worth_weight] = weight[:worth_weight] + worth_of_non_words
521
+ break
522
+ end
523
+ end
501
524
  end
525
+
502
526
  weights << weight if weight[:worth_weight] > 0
503
527
 
504
528
  end
@@ -506,4 +530,19 @@ class Kaui::AdminTenantsController < Kaui::EngineController
506
530
  weights.sort! { |a,b| b[:worth_weight] <=> a[:worth_weight] } if weights.size > 1
507
531
  return nil, weights
508
532
  end
533
+
534
+ def fetch_catalog_xml(tenant_id, effective_date)
535
+ current_tenant = safely_find_tenant_by_id(tenant_id)
536
+
537
+ options = tenant_options_for_client
538
+ options[:api_key] = current_tenant.api_key
539
+ options[:api_secret] = current_tenant.api_secret
540
+
541
+ response = Kaui::Catalog.get_catalog_xml(effective_date, options) rescue response = {}
542
+
543
+ catalog_xml = {}
544
+ catalog_xml = response[0][:xml] unless response.blank?
545
+
546
+ catalog_xml
547
+ end
509
548
  end