usman 0.1.0 → 0.1.1

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +51 -10
  3. data/app/controllers/usman/admin/dashboard_controller.rb +9 -1
  4. data/app/controllers/usman/admin/features_controller.rb +16 -22
  5. data/app/controllers/usman/admin/permissions_controller.rb +15 -0
  6. data/app/controllers/usman/admin/resource_controller.rb +4 -0
  7. data/app/controllers/usman/admin/roles_controller.rb +66 -0
  8. data/app/controllers/usman/admin/users_controller.rb +44 -31
  9. data/app/controllers/usman/sessions_controller.rb +14 -3
  10. data/app/helpers/usman/authentication_helper.rb +23 -17
  11. data/app/models/feature.rb +50 -4
  12. data/app/models/permission.rb +49 -1
  13. data/app/models/role.rb +62 -0
  14. data/app/models/user.rb +112 -3
  15. data/app/models/usman/application_record.rb +2 -2
  16. data/app/views/layouts/kuppayam/_sidebar.html.erb +8 -4
  17. data/app/views/usman/admin/dashboard/index.html.erb +1 -1
  18. data/app/views/usman/admin/features/_action_buttons.html.erb +0 -11
  19. data/app/views/usman/admin/features/_index.html.erb +3 -3
  20. data/app/views/usman/admin/features/_row.html.erb +3 -3
  21. data/app/views/usman/admin/features/_show.html.erb +5 -1
  22. data/app/views/usman/admin/features/index.html.erb +8 -1
  23. data/app/views/usman/admin/features/temp/create.js.erb +29 -0
  24. data/app/views/usman/admin/features/{index.js.erb → temp/index.js.erb} +1 -1
  25. data/app/views/usman/admin/permissions/_action_buttons.html.erb +0 -11
  26. data/app/views/usman/admin/permissions/index.html.erb +8 -1
  27. data/app/views/usman/admin/permissions/temp/create.js.erb +29 -0
  28. data/app/views/usman/admin/permissions/temp/destroy.js.erb +22 -0
  29. data/app/views/usman/admin/permissions/temp/edit.js.erb +4 -0
  30. data/app/views/usman/admin/permissions/{index.js.erb → temp/index.js.erb} +9 -3
  31. data/app/views/usman/admin/permissions/temp/new.js.erb +4 -0
  32. data/app/views/usman/admin/permissions/temp/row.js.erb +24 -0
  33. data/app/views/usman/admin/permissions/temp/show.js.erb +13 -0
  34. data/app/views/usman/admin/permissions/temp/update.js.erb +29 -0
  35. data/app/views/usman/admin/roles/_form.html.erb +23 -0
  36. data/app/views/usman/admin/roles/_index.html.erb +48 -0
  37. data/app/views/usman/admin/roles/_row.html.erb +24 -0
  38. data/app/views/usman/admin/roles/_show.html.erb +72 -0
  39. data/app/views/usman/admin/roles/index.html.erb +32 -0
  40. data/app/views/usman/admin/users/_form.html.erb +5 -2
  41. data/app/views/usman/admin/users/_index.html.erb +22 -41
  42. data/app/views/usman/admin/users/_row.html.erb +21 -41
  43. data/app/views/usman/admin/users/_show.html.erb +198 -131
  44. data/app/views/usman/admin/users/index.html.erb +25 -1
  45. data/app/views/usman/sessions/_sign_in.js.erb +2 -2
  46. data/config/locales/kuppayam/authentication.ar.yml +25 -0
  47. data/config/locales/kuppayam/authentication.en.yml +25 -0
  48. data/config/routes.rb +4 -9
  49. data/db/import_data/dummy/features.csv +10 -0
  50. data/db/import_data/dummy/images/users/guna.neweast.png +0 -0
  51. data/db/import_data/dummy/images/users/junaid.ramzan.jpg +0 -0
  52. data/db/import_data/dummy/images/users/kpvarma.png +0 -0
  53. data/db/import_data/dummy/images/users/stephen.price.png +0 -0
  54. data/db/import_data/dummy/images/users/vinodh.jpg +0 -0
  55. data/db/import_data/dummy/permissions.csv +60 -0
  56. data/db/import_data/dummy/users.csv +7 -0
  57. data/db/import_data/features.csv +10 -0
  58. data/db/import_data/images/users/junaid.ramzan.jpg +0 -0
  59. data/db/import_data/images/users/kpvarma.png +0 -0
  60. data/db/import_data/images/users/vinodh.jpg +0 -0
  61. data/db/import_data/permissions.csv +30 -0
  62. data/db/import_data/users.csv +4 -0
  63. data/db/migrate/20170000000102_create_roles.rb +18 -0
  64. data/lib/tasks/usman/all.rake +49 -0
  65. data/lib/tasks/usman/features.rake +26 -0
  66. data/lib/tasks/usman/permissions.rake +26 -0
  67. data/lib/tasks/usman/users.rake +26 -0
  68. data/lib/usman/engine.rb +12 -1
  69. data/lib/usman/extras/import_error_handler.rb +79 -0
  70. data/lib/usman/version.rb +1 -1
  71. metadata +65 -55
  72. data/app/models/image/base.rb +0 -30
  73. data/app/views/usman/admin/features/create.js.erb +0 -16
  74. data/app/views/usman/admin/permissions/create.js.erb +0 -17
  75. data/app/views/usman/admin/permissions/destroy.js.erb +0 -16
  76. data/app/views/usman/admin/permissions/edit.js.erb +0 -7
  77. data/app/views/usman/admin/permissions/new.js.erb +0 -7
  78. data/app/views/usman/admin/permissions/row.js.erb +0 -10
  79. data/app/views/usman/admin/permissions/show.js.erb +0 -8
  80. data/app/views/usman/admin/permissions/update.js.erb +0 -16
  81. data/app/views/usman/admin/users/_action_buttons.html.erb +0 -11
  82. data/app/views/usman/admin/users/create.js.erb +0 -16
  83. data/app/views/usman/admin/users/destroy.js.erb +0 -16
  84. data/app/views/usman/admin/users/edit.js.erb +0 -7
  85. data/app/views/usman/admin/users/index.js.erb +0 -8
  86. data/app/views/usman/admin/users/new.js.erb +0 -7
  87. data/app/views/usman/admin/users/row.js.erb +0 -10
  88. data/app/views/usman/admin/users/show.js.erb +0 -8
  89. data/app/views/usman/admin/users/update.js.erb +0 -16
  90. data/config/locales/usman.en.yml +0 -61
  91. data/db/migrate/20131108102728_create_images.rb +0 -12
  92. data/lib/tasks/usman_tasks.rake +0 -4
  93. /data/app/views/usman/admin/features/{destroy.js.erb → temp/destroy.js.erb} +0 -0
  94. /data/app/views/usman/admin/features/{edit.js.erb → temp/edit.js.erb} +0 -0
  95. /data/app/views/usman/admin/features/{new.js.erb → temp/new.js.erb} +0 -0
  96. /data/app/views/usman/admin/features/{row.js.erb → temp/row.js.erb} +0 -0
  97. /data/app/views/usman/admin/features/{show.js.erb → temp/show.js.erb} +0 -0
  98. /data/app/views/usman/admin/features/{update.js.erb → temp/update.js.erb} +0 -0
  99. /data/db/migrate/{20140402113213_create_users.rb → 20170000000100_create_users.rb} +0 -0
  100. /data/db/migrate/{20140402113214_create_features.rb → 20170000000101_create_features.rb} +0 -0
