From 07d75f8d53e7f5df3be9a45c105b0e0eee48495d Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Thu, 30 Nov 2017 17:00:26 +0800 Subject: [PATCH] added mechanism to construct pending sites online. --- .../admin/site_panel_controller.rb | 18 +++ app/controllers/site_panel_api_controller.rb | 50 +++++++ app/models/site_construct.rb | 19 +++ app/views/admin/site_panel/_form.html.erb | 129 ++++++++++++++++++ app/views/admin/site_panel/index.html.erb | 6 + config/locales/en.yml | 3 +- config/locales/zh_tw.yml | 3 +- config/routes.rb | 8 ++ lib/client_management/engine.rb | 8 +- 9 files changed, 241 insertions(+), 3 deletions(-) create mode 100644 app/controllers/admin/site_panel_controller.rb create mode 100644 app/controllers/site_panel_api_controller.rb create mode 100644 app/models/site_construct.rb create mode 100644 app/views/admin/site_panel/_form.html.erb create mode 100644 app/views/admin/site_panel/index.html.erb diff --git a/app/controllers/admin/site_panel_controller.rb b/app/controllers/admin/site_panel_controller.rb new file mode 100644 index 0000000..95ede01 --- /dev/null +++ b/app/controllers/admin/site_panel_controller.rb @@ -0,0 +1,18 @@ +class Admin::SitePanelController < OrbitAdminController + def index + @site_construct = SiteConstruct.new + end + + def create + site_construct = SiteConstruct.new(site_construct_params) + site_construct.member_id = current_user.id.to_s + site_construct.save + redirect_to admin_site_panel_path("msg" => "success") + end + + private + + def site_construct_params + params.require(:site_construct).permit! + end +end \ No newline at end of file diff --git a/app/controllers/site_panel_api_controller.rb b/app/controllers/site_panel_api_controller.rb new file mode 100644 index 0000000..04717f8 --- /dev/null +++ b/app/controllers/site_panel_api_controller.rb @@ -0,0 +1,50 @@ +class SitePanelApiController < ApplicationController + def index + ip = request.remote_ip + case ip + when "211.72.229.126" + type = "Pending" + when "211.72.229.122" + type = "Store" + when "127.0.0.1" + type = "Pending" + else + render :text => "Not a valid IP." and return + end + + list = SiteConstruct.where(:server_type => type, :constructed => false) + string = "" + list.each do |entry| + string = string + "#{entry.server_type},#{entry.site_name},#{entry.domain_name},#{entry.port},#{entry.db_name},#{entry.path}\n" + end + render :text => string + end + + def constructed + site_id = params[:site_id] + ip = request.remote_ip + case ip + when "211.72.229.126" + when "211.72.229.122" + when "127.0.0.1" + else + render :text => "Not a valid IP." and return + end + site = SiteConstruct.where(:site_name => site_id, :constructed => false).first rescue nil + if !site.nil? + site.constructed = true + site.save + user = User.find(site.user_id) rescue nil + if !user.nil? + email = Email.new + email.mail_to = user.member_profile.email + email.mail_subject = "#{site.site_name} has been constructed." + email.mail_content = "#{site.site_name} has been constructed successfully.
You may access the site at #{site.domain_name}

