dq_admin 0.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.
- checksums.yaml +7 -0
- data/.gitignore +52 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +173 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +36 -0
- data/app/assets/config/dq_admin_manifest.js +2 -0
- data/app/assets/images/dq_admin/.keep +0 -0
- data/app/assets/javascripts/dq_admin/application.js +14 -0
- data/app/assets/javascripts/dq_admin/dashboard.js +2 -0
- data/app/assets/javascripts/dq_admin/fields.js +2 -0
- data/app/assets/javascripts/dq_admin/products.js +2 -0
- data/app/assets/javascripts/dq_admin/users.js +2 -0
- data/app/assets/stylesheets/dq_admin/application.css +48 -0
- data/app/assets/stylesheets/dq_admin/dashboard.css +4 -0
- data/app/assets/stylesheets/dq_admin/fields.css +4 -0
- data/app/assets/stylesheets/dq_admin/products.css +4 -0
- data/app/assets/stylesheets/dq_admin/users.css +4 -0
- data/app/controllers/dq_admin/application_controller.rb +19 -0
- data/app/controllers/dq_admin/dashboard_controller.rb +6 -0
- data/app/controllers/dq_admin/fields_controller.rb +6 -0
- data/app/controllers/dq_admin/products_controller.rb +31 -0
- data/app/controllers/dq_admin/users_controller.rb +58 -0
- data/app/helpers/dq_admin/application_helper.rb +12 -0
- data/app/helpers/dq_admin/dashboard_helper.rb +4 -0
- data/app/helpers/dq_admin/fields_helper.rb +4 -0
- data/app/helpers/dq_admin/products_helper.rb +4 -0
- data/app/helpers/dq_admin/users_helper.rb +4 -0
- data/app/jobs/dq_admin/application_job.rb +4 -0
- data/app/mailers/dq_admin/application_mailer.rb +6 -0
- data/app/models/dq_admin/application_record.rb +5 -0
- data/app/models/dq_admin/article.rb +4 -0
- data/app/models/dq_admin/field.rb +13 -0
- data/app/models/dq_admin/product.rb +4 -0
- data/app/models/dq_admin/setting.rb +9 -0
- data/app/models/dq_admin/slide.rb +4 -0
- data/app/models/dq_admin/user.rb +30 -0
- data/app/services/dq_admin/field_service.rb +50 -0
- data/app/views/devise/confirmations/new.html.erb +16 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/app/views/devise/mailer/password_change.html.erb +3 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +25 -0
- data/app/views/devise/passwords/new.html.erb +16 -0
- data/app/views/devise/registrations/edit.html.erb +43 -0
- data/app/views/devise/registrations/new.html.erb +29 -0
- data/app/views/devise/sessions/new.html.erb +35 -0
- data/app/views/devise/shared/_links.html.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +16 -0
- data/app/views/dq_admin/dashboard/index.html.erb +9 -0
- data/app/views/dq_admin/products/edit.html.erb +0 -0
- data/app/views/dq_admin/products/index.html.erb +54 -0
- data/app/views/dq_admin/products/new.html.erb +0 -0
- data/app/views/dq_admin/shared/_slidebar.html.erb +0 -0
- data/app/views/dq_admin/users/_form.html.erb +0 -0
- data/app/views/dq_admin/users/edit.html.erb +37 -0
- data/app/views/dq_admin/users/index.html.erb +53 -0
- data/app/views/dq_admin/users/new.html.erb +37 -0
- data/app/views/kaminari/_first_page.html.erb +3 -0
- data/app/views/kaminari/_gap.html.erb +3 -0
- data/app/views/kaminari/_last_page.html.erb +3 -0
- data/app/views/kaminari/_next_page.html.erb +3 -0
- data/app/views/kaminari/_page.html.erb +9 -0
- data/app/views/kaminari/_paginator.html.erb +15 -0
- data/app/views/kaminari/_prev_page.html.erb +3 -0
- data/app/views/layouts/dq_admin/application.html.erb +93 -0
- data/bin/rails +14 -0
- data/config/initializers/devise.rb +282 -0
- data/config/initializers/user.rb +1 -0
- data/config/locales/devise.en.yml +64 -0
- data/config/routes.rb +13 -0
- data/db/migrate/20180312020826_devise_create_dq_admin_users.rb +44 -0
- data/db/migrate/20180313060828_create_dq_admin_fields.rb +14 -0
- data/db/migrate/20180313125449_rename_config_to_option.rb +5 -0
- data/db/migrate/20180314235103_create_dq_admin_settings.rb +9 -0
- data/db/migrate/20180318070651_create_dq_admin_products.rb +13 -0
- data/db/migrate/20180318070806_create_dq_admin_slides.rb +11 -0
- data/db/migrate/20180318071018_create_dq_admin_articles.rb +12 -0
- data/db/migrate/20180318071514_add_username_to_users.rb +5 -0
- data/dq_admin.gemspec +33 -0
- data/lib/dq_admin/engine.rb +5 -0
- data/lib/dq_admin/version.rb +3 -0
- data/lib/dq_admin.rb +7 -0
- data/lib/tasks/dq_admin_tasks.rake +6 -0
- data/test/controllers/dq_admin/dashboard_controller_test.rb +11 -0
- data/test/controllers/dq_admin/fields_controller_test.rb +11 -0
- data/test/controllers/dq_admin/products_controller_test.rb +11 -0
- data/test/controllers/dq_admin/users_controller_test.rb +11 -0
- data/test/dq_admin_test.rb +7 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +5 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/javascripts/cable.js +13 -0
- data/test/dummy/app/assets/javascripts/channels/.keep +0 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/channels/application_cable/channel.rb +4 -0
- data/test/dummy/app/channels/application_cable/connection.rb +4 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/application_record.rb +3 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +38 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/bin/yarn +11 -0
- data/test/dummy/config/application.rb +18 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +54 -0
- data/test/dummy/config/environments/production.rb +91 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/fields.json +20 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/test/dummy/config/initializers/assets.rb +14 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +33 -0
- data/test/dummy/config/puma.rb +56 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/config/secrets.yml +32 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/db/schema.rb +77 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/package.json +5 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/test/dummy/public/apple-touch-icon.png +0 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/fixtures/dq_admin/articles.yml +13 -0
- data/test/fixtures/dq_admin/fields.yml +17 -0
- data/test/fixtures/dq_admin/products.yml +15 -0
- data/test/fixtures/dq_admin/settings.yml +7 -0
- data/test/fixtures/dq_admin/slides.yml +11 -0
- data/test/fixtures/dq_admin/users.yml +11 -0
- data/test/integration/navigation_test.rb +8 -0
- data/test/models/dq_admin/article_test.rb +9 -0
- data/test/models/dq_admin/field_test.rb +9 -0
- data/test/models/dq_admin/product_test.rb +9 -0
- data/test/models/dq_admin/setting_test.rb +9 -0
- data/test/models/dq_admin/slide_test.rb +9 -0
- data/test/models/dq_admin/user_test.rb +9 -0
- data/test/test_helper.rb +17 -0
- metadata +410 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module DqAdmin
|
|
2
|
+
class User < ApplicationRecord
|
|
3
|
+
|
|
4
|
+
DEFAULT_USER_EMAIL = 'admin@dq.com'
|
|
5
|
+
|
|
6
|
+
# Include default devise modules. Others available are:
|
|
7
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
|
8
|
+
devise :database_authenticatable,
|
|
9
|
+
:recoverable,
|
|
10
|
+
:rememberable,
|
|
11
|
+
:trackable,
|
|
12
|
+
:validatable
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def self.populate
|
|
16
|
+
if User.count == 0
|
|
17
|
+
password = SecureRandom.hex
|
|
18
|
+
User.create(email: User::DEFAULT_USER_EMAIL, username: 'root', password: password, password_confirmation: password)
|
|
19
|
+
Rails.logger.info "[DQ] root user email: #{DEFAULT_USER_EMAIL} password: #{password}"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.generate_test_users
|
|
24
|
+
100.times do |i|
|
|
25
|
+
name = rand(36**10).to_s(36)
|
|
26
|
+
User.create(email: "#{name}@sap.com", username: name, password: 'password', password_confirmation: 'password')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module DqAdmin
|
|
2
|
+
class FieldService
|
|
3
|
+
def self.config
|
|
4
|
+
@@config ||= self.load
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def self.load
|
|
8
|
+
File.open(Rails.root + "config/fields.json") do |file|
|
|
9
|
+
@@config = JSON.parse(file.read)
|
|
10
|
+
end
|
|
11
|
+
rescue => e
|
|
12
|
+
Rails.logger.info e.message
|
|
13
|
+
throw e if Rails.env.development?
|
|
14
|
+
[]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.render(group, key, lang: I18n.locale.to_s)
|
|
18
|
+
raise "key is required for render field" if key.blank?
|
|
19
|
+
raise "group is required for render field" if group.blank?
|
|
20
|
+
raise "lang is required for render field" if lang.blank?
|
|
21
|
+
|
|
22
|
+
field_config = config.find {|item| item['key'] == key && item['group'] == group}
|
|
23
|
+
field = DynamicField.find_by(key: key, lang: lang, group: group)
|
|
24
|
+
|
|
25
|
+
if field.blank?
|
|
26
|
+
if block_given?
|
|
27
|
+
yield.html_safe
|
|
28
|
+
end
|
|
29
|
+
return nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
case field_config['type']
|
|
33
|
+
when Field::TEXTAREA
|
|
34
|
+
field.data.html_safe
|
|
35
|
+
when Field::INPUT
|
|
36
|
+
field.data
|
|
37
|
+
when Field::SLIDE
|
|
38
|
+
else
|
|
39
|
+
nil
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
rescue => e
|
|
43
|
+
Rails.logger.info e.message
|
|
44
|
+
if Rails.env.development?
|
|
45
|
+
raise e
|
|
46
|
+
end
|
|
47
|
+
nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<h2>Resend confirmation instructions</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div class="field">
|
|
7
|
+
<%= f.label :email %><br />
|
|
8
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email", value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div class="actions">
|
|
12
|
+
<%= f.submit "Resend confirmation instructions" %>
|
|
13
|
+
</div>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
<%= render "devise/shared/links" %>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<p>Hello <%= @email %>!</p>
|
|
2
|
+
|
|
3
|
+
<% if @resource.try(:unconfirmed_email?) %>
|
|
4
|
+
<p>We're contacting you to notify you that your email is being changed to <%= @resource.unconfirmed_email %>.</p>
|
|
5
|
+
<% else %>
|
|
6
|
+
<p>We're contacting you to notify you that your email has been changed to <%= @resource.email %>.</p>
|
|
7
|
+
<% end %>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
|
2
|
+
|
|
3
|
+
<p>Someone has requested a link to change your password. You can do this through the link below.</p>
|
|
4
|
+
|
|
5
|
+
<p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>
|
|
6
|
+
|
|
7
|
+
<p>If you didn't request this, please ignore this email.</p>
|
|
8
|
+
<p>Your password won't change until you access the link above and create a new one.</p>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
|
2
|
+
|
|
3
|
+
<p>Your account has been locked due to an excessive number of unsuccessful sign in attempts.</p>
|
|
4
|
+
|
|
5
|
+
<p>Click the link below to unlock your account:</p>
|
|
6
|
+
|
|
7
|
+
<p><%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %></p>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<h2>Change your password</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
<%= f.hidden_field :reset_password_token %>
|
|
6
|
+
|
|
7
|
+
<div class="field">
|
|
8
|
+
<%= f.label :password, "New password" %><br />
|
|
9
|
+
<% if @minimum_password_length %>
|
|
10
|
+
<em>(<%= @minimum_password_length %> characters minimum)</em><br />
|
|
11
|
+
<% end %>
|
|
12
|
+
<%= f.password_field :password, autofocus: true, autocomplete: "off" %>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div class="field">
|
|
16
|
+
<%= f.label :password_confirmation, "Confirm new password" %><br />
|
|
17
|
+
<%= f.password_field :password_confirmation, autocomplete: "off" %>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div class="actions">
|
|
21
|
+
<%= f.submit "Change my password" %>
|
|
22
|
+
</div>
|
|
23
|
+
<% end %>
|
|
24
|
+
|
|
25
|
+
<%= render "devise/shared/links" %>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<h2>Forgot your password?</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div class="field">
|
|
7
|
+
<%= f.label :email %><br />
|
|
8
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div class="actions">
|
|
12
|
+
<%= f.submit "Send me reset password instructions" %>
|
|
13
|
+
</div>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
<%= render "devise/shared/links" %>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<h2>Edit <%= resource_name.to_s.humanize %></h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div class="field">
|
|
7
|
+
<%= f.label :email %><br />
|
|
8
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
|
|
12
|
+
<div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
|
|
13
|
+
<% end %>
|
|
14
|
+
|
|
15
|
+
<div class="field">
|
|
16
|
+
<%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
|
|
17
|
+
<%= f.password_field :password, autocomplete: "off" %>
|
|
18
|
+
<% if @minimum_password_length %>
|
|
19
|
+
<br />
|
|
20
|
+
<em><%= @minimum_password_length %> characters minimum</em>
|
|
21
|
+
<% end %>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="field">
|
|
25
|
+
<%= f.label :password_confirmation %><br />
|
|
26
|
+
<%= f.password_field :password_confirmation, autocomplete: "off" %>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="field">
|
|
30
|
+
<%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
|
|
31
|
+
<%= f.password_field :current_password, autocomplete: "off" %>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<div class="actions">
|
|
35
|
+
<%= f.submit "Update" %>
|
|
36
|
+
</div>
|
|
37
|
+
<% end %>
|
|
38
|
+
|
|
39
|
+
<h3>Cancel my account</h3>
|
|
40
|
+
|
|
41
|
+
<p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p>
|
|
42
|
+
|
|
43
|
+
<%= link_to "Back", :back %>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<h2>Sign up</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div class="field">
|
|
7
|
+
<%= f.label :email %><br />
|
|
8
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div class="field">
|
|
12
|
+
<%= f.label :password %>
|
|
13
|
+
<% if @minimum_password_length %>
|
|
14
|
+
<em>(<%= @minimum_password_length %> characters minimum)</em>
|
|
15
|
+
<% end %><br />
|
|
16
|
+
<%= f.password_field :password, autocomplete: "off" %>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div class="field">
|
|
20
|
+
<%= f.label :password_confirmation %><br />
|
|
21
|
+
<%= f.password_field :password_confirmation, autocomplete: "off" %>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="actions">
|
|
25
|
+
<%= f.submit "Sign up" %>
|
|
26
|
+
</div>
|
|
27
|
+
<% end %>
|
|
28
|
+
|
|
29
|
+
<%= render "devise/shared/links" %>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<div class="login-box">
|
|
2
|
+
<div class="login-logo">
|
|
3
|
+
<a href="/">Admin</a>
|
|
4
|
+
</div>
|
|
5
|
+
<div class="login-box-body">
|
|
6
|
+
<p class="login-box-msg">Sign in to start your session</p>
|
|
7
|
+
|
|
8
|
+
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
|
|
9
|
+
|
|
10
|
+
<div class="form-group has-feedback">
|
|
11
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email", class: "form-control" %>
|
|
12
|
+
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div class="form-group has-feedback">
|
|
16
|
+
<%= f.password_field :password, autocomplete: "off", class: "form-control" %>
|
|
17
|
+
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<% if devise_mapping.rememberable? -%>
|
|
21
|
+
<div class="form-group has-feedback">
|
|
22
|
+
<%= f.check_box :remember_me %>
|
|
23
|
+
<%= f.label :remember_me, style: "font-weight: normal;" %>
|
|
24
|
+
</div>
|
|
25
|
+
<% end -%>
|
|
26
|
+
|
|
27
|
+
<div class="row">
|
|
28
|
+
<div class="col-xs-4">
|
|
29
|
+
<%= f.submit "Sign in", class: "btn btn-primary btn-block btn-flat" %>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
<% end %>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<%- if controller_name != 'sessions' %>
|
|
2
|
+
<%= link_to "Log in", new_session_path(resource_name) %><br />
|
|
3
|
+
<% end -%>
|
|
4
|
+
|
|
5
|
+
<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
|
|
6
|
+
<%= link_to "Sign up", new_registration_path(resource_name) %><br />
|
|
7
|
+
<% end -%>
|
|
8
|
+
|
|
9
|
+
<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
|
|
10
|
+
<%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
|
|
11
|
+
<% end -%>
|
|
12
|
+
|
|
13
|
+
<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
|
|
14
|
+
<%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
|
|
15
|
+
<% end -%>
|
|
16
|
+
|
|
17
|
+
<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
|
|
18
|
+
<%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
|
|
19
|
+
<% end -%>
|
|
20
|
+
|
|
21
|
+
<%- if devise_mapping.omniauthable? %>
|
|
22
|
+
<%- resource_class.omniauth_providers.each do |provider| %>
|
|
23
|
+
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br />
|
|
24
|
+
<% end -%>
|
|
25
|
+
<% end -%>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<h2>Resend unlock instructions</h2>
|
|
2
|
+
|
|
3
|
+
<%= form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %>
|
|
4
|
+
<%= devise_error_messages! %>
|
|
5
|
+
|
|
6
|
+
<div class="field">
|
|
7
|
+
<%= f.label :email %><br />
|
|
8
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div class="actions">
|
|
12
|
+
<%= f.submit "Resend unlock instructions" %>
|
|
13
|
+
</div>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
<%= render "devise/shared/links" %>
|
|
File without changes
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<section class="content-header">
|
|
2
|
+
<h1>
|
|
3
|
+
Products
|
|
4
|
+
</h1>
|
|
5
|
+
<ol class="breadcrumb">
|
|
6
|
+
<li><a href="/"><i class="fa fa-dashboard"></i> Home</a></li>
|
|
7
|
+
<li class="active">Products</li>
|
|
8
|
+
</ol>
|
|
9
|
+
<div class="content-action">
|
|
10
|
+
<%= link_to "Create Product", new_product_path, class: "btn btn-primary" %>
|
|
11
|
+
</div>
|
|
12
|
+
</section>
|
|
13
|
+
|
|
14
|
+
<section class="body clearfix">
|
|
15
|
+
<div class="col-md-12">
|
|
16
|
+
<div class="box">
|
|
17
|
+
<div class="box-header">
|
|
18
|
+
<div class="box-tools">
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div class="box-body no-padding list-body">
|
|
23
|
+
<table class="table">
|
|
24
|
+
<tbody>
|
|
25
|
+
<tr>
|
|
26
|
+
<th style="width: 20px">ID</th>
|
|
27
|
+
<th>Name</th>
|
|
28
|
+
<th>Price</th>
|
|
29
|
+
<th>Buy</th>
|
|
30
|
+
<th style="width: 120px">Actions</th>
|
|
31
|
+
</tr>
|
|
32
|
+
<% @products.each do |p| %>
|
|
33
|
+
<tr>
|
|
34
|
+
<td><%= p.id %></td>
|
|
35
|
+
<td><%= p.name %></td>
|
|
36
|
+
<td><%= p.price %></td>
|
|
37
|
+
<td><%= p.buy_link %></td>
|
|
38
|
+
<td class="flex-center list-actions">
|
|
39
|
+
<%= link_to "detail", product_path(p) %>
|
|
40
|
+
<%= link_to "edit", edit_product_path(p) %>
|
|
41
|
+
<%= link_to "destroy", product_path(p), method: :delete %>
|
|
42
|
+
</td>
|
|
43
|
+
</tr>
|
|
44
|
+
<% end %>
|
|
45
|
+
</tbody>
|
|
46
|
+
</table>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<div class="list-nav">
|
|
50
|
+
<%= paginate @products %>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</section>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<section class="content-header">
|
|
2
|
+
<h1>
|
|
3
|
+
Edit Admin User
|
|
4
|
+
</h1>
|
|
5
|
+
<ol class="breadcrumb">
|
|
6
|
+
<li><a href="/"><i class="fa fa-dashboard"></i> Home</a></li>
|
|
7
|
+
<li><a href="#">Tables</a></li>
|
|
8
|
+
<li class="active">Simple</li>
|
|
9
|
+
</ol>
|
|
10
|
+
</section>
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<section class="content col-md-4">
|
|
14
|
+
<%= form_tag(user_path(@user), method: :put) do -%>
|
|
15
|
+
<div class="form-group">
|
|
16
|
+
<label for="title">Email</label>
|
|
17
|
+
<input type="text" class="form-control" id="title" name="users[email]" placeholder="Enter email" value=<%= @user.email %>>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div class="form-group">
|
|
21
|
+
<label for="title">Username</label>
|
|
22
|
+
<input type="text" class="form-control" id="title" name="users[username]" placeholder="Enter email" value=<%= @user.username %>>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="form-group">
|
|
26
|
+
<label for="password">Password</label>
|
|
27
|
+
<input type="password" class="form-control" id="password" name="users[password]" placeholder="Enter password">
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<div class="form-group">
|
|
31
|
+
<label for="password_confirmation">Password Confirmation</label>
|
|
32
|
+
<input type="password" class="form-control" id="password_confirmation" name="users[password_confirmation]" placeholder="Repeat password">
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<input type="submit" class="btn btn-primary" id="article-save-btn" value="Save">
|
|
36
|
+
<% end %>
|
|
37
|
+
</section>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<section class="content-header">
|
|
2
|
+
<h1>
|
|
3
|
+
Admin Users
|
|
4
|
+
</h1>
|
|
5
|
+
<ol class="breadcrumb">
|
|
6
|
+
<li><a href="/"><i class="fa fa-dashboard"></i> Home</a></li>
|
|
7
|
+
<li class="active">Admins</li>
|
|
8
|
+
</ol>
|
|
9
|
+
<div class="content-action">
|
|
10
|
+
<%= link_to "Create Admin", new_user_path, class: "btn btn-primary" %>
|
|
11
|
+
</div>
|
|
12
|
+
</section>
|
|
13
|
+
|
|
14
|
+
<section class="body clearfix">
|
|
15
|
+
<div class="col-md-12">
|
|
16
|
+
<div class="box">
|
|
17
|
+
<div class="box-header">
|
|
18
|
+
<div class="box-tools">
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div class="box-body no-padding list-body">
|
|
23
|
+
<table class="table">
|
|
24
|
+
<tbody>
|
|
25
|
+
<tr>
|
|
26
|
+
<th style="width: 20px">ID</th>
|
|
27
|
+
<th>Email</th>
|
|
28
|
+
<th>Username</th>
|
|
29
|
+
<th>Last Login</th>
|
|
30
|
+
<th style="width: 120px">Actions</th>
|
|
31
|
+
</tr>
|
|
32
|
+
<% @users.each do |u| %>
|
|
33
|
+
<tr>
|
|
34
|
+
<td><%= u.id %></td>
|
|
35
|
+
<td><%= u.email%></td>
|
|
36
|
+
<td><%= u.username%></td>
|
|
37
|
+
<td><%= u.current_sign_in_at %></td>
|
|
38
|
+
<td class="flex-center list-actions">
|
|
39
|
+
<%= link_to "edit", edit_user_path(u) %>
|
|
40
|
+
<%= link_to "destroy", user_path(u), method: :delete %>
|
|
41
|
+
</td>
|
|
42
|
+
</tr>
|
|
43
|
+
<% end %>
|
|
44
|
+
</tbody>
|
|
45
|
+
</table>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<div class="list-nav">
|
|
49
|
+
<%= paginate @users %>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</section>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<section class="content-header">
|
|
2
|
+
<h1>
|
|
3
|
+
Create Admin Users
|
|
4
|
+
</h1>
|
|
5
|
+
<ol class="breadcrumb">
|
|
6
|
+
<li><a href="/"><i class="fa fa-dashboard"></i> Home</a></li>
|
|
7
|
+
<li><a href="#">Tables</a></li>
|
|
8
|
+
<li class="active">Simple</li>
|
|
9
|
+
</ol>
|
|
10
|
+
</section>
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<section class="content col-md-4">
|
|
14
|
+
<%= form_tag(users_path(@user)) do -%>
|
|
15
|
+
<div class="form-group">
|
|
16
|
+
<label for="title">Email</label>
|
|
17
|
+
<input type="text" class="form-control" id="title" name="users[email]" placeholder="Enter email">
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div class="form-group">
|
|
21
|
+
<label for="title">Username</label>
|
|
22
|
+
<input type="text" class="form-control" id="title" name="users[username]" placeholder="Enter email">
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="form-group">
|
|
26
|
+
<label for="password">Password</label>
|
|
27
|
+
<input type="password" class="form-control" id="password" name="users[password]" placeholder="Enter password">
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<div class="form-group">
|
|
31
|
+
<label for="password_confirmation">Password Confirmation</label>
|
|
32
|
+
<input type="password" class="form-control" id="password_confirmation" name="users[password_confirmation]" placeholder="Repeat password">
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<input type="submit" class="btn btn-primary" id="article-save-btn" value="Save">
|
|
36
|
+
<% end %>
|
|
37
|
+
</section>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<% if page.current? %>
|
|
2
|
+
<li class='active'>
|
|
3
|
+
<%= content_tag :a, page, remote: remote, rel: (page.next? ? 'next' : (page.prev? ? 'prev' : nil)) %>
|
|
4
|
+
</li>
|
|
5
|
+
<% else %>
|
|
6
|
+
<li>
|
|
7
|
+
<%= link_to page, url, remote: remote, rel: (page.next? ? 'next' : (page.prev? ? 'prev' : nil)) %>
|
|
8
|
+
</li>
|
|
9
|
+
<% end %>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<%= paginator.render do -%>
|
|
2
|
+
<ul class="pagination">
|
|
3
|
+
<%= first_page_tag unless current_page.first? %>
|
|
4
|
+
<%= prev_page_tag unless current_page.first? %>
|
|
5
|
+
<% each_page do |page| -%>
|
|
6
|
+
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
|
|
7
|
+
<%= page_tag page %>
|
|
8
|
+
<% elsif !page.was_truncated? -%>
|
|
9
|
+
<%= gap_tag %>
|
|
10
|
+
<% end -%>
|
|
11
|
+
<% end -%>
|
|
12
|
+
<%= next_page_tag unless current_page.last? %>
|
|
13
|
+
<%= last_page_tag unless current_page.last? %>
|
|
14
|
+
</ul>
|
|
15
|
+
<% end -%>
|