forked from saurabh/orbit4-5
orbit store integration
This commit is contained in:
parent
50582cdbd8
commit
5766c6355f
|
@ -0,0 +1,112 @@
|
|||
var StoreManager = function(){
|
||||
var storeArea = $("#store-area"),
|
||||
loadingArea = storeArea.find(".loading-store"),
|
||||
loadingAreaStatus = loadingArea.find(".loading-status"),
|
||||
formArea = storeArea.find(".form-area");
|
||||
|
||||
var initialize = function(){
|
||||
loadingAreaStatus.text("Contacting Ruling Store");
|
||||
setTimeout(step1,1000);
|
||||
}
|
||||
|
||||
var step1 = function(){
|
||||
$.ajax({
|
||||
"type" : "get",
|
||||
"dataType" : "json",
|
||||
"url" : "/admin/store/check_credentials"
|
||||
}).done(function(status){
|
||||
if(status.success == true){
|
||||
loadingAreaStatus.text("Checking permissions");
|
||||
setTimeout(step2,1000);
|
||||
}else if(status.success == false){
|
||||
setTimeout(loadRegisterForm,1000);
|
||||
}
|
||||
}).fail(showError);
|
||||
}
|
||||
|
||||
var step2 = function(){
|
||||
$.ajax({
|
||||
"type" : "get",
|
||||
"dataType" : "json",
|
||||
"url" : "/admin/store/check_permissions"
|
||||
}).done(function(data){
|
||||
if(data.success){
|
||||
loadingAreaStatus.text("Fetching store data")
|
||||
setTimeout(loadTemplateStore,1000);
|
||||
}else if(!data.success){
|
||||
loadingArea.find("img").hide();
|
||||
loadingAreaStatus.text(data.message);
|
||||
if(data.error == "SITE_NOT_CONFIRMED"){
|
||||
loadingArea.find("p").eq(1).html("<a href='#'>Resend Email</a>");
|
||||
}else if(data.error == "SITE_PERMISSION_DENIED"){
|
||||
loadingArea.find("p").eq(1).html("Please contact <a href='http://www.rulingcom.com/'>www.rulingcom.com</a>.");
|
||||
}else{
|
||||
loadingArea.find("p").eq(1).html("Please contact <a href='http://www.rulingcom.com/'>www.rulingcom.com</a>.");
|
||||
}
|
||||
}
|
||||
}).fail(showError);
|
||||
}
|
||||
|
||||
var resendEmail = function(){}
|
||||
|
||||
var loadTemplateStore = function(){
|
||||
$.ajax({
|
||||
"type" : "get",
|
||||
"dataType" : "html",
|
||||
"url" : "/admin/store/template_store"
|
||||
}).done(function(html){
|
||||
storeArea.html(html);
|
||||
}).fail(showError);
|
||||
}
|
||||
|
||||
var loadRegisterForm = function(){
|
||||
loadingAreaStatus.text("Loading registeration form.")
|
||||
$.ajax({
|
||||
"type" : "get",
|
||||
"dataType" : "html",
|
||||
"url" : "/admin/store/register_form"
|
||||
}).done(function(html){
|
||||
loadingArea.hide();
|
||||
formArea.html(html);
|
||||
var form = formArea.find("form");
|
||||
new FormValidator(form);
|
||||
form.on("submit",function(){
|
||||
var email = form.find("#inputEmail").val();
|
||||
if(email){
|
||||
loadingAreaStatus.text("Registering with Orbit Store")
|
||||
formArea.hide();
|
||||
loadingArea.show();
|
||||
$.ajax({
|
||||
"type" : "post",
|
||||
"url" : form.attr("action"),
|
||||
"dataType" : "json",
|
||||
"data" : {"email" : email}
|
||||
}).done(function(data){
|
||||
if(data.success){
|
||||
loadingArea.find("img").hide();
|
||||
loadingAreaStatus.text("Email sent to the address " + email + ". Please verify and come back.");
|
||||
loadingArea.find("p").eq(1).remove();
|
||||
}else{
|
||||
loadingArea.find("img").hide();
|
||||
loadingAreaStatus.text(data.message);
|
||||
loadingArea.find("p").eq(1).html("Please contact <a href='http://www.rulingcom.com/'>www.rulingcom.com</a>.");
|
||||
}
|
||||
}).fail(showError)
|
||||
}
|
||||
return false;
|
||||
})
|
||||
})
|
||||
}
|
||||
var showError = function(){
|
||||
loadingArea.find("img").hide();
|
||||
loadingAreaStatus.text("There was some unknown error.");
|
||||
loadingArea.find("p").eq(1).html("Please try again later or contact <a href='http://www.rulingcom.com/'>www.rulingcom.com</a>.");
|
||||
}
|
||||
|
||||
initialize();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// step 1 -> check connection to store server
|
||||
// step 2 -> check for site confirmation and access permission
|
|
@ -25,8 +25,9 @@ var FormValidator = function(form){
|
|||
nospace : function(value){
|
||||
return (/\s/.test(value) ? false : true);
|
||||
},
|
||||
email : function(){
|
||||
|
||||
email : function(value){
|
||||
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||
return re.test(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
require "uri"
|
||||
require "net/http"
|
||||
class Admin::StoreController < OrbitAdminController
|
||||
layout false
|
||||
before_action :store_url
|
||||
def check_credentials
|
||||
if current_site.store_token.nil?
|
||||
render :json => {"success" => false}.to_json
|
||||
else
|
||||
render :json => {"success" => true}.to_json
|
||||
end
|
||||
end
|
||||
|
||||
def register_form
|
||||
|
||||
end
|
||||
|
||||
def template_store
|
||||
|
||||
end
|
||||
|
||||
def check_permissions
|
||||
params_to_send = {'store_token' => current_site.store_token}
|
||||
uri = URI.parse(@store_url)
|
||||
http = Net::HTTP.new(uri.host,uri.port)
|
||||
request = Net::HTTP::Get.new("/site/permissions")
|
||||
request.body = params_to_send.to_query
|
||||
response = http.request(request)
|
||||
data = JSON.parse(response.body)
|
||||
if !data["success"] && data["error"] == "INVALID_SITE_TOKEN"
|
||||
current_site.store_token = nil
|
||||
current_site.save
|
||||
end
|
||||
render :json => data.to_json
|
||||
end
|
||||
|
||||
def register_site
|
||||
params_to_send = {'site_domain' => request.host_with_port, 'admin_email' => params["email"], "site_token" => current_site.uid}
|
||||
uri = URI.parse(@store_url)
|
||||
http = Net::HTTP.new(uri.host,uri.port)
|
||||
request = Net::HTTP::Post.new("/register/site")
|
||||
request.body = params_to_send.to_query
|
||||
response = http.request(request)
|
||||
data = JSON.parse(response.body)
|
||||
render :json => data.to_json
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
def store_url
|
||||
@store_url = "http://localhost:3000"
|
||||
end
|
||||
end
|
|
@ -29,7 +29,7 @@ class ApplicationController < ActionController::Base
|
|||
if !params[:locale] and !session[:locale]
|
||||
if current_site.enable_language_detection
|
||||
browser_locale = request.env['HTTP_ACCEPT_LANGUAGE'].split(',').first.underscore rescue nil
|
||||
session[:locale] = in_use_locales.include?(browser_locale.to_sym) ? browser_locale : nil
|
||||
session[:locale] = (in_use_locales.include?(browser_locale.to_sym) ? browser_locale : nil) rescue nil
|
||||
elsif current_site.default_locale
|
||||
session[:locale] = current_site.default_locale
|
||||
end
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
class StoreApiController < ApplicationController
|
||||
def confirmation
|
||||
site_token = params[:site_token]
|
||||
store_token = params[:store_token]
|
||||
puts current_site.to_s
|
||||
if current_site.uid.eql?(site_token)
|
||||
current_site.store_token = store_token
|
||||
current_site.save
|
||||
render :json => {"success" => true}.to_json
|
||||
else
|
||||
render :json => {"success" => false}.to_json
|
||||
end
|
||||
end
|
||||
end
|
|
@ -32,8 +32,7 @@ class Site
|
|||
field :search,:type => Hash
|
||||
field :site_settings
|
||||
field :template, type: String
|
||||
field :site_token
|
||||
field :store_confirmation, type: Boolean, default: false
|
||||
field :store_token
|
||||
|
||||
field :month_traffic_cache
|
||||
|
||||
|
@ -42,20 +41,6 @@ class Site
|
|||
mount_uploader :favicon, ImageUploader
|
||||
mount_uploader :mobile_icon, ImageUploader
|
||||
|
||||
def confirm_store(site_token)
|
||||
if self.site_token.eql?(site_token)
|
||||
self.store_confirmation = true
|
||||
self.save
|
||||
end
|
||||
end
|
||||
|
||||
def generate_site_token
|
||||
if self.site_token.nil?
|
||||
self.site_token = SecureRandom.uuid.gsub('-','')
|
||||
self.save
|
||||
end
|
||||
end
|
||||
|
||||
def register_site(url,university,department,email,country)
|
||||
api_key = STORE_CONFIG[:store_settings]["api_key"]
|
||||
self.generate_site_token
|
||||
|
|
|
@ -143,7 +143,7 @@
|
|||
</table>
|
||||
</div>
|
||||
<div class="pannel-footer">
|
||||
<button id="apply_change_btn" onclick="apply_change();" class="btn btn-primary btn-small pull-right">Appy Change</button>
|
||||
<button id="apply_change_btn" onclick="apply_change();" class="btn btn-primary btn-small pull-right">Apply Change</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -152,18 +152,7 @@
|
|||
<div class="panel">
|
||||
<div class="panel-heading"><i class="icon-shopping-cart"></i><span class="break"></span><%= t(:template_store) %></div>
|
||||
<div class="pannel-body">
|
||||
|
||||
<table id="mt-list" class="table main-list">
|
||||
<tbody>
|
||||
<tr id="loading">
|
||||
<td>
|
||||
<%= image_tag("preloader.gif", size: "50") %>
|
||||
<span>Loading template store...</span>
|
||||
<td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<%= render "admin/store/templates" %>
|
||||
</div>
|
||||
<div class="pannel-footer">
|
||||
</div>
|
||||
|
@ -176,58 +165,3 @@
|
|||
<div class="form-actions form-fixed pagination-right">
|
||||
<%#= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:upload), upload_package_admin_designs_path, :class => 'btn btn-primary pull-right' %>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
// $.ajax({
|
||||
// url : "<%#= admin_template_store_path %>",
|
||||
// type : "get",
|
||||
// datatType : "html"
|
||||
// }).done(function(data){
|
||||
// $("#loading").addClass('hide');
|
||||
// $("#mt-list").html(data);
|
||||
// bindHandlers();
|
||||
// }).fail(function(){
|
||||
// $("#loading").addClass('hide');
|
||||
// $("#mt-list").html("<tr><td>Error loading template store</td></tr>");
|
||||
// })
|
||||
$(document).on('change', '.design_default', function(){
|
||||
$("#alert_wrap").show();
|
||||
$(".modal-backdrop").show();
|
||||
$(this).attr('value');
|
||||
// console.log($(this).attr('rel') + '/' + $(this).val());
|
||||
$.getScript($(this).attr('rel'),function(){
|
||||
$("#alert_wrap").hide();
|
||||
$(".modal-backdrop").hide();
|
||||
});
|
||||
});
|
||||
|
||||
var bindHandlers = function(){
|
||||
// $("a.download-link").on(clickEvent,function(){
|
||||
// if($(this).attr("disabled") == "disabled")return false;
|
||||
// var el = $(this);
|
||||
// el.removeClass("btn-primary").addClass("btn-info").text("Installing").attr('disabled',"disabled");
|
||||
// $.ajax({
|
||||
// url : "<%#= admin_template_store_download_theme_path %>",
|
||||
// data : el.data(),
|
||||
// dataType : "json",
|
||||
// type : "post"
|
||||
// }).done(function(data){
|
||||
// if(data.success){
|
||||
// el.removeClass('btn-info').addClass('btn-success').text("Installed");
|
||||
// $.ajax({
|
||||
// url: '<%= admin_design_list_path %>',
|
||||
// type: 'get',
|
||||
// dataType: 'html'
|
||||
// })
|
||||
// .done(function(data) {
|
||||
// $("#tbody_designs").html(data);
|
||||
// $(".toggle-check").togglebox();
|
||||
// });
|
||||
// }
|
||||
// }).fail(function(){
|
||||
// el.removeClass('btn-info').addClass('btn-danger').text("Error, please try again.").removeAttr('disabled');
|
||||
// })
|
||||
// })
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
<%= javascript_include_tag "admin/store_manager" %>
|
||||
<%= javascript_include_tag "validator" %>
|
||||
<style type="text/css">
|
||||
.loading-store{
|
||||
width: 320px;
|
||||
margin: 150px auto 0;
|
||||
text-align: center;
|
||||
}
|
||||
.loading-status{
|
||||
font-weight: bold;
|
||||
}
|
||||
.form-area{
|
||||
width: 500px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.controls span{
|
||||
display: inline-block;
|
||||
padding: 5px 0;
|
||||
font-size: 14px;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
</style>
|
||||
<div id="store-area">
|
||||
<div class="loading-store">
|
||||
<%= image_tag("preloader.gif", size: "50") %>
|
||||
<p class="loading-status"></p>
|
||||
<p> Please wait ... </p>
|
||||
</div>
|
||||
<div class="form-area">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
new StoreManager();
|
||||
</script>
|
|
@ -0,0 +1,28 @@
|
|||
<h4 class="text-center">Store Registration Form</h4>
|
||||
<hr />
|
||||
<form id="store_registration_form" action="/admin/store/register_site" method="post" class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label">Site Domain : </label>
|
||||
<div class="controls">
|
||||
<span><%= request.host_with_port %></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="inputEmail">Admin Email : </label>
|
||||
<div class="controls">
|
||||
<input type="text" id="inputEmail" placeholder="Email" name="admin_email" data-fv-validation="required;email;" data-fv-messages="Cannot be empty.;Not valid email.;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">Site Token : </label>
|
||||
<div class="controls">
|
||||
<span><%= current_site.uid %></span>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<input type="submit" class="btn" value="Register" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
|
@ -0,0 +1 @@
|
|||
This is template store.
|
|
@ -26,6 +26,8 @@ Orbit::Application.routes.draw do
|
|||
|
||||
get "/module/:name" => "home#index"
|
||||
get "/module/:name/show" => "home#show"
|
||||
post "/store/confirmation" => "store_api#confirmation"
|
||||
|
||||
# The priority is based upon order of creation: first created -> highest priority.
|
||||
# See how all your routes lay out with "rake routes".
|
||||
|
||||
|
@ -216,6 +218,14 @@ Orbit::Application.routes.draw do
|
|||
get 'module_store/toggle_module' => 'module_store#toggle_module'
|
||||
get 'module_store/restart_server' => 'module_store#restart_server'
|
||||
|
||||
#store routes
|
||||
|
||||
get "/store/check_credentials" => "store#check_credentials"
|
||||
get "/store/register_form" => "store#register_form"
|
||||
post "/store/register_site" => "store#register_site"
|
||||
get "/store/check_permissions" => "store#check_permissions"
|
||||
get "/store/template_store" => "store#template_store"
|
||||
|
||||
|
||||
get "import" => "import#index"
|
||||
get "import/check_url" => "import#check_url"
|
||||
|
|
Loading…
Reference in New Issue