forked from saurabh/orbit4-5
finished importing of pages
This commit is contained in:
parent
2a6d9487ae
commit
043673e93e
|
@ -5,7 +5,10 @@ require 'json'
|
||||||
|
|
||||||
class Admin::ImportController < OrbitAdminController
|
class Admin::ImportController < OrbitAdminController
|
||||||
layout "structure"
|
layout "structure"
|
||||||
|
before_filter :get_user
|
||||||
|
|
||||||
|
@@import_stats = {}
|
||||||
|
@@thread = nil
|
||||||
def check_url
|
def check_url
|
||||||
params['url'] = params['url']+"/" if params['url'].last!="/"
|
params['url'] = params['url']+"/" if params['url'].last!="/"
|
||||||
uri = URI.parse(params['url'])
|
uri = URI.parse(params['url'])
|
||||||
|
@ -191,4 +194,140 @@ class Admin::ImportController < OrbitAdminController
|
||||||
|
|
||||||
bulletin.save!
|
bulletin.save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def rss2_pages
|
||||||
|
uri = URI.parse(params['url'])
|
||||||
|
@@thread = Thread.new do
|
||||||
|
http = Net::HTTP.new(uri.host, uri.port)
|
||||||
|
request = Net::HTTP::Get.new(uri.request_uri)
|
||||||
|
response = http.request(request)
|
||||||
|
data = response.body
|
||||||
|
data = JSON.parse(data)
|
||||||
|
pages = data["pages"]
|
||||||
|
@@import_stats["total"] = data["total_pages"]
|
||||||
|
@@import_stats["current_stattus"] = 0
|
||||||
|
pages.each do |page|
|
||||||
|
@@import_stats["current_page"] = page["page_id"]
|
||||||
|
@@import_stats["current_page_name"] = page["title"]["zh_tw"]
|
||||||
|
if Page.where(:rss2_id => page["page_id"]).count == 0
|
||||||
|
page_id = page["page_id"]
|
||||||
|
number = 0
|
||||||
|
while page_present?page_id
|
||||||
|
page_id = page_id + "_" + (number + 1).to_s
|
||||||
end
|
end
|
||||||
|
p = Page.new(:page_id => page_id, :parent_page_id => Page.root.id, :page_type => "page", :url => "/#{page_id}", :module => "page_content", :enabled_for => ["en", "zh_tw"], :menu_enabled_for => ["en", "zh_tw"], :enabled_for_sitemap => ["en","zh_tw"], :name_translations => {"en"=>page["title"]["en"], "zh_tw" => page["title"]["zh_tw"]},:rss2_id => page["page_id"])
|
||||||
|
p.save
|
||||||
|
en = smart_downloader(page["content"]["en"],data["site_url"])
|
||||||
|
zh_tw = smart_downloader(page["content"]["zh_tw"],data["site_url"])
|
||||||
|
page_context = PageContext.new(:content_translations => {"en" => en,"zh_tw" => zh_tw}, :version => 1, :update_user_id => current_user.id, :page_id => p.id)
|
||||||
|
page_context.save
|
||||||
|
else
|
||||||
|
p = Page.find_by(:rss2_id => page["page_id"])
|
||||||
|
page_id = p.page_id
|
||||||
|
end
|
||||||
|
@@import_stats["current_stattus"] = @@import_stats["current_stattus"] + 1
|
||||||
|
if !page["childpages"].blank?
|
||||||
|
childpages = page["childpages"]
|
||||||
|
childpages.each_with_index do |childpage,i|
|
||||||
|
@@import_stats["current_page"] = childpage["page_id"]
|
||||||
|
@@import_stats["current_page_name"] = page["title"]["zh_tw"]
|
||||||
|
if Page.where(:rss2_id => childpage["page_id"]).count == 0
|
||||||
|
p_id = page_id + "_" + i.to_s
|
||||||
|
case childpage["type"]
|
||||||
|
when "page"
|
||||||
|
cp = Page.new(:page_id => p_id, :parent_page_id => p.id, :page_type => "page", :url => "#{p.page_id}/#{p_id}", :module => "page_content", "enabled_for" => ["en", "zh_tw"], :menu_enabled_for => ["en", "zh_tw"], :enabled_for_sitemap => ["en","zh_tw"], :name_translations => {"en"=>childpage["title"]["en"], "zh_tw" => childpage["title"]["zh_tw"]},:rss2_id => childpage["page_id"])
|
||||||
|
cp.save
|
||||||
|
en = smart_downloader(childpage["content"]["en"],data["site_url"])
|
||||||
|
zh_tw = smart_downloader(childpage["content"]["zh_tw"],data["site_url"])
|
||||||
|
page_context = PageContext.new(:content_translations => {"en" => en,"zh_tw" => zh_tw}, :version => 1, :update_user_id => current_user.id, :page_id => cp.id)
|
||||||
|
page_context.save
|
||||||
|
when "exturl"
|
||||||
|
cp = Page.new(:page_id => p_id, :parent_page_id => p.id, :page_type => "link", "url" => "#{p.page_id}/#{p_id}", :enabled_for => ["en", "zh_tw"], :menu_enabled_for => ["en", "zh_tw"], :enabled_for_sitemap => ["en","zh_tw"], :name_translations => {"en"=>childpage["title"]["en"], "zh_tw" => childpage["title"]["zh_tw"]}, :external_url_translations => {"en" => childpage["url"], "zh_tw" => childpage["url"]},:rss2_id => childpage["page_id"])
|
||||||
|
cp.save
|
||||||
|
when "file"
|
||||||
|
asset = Asset.new
|
||||||
|
asset.remote_data_url = childpage["filename"]
|
||||||
|
asset.title_translations = {"en" => childpage["file_title"], "zh_tw" =>childpage["file_title"]}
|
||||||
|
asset.save!
|
||||||
|
@user.assets << asset
|
||||||
|
@user.save
|
||||||
|
external_url = asset.data.url
|
||||||
|
cp = Page.new(:page_id => p_id, :parent_page_id => p.id, :page_type => "link", "url" => "#{p.page_id}/#{p_id}", :enabled_for => ["en", "zh_tw"], :menu_enabled_for => ["en", "zh_tw"], :enabled_for_sitemap => ["en","zh_tw"], :name_translations => {"en"=>childpage["title"]["en"], "zh_tw" => childpage["title"]["zh_tw"]}, :external_url_translations => {"en" => external_url, "zh_tw" => external_url},:rss2_id => childpage["page_id"])
|
||||||
|
cp.save
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@@import_stats["current_stattus"] = @@import_stats["current_stattus"] + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
@@thread.abort_on_exception = true
|
||||||
|
render :json => {"success"=>true}.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_import_status
|
||||||
|
if @@thread.alive?
|
||||||
|
render :json => {"success" => true, "total_pages" => @@import_stats["total"], "current_status" => @@import_stats["current_stattus"], "current_page" => @@import_stats["current_page"], "current_page_name" => @@import_stats["current_page_name"]}
|
||||||
|
else
|
||||||
|
if @@import_stats["current_stattus"] == @@import_stats["total"]
|
||||||
|
render :json => {"success" => true, "total_pages" => @@import_stats["total"], "current_status" => @@import_stats["current_stattus"], "current_page" => @@import_stats["current_page"], "current_page_name" => @@import_stats["current_page_name"]}
|
||||||
|
|
||||||
|
else
|
||||||
|
render :json => {"success" => false, "current_page" => @@import_stats["current_page"], "current_page_name" => @@import_stats["current_page_name"]}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def page_present?(page)
|
||||||
|
Page.where(:page_id => page).count > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
def smart_downloader(data,url)
|
||||||
|
@data = data
|
||||||
|
excluded_extensions = ["php","/"]
|
||||||
|
@links = URI.extract(@data)
|
||||||
|
@links.each do |link|
|
||||||
|
if link.include?url
|
||||||
|
temp = link.gsub(url,"")
|
||||||
|
extension = temp.split(".").last rescue nil
|
||||||
|
if extension.nil? || excluded_extensions.include?(extension)
|
||||||
|
@data = @data.sub(link,"#")
|
||||||
|
else
|
||||||
|
a = Asset.new
|
||||||
|
a.remote_data_url = link
|
||||||
|
a.title_translations = {"en" => a.data.filename, "zh_tw" => a.data.filename}
|
||||||
|
a.save!
|
||||||
|
@user.assets << a
|
||||||
|
@user.save
|
||||||
|
@data = @data.sub(link, a.data.url)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@data
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_user
|
||||||
|
@user = User.find(current_user.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ class Page
|
||||||
field :menu_enabled_for, type: Array, default: []
|
field :menu_enabled_for, type: Array, default: []
|
||||||
field :categories, type: Array, :default => []
|
field :categories, type: Array, :default => []
|
||||||
field :enabled_for_sitemap, type: Array, :default => []
|
field :enabled_for_sitemap, type: Array, :default => []
|
||||||
|
field :rss2_id, type: String
|
||||||
|
|
||||||
has_many :page_parts, :autosave => true, :dependent => :destroy
|
has_many :page_parts, :autosave => true, :dependent => :destroy
|
||||||
has_many :mobile_page_parts, :autosave => true, :dependent => :destroy
|
has_many :mobile_page_parts, :autosave => true, :dependent => :destroy
|
||||||
|
|
|
@ -127,7 +127,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="page-module" class="module" onclick="importModule('page')">
|
<div id="page-module" class="module" onclick="importModule('pages')">
|
||||||
<div class="lead muted">
|
<div class="lead muted">
|
||||||
<i class="icons-newspaper"></i><br/>
|
<i class="icons-newspaper"></i><br/>
|
||||||
<%= t("page_content.page") %>
|
<%= t("page_content.page") %>
|
||||||
|
@ -170,7 +170,7 @@
|
||||||
|
|
||||||
$("#import-start-btn").click(function(){
|
$("#import-start-btn").click(function(){
|
||||||
switch(module){
|
switch(module){
|
||||||
case "page":
|
case "pages":
|
||||||
importPages();
|
importPages();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -186,7 +186,40 @@
|
||||||
|
|
||||||
var importPages = function(){
|
var importPages = function(){
|
||||||
$("#import-progress .bar").css('width','0%');
|
$("#import-progress .bar").css('width','0%');
|
||||||
$("#import-progress-text").html("Importing Pages<br/><br/>");
|
$.ajax({
|
||||||
|
type: "post",
|
||||||
|
dataType: "json",
|
||||||
|
url: '<%= admin_import_rss2_pages_path %>',
|
||||||
|
data : {"url" : url+'?module='+module}
|
||||||
|
}).done(function(){
|
||||||
|
startCheckingImportStatus();
|
||||||
|
$("#import-progress-text").html("Importing Pages...<br/>");
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var startCheckingImportStatus = function(){
|
||||||
|
$.ajax({
|
||||||
|
type : "get",
|
||||||
|
dataType : "json",
|
||||||
|
url : "<%= admin_import_get_import_status_path %>"
|
||||||
|
}).done(function(status){
|
||||||
|
if(status.success == true){
|
||||||
|
if(status.total_pages != null){
|
||||||
|
var percent = (status.current_status * 100) / status.total_pages;
|
||||||
|
$("#import-progress .bar").css('width',percent + "%");
|
||||||
|
$("#import-progress-text").html("Importing page " + status.current_page_name + " .. " + status.current_status + "/" + status.total_pages + "<br/>");
|
||||||
|
}
|
||||||
|
if(status.total_pages != status.current_status){
|
||||||
|
setTimeout("startCheckingImportStatus()",700);
|
||||||
|
}else{
|
||||||
|
$("#import-progress-text").html("Finished importing pages.<br/>");
|
||||||
|
}
|
||||||
|
}else if(status.success == false){
|
||||||
|
$("#import-progress-text").html("Importing failed, click on start to try again.");
|
||||||
|
$("#alert-msg").text("Error importing page " + status.current_page_name + " ID : " + status.current_page)
|
||||||
|
$(".alert-danger").removeClass("hide").show();
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var importModule = function(m){
|
var importModule = function(m){
|
||||||
|
|
|
@ -205,6 +205,8 @@ Orbit::Application.routes.draw do
|
||||||
get "import/module_data" => "import#module_data"
|
get "import/module_data" => "import#module_data"
|
||||||
post "import/rss2_news" => "import#rss2_news"
|
post "import/rss2_news" => "import#rss2_news"
|
||||||
post "import/rss2_archive" => "import#rss2_archive"
|
post "import/rss2_archive" => "import#rss2_archive"
|
||||||
|
post "import/rss2_pages" => "import#rss2_pages"
|
||||||
|
get "import/get_import_status" => "import#get_import_status"
|
||||||
end
|
end
|
||||||
|
|
||||||
get 'mobile', to: 'pages#home'
|
get 'mobile', to: 'pages#home'
|
||||||
|
|
Loading…
Reference in New Issue