@@ -0,0 +1,62 @@
1
+ class Role < Usman::ApplicationRecord
2
+
3
+ require 'import_error_handler.rb'
4
+ extend Usman::ImportErrorHandler
5
+
6
+ # Associations
7
+ has_and_belongs_to_many :users
8
+
9
+ # Validations
10
+ validates :name, presence: true
11
+
12
+ # ------------------
13
+ # Class Methods
14
+ # ------------------
15
+
16
+ # return an active record relation object with the search query in its where clause
17
+ # Return the ActiveRecord::Relation object
18
+ # == Examples
19
+ # >>> role.search(query)
20
+ # => ActiveRecord::Relation object
21
+ scope :search, lambda {|query| where("LOWER(name) LIKE LOWER('%#{query}%')")
22
+ }
23
+
24
+ def self.save_row_data(row, base_path)
25
+
26
+ row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
27
+
28
+ return if row[:name].blank?
29
+
30
+ role = Role.find_by_name(row[:name]) || Role.new
31
+ role.name = row[:name]
32
+
33
+ # Initializing error hash for displaying all errors altogether
34
+ error_object = Usman::ErrorHash.new
35
+
36
+ if role.valid?
37
+ role.save!
38
+ else
39
+ summary = "Error while saving role: #{role.name}"
40
+ details = "Error! #{role.errors.full_messages.to_sentence}"
41
+ error_object.errors << { summary: summary, details: details }
42
+ end
43
+ return error_object
44
+ end
45
+
46
+ # * Return full name
47
+ # == Examples
48
+ # >>> role.display_name
49
+ # => "Products"
50
+ def display_name
51
+ "#{name}"
52
+ end
53
+
54
+ def can_be_edited?
55
+ true
56
+ end
57
+
58
+ def can_be_deleted?
59
+ self.users.count > 0 ? false : true
60
+ end
61
+
62
+ end
data/app/models/user.rb CHANGED
@@ -1,5 +1,7 @@
1
- class User < ActiveRecord::Base
1
+ class User < Usman::ApplicationRecord
2
2
 
3
+ require 'import_error_handler.rb'
4
+ extend Usman::ImportErrorHandler
3
5
  extend KuppayamValidators
4
6
 
5
7
  # including Password Methods
@@ -27,7 +29,7 @@ class User < ActiveRecord::Base
27
29
  SESSION_TIME_OUT = 30.minutes
28
30
 
29
31
  # Validations
30
- validate_string :name, mandatory: true
32
+ validates :name, presence: true
31
33
  validate_username :username
32
34
  validate_email :email
33
35
  validate_password :password, condition_method: :should_validate_password?
@@ -41,6 +43,7 @@ class User < ActiveRecord::Base
41
43
  has_one :profile_picture, :as => :imageable, :dependent => :destroy, :class_name => "Image::ProfilePicture"
42
44
  has_many :permissions
43
45
  has_many :features, through: :permissions
46
+ has_and_belongs_to_many :users
44
47
 
45
48
 
46
49
  # ------------------
@@ -68,6 +71,67 @@ class User < ActiveRecord::Base
68
71
  scope :approved, -> { where(status: APPROVED) }
69
72
  scope :suspended, -> { where(status: SUSPENDED) }
70
73
 
74
+ def self.save_row_data(row, base_path)
75
+
76
+ image_base_path = base_path + "images/"
77
+
78
+ row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
79
+
80
+ return if row[:name].blank?
81
+
82
+ user = User.find_by_username(row[:username]) || User.new
83
+ user.name = row[:name]
84
+ user.username = row[:username]
85
+ user.designation = row[:designation]
86
+ user.email = row[:email]
87
+ user.phone = row[:phone]
88
+
89
+ user.super_admin = ["true", "t","1","yes","y"].include?(row[:super_admin].to_s.downcase.strip)
90
+
91
+ user.status = row[:status]
92
+ user.assign_default_password
93
+
94
+ # Initializing error hash for displaying all errors altogether
95
+ error_object = Usman::ErrorHash.new
96
+
97
+ if user.valid?
98
+ user.save!
99
+ else
100
+ summary = "Error while saving user: #{user.name}"
101
+ details = "Error! #{user.errors.full_messages.to_sentence}"
102
+ error_object.errors << { summary: summary, details: details }
103
+ end
104
+
105
+ ## Adding a profile picture
106
+ begin
107
+ image_path = image_base_path + "users/#{user.username}.png"
108
+ image_path = image_base_path + "users/#{user.username}.jpg" unless File.exists?(image_path)
109
+ if File.exists?(image_path)
110
+ user.build_profile_picture
111
+ user.profile_picture.image = File.open(image_path)
112
+ if user.profile_picture.valid?
113
+ user.profile_picture.save
114
+ else
115
+ summary = "Error while saving user: #{user.name}"
116
+ details = "Error! #{user.errors.full_messages.to_sentence}"
117
+ details << ", #{user.profile_picture.errors.full_messages.to_sentence}" if user.profile_picture
118
+ error_object.errors << { summary: summary, details: details }
119
+ end
120
+ else
121
+ summary = "Profile Picture not found for user: #{user.name}"
122
+ details = "#{image_path}/png doesn't exists"
123
+ error_object.warnings << { summary: summary, details: details }
124
+ end
125
+ rescue => e
126
+ summary = "Error during processing: #{$!}"
127
+ details = "User: #{user.name}, Image Path: #{image_path}"
128
+ stack_trace = "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
129
+ error_object.errors << { summary: summary, details: details, stack_trace: stack_trace }
130
+ end if user.profile_picture.blank?
131
+
132
+ return error_object
133
+ end
134
+
71
135
  # ------------------
72
136
  # Instance variables
73
137
  # ------------------
@@ -155,6 +219,14 @@ class User < ActiveRecord::Base
155
219
  self.update_attributes auth_token: SecureRandom.hex, token_created_at: nil
156
220
  end
157
221
 
222
+ def update_token
223
+ self.update_attribute(:token_created_at, Time.now)
224
+ end
225
+
226
+ def token_about_to_expire?
227
+ return self.token_created_at.nil? || (Time.now > self.token_created_at + (SESSION_TIME_OUT - 1.minute))
228
+ end
229
+
158
230
  def assign_default_password
159
231
  self.password = DEFAULT_PASSWORD
160
232
  self.password_confirmation = DEFAULT_PASSWORD
@@ -216,10 +288,26 @@ class User < ActiveRecord::Base
216
288
  permission && permission.can_delete?
217
289
  end
218
290
 
219
- def can_be_destroyed?
291
+ def can_be_approved?
292
+ pending? or suspended?
293
+ end
294
+
295
+ def can_be_marked_as_pending?
296
+ approved? or suspended?
297
+ end
298
+
299
+ def can_be_suspended?
300
+ approved? or pending?
301
+ end
302
+
303
+ def can_be_deleted?
220
304
  return true
221
305
  end
222
306
 
307
+ def can_be_edited?
308
+ !suspended?
309
+ end
310
+
223
311
  private
224
312
 
225
313
  def should_validate_password?
@@ -244,4 +332,25 @@ class User < ActiveRecord::Base
244
332
  return feature
245
333
  end
246
334
 
335
+ def get_role(role_name)
336
+ self.roles.find_by_id(role_name) || self.roles.find_by_name(role_name)
337
+ end
338
+
339
+ def add_role(role_name)
340
+ role = self.get_role(role_name)
341
+ self.roles << role if role && role.persists?
342
+ end
343
+
344
+ def remove_role(role_name)
345
+ role = self.get_role(role_name)
346
+ if role
347
+ self.roles.delete(role)
348
+ end
349
+ end
350
+
351
+ def has_role?(role_name)
352
+ role = self.get_role(role_name)
353
+ role && role.persists?
354
+ end
355
+
247
356
  end
@@ -1,5 +1,5 @@
1
1
  module Usman
2
2
  class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
4
- end
3
+ self.abstract_class = true
4
+ end
5
5
  end
@@ -38,7 +38,7 @@
38
38
  <!-- class "auto-inherit-active-class" will automatically add "active" class for parent elements who are marked already with class "active" -->
39
39
 
40
40
  <li class="<%= nav_active?('admin/dashboard') ? 'active' : '' %>">
41
- <%= link_to raw("<i class=\"linecons-desktop\"></i> <span class='title'>Dashboard</span>"), admin_dashboard_url %>
41
+ <%= link_to raw("<i class=\"linecons-desktop\"></i> <span class='title'>Dashboard</span>"), usman.admin_dashboard_url %>
42
42
  </li>
43
43
 
44
44
  <li class="<%= nav_active?('admin/users') ? 'active' : '' %>">
@@ -50,11 +50,11 @@
50
50
 
51
51
  <ul>
52
52
  <li class="<%= nav_class("admin/users") %>">
53
- <%= link_to raw("<i class=\"linecons-user\"></i> <span class='title'>Manage Users</span>"), admin_users_url %>
53
+ <%= link_to raw("<i class=\"linecons-user\"></i> <span class='title'>Manage Users</span>"), usman.admin_users_url %>
54
54
  </li>
55
55
 
56
56
  <li class="<%= nav_class("admin/users") %>">
57
- <%= link_to raw("<i class=\"linecons-lock\"></i> <span class='title'>Manage Permissions</span>"), admin_permissions_url %>
57
+ <%= link_to raw("<i class=\"linecons-lock\"></i> <span class='title'>Manage Permissions</span>"), usman.admin_permissions_url %>
58
58
  </li>
59
59
  </ul>
60
60
 
@@ -67,7 +67,11 @@
67
67
  </a>
68
68
  <ul>
69
69
  <li class="">
70
- <%= link_to raw("<i class=\"linecons-diamond\"></i> <span class='title'>Manage Features</span>"), admin_features_url %>
70
+ <%= link_to raw("<i class=\"linecons-diamond\"></i> <span class='title'>Manage Features</span>"), usman.admin_features_url %>
71
+ </li>
72
+
73
+ <li class="">
74
+ <%= link_to raw("<i class=\"linecons-diamond\"></i> <span class='title'>Manage Roles</span>"), usman.admin_roles_url %>
71
75
  </li>
72
76
  </ul>
73
77
  </li>
@@ -18,7 +18,7 @@
18
18
  <i class="linecons-lightbulb"></i>
19
19
  </div>
20
20
  <div class="xe-label">
21
- <strong class="num"><%= time_ago_in_words(Dummy::BOOTED_AT) %></strong>
21
+ <strong class="num">2 Hours Ago</strong>
22
22
  <span>Server Up Since</span>
23
23
  </div>
24
24
  </div>
@@ -1,11 +0,0 @@
1
- <div class="row">
2
- <div class="col-md-4">
3
- <%= link_to raw("<i class='fa fa-plus mr-10'></i><span class='btn-text'> New Feature</span>"), new_admin_feature_path, :class=>"btn btn-primary pull-left mb-5", :remote=>true %>
4
- </div>
5
- <div class="col-md-8">
6
- <%= search_form_kuppayam(Feature, admin_features_path, text: @filters[:query]) %>
7
- </div>
8
- </div>
9
-
10
-
11
-
@@ -17,9 +17,9 @@
17
17
  <tr id="tr_feature_<%= feature.id %>">
18
18
 
19
19
  <td class="feature-image">
20
- <a href="#">
21
- <%= display_image(feature, "profile_picture.image.small.url", width: "32", height: "auto", class: "img-circle", alt: feature.display_name) %>
22
- </a>
20
+ <%= link_to(admin_feature_path(feature), remote: true) do %>
21
+ <%= display_image(feature, "feature_image.image.small.url", width: "32", height: "auto", class: "img-rectangle", alt: feature.display_name) %>
22
+ <% end %>
23
23
  </td>
24
24
 
25
25
  <td class="feature-name"><%= link_to feature.name, admin_feature_path(feature), remote: true %></td>
@@ -4,9 +4,9 @@
4
4
  <tr id="tr_feature_<%= feature.id %>">
5
5
 
6
6
  <td class="feature-image">
7
- <a href="#">
8
- <%= display_image(feature, "profile_picture.image.small.url", width: "32", height: "auto", class: "img-circle", alt: feature.display_name) %>
9
- </a>
7
+ <%= link_to(admin_feature_path(feature), remote: true) do %>
8
+ <%= display_image(feature, "feature_image.image.small.url", width: "32", height: "auto", class: "img-rectangle", alt: feature.display_name) %>
9
+ <% end %>
10
10
  </td>
11
11
 
12
12
  <td class="feature-name"><%= link_to feature.name, admin_feature_path(feature), remote: true %></td>
@@ -3,7 +3,11 @@
3
3
  <div class="media <%= status_hash[@feature.status.to_sym] %>">
4
4
 
5
5
  <div class="pull-left pt-10 pr-10 pb-10" style="width:30%;">
6
- <%= edit_image(@feature, "feature_image.image.large.url", upload_image_link(@feature, :feature_image)) %>
6
+ <%= edit_image(@feature,
7
+ "feature_image.image.large.url",
8
+ upload_image_link(@feature, :feature_image, nil ),
9
+ remove_image_link(@feature, :feature_image, nil ),
10
+ image_options: {assoc_name: :feature_image }) %>
7
11
  </div>
8
12
 
9
13
  <div class="pull-left ml-10" style="width:65%;">
@@ -8,7 +8,14 @@
8
8
  <div class="tab-pane active">
9
9
 
10
10
  <div id="div_feature_action_buttons">
11
- <%= render :partial=>"usman/admin/features/action_buttons" %>
11
+ <div class="row">
12
+ <div class="col-md-4">
13
+ <%= link_to raw("<i class='fa fa-plus mr-10'></i><span class='btn-text'> New Feature</span>"), new_admin_feature_path, :class=>"btn btn-primary pull-left mb-5", :remote=>true %>
14
+ </div>
15
+ <div class="col-md-8">
16
+ <%= search_form_kuppayam(Feature, admin_features_path, text: @filters[:query]) %>
17
+ </div>
18
+ </div>
12
19
  </div>
13
20
  <%= clear_tag(10) %>
14
21
 
@@ -0,0 +1,29 @@
1
+ <% if @feature.errors.blank? %>
2
+
3
+ // Inserting the row on top of the table and highlighting it
4
+ $('#tr_feature_index table > tbody > tr:first').before("<%= escape_javascript(render(:partial=>'/usman/admin/features/row', locals: {feature: @feature})) %>")
5
+ $("#tr_feature_<%= @feature.id %>").css("background-color", "#fffddd");
6
+
7
+ // Showing the saved data in the modal
8
+ var heading = "<%= raw @feature.name %>";
9
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/features/show')) %>";
10
+ showLargeModal(heading, bodyContent, false);
11
+
12
+ // Showing Growl Like Message
13
+ notifySuccess("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(@notification[:message]) %>");
14
+
15
+ <% else %>
16
+
17
+ // Reload the form with errors
18
+ var heading = "Add a User";
19
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/features/form')) %>";
20
+ showLargeModal(heading, bodyContent);
21
+
22
+ // Show Main Error Message on the form
23
+ <% error_message = content_tag(:div, I18n.t('errors.errors_highlighted'), class: "alert alert-danger mt-20") %>
24
+ $("#feature_form_error").html("<%= escape_javascript(error_message) %>");
25
+
26
+ // Showing Growl Like Message
27
+ notifyError("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(raw(@notification[:message])) %>");
28
+
29
+ <% end %>
@@ -3,6 +3,6 @@ closeGenericModal();
3
3
  // Fill the right box with first enquiry details in the list
4
4
  $('#div_feature_index').html("<%= escape_javascript(render(:partial=>'/usman/admin/features/index')) %>");
5
5
  <% else %>
6
- var noResultsText = "<%= escape_javascript(theme_panel_message(I18n.translate('forms.no_results')))%>";
6
+ var noResultsText = "<%= escape_javascript(theme_panel_message(I18n.translate('success.no_results_found')))%>";
7
7
  $('#div_feature_index').html(noResultsText);
8
8
  <% end %>
@@ -1,11 +0,0 @@
1
- <div class="row">
2
- <div class="col-md-4">
3
- <%= link_to raw("<i class='fa fa-plus mr-10'></i><span class='btn-text'> New Permission</span>"), new_admin_permission_path, :class=>"btn btn-primary pull-left mb-5", :remote=>true %>
4
- </div>
5
- <div class="col-md-8">
6
- <%= search_form_kuppayam(Permission, admin_permissions_path, text: @filters[:query]) %>
7
- </div>
8
- </div>
9
-
10
-
11
-
@@ -8,7 +8,14 @@
8
8
  <div class="tab-pane active">
9
9
 
10
10
  <div id="div_permission_action_buttons">
11
- <%= render :partial=>"usman/admin/permissions/action_buttons" %>
11
+ <div class="row">
12
+ <div class="col-md-4">
13
+ <%= link_to raw("<i class='fa fa-plus mr-10'></i><span class='btn-text'> New Permission</span>"), new_admin_permission_path, :class=>"btn btn-primary pull-left mb-5", :remote=>true %>
14
+ </div>
15
+ <div class="col-md-8">
16
+ <%= search_form_kuppayam(Permission, admin_permissions_path, text: @filters[:query]) %>
17
+ </div>
18
+ </div>
12
19
  </div>
13
20
  <%= clear_tag(10) %>
14
21
 
