Plugin Directory

Changeset 2623700


Ignore:
Timestamp:
11/03/2021 02:10:35 AM (4 years ago)
Author:
mmuro
Message:

Update export code to be more in line with VFB Pro’s export

Location:
visual-form-builder/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • visual-form-builder/trunk/admin/assets/js/vfb-admin.js

    r2501188 r2623700  
    572572
    573573    // !Entries fields
    574     $( '#vfb-export-entries-forms' ).change( function(){
    575         var id = $( this ).val(),
    576             count = vfb_entries_count( id );
     574    $( '#vfb-export-forms-list' ).change( function(){
     575        var form_id = $( this ).val();
    577576
    578577        $( '#vfb-export-entries-fields' ).html( 'Loading...' );
     
    580579        $.get( ajaxurl,
    581580            {
    582                 action: 'visual_form_builder_export_load_options',
    583                 id: id,
    584                 count: count,
    585                 page: pagenow
     581                action: 'vfb-export-fields',
     582                id: form_id,
     583                vfb_ajax_nonce: vfb_settings.vfb_ajax_nonce
    586584            }
    587585        ).done( function( response ) {
     
    591589        });
    592590    });
    593 
    594     $( '#vfb-export-entries-rows' ).change( function(){
    595         var id = $( '#vfb-export-entries-forms' ).val();
    596 
    597         var page = $( this ).val();
    598 
    599         $( '#vfb-export-entries-fields' ).html( 'Loading...' );
    600 
    601         $.get( ajaxurl,
    602             {
    603                 action: 'visual_form_builder_export_load_options',
    604                 id: id,
    605                 offset: page,
    606                 page: pagenow
    607             }
    608         ).done( function( response ) {
    609             $( '#vfb-export-entries-fields' ).html( response );
    610         }).fail( function( response ) {
    611             $( '#vfb-export-entries-fields' ).html( 'Error loading entry fields.' );
    612         });
    613     });
    614 
    615     function vfb_entries_count( id ) {
    616          var count = '';
    617 
    618          $.ajax( ajaxurl, {
    619              async: false,
    620              data:
    621              {
    622                 action: 'visual_form_builder_export_entries_count',
    623                 id: id,
    624                 page: pagenow
    625              }
    626         }).done( function( response ) {
    627             if ( response > 1000 ) {
    628 
    629                 $( '#vfb-export-entries-rows' ).empty();
    630 
    631                 var num_pages = Math.ceil( parseInt( response ) / 1000 );
    632 
    633                 for ( var i = 1; i <= num_pages; i++ ) {
    634                     $( '#vfb-export-entries-rows' ).append( $( '<option></option>' ).attr( 'value', i ).text( i ) );
    635                 }
    636 
    637                 $( '#vfb-export-entries-pages' ).show();
    638             }
    639             else {
    640                 $( '#vfb-export-entries-pages' ).hide();
    641             }
    642 
    643             count = response;
    644         }).fail( function( response ) {
    645         });
    646 
    647         return count;
    648     }
    649591});
    650592
  • visual-form-builder/trunk/admin/assets/js/vfb-admin.min.js

    r2501188 r2623700  
    1 jQuery(document).ready((function(e){var t=null;e(document).on("mouseenter mouseleave",".vfb-tooltip",(function(i){if("mouseenter"==i.type){t&&(clearTimeout(t),t=null);var o=e(this).attr("title"),n=e(this).attr("rel"),a=e(this).width();e(this).append('<div class="vfb-tooltip-popup"><h3>'+o+"</h3><p>"+n+"</p></div>"),e.data(this,"title",o),this.title="",e(this).find(".vfb-tooltip-popup").css({left:a+22}),t=setTimeout((function(){e(".vfb-tooltip-popup").fadeIn(300)}),500)}else this.title=e.data(this,"title"),e(".vfb-tooltip-popup").fadeOut(500),e(this).children().remove()})),e(document).on("click","a.vfb-add-option",(function(t){t.preventDefault();var i=e(this).parent().siblings(".vfb-cloned-options").children(),o=i.length,n=o+1,a=i[o-1],s=e(a).attr("id"),r=e(a).children("label").attr("for").replace(new RegExp(/(\d+)$/g),""),l=s.replace(new RegExp(/(\d+)$/g),""),f=e("#"+s).clone().attr("id",l+n);f.children("label").attr("for",r+n),f.find('input[type="text"]').attr("id",r+n),f.find('input[type="radio"]').attr("value",n),e("#"+l+o).after(f)})),e(document).on("click","a.deleteOption",(function(t){t.preventDefault(),e(this).parent().parent().find(".clonedOption").length-1==0?alert("You must have at least one option."):e(this).closest("div").remove()})),e(".vfb-cloned-options").sortable({items:"div.option"}),e(document).on("click","a.addEmail",(function(t){t.preventDefault();var i=e(this).closest("#email-details").find(".clonedOption").length,o=i+1,n=e(this).closest("div").attr("id"),a=e(this).closest("div").find("label").attr("for").replace(new RegExp(/(\d+)$/g),""),s=n.replace(new RegExp(/(\d+)$/g),""),r=e("#"+n).clone().attr("id",s+o);r.find("label").attr("for",a+o),r.find("input").attr("id",a+o),e("#"+s+i).after(r)})),e(document).on("click","a.deleteEmail",(function(t){t.preventDefault(),e(this).closest("#email-details").find(".clonedOption").length-1==0?alert("You must have at least one option."):e(this).closest("div").remove()})),e('.option input[type="radio"]').mousedown((function(){e(this).attr("previousValue",e(this).prop("checked"))})).click((function(){"true"==e(this).attr("previousValue")&&e(this).prop("checked",!1)})),e(".menu-delete").click((function(){var t=e(this).hasClass("entry-delete")?"entry":"form";return!!confirm("You are about to permanently delete this "+t+" and all of its data.\n'Cancel' to stop, 'OK' to delete.")})),e(document).on("click","a.item-edit",(function(t){t.preventDefault(),e(t.target).closest("li").children(".menu-item-settings").slideToggle("fast"),e(this).toggleClass("opened");var i=e(t.target).closest("dl");i.hasClass("vfb-menu-item-inactive")?i.removeClass("vfb-menu-item-inactive").addClass("vfb-menu-item-active"):i.removeClass("vfb-menu-item-active").addClass("vfb-menu-item-inactive")})),e("#vfb-menu-to-edit").nestedSortable({listType:"ul",maxLevels:3,handle:".vfb-menu-item-handle",placeholder:"vfb-sortable-placeholder",forcePlaceholderSize:!0,forceHelperSize:!0,tolerance:"pointer",toleranceElement:"> dl",items:"li:not(.ui-state-disabled)",create:function(t,i){e(this).css("min-height",e(this).height())},start:function(e,t){t.placeholder.height(t.item.height())},stop:function(t,i){var o=e("#vfb-menu-to-edit .item-type:first").text();opts={url:ajaxurl,type:"POST",async:!0,cache:!1,data:{action:"visual_form_builder_sort_field",order:e(this).nestedSortable("toArray")},success:function(t){e("#loading-animation").hide(),"FIELDSET"!==o?e("#vfb-fieldset-first-warning").show():e("#vfb-fieldset-first-warning").hide()}},e.ajax(opts)}}),e("#vfb-form-items .vfb-draggable-form-items").click((function(t){t.preventDefault(),e(this).data("submit_value",e(this).text())})),e("#vfb-form-items .vfb-draggable-form-items").click((function(t){t.preventDefault();var i=e(this).closest("form").serializeArray(),o=e(this).data("submit_value"),n=e("#vfb-menu-to-edit li.ui-state-disabled:first").attr("id").match(new RegExp(/(\d+)$/g))[0];e("img.waiting").show(),e.post(ajaxurl,{action:"visual_form_builder_create_field",data:i,field_type:o,previous:n,page:pagenow,nonce:e("#_wpnonce").val()}).done((function(t){e("img.waiting").hide(),e(t).hide().insertBefore("#vfb-menu-to-edit li.ui-state-disabled:first").fadeIn()}))})),e(document).on("click","a.item-delete",(function(t){t.preventDefault();var i=childs=new Array,o=0,n=e(this).attr("href").split("&");if(!confirm("You are about to permanently delete this field.\n'Cancel' to stop, 'OK' to delete."))return!1;for(var a=0;a<n.length;a++){var s=n[a].indexOf("="),r=n[a].substring(0,s),l=n[a].substring(s+1);i[r]=l}var f=e(this).closest(".form-item").find("ul").children(),c=f.parent().html();f.each((function(t){childs[t]=e(this).attr("id").match(new RegExp(/(\d+)$/g))[0]}));var d=e(this).closest("li.form-item").parents("li.form-item");d.length&&(o=d.attr("id").match(new RegExp(/(\d+)$/g))[0]),e.post(ajaxurl,{action:"visual_form_builder_delete_field",form:i.form,field:i.field,child_ids:childs,parent_id:o,page:pagenow,nonce:i._wpnonce}).done((function(t){e("#form_item_"+i.field).addClass("deleting").animate({opacity:0,height:0},350,(function(){e(this).before(c).remove()}))}))})),e("#form-settings-button").click((function(t){t.preventDefault(),e(this).toggleClass("current"),e("#form-settings").slideToggle("fast");var i=e('input[name="form_id"]').val(),o=e(this).hasClass("current")?"opened":"closed";e.post(ajaxurl,{action:"visual_form_builder_form_settings",form:i,status:o,page:pagenow}).done((function(t){"closed"==o&&(e(".settings-links").removeClass("on"),e(".settings-links:first").addClass("on"),e(".form-details").slideUp("normal"),e(".form-details:first").show("normal"))}))})),e(".settings-links").click((function(t){t.preventDefault(),e(".settings-links").removeClass("on"),e(".form-details").slideUp("fast"),1==e(this).next("div").is(":hidden")&&(e(this).addClass("on"),e(this).next().slideDown("normal"));var i=e('input[name="form_id"]').val(),o=this.hash.replace(/#/g,"");e.post(ajaxurl,{action:"visual_form_builder_form_settings",form:i,accordion:o,page:pagenow})}));var i=!1;if(e("#vfb-form-builder-management input, #vfb-form-builder-management select, #vfb-form-builder-management textarea").change((function(){i=!0})),window.onbeforeunload=function(){if(i)return"The changes you made will be lost if you navigate away from this page."},e(document).on("submit","#visual-form-builder-update",(function(){window.onbeforeunload=null})),e(".columns-2 #side-sortables").length>0){var o=e("#vfb_form_items_meta_box"),n=o.width(),a=o.offset(),s=o.nextAll(),r=!1;e(window).on("scroll",(function(){e(window).scrollTop()>a.top?(o.stop().css({top:55,position:"fixed","z-index":"1",width:n}),s.is(":visible")&&(r=!0,s.stop().css({opacity:.1}))):(o.stop().css({top:0,position:"relative"}),r&&s.stop().css({opacity:1}))}))}var l=e(".form-success-type:checked").val();e("#form-success-message-"+l).show(),e(".form-success-type").change((function(){switch(e(this).val()){case"text":e("#form-success-message-text").show(),e("#form-success-message-page, #form-success-message-redirect").hide();break;case"page":e("#form-success-message-page").show(),e("#form-success-message-text, #form-success-message-redirect").hide();break;case"redirect":e("#form-success-message-redirect").show(),e("#form-success-message-text, #form-success-message-page").hide()}})),e(".vfb-field-types").click((function(t){t.preventDefault(),e("#vfb-field-tabs li").removeClass("tabs"),e(this).parent().addClass("tabs"),e(".tabs-panel-active").removeClass("tabs-panel-active").addClass("tabs-panel-inactive");var i=this.hash;e(i).removeClass("tabs-panel-inactive").addClass("tabs-panel-active")})),e("#visual-form-builder-update").validate({rules:{"form_email_to[]":{email:!0},form_email_from:{email:!0},form_success_message_redirect:{url:!0},form_notification_email_name:{required:function(t){return e("#form-notification-setting").is(":checked")}},form_notification_email_from:{required:function(t){return e("#form-notification-setting").is(":checked")},email:!0},form_notification_email:{required:function(t){return e("#form-notification-setting").is(":checked")}}},errorPlacement:function(e,t){e.insertAfter(t.parent())}}),e("#visual-form-builder-new-form").validate(),e("#form_email_from_name_override").change((function(){""==e("#form_email_from_name_override").val()?e("#form-email-sender-name").prop("readonly",!1):e("#form-email-sender-name").prop("readonly","readonly")})),e("#form_email_from_override").change((function(){""==e("#form_email_from_override").val()?e("#form-email-sender").prop("readonly",!1):e("#form-email-sender").prop("readonly","readonly")})),e("#notification-email").toggle(e("#form-notification-setting").prop("checked")),e("#form-notification-setting").change((function(){e(this).is(":checked")?(e("#notification-email").show(),e("#form-notification-email-name, #form-notification-email-from, #form-notification-email, #form-notification-subject, #form-notification-message, #form-notification-entry").prop("disabled",!1)):(e("#notification-email").hide(),e("#form-notification-email-name, #form-notification-email-from, #form-notification-email, #form-notification-subject, #form-notification-message, #form-notification-entry").prop("disabled","disabled"))})),e("#vfb-export-select-all").click((function(t){t.preventDefault(),e('#vfb-export-entries-fields input[type="checkbox"]').prop("checked",!0)})),e("#vfb-export-unselect-all").click((function(t){t.preventDefault(),e('#vfb-export-entries-fields input[type="checkbox"]').prop("checked",!1)})),e("#vfb-export-entries-forms").change((function(){var t=e(this).val(),i=function(t){var i="";return e.ajax(ajaxurl,{async:!1,data:{action:"visual_form_builder_export_entries_count",id:t,page:pagenow}}).done((function(t){if(t>1e3){e("#vfb-export-entries-rows").empty();for(var o=Math.ceil(parseInt(t)/1e3),n=1;n<=o;n++)e("#vfb-export-entries-rows").append(e("<option></option>").attr("value",n).text(n));e("#vfb-export-entries-pages").show()}else e("#vfb-export-entries-pages").hide();i=t})).fail((function(e){})),i}(t);e("#vfb-export-entries-fields").html("Loading..."),e.get(ajaxurl,{action:"visual_form_builder_export_load_options",id:t,count:i,page:pagenow}).done((function(t){e("#vfb-export-entries-fields").html(t)})).fail((function(t){e("#vfb-export-entries-fields").html("Error loading entry fields.")}))})),e("#vfb-export-entries-rows").change((function(){var t=e("#vfb-export-entries-forms").val(),i=e(this).val();e("#vfb-export-entries-fields").html("Loading..."),e.get(ajaxurl,{action:"visual_form_builder_export_load_options",id:t,offset:i,page:pagenow}).done((function(t){e("#vfb-export-entries-fields").html(t)})).fail((function(t){e("#vfb-export-entries-fields").html("Error loading entry fields.")}))}))})),function(e){e(document).ready((function(){e(".vfb-accordion-container").on("click keydown",".vfb-accordion-section-title",(function(t){"keydown"===t.type&&13!==t.which||(t.preventDefault(),function(e){var t=e.closest(".vfb-accordion-section"),i=t.closest(".vfb-accordion-container").find(".open"),o=t.find(".vfb-accordion-section-content");if(t.hasClass("cannot-expand"))return;t.hasClass("open")?(t.toggleClass("open"),o.toggle(!0).slideToggle(150)):(i.removeClass("open"),i.find(".vfb-accordion-section-content").show().slideUp(150),o.toggle(!1).slideToggle(150),t.toggleClass("open"))}(e(this)))}))}))}(jQuery);
     1jQuery(document).ready((function(e){var t=null;e(document).on("mouseenter mouseleave",".vfb-tooltip",(function(i){if("mouseenter"==i.type){t&&(clearTimeout(t),t=null);var o=e(this).attr("title"),n=e(this).attr("rel"),a=e(this).width();e(this).append('<div class="vfb-tooltip-popup"><h3>'+o+"</h3><p>"+n+"</p></div>"),e.data(this,"title",o),this.title="",e(this).find(".vfb-tooltip-popup").css({left:a+22}),t=setTimeout((function(){e(".vfb-tooltip-popup").fadeIn(300)}),500)}else this.title=e.data(this,"title"),e(".vfb-tooltip-popup").fadeOut(500),e(this).children().remove()})),e(document).on("click","a.vfb-add-option",(function(t){t.preventDefault();var i=e(this).parent().siblings(".vfb-cloned-options").children(),o=i.length,n=o+1,a=i[o-1],s=e(a).attr("id"),r=e(a).children("label").attr("for").replace(new RegExp(/(\d+)$/g),""),l=s.replace(new RegExp(/(\d+)$/g),""),c=e("#"+s).clone().attr("id",l+n);c.children("label").attr("for",r+n),c.find('input[type="text"]').attr("id",r+n),c.find('input[type="radio"]').attr("value",n),e("#"+l+o).after(c)})),e(document).on("click","a.deleteOption",(function(t){t.preventDefault(),e(this).parent().parent().find(".clonedOption").length-1==0?alert("You must have at least one option."):e(this).closest("div").remove()})),e(".vfb-cloned-options").sortable({items:"div.option"}),e(document).on("click","a.addEmail",(function(t){t.preventDefault();var i=e(this).closest("#email-details").find(".clonedOption").length,o=i+1,n=e(this).closest("div").attr("id"),a=e(this).closest("div").find("label").attr("for").replace(new RegExp(/(\d+)$/g),""),s=n.replace(new RegExp(/(\d+)$/g),""),r=e("#"+n).clone().attr("id",s+o);r.find("label").attr("for",a+o),r.find("input").attr("id",a+o),e("#"+s+i).after(r)})),e(document).on("click","a.deleteEmail",(function(t){t.preventDefault(),e(this).closest("#email-details").find(".clonedOption").length-1==0?alert("You must have at least one option."):e(this).closest("div").remove()})),e('.option input[type="radio"]').mousedown((function(){e(this).attr("previousValue",e(this).prop("checked"))})).click((function(){"true"==e(this).attr("previousValue")&&e(this).prop("checked",!1)})),e(".menu-delete").click((function(){var t=e(this).hasClass("entry-delete")?"entry":"form";return!!confirm("You are about to permanently delete this "+t+" and all of its data.\n'Cancel' to stop, 'OK' to delete.")})),e(document).on("click","a.item-edit",(function(t){t.preventDefault(),e(t.target).closest("li").children(".menu-item-settings").slideToggle("fast"),e(this).toggleClass("opened");var i=e(t.target).closest("dl");i.hasClass("vfb-menu-item-inactive")?i.removeClass("vfb-menu-item-inactive").addClass("vfb-menu-item-active"):i.removeClass("vfb-menu-item-active").addClass("vfb-menu-item-inactive")})),e("#vfb-menu-to-edit").nestedSortable({listType:"ul",maxLevels:3,handle:".vfb-menu-item-handle",placeholder:"vfb-sortable-placeholder",forcePlaceholderSize:!0,forceHelperSize:!0,tolerance:"pointer",toleranceElement:"> dl",items:"li:not(.ui-state-disabled)",create:function(t,i){e(this).css("min-height",e(this).height())},start:function(e,t){t.placeholder.height(t.item.height())},stop:function(t,i){var o=e("#vfb-menu-to-edit .item-type:first").text();opts={url:ajaxurl,type:"POST",async:!0,cache:!1,data:{action:"visual_form_builder_sort_field",order:e(this).nestedSortable("toArray")},success:function(t){e("#loading-animation").hide(),"FIELDSET"!==o?e("#vfb-fieldset-first-warning").show():e("#vfb-fieldset-first-warning").hide()}},e.ajax(opts)}}),e("#vfb-form-items .vfb-draggable-form-items").click((function(t){t.preventDefault(),e(this).data("submit_value",e(this).text())})),e("#vfb-form-items .vfb-draggable-form-items").click((function(t){t.preventDefault();var i=e(this).closest("form").serializeArray(),o=e(this).data("submit_value"),n=e("#vfb-menu-to-edit li.ui-state-disabled:first").attr("id").match(new RegExp(/(\d+)$/g))[0];e("img.waiting").show(),e.post(ajaxurl,{action:"visual_form_builder_create_field",data:i,field_type:o,previous:n,page:pagenow,nonce:e("#_wpnonce").val()}).done((function(t){e("img.waiting").hide(),e(t).hide().insertBefore("#vfb-menu-to-edit li.ui-state-disabled:first").fadeIn()}))})),e(document).on("click","a.item-delete",(function(t){t.preventDefault();var i=childs=new Array,o=0,n=e(this).attr("href").split("&");if(!confirm("You are about to permanently delete this field.\n'Cancel' to stop, 'OK' to delete."))return!1;for(var a=0;a<n.length;a++){var s=n[a].indexOf("="),r=n[a].substring(0,s),l=n[a].substring(s+1);i[r]=l}var c=e(this).closest(".form-item").find("ul").children(),f=c.parent().html();c.each((function(t){childs[t]=e(this).attr("id").match(new RegExp(/(\d+)$/g))[0]}));var d=e(this).closest("li.form-item").parents("li.form-item");d.length&&(o=d.attr("id").match(new RegExp(/(\d+)$/g))[0]),e.post(ajaxurl,{action:"visual_form_builder_delete_field",form:i.form,field:i.field,child_ids:childs,parent_id:o,page:pagenow,nonce:i._wpnonce}).done((function(t){e("#form_item_"+i.field).addClass("deleting").animate({opacity:0,height:0},350,(function(){e(this).before(f).remove()}))}))})),e("#form-settings-button").click((function(t){t.preventDefault(),e(this).toggleClass("current"),e("#form-settings").slideToggle("fast");var i=e('input[name="form_id"]').val(),o=e(this).hasClass("current")?"opened":"closed";e.post(ajaxurl,{action:"visual_form_builder_form_settings",form:i,status:o,page:pagenow}).done((function(t){"closed"==o&&(e(".settings-links").removeClass("on"),e(".settings-links:first").addClass("on"),e(".form-details").slideUp("normal"),e(".form-details:first").show("normal"))}))})),e(".settings-links").click((function(t){t.preventDefault(),e(".settings-links").removeClass("on"),e(".form-details").slideUp("fast"),1==e(this).next("div").is(":hidden")&&(e(this).addClass("on"),e(this).next().slideDown("normal"));var i=e('input[name="form_id"]').val(),o=this.hash.replace(/#/g,"");e.post(ajaxurl,{action:"visual_form_builder_form_settings",form:i,accordion:o,page:pagenow})}));var i=!1;if(e("#vfb-form-builder-management input, #vfb-form-builder-management select, #vfb-form-builder-management textarea").change((function(){i=!0})),window.onbeforeunload=function(){if(i)return"The changes you made will be lost if you navigate away from this page."},e(document).on("submit","#visual-form-builder-update",(function(){window.onbeforeunload=null})),e(".columns-2 #side-sortables").length>0){var o=e("#vfb_form_items_meta_box"),n=o.width(),a=o.offset(),s=o.nextAll(),r=!1;e(window).on("scroll",(function(){e(window).scrollTop()>a.top?(o.stop().css({top:55,position:"fixed","z-index":"1",width:n}),s.is(":visible")&&(r=!0,s.stop().css({opacity:.1}))):(o.stop().css({top:0,position:"relative"}),r&&s.stop().css({opacity:1}))}))}var l=e(".form-success-type:checked").val();e("#form-success-message-"+l).show(),e(".form-success-type").change((function(){switch(e(this).val()){case"text":e("#form-success-message-text").show(),e("#form-success-message-page, #form-success-message-redirect").hide();break;case"page":e("#form-success-message-page").show(),e("#form-success-message-text, #form-success-message-redirect").hide();break;case"redirect":e("#form-success-message-redirect").show(),e("#form-success-message-text, #form-success-message-page").hide()}})),e(".vfb-field-types").click((function(t){t.preventDefault(),e("#vfb-field-tabs li").removeClass("tabs"),e(this).parent().addClass("tabs"),e(".tabs-panel-active").removeClass("tabs-panel-active").addClass("tabs-panel-inactive");var i=this.hash;e(i).removeClass("tabs-panel-inactive").addClass("tabs-panel-active")})),e("#visual-form-builder-update").validate({rules:{"form_email_to[]":{email:!0},form_email_from:{email:!0},form_success_message_redirect:{url:!0},form_notification_email_name:{required:function(t){return e("#form-notification-setting").is(":checked")}},form_notification_email_from:{required:function(t){return e("#form-notification-setting").is(":checked")},email:!0},form_notification_email:{required:function(t){return e("#form-notification-setting").is(":checked")}}},errorPlacement:function(e,t){e.insertAfter(t.parent())}}),e("#visual-form-builder-new-form").validate(),e("#form_email_from_name_override").change((function(){""==e("#form_email_from_name_override").val()?e("#form-email-sender-name").prop("readonly",!1):e("#form-email-sender-name").prop("readonly","readonly")})),e("#form_email_from_override").change((function(){""==e("#form_email_from_override").val()?e("#form-email-sender").prop("readonly",!1):e("#form-email-sender").prop("readonly","readonly")})),e("#notification-email").toggle(e("#form-notification-setting").prop("checked")),e("#form-notification-setting").change((function(){e(this).is(":checked")?(e("#notification-email").show(),e("#form-notification-email-name, #form-notification-email-from, #form-notification-email, #form-notification-subject, #form-notification-message, #form-notification-entry").prop("disabled",!1)):(e("#notification-email").hide(),e("#form-notification-email-name, #form-notification-email-from, #form-notification-email, #form-notification-subject, #form-notification-message, #form-notification-entry").prop("disabled","disabled"))})),e("#vfb-export-select-all").click((function(t){t.preventDefault(),e('#vfb-export-entries-fields input[type="checkbox"]').prop("checked",!0)})),e("#vfb-export-unselect-all").click((function(t){t.preventDefault(),e('#vfb-export-entries-fields input[type="checkbox"]').prop("checked",!1)})),e("#vfb-export-forms-list").change((function(){var t=e(this).val();e("#vfb-export-entries-fields").html("Loading..."),e.get(ajaxurl,{action:"vfb-export-fields",id:t,vfb_ajax_nonce:vfb_settings.vfb_ajax_nonce}).done((function(t){e("#vfb-export-entries-fields").html(t)})).fail((function(t){e("#vfb-export-entries-fields").html("Error loading entry fields.")}))}))})),function(e){e(document).ready((function(){e(".vfb-accordion-container").on("click keydown",".vfb-accordion-section-title",(function(t){"keydown"===t.type&&13!==t.which||(t.preventDefault(),function(e){var t=e.closest(".vfb-accordion-section"),i=t.closest(".vfb-accordion-container").find(".open"),o=t.find(".vfb-accordion-section-content");if(t.hasClass("cannot-expand"))return;t.hasClass("open")?(t.toggleClass("open"),o.toggle(!0).slideToggle(150)):(i.removeClass("open"),i.find(".vfb-accordion-section-content").show().slideUp(150),o.toggle(!1).slideToggle(150),t.toggleClass("open"))}(e(this)))}))}))}(jQuery);
  • visual-form-builder/trunk/admin/class-export.php

    r1820828 r2623700  
    55 */
    66class Visual_Form_Builder_Export {
    7     /**
    8      * delimiter
     7   
     8    /**
     9     * Default delimiter for CSV and Tab export
     10     *
     11     * Override using the vfb_csv_delimiter filter
     12     *
     13     * (default value: ',')
     14     *
     15     * @var string
     16     * @access protected
     17     */
     18    protected $delimiter = ',';
     19
     20    /**
     21     * default_cols
    922     *
    1023     * @var mixed
    1124     * @access public
    1225     */
    13     public $delimiter;
    14 
    15     /**
    16      * default_cols
    17      *
    18      * @var mixed
     26    public $default_cols;
     27
     28    /**
     29     * __construct function
     30     *
    1931     * @access public
    20      */
    21     public $default_cols;
    22 
    23     /**
    24      * [__construct description]
    25      */
    26     public function __construct(){
    27         global $wpdb;
    28 
     32     * @param mixed $id
     33     * @return void
     34     */
     35    public function __construct() {
    2936        // CSV delimiter
    3037        $this->delimiter = apply_filters( 'vfb_csv_delimiter', ',' );
     
    3239        // Setup our default columns
    3340        $this->default_cols = array(
    34             'entries_id'        => __( 'Entries ID' , 'visual-form-builder'),
    35             'date_submitted'    => __( 'Date Submitted' , 'visual-form-builder'),
    36             'ip_address'        => __( 'IP Address' , 'visual-form-builder'),
    37             'subject'           => __( 'Subject' , 'visual-form-builder'),
    38             'sender_name'       => __( 'Sender Name' , 'visual-form-builder'),
    39             'sender_email'      => __( 'Sender Email' , 'visual-form-builder'),
    40             'emails_to'         => __( 'Emailed To' , 'visual-form-builder'),
     41            'entries_id'         => __( 'Entries ID' , 'visual-form-builder'),
     42            'date_submitted' => __( 'Date Submitted' , 'visual-form-builder'),
     43            'ip_address'         => __( 'IP Address' , 'visual-form-builder'),
     44            'subject'            => __( 'Subject' , 'visual-form-builder'),
     45            'sender_name'    => __( 'Sender Name' , 'visual-form-builder'),
     46            'sender_email'   => __( 'Sender Email' , 'visual-form-builder'),
     47            'emails_to'          => __( 'Emailed To' , 'visual-form-builder'),
    4148        );
    4249
    43         // AJAX for loading new entry checkboxes
    44         add_action( 'wp_ajax_visual_form_builder_export_load_options', array( $this, 'ajax_load_options' ) );
    45 
    46         // AJAX for getting entries count
    47         add_action( 'wp_ajax_visual_form_builder_export_entries_count', array( $this, 'ajax_entries_count' ) );
    48 
    49         $this->process_export_action();
    50     }
    51 
    52     /**
    53      * Display the export form
    54      *
    55      * @since 1.7
    56      *
    57      */
    58     public function display(){
    59         global $wpdb;
    60 
    61         // Query to get all forms
    62         $order = sanitize_sql_orderby( 'form_id ASC' );
    63         $where = apply_filters( 'vfb_pre_get_forms_export', '' );
    64         $forms = $wpdb->get_results( "SELECT form_id, form_key, form_title FROM " . VFB_WP_FORMS_TABLE_NAME . " WHERE 1=1 $where ORDER BY $order" );
    65 
    66         if ( !$forms ) {
    67             echo sprintf(
    68                 '<div class="vfb-form-alpha-list"><h3 id="vfb-no-forms">You currently do not have any forms.  Click on the <a href="%1$s">New Form</a> button to get started.</h3></div>',
    69                 esc_url( admin_url( 'admin.php?page=vfb-add-new' ) )
    70             );
    71 
     50        add_action( 'admin_init', array( $this, 'export_action' ) );
     51        add_action( 'wp_ajax_vfb-export-fields', array( $this, 'load_fields' ) );
     52    }
     53
     54    /**
     55     * display function.
     56     *
     57     * @access public
     58     * @return void
     59     */
     60    public function display() {
     61        $forms = $this->get_all_forms();
     62        ?>
     63        <div class="wrap">
     64            <h2><?php _e( 'Export', 'visual-form-builder' ); ?></h2>
     65            <form method="post" id="vfbp-export" action="">
     66                <input name="_vfb_action" type="hidden" value="export" />
     67                <?php
     68                    wp_nonce_field( 'vfb_export' );
     69                ?>
     70
     71                <p><?php _e( 'Backup and save some or all of your Visual Form Builder data.', 'visual-form-builder' ); ?></p>
     72                <p><?php _e( 'Once you have saved the file, you will be able to import Visual Form Builder Pro data from this site into another site.', 'visual-form-builder' ); ?></p>
     73                <h3><?php _e( 'Choose what to export', 'visual-form-builder' ); ?></h3>
     74
     75                <p>
     76                    <label for="content-forms">
     77                        <input type="radio" id="content-forms" name="settings[content]" value="forms" disabled="disabled" /> <?php _e( 'Forms', 'visual-form-builder' ); ?>
     78                    </label>
     79                </p>
     80                <p class="description"><?php _e( 'This will export a single form with all fields and settings for that form.', 'visual-form-builder' ); ?><br><strong>*<?php _e( 'Only available in VFB Pro', 'visual-form-builder' ); ?>*</strong></p>
     81
     82                <p>
     83                    <label for="content-entries">
     84                        <input type="radio" id="content-entries" name="settings[content]" value="entries" checked="checked" /> <?php _e( 'Entries', 'visual-form-builder' ); ?>
     85                    </label>
     86                </p>
     87                <p class="description"><?php _e( 'This will export entries in either .csv, .txt, or .xls and cannot be used with the Import.', 'visual-form-builder' ); ?></p>
     88
     89                <h3><?php _e( 'Select a form', 'vfb-pro' ); ?></h3>
     90            <select name="settings[form-id]" id="vfb-export-forms-list">
     91                    <?php
     92                        $first_form    = '';
     93                        $entries_count = 0;
     94
     95                        if ( is_array( $forms ) && !empty( $forms ) ) {
     96                            $first_form = $forms[0];
     97
     98                            foreach ( $forms as $form ) {
     99                                echo sprintf(
     100                                    '<option value="%1$d">%1$d - %2$s</option>',
     101                                    $form['form_id'],
     102                                    $form['form_title']
     103                                );
     104                            }
     105                        }
     106                    ?>
     107                    </select>
     108               
     109                <div class="vfb-export-entries-options">
     110                    <h3><?php _e( 'Customize your export', 'visual-form-builder' ); ?></h3>
     111
     112                    <p>
     113                        <label class="vfb-export-label" for="format"><?php _e( 'Format:', 'visual-form-builder' ); ?></label>
     114                    <select name="settings[format]">
     115                        <option value="csv" selected="selected"><?php _e( 'Comma Separated (.csv)', 'visual-form-builder' ); ?></option>
     116                        <option value="txt" disabled="disabled"><?php _e( 'Tab Delimited (.txt)', 'visual-form-builder' ); ?></option>
     117                        <option value="xls" disabled="disabled"><?php _e( 'Excel (.xls)', 'visual-form-builder' ); ?></option>
     118                    </select>
     119                </p>
     120
     121                    <p>
     122                    <label class="vfb-export-label" for="start-date"><?php _e( 'Date Range:', 'visual-form-builder' ); ?></label>
     123                        <select name="settings[start-date]">
     124                            <option value="0">Start Date</option>
     125                            <?php $this->months_dropdown(); ?>
     126                        </select>
     127                        <select name="settings[end-date]">
     128                            <option value="0">End Date</option>
     129                            <?php $this->months_dropdown(); ?>
     130                        </select>
     131                    </p>
     132
     133                    <label class="vfb-export-label"><?php _e( 'Fields:', 'visual-form-builder' ); ?></label>
     134
     135                    <p>
     136                    <a id="vfb-export-select-all" href="#"><?php _e( 'Select All', 'visual-form-builder' ); ?></a>
     137                    <a id="vfb-export-unselect-all" href="#"><?php _e( 'Unselect All', 'visual-form-builder' ); ?></a>
     138                </p>
     139
     140                    <div id="vfb-export-entries-fields">
     141                    <?php $this->fields_list( $first_form['form_id'] ); ?>
     142                </div>
     143                </div>
     144
     145                <?php
     146                    submit_button(
     147                        __( 'Download Export File', 'visual-form-builder' ),
     148                        'primary',
     149                        '' // leave blank so "name" attribute will not be added
     150                    );
     151                ?>
     152            </form>
     153        </div>
     154        <?php
     155    }
     156
     157    /**
     158     * Determine which export function to execute based on selected options
     159     *
     160     * @access public
     161     * @return void
     162     */
     163    public function export_action() {
     164
     165        if ( !isset( $_POST['_vfb_action'] ) || !isset( $_GET['page'] ) )
    72166            return;
    73         }
    74 
    75         $entries_count = $this->count_entries( $forms[0]->form_id );
    76 
    77         // Return nothing if no entries found
    78         if ( !$entries_count ) {
    79             $no_entries = __( 'No entries to pull field names from.', 'visual-form-builder' );
    80         }
    81         else {
    82             $limit = $entries_count > 1000 ? 1000 : $entries_count;
    83 
    84             // Safe to get entries now
    85             $entries = $wpdb->get_results( $wpdb->prepare( "SELECT data FROM " . VFB_WP_ENTRIES_TABLE_NAME . " WHERE form_id = %d AND entry_approved = 1 LIMIT %d", $forms[0]->form_id, $limit ), ARRAY_A );
    86 
    87             // Get columns
    88             $columns = $this->get_cols( $entries );
    89 
    90             // Get JSON data
    91             $data = json_decode( $columns, true );
    92         }
    93         ?>
    94         <form method="post" id="vfb-export">
    95             <p><?php _e( 'Backup and save some or all of your Visual Form Builder data.', 'visual-form-builder' ); ?></p>
    96             <p><?php _e( 'Once you have saved the file, you will be able to import Visual Form Builder Pro data from this site into another site.', 'visual-form-builder' ); ?></p>
    97             <h3><?php _e( 'Choose what to export', 'visual-form-builder' ); ?></h3>
    98 
    99             <p><label><input type="radio" name="vfb-content" value="forms" disabled="disabled" /> <?php _e( 'Forms', 'visual-form-builder' ); ?></label></p>
    100             <p class="description"><?php _e( 'This will contain all of your forms, fields, and email design settings', 'visual-form-builder' ); ?>.<br><strong>*<?php _e( 'Only available in Visual Form Builder Pro', 'visual-form-builder' ); ?>*</strong></p>
    101 
    102             <p><label><input type="radio" name="vfb-content" value="entries" checked="checked" /> <?php _e( 'Entries', 'visual-form-builder' ); ?></label></p>
    103 
    104             <ul id="entries-filters" class="vfb-export-filters">
    105                 <li><p class="description"><?php _e( 'This will export entries in either a .csv, .txt, or .xls and cannot be used with the Import.  If you need to import entries on another site, please use the All data option above.', 'visual-form-builder' ); ?></p></li>
    106                 <!-- Format -->
    107                 <li>
    108                     <label class="vfb-export-label" for="format"><?php _e( 'Format', 'visual-form-builder' ); ?>:</label>
    109                     <select name="format">
    110                         <option value="csv" selected="selected"><?php _e( 'Comma Separated (.csv)', 'visual-form-builder' ); ?></option>
    111                         <option value="txt" disabled="disabled"><?php _e( 'Tab Delimited (.txt) - Pro only', 'visual-form-builder' ); ?></option>
    112                         <option value="xls" disabled="disabled"><?php _e( 'Excel (.xls) - Pro only', 'visual-form-builder' ); ?></option>
    113                     </select>
    114                 </li>
    115                 <!-- Forms -->
    116                 <li>
    117                     <label class="vfb-export-label" for="form_id"><?php _e( 'Form', 'visual-form-builder' ); ?>:</label>
    118                     <select id="vfb-export-entries-forms" name="entries_form_id">
    119 <?php
    120                         foreach ( $forms as $form ) {
    121                             echo sprintf(
    122                                 '<option value="%1$d" id="%2$s">%1$d - %3$s</option>',
    123                                 $form->form_id,
    124                                 $form->form_key,
    125                                 stripslashes( $form->form_title )
    126                             );
    127                         }
    128 ?>
    129                     </select>
    130                 </li>
    131                 <!-- Date Range -->
    132                 <li>
    133                     <label class="vfb-export-label"><?php _e( 'Date Range', 'visual-form-builder' ); ?>:</label>
    134                     <select name="entries_start_date">
    135                         <option value="0">Start Date</option>
    136                         <?php $this->months_dropdown(); ?>
    137                     </select>
    138                     <select name="entries_end_date">
    139                         <option value="0">End Date</option>
    140                         <?php $this->months_dropdown(); ?>
    141                     </select>
    142                 </li>
    143                 <!-- Pages to Export -->
    144                 <?php $num_pages = ceil( $entries_count / 1000 ); ?>
    145                 <li id="vfb-export-entries-pages" style="display:<?php echo ( $entries_count > 1000 ) ? 'list-item' : 'none'; ?>">
    146                     <label class="vfb-export-label"><?php _e( 'Page to Export', 'visual-form-builder' ); ?>:</label>
    147                     <select id="vfb-export-entries-rows" name="entries_page">
    148 <?php
    149                     for ( $i = 1; $i <= $num_pages; $i++ ) {
    150                         echo sprintf( '<option value="%1$d">%1$s</option>', $i );
    151                     }
    152 ?>
    153                     </select>
    154                     <p class="description"><?php _e( 'A large number of entries have been detected for this form. Only 1000 entries can be exported at a time.', 'visual-form-builder' ); ?></p>
    155                 </li>
    156                 <!-- Fields -->
    157                 <li>
    158                     <label class="vfb-export-label"><?php _e( 'Fields', 'visual-form-builder' ); ?>:</label>
    159 
    160                     <p>
    161                         <a id="vfb-export-select-all" href="#"><?php _e( 'Select All', 'visual-form-builder' ); ?></a>
    162                         <a id="vfb-export-unselect-all" href="#"><?php _e( 'Unselect All', 'visual-form-builder' ); ?></a>
    163                     </p>
    164 
    165                     <div id="vfb-export-entries-fields">
    166                     <?php
    167                         if ( isset( $no_entries ) )
    168                             echo $no_entries;
    169                         else
    170                             echo $this->build_options( $data );
    171                      ?>
    172                     </div>
    173                 </li>
    174             </ul>
    175 
    176          <?php submit_button( __( 'Download Export File', 'visual-form-builder' ) ); ?>
    177         </form>
    178 <?php
    179     }
    180 
    181 
    182     /**
    183      * Build the entries export array
    184      *
    185      * @since 1.7
    186      *
    187      * @param array $args Filters defining what should be included in the export
    188      */
    189     public function export_entries( $args = array() ) {
    190         global $wpdb;
    191 
    192         // Set inital fields as a string
    193         $initial_fields = implode( ',', $this->default_cols );
    194 
    195         $defaults = array(
    196             'content'       => 'entries',
    197             'format'        => 'csv',
    198             'form_id'       => 0,
    199             'start_date'    => false,
    200             'end_date'      => false,
    201             'page'          => 0,
    202             'fields'        => $initial_fields,
    203         );
    204 
    205         $args = wp_parse_args( $args, $defaults );
    206 
    207         $where = '';
    208 
    209         $limit = '0,1000';
    210 
    211         if ( 'entries' == $args['content'] ) {
    212             if ( 0 !== $args['form_id'] )
    213                 $where .= $wpdb->prepare( " AND form_id = %d", $args['form_id'] );
    214 
    215             if ( $args['start_date'] )
    216                 $where .= $wpdb->prepare( " AND date_submitted >= %s", date( 'Y-m-d', strtotime( $args['start_date'] ) ) );
    217 
    218             if ( $args['end_date'] )
    219                 $where .= $wpdb->prepare( " AND date_submitted < %s", date( 'Y-m-d', strtotime( '+1 month', strtotime( $args['end_date'] ) ) ) );
    220 
    221             if ( $args['page'] > 1 )
    222                 $limit = ( $args['page'] - 1 ) * 1000 . ',1000';
    223         }
    224 
    225         $form_id = ( 0 !== $args['form_id'] ) ? $args['form_id'] : null;
    226 
    227         $entries = $wpdb->get_results( "SELECT * FROM " . VFB_WP_ENTRIES_TABLE_NAME . " WHERE entry_approved = 1 $where ORDER BY entries_id ASC LIMIT $limit" );
    228         $form_key = $wpdb->get_var( $wpdb->prepare( "SELECT form_key, form_title FROM " . VFB_WP_FORMS_TABLE_NAME . " WHERE form_id = %d", $args['form_id'] ) );
    229         $form_title = $wpdb->get_var( null, 1 );
     167
     168        if ( 'export' !== $_POST['_vfb_action'] )
     169            return;
     170
     171        check_admin_referer( 'vfb_export' );
     172
     173        $data = array();
     174
     175        foreach ( $_POST['settings'] as $key => $val ) {
     176            $data[ $key ] = $val;
     177        }
     178
     179        $data       = stripslashes_deep( $data );
     180        $content    = isset( $data['content'] ) ? $data['content'] : 'forms';
     181        $form_id    = isset( $data['form-id'] ) ? $data['form-id'] : 0;
     182        $format     = isset( $data['format'] ) ? $data['format'] : 'csv';
     183        $start_date = isset( $data['start-date'] ) ? $data['start-date'] : '';
     184        $end_date   = isset( $data['end-date'] ) ? $data['end-date'] : '';
     185        $fields     = isset( $data['fields'] ) ? $data['fields'] : '';
     186
     187        if ( 0 == $form_id )
     188            return;
     189
     190        switch ( $content ) {
     191            case 'entries' :
     192                // If no fields selected, exit because there's nothing to do
     193                if ( empty( $fields ) )
     194                    return;
     195
     196                global $wpdb;
     197                $where = '';
     198
     199                if ( 0 !== $form_id )
     200                    $where .= $wpdb->prepare( " AND form_id = %d", $form_id );
     201
     202                if ( $start_date )
     203                    $where .= $wpdb->prepare( " AND date_submitted >= %s", date( 'Y-m-d', strtotime( $start_date ) ) );
     204
     205                if ( $end_date )
     206                    $where .= $wpdb->prepare( " AND date_submitted < %s", date( 'Y-m-d', strtotime( '+1 month', strtotime( $end_date ) ) ) );
     207               
     208                $title = $wpdb->get_var( null, 1 );
     209
     210                $settings['format'] = $format;
     211                $settings['fields'] = $fields;
     212                $settings['where']  = $where;
     213
     214                $this->export_entries( $settings, $title );
     215
     216                die(1);
     217
     218                break;
     219        }
     220    }
     221
     222    /**
     223     * [export_entries description]
     224     *
     225     * @param   [type] $data   [$data description]
     226     * @param   array  $title  [$title description]
     227     *
     228     * @return  [type]         [return description]
     229     */
     230    public function export_entries( $data = array(), $title = '' ) {
     231        if ( !is_array( $data ) || empty( $data ) )
     232            return;
     233
     234        $format = $data['format'];
    230235
    231236        $sitename = sanitize_key( get_bloginfo( 'name' ) );
    232237        if ( ! empty($sitename) ) $sitename .= '.';
    233         $filename = $sitename . 'vfb.' . "$form_key." . date( 'Y-m-d' ) . ".{$args['format']}";
    234 
    235         $content_type = 'text/csv';
     238        $filename = "{$sitename}vfb-export.{$title}." . date( 'Y-m-d-Hi' ) . ".{$format}";
     239
     240        // Set content type based on file format
     241        switch ( $format ) {
     242            case 'csv' :
     243                $content_type = 'text/csv';
     244                break;
     245        }
     246
     247        $upload_dir = wp_upload_dir();
     248        $file_path  = trailingslashit( $upload_dir['path'] ) . $filename;
    236249
    237250        header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
     
    242255        header( 'Pragma: public' );
    243256
     257        if ( in_array( $format, array( 'csv', 'txt' ) ) )
     258            $this->csv_tab( $data['fields'], $data['where'], $format, $file_path );
     259    }
     260
     261    /**
     262     * [csv_tab description]
     263     *
     264     * @param   [type]  $fields     [$fields description]
     265     * @param   [type]  $where      [$where description]
     266     * @param   [type]  $format     [$format description]
     267     * @param   [type]  $file_path  [$file_path description]
     268     *
     269     * @return  [type]              [return description]
     270     */
     271    public function csv_tab( $fields, $where, $format, $file_path ) {
     272        global $wpdb;
     273        $file = fopen( $file_path, 'w' );
     274
     275        $headers = $rows = array();
     276        $entries = $wpdb->get_results( "SELECT * FROM " . VFB_WP_ENTRIES_TABLE_NAME . " WHERE entry_approved = 1 $where ORDER BY entries_id ASC" );
     277
    244278        // Get columns
    245279        $columns = $this->get_cols( $entries );
    246280
    247281        // Get JSON data
    248         $data = json_decode( $columns, true );
    249 
    250         // Build array of fields to display
    251         $fields = !is_array( $args['fields'] ) ? array_map( 'trim', explode( ',', $args['fields'] ) ) : $args['fields'];
    252 
    253         // Strip slashes from header values
    254         $fields = array_map( 'stripslashes', $fields );
    255 
    256         // Build CSV
    257         $this->csv( $data, $fields );
     282        $json = json_decode( $columns, true );
     283
     284        $rows = $fields_clean = $fields_header = array();
     285
     286        // Decode special characters
     287        foreach ( $fields as $field ) {
     288            // Strip unique ID for a clean header
     289            $search = preg_replace( '/{{(\d+)}}/', '', $field );
     290            $fields_header[] = wp_specialchars_decode( $search, ENT_QUOTES );
     291
     292            // Field with unique ID to use as matching data
     293            $fields_clean[] = wp_specialchars_decode( $field, ENT_QUOTES );
     294        }
     295
     296        // Build headers
     297        fputcsv( $file, $fields_header, $this->delimiter );
     298
     299        // Build table rows and cells
     300        foreach ( $json as $row ) {
     301            foreach ( $fields_clean as $label ) {
     302                $label = wp_specialchars_decode( $label );
     303                $rows[ $label ] =  ( isset( $row[ $label ] ) && in_array( $label, $fields_clean ) ) ? esc_html( $row[ $label ] ) : '';
     304            }
     305
     306            fputcsv( $file, $rows, $this->delimiter );
     307        }
     308
     309        // Close the file
     310        fclose( $file );
     311
     312        // Reads file in uploads folder and writes to output buffer
     313        readfile( $file_path );
     314
     315        // Delete export file
     316        wp_delete_file( $file_path );
     317
     318        exit();
     319    }
     320
     321    /**
     322     * [fields_list description]
     323     *
     324     * @param   [type]  $form_id  [$form_id description]
     325     *
     326     * @return  [type]            [return description]
     327     */
     328    public function fields_list( $form_id ) {
     329        $entries = $this->get_entries( $form_id );
     330        $entries_count = $this->get_entries_count( $form_id );
     331
     332        if ( 0 == $entries_count )
     333            return _e( 'No entries.', 'visual-form-builder' );
     334       
     335        if ( is_array( $entries ) && !empty( $entries ) ) {
     336            $columns = $this->get_cols( $entries );
     337            $data = json_decode( $columns, true );
     338
     339            $output = '';
     340
     341            $array = array();
     342            foreach ( $data as $row ) {
     343                $array = array_merge( $row, $array );
     344            }
     345
     346            $array = array_keys( $array );
     347            $array = array_values( array_merge( $this->default_cols, $array ) );
     348            $array = array_map( 'stripslashes', $array );
     349
     350            foreach ( $array as $id => $value ) {
     351                $selected = in_array( $value, $this->default_cols ) ? ' checked="checked"' : '';
     352
     353                // Strip unique ID for a clean list
     354                $search = preg_replace( '/{{(\d+)}}/', '', $value );
     355
     356                ?>
     357                <label for="vfb-export-fields-val-<?php echo $id; ?>">
     358                    <input
     359                        name="settings[fields][<?php echo $id; ?>]"
     360                        class="vfb-export-fields-vals"
     361                        id="vfb-export-fields-val-<?php echo $id; ?>"
     362                        type="checkbox"
     363                        value="<?php echo esc_attr( $value ); ?>"
     364                        <?php echo $selected; ?>
     365                    />
     366                    <?php echo esc_html( $search ); ?>
     367                </label><br>
     368                <?php
     369            }
     370
     371            return $output;
     372        }
     373    }
     374
     375    /**
     376     * [get_entries description]
     377     *
     378     * @param   [type]  $form_id  [$form_id description]
     379     *
     380     * @return  [type]            [return description]
     381     */
     382    public function get_entries( $form_id ) {
     383        global $wpdb;
     384
     385        $entries = $wpdb->get_results( $wpdb->prepare( "SELECT data FROM " . VFB_WP_ENTRIES_TABLE_NAME . " WHERE form_id = %d AND entry_approved = 1", $form_id ), ARRAY_A );
     386        return $entries;
    258387    }
    259388
     
    332461
    333462                                        break;
    334                                 } //end $obj switch
    335                             } // end $fields loop
     463                                }
     464                            }
    336465                        }
    337466                    break;
    338                 } //end $key switch
    339             } // end $entry loop
     467                }
     468            }
    340469            $row++;
    341         } //end $entries loop
     470        }
    342471
    343472        return json_encode( $output );
     
    345474
    346475    /**
    347      * [count_entries description]
    348      * @param  [type] $form_id [description]
    349      * @return [type]          [description]
    350      */
    351     public function count_entries( $form_id ) {
     476     * AJAX function to load new fields list when a new form is selected
     477     *
     478     * @access public
     479     * @return void
     480     */
     481    public function load_fields() {
    352482        global $wpdb;
    353483
    354         $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM " . VFB_WP_ENTRIES_TABLE_NAME . " WHERE form_id = %d", $form_id ) );
    355 
    356         if ( !$count )
    357             return 0;
    358 
    359         return $count;
    360     }
    361 
    362     /**
    363      * [get_form_IDs description]
    364      * @param  [type] $form_id [description]
    365      * @return [type]          [description]
    366      */
    367     public function get_form_IDs( $form_id = null ) {
    368         global $wpdb;
    369 
    370         $where = '';
    371 
    372         if ( $form_id )
    373             $where .= $wpdb->prepare( " AND form_id = %d", $form_id );
    374 
    375         $form_ids = $wpdb->get_col( "SELECT DISTINCT form_id FROM " . VFB_WP_FORMS_TABLE_NAME . " WHERE 1=1 $where" );
    376 
    377         if ( !$form_ids )
     484        // Check AJAX nonce set via wp_localize_script
     485        check_ajax_referer( 'vfb_ajax', 'vfb_ajax_nonce' );
     486
     487        if ( isset( $_GET['action'] ) && 'vfb-export-fields' !== $_GET['action'] )
    378488            return;
    379489
    380         return $form_ids;
    381     }
    382 
    383     /**
    384      * [get_field_IDs description]
    385      * @param  [type] $form_id [description]
    386      * @return [type]          [description]
    387      */
    388     public function get_field_IDs( $form_id = null ) {
    389         global $wpdb;
    390 
    391         $where = '';
    392 
    393         if ( $form_id )
    394             $where .= $wpdb->prepare( " AND form_id = %d", $form_id );
    395 
    396         $field_ids = $wpdb->get_col( "SELECT DISTINCT field_id FROM " . VFB_WP_FIELDS_TABLE_NAME . " WHERE 1=1 $where" );
    397 
    398         if ( !$field_ids )
    399             return;
    400 
    401         return $field_ids;
    402     }
    403 
    404     /**
    405      * [get_entry_IDs description]
    406      * @param  [type] $form_id [description]
    407      * @return [type]          [description]
    408      */
    409     public function get_entry_IDs( $form_id = null ) {
    410         global $wpdb;
    411 
    412         $where = '';
    413 
    414         if ( $form_id ) {
    415             $where .= $wpdb->prepare( " AND form_id = %d", $form_id );
    416 
    417             $count = $this->count_entries( $form_id );
    418             $where .= " LIMIT $count";
    419         }
    420 
    421         $entry_ids = $wpdb->get_col( "SELECT DISTINCT entries_id FROM " . VFB_WP_ENTRIES_TABLE_NAME . " WHERE entry_approved = 1 $where" );
    422 
    423         if ( !$entry_ids )
    424             return;
    425 
    426         return $entry_ids;
    427     }
    428 
    429     /**
    430      * Return the entries data formatted for CSV
    431      *
    432      * @since 1.7
    433      *
    434      * @param array $data The multidimensional array of entries data
    435      * @param array $fields The selected fields to export
    436      */
    437     public function csv( $data, $fields ) {
    438         // Open file with PHP wrapper
    439         $fh = @fopen( 'php://output', 'w' );
    440 
    441         $rows = $fields_clean = $fields_header = array();
    442 
    443         // Decode special characters
    444         foreach ( $fields as $field ) {
    445             // Strip unique ID for a clean header
    446             $search = preg_replace( '/{{(\d+)}}/', '', $field );
    447             $fields_header[] = wp_specialchars_decode( $search, ENT_QUOTES );
    448 
    449             // Field with unique ID to use as matching data
    450             $fields_clean[] = wp_specialchars_decode( $field, ENT_QUOTES );
    451         }
    452 
    453         // Build headers
    454         fputcsv( $fh, $fields_header, $this->delimiter );
    455 
    456         // Build table rows and cells
    457         foreach ( $data as $row ) {
    458 
    459             foreach ( $fields_clean as $label ) {
    460                 $label = wp_specialchars_decode( $label );
    461                 $rows[ $label ] =  ( isset( $row[ $label ] ) && in_array( $label, $fields_clean ) ) ? $row[ $label ] : '';
    462             }
    463 
    464             fputcsv( $fh, $rows, $this->delimiter );
    465         }
    466 
    467         // Close the file
    468         fclose( $fh );
    469 
    470         exit();
    471     }
    472 
    473     /**
    474      * Build the checkboxes when changing forms
    475      *
    476      * @since 2.6.8
    477      *
    478      * @return string Either no entries or the entry headers
    479      */
    480     public function ajax_load_options() {
    481         global $wpdb;
    482 
    483         if ( !isset( $_GET['action'] ) )
    484             return;
    485 
    486         if ( $_GET['action'] !== 'visual_form_builder_export_load_options' )
    487             return;
    488 
    489490        $form_id = absint( $_GET['id'] );
    490491
    491         // Safe to get entries now
    492         $entry_ids = $this->get_entry_IDs( $form_id );
    493 
    494         // Return nothing if no entries found
    495         if ( !$entry_ids ) {
    496             echo __( 'No entries to pull field names from.', 'visual-form-builder' );
    497             wp_die();
    498         }
    499 
    500         $offset = '';
    501         $limit = 1000;
    502 
    503         if ( isset( $_GET['count'] ) ) {
    504             $limit = ( $_GET['count'] < 1000 ) ? absint( $_GET['count'] ) : 1000;
    505         }
    506         elseif ( isset( $_GET['offset'] ) ) {
    507             // Reset offset/page to a zero index
    508             $offset = absint( $_GET['offset'] ) - 1;
    509 
    510             // Calculate the offset
    511             $offset_num = $offset * 1000;
    512 
    513             // If page is 2 or greater, set the offset (page 2 is equal to offset 1 because of zero index)
    514             $offset = $offset >= 1 ? "OFFSET $offset_num" : '';
    515         }
    516 
    517         $entries = $wpdb->get_results( "SELECT data FROM " . VFB_WP_ENTRIES_TABLE_NAME . " WHERE form_id = $form_id AND entry_approved = 1 LIMIT $limit $offset", ARRAY_A );
    518 
    519         // Get columns
    520         $columns = $this->get_cols( $entries );
    521 
    522         // Get JSON data
    523         $data = json_decode( $columns, true );
    524 
    525         echo $this->build_options( $data );
    526 
    527         wp_die();
    528     }
    529 
    530     /**
    531      * [ajax_entries_count description]
    532      * @return [type] [description]
    533      */
    534     public function ajax_entries_count() {
    535         global $wpdb;
    536 
    537         if ( !isset( $_GET['action'] ) )
    538             return;
    539 
    540         if ( $_GET['action'] !== 'visual_form_builder_export_entries_count' )
    541             return;
    542 
    543         $form_id = absint( $_GET['id'] );
    544 
    545         echo $this->count_entries( $form_id );
    546 
    547         wp_die();
    548     }
    549 
    550     /**
    551      * [build_options description]
    552      * @param  [type] $data [description]
    553      * @return [type]       [description]
    554      */
    555     public function build_options( $data ) {
    556         $output = '';
    557 
    558         $array = array();
    559         foreach ( $data as $row ) {
    560             $array = array_merge( $row, $array );
    561         }
    562 
    563         $array = array_keys( $array );
    564         $array = array_values( array_merge( $this->default_cols, $array ) );
    565         $array = array_map( 'stripslashes', $array );
    566 
    567         foreach ( $array as $k => $v ) {
    568             $selected = ( in_array( $v, $this->default_cols ) ) ? ' checked="checked"' : '';
    569 
    570             // Strip unique ID for a clean list
    571             $search = preg_replace( '/{{(\d+)}}/', '', $v );
    572 
    573             $output .= sprintf( '<label for="vfb-display-entries-val-%1$d"><input name="entries_columns[]" class="vfb-display-entries-vals" id="vfb-display-entries-val-%1$d" type="checkbox" value="%4$s" %3$s> %2$s</label><br>', $k, $search, $selected, esc_attr( $v ) );
    574         }
    575 
    576         return $output;
    577     }
    578 
    579     /**
    580      * Return the selected export type
    581      *
    582      * @since 1.7
    583      *
    584      * @return string|bool The type of export
    585      */
    586     public function export_action() {
    587         if ( isset( $_POST['vfb-content'] ) )
    588             return $_POST['vfb-content'];
    589 
    590         return false;
    591     }
    592 
    593     /**
    594      * Determine which export process to run
    595      *
    596      * @since 1.7
    597      *
    598      */
    599     public function process_export_action() {
    600         $args = array();
    601 
    602         if ( !isset( $_POST['vfb-content'] ) || 'entries' == $_POST['vfb-content'] ) {
    603             $args['content'] = 'entries';
    604 
    605             $args['format'] = 'csv';
    606 
    607             if ( isset( $_POST['entries_form_id'] ) )
    608                 $args['form_id'] = (int) $_POST['entries_form_id'];
    609 
    610             if ( isset( $_POST['entries_start_date'] ) || isset( $_POST['entries_end_date'] ) ) {
    611                 $args['start_date'] = $_POST['entries_start_date'];
    612                 $args['end_date'] = $_POST['entries_end_date'];
    613             }
    614 
    615             if ( isset( $_POST['entries_columns'] ) )
    616                 $args['fields'] = array_map( 'esc_html',  $_POST['entries_columns'] );
    617 
    618             if ( isset( $_POST['entries_page'] ) )
    619                 $args['page'] = absint( $_POST['entries_page'] );
    620         }
    621 
    622         switch( $this->export_action() ) {
    623             case 'entries' :
    624                 $this->export_entries( $args );
    625                 die(1);
    626             break;
    627         }
     492        $this->fields_list( $form_id );
     493
     494        die(1);
    628495    }
    629496
     
    638505        $where = apply_filters( 'vfb_pre_get_entries', '' );
    639506
    640         $months = $wpdb->get_results( "
    641             SELECT DISTINCT YEAR( forms.date_submitted ) AS year, MONTH( forms.date_submitted ) AS month
    642             FROM " . VFB_WP_ENTRIES_TABLE_NAME . " AS forms
     507        $months = $wpdb->get_results(
     508            "SELECT DISTINCT YEAR( forms.date_submitted ) AS year, MONTH( forms.date_submitted ) AS month FROM " . VFB_WP_ENTRIES_TABLE_NAME . " AS forms
    643509            WHERE 1=1 $where
    644510            ORDER BY forms.date_submitted DESC
     
    665531        }
    666532    }
     533
     534    /**
     535     * [count_entries description]
     536     * @param  [type] $form_id [description]
     537     * @return [type]          [description]
     538     */
     539    public function get_entries_count( $form_id ) {
     540        global $wpdb;
     541
     542        $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM " . VFB_WP_ENTRIES_TABLE_NAME . " WHERE form_id = %d", $form_id ) );
     543
     544        if ( !$count )
     545            return 0;
     546
     547        return $count;
     548    }
     549
     550    /**
     551     * [get_all_forms description]
     552     *
     553     * @return  [type]  [return description]
     554     */
     555    public function get_all_forms() {
     556        global $wpdb;
     557
     558        // Query to get all forms
     559        $order = sanitize_sql_orderby( 'form_id ASC' );
     560        $where = apply_filters( 'vfb_pre_get_forms_export', '' );
     561        $forms = $wpdb->get_results( "SELECT form_id, form_key, form_title FROM " . VFB_WP_FORMS_TABLE_NAME . " WHERE 1=1 $where ORDER BY $order", ARRAY_A );
     562
     563        return $forms;
     564    }
    667565}
  • visual-form-builder/trunk/admin/class-load-css-js.php

    r2501188 r2623700  
    3434        wp_enqueue_script( 'postbox' );
    3535        wp_enqueue_script( 'jquery-form-validation', VFB_WP_PLUGIN_URL . 'admin/assets/js/jquery.validate.min.js', array( 'jquery' ), '1.9.0', true );
    36         wp_enqueue_script( 'vfb-admin', VFB_WP_PLUGIN_URL . 'admin/assets/js/vfb-admin.min.js', array( 'jquery', 'jquery-form-validation' ), '2021.03.22', true );
     36        wp_enqueue_script( 'vfb-admin', VFB_WP_PLUGIN_URL . 'admin/assets/js/vfb-admin.min.js', array( 'jquery', 'jquery-form-validation' ), '2021.11.02', true );
    3737        wp_enqueue_script( 'nested-sortable', VFB_WP_PLUGIN_URL . 'admin/assets/js/jquery.ui.nestedSortable.min.js', array( 'jquery', 'jquery-ui-sortable' ), '1.3.5', true );
     38
     39        wp_localize_script( 'vfb-admin', 'vfb_settings', array( 'vfb_ajax_nonce' => wp_create_nonce( 'vfb_ajax') ) );
    3840    }
    3941}
  • visual-form-builder/trunk/config.codekit3

    r2501188 r2623700  
    10231023        "oAP": "/public/assets/index.php",
    10241024        "oF": 0
    1025         },
    1026     "/public/assets/js/ckeditor/ckeditor.js": {
    1027         "bF": 0,
    1028         "ft": 64,
    1029         "ma": 0,
    1030         "mi": 1,
    1031         "oA": 0,
    1032         "oAP": "/public/assets/js/ckeditor/ckeditor.min.js",
    1033         "oF": 0,
    1034         "sC": 3,
    1035         "tS": 0
    1036         },
    1037     "/public/assets/js/ckeditor/config.js": {
    1038         "bF": 0,
    1039         "ft": 64,
    1040         "ma": 0,
    1041         "mi": 1,
    1042         "oA": 0,
    1043         "oAP": "/public/assets/js/ckeditor/config.min.js",
    1044         "oF": 0,
    1045         "sC": 3,
    1046         "tS": 0
    1047         },
    1048     "/public/assets/js/ckeditor/contents.css": {
    1049         "aP": 1,
    1050         "bl": 0,
    1051         "ft": 16,
    1052         "ma": 0,
    1053         "oA": 0,
    1054         "oAP": "/public/assets/js/ckeditor/contents-min.css",
    1055         "oF": 0,
    1056         "oS": 3
    1057         },
    1058     "/public/assets/js/ckeditor/index.php": {
    1059         "cB": 0,
    1060         "ft": 8192,
    1061         "hM": 0,
    1062         "oA": 0,
    1063         "oAP": "/public/assets/js/ckeditor/index.php",
    1064         "oF": 0
    1065         },
    1066     "/public/assets/js/ckeditor/lang/en.js": {
    1067         "bF": 0,
    1068         "ft": 64,
    1069         "ma": 0,
    1070         "mi": 1,
    1071         "oA": 0,
    1072         "oAP": "/public/assets/js/ckeditor/lang/en.min.js",
    1073         "oF": 0,
    1074         "sC": 3,
    1075         "tS": 0
    1076         },
    1077     "/public/assets/js/ckeditor/plugins/dialog/dialogDefinition.js": {
    1078         "bF": 0,
    1079         "ft": 64,
    1080         "ma": 0,
    1081         "mi": 1,
    1082         "oA": 0,
    1083         "oAP": "/public/assets/js/ckeditor/plugins/dialog/dialogDefinition.min.js",
    1084         "oF": 0,
    1085         "sC": 3,
    1086         "tS": 0
    1087         },
    1088     "/public/assets/js/ckeditor/plugins/icons.png": {
    1089         "ft": 32768,
    1090         "iS": 10452,
    1091         "oA": 0,
    1092         "oAP": "/public/assets/js/ckeditor/plugins/icons.png",
    1093         "oF": 0,
    1094         "oIPL": 0,
    1095         "opt": 0,
    1096         "oT": 1,
    1097         "q": 100
    1098         },
    1099     "/public/assets/js/ckeditor/plugins/link/dialogs/anchor.js": {
    1100         "bF": 0,
    1101         "ft": 64,
    1102         "ma": 0,
    1103         "mi": 1,
    1104         "oA": 0,
    1105         "oAP": "/public/assets/js/ckeditor/plugins/link/dialogs/anchor.min.js",
    1106         "oF": 0,
    1107         "sC": 3,
    1108         "tS": 0
    1109         },
    1110     "/public/assets/js/ckeditor/plugins/link/dialogs/link.js": {
    1111         "bF": 0,
    1112         "ft": 64,
    1113         "ma": 0,
    1114         "mi": 1,
    1115         "oA": 0,
    1116         "oAP": "/public/assets/js/ckeditor/plugins/link/dialogs/link.min.js",
    1117         "oF": 0,
    1118         "sC": 3,
    1119         "tS": 0
    1120         },
    1121     "/public/assets/js/ckeditor/plugins/link/images/anchor.png": {
    1122         "ft": 32768,
    1123         "iS": 566,
    1124         "oA": 0,
    1125         "oAP": "/public/assets/js/ckeditor/plugins/link/images/anchor.png",
    1126         "oF": 0,
    1127         "oIPL": 0,
    1128         "opt": 0,
    1129         "oT": 1,
    1130         "q": 100
    1131         },
    1132     "/public/assets/js/ckeditor/skins/moono/dialog.css": {
    1133         "aP": 1,
    1134         "bl": 0,
    1135         "ft": 16,
    1136         "ma": 0,
    1137         "oA": 0,
    1138         "oAP": "/public/assets/js/ckeditor/skins/moono/dialog-min.css",
    1139         "oF": 0,
    1140         "oS": 3
    1141         },
    1142     "/public/assets/js/ckeditor/skins/moono/dialog_ie.css": {
    1143         "aP": 1,
    1144         "bl": 0,
    1145         "ft": 16,
    1146         "ma": 0,
    1147         "oA": 0,
    1148         "oAP": "/public/assets/js/ckeditor/skins/moono/dialog_ie-min.css",
    1149         "oF": 0,
    1150         "oS": 3
    1151         },
    1152     "/public/assets/js/ckeditor/skins/moono/dialog_ie7.css": {
    1153         "aP": 1,
    1154         "bl": 0,
    1155         "ft": 16,
    1156         "ma": 0,
    1157         "oA": 0,
    1158         "oAP": "/public/assets/js/ckeditor/skins/moono/dialog_ie7-min.css",
    1159         "oF": 0,
    1160         "oS": 3
    1161         },
    1162     "/public/assets/js/ckeditor/skins/moono/dialog_ie8.css": {
    1163         "aP": 1,
    1164         "bl": 0,
    1165         "ft": 16,
    1166         "ma": 0,
    1167         "oA": 0,
    1168         "oAP": "/public/assets/js/ckeditor/skins/moono/dialog_ie8-min.css",
    1169         "oF": 0,
    1170         "oS": 3
    1171         },
    1172     "/public/assets/js/ckeditor/skins/moono/dialog_iequirks.css": {
    1173         "aP": 1,
    1174         "bl": 0,
    1175         "ft": 16,
    1176         "ma": 0,
    1177         "oA": 0,
    1178         "oAP": "/public/assets/js/ckeditor/skins/moono/dialog_iequirks-min.css",
    1179         "oF": 0,
    1180         "oS": 3
    1181         },
    1182     "/public/assets/js/ckeditor/skins/moono/dialog_opera.css": {
    1183         "aP": 1,
    1184         "bl": 0,
    1185         "ft": 16,
    1186         "ma": 0,
    1187         "oA": 0,
    1188         "oAP": "/public/assets/js/ckeditor/skins/moono/dialog_opera-min.css",
    1189         "oF": 0,
    1190         "oS": 3
    1191         },
    1192     "/public/assets/js/ckeditor/skins/moono/editor.css": {
    1193         "aP": 1,
    1194         "bl": 0,
    1195         "ft": 16,
    1196         "ma": 0,
    1197         "oA": 0,
    1198         "oAP": "/public/assets/js/ckeditor/skins/moono/editor-min.css",
    1199         "oF": 0,
    1200         "oS": 3
    1201         },
    1202     "/public/assets/js/ckeditor/skins/moono/editor_gecko.css": {
    1203         "aP": 1,
    1204         "bl": 0,
    1205         "ft": 16,
    1206         "ma": 0,
    1207         "oA": 0,
    1208         "oAP": "/public/assets/js/ckeditor/skins/moono/editor_gecko-min.css",
    1209         "oF": 0,
    1210         "oS": 3
    1211         },
    1212     "/public/assets/js/ckeditor/skins/moono/editor_ie.css": {
    1213         "aP": 1,
    1214         "bl": 0,
    1215         "ft": 16,
    1216         "ma": 0,
    1217         "oA": 0,
    1218         "oAP": "/public/assets/js/ckeditor/skins/moono/editor_ie-min.css",
    1219         "oF": 0,
    1220         "oS": 3
    1221         },
    1222     "/public/assets/js/ckeditor/skins/moono/editor_ie7.css": {
    1223         "aP": 1,
    1224         "bl": 0,
    1225         "ft": 16,
    1226         "ma": 0,
    1227         "oA": 0,
    1228         "oAP": "/public/assets/js/ckeditor/skins/moono/editor_ie7-min.css",
    1229         "oF": 0,
    1230         "oS": 3
    1231         },
    1232     "/public/assets/js/ckeditor/skins/moono/editor_ie8.css": {
    1233         "aP": 1,
    1234         "bl": 0,
    1235         "ft": 16,
    1236         "ma": 0,
    1237         "oA": 0,
    1238         "oAP": "/public/assets/js/ckeditor/skins/moono/editor_ie8-min.css",
    1239         "oF": 0,
    1240         "oS": 3
    1241         },
    1242     "/public/assets/js/ckeditor/skins/moono/editor_iequirks.css": {
    1243         "aP": 1,
    1244         "bl": 0,
    1245         "ft": 16,
    1246         "ma": 0,
    1247         "oA": 0,
    1248         "oAP": "/public/assets/js/ckeditor/skins/moono/editor_iequirks-min.css",
    1249         "oF": 0,
    1250         "oS": 3
    1251         },
    1252     "/public/assets/js/ckeditor/skins/moono/icons.png": {
    1253         "ft": 32768,
    1254         "iS": 20881,
    1255         "oA": 0,
    1256         "oAP": "/public/assets/js/ckeditor/skins/moono/icons.png",
    1257         "oF": 0,
    1258         "oIPL": 0,
    1259         "opt": 0,
    1260         "oT": 1,
    1261         "q": 100
    1262         },
    1263     "/public/assets/js/ckeditor/skins/moono/images/arrow.png": {
    1264         "ft": 32768,
    1265         "iS": 261,
    1266         "oA": 0,
    1267         "oAP": "/public/assets/js/ckeditor/skins/moono/images/arrow.png",
    1268         "oF": 0,
    1269         "oIPL": 0,
    1270         "opt": 0,
    1271         "oT": 1,
    1272         "q": 100
    1273         },
    1274     "/public/assets/js/ckeditor/skins/moono/images/close.png": {
    1275         "ft": 32768,
    1276         "iS": 389,
    1277         "oA": 0,
    1278         "oAP": "/public/assets/js/ckeditor/skins/moono/images/close.png",
    1279         "oF": 0,
    1280         "oIPL": 0,
    1281         "opt": 0,
    1282         "oT": 1,
    1283         "q": 100
    1284         },
    1285     "/public/assets/js/ckeditor/skins/moono/images/mini.png": {
    1286         "ft": 32768,
    1287         "iS": 818,
    1288         "oA": 0,
    1289         "oAP": "/public/assets/js/ckeditor/skins/moono/images/mini.png",
    1290         "oF": 0,
    1291         "oIPL": 0,
    1292         "opt": 0,
    1293         "oT": 1,
    1294         "q": 100
    1295         },
    1296     "/public/assets/js/ckeditor/skins/moono/readme.md": {
    1297         "cB": 0,
    1298         "cS": 0,
    1299         "eF": 1,
    1300         "eL": 1,
    1301         "ema": 1,
    1302         "eSQ": 1,
    1303         "ft": 4096,
    1304         "hM": 0,
    1305         "oA": 0,
    1306         "oAP": "/public/assets/js/ckeditor/skins/moono/readme.html",
    1307         "oF": 0,
    1308         "oFM": 0,
    1309         "oS": 0,
    1310         "pHT": 0,
    1311         "pME": 1,
    1312         "rFN": 0,
    1313         "uCM": 0
    13141025        },
    13151026    "/public/assets/js/i18n/datepicker/datepicker-cs_CS.js": {
Note: See TracChangeset for help on using the changeset viewer.