This commit is contained in:
unknown 2012-11-06 14:28:03 +08:00
commit 97d2380406
486 changed files with 12368 additions and 8935 deletions

5
.gitignore vendored
View File

@ -8,9 +8,10 @@ uploads/**/*
public/panel/**/* public/panel/**/*
public/index.html public/index.html
.DS_Store .DS_Store
solr/data/**/*
*.swp *.swp
*.pid
*.lck
public/assets public/assets
config/application.rb config/application.rb

View File

@ -23,6 +23,7 @@ gem 'mongoid-tree', :require => 'mongoid/tree'
gem "mongo_session_store-rails3" gem "mongo_session_store-rails3"
gem 'mysql2' gem 'mysql2'
gem 'nokogiri' gem 'nokogiri'
gem 'radius' gem 'radius'
gem 'rake' gem 'rake'
# gem 'remotipart' # gem 'remotipart'
@ -84,7 +85,7 @@ group :test, :development do
gem "simplecov" gem "simplecov"
gem "delorean" gem "delorean"
gem "watchr" gem "watchr"
gem "spork" gem "spork"
# gem "capybara" # gem "capybara"
# gem 'yard' # gem 'yard'
# gem "bluecloth" # gem "bluecloth"

22
Guardfile Normal file
View File

@ -0,0 +1,22 @@
guard 'livereload' do
watch(%r{app/.+\.(erb|haml)})
watch(%r{app/helpers/.+\.rb})
watch(%r{public/.+\.(css|js|html)})
watch(%r{config/locales/.+\.yml})
end
guard 'rspec', :version => 2 do
watch(%r{^spec/.+_spec\.rb})
watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
# Rails example
watch('spec/spec_helper.rb') { "spec" }
watch('config/routes.rb') { "spec/routing" }
watch('app/controllers/application_controller.rb') { "spec/controllers" }
watch(%r{^spec/.+_spec\.rb})
watch(%r{^app/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller)\.rb}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/requests/#{m[1]}_spec.rb"] }
watch(%r{^app/views/(.+)/}) { |m| "spec/requests/#{m[1]}_spec.rb" }
end

View File

@ -1,111 +1,7 @@
<%#= encoding: utf-8 %> $('#ajaxForm').ajaxForm({
$(document).on('click', '#ajax_form_submit', function(){ beforeSubmit: function(a,f,o) {
// $('#ajaxForm').ajaxSubmit({ o.dataType = 'script';
// beforeSubmit: function(a,f,o) { },
// o.dataType = 'script'; success: function(data) {
// if (o.dataType == 'script') { }
// o.url = o.url.split('?'); // split on GET params
// if (o.url[0].substr(-3) != '.js') o.url[0] += '.js'; // force rails to respond to respond to the request with :format = js
// o.url = o.url.join('?'); // join on GET params
// }
// },
// success: function(response,status,xhr){
// alert(response);
// alert(status);
// alert(xhr);
// },
// error:function(){
// alert("error");
// }
// });
var o = {
// dataType: 'script',
dataType: 'html',
url:$("#ajaxForm").attr("action"),
beforeSubmit: function(){
var sub = true;
$("span.error").remove();
$("#dyn_error").empty();
$("#ajaxForm input").each(function(){
if($(this).val() == ""){
$("<span class='error'> *</span>").insertAfter($(this));
sub = false;
}
})
if(!sub){
$("#dyn_error").text("Cannot be empty.");
$("#dyn_error").text("<%= I18n.t('cant_empty_star') %>");
return false;
}
},
success: function(response,status,xhr){
if(typeof tinyMCEPopup != "undefined"){
var x = response.split("#");
var returnurl = x[0],
returntitle = x[1],
returndescription = x[2];
var win = tinyMCEPopup.getWindowArg("window");
win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = returnurl;
win.document.getElementById(tinyMCEPopup.getWindowArg("alt")).value = returndescription;
win.document.getElementById(tinyMCEPopup.getWindowArg("title")).value = returntitle;
if (typeof(win.ImageDialog) != "undefined") {
// we are, so update image dimensions...
if (win.ImageDialog.getImageData)
win.ImageDialog.getImageData();
// ... and preview if necessary
if (win.ImageDialog.showPreviewImage)
win.ImageDialog.showPreviewImage(returnurl);
}
tinyMCEPopup.close();
}else{
//incase if we want to do something for quick edit file upload
// var modalvalues = "";
// var r = "";
// if(rcom.getInternetExplorerVersion() > -1){
// r = "<tr><td>" + response + "</td></tr>";
// r = r.replace("**","</td><td>");
// r = r.replace("**","</td><td>");
// r = $(r);
// modalvalues = r.find("span").attr("data-content").split("#");
// r.attr("id",r.find("span").attr("for"));
// var table=document.getElementById(modalvalues[0]);
// //var tbody = table.getElementsByTagName("tbody");
// var row = table.insertRow(table.rows.length-1);
// var c1 = row.insertCell(0),
// c2 = row.insertCell(1),
// c3 = row.insertCell(2);
// c1.innerHTML = r.find("td").eq(0).html();
// c2.innerHTML = r.find("td").eq(1).html();
// c3.innerHTML = r.find("td").eq(2).html();
// var trow = $("#bulletin_files tfoot").find("tr").eq(0);
// $("#bulletin_files tbody").append(trow);
// }else{
// response = response.replace("**","");
// response = response.replace("**","");
// r = $(response);
// modalvalues = r.find("span").attr("data-content").split("#");
// $('#' + modalvalues[0]+ ' tbody').append(r);
// }
// console.log(modalvalues[1]);
// $("#"+modalvalues[1]).modal('hide');
//$('#bulletin_files tbody').append(r);
//$(response).fadeIn();
}
},
error:function(){
alert("error");
}
}
if (o.dataType == 'script') {
o.url = o.url.split('?'); // split on GET params
if (o.url[0].substr(-3) != '.js') o.url[0] += '.js'; // force rails to respond to respond to the request with :format = js
o.url = o.url.join('?'); // join on GET params
}
$('#ajaxForm').ajaxSubmit(o);
}); });

View File