For any questions, please contact R&D Team.
Thank you." + email.deliver + end + render :text => "success" + else + render :text => "Site not found. Either it is already constructed or not queued for construction." + end + end +end \ No newline at end of file diff --git a/app/models/site_construct.rb b/app/models/site_construct.rb new file mode 100644 index 0000000..fef75fb --- /dev/null +++ b/app/models/site_construct.rb @@ -0,0 +1,19 @@ +class SiteConstruct + include Mongoid::Document + include Mongoid::Timestamps + + SERVER_TYPES = ["Pending","Store"] + SITE_TYPES = ["School","Gravity"] + + field :server_type + field :site_name + field :domain_name + field :db_name + field :port + field :path + field :site_type + field :school_name + field :user_id + field :constructed, type: Boolean, :default => false + +end \ No newline at end of file diff --git a/app/views/admin/site_panel/_form.html.erb b/app/views/admin/site_panel/_form.html.erb new file mode 100644 index 0000000..7124dd5 --- /dev/null +++ b/app/views/admin/site_panel/_form.html.erb @@ -0,0 +1,129 @@ +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> +<% end %> +<% content_for :page_specific_javascript do %> +<% end %> +<%#= f.error_messages %> +
+ +
+ + + + + + +
+ +
+
+ <%= f.label :server_type ,"Server", :class => "control-label muted" %> +
+ <%= f.select :server_type, SiteConstruct::SERVER_TYPES %> +
+
+ +
+ <%= f.label :site_type ,"Site Type", :class => "control-label muted" %> +
+ <%= f.select :site_type, SiteConstruct::SITE_TYPES, :id => "site_type" %> +
+
+ +
+ <%= f.label :school_name ,"School Name", :class => "control-label muted" %> +
+ <%= f.text_field :school_name, :id => "school_name", :placeholder => "XXXX" %> +
Eg: NCTU
+
+
+ +
+ <%= f.label :site_name ,"Site Name", :class => "control-label muted" %> +
+ <%= f.text_field :site_name, :id => "site_name", :placeholder => "xxx_xxx" %> +
schoolname_deptname eg: nctu_eed
+
+
+ +
+ <%= f.label :domain_name ,"Domain Name", :class => "control-label muted" %> +
+ <%= f.text_field :domain_name, :id => "domain_name" %> +
schoolname-deptname.pending.rulingcom.com eg: nctu-eed.pending.rulingcom.com
+
+
+ +
+ <%= f.label :db_name ,"Database Name", :class => "control-label muted" %> +
+ <%= f.text_field :db_name, :id => "db_name" %> +
schoolname_deptname eg: nctu_eed
+
+
+ +
+ <%= f.label :port ,"Port Number", :class => "control-label muted" %> +
+ <%= f.number_field :port, :min => 1, :id => "port", :value => 80 %> +
+
+ +
+ <%= f.label :path ,"Path", :class => "control-label muted" %> +
+ <%= f.text_field :path, :disabled => true, :id => "path" %> +
+
+
+
+
+ <%= f.submit t('submit'), class: 'btn btn-primary' %> +
+
+
+ \ No newline at end of file diff --git a/app/views/admin/site_panel/index.html.erb b/app/views/admin/site_panel/index.html.erb new file mode 100644 index 0000000..73e004a --- /dev/null +++ b/app/views/admin/site_panel/index.html.erb @@ -0,0 +1,6 @@ +<% if params[:msg] == "success" %> +
Success! Site has been queued for construction. It can take upto 5 - 10 mins. You will be notified on <%= current_user.member_profile.email %> once the site is ready.
+<% end %> +<%= form_for @site_construct, :url => {:action=>"create"}, :html => {:class => 'form-horizontal main-forms'} do |f| %> + <%= render :partial => 'form', :locals => {:f => f} %> +<% end %> \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 32e714e..cb3443a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -52,4 +52,5 @@ en: amount_received: Amount Received amount_pending: Amount Pending receipt_status: Receipt Status - loading_purchases: Loading Purchases \ No newline at end of file + loading_purchases: Loading Purchases + create_site: Create Site \ No newline at end of file diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index d6c52fa..0034787 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -52,4 +52,5 @@ zh_tw: amount_received: Amount Received amount_pending: Amount Pending receipt_status: Receipt Status - loading_purchases: Loading Purchases \ No newline at end of file + loading_purchases: Loading Purchases + create_site: Create Site \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index de5d391..9cf1b3d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -36,6 +36,10 @@ Rails.application.routes.draw do get "contracts" end end + + get "site_panel" => "site_panel#index" + resources :site_panel + end scope :cpanel do @@ -86,5 +90,9 @@ Rails.application.routes.draw do post "loguserin" => "c_panel_sessions#loguserin" end + + get "/xhr/site_panel_api/get_list" => "site_panel_api#index" + get "/xhr/site_panel_api/constructed/:site_id" => "site_panel_api#constructed" + end end diff --git a/lib/client_management/engine.rb b/lib/client_management/engine.rb index ac18fc8..efa6e28 100644 --- a/lib/client_management/engine.rb +++ b/lib/client_management/engine.rb @@ -27,12 +27,18 @@ module ClientManagement :active_for_action=>{'admin/client_managements'=>"completed_requests"}, :available_for => 'users' - context_link 'client_management.contracts', + context_link 'client_management.contracts', :link_path=>"contracts_admin_client_managements_path" , :priority=>1, :active_for_action=>{'admin/client_managements'=>"contracts"}, :available_for => 'users' + context_link 'client_management.create_site', + :link_path=>"admin_site_panel_path" , + :priority=>1, + :active_for_action=>{'admin/site_panel'=>"index"}, + :available_for => 'users' + end end end