Merge branch 'new' of https://github.com/Rulingcom/orbit into new
This commit is contained in:
		
						commit
						97d2380406
					
				|  | @ -8,9 +8,10 @@ uploads/**/* | |||
| public/panel/**/* | ||||
| public/index.html | ||||
| .DS_Store | ||||
| 
 | ||||
| solr/data/**/* | ||||
| *.swp | ||||
| 
 | ||||
| *.pid | ||||
| *.lck | ||||
| public/assets | ||||
| config/application.rb | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										3
									
								
								Gemfile
								
								
								
								
							
							
						
						
									
										3
									
								
								Gemfile
								
								
								
								
							|  | @ -23,6 +23,7 @@ gem 'mongoid-tree', :require => 'mongoid/tree' | |||
| gem "mongo_session_store-rails3" | ||||
| gem 'mysql2' | ||||
| gem 'nokogiri' | ||||
| 
 | ||||
| gem 'radius' | ||||
| gem 'rake' | ||||
| # gem 'remotipart' | ||||
|  | @ -84,7 +85,7 @@ group :test, :development do | |||
|   gem "simplecov" | ||||
|   gem "delorean" | ||||
|   gem "watchr" | ||||
| 	gem "spork" | ||||
|   gem "spork" | ||||
|   # gem "capybara" | ||||
|   # gem 'yard' | ||||
|   # gem "bluecloth" | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -1,111 +1,7 @@ | |||
| <%#= encoding: utf-8 %> | ||||
| $(document).on('click', '#ajax_form_submit', function(){ | ||||
| 	// $('#ajaxForm').ajaxSubmit({ | ||||
| 	// 	beforeSubmit: function(a,f,o) { | ||||
| 	// 		o.dataType = 'script';			 | ||||
| 	// 		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); | ||||
| 
 | ||||
| $('#ajaxForm').ajaxForm({ | ||||
|   beforeSubmit: function(a,f,o) { | ||||
|     o.dataType = 'script'; | ||||
|   }, | ||||
|   success: function(data) { | ||||
|   } | ||||
| }); | ||||
|  | @ -10,7 +10,7 @@ $('.bulletin_files_block a.delete').live('click', 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); | ||||
|     $("tr#" + $(this).prev().attr('value')).hide(); | ||||
|   } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| 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'); | ||||
| }); | ||||
| // 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');
 | ||||
| // });
 | ||||
| 
 | ||||
| jQuery(document).ajaxComplete(function(){ | ||||
|   $("#sys_modal").hide().remove(); | ||||
| }); | ||||
| // jQuery(document).ajaxComplete(function(){
 | ||||
| //   $("#sys_modal").hide().remove();
 | ||||
| // });
 | ||||
|  |  | |||
|  | @ -3,6 +3,58 @@ | |||
| // <%= link_to "NewPreview", realtime_preview_admin_ad_banner_path(ad_banner_tab) , :class=>'preview_trigger'%>
 | ||||
| 
 | ||||