@ -10,7 +10,7 @@ $('.bulletin_files_block a.delete').live('click', function(){
}); });
$(document).on('click', '.action a.remove_existing_record', function(){ $(document).on('click', '.action a.remove_existing_record', function(){
if(confirm("<%= I18n.t('announcement.sure?')%>")){ if(confirm("<%= I18n.t(:sure?)%>")){
$(this).next('.should_destroy').attr('value', 1); $(this).next('.should_destroy').attr('value', 1);
$("tr#" + $(this).prev().attr('value')).hide(); $("tr#" + $(this).prev().attr('value')).hide();
} }

View File

@ -1,7 +1,7 @@
jQuery(document).ajaxStart(function(){ // jQuery(document).ajaxStart(function(){
$('<div class="modal-backdrop fade in" id="sys_modal"><img src="/assets/ajax-loader.gif" style="margin-top: 25%;margin-left: 50%;"></div>').appendTo('body'); // $('<div class="modal-backdrop fade in" id="sys_modal"><img src="/assets/ajax-loader.gif" style="margin-top: 25%;margin-left: 50%;"></div>').appendTo('body');
}); // });
jQuery(document).ajaxComplete(function(){ // jQuery(document).ajaxComplete(function(){
$("#sys_modal").hide().remove(); // $("#sys_modal").hide().remove();
}); // });

View File

@ -3,6 +3,58 @@
// <%= link_to "NewPreview", realtime_preview_admin_ad_banner_path(ad_banner_tab) , :class=>'preview_trigger'%> // <%= link_to "NewPreview", realtime_preview_admin_ad_banner_path(ad_banner_tab) , :class=>'preview_trigger'%>
$(document).ready(function() { $(document).ready(function() {
// $(".post_preview").click(function(e){
// $("#main-wrap").after("<span id='show_preview'></span>");
// e.preventDefault();
// var form = $(this).parents("form").first()
// //var cont = form["content"].value;
// // $.ajax({
// // type: 'POST',
// // url: $(this).attr("href")+'?preview=true',
// // data: form.serialize(),
// // dataType: "script",
// // success: function (msg) {
// // $("#"+start_modal_with_id).modal('show'); },
// // error: function(){
// // alert("ERROR");
// // }
// // });
// url = "/panel/news/back_end/news_bulletins/preview?preview=true"
// // alert(url)
// form.attr("action",url);
// form.submit();
// //return false;
// });
$("button.post_preview").click(function(){
var btn = document.getElementById("button_for_preview");
var attrs = btn.attributes;
var url = attrs['url'];
// url = url.replace("url=","");
$("form.nccu_ajax_form").ajaxSubmit({
beforeSubmit: function(a,f,o){
$("#main-wrap").after("<span id='show_preview'></span>");
o.dataType = 'script';
o.url = url.nodeValue;
o.type = 'post';
},success: function(msg) { }
});
})
// $("form.nccu_ajax_form").ajaxForm({
// beforeSubmit: function(a,f,o) {
// // if(clicked_what.hasClass("post_preview")){
// // $("#main-wrap").after("<span id='show_preview'></span>");
// // o.dataType = 'script';
// // o.url = clicked_what.attr("url");
// // }
// },
// success: function(data) {
// // if(!clicked_what.hasClass("post_preview")){
// // window.location = data.redirect_url;
// // }
// }
// })
$("a.preview_trigger").click(function(){ $("a.preview_trigger").click(function(){
$("#main-wrap").after("<span id='show_preview'></span>"); $("#main-wrap").after("<span id='show_preview'></span>");
$.ajax({ $.ajax({

View File

@ -4,33 +4,45 @@
//extended jquery to search fast. //extended jquery to search fast.
$.extend($.expr[':'], { $.extend($.expr[':'], {
'containsi': function (elem, i, match, array) { 'containsi': function (elem, i, match, array) {
return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0; return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
} }
}); });
var interval,sval; var interval,sval;
$(document).ready(function(){ $(document).ready(function(){
$("#user_filter").keyup(function(e){ $("#user_filter").keyup(function(e){
if((e.which>96 && e.which<123) || (e.which>64 && e.which<92) || (e.which == 32) || (e.which == 8)){ if((e.which>96 && e.which<123) || (e.which>64 && e.which<92) || (e.which == 32) || (e.which == 8)){
sval = $(this).val(); sval = $(this).val();
$(".checkbox").popover("hide"); $(".checkbox").popover("hide");
$("div.checkblock").hide(); $("div.checkblock").hide();
clearInterval(interval); clearInterval(interval);
interval = setInterval(waitForSearch,1000); interval = setInterval(waitForSearch,1000);
} }
}) })
}) })
var waitForSearch = function(){ var waitForSearch = function(){
if(sval){ if(sval){
var totalfoundbyname = $("div#users_checkbox_ary label.member-name:containsi("+sval+")").length var re1 = new RegExp("^[\u4E00-\uFA29]*$"); //Chinese character range
if(totalfoundbyname!=0){ var re2 = new RegExp("^[\uE7C7-\uE7F3]*$");
$("div#users_checkbox_ary label.member-name:containsi("+sval+")").parent().parent().show(); if ((re1.test(sval) && (re2.test(sval)))){
}else if(totalfoundbyname==0){
$("div#users_checkbox_ary div.for_unit:containsi("+sval+")").parent().show(); var totalfoundbyname = $("div#users_checkbox_ary label.member-name:contains("+sval+")").length
} if(totalfoundbyname!=0){
}else{ $("div#users_checkbox_ary label.member-name:contains("+sval+")").parent().parent().show();
$(".checkbox").popover('hide'); }else if(totalfoundbyname==0){
$("div.checkblock").show(); $("div#users_checkbox_ary div.for_unit:contains("+sval+")").parent().show();
} }
clearInterval(interval); }else{
var totalfoundbyname = $("div#users_checkbox_ary label.member-name:containsi("+sval+")").length
if(totalfoundbyname!=0){
$("div#users_checkbox_ary label.member-name:containsi("+sval+")").parent().parent().show();
}else if(totalfoundbyname==0){
$("div#users_checkbox_ary div.for_unit:containsi("+sval+")").parent().show();
}
}
}else{
$(".checkbox").popover('hide');
$("div.checkblock").show();
}
clearInterval(interval);
} }

View File

@ -40,11 +40,11 @@ $(".nav-tabs").find(".icons-pencil").click(function(){
data: { body: content_holder.html() }, data: { body: content_holder.html() },
success: function(json) { success: function(json) {
$(selector).attr("contenteditable",false) $(selector).attr("contenteditable",false)
alert("<%= I18n.t('admin.contenteditable.update_done') %>"); alert("<%= I18n.t('update.success_') %>");
//content_holder.effect('highlight', {'color': '#0f0'}, 3000); //content_holder.effect('highlight', {'color': '#0f0'}, 3000);
}, },
error: function() { error: function() {
alert("<%= I18n.t('admin.contenteditable.update_failed') %>"); alert("<%= I18n.t('update.fail') %>");
//content_holder.effect('highlight', {'color': '#f00'}, 3000); //content_holder.effect('highlight', {'color': '#f00'}, 3000);
content_holder.html(content); content_holder.html(content);
} }

View File

@ -11,7 +11,7 @@ $('.news_bulletin_files_block a.delete').live('click', function(){
}); });
$(document).on('click', '.action a.remove_existing_record', function(){ $(document).on('click', '.action a.remove_existing_record', function(){
if(confirm("<%= I18n.t('news.sure?')%>")){ if(confirm("<%= I18n.t(:sure?)%>")){
$(this).next('.should_destroy').attr('value', 1); $(this).next('.should_destroy').attr('value', 1);
$("tr#" + $(this).prev().attr('value')).hide(); $("tr#" + $(this).prev().attr('value')).hide();
} }

View File

@ -332,9 +332,9 @@ var orbitDesktop = function(dom){
if(j==0)$group.attr("id",tile.group_id); if(j==0)$group.attr("id",tile.group_id);
if(tile.data_category == "app") if(tile.data_category == "app")
$li = $('<li id="'+tile._id+'" class="element '+tile.shape+' hp vp" data-category="'+tile.data_category+'" data-content="'+tile.data_content+'"><span class="tile '+tilecolor+' '+op+'"></span><a href="'+tile.data_content+'" class="appicon" onclick="return false;"><img src="'+o.iconPath+tile.data_content+'.png" alt="" ></a><h1 class="appname thmtxt">'+tile.title+'</h1></li>'); $li = $('<li data-id="'+tile.id+'" class="element '+tile.shape+' hp vp" data-category="'+tile.data_category+'" data-content="'+tile.data_content+'" ><span class="tile '+tilecolor+' '+op+'"></span><a href="'+tile.data_content+'" class="appicon" onclick="return false;"><img src="'+o.iconPath+tile.data_content+'.png" alt="" ></a><h1 class="appname thmtxt">'+tile.title+'</h1></li>');
else else
$li = $('<li id="'+tile._id+'" class="element '+tile.shape+' hp vp" data-category="'+tile.data_category+'" data-content="'+tile.data_content+'"><span class="tile '+tilecolor+' '+op+'"></span><h1 class="appname thmtxt">'+tile.title+'</h1><div class="appholder">Loading...</div></li>'); $li = $('<li data-id="'+tile.id+'" class="element '+tile.shape+' hp vp" data-category="'+tile.data_category+'" data-content="'+tile.data_content+'" js-link="'+tile.js[0].url+'" css-link="'+tile.css.url+'"><span class="tile '+tilecolor+' '+op+'"></span><h1 class="appname thmtxt">'+tile.title+'</h1><div class="appholder">Loading...</div></li>');
$group.find('.col'+colindex).append($li); $group.find('.col'+colindex).append($li);
} }
@ -1557,10 +1557,10 @@ var orbitDesktop = function(dom){
var widget = $(this); var widget = $(this);
if(widget.attr("data-category")=="widget"){ if(widget.attr("data-category")=="widget"){
var widgename = widget.attr("data-content"); var widgename = widget.attr("data-content");
$.getScript("/desktop_widgets/"+widgename+"/"+widgename+".js",function(){ $.getScript(widget.attr("js-link"),function(){
widget.find("div.appholder").load("/desktop_widgets/"+widgename+"/index.html.erb"); widget.find("div.appholder").load(widget.attr("data-content"));
}); });
// $(this).find("div.appholder").append( $('<link rel="stylesheet" id="dyn_css" type="text/css" />').attr('href', "/desktop_widgets/"+widgename+"/css/"+widgename+".css")); $(this).find("div.appholder").append( '<link rel="stylesheet" id="dyn_css" href="'+widget.attr("css-link")+'" type="text/css" />')
} }
}) })
@ -1697,3 +1697,4 @@ orbitDesktop.prototype.currentUsername = "Harry";
var uselessfunction = function(){ var uselessfunction = function(){
$.post("/desktop/temp_func",{sectionid:"4f83e7bbbd98eb041600001d"}); $.post("/desktop/temp_func",{sectionid:"4f83e7bbbd98eb041600001d"});
} }

View File

@ -14,17 +14,20 @@ function load_tinymce() {
theme_advanced_toolbar_align : "left", theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom", theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true, theme_advanced_resizing : true,
relative_urls : false,
// Skin options // Skin options
skin : "o2k7", skin : "o2k7",
skin_variant : "silver", skin_variant : "silver",
font_size_style_values : "xx-small,x-small,small,medium,large,x-large,xx-large",
// Drop lists for link/image/media/template dialogs // Drop lists for link/image/media/template dialogs
template_external_list_url : "js/template_list.js", template_external_list_url : "js/template_list.js",
// external_link_list_url : "js/link_list.js", // external_link_list_url : "js/link_list.js",
// external_image_list_url : "js/image_list.js", // external_image_list_url : "js/image_list.js",
// media_external_list_url : "js/media_list.js" // media_external_list_url : "js/media_list.js"
content_css: "<%= asset_path('tinymce_orbit.css') %>",
// Style formats // Style formats
style_formats : [ style_formats : [
{title : 'Bold text', inline : 'b'}, {title : 'Bold text', inline : 'b'},
@ -40,7 +43,15 @@ function load_tinymce() {
template_replace_values : { template_replace_values : {
username : "Some User", username : "Some User",
staffid : "991234" staffid : "991234"
} },
// Valide HTML elements
valid_elements : '*[*]',
valid_children : '*[*]',
// Height & width
height : '400',
width : '100%'
}); });
} }
function myFileBrowser(field_name, url, type, win) { function myFileBrowser(field_name, url, type, win) {

View File

@ -99,7 +99,7 @@ textarea {
body { body {
margin: 0; margin: 0;
font-family: /*"Helvetica Neue", */Helvetica, Arial, sans-serif; font-family: /*"Helvetica Neue", */Helvetica, Arial, sans-serif;
font-size: 13px; font-size: 75%;
line-height: 18px; line-height: 18px;
color: #333333; color: #333333;
background-color: #ffffff; background-color: #ffffff;

View File

@ -287,32 +287,65 @@
padding: 0 20px 0 150px !important; padding: 0 20px 0 150px !important;
margin: 20px 0 0; margin: 20px 0 0;
} }
.user-role .user-info { .role-block .user-info {
top: 23px; top: 23px;
margin-left: -135px; margin-left: -135px;
width: 100px; width: 100px;
border-right: none; border-right: none;
box-shadow: none; box-shadow: none;
} }
.user-role .map-block h4 .gender { .role-block .map-block h4 .gender {
top: -1px; top: -1px;
bottom: auto; bottom: auto;
left: -1px; left: -1px;
right: auto; right: auto;
border-radius: 4px 0 0 0; border-radius: 4px 0 0 0;
} }
.user-role .teacher h4 .gender { .role-block .teacher h4 .gender {
border-color: #186AB6 transparent transparent #186AB6; border-color: #186AB6 transparent transparent #186AB6;
} }
.user-role .student h4 .gender { .role-block .student h4 .gender {
border-color: #F38C08 transparent transparent #F38C08; border-color: #F38C08 transparent transparent #F38C08;
} }
.user-role .staff h4 .gender { .role-block .staff h4 .gender {
border-color: #139E2F transparent transparent #139E2F; border-color: #139E2F transparent transparent #139E2F;
} }
.user-role .tab-content, .user-role .nav-pills { .role-block .tab-content, .role-block .nav-pills {
float: left; float: left;
} }
.user-role .nav-pills { .role-block .nav-pills {
margin-left: 10px; margin-bottom: 0;g
}
.role-block .nav-pills > li > a {
margin-top: 0;
}
/*.role-block .control-group .inline {
float:
}*/
.plural .input-append input, .plural .input-append select, .plural .input-append .uneditable-input, .unRadius input {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.plural .input-append .removeInput {
display: none;
}
.plural.editMore .input-append input, .plural.editMore .input-append select, .plural.editMore .input-append .uneditable-input {
-webkit-border-radius: 3px 0 0 3px;
-moz-border-radius: 3px 0 0 3px;
border-radius: 3px 0 0 3px;
}
.plural.editMore .input-append input, .plural.editMore .input-append select, .plural.editMore .input-append .uneditable-input {
-webkit-border-radius: 3px 0 0 3px;
-moz-border-radius: 3px 0 0 3px;
border-radius: 3px 0 0 3px;
}
.plural.editMore .input-append .add-on, .plural.editMore .input-append .btn {
-webkit-border-radius: 0 3px 3px 0;
-moz-border-radius: 0 3px 3px 0;
border-radius: 0 3px 3px 0;
}
.language-swich .tab-pane {
margin-bottom: 5px;
margin-right: 10px;
} }

View File

@ -69,8 +69,9 @@
} }
.site-map .disabled h4 { .site-map .disabled h4 {
color: #CACACA; color: #CACACA;
border-radius: 4px;
} }
.site-map .disabled h4 .onoff { .site-map .disabled h4 .onoff ,.onoff.disabled {
box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5), 0 0 5px rgba(0,0,0,.2) inset; box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5), 0 0 5px rgba(0,0,0,.2) inset;
background-color: #9C9C9C; background-color: #9C9C9C;
color: #CACACA; color: #CACACA;
@ -80,37 +81,60 @@
background-color: #5EB92B; background-color: #5EB92B;
font-size: 9px; font-size: 9px;
padding: 0px 10px; padding: 0px 10px;
border-radius: 8px; border-radius: 11px;
line-height: 16px; line-height: 20px;
height: 15px; height: 19px;
color: #FFF; color: #FFF;
width: 38px; width: 40px;
border: none; border: none;
box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5), 0 0 5px rgba(13, 75, 23, 0.5) inset; box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5), 0 0 5px rgba(13, 75, 23, 0.5) inset;
margin-top: 2px; margin-top: 1px;
} }
/* for mamber role */ /* for mamber role */
.role-block .form-horizontal {
.user-role .form-horizontal {
padding: 20px 10px 10px; padding: 20px 10px 10px;
background-color: #FFF; background-color: #FFF;
margin-bottom: 0; margin-bottom: 0;
border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px;
} }
.user-role .form-horizontal .control-label { .role-block [class*="type"] {
background-color: #F1F1F1;
padding: 20px 0 10px;
border-radius: 5px;
margin: -25px 0 40px;
/*box-shadow: 0px 1px 3px rgba(100,100,100,.4)*/
}
.role-block .form-horizontal .control-label {
width: 100px; width: 100px;
} }
.user-role .form-horizontal .controls { .role-block .form-horizontal .controls {
margin-left: 120px; margin-left: 120px;
} }
.user-role .form-horizontal .controls>.input-append { .role-block .form-horizontal .controls>.input-append {
margin-bottom: 10px; margin-bottom: 10px;
} }
.user-role .map-block { .role-block .form-horizontal legend .onoff {
margin-top: 4px;
}
.role-block .form-horizontal legend .btn-danger {
margin-right: 20px;
}
.role-block .form-horizontal legend>.clear {
margin-right: 150px;
min-width: 350px;
}
.role-block .map-block {
min-width: 440px; min-width: 440px;
} }
.user-role .map-block legend { .role-block .map-block .form-actions {
margin: 0;
padding: 10px 20px;
}
.role-block .map-block legend {
font-size: 18px; font-size: 18px;
line-height: 25px; line-height: 25px;
} }
.role-block .map-block legend .nav {
font-size: 12px;
}

View File

@ -267,6 +267,12 @@
#post-body-content { #post-body-content {
padding: 8px 0 8px 6px; padding: 8px 0 8px 6px;
} }
#post-body-content .middle {
width: 100%;
padding: 0;
border: none;
box-shadow: none;
}
.filter .accordion-group { .filter .accordion-group {
margin-bottom: 0; margin-bottom: 0;
border: none; border: none;
@ -470,6 +476,9 @@
.view-mode .btn { .view-mode .btn {
margin-bottom: 0; margin-bottom: 0;
} }
.view-mode .btn {
margin-bottom: 0;
}
.view-mode i { .view-mode i {
font-size: 1.2em; font-size: 1.2em;
line-height: 17px !important; line-height: 17px !important;
@ -1458,4 +1467,4 @@
/*21*/ /*21*/
.icons- { .icons- {
background-position: -0px -640px; background-position: -0px -640px;
} }

View File

@ -0,0 +1,4 @@
body {
font-family: Arial, Helvetica, sans-serif !important;
font-size: 13px !important;
}

View File

@ -41,7 +41,7 @@ class Admin::AdImagesController < OrbitBackendController
@ad_banner = AdBanner.find params[:ad_banner_id] @ad_banner = AdBanner.find params[:ad_banner_id]
@ad_image = @ad_banner.ad_images.find params[:id] @ad_image = @ad_banner.ad_images.find params[:id]
if @ad_image.destroy if @ad_image.destroy
flash[:notice] = t('admin.success_destroy_ad_image') flash[:notice] = t('ad.success_destroy_ad_image')
redirect_to admin_ad_banner_path @ad_banner redirect_to admin_ad_banner_path @ad_banner
end end
end end

View File

@ -25,7 +25,7 @@ class Admin::AssetCategoriesController < OrbitBackendController
respond_to do |format| respond_to do |format|
if @asset_category.save if @asset_category.save
format.html { redirect_to(admin_asset_categories_url, :notice => t('announcement.create_asset_category_success')) } format.html { redirect_to(admin_asset_categories_url, :notice => t('create.success.asset_category')) }
format.js format.js
else else
format.html { render :action => "new" } format.html { render :action => "new" }
@ -41,8 +41,8 @@ class Admin::AssetCategoriesController < OrbitBackendController
respond_to do |format| respond_to do |format|
if @asset_category.update_attributes(params[:asset_category]) if @asset_category.update_attributes(params[:asset_category])
# format.html { redirect_to(panel_announcement_back_end_asset_category_url(@asset_category), :notice => t('asset_category.update_asset_category_success')) } # format.html { redirect_to(panel_announcement_back_end_asset_category_url(@asset_category), :notice => t('create.success')) }
# format.html { redirect_to(panel_announcement_back_end_asset_categories_url, :notice => t('asset_category.update_asset_category_success')) } # format.html { redirect_to(panel_announcement_back_end_asset_categories_url, :notice => t('create.success')) }
# format.xml { head :ok } # format.xml { head :ok }
format.js format.js
else else

View File

@ -44,7 +44,7 @@ class Admin::AssetsController < OrbitBackendController
# render :json=>{"url"=>@asset.data.url,"title"=>"xxx","desc"=>"sss"}.to_json # render :json=>{"url"=>@asset.data.url,"title"=>"xxx","desc"=>"sss"}.to_json
render :layout=>false render :layout=>false
else else
flash[:error] = t(:create_fail) flash[:error] = t('create.fail')
@asset_categories = AssetCategory.all @asset_categories = AssetCategory.all
@tags = AssetTag.all @tags = AssetTag.all
respond_to do |format| respond_to do |format|
@ -67,7 +67,7 @@ class Admin::AssetsController < OrbitBackendController
format.js { render 'js/remove_pop_up_and_reload_content', :locals => {:function => 'replaceWith', :id => "asset_#{@asset.id}", :value => @asset, :values => nil, :partial => 'admin/assets/asset', :locals => nil} } format.js { render 'js/remove_pop_up_and_reload_content', :locals => {:function => 'replaceWith', :id => "asset_#{@asset.id}", :value => @asset, :values => nil, :partial => 'admin/assets/asset', :locals => nil} }
end end
else else
flash[:error] = t(:update_fail) flash[:error] = t('update.fail')
@asset_categories = AssetCategory.all @asset_categories = AssetCategory.all
@tags = AssetTag.all @tags = AssetTag.all
respond_to do |format| respond_to do |format|
@ -105,4 +105,8 @@ class Admin::AssetsController < OrbitBackendController
render :layout => false render :layout => false
end end
def check_permission
true
end
end end

View File

@ -34,14 +34,37 @@ class Admin::DesignsController < OrbitBackendController
def update def update
@design = Design.find(params[:id]) @design = Design.find(params[:id])
if @design.update_attributes(params[:design]) @design.update_attributes(params[:design])
flash[:notice] = "Successfully updated design and tasks." # if @design.update_attributes(params[:design])
redirect_to admin_designs_url(@design) # flash[:notice] = "Successfully updated design and tasks."
else # redirect_to admin_designs_url(@design)
render :action => 'edit' # else
# render :action => 'edit'
# end
respond_to do |format|
format.js {nil}
end end
end end
def update_file
@design = Design.find(params[:id])
case params[:type]
when 'layout', 'css_default', 'css_reset'
@object = @design.send(params[:type])
when 'image', 'javascript', 'theme'
@object = @design.send(params[:type]).find(params[:object_id])
end
Dir.mktmpdir('f_path') { |dir|
temp_file = File.new(dir + '/' + File.basename(@object.file.url), 'w+')
temp_file.write(params[:file][:content].force_encoding('UTF-8'))
@object.remove_file!
@object.file = temp_file
@object.save
}
end
def edit_file def edit_file
@design = Design.find(params[:id]) @design = Design.find(params[:id])
filename = params[:filename] filename = params[:filename]
@ -91,6 +114,13 @@ class Admin::DesignsController < OrbitBackendController
end end
redirect_to admin_designs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]) redirect_to admin_designs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end end
def upload_image
@design = Design.find(params[:id])
@image = @design.images.build(params[:image])
@image.save
render :layout => false
end
protected protected
@ -98,7 +128,6 @@ class Admin::DesignsController < OrbitBackendController
Zip::ZipFile.open(file) { |zip_file| Zip::ZipFile.open(file) { |zip_file|
design = Design.new.from_json(zip_file.read("#{zip_name}/info.json")) design = Design.new.from_json(zip_file.read("#{zip_name}/info.json"))
Dir.mktmpdir('f_path') { |dir| Dir.mktmpdir('f_path') { |dir|
design.build_layout
themes_entries = [] themes_entries = []
javascripts_entries = [] javascripts_entries = []
images_entries = [] images_entries = []
@ -106,25 +135,11 @@ class Admin::DesignsController < OrbitBackendController
zip_file.entries.each do |entry| zip_file.entries.each do |entry|
case (path = entry.to_s) case (path = entry.to_s)
when /\A(#{zip_name})\/(default\.css)\z/ #for default css when /\A(#{zip_name})\/(default\.css)\z/ #for default css
filename = File.basename(entry.to_s) design.build_css_default(:file => get_temp_file(zip_file, dir, entry))
temp_file = File.new(dir + '/' + filename, 'w+')
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
default_css = design.build_default_css
default_css.file = temp_file
default_css.to_save = true
when /\A(#{zip_name})\/(reset\.css)\z/ #for reset css when /\A(#{zip_name})\/(reset\.css)\z/ #for reset css
filename = File.basename(entry.to_s) design.build_css_reset(:file => get_temp_file(zip_file, dir, entry))
temp_file = File.new(dir + '/' + filename, 'w+')
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
reset_css = design.build_reset_css
reset_css.file = temp_file
reset_css.to_save = true
when /\A(#{zip_name})\/(layout\.html)\z/ #for layout html when /\A(#{zip_name})\/(layout\.html)\z/ #for layout html
filename = File.basename(entry.to_s) design.build_layout(:file => get_temp_file(zip_file, dir, entry))
temp_file = File.new(dir + '/' + filename, 'w+')
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
design.layout.file = temp_file
design.layout.to_save=true
when /\A(#{zip_name})\/(themes)\/.*(\.css)\z/ #for themes css when /\A(#{zip_name})\/(themes)\/.*(\.css)\z/ #for themes css
themes_entries << entry themes_entries << entry
when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/ #for js when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/ #for js
@ -136,12 +151,7 @@ class Admin::DesignsController < OrbitBackendController
['themes', 'javascripts', 'images'].each do |type| ['themes', 'javascripts', 'images'].each do |type|
eval("#{type}_entries").each do |entry| eval("#{type}_entries").each do |entry|
filename = File.basename entry.to_s eval("design.#{type}").build(:file => get_temp_file(zip_file, dir, entry))
temp_file = File.new(dir + '/' + filename, 'w+')
temp_file.write (zip_file.read entry).force_encoding('UTF-8')
build_and_store = eval("design.#{type}").build
build_and_store.file = temp_file
build_and_store.to_save = true
end end
end end
} }
@ -149,4 +159,11 @@ class Admin::DesignsController < OrbitBackendController
} }
end end
def get_temp_file(zip_file, dir, entry)
filename = File.basename(entry.to_s)
temp_file = File.new(dir + '/' + filename, 'w+')
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
temp_file
end
end end

View File

@ -1,10 +1,11 @@
class Admin::InfosController < ApplicationController class Admin::InfosController < ApplicationController
layout "admin" layout "new_admin"
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :is_admin? before_filter :is_admin?
before_filter :set_attribute, :only => [:index, :show, :new, :edit] before_filter :set_attribute, :only => [:index, :show, :new, :edit]
helper Admin::AttributeValuesViewHelper
def index def index
@attributes = Info.all.entries @attributes = Info.all.entries
render :template => 'admin/attributes/index' render :template => 'admin/attributes/index'
@ -32,8 +33,8 @@ class Admin::InfosController < ApplicationController
def update def update
@attribute = Info.find(params[:id]) @attribute = Info.find(params[:id])
# binding.pry
@attribute.update_attributes(params[:info]) @attribute.update_attributes(params[:info])
@attribute.attribute_fields.each{|t| t.destroy if t["to_delete"] == true}
respond_to do |format| respond_to do |format|
format.html { redirect_to :action => :index } format.html { redirect_to :action => :index }
format.js { render 'admin/attributes/toggle_enable' } format.js { render 'admin/attributes/toggle_enable' }
@ -47,10 +48,10 @@ class Admin::InfosController < ApplicationController
end end
def add_attribute_field def add_attribute_field
@attribute = Info.find(params[:id]) rescue nil attribute = Info.find(params[:info_id]) rescue nil
if !@attribute @attribute_field_counter = attribute.attribute_fields.count
@attribute = Info.new @attribute_field = attribute.attribute_fields.build
end @attribute_field.save
end end
protected protected

View File

@ -4,7 +4,6 @@ class Admin::ItemsController < ApplicationController
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :find_parent_item before_filter :find_parent_item
before_filter :find_snippets, :only => :index
before_filter :is_admin? before_filter :is_admin?
before_filter :set_current_item before_filter :set_current_item
@ -22,10 +21,4 @@ class Admin::ItemsController < ApplicationController
render :nothing => true render :nothing => true
end end
protected
def find_snippets
@snippets = Snippet.where( { :parent_id => @parent_item.id } ) rescue nil
end
end end

View File

@ -23,7 +23,7 @@ class Admin::LinksController < ApplicationController
@item = Link.new(params[:link]) @item = Link.new(params[:link])
if @item.save if @item.save
flash.now[:notice] = t('admin.create_success_link') flash.now[:notice] = t('create.success.link')
respond_to do |format| respond_to do |format|
format.html { format.html {
redirect_to admin_link_url(@item) redirect_to admin_link_url(@item)
@ -31,7 +31,7 @@ class Admin::LinksController < ApplicationController
format.js {} format.js {}
end end
else else
flash.now[:error] = t('admin.create_error_link') flash.now[:error] = t('create.error.link')
render :action => "new" render :action => "new"
end end
end end
@ -40,7 +40,7 @@ class Admin::LinksController < ApplicationController
@item = Link.find(params[:id]) @item = Link.find(params[:id])
if @item.update_attributes(params[:link]) if @item.update_attributes(params[:link])
flash.now[:notice] = t('admin.update_success_link') flash.now[:notice] = t('update.success.link')
respond_to do |format| respond_to do |format|
format.html { format.html {
redirect_to admin_link_url(@item) redirect_to admin_link_url(@item)
@ -48,7 +48,7 @@ class Admin::LinksController < ApplicationController
format.js {} format.js {}
end end
else else
flash.now[:error] = t('admin.update_error_link') flash.now[:error] = t('update.error.link')
render :action => "edit" render :action => "edit"
end end
end end

View File

@ -66,14 +66,14 @@ class Admin::ModuleAppsController < ApplicationController
def assign_sub_manager def assign_sub_manager
unless @assign_to_user.nil? || @assign_to_user.admin? unless @assign_to_user.nil? || @assign_to_user.admin?
if @module_app.assign_sub_manager(@assign_to_user,current_user) if @module_app.assign_sub_manager(@assign_to_user,current_user)
flash[:notice] = t('admin.app_auth.assigning_manager.add_sub_manager_ok') flash[:notice] = t('app_auth.assigning_manager.add_manager_ok')
else else
flash[:notice] = t('admin.app_auth.assigning_manager.add_sub_manager_fail') flash[:notice] = t('app_auth.assigning_manager.add_manager_fail')
end end
else else
flash[:notice] = t('admin.app_auth.assigning_manager.failed_no_user') flash[:notice] = t('app_auth.failed_no_user')
end end
flash[:notice] = t('admin.app_auth.can_not_add_this_user') flash[:notice] = t('app_auth.can_not_add_this_user')
redirect_to :action => "edit" redirect_to :action => "edit"
end end
@ -81,14 +81,14 @@ class Admin::ModuleAppsController < ApplicationController
def assign_manager def assign_manager
unless @assign_to_user.nil? || @assign_to_user.admin? unless @assign_to_user.nil? || @assign_to_user.admin?
if @module_app.assign_manager(@assign_to_user,current_user) if @module_app.assign_manager(@assign_to_user,current_user)
flash[:notice] = t('admin.app_auth.assigning_sub_manager.add_manager_ok') flash[:notice] = t('app_auth.assigning_sub_manager.add_sub_manager_ok')
else else
flash[:notice] = t('admin.app_auth.assigning_sub_manager.add_manager_fail') flash[:notice] = t('app_auth.assigning_sub_manager.add_sub_manager_fail')
end end
else else
flash[:notice] = t('admin.app_auth.assigning_sub_manager.failed_no_user') flash[:notice] = t('app_auth.failed_no_user')
end end
flash[:notice] = t('admin.app_auth.can_not_add_this_user') flash[:notice] = t('app_auth.can_not_add_this_user')
redirect_to :action => "edit" redirect_to :action => "edit"
end end
@ -96,9 +96,9 @@ class Admin::ModuleAppsController < ApplicationController
def remove_manager def remove_manager
@app_manager = AppManager.find(params[:app_manager_id]) @app_manager = AppManager.find(params[:app_manager_id])
if @module_app.remove_manager(@app_manager.user) if @module_app.remove_manager(@app_manager.user)
flash[:notice] = t('admin.app_auth.delete_manager.success') flash[:notice] = t('app_auth.delete_manager.success')
else else
flash[:notice] = t('admin.app_auth.delete_manager.fail') flash[:notice] = t('app_auth.delete_manager.fail')
end end
redirect_to :action => "edit" redirect_to :action => "edit"
end end
@ -107,9 +107,9 @@ class Admin::ModuleAppsController < ApplicationController
def remove_sub_manager def remove_sub_manager
@app_sub_manager = AppManager.find(params[:app_sub_manager_id]) @app_sub_manager = AppManager.find(params[:app_sub_manager_id])
if @module_app.remove_sub_manager(@app_sub_manager.user) if @module_app.remove_sub_manager(@app_sub_manager.user)
flash[:notice] = t('admin.app_auth.delete_sub_manager.success') flash[:notice] = t('app_auth.delete_sub_manager.success')
else else
flash[:notice] = t('admin.app_auth.delete_sub_manager.fail') flash[:notice] = t('app_auth.delete_sub_manager.fail')
end end
redirect_to :action => "edit" redirect_to :action => "edit"
end end
@ -123,7 +123,7 @@ class Admin::ModuleAppsController < ApplicationController
return return
end end
#user is not permited to do that #user is not permited to do that
flash[:notice] = t('admin.app_auth.operation_not_permitted') flash[:notice] = t('app_auth.operation_not_permitted')
render :nothing => true, :status => 403 render :nothing => true, :status => 403
end end
@ -135,7 +135,7 @@ class Admin::ModuleAppsController < ApplicationController
return return
end end
#user is not permited to do that #user is not permited to do that
flash[:notice] = t('admin.app_auth.operation_not_permitted') flash[:notice] = t('app_auth.operation_not_permitted')
render :nothing => true, :status => 403 render :nothing => true, :status => 403
end end

View File

@ -25,9 +25,9 @@ class Admin::ModuleAppsNewInterfaceController < OrbitBackendController
def update_setting def update_setting
module_app = update_setting_by_params module_app = update_setting_by_params
if module_app.save! if module_app.save!
flash[:notice] = t("admin.object_auth.update_done") flash[:notice] = t('update.success_')
else else
flash[:notice] = t("admin.object_auth.update_failed") flash[:notice] = t('update.fail')
end end
end end

View File

@ -30,7 +30,7 @@ class Admin::ObjectAuthsController < ApplicationController
if @object_auth.save if @object_auth.save
redirect_to edit_admin_object_auth_path(@object_auth) redirect_to edit_admin_object_auth_path(@object_auth)
else else
flash[:error] = t('admin.object.a_object_must_have_only_one_object_auth_profile_for_each_action') flash[:error] = t('object.a_object_must_have_only_one_object_auth_profile_for_each_action')
redirect_to (:back) redirect_to (:back)
end end
end end
@ -91,7 +91,8 @@ private
def check_if_user_can_do_object_auth def check_if_user_can_do_object_auth
unless check_permission(:manager) unless check_permission(:manager)
render :nothing => true, :status => 403 #render :nothing => true, :status => 403
redirect_to '/'
end end
end end
end end

View File

@ -7,7 +7,7 @@ class Admin::ObjectAuthsNewInterfaceController < OrbitBackendController
@sys_users = User.all(conditions: {admin: false}).includes(:avatar) @sys_users = User.all(conditions: {admin: false}).includes(:avatar)
@ob_auth = ObjectAuth.find params[:object_auth_id] @ob_auth = ObjectAuth.find params[:object_auth_id]
@options_from_collection_for_select_ob_auth = [@ob_auth].collect{|oa| [oa.auth_obj.pp_object,oa.id] } @options_from_collection_for_select_ob_auth = @ob_auth.siblings.collect{|oa| [oa.auth_obj.pp_object,oa.id] }
@users_array = @ob_auth.privilege_users rescue [] @users_array = @ob_auth.privilege_users rescue []
respond_to do |format| respond_to do |format|
@ -19,9 +19,9 @@ class Admin::ObjectAuthsNewInterfaceController < OrbitBackendController
def update_setting def update_setting
ob_auth = update_setting_by_params ob_auth = update_setting_by_params
if ob_auth.save! if ob_auth.save!
flash[:notice] = t("admin.object_auth.update_done") flash[:notice] = t('update.success_')
else else
flash[:notice] = t("admin.object_auth.update_failed") flash[:notice] = t('update.fail')
end end
end end
@ -38,10 +38,12 @@ class Admin::ObjectAuthsNewInterfaceController < OrbitBackendController
users_to_remove = oa.auth_users - user_sat users_to_remove = oa.auth_users - user_sat
users_to_new.each do |new_user| users_to_new.each do |new_user|
oa.privilege_users << new_user
oa.add_user_to_privilege_list(new_user) oa.add_user_to_privilege_list(new_user)
end end
users_to_remove.each do |remove_user| users_to_remove.each do |remove_user|
oa.privilege_users.delete_if{|user| user == remove_user}
oa.remove_user_from_privilege_list(remove_user) oa.remove_user_from_privilege_list(remove_user)
end end
oa oa
@ -63,8 +65,26 @@ class Admin::ObjectAuthsNewInterfaceController < OrbitBackendController
def check_if_user_can_do_object_auth def check_if_user_can_do_object_auth
unless check_permission(:manager) unless check_permission(:manager)
render :nothing => true, :status => 403 redirect_to '/'
end end
end end
def check_permission(var)
#app = ModuleApp.first({conditions:{key: params[:module_app_key]}})
# setup_vars
@module_app.is_manager?(current_user) || current_user.admin?
end
def setup_vars
if request.env['HTTP_REFERER'].split('/')[4] == "object_auths"
@app_key = params[:app_key]
else
@app_key = request.env['HTTP_REFERER'].split('/')[4]
end
#@app_key = request.fullpath.split('/')[1] if(@app_key == "back_end")
@app_key.gsub!(/[?].*/,'')
@module_app = ModuleApp.first(conditions: {:key => @app_key} )
end
end end

View File

@ -61,7 +61,7 @@ class Admin::PagePartsController < ApplicationController
if @part.update_attributes(params[:page_part]) if @part.update_attributes(params[:page_part])
set_children_sub_menu(@part) if @part.public_r_tag && @part.public_r_tag.eql?('sub_menu') set_children_sub_menu(@part) if @part.public_r_tag && @part.public_r_tag.eql?('sub_menu')
flash.now[:notice] = t('admin.update_success_content') flash.now[:notice] = t('update.success.content')
if @part.page.name == 'home' if @part.page.name == 'home'
expire_page '/' expire_page '/'

View File

@ -72,7 +72,7 @@ class Admin::PagesController < ApplicationController
end end
if @item.save if @item.save
flash.now[:notice] = t('admin.create_success_page') flash.now[:notice] = t('create.success.page')
respond_to do |format| respond_to do |format|
format.html { format.html {
redirect_to admin_page_url(@item) redirect_to admin_page_url(@item)
@ -80,7 +80,7 @@ class Admin::PagesController < ApplicationController
format.js {} format.js {}
end end
else else
flash.now[:error] = t('admin.create_error_page') flash.now[:error] = t('create.error.page')
@apps = ModuleApp.all @apps = ModuleApp.all
@designs = Design.all.entries @designs = Design.all.entries
@design = Design.first @design = Design.first
@ -99,7 +99,7 @@ class Admin::PagesController < ApplicationController
params[:page][:frontend_field_type] = nil params[:page][:frontend_field_type] = nil
if @item.update_attributes(params[:page]) if @item.update_attributes(params[:page])
flash[:notice] = t('admin.update_success_page') flash[:notice] = t('update.success.page')
respond_to do |format| respond_to do |format|
format.html { format.html {
redirect_to admin_page_url(@item) redirect_to admin_page_url(@item)

View File

@ -71,8 +71,8 @@ class Admin::PurchasesController < ApplicationController
Dir.mktmpdir('f_path') { |dir| Dir.mktmpdir('f_path') { |dir|
build_file(orig_zip, zip_name, dir, design.layout) if design.layout build_file(orig_zip, zip_name, dir, design.layout) if design.layout
build_file(orig_zip, zip_name, dir, design.default_css) if design.default_css build_file(orig_zip, zip_name, dir, design.css_default) if design.css_default
build_file(orig_zip, zip_name, dir, design.reset_css) if design.reset_css build_file(orig_zip, zip_name, dir, design.css_reset) if design.css_reset
['themes', 'javascripts', 'images'].each do |type| ['themes', 'javascripts', 'images'].each do |type|
design.send(type).each do |object| design.send(type).each do |object|

View File

@ -1,81 +0,0 @@
class Admin::TranslationsController < ApplicationController
layout "admin"
before_filter :authenticate_user!
before_filter :is_admin?
def index
set_variables
end
def edit
set_variables
end
# Update either the i18n_variables or the languages
def update
begin
case params[:id]
# Update the i18n_variables
when 'all'
params[:i18n_variables].each do |id, var|
i18n_variable = I18nVariable.find(id)
i18n_variable.update_attributes(var)
end
# Add a language
when 'add'
site = Site.find(session[:site])
if !site.valid_locales.include?(params[:language])
site.valid_locales << params[:language]
site.save
I18nVariable.create({:key => params[:language], :document_class => 'language'})
end
# Enable a language
when 'enable'
site = Site.find(session[:site])
if !site.in_use_locales.include?(params[:enable_language])
site.in_use_locales << params[:enable_language]
site.save
end
# Disable a language
when 'disable'
site = Site.find(session[:site])
if site.in_use_locales.include?(params[:disable_language])
site.in_use_locales.delete(params[:disable_language])
site.save
end
# Delete a language and the corresponding i18n_variables
when 'delete'
site = Site.find(session[:site])
site.in_use_locales.delete(params[:delete_language])
site.valid_locales.delete(params[:delete_language])
site.save
I18nVariable.destroy_all(:conditions => {:document_class => 'language', :key => params[:delete_language]})
end
redirect_to admin_translations_url
rescue
set_variables
render :action => :edit
end
end
protected
# Get the i18n_variables and languages
def set_variables
@i18n_variables = I18nVariable.all.entries
@language_i18n_variables = @i18n_variables.inject([]) do |result, var|
result << var if var.document_class.eql?('language')
result
end
@role_i18n_variables = @i18n_variables.inject([]) do |result, var|
result << var if var.document_class.eql?('Role')
result
end
@info_i18n_variables = @i18n_variables.inject([]) do |result, var|
result << var if var.document_class.eql?('UserInfoModel')
result
end
end
end

View File

@ -22,7 +22,7 @@ class Admin::UsersController < ApplicationController
puts params.to_yaml puts params.to_yaml
@user = User.new(params[:user]) @user = User.new(params[:user])
if @user.save if @user.save
flash[:notice] = t('admin.create_success_user') flash[:notice] = t('create.success.user')
redirect_to :action => :index redirect_to :action => :index
else else
render :action => :new render :action => :new
@ -42,10 +42,10 @@ class Admin::UsersController < ApplicationController
@user.avatar = params[:file] if params[:file] @user.avatar = params[:file] if params[:file]
if @user.id.to_s.eql?(session['warden.user.user.key'][1].to_s) && @user.admin != params[:user][:admin].to_i.to_b if @user.id.to_s.eql?(session['warden.user.user.key'][1].to_s) && @user.admin != params[:user][:admin].to_i.to_b
flash.now[:error] = t('admin.cant_revoke_self_admin') flash.now[:error] = t(:cant_revoke_self_admin)
end end
if !flash[:error] && @user.update_attributes(params[:user]) if !flash[:error] && @user.update_attributes(params[:user])
flash[:notice] = t('admin.update_success_user') flash[:notice] = t('update.success.user')
redirect_to :action => :index redirect_to :action => :index
else else
get_info_and_roles get_info_and_roles
@ -55,7 +55,7 @@ class Admin::UsersController < ApplicationController
def destroy def destroy
if params[:id].eql?(session['warden.user.user.key'][1].to_s) if params[:id].eql?(session['warden.user.user.key'][1].to_s)
flash[:error] = t('admin.cant_delete_self') flash[:error] = t(:cant_delete_self)
else else
@user = User.find(params[:id]) @user = User.find(params[:id])
@user.destroy @user.destroy

View File

@ -33,28 +33,12 @@ class Admin::UsersNewInterfaceController < ApplicationController
@student_data = [] @student_data = []
@staff_data = [] @staff_data = []
attribute_values = @user.attribute_values
attribute_values = @user.attribute_values.reject{|att_val|
# binding.pry if(att_val.id.to_s == '507fa1295789b52a540000e0')
!att_val.attribute_field.locale and (att_val.attribute_field.neutral_for != I18n.locale.to_s)
}
attribute_values.each{|att_val| attribute_values.each{|att_val|
@profile_data.push({:name => att_val.attribute_field.title,:value =>att_val.get_value_by_locale(I18n.locale)}) if att_val.attribute_field.attribute.key=="profile" rescue false binding.pry if att_val.id.to_s == '5052dab52b5c49ae9d000006'
@profile_data.push({:name => att_val.attribute_field.title,:value =>att_val.get_value_by_locale(I18n.locale.to_s)}) if att_val.attribute_field.attribute.key=="profile" rescue false
} }
attribute_values.each{|att_val|
@teacher_data.push({:name => att_val.attribute_field.title,:value => att_val.get_value_by_locale(I18n.locale) }) if att_val.attribute_field.role.key=="teacher"rescue false
}
attribute_values.each{|att_val|
@student_data.push({:name => att_val.attribute_field.title,:value => att_val.get_value_by_locale(I18n.locale) }) if att_val.attribute_field.role.key=="student"rescue false
}
attribute_values.each{|att_val|
@staff_data.push({:name => att_val.attribute_field.title,:value => att_val.get_value_by_locale(I18n.locale) }) if att_val.attribute_field.role.key=="staff_data"rescue false
}
if(!params[:show_plugin_profile].nil?) if(!params[:show_plugin_profile].nil?)
@right_partial = OrbitApp::Plugin::Registration.find_by_key(params[:show_plugin_profile]).profile_partial_path rescue 'plugin_summary' @right_partial = OrbitApp::Plugin::Registration.find_by_key(params[:show_plugin_profile]).profile_partial_path rescue 'plugin_summary'
@ -81,22 +65,23 @@ class Admin::UsersNewInterfaceController < ApplicationController
def new def new
@user = User.new @user = User.new
@disable_all_field = true # @disable_all_field = true
@form_index = 0 @form_index = 0
get_info_and_roles get_info_and_roles
end end
def create def create
puts params.to_yaml puts params.to_yaml
attribute_values_key = params[:user].has_key?('new_attribute_values') ? 'new_attribute_values' : 'attribute_values' # attribute_values_key = params[:user].has_key?('new_attribute_values') ? 'new_attribute_values' : 'attribute_values'
attribute_values = params[:user].delete(attribute_values_key) # attribute_values = params[:user].delete(attribute_values_key)
@user = User.new(params["user"]) @user = User.new(params["user"])
attribute_values.to_hash.each{|key,value| # attribute_values.to_hash.each{|key,value|
@user.attribute_values.build(value) # @user.attribute_values.build(value)
} # }
@user.rebuild_sub_roles_from_attribute_values!(attribute_values) # @user.rebuild_sub_roles_from_attribute_values!(attribute_values)
binding.pry
if @user.save if @user.save
flash[:notice] = t('admin.create_success_user') flash[:notice] = t('create.success.user')
redirect_to :action => :index redirect_to :action => :index
else else
@form_index = 0 @form_index = 0
@ -111,7 +96,7 @@ class Admin::UsersNewInterfaceController < ApplicationController
end end
def edit def edit
@disable_all_field = false # @disable_all_field = false
@user = User.find(params[:id]) @user = User.find(params[:id])
@form_index = 0 @form_index = 0
get_info_and_roles get_info_and_roles
@ -122,7 +107,7 @@ class Admin::UsersNewInterfaceController < ApplicationController
@user.update_attributes(params[:user]) @user.update_attributes(params[:user])
attribute_values_key = params[:user].has_key?('new_attribute_values') ? 'new_attribute_values' : 'attribute_values' attribute_values_key = params[:user].has_key?('new_attribute_values') ? 'new_attribute_values' : 'attribute_values'
attribute_values = params[:user].delete(attribute_values_key) attribute_values = params[:user].delete(attribute_values_key)
@user.rebuild_sub_roles_from_attribute_values!(attribute_values) # @user.rebuild_sub_roles_from_attribute_values!(attribute_values)
@user.save @user.save
redirect_to :action => :show redirect_to :action => :show
# # Update changes to the avatar # # Update changes to the avatar
@ -130,10 +115,10 @@ class Admin::UsersNewInterfaceController < ApplicationController
# @user.avatar = params[:file] if params[:file] # @user.avatar = params[:file] if params[:file]
# if @user.id.to_s.eql?(session['warden.user.user.key'][1].to_s) && @user.admin != params[:user][:admin].to_i.to_b # if @user.id.to_s.eql?(session['warden.user.user.key'][1].to_s) && @user.admin != params[:user][:admin].to_i.to_b
# flash.now[:error] = t('admin.cant_revoke_self_admin') # flash.now[:error] = t(:cant_revoke_self_admin)
# end # end
# if !flash[:error] && @user.update_attributes(params[:user]) # if !flash[:error] && @user.update_attributes(params[:user])
# flash[:notice] = t('admin.update_success_user') # flash[:notice] = t('update.success.user')
# redirect_to :action => :index # redirect_to :action => :index
# else # else
# get_info_and_roles # get_info_and_roles
@ -143,7 +128,7 @@ class Admin::UsersNewInterfaceController < ApplicationController
def destroy def destroy
if params[:id].eql?(session['warden.user.user.key'][1].to_s) if params[:id].eql?(session['warden.user.user.key'][1].to_s)
flash[:error] = t('admin.cant_delete_self') flash[:error] = t(:cant_delete_self)
else else
@user = User.find(params[:id]) @user = User.find(params[:id])
@user.destroy @user.destroy

View File

@ -76,7 +76,7 @@ class ApplicationController < ActionController::Base
if is_admin? if is_admin?
true true
else else
flash[:error] = t("admin.access.denied.not_admin") flash[:error] = t("access.denied.not_admin")
auth_failed_in_backend auth_failed_in_backend
end end
end end
@ -85,7 +85,7 @@ class ApplicationController < ActionController::Base
if is_manager? if is_manager?
true true
else else
flash[:error] = t("admin.access.denied.app.not_manager") flash[:error] = t("access.denied.app.not_manager")
auth_failed_in_backend auth_failed_in_backend
end end
end end
@ -94,7 +94,7 @@ class ApplicationController < ActionController::Base
if (@module_app.sub_managing_users.include?(current_or_guest_user) || is_manager?) if (@module_app.sub_managing_users.include?(current_or_guest_user) || is_manager?)
true true
else else
flash[:error] = t("admin.access.denied.app.not_sub_manager") flash[:error] = t("access.denied.app.not_sub_manager")
auth_failed_in_backend auth_failed_in_backend
end end
end end
@ -103,13 +103,13 @@ class ApplicationController < ActionController::Base
if (@module_app.app_auth.auth_users.include?(current_or_guest_user) || for_app_sub_manager ) if (@module_app.app_auth.auth_users.include?(current_or_guest_user) || for_app_sub_manager )
true true
else else
flash[:error] = t("admin.access.denied.app.not_authed_user") flash[:error] = t("access.denied.app.not_authed_user")
auth_failed_in_backend auth_failed_in_backend
end end
end end
def check_object_premission(obj,title) def check_object_premission(obj,title)
flash[:error] = t("admin.access.denied.object") flash[:error] = t("access.denied.object")
auth_failed_in_backend unless (obj.get_object_auth_by_title(title).auth_users.include?(current_or_guest_user) || is_manager? || is_admin? ) auth_failed_in_backend unless (obj.get_object_auth_by_title(title).auth_users.include?(current_or_guest_user) || is_manager? || is_admin? )
end end
@ -129,7 +129,9 @@ class ApplicationController < ActionController::Base
object_class = params[:model].classify.constantize object_class = params[:model].classify.constantize
@object = object_class.find(params[:id]) @object = object_class.find(params[:id])
module_app = ModuleApp.first(:conditions => {:key => params[:key]}) module_app = ModuleApp.first(:conditions => {:key => params[:key]})
@item = Item.where(module_app_id: module_app.id).all_of("tag" => {"$in" => [nil,'']},"category" => { "$in" => [nil,'']}).first @item = @object.share_item
#@item = Item.where(module_app_id: module_app.id).all_of("tag" => {"$in" => [nil,'']},"category" => { "$in" => [nil,'']}).first
#binding.pry
@orig_url = "http://#{request.host_with_port}/#{@item.path}?id=#{@object.id}" @orig_url = "http://#{request.host_with_port}/#{@item.path}?id=#{@object.id}"
render 'shared/render_share', :layout => false render 'shared/render_share', :layout => false
end end

View File

@ -103,11 +103,41 @@ class DesktopController< ApplicationController
def getgroups def getgroups
@section = Section.find(params["sectionid"]) @section = Section.find(params["sectionid"])
@groups = @section.groups @groups = @section.groups
a = Array.new
gr = Array.new
@groups.each do |group| @groups.each do |group|
a << group.tiles a = Array.new
t = group.tiles
t.each do |tile|
data_content = ""
jsfile = []
cssfile = ""
shape = "w1 h1"
if tile.data_category == "widget"
widge = DesktopWidget.find(tile.desktop_widget_id.to_s)
# data_content = widge.widget_layout.file
data_content = "desktop/widget_layout?id="+tile.desktop_widget_id.to_s
jsfile = widge.javascripts.collect{|js| js.file}
cssfile = widge.css_default.file
shape = widge.shape
title = widge.name
else
data_content = tile.data_content
title = tile.title
end
a << {"id"=>tile.id,"data_category"=>tile.data_category,"data_content"=>data_content,"js"=>jsfile,"css"=>cssfile,"shape"=>shape,"position"=>tile.position,"title"=>title}
end
gr << a
end end
render :json =>a.to_json render :json =>gr.to_json
end
def widget_layout
widget = DesktopWidget.find(params[:id])
link = '<link href="'+widget.css_default.file.to_s+'" media="screen" rel="stylesheet" type="text/css" />'
content = widget.widget_layout.body
dhtml = link + content
render :text => dhtml.html_safe
end end
def getsectionlist def getsectionlist

View File

@ -8,6 +8,7 @@ class DesktopPublicationsController< ApplicationController
end end
def journal_p_add def journal_p_add
debugger
render "desktop/journal_pages/add", :layout => false render "desktop/journal_pages/add", :layout => false
end end

View File

@ -0,0 +1,62 @@
class DesktopWidgetsController < OrbitBackendController
require "net/http"
require "uri"
require 'zip/zip'
def index
end
def upload
if !params[:desktop_widget].nil?
temp_file = Tempfile.new("temp_file")
original_file = params[:desktop_widget][:package_file]
#if original_file.content_type == 'application/zip'
temp_file.write(original_file.read.force_encoding('UTF-8'))
temp_file.rewind
filename = File.basename(original_file.original_filename,".zip")
unzip_widget(temp_file, filename)
#else
# flash[:error] = "Upload file should be in zip format"
#end
temp_file.close
end
end
def unzip_widget(file, zip_name)
Zip::ZipFile.open(file) { |zip_file|
dw = DesktopWidget.new.from_json(zip_file.read("#{zip_name}/settings.json"))
Dir.mktmpdir('f_path') { |dir|
javascripts_entries = []
images_entries = []
zip_file.entries.each do |entry|
case (path = entry.to_s)
when /\A(#{zip_name})\/(default\.css)\z/
#for default css
dw.build_css_default(:file => get_temp_file(zip_file, dir, entry))
when /\A(#{zip_name})\/(widget\.html)\z/ #for layout html
dw.build_widget_layout(:file => get_temp_file(zip_file, dir, entry))
when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/ #for js
javascripts_entries << entry
when /\A(#{zip_name})\/(images)\/.*((\.jpg)|(\.png)|(\.gif))\z/ #for img
images_entries << entry
end
end
['javascripts', 'images'].each do |type|
eval("#{type}_entries").each do |entry|
eval("dw.#{type}").build(:file => get_temp_file(zip_file, dir, entry))
end
end
}
dw.save
}
end
def get_temp_file(zip_file, dir, entry)
filename = File.basename(entry.to_s)
temp_file = File.new(dir + '/' + filename, 'w+')
temp_file.write (zip_file.read entry ).force_encoding('UTF-8')
temp_file
end
end

View File

@ -1,4 +1,4 @@
class OrbitBackendController< ApplicationController class OrbitBackendController < ApplicationController
#before_filter :setup_vars #before_filter :setup_vars
#before_filter :set_current_user #before_filter :set_current_user
@ -11,17 +11,15 @@ class OrbitBackendController< ApplicationController
layout 'new_admin' layout 'new_admin'
def setup_vars def setup_vars
@app_title = request.fullpath.split('/')[2] @app_title = controller_path.split('/')[1].singularize
@app_title = request.fullpath.split('/')[1] if(@app_title == "back_end") @module_app ||= ModuleApp.first(conditions: {:key => @app_title} )
@app_title.gsub!(/[?].*/,'')
@module_app = ModuleApp.first(conditions: {:key => @app_title} )
end end
private private
def force_order_for_visitor def force_order_for_visitor
setup_vars setup_vars
set_current_user set_current_user
end end

View File

@ -1,4 +1,4 @@
class OtheraccountsController< ApplicationController class Desktop::OtheraccountsController< ApplicationController
require 'open-uri' require 'open-uri'
require 'rexml/document' require 'rexml/document'
require 'net/http' require 'net/http'

View File

@ -1,26 +0,0 @@
class SessionsController < Devise::SessionsController
prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
include Devise::Controllers::InternalHelpers
# POST /resource/sign_in
def create
# login_password = params[:user][:password]
# login_uid = params[:user][:nccu_ldap_uid]
login_password = params[:user][:password]
login_email = params[:user][:login]
result = false
resource = User.first(conditions:{ email: login_email })
set_flash_message(:notice, :signed_in) if is_navigational_format?
if resource.nil?
logger.error "Can't find user #{login_email}"
flash[:notice] = t('devise.failure.invalid')
render :action => "new"
else
logger.info "=== passed"
resource_name = resource.class.to_s.downcase
sign_in(resource_name, resource)
respond_with resource, :location => redirect_location(resource_name, resource)
end
end
end

View File

@ -22,8 +22,8 @@ module Admin::AdBannersHelper
ad_banner.object_auths.new(title: type ).save ad_banner.object_auths.new(title: type ).save
oa = ad_banner.get_object_auth_by_title(type) oa = ad_banner.get_object_auth_by_title(type)
end end
# link_to t('announcement.bulletin.cate_auth'), edit_admin_object_auth_path(oa) # link_to t(:category_auth), edit_admin_object_auth_path(oa)
link_to t('admin.ad.cate_auth'),admin_object_auth_ob_auth_path(oa),:class => "btn btn-warning" link_to t(:category_auth),admin_object_auth_ob_auth_path(oa),:class => "btn btn-warning"
end end

View File

@ -0,0 +1,16 @@
module Admin::AttributeValuesViewHelper
OPT = [
["YYYY / MM / DD hh : mm","format1"],
["YYYY / MM / DD","format2"],
["YYYY / MM","format3"],
["YYYY","format4"]
]
def show_type_panel(attribute_field,type)
markup = attribute_field.markup
LIST[:markups][markup]["panel"] == type ? type : [type,'hide'].join(" ")
end
def name_to_id(str)
str.gsub(/\]/,'').gsub(/\[/,"_")
end
end

View File

@ -15,9 +15,9 @@ module Admin::ItemsHelper
ret << "<div class='with_action'><i class='icons-moves'></i>" ret << "<div class='with_action'><i class='icons-moves'></i>"
ret << (link_to node.title, dest, :class => 'js_history') ret << (link_to node.title, dest, :class => 'js_history')
ret << "<div class='quick-edit hide'>" ret << "<div class='quick-edit hide'>"
ret << (link_to t('admin.edit'), eval("edit_admin_#{node.class.to_s.downcase}_path(node)"), :class => 'js_history') if node.class.to_s.eql?('Page') ret << (link_to t(:edit), eval("edit_admin_#{node.class.to_s.downcase}_path(node)"), :class => 'js_history') if node.class.to_s.eql?('Page')
ret << (link_to t('admin.new_page'), new_admin_page_path(:parent_id => node.id), :class => 'new_page js_history') if node.class.to_s.eql?('Page') ret << (link_to t('new.page'), new_admin_page_path(:parent_id => node.id), :class => 'new_page js_history') if node.class.to_s.eql?('Page')
ret << (link_to t('admin.new_link'), new_admin_link_path(:parent_id => node.id), :class => 'new_link js_history') if node.class.to_s.eql?('Page') ret << (link_to t('new.link'), new_admin_link_path(:parent_id => node.id), :class => 'new_link js_history') if node.class.to_s.eql?('Page')
ret << (link_to t(:delete), eval("delete_admin_#{node.class.to_s.downcase}_path(node, :authenticity_token => form_authenticity_token)"), :confirm => t('sure?'), :class => 'delete js_history') ret << (link_to t(:delete), eval("delete_admin_#{node.class.to_s.downcase}_path(node, :authenticity_token => form_authenticity_token)"), :confirm => t('sure?'), :class => 'delete js_history')
ret << "</div>" ret << "</div>"
ret << "</div>" ret << "</div>"

View File

@ -15,6 +15,6 @@ module Admin::ModuleAppsHelper
def get_auth_by(manager_obj) def get_auth_by(manager_obj)
showing_name = manager_obj.rule_creator==current_user ? t('me') : manager_obj.rule_creator.name showing_name = manager_obj.rule_creator==current_user ? t('me') : manager_obj.rule_creator.name
t("admin.user_role.auth.auth_by",:user_display_name => showing_name) t("auth.auth_by",:user_display_name => showing_name)
end end
end end

View File

@ -0,0 +1,23 @@
module Admin::WebComponentHelper
include ActionView::Helpers::TagHelper
def alert_block_tag(title="",context="",*args)
content_tag(:div,:class=>"alert alert-block alert-error fade in") do
a = ActiveSupport::SafeBuffer.new
a << button_tag( 'x',:class=>"close",:data=>{:dismiss=>"alert"}) if (args.first[:close] rescue false)
a << content_tag(:h4,:class=>"alert-heading") do
title
end
a << content_tag(:p) do
context
end
# TODO : 可以提供更多功能
# a << content_tag(:p) do
# b = link_to("Take this action","",:class=>"btn btn-danger")
# b << link_to("Or do this","",:class=>"btn")
# b
# end
end
end
end

View File

@ -181,13 +181,13 @@ module ApplicationHelper
stylesheets << "<link href='/assets/bootstrap-orbit.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/bootstrap-orbit.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/style.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/style.css' rel='stylesheet' type='text/css' />\n"
end end
stylesheets << "<link href='#{page.design.reset_css.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.reset_css stylesheets << "<link href='#{page.design.css_reset.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_reset
stylesheets << "<link href='/assets/bootstrap.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/bootstrap.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/font-awesome.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/font-awesome.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/orbit-bar.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/orbit-bar.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='/assets/social-share-button.css' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='/assets/social-share-button.css' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='#{asset_path 'banner_nav.css'}' rel='stylesheet' type='text/css' />\n" stylesheets << "<link href='#{asset_path 'banner_nav.css'}' rel='stylesheet' type='text/css' />\n"
stylesheets << "<link href='#{page.design.default_css.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.default_css stylesheets << "<link href='#{page.design.css_default.file.url}' rel='stylesheet' type='text/css' />\n" if page.design.css_default
theme = page.design.themes.detect{ |d| d.id == page.theme_id } theme = page.design.themes.detect{ |d| d.id == page.theme_id }
stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme
stylesheets stylesheets
@ -262,11 +262,15 @@ module ApplicationHelper
js << "<meta property='og:description' content='#{object.subtitle}' />\n" rescue '' js << "<meta property='og:description' content='#{object.subtitle}' />\n" rescue ''
js << "<meta property='og:image' content='#{object.image.url}' />\n" rescue '' js << "<meta property='og:image' content='#{object.image.url}' />\n" rescue ''
content_tag :div, :class => 'fb' do content_tag :div, :class => 'fb' do
concat social_share_button_tag(object.title, :fb_url => "http://#{request.env['HTTP_HOST']}/share/#{object.class.to_s.underscore}/#{object.id}?key=#{key}", :image => "http://#{request.env['HTTP_HOST']}#{object.image.url}") concat social_share_button_tag(object.title, :fb_url => generate_fb_url(object,key), :image => "http://#{request.env['HTTP_HOST']}#{object.image.url}")
# concat javascript_tag "$('head').append('#{j js}');" # concat javascript_tag "$('head').append('#{j js}');"
end end
end end
def generate_fb_url(object,key)
"http://#{request.env['HTTP_HOST']}/share/#{object.class.to_s.underscore}/#{object.id}?key=#{key}"
end
def wrap_string_with(str,options={}) def wrap_string_with(str,options={})
line_width = options[:line_width] || 12 line_width = options[:line_width] || 12
wrap_mark = options[:wrap_mark] || "<br />" wrap_mark = options[:wrap_mark] || "<br />"

View File

@ -9,14 +9,18 @@ module AttributeFieldsHelper
include ActionView::Helpers::RenderingHelper include ActionView::Helpers::RenderingHelper
def block_helper(user,index,disable = false) def block_helper(user,index,disable = false)
@index = index unless self.disabled
@markup_options = markup_options.merge(:disabled=>disable) @index = index
@user = user @markup_options = markup_options.merge(:disabled=>disable,:func=>"input_unit")
@attribute_value = @user.get_value_from_field_id(id) @user = user
@new_attribute = @attribute_value.nil? @attribute_value = @user.get_value_from_field_id(id)
@attribute_value = @attribute_value || @user.attribute_values.build(attribute_field_id: id) @new_attribute = @attribute_value.nil?
@prefiled_value = @attribute_value.get_values @attribute_value = @attribute_value || @user.attribute_values.build( attribute_field_id: id )
return instance_eval("render_#{markup}") #rescue "" @prefiled_value = @attribute_value.value
@panel_setting = self.get_data
return instance_eval("render_#{markup}") #rescue ""
end
end end
def lang_tab(str,lang) def lang_tab(str,lang)
@ -24,6 +28,7 @@ module AttributeFieldsHelper
end end
def render_address def render_address
#NP
control_group_wrapper do |key,value| control_group_wrapper do |key,value|
result = '<div class="input-append">'.html_safe result = '<div class="input-append">'.html_safe
@ -44,34 +49,55 @@ module AttributeFieldsHelper
end end
def render_checkbox def render_checkbox
markup_value = eval(self.markup_value) rescue {}
@prefiled_value ||=[]
# begin
# markup_value = eval(self.markup_value)
# rescue
# markup_value = self.markup_value
# ensure
# markup_value ||= {}
# end
control_group_wrapper do control_group_wrapper do
markup_value.collect do |key,value| a = self[:option_list].collect do |key,value|
label_tag(key,check_box_tag(get_field_name_base+"[value][#{key}]", value[I18n.locale.to_s], (@prefiled_value.include?(key) ? true : false), {})+value[I18n.locale.to_s],@markup_options.merge(:class=>"control-label")) label_tag(key,check_box_tag(get_field_name_base+"[#{key}]", true , (@prefiled_value.include?(key) ? true : false), {})+value[I18n.locale.to_s],@markup_options.merge(:class=>"control-label"))
end.join rescue "" end.join rescue ""
end end
end end
def render_date def render_date
control_group_wrapper{date_select(get_field_name_base+"[value]",nil,@markup_options.merge(:default=>@prefiled_value),:class=>"input-small")} #NP
control_group_wrapper{date_select(get_field_name_base,nil,@markup_options.merge(:default=>@prefiled_value),:class=>"input-small")}
end end
def render_date_durnation #Need re-write low priority def render_date_durnation #Need re-write low priority
end end
def render_radio_button def render_radio_button
markup_value = eval(self.markup_value) rescue {} @prefiled_value ||=[]
control_group_wrapper do # begin
markup_value.collect do |key,value| # markup_value = eval(self.markup_value)
label_tag(key,radio_button_tag(get_field_name_base+"[value][#{key}]", value[I18n.locale.to_s], (@prefiled_value.include?(key) ? true : false), {})+value[I18n.locale.to_s],@markup_options.merge(:class=>"control-label")) # rescue
end.join rescue "" # markup_value = self.markup_value
# ensure
# markup_value ||= {}
# end
control_group_wrapper do
self[:option_list].collect do |key,value|
label_tag(key,radio_button_tag(get_field_name_base, key , (@prefiled_value.include?(key) ? true : false), {})+value[I18n.locale.to_s],@markup_options.merge(:class=>"control-label"))
end.join
end end
end end
def render_select def render_select
markup_value = eval(self.markup_value) rescue {}
control_group_wrapper{select_tag( get_field_name_base+"[value]",options_for_select(markup_value.collect{|p| [p[1][I18n.locale.to_s],p[0]]},@prefiled_value),@markup_options)} rescue "" prompt = @panel_setting[:prompt][I18n.locale] rescue nil
@markup_options.merge!(:prompt => prompt) unless prompt.nil?
# markup_value = (self.markup_value.is_a?(Hash) ? self.markup_value : eval(self.markup_value) )rescue {}
# check self[:option_list].collect{|p| [p[1][I18n.locale.to_s],p[0]]}
control_group_wrapper{select_tag( get_field_name_base,options_for_select(self.option_list.collect{|p| [p[1][I18n.locale.to_s],p[0]]},@prefiled_value),@markup_options)} rescue ""
end end
def render_text_area def render_text_area
@ -79,27 +105,35 @@ module AttributeFieldsHelper
if(add_more and value.is_a?(Hash)) if(add_more and value.is_a?(Hash))
values = value values = value
values.each_with_index.collect do |value,index| values.each_with_index.collect do |value,index|
text_area_tag(get_field_name_base + (key.nil? ? '' : "[#{key}][#{index}]"), value.last,@markup_options) place_holder= @panel_setting["placeholder"][key]
text_area_tag(get_field_name_base + (key.nil? ? '' : "[#{key}][#{index}]"), value.last,@markup_options.merge(:placeholder=>place_holder))
end.join.html_safe end.join.html_safe
else else
value = can_muti_lang_input ? @prefiled_value[key] : @prefiled_value value = can_muti_lang_input ? @prefiled_value[key] : @prefiled_value
key = can_muti_lang_input ? "[#{key}]" : "[value]" key = can_muti_lang_input ? "[#{key}]" : ""
text_area_tag(get_field_name_base + key, value,@markup_options) place_holder= @panel_setting["placeholder"][I18n.locale.to_s] rescue ''
text_area_tag(get_field_name_base + key, value,@markup_options.merge(:placeholder=>place_holder))
end end
end end
end end
def render_text_field def render_text_field
control_group_wrapper do |key,value| control_group_wrapper do |key,value|
if(add_more and value.is_a?(Hash)) if(add_more)
values = value values = value
values.each_with_index.collect do |value,index| result = ""
text_field_tag(get_field_name_base + (key.nil? ? '' : "[#{key}][#{index}]"), value.last,@markup_options) unless values.nil?
end.join.html_safe result = values.each_with_index.collect do |value,index|
place_holder= @panel_setting["placeholder"][key]
text_field_tag(get_field_name_base + (key.nil? ? '' : "[#{key}][#{index}]"), value.last,@markup_options.merge(:placeholder=>place_holder))
end.join.html_safe
end
result
else else
value = can_muti_lang_input ? @prefiled_value[key] : @prefiled_value value = (can_muti_lang_input ? @prefiled_value[key] : @prefiled_value) rescue nil
key = can_muti_lang_input ? "[#{key}]" : "[value]" key_field = can_muti_lang_input ? "[#{key}]" : ""
text_field_tag(get_field_name_base + key, value,@markup_options) place_holder= @panel_setting["placeholder"][key] rescue ''
text_field_tag(get_field_name_base + key_field, value,@markup_options.merge(:placeholder=>place_holder))
end end
end end
end end
@ -118,16 +152,18 @@ protected
if can_muti_lang_input if can_muti_lang_input
result << "<div class='tabbable'>" result << "<div class='tabbable'>"
result << "<div class='tab-content'>" result << "<div class='tab-content'>"
VALID_LOCALES.collect do |key| VALID_LOCALES.collect do |key|
value = @prefiled_value[key.to_s] rescue nil value = @prefiled_value[key.to_s] rescue nil
div_class = ["tab-pane" ,"fade"].join(" ") div_class = ["tab-pane" ,"fade"].join(" ")
div_class << (key == I18n.locale.to_s ? " active in" : '') div_class << (key == I18n.locale.to_s ? " active in" : '')
result << content_tag(:div,yield(key,value),:class=>div_class,:id=>"tab"+id.to_s+"_#{key}") result << content_tag(:div,yield(key,value),:class=>div_class,:id=>"tab"+id.to_s+"_#{key}")
end end
result << "</div>" result << "</div>"
result << "<ul class='nav nav-pills'>" result << "<ul class='nav nav-pills'>"
VALID_LOCALES.each do |key| VALID_LOCALES.each do |key|
result << content_tag(:li,link_to(I18n.t("langs."+key),"#tab"+id.to_s+"_#{key}",:data=>{:toggle=>"tab"}),:class=>(key == I18n.locale.to_s ? "active" : nil)) result << content_tag(:li,link_to(t(:_locale, :locale => key),"#tab"+id.to_s+"_#{key}",:data=>{:toggle=>"tab"}),:class=>(key == I18n.locale.to_s ? "active" : nil))
end end
result << "</ul>" result << "</ul>"
result << "</div>" result << "</div>"
@ -158,14 +194,13 @@ protected
def end_block def end_block
if @new_attribute if @new_attribute
hidden_field_tag(get_field_name_base+"[attribute_field_id]",id,:for=>"field_#{@index}") hidden_field_tag(get_basic_field_name_base+"[attribute_field_id]",id,:for=>"field_#{@index}")
else else
hidden_field_tag(get_field_name_base+"[id]",@attribute_value.id,:for=>"field_#{@index}") hidden_field_tag(get_basic_field_name_base+"[id]",@attribute_value.id,:for=>"field_#{@index}")
end end
end end
def get_field_name_base def get_basic_field_name_base
# "user[#{self.attribute._type.downcase.pluralize}][#{self.attribute._id.to_s}][attribute_values][#{attribute_value.id}]"
if @new_attribute if @new_attribute
"user[new_attribute_values][#{@index}]" "user[new_attribute_values][#{@index}]"
else else
@ -173,12 +208,16 @@ protected
end end
end end
def get_field_name_base
get_basic_field_name_base + "[value]"
end
def label def label
label_tag(key,title,:class=>"control-label") label_tag(key,title,:class=>"control-label",:func => "field_label")
end end
def can_muti_lang_input def can_muti_lang_input
locale and LIST[:markups][markup]["muti_lang_input_supprt"] LIST[:markups][markup]["muti_lang_input_supprt"] #and locale
end end
def can_add_more def can_add_more

View File

@ -45,7 +45,7 @@ module OrbitBackendHelper
end end
def show_toggle_archive_btn(object) def show_toggle_archive_btn(object)
object.disable ? t("object_disable.change_to_false") : t("object_disable.change_to_true") object.disable ? t(:disable) : t(:enable)
end end
end end

View File

@ -16,6 +16,6 @@ end
# FileUtils.mv(temp_file, File.join(Rails.root, 'public/static', 'nccu_calendar.xml')) # FileUtils.mv(temp_file, File.join(Rails.root, 'public/static', 'nccu_calendar.xml'))
puts "[#{ DateTime.now.strftime("%Y %D %H:%M")}]NccuCalendar Synced" puts "[#{ DateTime.now.strftime("%Y %D %H:%M")}]NccuCalendar Synced #{File.join(Rails.root, 'public/static', 'nccu_calendar.xml')}"
end end
end end

View File

@ -2,11 +2,11 @@ class AppManager
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
belongs_to :user belongs_to :user,index: true
belongs_to :managing_app, :polymorphic => true #,:class_name => 'ModuleApp',:inverse_of => :managers,:foreign_key => "user_id" belongs_to :managing_app, :polymorphic => true,index: true #,:class_name => 'ModuleApp',:inverse_of => :managers,:foreign_key => "user_id"
belongs_to :sub_managing_app, :polymorphic => true #,:class_name => 'ModuleApp',:inverse_of => :sub_manager,:foreign_key => "sub_user_id" belongs_to :sub_managing_app, :polymorphic => true #,:class_name => 'ModuleApp',:inverse_of => :sub_manager,:foreign_key => "sub_user_id"
belongs_to :rule_creator,:class_name => 'User' belongs_to :rule_creator,:class_name => 'User'
end end

View File

@ -0,0 +1,8 @@
class CssDefault < Stylesheet
# belongs_to :design
# belongs_to :desktop_widget
belongs_to :css, polymorphic: true
end

View File

@ -0,0 +1,5 @@
class CssReset < Stylesheet
belongs_to :design
end

View File

@ -3,25 +3,27 @@ class Design
include Mongoid::Timestamps include Mongoid::Timestamps
include ParserLayout include ParserLayout
field :title, :type => String
field :author, :type => String field :author, :type => String
field :intro, :type => String field :intro, :type => String
field :title, :type => String
field :version, :type => String field :version, :type => String
has_one :css_default, as: :css, :autosave => true, :dependent => :destroy
has_one :layout, :autosave => true, :dependent => :destroy
has_one :css_reset, :autosave => true, :dependent => :destroy
has_many :images,as: :imgs, :autosave => true, :dependent => :destroy
has_many :javascripts, as: :js, :autosave => true, :dependent => :destroy
has_many :pages has_many :pages
has_many :themes, :autosave => true, :dependent => :destroy
embeds_one :layout, :cascade_callbacks => true
embeds_one :default_css, :class_name => "Stylesheet", :cascade_callbacks => true accepts_nested_attributes_for :images, :allow_destroy => true
embeds_one :reset_css, :class_name => "Stylesheet", :cascade_callbacks => true accepts_nested_attributes_for :javascripts, :allow_destroy => true
embeds_many :themes, :cascade_callbacks => true accepts_nested_attributes_for :themes, :allow_destroy => true
embeds_many :javascripts, :cascade_callbacks => true
embeds_many :images, :as => :design_image, :cascade_callbacks => true validates_presence_of :author, :title
# embeds_many :custom_images, :class_name => 'Image', :cascade_callbacks => true
validates_presence_of :title
validates_presence_of :author
after_save :parse_css_for_images after_save :parse_css_for_images
def new_files=(*attrs) def new_files=(*attrs)
attrs[0].map do |key,items_ary| #Loop by JSs,Themes,Imgs attrs[0].map do |key,items_ary| #Loop by JSs,Themes,Imgs
@ -66,13 +68,9 @@ class Design
protected protected
def parse_css_for_images def parse_css_for_images
if (self.default_css && self.default_css.changed) self.css_default.parse_urls
self.default_css.parse_urls
end
self.themes.each do |theme| self.themes.each do |theme|
if theme.changed? theme.parse_urls
theme.parse_urls
end
end end
parse_body_for_images(self) parse_body_for_images(self)
end end

View File

@ -4,7 +4,14 @@ class DesignFile
mount_uploader :file, AssetUploader mount_uploader :file, AssetUploader
field :to_save, :type => Boolean field :name
field :to_destroy, :type => Boolean
before_save :set_name
protected
def set_name
self.name = self.file_identifier
end
end end

View File

@ -1,11 +1,26 @@
class Image < DesignFile class Image
include Mongoid::Document
include Mongoid::Timestamps
field :in_css, :type => Boolean
field :name
field :html_id field :html_id
field :html_class field :html_class
field :in_css, :type => Boolean, :default => false
embedded_in :design_image, polymorphic: true field :in_html, :type => Boolean, :default => false
field :name
mount_uploader :file, ImageUploader mount_uploader :file, ImageUploader
end
# belongs_to :design
# belongs_to :desktop_widget
belongs_to :imgs, polymorphic: true
before_save :set_name
protected
def set_name
self.name = self.file_identifier
end
end

View File

@ -1,3 +1,6 @@
class Javascript < DesignFile class Javascript < DesignFile
embedded_in :design # belongs_to :design
# belongs_to :desktop_widget
belongs_to :js, polymorphic: true
end end

View File

@ -6,7 +6,7 @@ class Layout < DesignFile
field :body field :body
embeds_one :menu embeds_one :menu
embedded_in :design belongs_to :design
embeds_many :layout_parts embeds_many :layout_parts
before_save :parse_layout before_save :parse_layout

View File

@ -1,34 +1,40 @@
class Stylesheet < DesignFile class Stylesheet < DesignFile
embedded_in :design # belongs_to :design
mount_uploader :file_orig, AssetUploader mount_uploader :file_orig, AssetUploader
def parse_urls def parse_urls
orig_content = content = self.file.read.force_encoding("UTF-8") orig_content = content = self.file.read.force_encoding("UTF-8")
# self.remove_file! # self.remove_file!
# self.remove_file_orig! # self.remove_file_orig!
names = [] names = {}
images = self.design.images images = self.css.images
content.scan(/(?<=url)(.*?)(?=\))/){ content.scan(/(?<=url)(.*?)(?=\))/){
css_name = $1.gsub(' ','').gsub('(','') css_name = $1.gsub(' ','').gsub('(','')
name = File.basename(css_name).gsub(/[\\\"]/, '') unless names.has_key?(css_name)
file_name = images.detect{ |i| i.file_identifier.eql?(name) }.file_url rescue nil name = File.basename(css_name).gsub(/[\\\"]/, '')
names << [css_name, file_name] image = images.detect{ |i| i.file_identifier.eql?(name) } rescue nil
} if image
names.each do |name| image.update_attribute(:in_css, true)
content.gsub!(name[0], name[1]) if name[1] file_name = image.file_url
end names.merge!({css_name => file_name})
Dir.mktmpdir('f_path') { |dir| end
orig_file_name = self.file_identifier end
}
temp_file = File.new(dir + '/' + orig_file_name, 'w+') names.each_pair do |key, value|
temp_file.write orig_content.force_encoding("UTF-8") content.gsub!(key, value)
self.file_orig = temp_file end
Dir.mktmpdir('f_path') { |dir|
temp_file = File.new(dir + '/' + orig_file_name, 'w+') orig_file_name = self.file_identifier
temp_file.write content.force_encoding("UTF-8")
self.file = temp_file temp_file = File.new(dir + '/' + orig_file_name, 'w+')
self.save temp_file.write orig_content.force_encoding("UTF-8")
} self.file_orig = temp_file
end
temp_file = File.new(dir + '/' + orig_file_name, 'w+')
end temp_file.write content.force_encoding("UTF-8")
self.file = temp_file
self.save
}
end
end

View File

@ -1,14 +1,11 @@
class Theme < Stylesheet class Theme < Stylesheet
field :name
embedded_in :design belongs_to :design
before_save :set_name
protected protected
def set_name def set_name
self.name = File.basename(self.file_identifier,".css") self.name = File.basename(self.file_identifier, ".css")
end end
end end

View File

@ -2,14 +2,15 @@ class Desktop
include Mongoid::Document include Mongoid::Document
include Mongoid::Timestamps include Mongoid::Timestamps
field :theme, default: "4f8d3f493b67fcd05f086359" field :theme, default: "4f8d3f533b67fcd05f08635a"
field :customtheme field :customtheme
field :wallpaper field :wallpaper
belongs_to :user belongs_to :user
has_and_belongs_to_many :desktop_widgets, :autosave => true
has_many :sections, :autosave => true, :dependent => :destroy has_many :sections, :autosave => true, :dependent => :destroy
has_many :desktop_widgets, :autosave => true, :dependent => :destroy # has_many :desktop_widgets, :autosave => true, :dependent => :destroy
before_create :initialize_section before_create :initialize_section

View File

@ -0,0 +1,33 @@
class DesktopWidget
include Mongoid::Document
include Mongoid::Timestamps
include ParserLayoutWidget
field :name
field :author
field :shape
field :version, :type => String
has_one :css_default, as: :css, :autosave => true, :dependent => :destroy
has_one :widget_layout, :autosave => true, :dependent => :destroy
has_many :images, as: :imgs, :autosave => true, :dependent => :destroy
has_many :javascripts, as: :js, :autosave => true, :dependent => :destroy
has_and_belongs_to_many :desktops, :autosave => true
belongs_to :tiles, :autosave => true
accepts_nested_attributes_for :images, :allow_destroy => true
accepts_nested_attributes_for :javascripts, :allow_destroy => true
after_save :parse_css_for_images
# belongs_to :desktop
protected
def parse_css_for_images
self.css_default.parse_urls
parse_widget_for_images(self)
end
end

View File

@ -0,0 +1,18 @@
class Group
include Mongoid::Document
include Mongoid::Timestamps
belongs_to :section
has_many :tiles, :autosave => true, :dependent => :destroy
before_create :initialize_tile
def initialize_tile
self.tiles.build(data_category: "app", data_content: "quotes", position: 5, shape: "w1 h1", title: "Quotes")
self.tiles.build(data_category: "app", data_content: "dailyenglish", position: 6, shape: "w1 h1", title: "Daily English Word")
widgets = self.section.desktop.desktop_widgets.collect{|widget| widget.id}
for i in 0..3
self.tiles.build(data_category: "widget", position: i+1,desktop_widget_id: widgets[i])
end
end
end

View File

@ -9,6 +9,6 @@ class Tile
field :title field :title
belongs_to :group belongs_to :group
has_one :desktop_widget
end end

View File

@ -0,0 +1,18 @@
class WidgetLayout < DesignFile
attr_reader :content
field :body
belongs_to :desktop_widget
def content
self.file.read.force_encoding("UTF-8") rescue ''
end
def self.exist_one?
WidgetLayout.count > 0
end
end

View File

@ -1,13 +0,0 @@
class DesktopWidget
include Mongoid::Document
include Mongoid::Timestamps
field :name
field :author
field :shape
field :desktop_id
field :status
field :section
belongs_to :desktop
end

View File

@ -1,19 +0,0 @@
class Group
include Mongoid::Document
include Mongoid::Timestamps
belongs_to :section
has_many :tiles, :autosave => true, :dependent => :destroy
before_create :initialize_tile
def initialize_tile
self.tiles.build(data_category: "widget", data_content: "timetable", position: 1, shape: "w2 h2", title: "Tiime Table")
self.tiles.build(data_category: "app", data_content: "quotes", position: 2, shape: "w1 h1", title: "Quotes")
self.tiles.build(data_category: "widget", data_content: "weather", position: 3, shape: "w2 h2", title: "Weather")
self.tiles.build(data_category: "widget", data_content: "clock", position: 4, shape: "w2 h1", title: "Clock")
self.tiles.build(data_category: "app", data_content: "dailyenglish", position: 5, shape: "w1 h1", title: "Daily English Word")
self.tiles.build(data_category: "widget", data_content: "school_events", position: 6, shape: "w2 h1", title: "School Events")
end
end

View File

@ -48,7 +48,7 @@ class ModuleApp
def assign_manager(user,assigner) def assign_manager(user,assigner)
manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue nil manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue nil
if manager.nil? if manager.nil?
manager = self.managers.create(:user => user,:rule_creator => assigner) manager = self.managers.create(:user_id => user.id,:rule_creator_id => (assigner.id rescue nil))
end end
manager manager
end end
@ -56,7 +56,7 @@ class ModuleApp
def assign_sub_manager(user,assigner) def assign_sub_manager(user,assigner)
submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil
if submanager.nil? && !self.managing_users.include?(user) if submanager.nil? && !self.managing_users.include?(user)
submanager = self.sub_managers.create(:user => user,:rule_creator => assigner) submanager = self.sub_managers.create(:user_id => user.id,:rule_creator_id => (assigner.id rescue nil) )
end end
submanager submanager
end end
@ -82,7 +82,7 @@ class ModuleApp
protected protected
def set_key def set_key
self.key = self.title.underscore if self.title self.key = self.title.underscore.singularize if self.title
end end

View File

@ -2,23 +2,28 @@ class ObjectAuth < PrototypeAuth
include OrbitCoreLib::ObjectTokenUnility include OrbitCoreLib::ObjectTokenUnility
validates_uniqueness_of :title ,:scope => [:obj_authable_type,:obj_authable_id] #{ |c| } validates_uniqueness_of :title ,:scope => [:obj_authable_type,:obj_authable_id] #{ |c| }
belongs_to :obj_authable, polymorphic: true belongs_to :obj_authable, polymorphic: true
after_save :check_user_has_app_auth after_save :check_user_has_can_access_app
# > - Something.find_with_auth(query) # > - Something.find_with_auth(query)
# > - or Something.find(query).auth # > - or Something.find(query).auth
def siblings
ObjectAuth.where({obj_authable_type: obj_authable_type,title: title})
end
def auth_obj def auth_obj
class_obj = eval(self.obj_authable_type) class_obj = eval(self.obj_authable_type)
class_obj.find self.obj_authable_id class_obj.find self.obj_authable_id
end end
def check_user_has_app_auth def check_user_has_can_access_app
sub_managing_users = auth_obj.app_auth.sub_managing_users rescue [] sub_managing_users = auth_obj.module_app.sub_managing_users rescue []
app_auth = auth_obj.app_auth module_app = auth_obj.module_app
self.auth_users.each do |auth_user| self.auth_users.each do |auth_user|
if !sub_managing_users.include? auth_user && !auth_user.admin? if !sub_managing_users.include? auth_user && !auth_user.admin?
app_auth.assign_sub_manager(auth_user,User.current) module_app.assign_sub_manager(auth_user,User.current)
app_auth.save! module_app.save
end end
end end
end end
end end

110
app/models/preview.rb Normal file
View File

@ -0,0 +1,110 @@
class Preview
include Mongoid::Document
include Mongoid::Timestamps
# field :object_f, :type => Hash
field :object, :type=> Hash
field :preview_at_link
field :expired_at , :type => DateTime
field :link_args, :type => Array
field :object_class_type
has_many :preview_files, :autosave => true, :dependent => :destroy
has_many :preview_associations, :autosave => true, :dependent => :destroy
# def object=(params)
# save_upload_temp_link(params,"news_bulletin_files_attributes") #unless params[]
# self.object_f = params
# end
# def object
# return object_f
# end
# def save_upload_temp_link(params,field_name = "bulletin_files_attributes")
# image = preview_files.build(:file=>params[:image])
# params[:image] = image.id
# params[field_name].each_with_index do |item,index|
# bfa = preview_files.build(:file=>params[field_name][index.to_s][:file])
# params[field_name][index.to_s] = bfa.id
# end unless params[field_name].nil?
# end
# def dig_in_hash(hash,paths_ary)
# hash.each_pair do |key,in_hash|
# if in_hash.kind_of? Array
# dig_in_array(hash,paths_ary)
# elsif in_hash.kind_of? Hash
# dig_in_hash(hash,paths_ary)
# else
# puts("\n End Node: \t #{paths_ary.join } #{in_hash.class} : #{key}##{in_hash}")
# end
# end
# end
# def dig_in_array(array,paths_ary)
# array.each do |item|
# if item.kind_of? Array
# dig_in_array(hash,paths_ary)
# elsif item.kind_of? Hash
# dig_in_hash(hash,paths_ary)
# else
# puts("\n End Node: \t #{paths_ary.join } #{item.class} : {item}")
# end
# end
# end
# def dig_in_hash_old(hash,paths_ary)
# hash.each_pair do |k,in_hash|
# if (!in_hash.kind_of? Array and !in_hash.kind_of? Hash)
# #p "UploadedFile : #{in_hash.is_a? ActionDispatch::Http::UploadedFile}"
# #in_hash = "no file" if in_hash.is_a? ActionDispatch::Http::UploadedFile
# #in_hash.select{|key,hash| hash.is_a? ActionDispatch::Http::UploadedFile}
# puts("\n End Node:# \n")
# p "#{paths_ary.join } #{in_hash.class} : #{in_hash}"
# #p "UploadedFile(#{in_hash}) : #{in_hash.is_a? ActionDispatch::Http::UploadedFile}"
# else
# if (!in_hash.first.kind_of? Array and !in_hash.first.kind_of? Hash)
# paths_ary << "[#{in_hash.first}]"
# end
# puts("\n Go Down [#{in_hash.first}]\n")
# dig_in_hash(in_hash,paths_ary)
# puts("\n Go Out \n")
# end
# puts "This is last"
# paths_ary.pop
# end
# end
def get_arg_hash
object.slice(*link_args).inject({}){|la,(k,v)| la[k.to_sym] = v; la}
end
def get_preview_link
ap = Rails.application.routes.url_helpers
ap.send preview_at_link,({:id=>id,:preview=>true}.merge get_arg_hash)
#func = eval("Rails.application.routes.url_helpers.#{preview_at_link}").send
end
def get_virtual_object
virtual_object = eval(self.object_class_type).new object
preview_files.each do |file|
if file.file_in_array
eval("virtual_object.#{file.field_name_for_rebuild}.build :file=>file.file")
else
eval("virtual_object.#{file.field_name_for_rebuild} = file.file")
end
end
preview_associations.each do |local_object|
if local_object.object_in_array
eval("virtual_object.#{local_object.field_name_for_rebuild}.build local_object.object")
else
eval("virtual_object.#{local_object.field_name_for_rebuild} = local_object.object")
end
end
virtual_object
end
end

View File

@ -0,0 +1,16 @@
class PreviewAssociation
include Mongoid::Document
include Mongoid::Timestamps
field :object, :type=> Hash
field :field_name_for_rebuild
field :object_in_array , :type => Boolean,default: false
# field :to_save, :type => Boolean
field :should_destroy, :type => Boolean
belongs_to :preview
# embedded_in :news_bulletin
end

View File

@ -0,0 +1,19 @@
class PreviewFile
include Mongoid::Document
include Mongoid::Timestamps
mount_uploader :file, AssetUploader
field :title, localize: true
field :description, localize: true
field :field_name_for_rebuild
field :file_in_array , :type => Boolean,default: false
# field :to_save, :type => Boolean
field :should_destroy, :type => Boolean
belongs_to :preview
# embedded_in :news_bulletin
end

View File

@ -11,6 +11,7 @@ class Attribute
has_many :attribute_fields, :autosave => true, :dependent => :destroy has_many :attribute_fields, :autosave => true, :dependent => :destroy
accepts_nested_attributes_for :attribute_fields, :allow_destroy => true accepts_nested_attributes_for :attribute_fields, :allow_destroy => true
def is_built_in? def is_built_in?
self.built_in self.built_in
end end

View File

@ -5,26 +5,68 @@ class AttributeField
include ::AttributeFieldsHelper include ::AttributeFieldsHelper
field :key field :key
field :markup field :markup ,:default=>"text_field"
field :markup_value ,:type => Hash field :option_list ,:type => Hash,:default => {}
field :markup_options,:type => Hash field :markup_options,:type => Hash
field :locale, :type => Boolean, :default => true # field :locale, :type => Boolean, :default => true
# field :list_options, :type => Array # field :list_options, :type => Array
field :built_in, :type => Boolean, :default => false field :built_in, :type => Boolean, :default => false
field :disabled, :type => Boolean, :default => false field :disabled, :type => Boolean, :default => false
field :add_more,:type => Boolean, :default => false field :to_delete,:type=> Boolean,:default => false
field :typeA,:type=> Hash,:default=>{}
field :typeB,:type=> Hash,:default=>{}
field :typeC,:type=> Hash,:default=>{:claendar=>"west_claendar"}
field :typeD,:type=> Hash,:default=>{}
field :typeE,:type=> Hash,:default=>{}
#field :title, localize: true #field :title, localize: true
field :locale_title, localize: true field :title, localize: true
field :neutral_title
field :neutral_for
belongs_to :attribute belongs_to :attribute
# belongs_to :role # belongs_to :role
has_many :attribute_values has_many :attribute_values,:autosave => true, :dependent => :destroy
before_save :check_option_list
# validates_uniqueness_of :key # validates_uniqueness_of :key
def add_more
(get_data["add_more"] == "true" ? true : false) rescue false
end
def locale
default = true
if get_data["locale"].nil?
return default
else
(get_data["locale"] == "true" ? true : false) rescue default
end
end
def self_defined_markup_options?
(self.attribute.role.method(self[:key].pluralize.to_sym) && self.attribute.role.method(self[:key].pluralize+"_for_"+markup)) rescue false
end
def markup_value=(var)
if !self_defined_markup_options?
self[:markup_value] = (eval(var) rescue {})
end
end
def option_list
if self_defined_markup_options?
#Class need to have corresponding field and value agent
# Ex: For "status" the class must have field called "statuses" for the relation and "statuses_for_select" for the select function
method = self.attribute.role.method(self[:key].pluralize+"_for_"+markup)
return (method.call rescue {})
elsif self[:option_list].nil? || (self[:option_list].empty?)
return {}
else
return self[:option_list]
end
end
def markup_options=(var) def markup_options=(var)
self[:markup_options] = (eval(var) rescue {}) self[:markup_options] = (eval(var) rescue {})
@ -43,36 +85,49 @@ class AttributeField
self.attribute.role self.attribute.role
end end
def title_translations def panel
if locale panel = LIST[:markups][self[:markup]]["panel"]
return locale_title_translations
else
return Hash[VALID_LOCALES.map{|d| [d,neutral_title]}]
end
end end
def title_translations=(var) def get_data
if locale self[panel]
self.locale_title_translations = var
end
end end
def title
if locale
return self.locale_title
else
return self.neutral_title
end
end
def title=(var) # def title_translations
# binding.pry # if locale
if locale # return self.locale_title_translations
self.locale_title = var # else
else # return self[:neutral_title] #Hash[VALID_LOCALES.map{|d| [d,neutral_title]}]
self.neutral_title = var # end
end # end
end
# def title_translations=(var)
# if locale
# self.locale_title_translations = var
# end
# end
# def title
# if locale
# return self.locale_title
# else
# return self.neutral_title
# end
# end
# def check_title
# if locale
# self.locale_title_translations = self[:temp_title]
# else
# self.neutral_title = self[:temp_title]
# end
# self.unset("temp_title")
# end
# def title=(var)
# self["temp_title"] = var
# end
# # Convert the string list_options into an array # # Convert the string list_options into an array
# def select_list_options=(var) # def select_list_options=(var)
@ -92,4 +147,9 @@ class AttributeField
self.disabled self.disabled
end end
protected
def check_option_list
self[:option_list] = self[panel]["option_list"]
end
end end

View File

@ -10,9 +10,55 @@ class AttributeValue
belongs_to :user belongs_to :user
before_save :check_key before_save :check_key
before_save :data_proc
# NO_MULTI_TAG = ["select","date","radio_button","checkbox","date_durnation"] # NO_MULTI_TAG = ["select","date","radio_button","checkbox","date_durnation"]
def data_proc
# binding.pry
# binding.pry if self.attribute_field.markup == 'radio_button'
# if self.attribute_field
case self.attribute_field.markup
when 'text_field','text_area'
# binding.pry
self[:temp_data].each{|key,val|
self[key] = val
} unless self[:temp_data].nil?
when 'select','date','radio_button'
self["val"] = self[:temp_data]
when 'checkbox'
self["val"] = self[:temp_data].keys rescue {}
end #end of case
else # if not locale
case self.attribute_field.markup
when 'text_field','text_area'
self["val"] = self[:temp_data]
when 'select','date','radio_button'
self["val"] = self[:temp_data]
when 'checkbox'
self["val"] = self[:temp_data].keys rescue {}
end #end of case
# end #of if self.attribute_field
self.unset('temp_data')
end
def value
result=""
if self.attribute_field.locale && (self.attribute_field.markup == "text_field" || self.attribute_field.markup == "text_area")
result= Hash[VALID_LOCALES.collect{|lang| [lang,self[lang.to_sym]]}]
else
result = self["val"]
end
result
end
def value=(value)
#save everything to temp_data waiting for futher process
# binding
self[:temp_data] = value
end
def check_key def check_key
self.key = attribute_field.key self.key = attribute_field.key
end end
@ -26,45 +72,46 @@ class AttributeValue
end end
def get_value_by_locale(locale) def get_value_by_locale(locale)
case self.attribute_field.markup case self.attribute_field.markup
when "text_field" when "text_field"
self.attribute_field.locale ? self[locale] : self[:value] self.attribute_field.locale ? self[locale.to_s] : self.value
when "select" when "select"
markup_values = eval(self.attribute_field.markup_value) markup_values = self.attribute_field.self_defined_markup_options? ? self.attribute_field.markup_value : eval(self.attribute_field.markup_value)
markup_values[self[:value]][locale.to_s] rescue 'NoData' markup_values[self.value][locale.to_s] rescue 'NoData'
when "text_area" when "text_area"
self.attribute_field.locale ? self[locale] : self[:value] self.attribute_field.locale ? self[locale.to_s] : self.value
when "date" when "date"
Date.new(self[:value]["(1i)"].to_i,self[:value]["(2i)"].to_i,self[:value]["(3i)"].to_i) rescue nil Date.new(self[:val]["(1i)"].to_i,self[:val]["(2i)"].to_i,self[:val]["(3i)"].to_i) rescue nil
when "addr" when "addr"
self[:value] self.value
when "radio_button" when "radio_button"
markup_values = eval(self.attribute_field.markup_value) markup_values = eval(self.attribute_field.markup_value)
markup_values[self[:value].first[0]][locale.to_s] markup_values[:value][locale.to_s]
when "checkbox" when "checkbox"
markup_values = eval(self.attribute_field.markup_value) markup_values = self.attribute_field.markup_value
self[:value].keys.collect{|key| markup_values[key][locale.to_s] }.join(",") self[:value].keys.collect{|key| markup_values[key][locale.to_s]}.join(",")
when "date_durnation" when "date_durnation"
self[:value] self.value
else else
self.attribute_field.locale ? self[locale] : self[:value] self.attribute_field.locale ? self[locale.to_s] : self.value
end end
end end
def get_values # def get_values
unless ['select','checkbox','radio_button'].include?(self.attribute_field.markup ) # unless ['select','checkbox','radio_button'].include?(self.attribute_field.markup )
if self.attribute_field.locale && LIST[:markups][self.attribute_field.markup]["muti_lang_input_supprt"] # if self.attribute_field.locale && LIST[:markups][self.attribute_field.markup]["muti_lang_input_supprt"]
return Hash[VALID_LOCALES.collect{|lang| [lang,get_value_by_locale(lang.to_sym)]}] # return Hash[VALID_LOCALES.collect{|lang| [lang,get_value_by_locale(lang.to_sym)]}]
else # else
return get_value_by_locale("") # return get_value_by_locale("")
end # end
else # else
if self.attribute_field.markup == "select" # if self.attribute_field.markup == "select"
self[:value] # self[:value]
else # else
self[:value].keys # self[:value].keys rescue self[:value]
end # end
end # end
end # end
end end

View File

@ -27,4 +27,11 @@ class Role
self.first(:conditions => {:key => key}) self.first(:conditions => {:key => key})
end end
def statuses_for_select
data = self.statuses.map do |t|
[t.id.to_s,t.title_translations]
end
Hash[data]
end
end end

View File

@ -5,7 +5,7 @@ class Status
has_and_belongs_to_many :users has_and_belongs_to_many :users
field :key
belongs_to :role belongs_to :role
# has_and_belongs_to_many :sub_roles # has_and_belongs_to_many :sub_roles

View File

@ -9,10 +9,7 @@ class User
field :admin, :type => Boolean, :default => true field :admin, :type => Boolean, :default => true
field :active_role field :active_role
field :nccu_ldap_uid
field :email field :email
# field :cache_dept
# has_one :cache_dept, :class_name => "I18nVariable", :as => :language_value, :autosave => true, :dependent => :destroy
field :cache_dept,type: Hash field :cache_dept,type: Hash
field :status_record,type: Hash field :status_record,type: Hash
@ -34,27 +31,61 @@ class User
accepts_nested_attributes_for :attribute_values, :allow_destroy => true accepts_nested_attributes_for :attribute_values, :allow_destroy => true
before_create :initialize_desktop before_create :initialize_desktop
before_save :check_status_record before_save :rebuild_status_record
before_save :save_roles before_save :save_roles
scope :remote_account, where(:nccu_id.ne => nil) scope :remote_account, where(:nccu_id.ne => nil)
validates_uniqueness_of :email,:message=> I18n.t("devise.registrations.email_not_unique") # validates_uniqueness_of :email,:message=> I18n.t("devise.registrations.email_not_unique")
# def new_attribute_values=(vars) # def new_attribute_values=(vars)
# binding.pry # binding.pry
# end # end
# def new_attribute_values(vars) # def new_attribute_values(vars)
# binding.pry # binding.pry
# end # end
def rebuild_sub_roles_from_attribute_values!(attribute_values)
# attribute_fields = AttributeField.find attribute_values.collect{|t| t[1][:attribute_field_id]} ## # class << self
# self.sub_roles = attribute_fields.collect{|t| t.attribute if t.attribute.is_a? SubRole}.compact.uniq ## def initialize
## self.define_method("asd"){ p "hi"}
## sub_roles.each do |sr|
## sr_ids = sr.attribute_fields.collect{|t| t.id.to_s}
## self.define_method("attribute_values_for_"+sr.key.to_s) {
## AttributeValue.where(user_id: id ).in(attribute_field_id: sr_ids)
## }
## end
## yield self
## end
# end
# def initialize
# binding.pry
# # yield self
# end
def get_attribute_value(attribute_field)
attribute_values.where(attribute_field_id: attribute_field.id).first
end end
def get_sub_roles_by_role(role)
sub_roles.where(role_id: role.id)
end
def disable_sub_role=(var)
var[:id].each do |id,val|
# binding.pry if id == '5052c5b22b5c49ab02000004'
if (val=="true")
self.sub_roles = self.sub_roles.reject{|t| t.id.to_s==id}
elsif(val=="false")
self.sub_roles << SubRole.find(id)
end
end
end
def set_sub_role(sub_role_id,status_id) def set_sub_role(sub_role_id,status_id)
self.sub_roles << SubRole.find(sub_role_id) self.status_record.merge!(Hash[sub_role_id,status_id])
self.status_record.store(sub_role_id,status_id)
end end
# def get_status(*params) # def get_status(*params)
@ -80,11 +111,18 @@ class User
def self.find_by_status_and_sub_role_key(sub_role_key,status_key) #Query for users by using specific sub_role and status key def self.find_by_status_and_sub_role_key(sub_role_key,status_key) #Query for users by using specific sub_role and status key
sr = ::SubRole.first({conditions: { key: sub_role_key }}) sr = ::SubRole.first({conditions: { key: sub_role_key }})
status = ::Status.first({conditions:{role_id: sr.role.id,key: status_key}}) status = ::Status.first({conditions:{role_id: sr.role.id,key: status_key}})
find_by_status(sr.id,status.id) find_by_subrole_and_status(sr.id,status.id)
end end
def self.find_by_status(sub_role_id,status_id) #Query for users by using specific sub_role and status key buy within ID def self.find_by_subrole_and_status(sub_role_id,status_id) #Query for users by using specific sub_role and status key by within ID
User.where("status_record.#{sub_role_id}" => status_id) User.where("status_record.#{sub_role_id}" => status_id,:sub_role_ids.in => [ sub_role_id ])
end
def self.find_by_status(status_id)
status = ::Status.find status_id
::SubRole.where({role_id: status.role.id.to_s,disabled: false}).collect{|sr|
find_by_subrole_and_status(sr.id.to_s,status_id)
}.uniq!
end end
def create_dept_cache def create_dept_cache
@ -139,27 +177,21 @@ class User
end end
def initialize_desktop def initialize_desktop
self.build_desktop self.build_desktop(desktop_widget_ids: DesktopWidget.all.collect{|widget| widget.id})
end end
protected protected
def save_roles def save_roles
self.roles = self.sub_roles.collect{|t| t.role}.uniq self.roles = self.sub_roles.collect{|t| t.role}.uniq
end
def rebuild_status_record
self.status_record = {}
self.attribute_values.reject{|t| t.key!='status'}.each do |status|
# binding.pry
set_sub_role(status.attribute_field.attribute.id.to_s,status[:value]) rescue nil
end
end end
def check_status_record end
roles = sub_roles.collect{|t| t.role}.uniq #get all role from sub_roles
sub_roles_ary = sub_roles.collect{|t| t.id.to_s}
self.status_record = status_record.keep_if{|sub_role_id, status_id|
includeing = sub_roles_ary.include?(sub_role_id)
valide = false
if includeing
sub_role = SubRole.find sub_role_id
valide = sub_role.role.statuses.include? (Status.find status_id)
end
(includeing and valide)
} rescue {}
end
end

View File

@ -24,7 +24,7 @@ class ImageUploader < CarrierWave::Uploader::Base
# Override the directory where uploaded files will be stored. # Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted: # This is a sensible default for uploaders that are meant to be mounted:
def store_dir def store_dir
"image/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" "#{model.id}"
end end
# Provide a default URL as a default if there hasn't been a file uploaded: # Provide a default URL as a default if there hasn't been a file uploaded:
@ -48,7 +48,7 @@ class ImageUploader < CarrierWave::Uploader::Base
# end # end
version :thumb do version :thumb do
process :resize_to_fit => [200, 200] process :resize_to_limit => [200, 200]
end end
# Add a white list of extensions which are allowed to be uploaded. # Add a white list of extensions which are allowed to be uploaded.

View File

@ -2,26 +2,26 @@
<% if at_least_module_manager || sub_manager?(ad_banner_tab)%> <% if at_least_module_manager || sub_manager?(ad_banner_tab)%>
<%= form_for ad_banner_tab,:url=> admin_ad_banner_path(ad_banner_tab),:method => :put,:class=>"input-medium" do |f| -%> <%= form_for ad_banner_tab,:url=> admin_ad_banner_path(ad_banner_tab),:method => :put,:class=>"input-medium" do |f| -%>
<div class="adbanner-setup well"> <div class="adbanner-setup well">
<!--<p><%#= t("admin.ad.banner_best_size") %></p>--> <!--<p><%#= t("ad.banner_best_size") %></p>-->
<%= f.label :ad_fx, t('admin.ad.ab_fx') %> <%= f.label :ad_fx, t('ad.ab_fx') %>
<%= f.select :ad_fx ,AdBanner::FX_TYPES %> <%= f.select :ad_fx ,AdBanner::FX_TYPES %>
<%= f.label :transition_sec, t('admin.ad.transition_sec') %> <%= f.label :transition_sec, t('ad.transition_sec') %>
<%= f.text_field :transition_sec,:placeholder=>t('admin.ad.sec_place_holder'),:class=> "span3" %> <%= t("admin.ad.trans_unit_sec") %> <%= f.text_field :transition_sec,:placeholder=>t('ad.sec_place_holder'),:class=> "span3" %> <%= t("ad.trans_unit_sec") %>
<%if at_least_module_manager%> <%if at_least_module_manager%>
<%= f.label :best_size, t('admin.ad.best_size') %> <%= f.label :best_size, t('ad.best_size') %>
<%= f.text_field :best_size %> Ex: 500px x 300px <%= f.text_field :best_size %> Ex: 500px x 300px
<% end -%> <% end -%>
<br> <br>
<%= f.submit t("admin.ad.update_banner"), :class => 'btn' %> <%= f.submit t("ad.update_banner"), :class => 'btn' %>
<%= f.submit t("cancel"),:type=>'reset', :class => 'btn' %> <%= f.submit t("cancel"),:type=>'reset', :class => 'btn' %>
</div> </div>
<% end -%> <% end -%>
<% end -%> <% end -%>
<h3><%= t("admin.ad.picture_list")%></h3> <h3><%= t("ad.picture_list")%></h3>
<div class="adbanner-list"> <div class="adbanner-list">
<%if (at_least_module_manager || ad_banner_tab.cur_user_is_sub_manager_of(:edit) )%> <%if (at_least_module_manager || ad_banner_tab.cur_user_is_sub_manager_of(:edit) )%>
<%= content_tag :div ,:class=>'adbanner-action' do%> <%= content_tag :div ,:class=>'adbanner-action' do%>
<%= link_to t("admin.ad.new_image"),new_admin_ad_banner_ad_image_path(ad_banner_tab) ,:class => "btn btn-primary"%> <%= link_to t("ad.new_image"),new_admin_ad_banner_ad_image_path(ad_banner_tab) ,:class => "btn btn-primary"%>
<%= link_to t("modal.preview"), admin_realtime_preview_ad_banner_path(ad_banner_tab.id) , :class=>'preview_trigger btn btn-success'%> <%= link_to t("modal.preview"), admin_realtime_preview_ad_banner_path(ad_banner_tab.id) , :class=>'preview_trigger btn btn-success'%>
<% end -%> <% end -%>
<% end -%> <% end -%>
@ -30,7 +30,7 @@
</ul> </ul>
<% if at_least_module_manager %> <% if at_least_module_manager %>
<%= show_ad_banner_permission_link ad_banner_tab%> <%= show_ad_banner_permission_link ad_banner_tab%>
<%= link_to t('admin.ad.delete_banner'),admin_ad_banner_path(ad_banner_tab),:class => 'btn',:method => :delete,:confirm => t('sure?') %> <%= link_to t(:delete),admin_ad_banner_path(ad_banner_tab),:class => 'btn',:method => :delete,:confirm => t('sure?') %>
<% end -%> <% end -%>
<%#= render :partial => 'new_add_banner_file', :object => ad_banner_tab.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %> <%#= render :partial => 'new_add_banner_file', :object => ad_banner_tab.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %>

View File

@ -1,7 +1,7 @@
<li class="span3"> <li class="span3">
<%= image_tag ad_image.file rescue nil%> <%= image_tag ad_image.file rescue nil%>
<p> <p>
<%= ad_image.display? ? "[#{t('admin.ad.showing')}]" : "[#{t('admin.ad.not_showing')}]" %> <%= ad_image.display? ? "[#{t('ad.showing')}]" : "[#{t('ad.not_showing')}]" %>
<%= "#{ad_image.post_date ||'NeedReset' }~#{ad_image.unpost_date || 'NeedReset'}" %> <%= "#{ad_image.post_date ||'NeedReset' }~#{ad_image.unpost_date || 'NeedReset'}" %>
</p> </p>
<%if at_least_module_manager || sub_manager?(ad_image.ad_banner) %> <%if at_least_module_manager || sub_manager?(ad_image.ad_banner) %>

View File

@ -4,33 +4,33 @@
<div class="modal-header"> <div class="modal-header">
<a class="close" data-dismiss="modal">×</a> <a class="close" data-dismiss="modal">×</a>
<h3><%= t("admin.ad.new_banner") %></h3> <h3><%= t('new.banner') %></h3>
</div> </div>
<div class="modal-body form-horizontal"> <div class="modal-body form-horizontal">
<div class="control-group"> <div class="control-group">
<%= f.label :title,t('admin.ad.title'),:class => "control-label" %> <%= f.label :title, t(:title),:class => "control-label" %>
<div class="controls"> <div class="controls">
<%= f.text_field :title %> <%= f.text_field :title %>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<%= f.label :transition_sec, t('admin.ad.transition_sec'),:class => "control-label" %> <%= f.label :transition_sec, t('ad.transition_sec'),:class => "control-label" %>
<div class="controls"> <div class="controls">
<%= f.text_field :transition_sec %> <%= t("admin.ad.trans_unit_sec") %> <%= f.text_field :transition_sec %> <%= t("ad.trans_unit_sec") %>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<%= f.label :best_size, t('admin.ad.best_size'),:class => "control-label" %> <%= f.label :best_size, t('ad.best_size'),:class => "control-label" %>
<div class="controls"> <div class="controls">
<%= f.text_field :best_size %> Ex: 500px x 300px <%= f.text_field :best_size %> Ex: 500px x 300px
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<%= f.label :ad_fx, t('admin.ad.ab_fx') %> <%= f.label :ad_fx, t('ad.ab_fx') %>
<div class="controls"> <div class="controls">
<%= f.select :ad_fx ,AdBanner::FX_TYPES %> <%= f.select :ad_fx ,AdBanner::FX_TYPES %>
</div> </div>

View File

@ -22,7 +22,7 @@
<% end -%> <% end -%>
<% end -%> <% end -%>
<%= content_tag :li,link_to(t("admin.ad.new_banner"),"#new-a-banner",:data=>{:toggle=>"modal"}),:id=>'new_ad_banner_tab_but',:class => (@active.nil? ? 'active' : nil ) if at_least_module_manager%> <%= content_tag :li,link_to(t('new.banner'),"#new-a-banner",:data=>{:toggle=>"modal"}),:id=>'new_ad_banner_tab_but',:class => (@active.nil? ? 'active' : nil ) if at_least_module_manager%>
</ul> </ul>

View File

@ -19,7 +19,7 @@
<div class="widget-action clear"> <div class="widget-action clear">
<a href="#" class="action"><i title="Set the announcement to start and end dates" class="icon-exclamation-sign icon-white tip"></i></a> <a href="#" class="action"><i title="Set the announcement to start and end dates" class="icon-exclamation-sign icon-white tip"></i></a>
</div> </div>
<h3 class="widget-title"><i class="icons-calendar icons-white"></i> Date</h3> <h3 class="widget-title"><i class="icons-calendar icons-white"></i><%= t('nccu.date') %></h3>
<div class="widget-content clear"> <div class="widget-content clear">
<div id="calendarRange"> <div id="calendarRange">
<div class="input-append"> <div class="input-append">
@ -36,8 +36,8 @@
today = today.format('isoDate'); today = today.format('isoDate');
var state = false; var state = false;
var arr = state ? "▼" : "▲" var arr = state ? "▼" : "▲"
var start_date = <%= @ad_image.post_date.nil?? 'today' : "'#{@ad_image.post_date.strftime('%Y / %m / %d')}'" %>; var start_date = <%= (@ad_image.post_date.nil?? 'today' : "'#{@ad_image.post_date.strftime('%Y / %m / %d')}'").html_safe %>;
var end_date = <%= @ad_image.unpost_date.nil?? 'today' : "'#{@ad_image.unpost_date.strftime('%Y / %m / %d')}'" %>; var end_date = <%= (@ad_image.unpost_date.nil?? 'today' : "'#{@ad_image.unpost_date.strftime('%Y / %m / %d')}'").html_safe %>;
//calendarRange //calendarRange
$('#calendarRange .showDate').html(start_date+" - "+end_date); $('#calendarRange .showDate').html(start_date+" - "+end_date);
$('#calendarRange .calendarInput').val(start_date+" - "+end_date); $('#calendarRange .calendarInput').val(start_date+" - "+end_date);
@ -73,7 +73,7 @@
<div class="widget-action clear"> <div class="widget-action clear">
<a class="action"><i title="Upload pictures" class="icon-exclamation-sign icon-white tip"></i></a> <a class="action"><i title="Upload pictures" class="icon-exclamation-sign icon-white tip"></i></a>
</div> </div>
<h3 class="widget-title"><i class="icons-picture icons-white"></i>Picture</h3> <h3 class="widget-title"><i class="icons-picture icons-white"></i><%= t('nccu.picture') %></h3>
<div class="widget-content clear"> <div class="widget-content clear">
<div class="control-group"> <div class="control-group">
<div class="upload-picture"> <div class="upload-picture">
@ -81,7 +81,7 @@
<%= image_tag @ad_image.file rescue ''%> <%= image_tag @ad_image.file rescue ''%>
</div> </div>
<% if !@ad_image.ad_banner.best_size.empty?%> <% if !@ad_image.ad_banner.best_size.empty?%>
<span class="alert widgetInfo"><%= t("admin.ad.widget_info_for_ad_image_size",:best_size=> @ad_image.ad_banner.best_size) %> <span class="alert widgetInfo"><%= t("ad.widget_info_for_ad_image_size",:best_size=> @ad_image.ad_banner.best_size) %>
</span> </span>
<% end -%> <% end -%>
<div class="controls file-upload input-prepend"> <div class="controls file-upload input-prepend">
@ -101,7 +101,7 @@
<div class="widget-action clear"> <div class="widget-action clear">
<a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Upload pictures"></i></a> <a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Upload pictures"></i></a>
</div> </div>
<h3 class="widget-title"><i class="icons-star-thin icons-white"></i>Type</h3> <h3 class="widget-title"><i class="icons-star-thin icons-white"></i><%= t(:type) %></h3>
<div class="widget-content clear"> <div class="widget-content clear">
<%= f.select :link_open ,AdImage::LINK_OPEN_TYPES%> <%= f.select :link_open ,AdImage::LINK_OPEN_TYPES%>
</div> </div>
@ -111,7 +111,7 @@
<div class="widget-action clear"> <div class="widget-action clear">
<a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Set the range time"></i></a> <a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Set the range time"></i></a>
</div> </div>
<h3 class="widget-title"><i class="icons-time icons-white"></i>FEQ</h3> <h3 class="widget-title"><i class="icons-time icons-white"></i><%= t(:frequency) %></h3>
<div class="widget-content clear"> <div class="widget-content clear">
<%= f.text_field :weight ,:class=> 'span3',:placeholder=>"在套圖中出現次數 1次請輸入1" %> <%= f.text_field :weight ,:class=> 'span3',:placeholder=>"在套圖中出現次數 1次請輸入1" %>
</div> </div>
@ -121,7 +121,7 @@
<div class="widget-action clear"> <div class="widget-action clear">
<a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Add a reference link"></i></a> <a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Add a reference link"></i></a>
</div> </div>
<h3 class="widget-title"><i class="icons-link icons-white"></i>Link</h3> <h3 class="widget-title"><i class="icons-link icons-white"></i><%= t(:link) %></h3>
<div class="widget-content clear"> <div class="widget-content clear">
<%= f.text_field :out_link ,:class=> 'span3',:placeholder => "輸入連結"%> <%= f.text_field :out_link ,:class=> 'span3',:placeholder => "輸入連結"%>
</div> </div>
@ -167,4 +167,4 @@
</div> </div>
<!--Post End--> <!--Post End-->
</form> </form>
</div> </div>

View File

@ -5,18 +5,18 @@
<div class="main_list"> <div class="main_list">
<%= flash_messages %> <%= flash_messages %>
<div class="button_bar up"> <div class="button_bar up">
<% #link_to t('admin.new_user'), new_admin_user_path, :class => 'new' %> <% #link_to t('new.user'), new_admin_user_path, :class => 'new' %>
</div> </div>
<table> <table>
<thead> <thead>
<tr> <tr>
<td><%= t('admin.app.title') %></td> <td><%= t(:title) %></td>
<td><%= t('admin.app.description') %></td> <td><%= t(:description) %></td>
<td><%= t('admin.app.use_status') %></td> <td><%= t(:use_status) %></td>
<td><%= t('admin.app.autdor') %></td> <td><%= t(:author) %></td>
<td><%= t('admin.app.organization') %></td> <td><%= t(:organization) %></td>
<td><%= t('admin.app.version') %></td> <td><%= t(:version) %></td>
<td class="action"><%= t('admin.action') %></td> <td class="action"><%= t(:action) %></td>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -47,6 +47,6 @@
</tbody> </tbody>
</table> </table>
<div class="button_bar"> <div class="button_bar">
<%# link_to t('admin.new_user'), new_admin_user_path, :class => 'new' %> <%# link_to t('new.user'), new_admin_user_path, :class => 'new' %>
</div> </div>
</div> </div>

View File

@ -5,8 +5,8 @@
<div class="quick-edit"> <div class="quick-edit">
<ul class="nav nav-pills hide"> <ul class="nav nav-pills hide">
<li><%= link_to t('asset_category.edit'), edit_admin_asset_category_path(asset_category), :remote => true %></li> <li><%= link_to t(:edit), edit_admin_asset_category_path(asset_category), :remote => true %></li>
<li><%= link_to t('asset_category.delete'), admin_asset_category_path(asset_category), :confirm => t('announcement.sure?'), :method => :delete, :remote => true %></li> <li><%= link_to t(:delete), admin_asset_category_path(asset_category), :confirm => t(:sure?), :method => :delete, :remote => true %></li>
</ul> </ul>
</div> </div>

View File

@ -7,7 +7,7 @@
<table class="table main-list"> <table class="table main-list">
<thead> <thead>
<tr> <tr>
<th class="span2"><%= t('asset_category.key') %></th> <th class="span2"><%= t(:key) %></th>
<% @site_valid_locales.each do |locale| %> <% @site_valid_locales.each do |locale| %>
<th class="span2"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></th> <th class="span2"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></th>
<% end %> <% end %>

View File

@ -1,5 +1,5 @@
<div id='pop_up_content' class="main2"> <div id='pop_up_content' class="main2">
<h1><%= t('editing_asset') %></h1> <h1><%= t('editing.asset') %></h1>
<%= flash_messages %> <%= flash_messages %>
@ -11,7 +11,7 @@
<%= link_back %> <%= link_back %>
<%= f.submit t(:edit) %> <%= f.submit t(:edit) %>
<% else %> <% else %>
<a id='ajax_form_submit' class="btn btn-primary"><%= t(:update) %></a> <a id='ajax_form_submit' class="btn btn-primary"><%= t(:update_) %></a>
<% end %> <% end %>
</div> </div>
<% end %> <% end %>

View File

@ -1,5 +1,5 @@
<div class="control-group"> <div class="control-group">
<label for="title" class="control-label"><%= t 'admin.title' %></label> <label for="title" class="control-label"><%= t :title %></label>
<div class="controls"> <div class="controls">
<%= f.fields_for :title_translations do |f| %> <%= f.fields_for :title_translations do |f| %>
<% @site_valid_locales.each do |locale| %> <% @site_valid_locales.each do |locale| %>
@ -14,13 +14,13 @@
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label"><%= f.label :category, t('admin.category') %></label> <label class="control-label"><%= f.label :category, t(:category) %></label>
<div class="controls"> <div class="controls">
<%= f.select :asset_category_id, @asset_categories.collect{|t| [ t.title, t.id ]}, {}, :class => "input-large" %> <%= f.select :asset_category_id, @asset_categories.collect{|t| [ t.title, t.id ]}, {}, :class => "input-large" %>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label"><%= t 'admin.tags' %></label> <label class="control-label"><%= t :tags %></label>
<div class="controls"> <div class="controls">
<% @tags.each do |tag| %> <% @tags.each do |tag| %>
<%= content_tag :label, :class => "checkbox inline" do -%> <%= content_tag :label, :class => "checkbox inline" do -%>
@ -32,7 +32,7 @@
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label"><%= f.label :data, t('admin.data') %></label> <label class="control-label"><%= f.label :data, t(:data) %></label>
<div class="controls"> <div class="controls">
<%= f.file_field :data, :class => 'upload' %> <%= f.file_field :data, :class => 'upload' %>
</div> </div>

View File

@ -1,5 +1,5 @@
<div id='pop_up_content' class="main2"> <div id='pop_up_content' class="main2">
<h1><%= t('admin.new_asset') %></h1> <h1><%= t('new.asset') %></h1>
<%= flash_messages %> <%= flash_messages %>
@ -7,7 +7,7 @@
<%= f.error_messages %> <%= f.error_messages %>
<%= render :partial => "form", :locals => { :f => f } %> <%= render :partial => "form", :locals => { :f => f } %>
<div class="button_bar"> <div class="button_bar">
<a id='ajax_form_submit' class="btn btn-primary"><%= t(:create) %></a> <a id='ajax_form_submit' class="btn btn-primary"><%= t(:create_) %></a>
</div> </div>
<% end %> <% end %>
</div> </div>

View File

@ -1,7 +1,7 @@
<%= render_sort_bar(true, delete_admin_assets_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]), <%= render_sort_bar(true, delete_admin_assets_path(:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]),
['title', 'title','span4', 'admin.title'], ['title', 'title','span4', :title],
['description', 'description', 'span1-2', 'admin.data'], ['description', 'description', 'span1-2', :data],
['intro', 'intro', 'span1-2', 'admin.file_type'], ['intro', 'intro', 'span1-2', :type],
['intro', 'intro', 'span1-2', 'admin.file_length'], ['intro', 'intro', 'span1-2', :size],
['intro', 'intro', 'span1-2', 'admin.description'], ['intro', 'intro', 'span1-2', :description],
['intro', 'intro', 'span1-2', 'admin.tags']).html_safe %> ['intro', 'intro', 'span1-2', :tags]).html_safe %>

View File

@ -1 +1,25 @@
<%= @asset.data.url %>#<%= show_all_fields(@asset, 'title') %>#<%= show_all_fields(@asset, 'description') %> <% if !request.xhr? %>
<textarea>
<% end %>
var returnurl = "<%= @asset.data.url %>";
var returntitle = "<%= show_all_fields(@asset, 'title') %>";
var returndescription = "<%= show_all_fields(@asset, 'description') %>";
var win = tinyMCEPopup.getWindowArg("window");
win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = returnurl;
if(win.document.getElementById(tinyMCEPopup.getWindowArg("alt")))
win.document.getElementById(tinyMCEPopup.getWindowArg("alt")).value = returndescription;
win.document.getElementById(tinyMCEPopup.getWindowArg("title")).value = returntitle;
if (typeof(win.ImageDialog) != "undefined") {
// we are, so update image dimensions...
if (win.ImageDialog.getImageData)
win.ImageDialog.getImageData();
// ... and preview if necessary
if (win.ImageDialog.showPreviewImage)
win.ImageDialog.showPreviewImage(returnurl);
}
tinyMCEPopup.close();
<% if !request.xhr? %>
</textarea>
<% end %>

View File

@ -1,7 +1,7 @@
<% content_for :secondary do %> <% content_for :secondary do %>
<div class="assets_setup"> <div class="assets_setup">
<ul class="list"> <ul class="list">
<li><%= link_to t(:new_asset, :scope => :admin), new_admin_asset_path, :remote => true, :class => 'button positive' %></li> <li><%= link_to t('new.asset'), new_admin_asset_path, :remote => true, :class => 'button positive' %></li>
</ul> </ul>
</div> </div>
<% end -%> <% end -%>

View File

@ -7,12 +7,12 @@
<body onload="tinyMCEPopup.executeOnLoad('init();')"> <body onload="tinyMCEPopup.executeOnLoad('init();')">
<%= form_for :asset, :url => admin_assets_path(:uploader => true), :html => {:id => 'ajaxForm', :multipart => true } do |f| %> <%= form_for :asset, :url => admin_assets_path(:uploader => true), :html => {:id => 'ajaxForm', :multipart => true } do |f| %>
<div class="modal-header"> <div class="modal-header">
<h3><%= t 'admin.file_upload' %></h3> <h3><%= t 'file.upload' %></h3>
</div> </div>
<label class="control-label error" id="dyn_error"></label> <label class="control-label error" id="dyn_error"></label>
<div class="modal-body form-horizontal"> <div class="modal-body form-horizontal">
<div class="control-group"> <div class="control-group">
<label for="title" class="control-label error"><%= t 'admin.title' %></label> <label for="title" class="control-label error"><%= t :title %></label>
<div class="controls"> <div class="controls">
<%= f.fields_for :title_translations do |f| %> <%= f.fields_for :title_translations do |f| %>
<div> <div>
@ -29,7 +29,7 @@
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label for="description" class="control-label error"><%= t 'admin.description' %></label> <label for="description" class="control-label error"><%= t :description %></label>
<div class="controls"> <div class="controls">
<%= f.fields_for :description_translations do |f| %> <%= f.fields_for :description_translations do |f| %>
<div> <div>
@ -46,7 +46,7 @@
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<%#= f.label :data, t('admin.data'), :class => "control-label" %> <%#= f.label :data, t(:data), :class => "control-label" %>
<div class="controls"> <div class="controls">
<%= f.file_field :data, :class => 'upload' %> <%= f.file_field :data, :class => 'upload' %>
</div> </div>
@ -54,7 +54,8 @@
</div> </div>
<div style="position: absolute; width: 100%; bottom: 0;"> <div style="position: absolute; width: 100%; bottom: 0;">
<div class="modal-footer"> <div class="modal-footer">
<a id='ajax_form_submit' class="btn btn-primary"><%= t(:create) %></a> <!-- <a id='ajax_form_submit' class="btn btn-primary"><#%= t(:create) %></a> -->
<input type="submit" value="<%= t(:create_) %>" class="btn btn-primary" />
</div> </div>
</div> </div>

View File

@ -17,7 +17,7 @@
</table> </table>
<div class="form-actions form-fixed pagination-right"> <div class="form-actions form-fixed pagination-right">
<%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t('admin.add'), new_admin_asset_path, :remote => true, :class => 'btn btn-primary pull-right' %> <%= link_to content_tag(:i, nil, :class => 'icon-plus icon-white') + t(:add), new_admin_asset_path, :remote => true, :class => 'btn btn-primary pull-right' %>
<div id="asset_pagination" class="paginationFixed"> <div id="asset_pagination" class="paginationFixed">
<%= paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]}, :remote => true %> <%= paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]}, :remote => true %>
</div> </div>

Some files were not shown because too many files have changed in this diff Show More