@@ -0,0 +1,29 @@
1
+ <% if @permission.errors.blank? %>
2
+
3
+ // Inserting the row on top of the table and highlighting it
4
+ $('#tr_permission_index table > tbody > tr:first').before("<%= escape_javascript(render(:partial=>'/usman/admin/permissions/row', locals: {permission: @permission})) %>")
5
+ $("#tr_permission_<%= @permission.id %>").css("background-color", "#fffddd");
6
+
7
+ // Showing the saved data in the modal
8
+ var heading = "<%= raw @permission.name %>";
9
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/permissions/show')) %>";
10
+ showLargeModal(heading, bodyContent, false);
11
+
12
+ // Showing Growl Like Message
13
+ notifySuccess("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(@notification[:message]) %>");
14
+
15
+ <% else %>
16
+
17
+ // Reload the form with errors
18
+ var heading = "Add a Permission";
19
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/permissions/form')) %>";
20
+ showLargeModal(heading, bodyContent);
21
+
22
+ // Show Main Error Message on the form
23
+ <% error_message = content_tag(:div, I18n.t('errors.errors_highlighted'), class: "alert alert-danger mt-20") %>
24
+ $("#permission_form_error").html("<%= escape_javascript(error_message) %>");
25
+
26
+ // Showing Growl Like Message
27
+ notifyError("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(raw(@notification[:message])) %>");
28
+
29
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <% if @destroyed %>
2
+
3
+ // Removing the item from the list
4
+ $('#tr_permission_<%= @permission.id %>').remove();
5
+
6
+ // Closing the modal if it is opened
7
+ closeLargeModal();
8
+
9
+ // Showing Growl Like Message
10
+ notifySuccess("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(@notification[:message]) %>");
11
+
12
+ <% else %>
13
+
14
+ // Show the error in a modal
15
+ showMessageModal("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(@notification[:message]) %>");
16
+
17
+ // Showing Growl Like Message
18
+ notifyError("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(@notification[:message]) %>");
19
+
20
+ <% end %>
21
+
22
+
@@ -0,0 +1,4 @@
1
+ // Show the new form in the right box.
2
+ var heading = "Edit Permission";
3
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/permissions/form')) %>";
4
+ showLargeModal(heading, bodyContent);
@@ -1,8 +1,14 @@
1
- closeGenericModal();
1
+ // Close Modal if it is opened
2
+ closeLargeModal();
3
+
2
4
  <% if @permissions.any? %>
3
- // Fill the right box with first enquiry details in the list
5
+
6
+ // Refresh the list
4
7
  $('#div_permission_index').html("<%= escape_javascript(render(:partial=>'/usman/admin/permissions/index')) %>");
8
+
5
9
  <% else %>
6
- var noResultsText = "<%= escape_javascript(theme_panel_message(I18n.translate('forms.no_results')))%>";
10
+
11
+ var noResultsText = "<%= escape_javascript(theme_panel_message(I18n.translate('success.no_results_found')))%>";
7
12
  $('#div_permission_index').html(noResultsText);
13
+
8
14
  <% end %>