| $(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(){ | ||||
| 		$("#main-wrap").after("<span id='show_preview'></span>"); | ||||
| 		$.ajax({ | ||||
|  |  | |||
|  | @ -4,33 +4,45 @@ | |||
| 
 | ||||
| //extended jquery to search fast.
 | ||||
| $.extend($.expr[':'], { | ||||
| 	'containsi': function (elem, i, match, array) { | ||||
| 		return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0; | ||||
| 	} | ||||
|     'containsi': function (elem, i, match, array) { | ||||
|         return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0; | ||||
|     } | ||||
| }); | ||||
| var interval,sval; | ||||
| $(document).ready(function(){ | ||||
| 	$("#user_filter").keyup(function(e){ | ||||
| 		if((e.which>96 && e.which<123) || (e.which>64 && e.which<92) || (e.which == 32) || (e.which == 8)){  | ||||
| 			sval = $(this).val(); | ||||
| 			$(".checkbox").popover("hide"); | ||||
| 			$("div.checkblock").hide(); | ||||
| 			clearInterval(interval); | ||||
| 			interval = setInterval(waitForSearch,1000); | ||||
| 		} | ||||
| 	}) | ||||
|     $("#user_filter").keyup(function(e){ | ||||
|         if((e.which>96 && e.which<123) || (e.which>64 && e.which<92) || (e.which == 32) || (e.which == 8)){  | ||||
|             sval = $(this).val(); | ||||
|             $(".checkbox").popover("hide"); | ||||
|             $("div.checkblock").hide(); | ||||
|             clearInterval(interval); | ||||
|             interval = setInterval(waitForSearch,1000); | ||||
|         } | ||||
|     }) | ||||
| }) | ||||
| var waitForSearch = function(){ | ||||
| 	if(sval){ | ||||
| 		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); | ||||
|     if(sval){ | ||||
|         var re1 = new RegExp("^[\u4E00-\uFA29]*$"); //Chinese character range 
 | ||||
|         var re2 = new RegExp("^[\uE7C7-\uE7F3]*$"); | ||||
|         if ((re1.test(sval) && (re2.test(sval)))){ | ||||
| 
 | ||||
|             var totalfoundbyname = $("div#users_checkbox_ary label.member-name:contains("+sval+")").length | ||||
|             if(totalfoundbyname!=0){ | ||||
|                 $("div#users_checkbox_ary label.member-name:contains("+sval+")").parent().parent().show();                 | ||||
|             }else if(totalfoundbyname==0){ | ||||
|                 $("div#users_checkbox_ary div.for_unit:contains("+sval+")").parent().show(); | ||||
|             } | ||||
|         }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); | ||||
| } | ||||
|  | @ -40,11 +40,11 @@ $(".nav-tabs").find(".icons-pencil").click(function(){ | |||
|         data: { body: content_holder.html() }, | ||||
|         success: function(json) { | ||||
|           $(selector).attr("contenteditable",false) | ||||
|           alert("<%= I18n.t('admin.contenteditable.update_done') %>"); | ||||
|           alert("<%= I18n.t('update.success_') %>"); | ||||
|           //content_holder.effect('highlight', {'color': '#0f0'}, 3000); | ||||
|         }, | ||||
|         error: function() { | ||||
|           alert("<%= I18n.t('admin.contenteditable.update_failed') %>"); | ||||
|           alert("<%= I18n.t('update.fail') %>"); | ||||
|           //content_holder.effect('highlight', {'color': '#f00'}, 3000); | ||||
|           content_holder.html(content); | ||||
|         } | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ $('.news_bulletin_files_block a.delete').live('click', 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); | ||||
|       $("tr#" + $(this).prev().attr('value')).hide(); | ||||
|     } | ||||
|  |  | |||
|  | @ -332,9 +332,9 @@ var orbitDesktop = function(dom){ | |||
| 							if(j==0)$group.attr("id",tile.group_id); | ||||
| 							 | ||||
| 							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 | ||||
| 								$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); | ||||
| 						} | ||||
|  | @ -1557,10 +1557,10 @@ var orbitDesktop = function(dom){ | |||
| 			var widget = $(this); | ||||
| 			if(widget.attr("data-category")=="widget"){ | ||||
| 				var widgename = widget.attr("data-content"); | ||||
| 				$.getScript("/desktop_widgets/"+widgename+"/"+widgename+".js",function(){ | ||||
| 					widget.find("div.appholder").load("/desktop_widgets/"+widgename+"/index.html.erb"); | ||||
| 				$.getScript(widget.attr("js-link"),function(){ | ||||
| 					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(){ | ||||
| 	$.post("/desktop/temp_func",{sectionid:"4f83e7bbbd98eb041600001d"}); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,17 +14,20 @@ function load_tinymce() { | |||
|     theme_advanced_toolbar_align : "left", | ||||
|     theme_advanced_statusbar_location : "bottom", | ||||
|     theme_advanced_resizing : true, | ||||
|     relative_urls : false, | ||||
| 
 | ||||
|     // Skin options | ||||
|     skin : "o2k7", | ||||
|     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 | ||||
|     template_external_list_url : "js/template_list.js", | ||||
|     // external_link_list_url : "js/link_list.js", | ||||
|     // external_image_list_url : "js/image_list.js", | ||||
|     // media_external_list_url : "js/media_list.js" | ||||
| 
 | ||||
|     content_css: "<%= asset_path('tinymce_orbit.css') %>", | ||||
| 
 | ||||
|     // Style formats | ||||
|     style_formats : [ | ||||
|       {title : 'Bold text', inline : 'b'}, | ||||
|  | @ -40,7 +43,15 @@ function load_tinymce() { | |||
|     template_replace_values : { | ||||
|       username : "Some User", | ||||
|       staffid : "991234" | ||||
|     } | ||||
|     }, | ||||
| 
 | ||||
|     // Valide HTML elements | ||||
|     valid_elements : '*[*]', | ||||
|     valid_children : '*[*]', | ||||
| 
 | ||||
|     // Height & width | ||||
|     height : '400', | ||||
|     width : '100%' | ||||
|   }); | ||||
| } | ||||
| function myFileBrowser(field_name, url, type, win) { | ||||
|  |  | |||
|  | @ -99,7 +99,7 @@ textarea { | |||
| body { | ||||
|   margin: 0; | ||||
|   font-family: /*"Helvetica Neue", */Helvetica, Arial, sans-serif; | ||||
|   font-size: 13px; | ||||
|   font-size: 75%; | ||||
|   line-height: 18px; | ||||
|   color: #333333; | ||||
|   background-color: #ffffff; | ||||
|  |  | |||
|  | @ -287,32 +287,65 @@ | |||
| 	padding: 0 20px 0 150px !important; | ||||
| 	margin: 20px 0 0; | ||||
| } | ||||
| .user-role .user-info { | ||||
| .role-block .user-info { | ||||
| 	top: 23px; | ||||
| 	margin-left: -135px; | ||||
| 	width: 100px; | ||||
| 	border-right: none; | ||||
| 	box-shadow: none; | ||||
| } | ||||
| .user-role .map-block h4 .gender { | ||||
| .role-block .map-block h4 .gender { | ||||
| 	top: -1px; | ||||
| 	bottom: auto; | ||||
| 	left: -1px; | ||||
| 	right: auto; | ||||
| 	border-radius: 4px 0 0 0; | ||||
| } | ||||
| .user-role .teacher h4 .gender { | ||||
| .role-block .teacher h4 .gender { | ||||
| 	border-color: #186AB6 transparent transparent #186AB6; | ||||
| } | ||||
| .user-role .student h4 .gender { | ||||
| .role-block .student h4 .gender { | ||||
| 	border-color: #F38C08 transparent transparent #F38C08; | ||||
| } | ||||
| .user-role .staff h4 .gender { | ||||
| .role-block .staff h4 .gender { | ||||
| 	border-color: #139E2F transparent transparent #139E2F; | ||||
| } | ||||
| .user-role .tab-content, .user-role .nav-pills { | ||||
| .role-block .tab-content, .role-block .nav-pills { | ||||
| 	float: left; | ||||
| } | ||||
| .user-role .nav-pills { | ||||
| 	margin-left: 10px; | ||||
| .role-block .nav-pills { | ||||
| 	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; | ||||
| } | ||||
|  | @ -69,8 +69,9 @@ | |||
| } | ||||
| .site-map .disabled h4 { | ||||
| 	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; | ||||
| 	background-color: #9C9C9C; | ||||
| 	color: #CACACA; | ||||
|  | @ -80,37 +81,60 @@ | |||
| 	background-color: #5EB92B; | ||||
|     font-size: 9px; | ||||
|     padding: 0px 10px; | ||||
|     border-radius: 8px; | ||||
|     line-height: 16px; | ||||
|     height: 15px; | ||||
|     border-radius: 11px; | ||||
|     line-height: 20px; | ||||
|     height: 19px; | ||||
|     color: #FFF; | ||||
|     width: 38px; | ||||
|     width: 40px; | ||||
|     border: none; | ||||
|     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 */ | ||||
| 
 | ||||
| .user-role .form-horizontal { | ||||
| .role-block .form-horizontal { | ||||
| 	padding: 20px 10px 10px; | ||||
| 	background-color: #FFF; | ||||
| 	margin-bottom: 0; | ||||
| 	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; | ||||
| } | ||||
| .user-role .form-horizontal .controls { | ||||
| .role-block .form-horizontal .controls { | ||||
| 	margin-left: 120px; | ||||
| } | ||||
| .user-role .form-horizontal .controls>.input-append { | ||||
| .role-block .form-horizontal .controls>.input-append { | ||||
| 	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; | ||||
| } | ||||
| .user-role .map-block legend { | ||||
| .role-block .map-block .form-actions { | ||||
| 	margin: 0; | ||||
| 	padding: 10px 20px; | ||||
| } | ||||
| .role-block .map-block legend { | ||||
| 	font-size: 18px; | ||||
| 	line-height: 25px; | ||||
| } | ||||
| .role-block .map-block legend .nav { | ||||
| 	font-size: 12px; | ||||
| } | ||||
|  |  | |||
|  | @ -267,6 +267,12 @@ | |||
| #post-body-content { | ||||
| 	padding: 8px 0 8px 6px; | ||||
| } | ||||
| #post-body-content .middle { | ||||
| 	width: 100%; | ||||
| 	padding: 0; | ||||
| 	border: none; | ||||
| 	box-shadow: none; | ||||
| } | ||||
| .filter .accordion-group { | ||||
| 	margin-bottom: 0; | ||||
| 	border: none; | ||||
|  | @ -470,6 +476,9 @@ | |||
| .view-mode .btn { | ||||
| 	margin-bottom: 0; | ||||
| } | ||||
| .view-mode .btn { | ||||
| 	margin-bottom: 0; | ||||
| } | ||||
| .view-mode i { | ||||
| 	font-size: 1.2em; | ||||
| 	line-height: 17px !important; | ||||
|  | @ -1458,4 +1467,4 @@ | |||
| /*21*/ | ||||
| .icons- { | ||||
| 	background-position: -0px -640px; | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,4 @@ | |||
| body { | ||||
|    font-family: Arial, Helvetica, sans-serif !important; | ||||
|    font-size: 13px !important; | ||||
| } | ||||
|  | @ -41,7 +41,7 @@ class Admin::AdImagesController < OrbitBackendController | |||
|     @ad_banner = AdBanner.find params[:ad_banner_id] | ||||
|     @ad_image = @ad_banner.ad_images.find params[:id] | ||||
|     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 | ||||
|     end | ||||
|   end | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ class Admin::AssetCategoriesController < OrbitBackendController | |||
| 
 | ||||
|     respond_to do |format| | ||||
|       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 | ||||
|       else | ||||
|         format.html { render :action => "new" } | ||||
|  | @ -41,8 +41,8 @@ class Admin::AssetCategoriesController < OrbitBackendController | |||
| 
 | ||||
|     respond_to do |format| | ||||
|       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_categories_url, :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('create.success')) } | ||||
|         # format.xml  { head :ok } | ||||
|         format.js | ||||
|       else | ||||
|  |  | |||
|  | @ -44,7 +44,7 @@ class Admin::AssetsController < OrbitBackendController | |||
|       # render :json=>{"url"=>@asset.data.url,"title"=>"xxx","desc"=>"sss"}.to_json | ||||
|       render :layout=>false | ||||
|     else | ||||
|       flash[:error] = t(:create_fail) | ||||
|       flash[:error] = t('create.fail') | ||||
|       @asset_categories = AssetCategory.all | ||||
|       @tags = AssetTag.all | ||||
|       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} } | ||||
|       end | ||||
|     else | ||||
|       flash[:error] = t(:update_fail) | ||||
|       flash[:error] = t('update.fail') | ||||
|       @asset_categories = AssetCategory.all | ||||
|       @tags = AssetTag.all | ||||
|       respond_to do |format| | ||||
|  | @ -105,4 +105,8 @@ class Admin::AssetsController < OrbitBackendController | |||
|     render :layout => false | ||||
|   end | ||||
|    | ||||
|   def check_permission | ||||
|     true | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  |  | |||
|  | @ -34,14 +34,37 @@ class Admin::DesignsController < OrbitBackendController | |||
| 
 | ||||
|   def update | ||||
|     @design = Design.find(params[:id]) | ||||
|     if @design.update_attributes(params[:design]) | ||||
|       flash[:notice] = "Successfully updated design and tasks." | ||||
|       redirect_to admin_designs_url(@design) | ||||
|     else | ||||
|       render :action => 'edit' | ||||
|     @design.update_attributes(params[:design]) | ||||
|     # if @design.update_attributes(params[:design]) | ||||
|     #   flash[:notice] = "Successfully updated design and tasks." | ||||
|     #   redirect_to admin_designs_url(@design) | ||||
|     # else | ||||
|     #   render :action => 'edit' | ||||
|     # end | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.js  {nil} | ||||
|     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 | ||||
|     @design = Design.find(params[:id]) | ||||
|     filename = params[:filename] | ||||
|  | @ -91,6 +114,13 @@ class Admin::DesignsController < OrbitBackendController | |||
|     end | ||||
|     redirect_to admin_designs_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]) | ||||
|   end | ||||
| 
 | ||||
|   def upload_image | ||||
|     @design = Design.find(params[:id]) | ||||
|     @image = @design.images.build(params[:image]) | ||||
|     @image.save | ||||
|     render :layout => false | ||||
|   end | ||||
|    | ||||
|   protected | ||||
|    | ||||
|  | @ -98,7 +128,6 @@ class Admin::DesignsController < OrbitBackendController | |||
|     Zip::ZipFile.open(file) { |zip_file| | ||||
|       design = Design.new.from_json(zip_file.read("#{zip_name}/info.json")) | ||||
|       Dir.mktmpdir('f_path') { |dir| | ||||
|         design.build_layout | ||||
|         themes_entries = [] | ||||
|         javascripts_entries = [] | ||||
|         images_entries = [] | ||||
|  | @ -106,25 +135,11 @@ class Admin::DesignsController < OrbitBackendController | |||
|         zip_file.entries.each do |entry| | ||||
|           case (path = entry.to_s) | ||||
|             when /\A(#{zip_name})\/(default\.css)\z/    #for default css | ||||
|               filename = File.basename(entry.to_s) | ||||
|               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 | ||||
|               design.build_css_default(:file => get_temp_file(zip_file, dir, entry)) | ||||
|             when /\A(#{zip_name})\/(reset\.css)\z/    #for reset css | ||||
|               filename = File.basename(entry.to_s) | ||||
|               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 | ||||
|               design.build_css_reset(:file => get_temp_file(zip_file, dir, entry)) | ||||
|             when /\A(#{zip_name})\/(layout\.html)\z/    #for layout html | ||||
|               filename = File.basename(entry.to_s) | ||||
|               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 | ||||
|               design.build_layout(:file => get_temp_file(zip_file, dir, entry)) | ||||
|             when /\A(#{zip_name})\/(themes)\/.*(\.css)\z/   #for themes css | ||||
|               themes_entries << entry | ||||
|             when /\A(#{zip_name})\/(javascripts)\/.*(\.js)\z/   #for js | ||||
|  | @ -136,12 +151,7 @@ class Admin::DesignsController < OrbitBackendController | |||
| 
 | ||||
|         ['themes', 'javascripts', 'images'].each do |type| | ||||
|           eval("#{type}_entries").each do |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') | ||||
|             build_and_store = eval("design.#{type}").build | ||||
|             build_and_store.file = temp_file | ||||
|             build_and_store.to_save = true | ||||
|             eval("design.#{type}").build(:file => get_temp_file(zip_file, dir, entry)) | ||||
|           end | ||||
|         end | ||||
|       } | ||||
|  | @ -149,4 +159,11 @@ class Admin::DesignsController < OrbitBackendController | |||
|     } | ||||
|   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 | ||||
|  |  | |||
|  | @ -1,10 +1,11 @@ | |||
| class Admin::InfosController < ApplicationController | ||||
|    | ||||
|   layout "admin" | ||||
|   layout "new_admin" | ||||
|   before_filter :authenticate_user! | ||||
|   before_filter :is_admin? | ||||
|   before_filter :set_attribute, :only => [:index, :show, :new, :edit] | ||||
| 
 | ||||
|   helper Admin::AttributeValuesViewHelper | ||||
|    | ||||
|   def index | ||||
|     @attributes = Info.all.entries | ||||
|     render :template => 'admin/attributes/index' | ||||
|  | @ -32,8 +33,8 @@ class Admin::InfosController < ApplicationController | |||
|    | ||||
|   def update | ||||
|     @attribute = Info.find(params[:id]) | ||||
|     # binding.pry | ||||
|     @attribute.update_attributes(params[:info]) | ||||
|     @attribute.attribute_fields.each{|t| t.destroy if t["to_delete"] == true} | ||||
|     respond_to do |format| | ||||
|       format.html { redirect_to :action => :index } | ||||
|       format.js  { render 'admin/attributes/toggle_enable' } | ||||
|  | @ -47,10 +48,10 @@ class Admin::InfosController < ApplicationController | |||
|   end | ||||
|    | ||||
|   def add_attribute_field | ||||
|     @attribute = Info.find(params[:id]) rescue nil | ||||
|     if !@attribute | ||||
|       @attribute = Info.new | ||||
|     end | ||||
|     attribute = Info.find(params[:info_id]) rescue nil | ||||
|     @attribute_field_counter = attribute.attribute_fields.count | ||||
|     @attribute_field = attribute.attribute_fields.build | ||||
|     @attribute_field.save | ||||
|   end | ||||
|    | ||||
|   protected | ||||
|  |  | |||
|  | @ -4,7 +4,6 @@ class Admin::ItemsController < ApplicationController | |||
|    | ||||
|   before_filter :authenticate_user! | ||||
|   before_filter :find_parent_item | ||||
|   before_filter :find_snippets, :only => :index | ||||
|   before_filter :is_admin? | ||||
|   before_filter :set_current_item | ||||
|    | ||||
|  | @ -22,10 +21,4 @@ class Admin::ItemsController < ApplicationController | |||
|     render :nothing => true | ||||
|   end | ||||
|    | ||||
|   protected | ||||
|    | ||||
|   def find_snippets | ||||
|     @snippets = Snippet.where( { :parent_id => @parent_item.id } ) rescue nil | ||||
|   end | ||||
|    | ||||
| end | ||||
|  |  | |||
|  | @ -23,7 +23,7 @@ class Admin::LinksController < ApplicationController | |||
|     @item = Link.new(params[:link]) | ||||
| 
 | ||||
|     if @item.save | ||||
|       flash.now[:notice] = t('admin.create_success_link') | ||||
|       flash.now[:notice] = t('create.success.link') | ||||
|       respond_to do |format| | ||||
|         format.html {  | ||||
|           redirect_to admin_link_url(@item)  | ||||
|  | @ -31,7 +31,7 @@ class Admin::LinksController < ApplicationController | |||
|         format.js  {} | ||||
|       end | ||||
|     else | ||||
|       flash.now[:error] = t('admin.create_error_link') | ||||
|       flash.now[:error] = t('create.error.link') | ||||
|       render :action => "new" | ||||
|     end | ||||
|   end | ||||
|  | @ -40,7 +40,7 @@ class Admin::LinksController < ApplicationController | |||
|     @item = Link.find(params[:id]) | ||||
| 
 | ||||
|     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| | ||||
|         format.html {  | ||||
|           redirect_to admin_link_url(@item)  | ||||
|  | @ -48,7 +48,7 @@ class Admin::LinksController < ApplicationController | |||
|         format.js  {} | ||||
|       end | ||||
|     else | ||||
|       flash.now[:error] = t('admin.update_error_link') | ||||
|       flash.now[:error] = t('update.error.link') | ||||
|       render :action => "edit" | ||||
|     end | ||||
|   end | ||||
|  |  | |||
|  | @ -66,14 +66,14 @@ class Admin::ModuleAppsController < ApplicationController | |||
|   def assign_sub_manager | ||||
|       unless @assign_to_user.nil? || @assign_to_user.admin? | ||||
|          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 | ||||
|             flash[:notice] = t('admin.app_auth.assigning_manager.add_sub_manager_fail') | ||||
|             flash[:notice] = t('app_auth.assigning_manager.add_manager_fail') | ||||
|           end | ||||
|         else | ||||
|           flash[:notice] = t('admin.app_auth.assigning_manager.failed_no_user') | ||||
|           flash[:notice] = t('app_auth.failed_no_user') | ||||
|       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" | ||||
|   end | ||||
|    | ||||
|  | @ -81,14 +81,14 @@ class Admin::ModuleAppsController < ApplicationController | |||
|   def assign_manager | ||||
|     unless @assign_to_user.nil? || @assign_to_user.admin? | ||||
|        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 | ||||
|           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 | ||||
|       else | ||||
|         flash[:notice] = t('admin.app_auth.assigning_sub_manager.failed_no_user') | ||||
|         flash[:notice] = t('app_auth.failed_no_user') | ||||
|     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" | ||||
|   end | ||||
|    | ||||
|  | @ -96,9 +96,9 @@ class Admin::ModuleAppsController < ApplicationController | |||
|   def remove_manager | ||||
|     @app_manager = AppManager.find(params[:app_manager_id]) | ||||
|     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 | ||||
|       flash[:notice] = t('admin.app_auth.delete_manager.fail') | ||||
|       flash[:notice] = t('app_auth.delete_manager.fail') | ||||
|     end | ||||
|     redirect_to :action => "edit" | ||||
|   end | ||||
|  | @ -107,9 +107,9 @@ class Admin::ModuleAppsController < ApplicationController | |||
|   def remove_sub_manager | ||||
|     @app_sub_manager = AppManager.find(params[:app_sub_manager_id]) | ||||
|     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 | ||||
|       flash[:notice] = t('admin.app_auth.delete_sub_manager.fail') | ||||
|       flash[:notice] = t('app_auth.delete_sub_manager.fail') | ||||
|     end | ||||
|     redirect_to :action => "edit" | ||||
|   end | ||||
|  | @ -123,7 +123,7 @@ class Admin::ModuleAppsController < ApplicationController | |||
|       return | ||||
|     end | ||||
|       #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  | ||||
|   end | ||||
|    | ||||
|  | @ -135,7 +135,7 @@ class Admin::ModuleAppsController < ApplicationController | |||
|       return | ||||
|     end | ||||
|       #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  | ||||
|   end | ||||
|    | ||||
|  |  | |||
|  | @ -25,9 +25,9 @@ class Admin::ModuleAppsNewInterfaceController < OrbitBackendController | |||
|   def update_setting | ||||
|     module_app = update_setting_by_params | ||||
|     if module_app.save! | ||||
|       flash[:notice] = t("admin.object_auth.update_done") | ||||
|       flash[:notice] = t('update.success_') | ||||
|     else | ||||
|       flash[:notice] = t("admin.object_auth.update_failed") | ||||
|       flash[:notice] = t('update.fail') | ||||
|     end | ||||
|   end | ||||
|    | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ class Admin::ObjectAuthsController < ApplicationController | |||
|     if @object_auth.save | ||||
|       redirect_to edit_admin_object_auth_path(@object_auth) | ||||
|     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) | ||||
|     end | ||||
|   end | ||||
|  | @ -91,7 +91,8 @@ private | |||
| 
 | ||||
|   def check_if_user_can_do_object_auth | ||||
|     unless  check_permission(:manager) | ||||
|       render :nothing => true, :status => 403  | ||||
|       #render :nothing => true, :status => 403  | ||||
|       redirect_to '/' | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | @ -7,7 +7,7 @@ class Admin::ObjectAuthsNewInterfaceController < OrbitBackendController | |||
| 
 | ||||
|     @sys_users = User.all(conditions: {admin: false}).includes(:avatar) | ||||
|     @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 [] | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|  | @ -19,9 +19,9 @@ class Admin::ObjectAuthsNewInterfaceController < OrbitBackendController | |||
|   def update_setting | ||||
|     ob_auth = update_setting_by_params | ||||
|     if ob_auth.save! | ||||
|       flash[:notice] = t("admin.object_auth.update_done") | ||||
|       flash[:notice] = t('update.success_') | ||||
|     else | ||||
|       flash[:notice] = t("admin.object_auth.update_failed") | ||||
|       flash[:notice] = t('update.fail') | ||||
|     end | ||||
|   end | ||||
|    | ||||
|  | @ -38,10 +38,12 @@ class Admin::ObjectAuthsNewInterfaceController < OrbitBackendController | |||
|     users_to_remove = oa.auth_users - user_sat | ||||
| 
 | ||||
|     users_to_new.each do |new_user| | ||||
|       oa.privilege_users << new_user | ||||
|       oa.add_user_to_privilege_list(new_user) | ||||
|     end | ||||
| 
 | ||||
|     users_to_remove.each do |remove_user| | ||||
|       oa.privilege_users.delete_if{|user| user == remove_user} | ||||
|       oa.remove_user_from_privilege_list(remove_user) | ||||
|     end | ||||
|     oa | ||||
|  | @ -63,8 +65,26 @@ class Admin::ObjectAuthsNewInterfaceController < OrbitBackendController | |||
| 
 | ||||
|   def check_if_user_can_do_object_auth | ||||
|     unless  check_permission(:manager) | ||||
|       render :nothing => true, :status => 403  | ||||
|       redirect_to '/' | ||||
|     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 | ||||
|  | @ -61,7 +61,7 @@ class Admin::PagePartsController < ApplicationController | |||
| 	   | ||||
|     if @part.update_attributes(params[:page_part]) | ||||
|       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' | ||||
|         expire_page '/' | ||||
|  |  | |||
|  | @ -72,7 +72,7 @@ class Admin::PagesController < ApplicationController | |||
| 	end | ||||
| 	 | ||||
|     if @item.save | ||||
|       flash.now[:notice] = t('admin.create_success_page') | ||||
|       flash.now[:notice] = t('create.success.page') | ||||
|       respond_to do |format| | ||||
|         format.html {  | ||||
|           redirect_to admin_page_url(@item)  | ||||
|  | @ -80,7 +80,7 @@ class Admin::PagesController < ApplicationController | |||
|         format.js {} | ||||
|       end | ||||
|     else | ||||
|       flash.now[:error] = t('admin.create_error_page') | ||||
|       flash.now[:error] = t('create.error.page') | ||||
|       @apps = ModuleApp.all | ||||
|       @designs = Design.all.entries | ||||
|       @design = Design.first | ||||
|  | @ -99,7 +99,7 @@ class Admin::PagesController < ApplicationController | |||
| 	params[:page][:frontend_field_type] = nil | ||||
| 	 | ||||
|     if @item.update_attributes(params[:page]) | ||||
|       flash[:notice] = t('admin.update_success_page') | ||||
|       flash[:notice] = t('update.success.page') | ||||
|       respond_to do |format| | ||||
|         format.html { | ||||
|           redirect_to admin_page_url(@item)  | ||||
|  |  | |||
|  | @ -71,8 +71,8 @@ class Admin::PurchasesController < ApplicationController | |||
|         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.default_css) if design.default_css | ||||
|           build_file(orig_zip, zip_name, dir, design.reset_css) if design.reset_css | ||||
|           build_file(orig_zip, zip_name, dir, design.css_default) if design.css_default | ||||
|           build_file(orig_zip, zip_name, dir, design.css_reset) if design.css_reset | ||||
|            | ||||
|           ['themes', 'javascripts', 'images'].each do |type| | ||||
|             design.send(type).each do |object| | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -22,7 +22,7 @@ class Admin::UsersController < ApplicationController | |||
|     puts params.to_yaml | ||||
|     @user = User.new(params[:user]) | ||||
|     if @user.save | ||||
|       flash[:notice] = t('admin.create_success_user') | ||||
|       flash[:notice] = t('create.success.user') | ||||
|       redirect_to :action => :index | ||||
|     else | ||||
|       render :action => :new       | ||||
|  | @ -42,10 +42,10 @@ class Admin::UsersController < ApplicationController | |||
|     @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 | ||||
|       flash.now[:error] = t('admin.cant_revoke_self_admin') | ||||
|       flash.now[:error] = t(:cant_revoke_self_admin) | ||||
|     end | ||||
|     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 | ||||
|     else | ||||
|       get_info_and_roles | ||||
|  | @ -55,7 +55,7 @@ class Admin::UsersController < ApplicationController | |||
|    | ||||
|   def destroy | ||||
|     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 | ||||
|       @user = User.find(params[:id])  | ||||
|       @user.destroy | ||||
|  |  | |||
|  | @ -33,28 +33,12 @@ class Admin::UsersNewInterfaceController < ApplicationController | |||
|     @student_data = [] | ||||
|     @staff_data = [] | ||||
| 
 | ||||
| 
 | ||||
|     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 = @user.attribute_values | ||||
|     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?) | ||||
|       @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 | ||||
|     @user = User.new | ||||
|     @disable_all_field = true | ||||
|     # @disable_all_field = true | ||||
|     @form_index = 0 | ||||
|     get_info_and_roles | ||||
|   end | ||||
|    | ||||
|   def create | ||||
|     puts params.to_yaml | ||||
|     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_key = params[:user].has_key?('new_attribute_values') ? 'new_attribute_values' : 'attribute_values' | ||||
|     # attribute_values = params[:user].delete(attribute_values_key) | ||||
|     @user = User.new(params["user"]) | ||||
|       attribute_values.to_hash.each{|key,value| | ||||
|         @user.attribute_values.build(value) | ||||
|       } | ||||
|     @user.rebuild_sub_roles_from_attribute_values!(attribute_values) | ||||
|       # attribute_values.to_hash.each{|key,value| | ||||
|       #   @user.attribute_values.build(value) | ||||
|       # } | ||||
|     # @user.rebuild_sub_roles_from_attribute_values!(attribute_values) | ||||
|     binding.pry | ||||
|     if @user.save | ||||
|       flash[:notice] = t('admin.create_success_user') | ||||
|       flash[:notice] = t('create.success.user') | ||||
|       redirect_to :action => :index | ||||
|     else | ||||
|       @form_index = 0 | ||||
|  | @ -111,7 +96,7 @@ class Admin::UsersNewInterfaceController < ApplicationController | |||
|   end | ||||
| 
 | ||||
|   def edit | ||||
|     @disable_all_field = false | ||||
|     # @disable_all_field = false | ||||
|     @user = User.find(params[:id]) | ||||
|     @form_index = 0 | ||||
|     get_info_and_roles | ||||
|  | @ -122,7 +107,7 @@ class Admin::UsersNewInterfaceController < ApplicationController | |||
|     @user.update_attributes(params[:user]) | ||||
|     attribute_values_key = params[:user].has_key?('new_attribute_values') ? 'new_attribute_values' : 'attribute_values' | ||||
|     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 | ||||
|     redirect_to :action => :show | ||||
|     # # Update changes to the avatar | ||||
|  | @ -130,10 +115,10 @@ class Admin::UsersNewInterfaceController < ApplicationController | |||
|     # @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 | ||||
|     #   flash.now[:error] = t('admin.cant_revoke_self_admin') | ||||
|     #   flash.now[:error] = t(:cant_revoke_self_admin) | ||||
|     # end | ||||
|     # 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 | ||||
|     # else | ||||
|     #   get_info_and_roles | ||||
|  | @ -143,7 +128,7 @@ class Admin::UsersNewInterfaceController < ApplicationController | |||
|    | ||||
|   def destroy | ||||
|     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 | ||||
|       @user = User.find(params[:id])  | ||||
|       @user.destroy | ||||
|  |  | |||
|  | @ -76,7 +76,7 @@ class ApplicationController < ActionController::Base | |||
|     if is_admin? | ||||
|       true | ||||
|     else | ||||
|     flash[:error] = t("admin.access.denied.not_admin") | ||||
|     flash[:error] = t("access.denied.not_admin") | ||||
|     auth_failed_in_backend | ||||
|     end | ||||
|   end | ||||
|  | @ -85,7 +85,7 @@ class ApplicationController < ActionController::Base | |||
|     if is_manager? | ||||
|       true | ||||
|     else | ||||
|       flash[:error] = t("admin.access.denied.app.not_manager") | ||||
|       flash[:error] = t("access.denied.app.not_manager") | ||||
|       auth_failed_in_backend | ||||
|     end | ||||
|   end | ||||
|  | @ -94,7 +94,7 @@ class ApplicationController < ActionController::Base | |||
|     if (@module_app.sub_managing_users.include?(current_or_guest_user) || is_manager?) | ||||
|       true | ||||
|     else | ||||
|       flash[:error] = t("admin.access.denied.app.not_sub_manager") | ||||
|       flash[:error] = t("access.denied.app.not_sub_manager") | ||||
|       auth_failed_in_backend | ||||
|     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 ) | ||||
|       true | ||||
|     else | ||||
|       flash[:error] = t("admin.access.denied.app.not_authed_user") | ||||
|       flash[:error] = t("access.denied.app.not_authed_user") | ||||
|       auth_failed_in_backend | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   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? ) | ||||
|   end | ||||
|    | ||||
|  | @ -129,7 +129,9 @@ class ApplicationController < ActionController::Base | |||
|     object_class = params[:model].classify.constantize | ||||
|     @object = object_class.find(params[:id]) | ||||
|     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}" | ||||
|     render 'shared/render_share', :layout => false | ||||
|   end | ||||
|  |  | |||
|  | @ -103,11 +103,41 @@ class DesktopController< ApplicationController | |||
|   def getgroups | ||||
|     @section = Section.find(params["sectionid"]) | ||||
|     @groups = @section.groups | ||||
|     a = Array.new | ||||
|      | ||||
|     gr = Array.new | ||||
|     @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 | ||||
|     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 | ||||
|    | ||||
|   def getsectionlist | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ class DesktopPublicationsController< ApplicationController | |||
|   	end | ||||
|    | ||||
|   	def journal_p_add | ||||
|       debugger | ||||
|     	render "desktop/journal_pages/add", :layout => false | ||||
|   	end | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -1,4 +1,4 @@ | |||
| class OrbitBackendController< ApplicationController | ||||
| class OrbitBackendController < ApplicationController | ||||
|   #before_filter :setup_vars | ||||
|   #before_filter :set_current_user | ||||
| 
 | ||||
|  | @ -11,17 +11,15 @@ class OrbitBackendController< ApplicationController | |||
|   layout 'new_admin' | ||||
|    | ||||
|   def setup_vars | ||||
|     @app_title = request.fullpath.split('/')[2] | ||||
|     @app_title = request.fullpath.split('/')[1] if(@app_title == "back_end")  | ||||
|     @app_title.gsub!(/[?].*/,'') | ||||
|     @module_app = ModuleApp.first(conditions: {:key => @app_title} ) | ||||
|     @app_title = controller_path.split('/')[1].singularize | ||||
|     @module_app ||= ModuleApp.first(conditions: {:key => @app_title} ) | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def force_order_for_visitor | ||||
|       setup_vars | ||||
|       set_current_user | ||||
|     setup_vars | ||||
|     set_current_user | ||||
|   end | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| class OtheraccountsController< ApplicationController | ||||
| class Desktop::OtheraccountsController< ApplicationController | ||||
|   require 'open-uri' | ||||
|   require 'rexml/document' | ||||
|   require 'net/http'  | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -22,8 +22,8 @@ module Admin::AdBannersHelper | |||
|       ad_banner.object_auths.new(title: type ).save | ||||
|       oa = ad_banner.get_object_auth_by_title(type) | ||||
|     end | ||||
| #    link_to t('announcement.bulletin.cate_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), edit_admin_object_auth_path(oa) | ||||
|      link_to t(:category_auth),admin_object_auth_ob_auth_path(oa),:class => "btn btn-warning" | ||||
|   end | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -15,9 +15,9 @@ module Admin::ItemsHelper | |||
|       ret << "<div class='with_action'><i class='icons-moves'></i>" | ||||
|       ret << (link_to node.title, dest, :class => 'js_history') | ||||
|       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('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('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(: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('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.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 << "</div>" | ||||
|       ret << "</div>" | ||||
|  |  | |||
|  | @ -15,6 +15,6 @@ module Admin::ModuleAppsHelper | |||
|    | ||||
|   def get_auth_by(manager_obj) | ||||
|     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 | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -181,13 +181,13 @@ module ApplicationHelper | |||
|       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" | ||||
|     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/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/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='#{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 } | ||||
|     stylesheets << "<link href='#{theme.file.url}' rel='stylesheet' type='text/css' />\n" if theme | ||||
|     stylesheets | ||||
|  | @ -262,11 +262,15 @@ module ApplicationHelper | |||
|     js << "<meta property='og:description' content='#{object.subtitle}' />\n" rescue '' | ||||
|     js << "<meta property='og:image' content='#{object.image.url}' />\n" rescue '' | ||||
|     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}');" | ||||
|     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={}) | ||||
|     line_width = options[:line_width] || 12 | ||||
|     wrap_mark = options[:wrap_mark] || "<br />" | ||||
|  |  | |||
|  | @ -9,14 +9,18 @@ module AttributeFieldsHelper | |||
|   include ActionView::Helpers::RenderingHelper | ||||
| 
 | ||||
|   def block_helper(user,index,disable = false) | ||||
|     @index = index | ||||
|     @markup_options = markup_options.merge(:disabled=>disable) | ||||
|     @user = user | ||||
|     @attribute_value = @user.get_value_from_field_id(id)  | ||||
|     @new_attribute = @attribute_value.nil?   | ||||
|     @attribute_value = @attribute_value || @user.attribute_values.build(attribute_field_id: id) | ||||
|     @prefiled_value = @attribute_value.get_values | ||||
|     return instance_eval("render_#{markup}") #rescue "" | ||||
|     unless self.disabled | ||||
|       @index = index | ||||
|       @markup_options = markup_options.merge(:disabled=>disable,:func=>"input_unit") | ||||
|       @user = user | ||||
|       @attribute_value = @user.get_value_from_field_id(id) | ||||
|       @new_attribute = @attribute_value.nil?   | ||||
|       @attribute_value = @attribute_value || @user.attribute_values.build( attribute_field_id: id ) | ||||
|       @prefiled_value = @attribute_value.value | ||||
|       @panel_setting = self.get_data | ||||
|       return instance_eval("render_#{markup}") #rescue "" | ||||
| 
 | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def lang_tab(str,lang) | ||||
|  | @ -24,6 +28,7 @@ module AttributeFieldsHelper | |||
|   end | ||||
| 
 | ||||
|   def render_address | ||||
|     #NP | ||||
|     control_group_wrapper do |key,value| | ||||
|       result = '<div class="input-append">'.html_safe | ||||
| 
 | ||||
|  | @ -44,34 +49,55 @@ module AttributeFieldsHelper | |||
|   end | ||||
| 
 | ||||
|   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  | ||||
|       markup_value.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")) | ||||
|       a = self[:option_list].collect do |key,value| | ||||
|         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 | ||||
|   end | ||||
| 
 | ||||
|   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 | ||||
| 
 | ||||
|   def render_date_durnation #Need re-write low priority | ||||
| 
 | ||||
|    | ||||
|   end | ||||
| 
 | ||||
|   def render_radio_button  | ||||
|     markup_value = eval(self.markup_value) rescue {} | ||||
|     control_group_wrapper do  | ||||
|       markup_value.collect do |key,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")) | ||||
|       end.join rescue "" | ||||
|      @prefiled_value ||=[] | ||||
|     # begin  | ||||
|     #   markup_value = eval(self.markup_value)  | ||||
|     # 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 | ||||
| 
 | ||||
|   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 | ||||
| 
 | ||||
|   def render_text_area  | ||||
|  | @ -79,27 +105,35 @@ module AttributeFieldsHelper | |||
|       if(add_more and value.is_a?(Hash)) | ||||
|         values = value | ||||
|         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 | ||||
|       else | ||||
|       value = can_muti_lang_input ?  @prefiled_value[key] : @prefiled_value | ||||
|       key = can_muti_lang_input ? "[#{key}]" : "[value]" | ||||
|       text_area_tag(get_field_name_base + key,  value,@markup_options) | ||||
|       key = can_muti_lang_input ? "[#{key}]" : "" | ||||
|       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 | ||||
| 
 | ||||
|   def render_text_field | ||||
|      control_group_wrapper do |key,value| | ||||
|       if(add_more and value.is_a?(Hash)) | ||||
|       if(add_more) | ||||
|         values = value | ||||
|         values.each_with_index.collect  do |value,index| | ||||
|           text_field_tag(get_field_name_base + (key.nil? ? '' : "[#{key}][#{index}]"),  value.last,@markup_options) | ||||
|         end.join.html_safe | ||||
|         result = "" | ||||
|         unless values.nil? | ||||
|           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 | ||||
|       value = can_muti_lang_input ?  @prefiled_value[key] : @prefiled_value | ||||
|       key = can_muti_lang_input ? "[#{key}]" : "[value]" | ||||
|       text_field_tag(get_field_name_base + key,  value,@markup_options) | ||||
|       value = (can_muti_lang_input ?  @prefiled_value[key] : @prefiled_value) rescue nil | ||||
|       key_field = can_muti_lang_input ? "[#{key}]" : "" | ||||
|       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 | ||||
|  | @ -118,16 +152,18 @@ protected | |||
|     if can_muti_lang_input | ||||
|       result << "<div class='tabbable'>" | ||||
|       result << "<div class='tab-content'>" | ||||
|        | ||||
|       VALID_LOCALES.collect do |key| | ||||
|         value  = @prefiled_value[key.to_s] rescue nil | ||||
|         div_class = ["tab-pane" ,"fade"].join(" ") | ||||
|         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}") | ||||
|       end | ||||
| 
 | ||||
|       result << "</div>" | ||||
|       result << "<ul class='nav nav-pills'>" | ||||
|       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 | ||||
|       result << "</ul>" | ||||
|       result << "</div>" | ||||
|  | @ -158,14 +194,13 @@ protected | |||
| 
 | ||||
|   def end_block | ||||
|     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 | ||||
|       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 | ||||
| 
 | ||||
|   def get_field_name_base | ||||
|     # "user[#{self.attribute._type.downcase.pluralize}][#{self.attribute._id.to_s}][attribute_values][#{attribute_value.id}]" | ||||
|   def get_basic_field_name_base | ||||
|     if @new_attribute | ||||
|       "user[new_attribute_values][#{@index}]" | ||||
|     else | ||||
|  | @ -173,12 +208,16 @@ protected | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def get_field_name_base | ||||
|     get_basic_field_name_base + "[value]" | ||||
|   end | ||||
| 
 | ||||
|   def label | ||||
|     label_tag(key,title,:class=>"control-label") | ||||
|     label_tag(key,title,:class=>"control-label",:func => "field_label") | ||||
|   end | ||||
| 
 | ||||
|   def can_muti_lang_input | ||||
|     locale and LIST[:markups][markup]["muti_lang_input_supprt"] | ||||
|     LIST[:markups][markup]["muti_lang_input_supprt"] #and locale | ||||
|   end | ||||
| 
 | ||||
|   def can_add_more | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ module OrbitBackendHelper | |||
|   end | ||||
| 
 | ||||
|   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 | ||||
|  | @ -16,6 +16,6 @@ end | |||
| 
 | ||||
|    # 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 | ||||
|  |  | |||
|  | @ -2,11 +2,11 @@ class AppManager | |||
|   include Mongoid::Document | ||||
|   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 :rule_creator,:class_name => 'User' | ||||
|    | ||||
| 
 | ||||
| end | ||||
|  | @ -0,0 +1,8 @@ | |||
| class CssDefault < Stylesheet | ||||
|    | ||||
|   # belongs_to :design | ||||
|   # belongs_to :desktop_widget | ||||
| 
 | ||||
|   belongs_to :css, polymorphic: true | ||||
|    | ||||
| end | ||||
|  | @ -0,0 +1,5 @@ | |||
| class CssReset < Stylesheet | ||||
|    | ||||
|   belongs_to :design | ||||
|    | ||||
| end | ||||
|  | @ -3,25 +3,27 @@ class Design | |||
|   include Mongoid::Timestamps | ||||
|   include ParserLayout | ||||
| 
 | ||||
|   field :title, :type => String | ||||
|   field :author, :type => String | ||||
|   field :intro, :type => String | ||||
|   field :title, :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 | ||||
|    | ||||
|   embeds_one :layout, :cascade_callbacks => true | ||||
|   embeds_one :default_css, :class_name => "Stylesheet", :cascade_callbacks => true | ||||
|   embeds_one :reset_css, :class_name => "Stylesheet", :cascade_callbacks => true | ||||
|   embeds_many :themes, :cascade_callbacks => true | ||||
|   embeds_many :javascripts, :cascade_callbacks => true | ||||
|   embeds_many :images, :as => :design_image, :cascade_callbacks => true | ||||
|   # embeds_many :custom_images, :class_name => 'Image', :cascade_callbacks => true | ||||
|    | ||||
|   validates_presence_of :title | ||||
|   validates_presence_of :author | ||||
|   has_many :themes, :autosave => true, :dependent => :destroy | ||||
| 
 | ||||
|   accepts_nested_attributes_for :images, :allow_destroy => true | ||||
|   accepts_nested_attributes_for :javascripts, :allow_destroy => true | ||||
|   accepts_nested_attributes_for :themes, :allow_destroy => true | ||||
| 
 | ||||
|   validates_presence_of :author, :title | ||||
|    | ||||
|   after_save :parse_css_for_images | ||||
| 
 | ||||
|   | ||||
|   def new_files=(*attrs) | ||||
|     attrs[0].map  do |key,items_ary|   #Loop by JSs,Themes,Imgs | ||||
|  | @ -66,13 +68,9 @@ class Design | |||
|   protected | ||||
|    | ||||
|   def parse_css_for_images | ||||
|     if (self.default_css && self.default_css.changed) | ||||
|       self.default_css.parse_urls | ||||
|     end | ||||
|     self.css_default.parse_urls | ||||
|     self.themes.each do |theme| | ||||
|       if theme.changed? | ||||
|         theme.parse_urls | ||||
|       end | ||||
|       theme.parse_urls | ||||
|     end | ||||
|     parse_body_for_images(self) | ||||
|   end | ||||
|  |  | |||
|  | @ -4,7 +4,14 @@ class DesignFile | |||
| 
 | ||||
|   mount_uploader :file, AssetUploader | ||||
|    | ||||
|   field :to_save, :type => Boolean | ||||
|   field :to_destroy, :type => Boolean | ||||
|   field :name | ||||
| 
 | ||||
|   before_save :set_name | ||||
|    | ||||
|   protected | ||||
|    | ||||
|   def set_name | ||||
|     self.name = self.file_identifier | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  |  | |||
|  | @ -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_class | ||||
|    | ||||
|   embedded_in :design_image, polymorphic: true | ||||
|   field :in_css, :type => Boolean, :default => false | ||||
|   field :in_html, :type => Boolean, :default => false | ||||
|   field :name | ||||
|    | ||||
|   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 | ||||
|  | @ -1,3 +1,6 @@ | |||
| class Javascript < DesignFile | ||||
|   embedded_in :design | ||||
|   # belongs_to :design | ||||
|   # belongs_to :desktop_widget | ||||
| 
 | ||||
|   belongs_to :js, polymorphic: true | ||||
| end | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ class Layout < DesignFile | |||
|   field :body | ||||
|    | ||||
|   embeds_one :menu | ||||
|   embedded_in :design | ||||
|   belongs_to :design | ||||
|   embeds_many :layout_parts | ||||
|    | ||||
|   before_save :parse_layout | ||||
|  |  | |||
|  | @ -1,34 +1,40 @@ | |||
| class Stylesheet < DesignFile | ||||
|   embedded_in :design | ||||
|   mount_uploader :file_orig, AssetUploader | ||||
|    | ||||
|   def parse_urls | ||||
|     orig_content = content = self.file.read.force_encoding("UTF-8") | ||||
|     # self.remove_file! | ||||
|     # self.remove_file_orig! | ||||
|     names = [] | ||||
|     images = self.design.images | ||||
|     content.scan(/(?<=url)(.*?)(?=\))/){ | ||||
|       css_name = $1.gsub(' ','').gsub('(','') | ||||
|       name = File.basename(css_name).gsub(/[\\\"]/, '') | ||||
|       file_name = images.detect{ |i| i.file_identifier.eql?(name) }.file_url rescue nil | ||||
|       names << [css_name, file_name] | ||||
|     } | ||||
|     names.each do |name| | ||||
|       content.gsub!(name[0], name[1]) if name[1] | ||||
|     end | ||||
|     Dir.mktmpdir('f_path') { |dir| | ||||
|       orig_file_name = self.file_identifier | ||||
|        | ||||
|       temp_file = File.new(dir + '/' + orig_file_name, 'w+') | ||||
|       temp_file.write orig_content.force_encoding("UTF-8") | ||||
|       self.file_orig = temp_file | ||||
|        | ||||
|       temp_file = File.new(dir + '/' + orig_file_name, 'w+') | ||||
|       temp_file.write content.force_encoding("UTF-8") | ||||
|       self.file = temp_file | ||||
|       self.save | ||||
|     }     | ||||
|   end | ||||
|    | ||||
| end | ||||
| class Stylesheet < DesignFile | ||||
|   # belongs_to :design | ||||
|   mount_uploader :file_orig, AssetUploader | ||||
|    | ||||
|   def parse_urls | ||||
|     orig_content = content = self.file.read.force_encoding("UTF-8") | ||||
|     # self.remove_file! | ||||
|     # self.remove_file_orig! | ||||
|     names = {} | ||||
|     images = self.css.images | ||||
|     content.scan(/(?<=url)(.*?)(?=\))/){ | ||||
|       css_name = $1.gsub(' ','').gsub('(','') | ||||
|       unless names.has_key?(css_name) | ||||
|         name = File.basename(css_name).gsub(/[\\\"]/, '') | ||||
|         image = images.detect{ |i| i.file_identifier.eql?(name) } rescue nil | ||||
|         if image | ||||
|           image.update_attribute(:in_css, true) | ||||
|           file_name = image.file_url | ||||
|           names.merge!({css_name => file_name}) | ||||
|         end | ||||
|       end | ||||
|     } | ||||
|     names.each_pair do |key, value| | ||||
|       content.gsub!(key, value) | ||||
|     end | ||||
|     Dir.mktmpdir('f_path') { |dir| | ||||
|       orig_file_name = self.file_identifier | ||||
|        | ||||
|       temp_file = File.new(dir + '/' + orig_file_name, 'w+') | ||||
|       temp_file.write orig_content.force_encoding("UTF-8") | ||||
|       self.file_orig = temp_file | ||||
|        | ||||
|       temp_file = File.new(dir + '/' + orig_file_name, 'w+') | ||||
|       temp_file.write content.force_encoding("UTF-8") | ||||
|       self.file = temp_file | ||||
|       self.save | ||||
|     }     | ||||
|   end | ||||
|    | ||||
| end | ||||
|  |  | |||
|  | @ -1,14 +1,11 @@ | |||
| class Theme < Stylesheet | ||||
|   field :name | ||||
|    | ||||
|   embedded_in :design | ||||
|    | ||||
|   before_save :set_name | ||||
|   belongs_to :design | ||||
|    | ||||
|   protected | ||||
|    | ||||
|   def set_name | ||||
|     self.name = File.basename(self.file_identifier,".css") | ||||
|     self.name = File.basename(self.file_identifier, ".css") | ||||
|   end | ||||
|    | ||||
| end | ||||
|  |  | |||
|  | @ -2,14 +2,15 @@ class Desktop | |||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|    | ||||
|   field :theme, default: "4f8d3f493b67fcd05f086359" | ||||
|   field :theme, default: "4f8d3f533b67fcd05f08635a" | ||||
|   field :customtheme | ||||
|   field :wallpaper | ||||
|    | ||||
|   belongs_to :user | ||||
|   has_and_belongs_to_many :desktop_widgets, :autosave => true | ||||
|    | ||||
|   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 | ||||
|    | ||||
|  | @ -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 | ||||
|  | @ -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 | ||||
|   | ||||
|  | @ -9,6 +9,6 @@ class Tile | |||
|   field :title | ||||
|    | ||||
|   belongs_to :group | ||||
|    | ||||
|    | ||||
|   has_one :desktop_widget | ||||
|      | ||||
| end | ||||
|  | @ -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 | ||||
|  | @ -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 | ||||
|  | @ -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 | ||||
|   | ||||
|  | @ -48,7 +48,7 @@ class ModuleApp | |||
|   def assign_manager(user,assigner) | ||||
|     manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue 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 | ||||
|     manager | ||||
|   end | ||||
|  | @ -56,7 +56,7 @@ class ModuleApp | |||
|   def assign_sub_manager(user,assigner) | ||||
|     submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil | ||||
|     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 | ||||
|     submanager | ||||
|   end | ||||
|  | @ -82,7 +82,7 @@ class ModuleApp | |||
|   protected | ||||
|    | ||||
|   def set_key | ||||
|     self.key = self.title.underscore if self.title | ||||
|     self.key = self.title.underscore.singularize if self.title | ||||
|   end | ||||
| 
 | ||||
|    | ||||
|  |  | |||
|  | @ -2,23 +2,28 @@ class ObjectAuth  < PrototypeAuth | |||
|   include OrbitCoreLib::ObjectTokenUnility | ||||
|   validates_uniqueness_of :title ,:scope => [:obj_authable_type,:obj_authable_id]  #{ |c| } | ||||
|   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) | ||||
|   # > - or Something.find(query).auth | ||||
|   def siblings | ||||
|     ObjectAuth.where({obj_authable_type: obj_authable_type,title: title}) | ||||
|   end | ||||
| 
 | ||||
|   def auth_obj | ||||
|     class_obj = eval(self.obj_authable_type) | ||||
|     class_obj.find self.obj_authable_id | ||||
|   end | ||||
| 
 | ||||
|   def check_user_has_app_auth | ||||
|     sub_managing_users = auth_obj.app_auth.sub_managing_users rescue [] | ||||
|     app_auth =  auth_obj.app_auth | ||||
|   def check_user_has_can_access_app | ||||
|     sub_managing_users = auth_obj.module_app.sub_managing_users rescue [] | ||||
|     module_app =  auth_obj.module_app | ||||
|     self.auth_users.each do |auth_user| | ||||
|       if !sub_managing_users.include? auth_user && !auth_user.admin? | ||||
|          app_auth.assign_sub_manager(auth_user,User.current) | ||||
|          app_auth.save! | ||||
|          module_app.assign_sub_manager(auth_user,User.current) | ||||
|          module_app.save | ||||
|       end | ||||
|     end | ||||
|      | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  | @ -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 | ||||
|  | @ -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 | ||||
|  | @ -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 | ||||
|  | @ -11,6 +11,7 @@ class Attribute | |||
|   has_many :attribute_fields, :autosave => true, :dependent => :destroy | ||||
|   accepts_nested_attributes_for :attribute_fields, :allow_destroy => true | ||||
|    | ||||
|    | ||||
|   def is_built_in? | ||||
|     self.built_in | ||||
|   end | ||||
|  |  | |||
|  | @ -5,26 +5,68 @@ class AttributeField | |||
|   include ::AttributeFieldsHelper | ||||
| 
 | ||||
|   field :key | ||||
|   field :markup  | ||||
|   field :markup_value ,:type => Hash | ||||
|   field :markup ,:default=>"text_field" | ||||
|   field :option_list ,:type => Hash,:default => {} | ||||
|   field :markup_options,:type => Hash | ||||
|   field :locale, :type => Boolean, :default => true | ||||
|   # field :locale, :type => Boolean, :default => true | ||||
|   # field :list_options, :type => Array | ||||
|   field :built_in, :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 :locale_title, localize: true | ||||
|   field :neutral_title | ||||
|   field :neutral_for | ||||
|   field :title, localize: true | ||||
|    | ||||
| 
 | ||||
|   belongs_to :attribute | ||||
|   # belongs_to :role | ||||
|   has_many :attribute_values | ||||
|    | ||||
|   has_many :attribute_values,:autosave => true, :dependent => :destroy | ||||
|   before_save :check_option_list | ||||
|   # 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) | ||||
|     self[:markup_options] = (eval(var)  rescue {}) | ||||
|  | @ -43,36 +85,49 @@ class AttributeField | |||
|     self.attribute.role | ||||
|   end | ||||
| 
 | ||||
|   def title_translations | ||||
|     if locale | ||||
|       return locale_title_translations | ||||
|     else | ||||
|       return Hash[VALID_LOCALES.map{|d| [d,neutral_title]}] | ||||
|     end | ||||
|   def panel | ||||
|     panel  = LIST[:markups][self[:markup]]["panel"] | ||||
|   end | ||||
| 
 | ||||
|   def title_translations=(var) | ||||
|      if locale | ||||
|       self.locale_title_translations = var | ||||
|     end | ||||
|   def get_data | ||||
|     self[panel] | ||||
|   end | ||||
| 
 | ||||
|   def title | ||||
|     if locale | ||||
|       return self.locale_title | ||||
|     else | ||||
|       return self.neutral_title | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def title=(var) | ||||
|     # binding.pry | ||||
|      if locale  | ||||
|       self.locale_title = var | ||||
|     else | ||||
|       self.neutral_title = var | ||||
|     end | ||||
|   end | ||||
|   # def title_translations | ||||
|   #   if locale | ||||
|   #     return self.locale_title_translations | ||||
|   #   else | ||||
|   #     return  self[:neutral_title] #Hash[VALID_LOCALES.map{|d| [d,neutral_title]}] | ||||
|   #   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 | ||||
|   # def select_list_options=(var) | ||||
|  | @ -92,4 +147,9 @@ class AttributeField | |||
|     self.disabled | ||||
|   end | ||||
| 
 | ||||
| protected | ||||
|   def check_option_list | ||||
|     self[:option_list] = self[panel]["option_list"] | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  |  | |||
|  | @ -10,9 +10,55 @@ class AttributeValue | |||
|   belongs_to :user | ||||
| 
 | ||||
|   before_save :check_key | ||||
| 
 | ||||
|   before_save :data_proc | ||||
|   # 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 | ||||
|     self.key = attribute_field.key | ||||
|   end | ||||
|  | @ -26,45 +72,46 @@ class AttributeValue | |||
|   end | ||||
|    | ||||
|   def get_value_by_locale(locale) | ||||
| 
 | ||||
|     case self.attribute_field.markup | ||||
|       when "text_field" | ||||
|         self.attribute_field.locale ? self[locale]  : self[:value] | ||||
|         self.attribute_field.locale ? self[locale.to_s]  : self.value | ||||
|       when "select" | ||||
|         markup_values = eval(self.attribute_field.markup_value) | ||||
|         markup_values[self[:value]][locale.to_s] rescue 'NoData' | ||||
|         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' | ||||
|       when "text_area" | ||||
|         self.attribute_field.locale ? self[locale]  : self[:value] | ||||
|         self.attribute_field.locale ? self[locale.to_s]  : self.value | ||||
|       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" | ||||
|         self[:value] | ||||
|         self.value | ||||
|       when "radio_button" | ||||
|         markup_values = eval(self.attribute_field.markup_value) | ||||
|         markup_values[self[:value].first[0]][locale.to_s] | ||||
|       when "checkbox" | ||||
|         markup_values = eval(self.attribute_field.markup_value) | ||||
|         self[:value].keys.collect{|key| markup_values[key][locale.to_s] }.join(",") | ||||
|         markup_values[:value][locale.to_s] | ||||
|       when "checkbox"  | ||||
|         markup_values = self.attribute_field.markup_value | ||||
|         self[:value].keys.collect{|key| markup_values[key][locale.to_s]}.join(",") | ||||
|       when "date_durnation" | ||||
|         self[:value] | ||||
|         self.value | ||||
|       else | ||||
|         self.attribute_field.locale ? self[locale]  : self[:value] | ||||
|         self.attribute_field.locale ? self[locale.to_s]  : self.value | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def get_values | ||||
|     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"] | ||||
|         return Hash[VALID_LOCALES.collect{|lang|  [lang,get_value_by_locale(lang.to_sym)]}] | ||||
|       else | ||||
|           return get_value_by_locale("") | ||||
|       end | ||||
|     else | ||||
|       if self.attribute_field.markup == "select" | ||||
|         self[:value]   | ||||
|       else | ||||
|         self[:value].keys | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|   # def get_values | ||||
|   #   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"] | ||||
|   #       return Hash[VALID_LOCALES.collect{|lang|  [lang,get_value_by_locale(lang.to_sym)]}] | ||||
|   #     else | ||||
|   #         return get_value_by_locale("") | ||||
|   #     end | ||||
|   #   else | ||||
|   #     if self.attribute_field.markup == "select" | ||||
|   #       self[:value]   | ||||
|   #     else | ||||
|   #       self[:value].keys rescue self[:value] | ||||
|   #     end | ||||
|   #   end | ||||
|   # end | ||||
| 
 | ||||
| end | ||||
|  |  | |||
|  | @ -27,4 +27,11 @@ class Role | |||
|     self.first(:conditions => {:key => key}) | ||||
|   end | ||||
|    | ||||
|   def statuses_for_select | ||||
|     data = self.statuses.map do |t|  | ||||
|       [t.id.to_s,t.title_translations]  | ||||
|     end | ||||
|     Hash[data] | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  | @ -5,7 +5,7 @@ class Status | |||
| 
 | ||||
|   has_and_belongs_to_many :users | ||||
| 
 | ||||
|    | ||||
|   field :key | ||||
|   belongs_to :role | ||||
|   # has_and_belongs_to_many :sub_roles   | ||||
| 
 | ||||
|  |  | |||
|  | @ -9,10 +9,7 @@ class User | |||
|    | ||||
|   field :admin, :type => Boolean, :default => true | ||||
|   field :active_role | ||||
|   field :nccu_ldap_uid | ||||
|   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 :status_record,type: Hash | ||||
| 
 | ||||
|  | @ -34,27 +31,61 @@ class User | |||
|   accepts_nested_attributes_for :attribute_values, :allow_destroy => true  | ||||
| 
 | ||||
|   before_create :initialize_desktop | ||||
|   before_save :check_status_record | ||||
|   before_save :rebuild_status_record | ||||
|   before_save :save_roles | ||||
| 
 | ||||
|   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) | ||||
|   #   binding.pry | ||||
|   # end | ||||
|   # def new_attribute_values(vars) | ||||
|   #   binding.pry | ||||
|   # end | ||||
|   def rebuild_sub_roles_from_attribute_values!(attribute_values) | ||||
|     # attribute_fields = AttributeField.find attribute_values.collect{|t| t[1][:attribute_field_id]} | ||||
|     # self.sub_roles = attribute_fields.collect{|t| t.attribute if t.attribute.is_a? SubRole}.compact.uniq | ||||
| 
 | ||||
|   ## # class << self | ||||
|   ##   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 | ||||
| 
 | ||||
|   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) | ||||
|     self.sub_roles << SubRole.find(sub_role_id) | ||||
|     self.status_record.store(sub_role_id,status_id) | ||||
|     self.status_record.merge!(Hash[sub_role_id,status_id]) | ||||
|   end | ||||
| 
 | ||||
|   # 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 | ||||
|     sr = ::SubRole.first({conditions: { key: sub_role_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 | ||||
| 
 | ||||
|   def self.find_by_status(sub_role_id,status_id) #Query for users by using specific sub_role  and status key buy within ID | ||||
|     User.where("status_record.#{sub_role_id}" => status_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,: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 | ||||
| 
 | ||||
|   def create_dept_cache | ||||
|  | @ -139,27 +177,21 @@ class User | |||
|   end | ||||
|    | ||||
|   def initialize_desktop | ||||
|     self.build_desktop | ||||
|    self.build_desktop(desktop_widget_ids: DesktopWidget.all.collect{|widget| widget.id}) | ||||
|   end | ||||
|    | ||||
|   protected | ||||
|   def save_roles | ||||
|     self.roles = self.sub_roles.collect{|t| t.role}.uniq | ||||
|     def save_roles | ||||
|       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 | ||||
| 
 | ||||
|   def check_status_record | ||||
|     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 | ||||
| end | ||||
|  | @ -24,7 +24,7 @@ class ImageUploader < CarrierWave::Uploader::Base | |||
|   # Override the directory where uploaded files will be stored. | ||||
|   # This is a sensible default for uploaders that are meant to be mounted: | ||||
|   def store_dir | ||||
|     "image/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" | ||||
|     "#{model.id}" | ||||
|   end | ||||
| 
 | ||||
|   # 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 | ||||
|    | ||||
|   version :thumb do | ||||
|     process :resize_to_fit => [200, 200] | ||||
|     process :resize_to_limit => [200, 200] | ||||
|   end | ||||
| 
 | ||||
|   # Add a white list of extensions which are allowed to be uploaded. | ||||
|  |  | |||
|  | @ -2,26 +2,26 @@ | |||
| <% 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| -%> | ||||
| 		<div class="adbanner-setup well"> | ||||
| 			<!--<p><%#= t("admin.ad.banner_best_size") %>:</p>--> | ||||
| 			<%= f.label :ad_fx, t('admin.ad.ab_fx') %> | ||||
| 			<!--<p><%#= t("ad.banner_best_size") %>:</p>--> | ||||
| 			<%= f.label :ad_fx, t('ad.ab_fx') %> | ||||
| 			<%= f.select :ad_fx ,AdBanner::FX_TYPES %> | ||||
| 			<%= f.label :transition_sec, t('admin.ad.transition_sec') %> | ||||
| 			<%= f.text_field :transition_sec,:placeholder=>t('admin.ad.sec_place_holder'),:class=> "span3" %> <%= t("admin.ad.trans_unit_sec") %> | ||||
| 			<%= f.label :transition_sec, t('ad.transition_sec') %> | ||||
| 			<%= f.text_field :transition_sec,:placeholder=>t('ad.sec_place_holder'),:class=> "span3" %> <%= t("ad.trans_unit_sec") %> | ||||
| 			<%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 | ||||
| 			<% end -%> | ||||
| 			<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'  %> | ||||
| 		</div> | ||||
| 	<% end -%> | ||||
| <% end -%> | ||||
| 		<h3><%= t("admin.ad.picture_list")%></h3> | ||||
| 		<h3><%= t("ad.picture_list")%></h3> | ||||
| 		<div class="adbanner-list"> | ||||
| 			<%if  (at_least_module_manager || ad_banner_tab.cur_user_is_sub_manager_of(:edit) )%> | ||||
| 				<%=  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'%> | ||||
| 				<% end -%> | ||||
| 			<% end -%> | ||||
|  | @ -30,7 +30,7 @@ | |||
| 			</ul> | ||||
| 			 <% if at_least_module_manager  %> | ||||
| 				<%= 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 -%> | ||||
| 
 | ||||
| 			<%#= render :partial => 'new_add_banner_file', :object => ad_banner_tab.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %> | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <li class="span3"> | ||||
| 			<%= image_tag ad_image.file rescue nil%>  | ||||
| 			<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'}" %> | ||||
| 			</p> | ||||
|                   <%if at_least_module_manager || sub_manager?(ad_image.ad_banner) %> | ||||
|  |  | |||
|  | @ -4,33 +4,33 @@ | |||
| 
 | ||||
| 	<div class="modal-header"> | ||||
| 		<a class="close" data-dismiss="modal">×</a> | ||||
| 		<h3><%= t("admin.ad.new_banner") %></h3> | ||||
| 		<h3><%= t('new.banner') %></h3> | ||||
| 	</div> | ||||
| 	 | ||||
| 	<div class="modal-body form-horizontal"> | ||||
| 		<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"> | ||||
| 				<%= f.text_field :title %> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<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"> | ||||
| 				<%= f.text_field :transition_sec %> <%= t("admin.ad.trans_unit_sec") %> | ||||
| 				<%= f.text_field :transition_sec %> <%= t("ad.trans_unit_sec") %> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<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"> | ||||
| 				<%= f.text_field :best_size %> Ex: 500px x 300px | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		 | ||||
| 		<div class="control-group"> | ||||
| 			<%= f.label :ad_fx, t('admin.ad.ab_fx') %> | ||||
| 			<%= f.label :ad_fx, t('ad.ab_fx') %> | ||||
| 			<div class="controls"> | ||||
| 				<%= f.select :ad_fx ,AdBanner::FX_TYPES %> | ||||
| 			</div> | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ | |||
| 			<% 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> | ||||
| 	 | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ | |||
|               <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> | ||||
|               </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 id="calendarRange"> | ||||
|                       <div class="input-append"> | ||||
|  | @ -36,8 +36,8 @@ | |||
|                       today = today.format('isoDate'); | ||||
|                       var state = false; | ||||
|                       var arr = state ? "▼" : "▲" | ||||
| 											var start_date = <%= @ad_image.post_date.nil?? 'today' : "'#{@ad_image.post_date.strftime('%Y / %m / %d')}'" %>; | ||||
| 											var end_date = <%= @ad_image.unpost_date.nil?? 'today' : "'#{@ad_image.unpost_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')}'").html_safe %>; | ||||
|                       //calendarRange | ||||
|                       $('#calendarRange .showDate').html(start_date+" - "+end_date); | ||||
|                       $('#calendarRange .calendarInput').val(start_date+" - "+end_date); | ||||
|  | @ -73,7 +73,7 @@ | |||
|         <div class="widget-action clear"> | ||||
|             <a class="action"><i title="Upload pictures" class="icon-exclamation-sign icon-white tip"></i></a> | ||||
|         </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="control-group"> | ||||
|             <div  class="upload-picture"> | ||||
|  | @ -81,7 +81,7 @@ | |||
|               <%= image_tag @ad_image.file rescue ''%> | ||||
|             </div> | ||||
|             <% 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> | ||||
|               <% end -%> | ||||
|             <div class="controls file-upload input-prepend"> | ||||
|  | @ -101,7 +101,7 @@ | |||
| 					<div class="widget-action clear"> | ||||
| 						<a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Upload pictures"></i></a> | ||||
| 					</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"> | ||||
| 						<%= f.select :link_open ,AdImage::LINK_OPEN_TYPES%> | ||||
| 					</div> | ||||
|  | @ -111,7 +111,7 @@ | |||
| 					<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> | ||||
| 					</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"> | ||||
| 						 <%= f.text_field :weight ,:class=> 'span3',:placeholder=>"在套圖中出現次數 1次請輸入1" %> | ||||
| 					</div> | ||||
|  | @ -121,7 +121,7 @@ | |||
| 					<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> | ||||
| 					</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"> | ||||
| 						<%= f.text_field :out_link ,:class=> 'span3',:placeholder => "輸入連結"%> | ||||
| 					</div> | ||||
|  | @ -167,4 +167,4 @@ | |||
| 			</div> | ||||
| 			<!--Post End--> | ||||
| 		</form> | ||||
| 	</div> | ||||
| 	</div> | ||||
|  |  | |||
|  | @ -5,18 +5,18 @@ | |||
| <div class="main_list"> | ||||
| 	<%= flash_messages %> | ||||
| 	<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> | ||||
| 	<table> | ||||
| 		<thead> | ||||
| 			<tr> | ||||
| 				 <td><%= t('admin.app.title') %></td> | ||||
| 		      <td><%= t('admin.app.description') %></td> | ||||
| 		      <td><%= t('admin.app.use_status') %></td> | ||||
| 		      <td><%= t('admin.app.autdor') %></td> | ||||
| 		      <td><%= t('admin.app.organization') %></td> | ||||
| 		      <td><%= t('admin.app.version') %></td> | ||||
| 					<td class="action"><%= t('admin.action') %></td> | ||||
| 				 <td><%= t(:title) %></td> | ||||
| 		      <td><%= t(:description) %></td> | ||||
| 		      <td><%= t(:use_status) %></td> | ||||
| 		      <td><%= t(:author) %></td> | ||||
| 		      <td><%= t(:organization) %></td> | ||||
| 		      <td><%= t(:version) %></td> | ||||
| 					<td class="action"><%= t(:action) %></td> | ||||
| 			</tr> | ||||
| 		</thead> | ||||
| 		<tbody> | ||||
|  | @ -47,6 +47,6 @@ | |||
| 		</tbody> | ||||
| 	</table> | ||||
| 	<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> | ||||
|  |  | |||
|  | @ -5,8 +5,8 @@ | |||
| 			<div class="quick-edit"> | ||||
| 				<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('asset_category.delete'), admin_asset_category_path(asset_category), :confirm => t('announcement.sure?'), :method => :delete, :remote => true %></li> | ||||
| 						<li><%= link_to t(:edit), edit_admin_asset_category_path(asset_category), :remote => true %></li> | ||||
| 						<li><%= link_to t(:delete), admin_asset_category_path(asset_category), :confirm => t(:sure?), :method => :delete, :remote => true %></li> | ||||
| 					 | ||||
| 				</ul> | ||||
| 			</div> | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ | |||
| 			<table class="table main-list">	 | ||||
| 				<thead> | ||||
| 					<tr> | ||||
| 						<th class="span2"><%= t('asset_category.key') %></th> | ||||
| 						<th class="span2"><%= t(:key) %></th> | ||||
| 						<% @site_valid_locales.each do |locale| %> | ||||
| 						<th class="span2"><%= I18nVariable.first(:conditions => {:key => locale})[I18n.locale] %></th> | ||||
| 						<% end %> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| <div id='pop_up_content' class="main2"> | ||||
| 	<h1><%= t('editing_asset') %></h1> | ||||
| 	<h1><%= t('editing.asset') %></h1> | ||||
| 
 | ||||
| 	<%= flash_messages %> | ||||
| 
 | ||||
|  | @ -11,7 +11,7 @@ | |||
|     		<%= link_back %> | ||||
| 				<%= f.submit t(:edit) %> | ||||
| 			<% 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 %> | ||||
| 	  </div> | ||||
| 	<% end %> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| <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"> | ||||
|         <%= f.fields_for :title_translations do |f| %> | ||||
|           <% @site_valid_locales.each do |locale| %> | ||||
|  | @ -14,13 +14,13 @@ | |||
|     </div> | ||||
| </div> | ||||
| <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"> | ||||
|         <%= f.select :asset_category_id, @asset_categories.collect{|t| [ t.title, t.id ]}, {}, :class => "input-large" %> | ||||
|     </div> | ||||
| </div> | ||||
| <div class="control-group"> | ||||
|     <label class="control-label"><%= t 'admin.tags' %></label> | ||||
|     <label class="control-label"><%= t :tags %></label> | ||||
|     <div class="controls"> | ||||
|         <% @tags.each do |tag| %> | ||||
|             <%= content_tag :label, :class => "checkbox inline" do -%> | ||||
|  | @ -32,7 +32,7 @@ | |||
|     </div> | ||||
| </div> | ||||
| <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"> | ||||
|         <%= f.file_field :data, :class => 'upload' %> | ||||
|     </div> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| <div id='pop_up_content' class="main2"> | ||||
| 	<h1><%= t('admin.new_asset') %></h1> | ||||
| 	<h1><%= t('new.asset') %></h1> | ||||
| 
 | ||||
| 	<%= flash_messages %> | ||||
| 
 | ||||
|  | @ -7,7 +7,7 @@ | |||
| 	  <%= f.error_messages %> | ||||
| 	  <%= render :partial => "form", :locals => { :f => f } %> | ||||
| 	  <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> | ||||
| 	<% end %> | ||||
| </div> | ||||
|  |  | |||
|  | @ -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]), | ||||
|  ['title', 'title','span4', 'admin.title'], | ||||
| 													['description', 'description', 'span1-2', 'admin.data'], | ||||
| 													['intro', 'intro', 'span1-2', 'admin.file_type'], | ||||
| 													['intro', 'intro', 'span1-2', 'admin.file_length'], | ||||
| 													['intro', 'intro', 'span1-2', 'admin.description'], | ||||
| 													['intro', 'intro', 'span1-2', 'admin.tags']).html_safe %> | ||||
|  ['title', 'title','span4', :title], | ||||
| 													['description', 'description', 'span1-2', :data], | ||||
| 													['intro', 'intro', 'span1-2', :type], | ||||
| 													['intro', 'intro', 'span1-2', :size], | ||||
| 													['intro', 'intro', 'span1-2', :description], | ||||
| 													['intro', 'intro', 'span1-2', :tags]).html_safe %> | ||||
|  |  | |||
|  | @ -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 %> | ||||
|  | @ -1,7 +1,7 @@ | |||
| <% content_for :secondary do %> | ||||
| <div class="assets_setup"> | ||||
|   <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> | ||||
| </div> | ||||
| <% end -%> | ||||
|  |  | |||
|  | @ -7,12 +7,12 @@ | |||
| <body onload="tinyMCEPopup.executeOnLoad('init();')"> | ||||
| <%= form_for :asset, :url => admin_assets_path(:uploader => true), :html => {:id => 'ajaxForm', :multipart => true } do |f| %> | ||||
|     <div class="modal-header"> | ||||
|         <h3><%= t 'admin.file_upload' %></h3> | ||||
|         <h3><%= t 'file.upload' %></h3> | ||||
|     </div> | ||||
|     <label class="control-label error" id="dyn_error"></label> | ||||
|     <div class="modal-body form-horizontal"> | ||||
|         <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"> | ||||
|                 <%= f.fields_for :title_translations do |f| %> | ||||
|                     <div> | ||||
|  | @ -29,7 +29,7 @@ | |||
|             </div> | ||||
|         </div> | ||||
|         <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"> | ||||
|                 <%= f.fields_for :description_translations do |f| %> | ||||
|                     <div> | ||||
|  | @ -46,7 +46,7 @@ | |||
|             </div> | ||||
|         </div> | ||||
|         <div class="control-group"> | ||||
|             <%#= f.label :data, t('admin.data'), :class => "control-label" %> | ||||
|             <%#= f.label :data, t(:data), :class => "control-label" %> | ||||
|             <div class="controls"> | ||||
|                 <%= f.file_field :data, :class => 'upload' %> | ||||
|             </div> | ||||
|  | @ -54,7 +54,8 @@ | |||
|     </div> | ||||
|     <div style="position: absolute; width: 100%; bottom: 0;"> | ||||
|         <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> | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ | |||
| </table> | ||||
| 
 | ||||
| <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"> | ||||
| 		<%= paginate @assets, :params => {:direction => params[:direction], :sort => params[:sort], :filter => @filter, :new_filter => nil, :sort_options => params[:sort_options]}, :remote => true %> | ||||
| 	</div> | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue