camaleon_cms 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of camaleon_cms might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/apps/plugins/contact_form/contact_form_helper.rb +1 -1
- data/app/apps/plugins/front_cache/front_cache_helper.rb +1 -1
- data/app/apps/themes/new/custom_helper.rb +3 -1
- data/app/assets/javascripts/camaleon_cms/admin/_custom_fields.js +1 -1
- data/app/assets/javascripts/camaleon_cms/admin/uploader/_jquery.uploadfile.min.js +1 -1
- data/app/controllers/camaleon_cms/admin/post_tags_controller.rb +2 -0
- data/app/helpers/camaleon_cms/frontend/seo_helper.rb +4 -1
- data/app/helpers/camaleon_cms/uploader_helper.rb +11 -11
- data/app/models/camaleon_cms/site.rb +8 -3
- data/app/views/camaleon_cms/admin/post_tags/_form.html.erb +1 -2
- data/app/views/camaleon_cms/admin/settings/custom_fields/form.html.erb +126 -118
- data/config/system.json +3 -1
- data/lib/camaleon_cms/version.rb +1 -1
- data/lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/main_helper.rb +1 -0
- data/lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/views/layouts/index.html.erb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3698af8315ca5b054ca6200eda9bf56f1db13860
|
4
|
+
data.tar.gz: 51f8fa5c8350f0c5fd6f1be10c2bea2e6f6d448f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f5133339ddc655a70acdc28f6aadb002c73f78f2001bd56a8f8f163b1cb3e59cd51ea56f2b43dcc05aa16360e24cd9ae5a532d83477e77e95727a1e3829a667
|
7
|
+
data.tar.gz: 64e28c83cbc3b82486483944787db419a385b0f110b2db4e9c65f81213702804a9647e81c6f51261df1051ac5cec5a657349d2e6fe33b1c96800c226dd2784b3
|
@@ -91,7 +91,7 @@ module Plugins::ContactForm::ContactFormHelper
|
|
91
91
|
values[:fields].each do |f|
|
92
92
|
cid = f[:cid].to_sym
|
93
93
|
if f[:field_type] == 'file'
|
94
|
-
res = upload_file(fields[cid], {maximum: 5.megabytes, folder:
|
94
|
+
res = upload_file(fields[cid], {maximum: 5.megabytes, folder: 'contact_form'})
|
95
95
|
if res[:error].present?
|
96
96
|
errors << res[:error]
|
97
97
|
else
|
@@ -27,7 +27,9 @@ module Themes::New::CustomHelper
|
|
27
27
|
group.add_manual_field({"name"=>"Footer text", "slug"=>"theme_custom_footer_text"},{field_key: "editor", translate: true})
|
28
28
|
end
|
29
29
|
|
30
|
-
theme.site.nav_menus.
|
30
|
+
unless theme.site.nav_menus.where(slug: "main_menu").any?
|
31
|
+
theme.site.nav_menus.create(name: "Main Menu", slug: "main_menu")
|
32
|
+
end
|
31
33
|
end
|
32
34
|
|
33
35
|
def theme_custom_on_uninstall_theme(theme)
|
@@ -170,7 +170,7 @@ function load_upload_image_field(dom) {
|
|
170
170
|
function load_upload_video_field(dom) {
|
171
171
|
var $input = $(dom).parents('li:first').find('input');
|
172
172
|
$.fn.upload_filemanager({
|
173
|
-
formats: "
|
173
|
+
formats: "video",
|
174
174
|
selected: function (file, response) {
|
175
175
|
$input.val(file.url);
|
176
176
|
}
|
@@ -5,4 +5,4 @@
|
|
5
5
|
* Copyright (c) 2013 Ravishanker Kusuma
|
6
6
|
* http://hayageek.com/
|
7
7
|
*/
|
8
|
-
!function(e){void 0==e.fn.ajaxForm&&e.getScript(("https:"==document.location.protocol?"https://":"http://")+"malsup.github.io/jquery.form.js");var a={};a.fileapi=void 0!==e("<input type='file'/>").get(0).files,a.formdata=void 0!==window.FormData,e.fn.uploadFile=function(t){function r(){S||(S=!0,function e(){if(w.sequential||(w.sequentialCount=99999),0==x.length&&0==D.length)w.afterUploadAll&&w.afterUploadAll(C),S=!1;else{if(D.length<w.sequentialCount){var a=x.shift();void 0!=a&&(D.push(a),a.submit())}window.setTimeout(e,100)}}())}function o(a,t,r){r.on("dragenter",function(a){a.stopPropagation(),a.preventDefault(),e(this).addClass(t.dragDropHoverClass)}),r.on("dragover",function(a){a.stopPropagation(),a.preventDefault();var r=e(this);r.hasClass(t.dragDropContainerClass)&&!r.hasClass(t.dragDropHoverClass)&&r.addClass(t.dragDropHoverClass)}),r.on("drop",function(r){r.preventDefault(),e(this).removeClass(t.dragDropHoverClass),a.errorLog.html("");var o=r.originalEvent.dataTransfer.files;return!t.multiple&&o.length>1?void(t.showError&&e("<div class='"+t.errorClass+"'>"+t.multiDragErrorStr+"</div>").appendTo(a.errorLog)):void(0!=t.onSelect(o)&&l(t,a,o))}),r.on("dragleave",function(){e(this).removeClass(t.dragDropHoverClass)}),e(document).on("dragenter",function(e){e.stopPropagation(),e.preventDefault()}),e(document).on("dragover",function(a){a.stopPropagation(),a.preventDefault();var r=e(this);r.hasClass(t.dragDropContainerClass)||r.removeClass(t.dragDropHoverClass)}),e(document).on("drop",function(a){a.stopPropagation(),a.preventDefault(),e(this).removeClass(t.dragDropHoverClass)})}function s(e){var a="",t=e/1024;if(parseInt(t)>1024){var r=t/1024;a=r.toFixed(2)+" MB"}else a=t.toFixed(2)+" KB";return a}function i(a){var t=[];t="string"==jQuery.type(a)?a.split("&"):e.param(a).split("&");var r,o,s=t.length,i=[];for(r=0;s>r;r++)t[r]=t[r].replace(/\+/g," "),o=t[r].split("="),i.push([decodeURIComponent(o[0]),decodeURIComponent(o[1])]);return i}function l(a,t,r){for(var o=0;o<r.length;o++)if(n(t,a,r[o].name))if(a.allowDuplicates||!d(t,r[o].name))if(-1!=a.maxFileSize&&r[o].size>a.maxFileSize)a.showError&&e("<div class='"+a.errorClass+"'><b>"+r[o].name+"</b> "+a.sizeErrorStr+s(a.maxFileSize)+"</div>").appendTo(t.errorLog);else if(-1!=a.maxFileCount&&t.selectedFiles>=a.maxFileCount)a.showError&&e("<div class='"+a.errorClass+"'><b>"+r[o].name+"</b> "+a.maxFileCountErrorStr+a.maxFileCount+"</div>").appendTo(t.errorLog);else{t.selectedFiles++,t.existingFileNames.push(r[o].name);var l=a,p=new FormData,u=a.fileName.replace("[]","");p.append(u,r[o]);var c=a.formData;if(c)for(var h=i(c),f=0;f<h.length;f++)h[f]&&p.append(h[f][0],h[f][1]);l.fileData=p;var w=new m(t,a),g="";g=a.showFileCounter?t.fileCounter+a.fileCounterStyle+r[o].name:r[o].name,a.showFileSize&&(g+=" ("+s(r[o].size)+")"),w.filename.html(g);var C=e("<form style='display:block; position:absolute;left: 150px;' class='"+t.formGroup+"' method='"+a.method+"' action='"+a.url+"' enctype='"+a.enctype+"'></form>");C.appendTo("body");var b=[];b.push(r[o].name),v(C,l,w,b,t,r[o]),t.fileCounter++}else a.showError&&e("<div class='"+a.errorClass+"'><b>"+r[o].name+"</b> "+a.duplicateErrorStr+"</div>").appendTo(t.errorLog);else a.showError&&e("<div class='"+a.errorClass+"'><b>"+r[o].name+"</b> "+a.extErrorStr+a.allowedTypes+"</div>").appendTo(t.errorLog)}function n(e,a,t){var r=a.allowedTypes.toLowerCase().split(/[\s,]+/g),o=t.split(".").pop().toLowerCase();return"*"!=a.allowedTypes&&jQuery.inArray(o,r)<0?!1:!0}function d(e,a){var t=!1;if(e.existingFileNames.length)for(var r=0;r<e.existingFileNames.length;r++)(e.existingFileNames[r]==a||w.duplicateStrict&&e.existingFileNames[r].toLowerCase()==a.toLowerCase())&&(t=!0);return t}function p(e,a){if(e.existingFileNames.length)for(var t=0;t<a.length;t++){var r=e.existingFileNames.indexOf(a[t]);-1!=r&&e.existingFileNames.splice(r,1)}}function u(e,a){if(e){a.show();var t=new FileReader;t.onload=function(e){a.attr("src",e.target.result)},t.readAsDataURL(e)}}function c(a,t){if(a.showFileCounter){var r=e(t.container).find(".ajax-file-upload-filename").length;t.fileCounter=r+1,e(t.container).find(".ajax-file-upload-filename").each(function(){var t=e(this).html().split(a.fileCounterStyle),o=(parseInt(t[0])-1,r+a.fileCounterStyle+t[1]);e(this).html(o),r--})}}function h(t,r,o,s){var i="ajax-upload-id-"+(new Date).getTime(),d=e("<form method='"+o.method+"' action='"+o.url+"' enctype='"+o.enctype+"'></form>"),p="<input type='file' id='"+i+"' name='"+o.fileName+"' accept='"+o.acceptFiles+"'/>";o.multiple&&(o.fileName.indexOf("[]")!=o.fileName.length-2&&(o.fileName+="[]"),p="<input type='file' id='"+i+"' name='"+o.fileName+"' accept='"+o.acceptFiles+"' multiple/>");var u=e(p).appendTo(d);u.change(function(){t.errorLog.html("");var i=(o.allowedTypes.toLowerCase().split(","),[]);if(this.files){for(g=0;g<this.files.length;g++)i.push(this.files[g].name);if(0==o.onSelect(this.files))return}else{var p=e(this).val(),u=[];if(i.push(p),!n(t,o,p))return void(o.showError&&e("<div class='"+o.errorClass+"'><b>"+p+"</b> "+o.extErrorStr+o.allowedTypes+"</div>").appendTo(t.errorLog));if(u.push({name:p,size:"NA"}),0==o.onSelect(u))return}if(c(o,t),s.unbind("click"),d.hide(),h(t,r,o,s),d.addClass(r),o.serialize&&a.fileapi&&a.formdata){d.removeClass(r);var f=this.files;d.remove(),l(o,t,f)}else{for(var w="",g=0;g<i.length;g++)w+=o.showFileCounter?t.fileCounter+o.fileCounterStyle+i[g]+"<br>":i[g]+"<br>",t.fileCounter++;if(-1!=o.maxFileCount&&t.selectedFiles+i.length>o.maxFileCount)return void(o.showError&&e("<div class='"+o.errorClass+"'><b>"+w+"</b> "+o.maxFileCountErrorStr+o.maxFileCount+"</div>").appendTo(t.errorLog));t.selectedFiles+=i.length;var C=new m(t,o);C.filename.html(w),v(d,o,C,i,t,null)}}),o.nestedForms?(d.css({margin:0,padding:0}),s.css({position:"relative",overflow:"hidden",cursor:"default"}),u.css({position:"absolute",cursor:"pointer",top:"0px",width:"100%",height:"100%",left:"0px","z-index":"100",opacity:"0.0",filter:"alpha(opacity=0)","-ms-filter":"alpha(opacity=0)","-khtml-opacity":"0.0","-moz-opacity":"0.0"}),d.appendTo(s)):(d.appendTo(e("body")),d.css({margin:0,padding:0,display:"block",position:"absolute",left:"-250px"}),-1!=navigator.appVersion.indexOf("MSIE ")?s.attr("for",i):s.click(function(){u.click()}))}function f(a,t){return this.statusbar=e("<div class='ajax-file-upload-statusbar'></div>").width(t.statusBarWidth),this.preview=e("<img class='ajax-file-upload-preview' />").width(t.previewWidth).height(t.previewHeight).appendTo(this.statusbar).hide(),this.filename=e("<div class='ajax-file-upload-filename'></div>").appendTo(this.statusbar),this.progressDiv=e("<div class='ajax-file-upload-progress'>").appendTo(this.statusbar).hide(),this.progressbar=e("<div class='ajax-file-upload-bar'></div>").appendTo(this.progressDiv),this.abort=e("<div>"+t.abortStr+"</div>").appendTo(this.statusbar).hide(),this.cancel=e("<div>"+t.cancelStr+"</div>").appendTo(this.statusbar).hide(),this.done=e("<div>"+t.doneStr+"</div>").appendTo(this.statusbar).hide(),this.download=e("<div>"+t.downloadStr+"</div>").appendTo(this.statusbar).hide(),this.del=e("<div>"+t.deletelStr+"</div>").appendTo(this.statusbar).hide(),this.abort.addClass("ajax-file-upload-red"),this.done.addClass("ajax-file-upload-green"),this.download.addClass("ajax-file-upload-green"),this.cancel.addClass("ajax-file-upload-red"),this.del.addClass("ajax-file-upload-red"),this}function m(a,t){var r=null;return r=t.customProgressBar?new t.customProgressBar(a,t):new f(a,t),r.abort.addClass(a.formGroup),r.abort.addClass(t.abortButtonClass),r.cancel.addClass(a.formGroup),r.cancel.addClass(t.cancelButtonClass),t.extraHTML&&(r.extraHTML=e("<div class='extrahtml'>"+t.extraHTML()+"</div>").insertAfter(r.filename)),"bottom"==t.uploadQueuOrder?e(a.container).append(r.statusbar):e(a.container).prepend(r.statusbar),r}function v(t,o,s,l,n,d){var h={cache:!1,contentType:!1,processData:!1,forceSync:!1,type:o.method,data:o.formData,formData:o.fileData,dataType:o.returnType,beforeSubmit:function(a,r,d){if(0!=o.onSubmit.call(this,l)){if(o.dynamicFormData){var u=i(o.dynamicFormData());if(u)for(var h=0;h<u.length;h++)u[h]&&(void 0!=o.fileData?d.formData.append(u[h][0],u[h][1]):d.data[u[h][0]]=u[h][1])}return o.extraHTML&&e(s.extraHTML).find("input,select,textarea").each(function(){void 0!=o.fileData?d.formData.append(e(this).attr("name"),e(this).val()):d.data[e(this).attr("name")]=e(this).val()}),!0}return s.statusbar.append("<div class='"+o.errorClass+"'>"+o.uploadErrorStr+"</div>"),s.cancel.show(),t.remove(),s.cancel.click(function(){x.splice(x.indexOf(t),1),p(n,l),s.statusbar.remove(),o.onCancel.call(n,l,s),n.selectedFiles-=l.length,c(o,n)}),!1},beforeSend:function(e){s.progressDiv.show(),s.cancel.hide(),s.done.hide(),o.showAbort&&(s.abort.show(),s.abort.click(function(){p(n,l),e.abort(),n.selectedFiles-=l.length,o.onAbort.call(n,l,s)})),s.progressbar.width(a.formdata?"1%":"5%")},uploadProgress:function(e,a,t,r){r>98&&(r=98);var i=r+"%";r>1&&s.progressbar.width(i),o.showProgress&&(s.progressbar.html(i),s.progressbar.css("text-align","center"))},success:function(a,r,i){if(s.cancel.remove(),D.pop(),"json"==o.returnType&&"object"==e.type(a)&&a.hasOwnProperty(o.customErrorKeyStr)){s.abort.hide();var d=a[o.customErrorKeyStr];return o.onError.call(this,l,200,d,s),o.showStatusAfterError?(s.progressDiv.hide(),s.statusbar.append("<span class='"+o.errorClass+"'>ERROR: "+d+"</span>")):(s.statusbar.hide(),s.statusbar.remove()),n.selectedFiles-=l.length,void t.remove()}n.responses.push(a),s.progressbar.width("100%"),o.showProgress&&(s.progressbar.html("100%"),s.progressbar.css("text-align","center")),s.abort.hide(),o.onSuccess.call(this,l,a,i,s),o.showStatusAfterSuccess?(o.showDone?(s.done.show(),s.done.click(function(){s.statusbar.hide("slow"),s.statusbar.remove()})):s.done.hide(),o.showDelete?(s.del.show(),s.del.click(function(){s.statusbar.hide().remove(),o.deleteCallback&&o.deleteCallback.call(this,a,s),n.selectedFiles-=l.length,c(o,n)})):s.del.hide()):(s.statusbar.hide("slow"),s.statusbar.remove()),o.showDownload&&(s.download.show(),s.download.click(function(){o.downloadCallback&&o.downloadCallback(a)})),t.remove()},error:function(e,a,r){s.cancel.remove(),D.pop(),s.abort.hide(),"abort"==e.statusText?(s.statusbar.hide("slow").remove(),c(o,n)):(o.onError.call(this,l,a,r,s),o.showStatusAfterError?(s.progressDiv.hide(),s.statusbar.append("<span class='"+o.errorClass+"'>ERROR: "+r+"</span>")):(s.statusbar.hide(),s.statusbar.remove()),n.selectedFiles-=l.length),t.remove()}};o.showPreview&&null!=d&&"image"==d.type.toLowerCase().split("/").shift()&&u(d,s.preview),o.autoSubmit?(t.ajaxForm(h),x.push(t),r()):(o.showCancel&&(s.cancel.show(),s.cancel.click(function(){x.splice(x.indexOf(t),1),p(n,l),t.remove(),s.statusbar.remove(),o.onCancel.call(n,l,s),n.selectedFiles-=l.length,c(o,n)})),t.ajaxForm(h))}var w=e.extend({url:"",method:"POST",enctype:"multipart/form-data",returnType:null,allowDuplicates:!0,duplicateStrict:!1,allowedTypes:"*",acceptFiles:"*",fileName:"file",formData:!1,dynamicFormData:!1,maxFileSize:-1,maxFileCount:-1,multiple:!0,dragDrop:!0,autoSubmit:!0,showCancel:!0,showAbort:!0,showDone:!1,showDelete:!1,showError:!0,showStatusAfterSuccess:!0,showStatusAfterError:!0,showFileCounter:!0,fileCounterStyle:"). ",showFileSize:!0,showProgress:!1,nestedForms:!0,showDownload:!1,onLoad:function(){},onSelect:function(){return!0},onSubmit:function(){},onSuccess:function(){},onError:function(){},onCancel:function(){},onAbort:function(){},downloadCallback:!1,deleteCallback:!1,afterUploadAll:!1,serialize:!0,sequential:!1,sequentialCount:2,customProgressBar:!1,abortButtonClass:"ajax-file-upload-abort",cancelButtonClass:"ajax-file-upload-cancel",dragDropContainerClass:"ajax-upload-dragdrop",dragDropHoverClass:"state-hover",errorClass:"ajax-file-upload-error",uploadButtonClass:"ajax-file-upload",dragDropStr:"<span><b>Drag & Drop Files</b></span>",uploadStr:"Upload",abortStr:"Abort",cancelStr:"Cancel",deletelStr:"Delete",doneStr:"Done",multiDragErrorStr:"Multiple File Drag & Drop is not allowed.",extErrorStr:"is not allowed. Allowed extensions: ",duplicateErrorStr:"is not allowed. File already exists.",sizeErrorStr:"is not allowed. Allowed Max size: ",uploadErrorStr:"Upload is not allowed",maxFileCountErrorStr:" is not allowed. Maximum allowed files are:",downloadStr:"Download",customErrorKeyStr:"jquery-upload-file-error",showQueueDiv:!1,statusBarWidth:400,dragdropWidth:400,showPreview:!1,previewHeight:"auto",previewWidth:"100%",extraHTML:!1,uploadQueuOrder:"top"},t);this.fileCounter=1,this.selectedFiles=0;var g="ajax-file-upload-"+(new Date).getTime();this.formGroup=g,this.errorLog=e("<div></div>"),this.responses=[],this.existingFileNames=[],a.formdata||(w.dragDrop=!1),a.formdata||(w.multiple=!1),e(this).html("");var C=this,b=e("<div>"+w.uploadStr+"</div>");e(b).addClass(w.uploadButtonClass),function F(){if(e.fn.ajaxForm){if(w.dragDrop){var a=e('<div class="'+w.dragDropContainerClass+'" style="vertical-align:top;"></div>').width(w.dragdropWidth);e(C).append(a),e(a).append(b),e(a).append(e(w.dragDropStr)),o(C,w,a)}else e(C).append(b);e(C).append(C.errorLog),C.container=w.showQueueDiv?e("#"+w.showQueueDiv):e("<div class='ajax-file-upload-container'></div>").insertAfter(e(C)),w.onLoad.call(this,C),h(C,g,w,b)}else window.setTimeout(F,10)}(),this.startUpload=function(){e("form").each(function(){e(this).hasClass(C.formGroup)&&x.push(e(this))}),x.length>=1&&r()},this.getFileCount=function(){return C.selectedFiles},this.stopUpload=function(){e("."+w.abortButtonClass).each(function(){e(this).hasClass(C.formGroup)&&e(this).click()}),e("."+w.cancelButtonClass).each(function(){e(this).hasClass(C.formGroup)&&e(this).click()})},this.cancelAll=function(){e("."+w.cancelButtonClass).each(function(){e(this).hasClass(C.formGroup)&&e(this).click()})},this.update=function(a){w=e.extend(w,a)},this.reset=function(e){C.fileCounter=1,C.selectedFiles=0,C.errorLog.html(""),0!=e&&C.container.html("")},this.remove=function(){C.container.html(""),e(C).remove()},this.createProgress=function(e,a,t){var r=new m(this,w);r.progressDiv.show(),r.progressbar.width("100%");var o="";o=w.showFileCounter?C.fileCounter+w.fileCounterStyle+e:e,w.showFileSize&&(o+=" ("+s(t)+")"),r.filename.html(o),C.fileCounter++,C.selectedFiles++,w.showPreview&&(r.preview.attr("src",a),r.preview.show()),w.showDownload&&(r.download.show(),r.download.click(function(){w.downloadCallback&&w.downloadCallback.call(C,[e])})),w.showDelete&&(r.del.show(),r.del.click(function(){r.statusbar.hide().remove();var a=[e];w.deleteCallback&&w.deleteCallback.call(this,a,r),C.selectedFiles-=1,c(w,C)}))},this.getResponses=function(){return this.responses};var x=[],D=[],S=!1;return this}}(jQuery);
|
8
|
+
!function(e){void 0==jQuery.fn.ajaxForm&&e.getScript(("https:"==document.location.protocol?"https://":"http://")+"malsup.github.io/jquery.form.js");var a={};a.fileapi=void 0!==e("<input type='file'/>").get(0).files,a.formdata=void 0!==window.FormData,e.fn.uploadFile=function(t){function r(){S||(S=!0,function e(){if(w.sequential||(w.sequentialCount=99999),0==x.length&&0==D.length)w.afterUploadAll&&w.afterUploadAll(C),S=!1;else{if(D.length<w.sequentialCount){var a=x.shift();void 0!=a&&(D.push(a),a.submit())}window.setTimeout(e,100)}}())}function o(a,t,r){r.on("dragenter",function(a){a.stopPropagation(),a.preventDefault(),e(this).addClass(t.dragDropHoverClass)}),r.on("dragover",function(a){a.stopPropagation(),a.preventDefault();var r=e(this);r.hasClass(t.dragDropContainerClass)&&!r.hasClass(t.dragDropHoverClass)&&r.addClass(t.dragDropHoverClass)}),r.on("drop",function(r){r.preventDefault(),e(this).removeClass(t.dragDropHoverClass),a.errorLog.html("");var o=r.originalEvent.dataTransfer.files;return!t.multiple&&o.length>1?void(t.showError&&e("<div class='"+t.errorClass+"'>"+t.multiDragErrorStr+"</div>").appendTo(a.errorLog)):void(0!=t.onSelect(o)&&l(t,a,o))}),r.on("dragleave",function(){e(this).removeClass(t.dragDropHoverClass)}),e(document).on("dragenter",function(e){e.stopPropagation(),e.preventDefault()}),e(document).on("dragover",function(a){a.stopPropagation(),a.preventDefault();var r=e(this);r.hasClass(t.dragDropContainerClass)||r.removeClass(t.dragDropHoverClass)}),e(document).on("drop",function(a){a.stopPropagation(),a.preventDefault(),e(this).removeClass(t.dragDropHoverClass)})}function s(e){var a="",t=e/1024;if(parseInt(t)>1024){var r=t/1024;a=r.toFixed(2)+" MB"}else a=t.toFixed(2)+" KB";return a}function i(a){var t=[];t="string"==jQuery.type(a)?a.split("&"):e.param(a).split("&");var r,o,s=t.length,i=[];for(r=0;s>r;r++)t[r]=t[r].replace(/\+/g," "),o=t[r].split("="),i.push([decodeURIComponent(o[0]),decodeURIComponent(o[1])]);return i}function l(a,t,r){for(var o=0;o<r.length;o++)if(n(t,a,r[o].name))if(a.allowDuplicates||!d(t,r[o].name))if(-1!=a.maxFileSize&&r[o].size>a.maxFileSize)a.showError&&e("<div class='"+a.errorClass+"'><b>"+r[o].name+"</b> "+a.sizeErrorStr+s(a.maxFileSize)+"</div>").appendTo(t.errorLog);else if(-1!=a.maxFileCount&&t.selectedFiles>=a.maxFileCount)a.showError&&e("<div class='"+a.errorClass+"'><b>"+r[o].name+"</b> "+a.maxFileCountErrorStr+a.maxFileCount+"</div>").appendTo(t.errorLog);else{t.selectedFiles++,t.existingFileNames.push(r[o].name);var l=a,p=new FormData,u=a.fileName.replace("[]","");p.append(u,r[o]);var c=a.formData;if(c)for(var h=i(c),f=0;f<h.length;f++)h[f]&&p.append(h[f][0],h[f][1]);l.fileData=p;var w=new m(t,a),g="";g=a.showFileCounter?t.fileCounter+a.fileCounterStyle+r[o].name:r[o].name,a.showFileSize&&(g+=" ("+s(r[o].size)+")"),w.filename.html(g);var C=e("<form style='display:block; position:absolute;left: 150px;' class='"+t.formGroup+"' method='"+a.method+"' action='"+a.url+"' enctype='"+a.enctype+"'></form>");C.appendTo("body");var b=[];b.push(r[o].name),v(C,l,w,b,t,r[o]),t.fileCounter++}else a.showError&&e("<div class='"+a.errorClass+"'><b>"+r[o].name+"</b> "+a.duplicateErrorStr+"</div>").appendTo(t.errorLog);else a.showError&&e("<div class='"+a.errorClass+"'><b>"+r[o].name+"</b> "+a.extErrorStr+a.allowedTypes+"</div>").appendTo(t.errorLog)}function n(e,a,t){var r=a.allowedTypes.toLowerCase().split(/[\s,]+/g),o=t.split(".").pop().toLowerCase();return"*"!=a.allowedTypes&&jQuery.inArray(o,r)<0?!1:!0}function d(e,a){var t=!1;if(e.existingFileNames.length)for(var r=0;r<e.existingFileNames.length;r++)(e.existingFileNames[r]==a||w.duplicateStrict&&e.existingFileNames[r].toLowerCase()==a.toLowerCase())&&(t=!0);return t}function p(e,a){if(e.existingFileNames.length)for(var t=0;t<a.length;t++){var r=e.existingFileNames.indexOf(a[t]);-1!=r&&e.existingFileNames.splice(r,1)}}function u(e,a){if(e){a.show();var t=new FileReader;t.onload=function(e){a.attr("src",e.target.result)},t.readAsDataURL(e)}}function c(a,t){if(a.showFileCounter){var r=e(t.container).find(".ajax-file-upload-filename").length;t.fileCounter=r+1,e(t.container).find(".ajax-file-upload-filename").each(function(){var t=e(this).html().split(a.fileCounterStyle),o=(parseInt(t[0])-1,r+a.fileCounterStyle+t[1]);e(this).html(o),r--})}}function h(t,r,o,s){var i="ajax-upload-id-"+(new Date).getTime(),d=e("<form method='"+o.method+"' action='"+o.url+"' enctype='"+o.enctype+"'></form>"),p="<input type='file' id='"+i+"' name='"+o.fileName+"' accept='"+o.acceptFiles+"'/>";o.multiple&&(o.fileName.indexOf("[]")!=o.fileName.length-2&&(o.fileName+="[]"),p="<input type='file' id='"+i+"' name='"+o.fileName+"' accept='"+o.acceptFiles+"' multiple/>");var u=e(p).appendTo(d);u.change(function(){t.errorLog.html("");var i=(o.allowedTypes.toLowerCase().split(","),[]);if(this.files){for(g=0;g<this.files.length;g++)i.push(this.files[g].name);if(0==o.onSelect(this.files))return}else{var p=e(this).val(),u=[];if(i.push(p),!n(t,o,p))return void(o.showError&&e("<div class='"+o.errorClass+"'><b>"+p+"</b> "+o.extErrorStr+o.allowedTypes+"</div>").appendTo(t.errorLog));if(u.push({name:p,size:"NA"}),0==o.onSelect(u))return}if(c(o,t),s.unbind("click"),d.hide(),h(t,r,o,s),d.addClass(r),o.serialize&&a.fileapi&&a.formdata){d.removeClass(r);var f=this.files;d.remove(),l(o,t,f)}else{for(var w="",g=0;g<i.length;g++)w+=o.showFileCounter?t.fileCounter+o.fileCounterStyle+i[g]+"<br>":i[g]+"<br>",t.fileCounter++;if(-1!=o.maxFileCount&&t.selectedFiles+i.length>o.maxFileCount)return void(o.showError&&e("<div class='"+o.errorClass+"'><b>"+w+"</b> "+o.maxFileCountErrorStr+o.maxFileCount+"</div>").appendTo(t.errorLog));t.selectedFiles+=i.length;var C=new m(t,o);C.filename.html(w),v(d,o,C,i,t,null)}}),o.nestedForms?(d.css({margin:0,padding:0}),s.css({position:"relative",overflow:"hidden",cursor:"default"}),u.css({position:"absolute",cursor:"pointer",top:"0px",width:"100%",height:"100%",left:"0px","z-index":"100",opacity:"0.0",filter:"alpha(opacity=0)","-ms-filter":"alpha(opacity=0)","-khtml-opacity":"0.0","-moz-opacity":"0.0"}),d.appendTo(s)):(d.appendTo(e("body")),d.css({margin:0,padding:0,display:"block",position:"absolute",left:"-250px"}),-1!=navigator.appVersion.indexOf("MSIE ")?s.attr("for",i):s.click(function(){u.click()}))}function f(a,t){return this.statusbar=e("<div class='ajax-file-upload-statusbar'></div>").width(t.statusBarWidth),this.preview=e("<img class='ajax-file-upload-preview' />").width(t.previewWidth).height(t.previewHeight).appendTo(this.statusbar).hide(),this.filename=e("<div class='ajax-file-upload-filename'></div>").appendTo(this.statusbar),this.progressDiv=e("<div class='ajax-file-upload-progress'>").appendTo(this.statusbar).hide(),this.progressbar=e("<div class='ajax-file-upload-bar'></div>").appendTo(this.progressDiv),this.abort=e("<div>"+t.abortStr+"</div>").appendTo(this.statusbar).hide(),this.cancel=e("<div>"+t.cancelStr+"</div>").appendTo(this.statusbar).hide(),this.done=e("<div>"+t.doneStr+"</div>").appendTo(this.statusbar).hide(),this.download=e("<div>"+t.downloadStr+"</div>").appendTo(this.statusbar).hide(),this.del=e("<div>"+t.deletelStr+"</div>").appendTo(this.statusbar).hide(),this.abort.addClass("ajax-file-upload-red"),this.done.addClass("ajax-file-upload-green"),this.download.addClass("ajax-file-upload-green"),this.cancel.addClass("ajax-file-upload-red"),this.del.addClass("ajax-file-upload-red"),this}function m(a,t){var r=null;return r=t.customProgressBar?new t.customProgressBar(a,t):new f(a,t),r.abort.addClass(a.formGroup),r.abort.addClass(t.abortButtonClass),r.cancel.addClass(a.formGroup),r.cancel.addClass(t.cancelButtonClass),t.extraHTML&&(r.extraHTML=e("<div class='extrahtml'>"+t.extraHTML()+"</div>").insertAfter(r.filename)),"bottom"==t.uploadQueuOrder?e(a.container).append(r.statusbar):e(a.container).prepend(r.statusbar),r}function v(t,o,s,l,n,d){var h={cache:!1,contentType:!1,processData:!1,forceSync:!1,type:o.method,data:o.formData,formData:o.fileData,dataType:o.returnType,beforeSubmit:function(a,r,d){if(0!=o.onSubmit.call(this,l)){if(o.dynamicFormData){var u=i(o.dynamicFormData());if(u)for(var h=0;h<u.length;h++)u[h]&&(void 0!=o.fileData?d.formData.append(u[h][0],u[h][1]):d.data[u[h][0]]=u[h][1])}return o.extraHTML&&e(s.extraHTML).find("input,select,textarea").each(function(){void 0!=o.fileData?d.formData.append(e(this).attr("name"),e(this).val()):d.data[e(this).attr("name")]=e(this).val()}),!0}return s.statusbar.append("<div class='"+o.errorClass+"'>"+o.uploadErrorStr+"</div>"),s.cancel.show(),t.remove(),s.cancel.click(function(){x.splice(x.indexOf(t),1),p(n,l),s.statusbar.remove(),o.onCancel.call(n,l,s),n.selectedFiles-=l.length,c(o,n)}),!1},beforeSend:function(e){s.progressDiv.show(),s.cancel.hide(),s.done.hide(),o.showAbort&&(s.abort.show(),s.abort.click(function(){p(n,l),e.abort(),n.selectedFiles-=l.length,o.onAbort.call(n,l,s)})),s.progressbar.width(a.formdata?"1%":"5%")},uploadProgress:function(e,a,t,r){r>98&&(r=98);var i=r+"%";r>1&&s.progressbar.width(i),o.showProgress&&(s.progressbar.html(i),s.progressbar.css("text-align","center"))},success:function(a,r,i){if(s.cancel.remove(),D.pop(),"json"==o.returnType&&"object"==e.type(a)&&a.hasOwnProperty(o.customErrorKeyStr)){s.abort.hide();var d=a[o.customErrorKeyStr];return o.onError.call(this,l,200,d,s),o.showStatusAfterError?(s.progressDiv.hide(),s.statusbar.append("<span class='"+o.errorClass+"'>ERROR: "+d+"</span>")):(s.statusbar.hide(),s.statusbar.remove()),n.selectedFiles-=l.length,void t.remove()}n.responses.push(a),s.progressbar.width("100%"),o.showProgress&&(s.progressbar.html("100%"),s.progressbar.css("text-align","center")),s.abort.hide(),o.onSuccess.call(this,l,a,i,s),o.showStatusAfterSuccess?(o.showDone?(s.done.show(),s.done.click(function(){s.statusbar.hide("slow"),s.statusbar.remove()})):s.done.hide(),o.showDelete?(s.del.show(),s.del.click(function(){s.statusbar.hide().remove(),o.deleteCallback&&o.deleteCallback.call(this,a,s),n.selectedFiles-=l.length,c(o,n)})):s.del.hide()):(s.statusbar.hide("slow"),s.statusbar.remove()),o.showDownload&&(s.download.show(),s.download.click(function(){o.downloadCallback&&o.downloadCallback(a)})),t.remove()},error:function(e,a,r){s.cancel.remove(),D.pop(),s.abort.hide(),"abort"==e.statusText?(s.statusbar.hide("slow").remove(),c(o,n)):(o.onError.call(this,l,a,r,s),o.showStatusAfterError?(s.progressDiv.hide(),s.statusbar.append("<span class='"+o.errorClass+"'>ERROR: "+r+"</span>")):(s.statusbar.hide(),s.statusbar.remove()),n.selectedFiles-=l.length),t.remove()}};o.showPreview&&null!=d&&"image"==d.type.toLowerCase().split("/").shift()&&u(d,s.preview),o.autoSubmit?(t.ajaxForm(h),x.push(t),r()):(o.showCancel&&(s.cancel.show(),s.cancel.click(function(){x.splice(x.indexOf(t),1),p(n,l),t.remove(),s.statusbar.remove(),o.onCancel.call(n,l,s),n.selectedFiles-=l.length,c(o,n)})),t.ajaxForm(h))}var w=e.extend({url:"",method:"POST",enctype:"multipart/form-data",returnType:null,allowDuplicates:!0,duplicateStrict:!1,allowedTypes:"*",acceptFiles:"*",fileName:"file",formData:!1,dynamicFormData:!1,maxFileSize:-1,maxFileCount:-1,multiple:!0,dragDrop:!0,autoSubmit:!0,showCancel:!0,showAbort:!0,showDone:!1,showDelete:!1,showError:!0,showStatusAfterSuccess:!0,showStatusAfterError:!0,showFileCounter:!0,fileCounterStyle:"). ",showFileSize:!0,showProgress:!1,nestedForms:!0,showDownload:!1,onLoad:function(){},onSelect:function(){return!0},onSubmit:function(){},onSuccess:function(){},onError:function(){},onCancel:function(){},onAbort:function(){},downloadCallback:!1,deleteCallback:!1,afterUploadAll:!1,serialize:!0,sequential:!1,sequentialCount:2,customProgressBar:!1,abortButtonClass:"ajax-file-upload-abort",cancelButtonClass:"ajax-file-upload-cancel",dragDropContainerClass:"ajax-upload-dragdrop",dragDropHoverClass:"state-hover",errorClass:"ajax-file-upload-error",uploadButtonClass:"ajax-file-upload",dragDropStr:"<span><b>Drag & Drop Files</b></span>",uploadStr:"Upload",abortStr:"Abort",cancelStr:"Cancel",deletelStr:"Delete",doneStr:"Done",multiDragErrorStr:"Multiple File Drag & Drop is not allowed.",extErrorStr:"is not allowed. Allowed extensions: ",duplicateErrorStr:"is not allowed. File already exists.",sizeErrorStr:"is not allowed. Allowed Max size: ",uploadErrorStr:"Upload is not allowed",maxFileCountErrorStr:" is not allowed. Maximum allowed files are:",downloadStr:"Download",customErrorKeyStr:"jquery-upload-file-error",showQueueDiv:!1,statusBarWidth:400,dragdropWidth:400,showPreview:!1,previewHeight:"auto",previewWidth:"100%",extraHTML:!1,uploadQueuOrder:"top"},t);this.fileCounter=1,this.selectedFiles=0;var g="ajax-file-upload-"+(new Date).getTime();this.formGroup=g,this.errorLog=e("<div></div>"),this.responses=[],this.existingFileNames=[],a.formdata||(w.dragDrop=!1),a.formdata||(w.multiple=!1),e(this).html("");var C=this,b=e("<div>"+w.uploadStr+"</div>");e(b).addClass(w.uploadButtonClass),function F(){if(e.fn.ajaxForm){if(w.dragDrop){var a=e('<div class="'+w.dragDropContainerClass+'" style="vertical-align:top;"></div>').width(w.dragdropWidth);e(C).append(a),e(a).append(b),e(a).append(e(w.dragDropStr)),o(C,w,a)}else e(C).append(b);e(C).append(C.errorLog),C.container=w.showQueueDiv?e("#"+w.showQueueDiv):e("<div class='ajax-file-upload-container'></div>").insertAfter(e(C)),w.onLoad.call(this,C),h(C,g,w,b)}else window.setTimeout(F,10)}(),this.startUpload=function(){e("form").each(function(){e(this).hasClass(C.formGroup)&&x.push(e(this))}),x.length>=1&&r()},this.getFileCount=function(){return C.selectedFiles},this.stopUpload=function(){e("."+w.abortButtonClass).each(function(){e(this).hasClass(C.formGroup)&&e(this).click()}),e("."+w.cancelButtonClass).each(function(){e(this).hasClass(C.formGroup)&&e(this).click()})},this.cancelAll=function(){e("."+w.cancelButtonClass).each(function(){e(this).hasClass(C.formGroup)&&e(this).click()})},this.update=function(a){w=e.extend(w,a)},this.reset=function(e){C.fileCounter=1,C.selectedFiles=0,C.errorLog.html(""),0!=e&&C.container.html("")},this.remove=function(){C.container.html(""),e(C).remove()},this.createProgress=function(e,a,t){var r=new m(this,w);r.progressDiv.show(),r.progressbar.width("100%");var o="";o=w.showFileCounter?C.fileCounter+w.fileCounterStyle+e:e,w.showFileSize&&(o+=" ("+s(t)+")"),r.filename.html(o),C.fileCounter++,C.selectedFiles++,w.showPreview&&(r.preview.attr("src",a),r.preview.show()),w.showDownload&&(r.download.show(),r.download.click(function(){w.downloadCallback&&w.downloadCallback.call(C,[e])})),w.showDelete&&(r.del.show(),r.del.click(function(){r.statusbar.hide().remove();var a=[e];w.deleteCallback&&w.deleteCallback.call(this,a,r),C.selectedFiles-=1,c(w,C)}))},this.getResponses=function(){return this.responses};var x=[],D=[],S=!1;return this}}(jQuery);
|
@@ -30,6 +30,7 @@ class CamaleonCms::Admin::PostTagsController < CamaleonCms::AdminController
|
|
30
30
|
def update
|
31
31
|
if @post_tag.update(params[:post_tag])
|
32
32
|
@post_tag.set_options_from_form(params[:meta]) if params[:meta].present?
|
33
|
+
@post_tag.set_field_values(params[:field_options])
|
33
34
|
flash[:notice] = t('camaleon_cms.admin.post_type.message.updated')
|
34
35
|
redirect_to action: :index
|
35
36
|
else
|
@@ -43,6 +44,7 @@ class CamaleonCms::Admin::PostTagsController < CamaleonCms::AdminController
|
|
43
44
|
@post_tag = @post_type.post_tags.new(data_term)
|
44
45
|
if @post_tag.save
|
45
46
|
@post_tag.set_options_from_form(params[:meta]) if params[:meta].present?
|
47
|
+
@post_tag.set_field_values(params[:field_options])
|
46
48
|
flash[:notice] = t('camaleon_cms.admin.post_type.message.created')
|
47
49
|
redirect_to action: :index
|
48
50
|
else
|
@@ -9,6 +9,7 @@
|
|
9
9
|
module CamaleonCms::Frontend::SeoHelper
|
10
10
|
# add seo attributes to your page
|
11
11
|
# you can pass custom data to overwrite default data generated by the system
|
12
|
+
# return hash of seo attributes used by the_head(...)
|
12
13
|
def cama_the_seo(data = {})
|
13
14
|
if is_home?
|
14
15
|
data2 = {}
|
@@ -21,7 +22,7 @@ module CamaleonCms::Frontend::SeoHelper
|
|
21
22
|
elsif is_post_type?
|
22
23
|
data2 = {image: @cama_visited_post_type.the_thumb_url, title: "#{current_site.the_title} | #{@cama_visited_post_type.the_title}", description: @cama_visited_post_type.the_excerpt, keywords: @cama_visited_post_type.the_keywords, object: @cama_visited_post_type }
|
23
24
|
elsif is_post_tag?
|
24
|
-
data2 = {
|
25
|
+
data2 = {title: "#{current_site.the_title} | #{@cama_visited_tag.the_title}", description: @cama_visited_tag.the_excerpt, keywords: @cama_visited_tag.the_keywords, object: @cama_visited_tag }
|
25
26
|
elsif is_category?
|
26
27
|
data2 = {image: @cama_visited_category.the_thumb_url, title: "#{current_site.the_title} | #{@cama_visited_category.the_title}", description: @cama_visited_category.the_excerpt, keywords: @cama_visited_category.the_keywords, object: @cama_visited_category }
|
27
28
|
else
|
@@ -32,11 +33,13 @@ module CamaleonCms::Frontend::SeoHelper
|
|
32
33
|
|
33
34
|
# permit to define seo attributes by code without hooks (check here for more attributes: https://github.com/kpumuk/meta-tags)
|
34
35
|
# @Sample: cama_seo_settings({title: "my custom title", description: "my descr", keywords: "my keywords", image: 'my img url'})
|
36
|
+
# This values will be shown within the_head(...)
|
35
37
|
def cama_seo_settings(options)
|
36
38
|
@_cama_seo_setting_values ||= {}
|
37
39
|
@_cama_seo_setting_values = @_cama_seo_setting_values.merge(options)
|
38
40
|
end
|
39
41
|
|
42
|
+
private
|
40
43
|
# create seo attributes with options + default attributes
|
41
44
|
def cama_build_seo(options = {})
|
42
45
|
options[:image] = current_site.get_option("screenshot", current_site.the_logo) unless options[:image].present?
|
@@ -71,9 +71,9 @@ module CamaleonCms::UploaderHelper
|
|
71
71
|
|
72
72
|
# save file
|
73
73
|
if settings[:same_name]
|
74
|
-
partial_path = "#{
|
74
|
+
partial_path = "#{current_site.upload_directory_name}/#{"#{settings[:folder]}/" if settings[:folder].present?}#{settings[:filename]}"
|
75
75
|
else
|
76
|
-
partial_path = "#{
|
76
|
+
partial_path = "#{current_site.upload_directory_name}/#{cama_uploader_check_name("#{"#{settings[:folder]}/" if settings[:folder].present?}#{settings[:filename]}")}"
|
77
77
|
end
|
78
78
|
partial_path = partial_path.gsub(/(\/){2,}/, "/")
|
79
79
|
file = @fog_connection_bucket_dir.files.create({:key => partial_path, :body => uploaded_io, :public => true})
|
@@ -102,7 +102,7 @@ module CamaleonCms::UploaderHelper
|
|
102
102
|
# sample: "owen/campaign-date-picker_1.png"
|
103
103
|
def cama_uploader_destroy_file(file_path, destroy_thumb = true)
|
104
104
|
cama_uploader_init_connection(true)
|
105
|
-
file = @fog_connection_bucket_dir.files.head("#{current_site.
|
105
|
+
file = @fog_connection_bucket_dir.files.head("#{current_site.upload_directory_name}/#{file_path}".gsub(/(\/){2,}/, "/"))
|
106
106
|
_file = cama_uploader_parse_file(file)
|
107
107
|
if destroy_thumb && _file["format"] == "image" && File.extname(file_path) != ".gif" # destroy thumb
|
108
108
|
cama_uploader_destroy_file("#{File.dirname(file_path)}/#{cama_parse_for_thumb_name(file.key)}", false) rescue ""
|
@@ -114,16 +114,16 @@ module CamaleonCms::UploaderHelper
|
|
114
114
|
def cama_uploader_destroy_folder(folder)
|
115
115
|
cama_uploader_init_connection(true)
|
116
116
|
if @fog_connection.class.name.include?("AWS")
|
117
|
-
dir = @fog_connection.directories.get(@fog_connection_hook_res[:bucket_name], prefix: "#{current_site.
|
117
|
+
dir = @fog_connection.directories.get(@fog_connection_hook_res[:bucket_name], prefix: "#{current_site.upload_directory_name}/#{folder}".gsub(/(\/){2,}/, "/"))
|
118
118
|
dir.files.each{|f| f.destroy }
|
119
119
|
end
|
120
|
-
@fog_connection_bucket_dir.files.head("#{current_site.
|
120
|
+
@fog_connection_bucket_dir.files.head("#{current_site.upload_directory_name}/#{folder}/".gsub(/(\/){2,}/, "/")).destroy rescue ""
|
121
121
|
end
|
122
122
|
|
123
123
|
# add a new folder in fog
|
124
124
|
def cama_uploader_add_folder(folder)
|
125
125
|
cama_uploader_init_connection(true)
|
126
|
-
key = "#{current_site.
|
126
|
+
key = "#{current_site.upload_directory_name}/#{folder}/".split("/").clean_empty.join("/")
|
127
127
|
key += '/_tmp.txt' unless @fog_connection.class.name.include?("AWS")
|
128
128
|
@fog_connection_bucket_dir.files.create({:key => key, content: "", :public => true})
|
129
129
|
end
|
@@ -132,9 +132,9 @@ module CamaleonCms::UploaderHelper
|
|
132
132
|
def cama_uploader_init_connection(clear_cache = false)
|
133
133
|
server = current_site.get_option("filesystem_type", "local")
|
134
134
|
@fog_connection_hook_res ||= {server: server, connection: nil, thumb_folder_name: "thumb", bucket_name: server == "local" ? "media" : current_site.get_option("filesystem_s3_bucket_name"), thumb: {w: 100, h: 100}}; hooks_run("on_uploader", @fog_connection_hook_res)
|
135
|
-
case server
|
135
|
+
case @fog_connection_hook_res[:server]
|
136
136
|
when "local"
|
137
|
-
Dir.mkdir(Rails.root.join("public",
|
137
|
+
Dir.mkdir(Rails.root.join("public", @fog_connection_hook_res[:bucket_name]).to_s) unless Dir.exist?(Rails.root.join("public", @fog_connection_hook_res[:bucket_name]).to_s)
|
138
138
|
@fog_connection ||= !@fog_connection_hook_res[:connection].present? ? Fog::Storage.new({ :local_root => Rails.root.join("public").to_s, :provider => 'Local', endpoint: (root_url rescue cama_root_url) }) : @fog_connection_hook_res[:connection]
|
139
139
|
when "s3"
|
140
140
|
@fog_connection ||= !@fog_connection_hook_res[:connection].present? ? Fog::Storage.new({ :aws_access_key_id => current_site.get_option("filesystem_s3_access_key"), :provider => 'AWS', aws_secret_access_key: current_site.get_option("filesystem_s3_secret_key"), :region => current_site.get_option("filesystem_region") }) : @fog_connection_hook_res[:connection]
|
@@ -150,11 +150,11 @@ module CamaleonCms::UploaderHelper
|
|
150
150
|
cama_uploader_init_connection()
|
151
151
|
files = @fog_connection_bucket_dir.files
|
152
152
|
res = partial_path
|
153
|
-
if files.head("#{current_site.
|
153
|
+
if files.head("#{current_site.upload_directory_name}/#{res}".gsub(/(\/){2,}/, "/")).present?
|
154
154
|
dirname = "#{File.dirname(partial_path)}/" if partial_path.include?("/")
|
155
155
|
(1..999).each do |i|
|
156
156
|
res = "#{dirname}#{File.basename(partial_path, File.extname(partial_path))}_#{i}#{File.extname(partial_path)}"
|
157
|
-
break unless files.head("#{current_site.
|
157
|
+
break unless files.head("#{current_site.upload_directory_name}/#{res}".gsub(/(\/){2,}/, "/")).present?
|
158
158
|
end
|
159
159
|
end
|
160
160
|
res.gsub(/(\/){2,}/, "/")
|
@@ -165,7 +165,7 @@ module CamaleonCms::UploaderHelper
|
|
165
165
|
def cama_media_find_folder(path = "")
|
166
166
|
cama_uploader_init_connection(true)
|
167
167
|
|
168
|
-
prefix = "#{current_site.
|
168
|
+
prefix = "#{current_site.upload_directory_name}/#{path}/".gsub(/(\/){2,}/, "/")
|
169
169
|
res = {folders: {}, files: []}
|
170
170
|
|
171
171
|
@fog_connection.directories.get(@fog_connection_hook_res[:bucket_name], prefix: prefix).files.each do |file|
|
@@ -205,9 +205,14 @@ class CamaleonCms::Site < CamaleonCms::TermTaxonomy
|
|
205
205
|
end
|
206
206
|
end
|
207
207
|
|
208
|
-
# return upload directory for this site
|
208
|
+
# return upload directory for this site (deprecated for cloud support)
|
209
209
|
def upload_directory(inner_directory = nil)
|
210
|
-
File.join(Rails.public_path, "/media/#{self.id}", inner_directory.to_s)
|
210
|
+
File.join(Rails.public_path, "/media/#{PluginRoutes.static_system_info["media_slug_folder"] ? self.slug : self.id}", inner_directory.to_s)
|
211
|
+
end
|
212
|
+
|
213
|
+
# return the directory name where to upload file for this site
|
214
|
+
def upload_directory_name
|
215
|
+
"#{PluginRoutes.static_system_info["media_slug_folder"] ? self.slug : self.id}"
|
211
216
|
end
|
212
217
|
|
213
218
|
# return an available slug for a new post
|
@@ -237,7 +242,7 @@ class CamaleonCms::Site < CamaleonCms::TermTaxonomy
|
|
237
242
|
unless PluginRoutes.system_info["users_share_sites"]
|
238
243
|
CamaleonCms::User.where(site_id: self.id).destroy_all
|
239
244
|
end
|
240
|
-
FileUtils.rm_rf(
|
245
|
+
FileUtils.rm_rf(File.join(Rails.public_path, "/media/#{upload_directory_name}").to_s) # destroy current media directory
|
241
246
|
users.destroy_all unless PluginRoutes.system_info["users_share_sites"] # destroy all users assigned fot this site
|
242
247
|
end
|
243
248
|
|
@@ -17,9 +17,8 @@
|
|
17
17
|
<%= f.label t('camaleon_cms.admin.table.description') %><br>
|
18
18
|
<%= f.text_area :description, :class => "form-control", :rows => 4 %>
|
19
19
|
</div>
|
20
|
-
|
20
|
+
<%= render partial: "camaleon_cms/admin/settings/custom_fields/render", locals: {record: @post_tag, field_groups: @post_type.get_field_groups({kind: "PostTag"})} %>
|
21
21
|
</div>
|
22
|
-
|
23
22
|
<div class="panel-footer">
|
24
23
|
<a class="btn btn-default" role="back" href="<%= url_for action: :index %>"><%= t('camaleon_cms.admin.button.back') %></a>
|
25
24
|
<button class="btn btn-primary pull-right" type="submit"><%= t('camaleon_cms.admin.button.submit')%></button>
|
@@ -1,136 +1,144 @@
|
|
1
1
|
<%= javascript_include_tag "camaleon_cms/admin/custom_fields_form" %>
|
2
2
|
<div class="page-title">
|
3
|
-
|
3
|
+
<h2><span class="fa fa-cog"></span> <%= @field_group.new_record? ? t('camaleon_cms.admin.settings.new_custom_field_group') : "#{t('camaleon_cms.admin.settings.new_custom_field_group')}: #{@field_group.name} "%> </h2>
|
4
4
|
</div>
|
5
5
|
|
6
6
|
<!-- PAGE CONTENT WRAPPER -->
|
7
7
|
<div class="page-content-wrap" id="cama_custom_field_form" data-group_class_name="<%= @field_group.object_class %>,<%= @field_group.objectid %>">
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
8
|
+
<div class="row">
|
9
|
+
<%= form_for @field_group, as: "custom_field_group", url:{action: @field_group.new_record? ? :create : :update}, html: {class: 'validate-custom-field cama_ajax_request'} do |f| %>
|
10
|
+
<div class="col-md-4">
|
11
|
+
<div class="panel panel-default">
|
12
|
+
<div class="panel-heading">
|
13
|
+
<h3 class="panel-title"><%= t('camaleon_cms.admin.settings.details_custom_field_group') %></h3>
|
14
|
+
</div>
|
15
|
+
<div class="panel-body">
|
16
|
+
<%= render partial: 'layouts/camaleon_cms/admin/form_error', locals: {data: @field_group} %>
|
17
|
+
<div class="form-group">
|
18
|
+
<%= f.label t('camaleon_cms.admin.table.name') %><br>
|
19
|
+
<%= f.text_field :name, :class => "form-control required" %>
|
20
|
+
</div>
|
21
|
+
<div class="form-group">
|
22
|
+
<%= f.label t('camaleon_cms.admin.table.description') %><br>
|
23
|
+
<%= f.text_area :description, :class => "form-control" %>
|
24
|
+
</div>
|
25
|
+
<div class="form-group">
|
26
|
+
<%= f.label t('camaleon_cms.admin.settings.where_display_group') %><br>
|
27
|
+
<select id="select_assign_group" name="custom_field_group[assign_group]" class="form-control required">
|
28
|
+
<option value=""> </option>
|
29
|
+
<optgroup label="<%= t('camaleon_cms.admin.settings.posts_in') %>">
|
30
|
+
<% current_site.post_types.each do |pt| pt = pt.decorate; value = "PostType_Post,#{pt.id}" %>
|
31
|
+
<option value="<%= value %>" data-help="<%= "#{t('camaleon_cms.admin.settings.tooltip.add_custom_field_posts')}"+ pt.the_title %>"><%= pt.the_title %></option>
|
32
|
+
<% end %>
|
33
|
+
</optgroup>
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
<optgroup label="<%= t('camaleon_cms.admin.settings.categories_in') %>">
|
36
|
+
<% current_site.post_types.each do |pt| pt = pt.decorate; value = "PostType_Category,#{pt.id}" %>
|
37
|
+
<% if pt.manage_categories? %>
|
38
|
+
<option value="<%= value %>" data-help="<%= "#{t('camaleon_cms.admin.settings.tooltip.add_custom_field_categories')}"+ pt.the_title %>"><%= pt.the_title %></option>
|
39
|
+
<% end %>
|
40
|
+
<% end %>
|
41
|
+
</optgroup>
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
<option value="<%= value %>" data-help=""><%= model.name %></option><%= model.name %>
|
51
|
-
<% end %>
|
52
|
-
</optgroup>
|
43
|
+
<optgroup label="<%= t('camaleon_cms.admin.settings.post_tags_in', default: 'Post Tags In') %>">
|
44
|
+
<% current_site.post_types.each do |pt| pt = pt.decorate; value = "PostType_PostTag,#{pt.id}" %>
|
45
|
+
<% if pt.manage_tags? %>
|
46
|
+
<option value="<%= value %>" data-help="<%= "#{t('camaleon_cms.admin.settings.tooltip.add_custom_field_tags', default: 'Add Custom Field in Post Tags of ')}"+ pt.the_title %>"><%= pt.the_title %></option>
|
47
|
+
<% end %>
|
48
|
+
<% end %>
|
49
|
+
</optgroup>
|
53
50
|
|
54
|
-
|
55
|
-
|
56
|
-
|
51
|
+
<optgroup label="<%= t('camaleon_cms.admin.settings.others') %>">
|
52
|
+
<% value = "User,#{current_site.id}" %>
|
53
|
+
<option value="<%= value %>" data-help="<%= t('camaleon_cms.admin.settings.tooltip.add_custom_field_users') %>"><%= t('camaleon_cms.admin.sidebar.users') %></option>
|
54
|
+
<% value = "Site,#{current_site.id}" %>
|
55
|
+
<option value="<%= value %>" data-help="<%= t('camaleon_cms.admin.settings.tooltip.add_custom_field_sites') %>"><%= t('camaleon_cms.admin.sidebar.site_settings') %></option>
|
56
|
+
<% @_extra_models_for_fields.each do |model| %>
|
57
|
+
<% value = "#{model.name},#{current_site.id}" %>
|
58
|
+
<option value="<%= value %>" data-help=""><%= model.name %></option><%= model.name %>
|
59
|
+
<% end %>
|
60
|
+
</optgroup>
|
57
61
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
<% end %>
|
62
|
-
</optgroup>
|
62
|
+
<optgroup label="<%= t('camaleon_cms.admin.sidebar.themes') %>">
|
63
|
+
<option value="Theme,<%= current_theme.id %>" data-help=""><%= current_theme.name %></option>
|
64
|
+
</optgroup>
|
63
65
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
</optgroup>
|
70
|
-
<option value="_post_simple" >Select Post Simple</option>
|
71
|
-
</select>
|
72
|
-
<select id="select_post_simple" name="custom_field_group[assign_group]" class="form-control required" style="display: none" disabled>
|
73
|
-
<% current_site.post_types.each do |pt| pt = pt.decorate %>
|
74
|
-
<optgroup label="<%= pt.the_title %>">
|
75
|
-
<% pt.posts.visible_frontend.each do |post| value = "#{post.class.name},#{post.id}".parseCamaClass; post = post.decorate %>
|
76
|
-
<option value="<%= value %>" data-help="<%= "#{t('camaleon_cms.admin.settings.tooltip.add_custom_field_posts')}"+ post.the_title %>"><%= post.the_title %></option>
|
77
|
-
<% end %>
|
78
|
-
</optgroup>
|
79
|
-
<% end %>
|
80
|
-
</select>
|
81
|
-
<input id="select_assign_group_caption" type="hidden" name="custom_field_group[caption]"/>
|
82
|
-
<div id="select_assign_group_help"></div>
|
83
|
-
</div>
|
84
|
-
</div>
|
85
|
-
<div class="panel-footer">
|
86
|
-
<a class="btn btn-default" role="back" href="<%= url_for action: :index %>"><%= t('camaleon_cms.admin.button.back') %></a>
|
87
|
-
<button class="btn btn-primary pull-right" type="submit"><%= t('camaleon_cms.admin.button.submit') %></button>
|
88
|
-
</div>
|
89
|
-
</div>
|
90
|
-
</div>
|
91
|
-
<div class="col-md-5">
|
92
|
-
<div class="panel panel-default">
|
93
|
-
<div class="panel-heading">
|
94
|
-
<h3 class="panel-title"><%= t('camaleon_cms.admin.settings.fields') %></h3>
|
95
|
-
</div>
|
96
|
-
<div class="panel-body padding-0">
|
97
|
-
<% fields = @field_group.new_record? ? [] : @field_group.fields %>
|
98
|
-
<ul id="sortable-fields" class="clear">
|
99
|
-
<% fields.each do |field| @item_value = field; @item_options_value = field.options; @key = field.options[:field_key] %>
|
100
|
-
<li class="item">
|
101
|
-
<%= render "get_items" %>
|
102
|
-
</li>
|
103
|
-
<% end %>
|
104
|
-
</ul>
|
105
|
-
</div>
|
106
|
-
<div class="panel-footer hidden">
|
107
|
-
<a class="btn btn-default" role="back" href="<%= url_for action: :index %>"><%= t('camaleon_cms.admin.button.back') %></a>
|
108
|
-
<button class="btn btn-primary pull-right" type="submit"><%= t('camaleon_cms.admin.button.submit') %></button>
|
109
|
-
</div>
|
110
|
-
</div>
|
111
|
-
</div>
|
66
|
+
<optgroup label="<%= t('camaleon_cms.admin.sidebar.menus') %>">
|
67
|
+
<% current_site.nav_menus.each do |menu| %>
|
68
|
+
<option value="NavMenu,<%= menu.id %>" data-help=""><%= menu.name %></option>
|
69
|
+
<% end %>
|
70
|
+
</optgroup>
|
112
71
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
72
|
+
<!--optgroup label="<%#= t('camaleon_cms.admin.sidebar.widgets') %>">
|
73
|
+
<%# current_site.widgets.each do |widget| %>
|
74
|
+
<%# value = "#{widget.class.name},#{widget.id}" %>
|
75
|
+
<option value="<%#= value %>" data-help="<%#= "#{t('camaleon_cms.admin.settings.tooltip.add_custom_field_widget')}"+ widget.name %>"><%#= widget.name %></option>
|
76
|
+
<%# end %>
|
77
|
+
</optgroup -->
|
78
|
+
<option value="_post_simple" >Select Post Simple</option>
|
79
|
+
</select>
|
80
|
+
<select id="select_post_simple" name="custom_field_group[assign_group]" class="form-control required" style="display: none" disabled>
|
81
|
+
<% current_site.post_types.each do |pt| pt = pt.decorate %>
|
82
|
+
<optgroup label="<%= pt.the_title %>">
|
83
|
+
<% pt.posts.visible_frontend.each do |post| value = "#{post.class.name},#{post.id}".parseCamaClass; post = post.decorate %>
|
84
|
+
<option value="<%= value %>" data-help="<%= "#{t('camaleon_cms.admin.settings.tooltip.add_custom_field_posts')}"+ post.the_title %>"><%= post.the_title %></option>
|
85
|
+
<% end %>
|
86
|
+
</optgroup>
|
87
|
+
<% end %>
|
88
|
+
</select>
|
89
|
+
<input id="select_assign_group_caption" type="hidden" name="custom_field_group[caption]"/>
|
90
|
+
<div id="select_assign_group_help"></div>
|
91
|
+
</div>
|
92
|
+
</div>
|
93
|
+
<div class="panel-footer">
|
94
|
+
<a class="btn btn-default" role="back" href="<%= url_for action: :index %>"><%= t('camaleon_cms.admin.button.back') %></a>
|
95
|
+
<button class="btn btn-primary pull-right" type="submit"><%= t('camaleon_cms.admin.button.submit') %></button>
|
96
|
+
</div>
|
97
|
+
</div>
|
117
98
|
</div>
|
118
|
-
<div class="
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
99
|
+
<div class="col-md-5">
|
100
|
+
<div class="panel panel-default">
|
101
|
+
<div class="panel-heading">
|
102
|
+
<h3 class="panel-title"><%= t('camaleon_cms.admin.settings.fields') %></h3>
|
103
|
+
</div>
|
104
|
+
<div class="panel-body padding-0">
|
105
|
+
<% fields = @field_group.new_record? ? [] : @field_group.fields %>
|
106
|
+
<ul id="sortable-fields" class="clear">
|
107
|
+
<% fields.each do |field| @item_value = field; @item_options_value = field.options; @key = field.options[:field_key] %>
|
108
|
+
<li class="item">
|
109
|
+
<%= render "get_items" %>
|
110
|
+
</li>
|
111
|
+
<% end %>
|
112
|
+
</ul>
|
113
|
+
</div>
|
114
|
+
<div class="panel-footer hidden">
|
115
|
+
<a class="btn btn-default" role="back" href="<%= url_for action: :index %>"><%= t('camaleon_cms.admin.button.back') %></a>
|
116
|
+
<button class="btn btn-primary pull-right" type="submit"><%= t('camaleon_cms.admin.button.submit') %></button>
|
117
|
+
</div>
|
118
|
+
</div>
|
125
119
|
</div>
|
126
|
-
|
127
|
-
|
128
|
-
|
120
|
+
|
121
|
+
<div class="col-md-3">
|
122
|
+
<div class="panel panel-default">
|
123
|
+
<div class="panel-heading">
|
124
|
+
<h3 class="panel-title"><%= t('camaleon_cms.admin.settings.available_fields')%></h3>
|
125
|
+
</div>
|
126
|
+
<div class="panel-body">
|
127
|
+
<div id="content-items-default" class="form-group input-group-sm">
|
128
|
+
<% cf_get_items.each do |i,item| %>
|
129
|
+
<% next if item[:key] == "select_eval" %>
|
130
|
+
<a id="item-<%= item[:key] %>" class="btn btn-default" href="<%= get_items_cama_admin_settings_custom_fields_path(item[:key]) %>" style="margin-bottom: 4px"><%= item[:label] %></a>
|
131
|
+
<% end %>
|
132
|
+
</div>
|
133
|
+
</div>
|
134
|
+
<div class="panel-footer hidden">
|
135
|
+
<a class="btn btn-default" role="back" href="<%= url_for action: :index %>"><%= t('camaleon_cms.admin.button.back') %></a>
|
136
|
+
<button class="btn btn-primary pull-right" type="submit"><%= t('camaleon_cms.admin.button.submit') %></button>
|
137
|
+
</div>
|
138
|
+
</div>
|
129
139
|
</div>
|
130
|
-
|
131
|
-
|
132
|
-
<% end %>
|
133
|
-
</div>
|
140
|
+
<% end %>
|
141
|
+
</div>
|
134
142
|
</div>
|
135
143
|
|
136
144
|
|
data/config/system.json
CHANGED
@@ -9,7 +9,9 @@
|
|
9
9
|
"default_user_role": "client", // default user role for all new users
|
10
10
|
"users_share_sites": true, //(boolean) true: permit to share users between sites, false: All users are assigned for an unique site.
|
11
11
|
"db_prefix": "", // prefix name for database tables
|
12
|
-
"relative_url_root": "" // URL prefix, for example to get http://localhost:3000/blog/, this should be "blog"
|
12
|
+
"relative_url_root": "", // URL prefix, for example to get http://localhost:3000/blog/, this should be "blog"
|
13
|
+
|
14
|
+
"media_slug_folder": false // permit to use site slug for upload media folder instead of site-id
|
13
15
|
}
|
14
16
|
|
15
17
|
// Note: after any change in this file, you need to restart your server to apply changes.
|
data/lib/camaleon_cms/version.rb
CHANGED
@@ -7,6 +7,7 @@ module Themes::ThemeClass::MainHelper
|
|
7
7
|
# here your code on save settings for current site, by default params[:theme_fields] is auto saved into theme
|
8
8
|
# Also, you can save your extra values added in admin/settings.html.erb
|
9
9
|
# sample: theme.set_meta("my_key", params[:my_value])
|
10
|
+
theme.set_field_values(params[:field_options])
|
10
11
|
end
|
11
12
|
|
12
13
|
# callback called after theme installed
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<html lang="en">
|
3
3
|
<head>
|
4
4
|
<!-- META SECTION -->
|
5
|
-
<title
|
5
|
+
<title><%= current_site.the_title %></title>
|
6
6
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
7
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
8
8
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: camaleon_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Owen Peredo Diaz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcrypt
|