|
707 | 707 | return false;
|
708 | 708 | }
|
709 | 709 | };
|
| 710 | + /** function to show selected column count in export dialog |
| 711 | + * @param {object} dialog - dialog |
| 712 | + */ |
| 713 | + function show_selected_column_count(dialog) { |
710 | 714 |
|
| 715 | + var allSelected = dialog.find('.export-all-columns.fa-check-square'); |
| 716 | + |
| 717 | + |
| 718 | + var boxesCn = dialog.find('.columns-wrapper .checkbox-line'); |
| 719 | + if (boxesCn) { |
| 720 | + boxesCn = boxesCn.length; |
| 721 | + } |
| 722 | + var selectedCn = dialog.find('.columns-wrapper .fa-check-square'); |
| 723 | + if (selectedCn) { |
| 724 | + selectedCn = selectedCn.length; |
| 725 | + } |
| 726 | + if (allSelected.length === 0 && selectedCn !== boxesCn) { |
| 727 | + dialog.find(".export-columns-selector p:first").html(jQuery.i18n.map["export.columns-to-export"] + "<span>" + jQuery.i18n.prop("export.export-columns-selected-count", selectedCn, boxesCn) + "</span>"); |
| 728 | + } |
| 729 | + else { |
| 730 | + dialog.find(".export-columns-selector p:first span").text(""); |
| 731 | + } |
| 732 | + } |
711 | 733 | /**
|
712 | 734 | * Displays database export dialog
|
713 | 735 | * @param {number} count - total count of documents to export
|
714 | 736 | * @param {object} data - data for export query to use when constructing url
|
715 | 737 | * @param {boolean} asDialog - open it as dialog
|
716 | 738 | * @param {boolean} exportByAPI - export from api request, export from db when set to false
|
| 739 | + * @param {boolean} instance - optional. Reference to table to get correct colum names(only if there is need to select columns to export) There must be changes made in table settings to allow it. (table.addColumnExportSelector = true and each column must have columnsSelectorIndex value as field in db) |
717 | 740 | * @returns {object} jQuery object reference to dialog
|
718 | 741 | * @example
|
719 | 742 | * var dialog = CountlyHelpers.export(300000);
|
720 | 743 | * //later when done
|
721 | 744 | * CountlyHelpers.removeDialog(dialog);
|
722 | 745 | */
|
723 |
| - CountlyHelpers.export = function(count, data, asDialog, exportByAPI) { |
724 |
| - var hardLimit = countlyGlobal.config.export_limit; |
725 |
| - var pages = Math.ceil(count / hardLimit); |
| 746 | + CountlyHelpers.export = function(count, data, asDialog, exportByAPI, instance) { |
| 747 | + //var hardLimit = countlyGlobal.config.export_limit; |
| 748 | + //var pages = Math.ceil(count / hardLimit); |
726 | 749 | var dialog = $("#cly-export").clone();
|
727 | 750 | var type = "csv";
|
728 |
| - var page = 0; |
| 751 | + //var page = 0; |
| 752 | + var tableCols; |
| 753 | + |
729 | 754 | dialog.removeAttr("id");
|
730 |
| - dialog.find(".details").text(jQuery.i18n.prop("export.export-number", (count + "").replace(/(\d)(?=(\d{3})+$)/g, '$1 '), pages)); |
| 755 | + /*dialog.find(".details").text(jQuery.i18n.prop("export.export-number", (count + "").replace(/(\d)(?=(\d{3})+$)/g, '$1 '), pages)); |
731 | 756 | if (count <= hardLimit) {
|
732 | 757 | dialog.find(".cly-select").hide();
|
733 | 758 | }
|
|
737 | 762 | dialog.find(".select-items > div").append('<div data-value="' + i + '" class="segmentation-option item">' + ((i * hardLimit + 1) + "").replace(/(\d)(?=(\d{3})+$)/g, '$1 ') + ' - ' + (Math.min((i + 1) * hardLimit, count) + "").replace(/(\d)(?=(\d{3})+$)/g, '$1 ') + " " + jQuery.i18n.map["export.documents"] + '</div>');
|
738 | 763 | }
|
739 | 764 | dialog.find(".export-data").addClass("disabled");
|
| 765 | + }*/ |
| 766 | + |
| 767 | + var str = ""; |
| 768 | + if (instance && instance.addColumnExportSelector && instance.fnSettings) { |
| 769 | + tableCols = instance.fnSettings().aoColumns || []; |
| 770 | + } |
| 771 | + |
| 772 | + if (tableCols && Array.isArray(tableCols) && tableCols.length > 0) { |
| 773 | + var disabled = ""; //left in case want to add disabled column feature |
| 774 | + var myClass = ""; |
| 775 | + var myClass2 = ""; |
| 776 | + for (var colIndex = 0; colIndex < tableCols.length; colIndex++) { |
| 777 | + if (tableCols[colIndex].columnSelectorIndex) { |
| 778 | + var colName = tableCols[colIndex].columnSelectorIndex; |
| 779 | + myClass = 'fa-check-square'; |
| 780 | + myClass2 = ""; |
| 781 | + |
| 782 | + |
| 783 | + if (tableCols[colIndex].bVisible === true) { |
| 784 | + //selectedC++; |
| 785 | + } |
| 786 | + else { |
| 787 | + myClass = 'fa-square-o'; |
| 788 | + myClass2 = ' not-checked'; |
| 789 | + } |
| 790 | + str += "<div class='checkbox-line' data-selectorname='" + colName + "' data-index='" + colIndex + "' class='" + myClass2 + disabled + "'><div><a data-index='" + colName + "' class='fa check-green check-header " + myClass + disabled + " data-table-toggle-column'></a></div>" + tableCols[colIndex].sTitle + "</div>"; |
| 791 | + } |
| 792 | + } |
| 793 | + dialog.find(".export-columns-selector .columns-wrapper").html(str); |
| 794 | + dialog.find(".export-columns-selector").css("display", "block"); |
| 795 | + |
| 796 | + |
| 797 | + dialog.find('.columns-wrapper').slimScroll({ |
| 798 | + height: '100%', |
| 799 | + start: 'top', |
| 800 | + wheelStep: 10, |
| 801 | + position: 'right', |
| 802 | + disableFadeOut: true |
| 803 | + }); |
| 804 | + |
| 805 | + $(".data-table-column-selector").on("click", function(e) { |
| 806 | + e.stopPropagation(); |
| 807 | + }); |
| 808 | + |
| 809 | + dialog.find(".export-columns-selector").on("click", ".checkbox-line", function() { |
| 810 | + var checkbox = $(this).find("a").first(); |
| 811 | + var isChecked = $(checkbox).hasClass("fa-check-square");//is now checked |
| 812 | + |
| 813 | + if (isChecked) { |
| 814 | + $(checkbox).addClass("fa-square-o"); |
| 815 | + $(checkbox).removeClass("fa-check-square"); |
| 816 | + if ($(checkbox).hasClass("export-all-columns")) { |
| 817 | + dialog.find(".export-columns-selector").removeClass("hide-column-selectors"); |
| 818 | + } |
| 819 | + } |
| 820 | + else { |
| 821 | + $(checkbox).removeClass("fa-square-o"); |
| 822 | + $(checkbox).addClass("fa-check-square"); |
| 823 | + if ($(checkbox).hasClass("export-all-columns")) { |
| 824 | + dialog.find(".export-columns-selector").addClass("hide-column-selectors"); |
| 825 | + } |
| 826 | + } |
| 827 | + show_selected_column_count(dialog); |
| 828 | + }); |
| 829 | + show_selected_column_count(dialog); |
| 830 | + } |
| 831 | + else { |
| 832 | + dialog.find(".export-columns-selector .columns-wrapper").html(""); |
| 833 | + dialog.find(".export-columns-selector").css("display", "none"); |
740 | 834 | }
|
| 835 | + |
741 | 836 | dialog.find(".button").click(function() {
|
742 | 837 | dialog.find(".button-selector .button").removeClass("selected");
|
743 | 838 | dialog.find(".button-selector .button").removeClass("active");
|
744 | 839 | $(this).addClass("selected");
|
745 | 840 | $(this).addClass("active");
|
746 | 841 | type = $(this).attr("id").replace("export-", "");
|
747 | 842 | });
|
748 |
| - dialog.find(".segmentation-option").on("click", function() { |
| 843 | + /*dialog.find(".segmentation-option").on("click", function() { |
749 | 844 | page = $(this).data("value");
|
750 | 845 | dialog.find(".export-data").removeClass("disabled");
|
751 |
| - }); |
| 846 | + });*/ |
752 | 847 | dialog.find(".export-data").click(function() {
|
753 | 848 | if ($(this).hasClass("disabled")) {
|
754 | 849 | return;
|
755 | 850 | }
|
756 | 851 | data.type = type;
|
757 |
| - if (page !== -1) { |
| 852 | + data.limit = ""; |
| 853 | + data.skip = 0; |
| 854 | + /*if (page !== -1) { |
758 | 855 | data.limit = hardLimit;
|
759 | 856 | data.skip = page * hardLimit;
|
760 | 857 | }
|
761 | 858 | else {
|
762 | 859 | data.limit = "";
|
763 | 860 | data.skip = 0;
|
| 861 | + }*/ |
| 862 | + |
| 863 | + delete data.projection; |
| 864 | + if (dialog.find(".export-columns-selector")) { |
| 865 | + if (dialog.find(".export-all-columns").hasClass("fa-check-square")) { |
| 866 | + //export all columns no need for projections |
| 867 | + } |
| 868 | + else { |
| 869 | + var projection = {}; |
| 870 | + var checked = dialog.find('.columns-wrapper .fa-check-square'); |
| 871 | + for (var kz = 0; kz < checked.length; kz++) { |
| 872 | + projection[$(checked[kz]).data("index")] = true; |
| 873 | + } |
| 874 | + |
| 875 | + if (instance && instance.fixProjectionParams) { |
| 876 | + projection = instance.fixProjectionParams(projection); |
| 877 | + } |
| 878 | + data.projection = JSON.stringify(projection); |
| 879 | + } |
764 | 880 | }
|
765 | 881 |
|
| 882 | + |
766 | 883 | var url = countlyCommon.API_URL + (exportByAPI ? "/o/export/request" : "/o/export/db");
|
767 | 884 | var form = $('<form method="POST" action="' + url + '">');
|
768 | 885 | $.each(data, function(k, v) {
|
|
0 commit comments