usman 0.3.2 → 0.3.3
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 +4 -4
- data/app/controllers/usman/api/v1/base_controller.rb +1 -0
- data/app/controllers/usman/registrations_controller.rb +14 -0
- data/app/helpers/usman/api_helper.rb +34 -0
- data/app/models/device.rb +1 -0
- data/app/models/registration.rb +30 -4
- data/app/models/user.rb +3 -0
- data/app/views/layouts/kuppayam/_sidebar.html.erb +8 -1
- data/app/views/usman/api/v1/docs/get_profile_info/_neg_case_1.html.erb +1 -1
- data/app/views/usman/api/v1/docs/get_profile_info/_neg_case_2.html.erb +1 -1
- data/app/views/usman/api/v1/docs/get_profile_info/_pos_case_1.html.erb +1 -1
- data/app/views/usman/dashboard/index.html.erb +19 -0
- data/app/views/usman/registrations/_index.html.erb +20 -4
- data/app/views/usman/registrations/_row.html.erb +34 -8
- data/app/views/usman/registrations/_show.html.erb +11 -1
- data/config/locales/usman/authentication.en.yml +4 -1
- data/config/routes.rb +3 -0
- data/lib/usman/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 305e0b1f3fcbaf48dfa3ef61edcc5fc8f1f735c7
|
4
|
+
data.tar.gz: 0f29c10f24fe0a2a18fe7c30b3f48b3f37d57ae8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edca824f4e840bd5fd8786455cdd5f598d2543caa35060aca8f221270c0ee3b16800526620f0976d6b600e2f1c3b456a5bb7e4d555a988fcd0b3c264ed2cf730
|
7
|
+
data.tar.gz: 929e61aa9eddab89d2658005482b6abbf1e00c28302286f49dafe4adae2dbe534ea4b9e4f20df18456a39d70e58361f0aaa09897f3d75f184fdc89366e0551cc
|
@@ -3,6 +3,20 @@ module Usman
|
|
3
3
|
|
4
4
|
before_action :require_site_admin
|
5
5
|
|
6
|
+
def update_status
|
7
|
+
@registration = @r_object = Registration.find(params[:id])
|
8
|
+
case params[:status]
|
9
|
+
when "pending"
|
10
|
+
@registration.pending!
|
11
|
+
when "verified"
|
12
|
+
@registration.verify!
|
13
|
+
when "suspended"
|
14
|
+
@registration.suspend!
|
15
|
+
end
|
16
|
+
set_notification(true, I18n.t('status.success'), I18n.t('state.changed', item: default_item_name.titleize, new_state: @r_object.status))
|
17
|
+
render_row
|
18
|
+
end
|
19
|
+
|
6
20
|
private
|
7
21
|
|
8
22
|
def get_collections
|
@@ -39,6 +39,29 @@ module Usman
|
|
39
39
|
else
|
40
40
|
@current_user = @current_device.try(:registration).try(:user)
|
41
41
|
end
|
42
|
+
if @current_user
|
43
|
+
if @current_user.pending?
|
44
|
+
proc_code = Proc.new do
|
45
|
+
@success = false
|
46
|
+
@errors = {
|
47
|
+
heading: I18n.translate("api.general.user_is_pending.heading"),
|
48
|
+
message: I18n.translate("api.general.user_is_pending.message")
|
49
|
+
}
|
50
|
+
end
|
51
|
+
render_json_response(proc_code)
|
52
|
+
return
|
53
|
+
elsif @current_user.suspended?
|
54
|
+
proc_code = Proc.new do
|
55
|
+
@success = false
|
56
|
+
@errors = {
|
57
|
+
heading: I18n.translate("api.general.user_is_suspended.heading"),
|
58
|
+
message: I18n.translate("api.general.user_is_suspended.message")
|
59
|
+
}
|
60
|
+
end
|
61
|
+
render_json_response(proc_code)
|
62
|
+
return
|
63
|
+
end
|
64
|
+
end
|
42
65
|
end
|
43
66
|
|
44
67
|
def require_super_admin_auth_token
|
@@ -64,5 +87,16 @@ module Usman
|
|
64
87
|
return
|
65
88
|
end
|
66
89
|
end
|
90
|
+
|
91
|
+
def store_last_accessed_api
|
92
|
+
if @current_device
|
93
|
+
# Know what was the last API accessed and when
|
94
|
+
# This is to catch the users who are inactive
|
95
|
+
@current_device.last_accessed_api = request.original_url
|
96
|
+
@current_device.last_accessed_at = Time.now
|
97
|
+
@current_device.save
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
67
101
|
end
|
68
102
|
end
|
data/app/models/device.rb
CHANGED
data/app/models/registration.rb
CHANGED
@@ -5,15 +5,18 @@ class Registration < ApplicationRecord
|
|
5
5
|
|
6
6
|
PENDING = "pending"
|
7
7
|
VERIFIED = "verified"
|
8
|
+
SUSPENDED = "suspended"
|
8
9
|
|
9
10
|
STATUS = {
|
10
11
|
PENDING => "Pending",
|
11
|
-
VERIFIED => "Verified"
|
12
|
+
VERIFIED => "Verified",
|
13
|
+
SUSPENDED => "Suspended"
|
12
14
|
}
|
13
15
|
|
14
16
|
STATUS_REVERSE = {
|
15
17
|
"Pending" => PENDING,
|
16
|
-
"Verified" => VERIFIED
|
18
|
+
"Verified" => VERIFIED,
|
19
|
+
"Suspended" => SUSPENDED
|
17
20
|
}
|
18
21
|
|
19
22
|
# Associations
|
@@ -37,12 +40,15 @@ class Registration < ApplicationRecord
|
|
37
40
|
# >>> registration.search(query)
|
38
41
|
# => ActiveRecord::Relation object
|
39
42
|
scope :search, lambda {|query| joins("LEFT JOIN users on users.id = registrations.user_id").
|
40
|
-
where("LOWER(registrations.mobile_number) LIKE LOWER('%#{query}%') OR
|
41
|
-
LOWER(users.name) LIKE LOWER('%#{query}%')
|
43
|
+
where("LOWER(registrations.mobile_number) LIKE LOWER('%#{query}%') OR
|
44
|
+
LOWER(users.name) LIKE LOWER('%#{query}%') OR
|
45
|
+
LOWER(users.email) LIKE LOWER('%#{query}%') OR
|
46
|
+
LOWER(users.username) LIKE LOWER('%#{query}%')")}
|
42
47
|
scope :status, lambda { |status| where("LOWER(status)='#{status}'") }
|
43
48
|
|
44
49
|
scope :pending, -> { where(status: PENDING) }
|
45
50
|
scope :verified, -> { where(status: VERIFIED) }
|
51
|
+
scope :suspended, -> { where(status: SUSPENDED) }
|
46
52
|
|
47
53
|
# ------------------
|
48
54
|
# Instance Methods
|
@@ -77,6 +83,14 @@ class Registration < ApplicationRecord
|
|
77
83
|
(status == VERIFIED)
|
78
84
|
end
|
79
85
|
|
86
|
+
# * Return true if the user is suspended, else false.
|
87
|
+
# == Examples
|
88
|
+
# >>> registration.suspended?
|
89
|
+
# => true
|
90
|
+
def suspended?
|
91
|
+
(status == SUSPENDED)
|
92
|
+
end
|
93
|
+
|
80
94
|
# change the status to :verified
|
81
95
|
# Return the status
|
82
96
|
# == Examples
|
@@ -84,6 +98,7 @@ class Registration < ApplicationRecord
|
|
84
98
|
# => "pending"
|
85
99
|
def pending!
|
86
100
|
self.update_attribute(:status, PENDING)
|
101
|
+
self.user.update_attribute(:status, PENDING) if self.user
|
87
102
|
end
|
88
103
|
|
89
104
|
# change the status to :verified
|
@@ -93,6 +108,17 @@ class Registration < ApplicationRecord
|
|
93
108
|
# => "verified"
|
94
109
|
def verify!
|
95
110
|
self.update_attribute(:status, VERIFIED)
|
111
|
+
self.user.update_attribute(:status, VERIFIED) if self.user
|
112
|
+
end
|
113
|
+
|
114
|
+
# change the status to :suspended
|
115
|
+
# Return the status
|
116
|
+
# == Examples
|
117
|
+
# >>> registration.suspend!
|
118
|
+
# => "suspended"
|
119
|
+
def suspend!
|
120
|
+
self.update_attribute(:status, SUSPENDED)
|
121
|
+
self.user.update_attribute(:status, SUSPENDED) if self.user
|
96
122
|
end
|
97
123
|
|
98
124
|
# Permission Methods
|
data/app/models/user.rb
CHANGED
@@ -173,6 +173,7 @@ class User < Usman::ApplicationRecord
|
|
173
173
|
# => "pending"
|
174
174
|
def pending!
|
175
175
|
self.update_attribute(:status, PENDING)
|
176
|
+
self.registration.update_attribute(:status, PENDING) if self.registration
|
176
177
|
end
|
177
178
|
|
178
179
|
# change the status to :approved
|
@@ -182,6 +183,7 @@ class User < Usman::ApplicationRecord
|
|
182
183
|
# => "approved"
|
183
184
|
def approve!
|
184
185
|
self.update_attribute(:status, APPROVED)
|
186
|
+
self.registration.update_attribute(:status, Registration::VERIFIED) if self.registration
|
185
187
|
end
|
186
188
|
|
187
189
|
# change the status to :suspended
|
@@ -191,6 +193,7 @@ class User < Usman::ApplicationRecord
|
|
191
193
|
# => "suspended"
|
192
194
|
def suspend!
|
193
195
|
self.update_attribute(:status, SUSPENDED)
|
196
|
+
self.registration.update_attribute(:status, SUSPENDED) if self.registration
|
194
197
|
end
|
195
198
|
|
196
199
|
# Gender Methods
|
@@ -52,7 +52,10 @@
|
|
52
52
|
|
53
53
|
<ul>
|
54
54
|
<li class="<%= nav_class("admin/users") %>">
|
55
|
-
<%= link_to raw("<i class=\"
|
55
|
+
<%= link_to raw("<i class=\"fa-user\"></i> <span class='title'>Manage Users</span>"), usman.users_url %>
|
56
|
+
</li>
|
57
|
+
<li class="<%= nav_class("admin/registrations") %>">
|
58
|
+
<%= link_to raw("<i class=\"fa-mobile\"></i> <span class='title'>Manage Registrations</span>"), usman.registrations_url %>
|
56
59
|
</li>
|
57
60
|
</ul>
|
58
61
|
</li>
|
@@ -88,6 +91,10 @@
|
|
88
91
|
<%= link_to raw("<i class=\"linecons-diamond\"></i> <span class='title'>Manage Features</span>"), usman.features_url %>
|
89
92
|
</li>
|
90
93
|
|
94
|
+
<li class="">
|
95
|
+
<%= link_to raw("<i class=\"linecons-graduation-cap\"></i> <span class='title'>Manage Roles</span>"), usman.roles_url %>
|
96
|
+
</li>
|
97
|
+
|
91
98
|
<li class="<%= nav_class("admin/users") %>">
|
92
99
|
<%= link_to raw("<i class=\"linecons-lock\"></i> <span class='title'>Manage Permissions</span>"), usman.permissions_url %>
|
93
100
|
</li>
|
@@ -10,6 +10,16 @@
|
|
10
10
|
text: "Users",
|
11
11
|
icon_class: "fa-user",
|
12
12
|
url: usman.users_url
|
13
|
+
},
|
14
|
+
registrations: {
|
15
|
+
counts: {
|
16
|
+
total: Registration.count,
|
17
|
+
pending: Registration.pending.count,
|
18
|
+
verified: Registration.verified.count
|
19
|
+
},
|
20
|
+
text: "Registrations",
|
21
|
+
icon_class: "fa-mobile",
|
22
|
+
url: usman.registrations_url
|
13
23
|
}
|
14
24
|
}
|
15
25
|
%>
|
@@ -116,3 +126,12 @@
|
|
116
126
|
|
117
127
|
</div>
|
118
128
|
<% end %>
|
129
|
+
|
130
|
+
|
131
|
+
<div class="dx-warning">
|
132
|
+
<div>
|
133
|
+
<h2>Usman - API Documentation</h2>
|
134
|
+
<p>All APIs are documented with all cases and examples.</p>
|
135
|
+
<a class="btn btn-success" href="/docs/api/v1/register" target="_blank">Go to the API Documentation</a>
|
136
|
+
</div>
|
137
|
+
</div>
|
@@ -2,11 +2,12 @@
|
|
2
2
|
<table class="table table-hover members-table middle-align">
|
3
3
|
<thead>
|
4
4
|
<tr>
|
5
|
-
<th style="text-align: center;width:
|
5
|
+
<th style="text-align: center;width:5%;">#</th>
|
6
6
|
<th style="text-align: left;">User</th>
|
7
|
-
<th style="text-align: left;width:
|
8
|
-
<th style="text-align: left;width:
|
9
|
-
<th
|
7
|
+
<th style="text-align: left;width:15%;">Mobile</th>
|
8
|
+
<th style="text-align: left;width:15%;">Location</th>
|
9
|
+
<th>Status</th>
|
10
|
+
<th style="text-align: center;width:15%;">Actions</th>
|
10
11
|
</tr>
|
11
12
|
</thead>
|
12
13
|
|
@@ -41,8 +42,23 @@
|
|
41
42
|
<span class="ml-5 mt-5 label label-default">Pending</span>
|
42
43
|
<% elsif registration.verified? %>
|
43
44
|
<span class="ml-5 mt-5 label label-success">Verified</span>
|
45
|
+
<% elsif registration.suspended? %>
|
46
|
+
<span class="ml-5 mt-5 label label-danger">Suspended</span>
|
44
47
|
<% end %>
|
45
48
|
</td>
|
49
|
+
|
50
|
+
<td class="action-links" style="width:15%">
|
51
|
+
|
52
|
+
<!-- Mark as Pending -->
|
53
|
+
<%= link_to raw("<i class=\"fa fa-circle mr-5\"></i> Mark as Pending"), update_status_registration_path(:id =>registration.id, :status =>'pending'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1" unless registration.pending? %>
|
54
|
+
|
55
|
+
<!-- Verify -->
|
56
|
+
<%= link_to raw("<i class=\"fa fa-circle-o mr-5\"></i> Verify"), update_status_registration_path(:id =>registration.id, :status =>'verified'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1" unless registration.verified? %>
|
57
|
+
|
58
|
+
<!-- Suspend -->
|
59
|
+
<%= link_to raw("<i class=\"fa fa-edit mr-5\"></i> Suspend"), update_status_registration_path(:id =>registration.id, :status =>'suspended'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1" unless registration.suspended? %>
|
60
|
+
|
61
|
+
</td>
|
46
62
|
|
47
63
|
<!-- <td class="action-links" style="width:10%">
|
48
64
|
<%#= link_to raw("<i class=\"linecons-pencil\"></i> Edit Registration"), edit_link, :remote=>true, class: "edit" if @current_user.super_admin? and registration.can_be_edited? %>
|
@@ -1,8 +1,5 @@
|
|
1
|
-
<% edit_link = edit_registration_path(id: registration.id) %>
|
2
|
-
<% delete_link = registration_path(id: registration.id) %>
|
3
|
-
|
4
1
|
<tr id="tr_registration_<%= registration.id %>">
|
5
|
-
|
2
|
+
|
6
3
|
<th scope="row" style="text-align: center;">
|
7
4
|
<% if i < 0 %>
|
8
5
|
<i class="fa fa-check text-success"></i>
|
@@ -11,14 +8,43 @@
|
|
11
8
|
<% end %>
|
12
9
|
</th>
|
13
10
|
|
14
|
-
|
11
|
+
<% if registration.user %>
|
12
|
+
<td class="registration-name"><%= link_to registration.user.display_name, registration_path(registration), remote: true %></td>
|
13
|
+
<% else %>
|
14
|
+
<td class="registration-name"><%= link_to registration.display_name, registration_path(registration), remote: true %></td>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<td class="registration-name"><%= link_to registration.display_name, registration_path(registration), remote: true %></td>
|
18
|
+
|
19
|
+
<td class="registration-name"><%= link_to registration.display_location, registration_path(registration), remote: true %></td>
|
20
|
+
|
21
|
+
<td>
|
22
|
+
<% if registration.pending? %>
|
23
|
+
<span class="ml-5 mt-5 label label-default">Pending</span>
|
24
|
+
<% elsif registration.verified? %>
|
25
|
+
<span class="ml-5 mt-5 label label-success">Verified</span>
|
26
|
+
<% elsif registration.suspended? %>
|
27
|
+
<span class="ml-5 mt-5 label label-danger">Suspended</span>
|
28
|
+
<% end %>
|
29
|
+
</td>
|
15
30
|
|
16
|
-
<td class="action-links" style="width:
|
31
|
+
<td class="action-links" style="width:15%">
|
17
32
|
|
18
|
-
|
33
|
+
<!-- Mark as Pending -->
|
34
|
+
<%= link_to raw("<i class=\"fa fa-circle mr-5\"></i> Mark as Pending"), update_status_registration_path(:id =>registration.id, :status =>'pending'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1" unless registration.pending? %>
|
35
|
+
|
36
|
+
<!-- Verify -->
|
37
|
+
<%= link_to raw("<i class=\"fa fa-circle-o mr-5\"></i> Verify"), update_status_registration_path(:id =>registration.id, :status =>'verified'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1" unless registration.verified? %>
|
19
38
|
|
20
|
-
|
39
|
+
<!-- Suspend -->
|
40
|
+
<%= link_to raw("<i class=\"fa fa-edit mr-5\"></i> Suspend"), update_status_registration_path(:id =>registration.id, :status =>'suspended'), :method =>'PUT', :remote=>true, role: "menuitem", tabindex: "-1" unless registration.suspended? %>
|
21
41
|
|
22
42
|
</td>
|
43
|
+
|
44
|
+
<!-- <td class="action-links" style="width:10%">
|
45
|
+
<%#= link_to raw("<i class=\"linecons-pencil\"></i> Edit Registration"), edit_link, :remote=>true, class: "edit" if @current_user.super_admin? and registration.can_be_edited? %>
|
46
|
+
|
47
|
+
<%#= link_to raw("<i class=\"linecons-trash\"></i> Delete"), delete_link, method: :delete, registration: "menuitem", tabindex: "-1", data: { confirm: 'Are you sure?' }, :remote=>true, class: "delete" if @current_user.super_admin? and registration.can_be_deleted? %>
|
48
|
+
</td> -->
|
23
49
|
|
24
50
|
</tr>
|
@@ -5,7 +5,17 @@
|
|
5
5
|
|
6
6
|
<div class="row">
|
7
7
|
|
8
|
-
|
8
|
+
<% if @user %>
|
9
|
+
<div class="col-md-3 col-sm-6 col-xs-6" style="border-right:1px solid #f1f1f1;">
|
10
|
+
<%= edit_image(@user,
|
11
|
+
"profile_picture.image.large.url",
|
12
|
+
upload_image_link(@user, :profile_picture, nil ),
|
13
|
+
remove_image_link(@user, :profile_picture, nil ),
|
14
|
+
image_options: {assoc_name: :profile_picture }) %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<div class="col-md-9 col-sm-6 col-xs-6" style="border-right:1px solid #f1f1f1;">
|
9
19
|
|
10
20
|
<div class="visible-sm visible-xs mt-50"></div>
|
11
21
|
|
@@ -11,7 +11,7 @@ en:
|
|
11
11
|
message: "Invalid Username/Email or password."
|
12
12
|
user_is_pending:
|
13
13
|
heading: "Account Pending"
|
14
|
-
message: "Your account is not yet approved, please contact administrator to activate your account"
|
14
|
+
message: "Your account is not yet to be approved, please contact administrator to activate your account"
|
15
15
|
user_is_suspended:
|
16
16
|
heading: "Account Suspended"
|
17
17
|
message: "Your account is suspended, please contact administrator"
|
@@ -21,5 +21,8 @@ en:
|
|
21
21
|
logged_out:
|
22
22
|
heading: "Signed Out"
|
23
23
|
message: "You have successfully signed out"
|
24
|
+
login_required:
|
25
|
+
heading: "Login Required"
|
26
|
+
message: "You need to login to access this page."
|
24
27
|
masquerade: "لقد سجلت الدخول بنجاح - %{user}"
|
25
28
|
sign_in_back: "You have successfully signed in back as %{user}"
|
data/config/routes.rb
CHANGED
@@ -18,6 +18,9 @@ Usman::Engine.routes.draw do
|
|
18
18
|
|
19
19
|
resources :registrations, only: [:index, :show] do
|
20
20
|
resources :devices, :controller => "registration_devices", only: [:index, :show]
|
21
|
+
member do
|
22
|
+
put :update_status, as: :update_status
|
23
|
+
end
|
21
24
|
end
|
22
25
|
|
23
26
|
resources :users do
|
data/lib/usman/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: usman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kpvarma
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|