@@ -0,0 +1,4 @@
1
+ // Load the form
2
+ var heading = "Add a Permission";
3
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/permissions/form')) %>";
4
+ showLargeModal(heading, bodyContent);
@@ -0,0 +1,24 @@
1
+ <% if @permission && @permission.errors.blank? %>
2
+
3
+ // Updating the edited row and highlighting it
4
+ $("#tr_permission_<%= @permission.id %>").replaceWith("<%= escape_javascript(render(:partial=>'/usman/admin/permissions/row', locals: {permission: @permission, i: -1})) %>")
5
+ $("#tr_permission_<%= @permission.id %>").css("background-color", "#fffddd");
6
+
7
+ // Refresh the modal content if it is open
8
+ $("#div_permission_show").replaceWith("<%= escape_javascript(render(:partial=>'/usman/admin/permissions/show')) %>")
9
+
10
+ // Closing the modal
11
+ showAndHideModals();
12
+
13
+ // Showing Growl Like Message
14
+ notifySuccess("<%= @notification[:title] %>", "<%= @notification[:message] %>");
15
+
16
+ <% else %>
17
+
18
+ // Updating the row which got errored and highlighting it
19
+ $("#tr_permission_<%= params[:id] %>").css("background-color", "#ffefef");
20
+
21
+ // Showing Growl Like Message
22
+ notifyError("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(raw(@notification[:message])) %>");
23
+
24
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <% if @permission %>
2
+
3
+ // Show the details in the large modal
4
+ var heading = "<%= raw @permission.name %>";
5
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/permissions/show')) %>";
6
+ showLargeModal(heading, bodyContent, false);
7
+
8
+ <% else %>
9
+
10
+ // Showing Growl Like Message
11
+ notifyError("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(raw(@notification[:message])) %>");
12
+
13
+ <% end %>
@@ -0,0 +1,29 @@
1
+ <% if @permission.errors.blank? %>
2
+
3
+ // Updating the edited row and highlighting it
4
+ $('#tr_permission_<%= @permission.id %>').replaceWith("<%= escape_javascript(render(:partial=>'/usman/admin/permissions/row', locals: {permission: @permission})) %>");
5
+ $("#tr_permission_<%= @permission.id %>").css("background-color", "#fffddd");
6
+
7
+ // Showing the saved data in the modal
8
+ var heading = "<%= raw @permission.name %>";
9
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/permissions/show')) %>";
10
+ showLargeModal(heading, bodyContent, false);
11
+
12
+ // Showing Growl Like Message
13
+ notifySuccess("<%= @notification[:title] %>", "<%= @notification[:message] %>");
14
+
15
+ <% else %>
16
+
17
+ // Reload the form with errors
18
+ var heading = "Edit Permission";
19
+ var bodyContent = "<%= escape_javascript(render(:partial=>'/usman/admin/permissions/form')) %>";
20
+ showLargeModal(heading, bodyContent);
21
+
22
+ // Show Main Error Message on the form
23
+ <% error_message = content_tag(:div, I18n.t('errors.errors_highlighted'), class: "alert alert-danger mt-20") %>
24
+ $("#permission_form_error").html("<%= escape_javascript(error_message) %>");
25
+
26
+ // Showing Growl Like Message
27
+ notifyError("<%= escape_javascript(@notification[:title]) %>", "<%= escape_javascript(raw(@notification[:message])) %>");
28
+
29
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <%= form_for([:admin, @role], :html => {:id=>"form_role", :class=>"mb-0 form-horizontal", :role => "form", :method => (@role.new_record? ? :post : :put), :remote=>true}) do |f| %>
2
+
3
+ <div id="role_form_error">
4
+ <%= @role.errors[:base].to_sentence %>
5
+ </div>
6
+
7
+ <div class="form-inputs mb-30 mt-30">
8
+ <%= theme_form_field(@role, :name) %>
9
+ </div>
10
+
11
+ <div>
12
+
13
+ <%= submit_tag("Save", :class=>"btn btn-primary pull-right ml-10") %>
14
+
15
+ <%= link_to raw("<i class='fa fa-close mr-5'></i><span>Cancel</span>"), "#", onclick: "closeGenericModal();", class: "pull-right ml-10 btn btn-white" %>
16
+
17
+ </div>
18
+ <%= clear_tag(10) %>
19
+
20
+ </div>
21
+
22
+ <% end %>
23
+
@@ -0,0 +1,48 @@
1
+ <div class="table-responsive">
2
+ <table class="table table-hover members-table middle-align">
3
+ <thead>
4
+ <tr>
5
+ <th style="text-align: center;width:20px">#</th>
6
+ <th>Name</th>
7
+ <th style="text-align: center;">Actions</th>
8
+ </tr>
9
+ </thead>
10
+
11
+ <tbody>
12
+ <% @roles.each_with_index do |role, i| %>
13
+
14
+ <% edit_link = edit_admin_role_path(id: role.id) %>
15
+ <% delete_link = admin_role_path(id: role.id) %>
16
+
17
+ <tr id="tr_role_<%= role.id %>">
18
+
19
+ <th scope="row" style="text-align: center;">
20
+ <% if i < 0 %>
21
+ <i class="fa fa-check text-success"></i>
22
+ <% else %>
23
+ <%= i + 1 + (@per_page.to_i * (@current_page.to_i - 1)) %>
24
+ <% end %>
25
+ </th>
26
+
27
+ <td class="role-name"><%= link_to role.name, admin_role_path(role), remote: true %></td>
28
+
29
+ <td class="action-links" style="width:10%">
30
+
31
+ <%= link_to raw("<i class=\"linecons-pencil\"></i> Edit Role"), edit_link, :remote=>true, class: "edit" %>
32
+
33
+ <%= link_to raw("<i class=\"linecons-trash\"></i> Delete"), delete_link, method: :delete, role: "menuitem", tabindex: "-1", data: { confirm: 'Are you sure?' }, :remote=>true, class: "delete" %>
34
+
35
+ </td>
36
+
37
+ </tr>
38
+ <% end %>
39
+ </tbody>
40
+ </table>
41
+ </div>
42
+
43
+ <div class="row">
44
+ <div class="col-sm-12">
45
+ <%= paginate_kuppayam(@roles) %>
46
+ </div>
47
+ </div>
48
+