Viewing File: /usr/local/cpanel/base/sharedjs/fetch_mail_queue.js

if (typeof CPANEL == "undefined" || !CPANEL) {

    /**
     * The CPANEL global namespace object.  If CPANEL is already defined, the
     * existing CPANEL object will not be overwritten so that defined
     * namespaces are preserved.
     * @class CPANEL
     * @static
     */
    alert("The cjt has not been loaded, and must be loaded before this script: fetch_mail_queue.js");
}


( function() {

    var unixtimeToDate = function(sData) {
        return new Date( 1000 * sData );
    };
    var formatRecps = function(elCell, oRecord, col, oData) { // oData is now an array of receps
        elCell.innerHTML = oData
            .map(String.prototype.html_encode.call, String.prototype.html_encode)
            .join(" , <br /> ")
        ;
    };

    var _queued_row;
    var _frozen_row;

    var makeActionLinks = function(elCell, oRecord, tbl, oData) {
        var rowData = oRecord.getData();

        if ( rowData.frozen ) {
            var currentint = get_start_end_times();
            var opts = {
                unixstarttime: currentint[0] && (currentint[0].getTime() / 1000)
            };
            YAHOO.lang.augmentObject( opts, rowData );

            if ( !_frozen_row) {
                _frozen_row = DOM.get("frozen_row_template").text;
            }

            elCell.innerHTML = YAHOO.lang.substitute( _frozen_row, opts );
        } else {
            if ( !_queued_row) {
                _queued_row = DOM.get("queued_row_template").text;
            }

            elCell.innerHTML = YAHOO.lang.substitute( _queued_row, rowData );
        }
    };

    var toLocaleDate = function(el, rec, col, dat) {
        var date = new Date(dat);
        if (/invalid date/i.test(date)) {
            el.innerHTML = LOCALE.maketext("Invalid Date");
        } else {
            el.innerHTML = date.toCpLocaleString();
        }
    };
    var format_sender = function(elCell, oRecord, tbl, oData) {
        var trimmed = String(oData).trim();
        CPANEL.util.set_text_content( elCell, trimmed || "[" + LOCALE.maketext("System") + "]" );
    };
    var format_frozen = function(cell, rec, col, d) {
        CPANEL.util.set_text_content( cell, d ? LOCALE.maketext("Frozen") : LOCALE.maketext("Queued") );
    };

    var format_size = function(cell, rec, col, d) {
        cell.innerHTML = LOCALE.format_bytes(d);
    };

    // Column definitions
    var myColumnDefs = [
        { key: "check", label: "", width: "30", formatter: YAHOO.widget.DataTable.formatCheckbox },
        { key: "time", label: LOCALE.maketext("Time Received"), sortable: true, formatter: toLocaleDate },
        { key: "sender", label: LOCALE.maketext("Sender"), sortable: true, formatter: format_sender },
        { key: "msgid", label: LOCALE.maketext("Message ID"), sortable: true, formatter: "text" },
        { key: "recipients", formatter: formatRecps, label: LOCALE.maketext("Recipient(s)") },
        { key: "size", formatter: format_size, sortable: true, label: LOCALE.maketext("Size") },
        { key: "frozen", label: LOCALE.maketext("Status"), sortable: true, formatter: format_frozen },
        { key: "actions", label: LOCALE.maketext("Actions"), formatter: makeActionLinks }
    ];

    CPANEL.MailQueue = function(oConfigs) {
        for (var setting in oConfigs) {
            if (typeof this[setting] != "undefined") {
                this[setting] = oConfigs[setting];
            }
        }

        init_start_end_times( this.starttime );
    };

    CPANEL.MailQueue.prototype = {
        unixstarttime: null,

        unixendtime: null,

        starttime: "yesterday",

        statsfail: function(o) {
            for (var i = 0; i < o.argument.statlist.length; i++) {
                var statname = o.argument.statlist[i];
                document.getElementById("deliverystats_" + statname).innerHTML = LOCALE.maketext("The fetch returned no data.");
            }
        },

        loadUnixTimes: function() {
            var currentint = get_start_end_times();
            this.unixstarttime = currentint[0] && (currentint[0].getTime() / 1000);
            this.unixendtime = currentint[1] && (currentint[1].getTime() / 1000);
        },

        buildDeliveryReport: function() {
            var MailQueueObj = this;

            this.loadUnixTimes();

            // DataSource instance
            var myDataSource = new CPANEL.datasource.CPANEL_XHRDataSource( {
                func: "fetch_mail_queue",
                fields: [
                    { key: "frozen", parser: "number" },  // 1 or 0
                    { key: "time", parser: unixtimeToDate },
                    "sender",
                    "msgid",
                    { key: "size", parser: "number" },
                    "recipients"
                ]
            } );

            // Summary configuration
            var myConfigs = {
                initialLoad: false,
                generateRequest: function(state, dt) {
                    var req = CPANEL.datatable.get_api_data(state);
                    if (req.sort) {
                        if ( /^!?(?:size|time)$/.test(req.sort[0]) ) {
                            req.sort[0] = [ req.sort[0], "numeric" ];
                        }
                    }

                    if ( MailQueueObj.unixstarttime ) {
                        req.filter.push( [ "time", "gt", MailQueueObj.unixstarttime - 1 ] );
                    }
                    if ( MailQueueObj.unixendtime ) {
                        req.filter.push( [ "time", "lt", MailQueueObj.unixendtime + 1 ] );
                    }

                    var search = CPANEL.dom.get_data_from_form("search-fields");
                    if (search.freeform && search.mainkey && search.searchmatch) {
                        req.filter.push( [search.mainkey, search.searchmatch, search.freeform] );
                    }

                    var quick = DOM.get("quicksearch").value.trim();
                    if (quick) {
                        req.filter.push( ["*", "contains", quick] );
                    }

                    return { api_data: req };
                },
                dynamicData: true, // Enables dynamic server-driven data
                sortedBy: CPANEL.nvdata.initial && CPANEL.nvdata.initial.table_sort || { key: "time", dir: YAHOO.widget.DataTable.CLASS_DESC },
                paginator: THE_PAGINATOR
            };

            // Summary instance
            var mySummary = new YAHOO.widget.DataTable("mailqueuetbl", myColumnDefs, myDataSource, myConfigs);
            mySummary.subscribe("checkboxClickEvent", function(oArgs) {
                var elCheckbox = oArgs.target;
                var oRecord = this.getRecord(elCheckbox);
                oRecord.setData("check", elCheckbox.checked);
            });

            // Update totalRecords on the fly with value from server
            mySummary.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
                var totalRecords = parseInt(oResponse.meta.total_records);
                oPayload.totalRecords = totalRecords;
                return oPayload;
            };

            return {
                ds: myDataSource,
                dt: mySummary
            };
        },

        updatedata: function() {
            if ( !this.deliveryreport ) {
                this.deliveryreport = this.buildDeliveryReport();
            }

            // Sends a request to the DataSource for more data
            var oCallback = {
                success: this.deliveryreport.dt.onDataReturnReplaceRows,
                failure: window.handle_ajax_error,
                scope: this.deliveryreport.dt,
                argument: this.deliveryreport.dt.getState()
            };

            this.deliveryreport.dt._oRecordSet.reset();
            this.deliveryreport.dt.render();

            this.loadUnixTimes();

            var request = this.deliveryreport.dt.get("generateRequest")( this.deliveryreport.dt.getState(), this.deliveryreport.dt );
            this.deliveryreport.ds.sendRequest(request, oCallback);
        },

        deliverSelected: function() {
            this.multiAction("../scripts11/deliver_messages_mail_queue", 1);
        },
        deleteSelected: function() {
            this.multiAction("../scripts11/remove_messages_mail_queue", 1);
        },
        deleteAll: function() {
            if (confirm(LOCALE.maketext("Are you sure you wish to purge the entire mail queue?"))) {
                this.multiAction("../scripts11/purge_mail_queue", 0);
            }
        },
        deliverAll: function() {
            if (confirm(LOCALE.maketext("Are you sure you wish to attempt to deliver the entire mail queue?"))) {
                this.multiAction("../scripts11/deliver_mail_queue", 0);
            }
        },
        multiAction: function(multiAction, need_msg_ids) {
            var records = this.deliveryreport.dt.getRecordSet().getRecords();
            var msgids = [];
            if (need_msg_ids) {
                for (i = 0; i < records.length; i++) {
                    if (!records[i]) {
                        continue;
                    }
                    var oData = records[i].getData();
                    if (oData.check) {
                        msgids.push(oData.msgid);
                    }
                }
                document.getElementById("msgids").value = msgids.join(",");
                if (msgids.length == 0) {
                    alert(LOCALE.maketext("You must first select at least one message in the queue."));
                    return false;
                }
            } else {
                document.getElementById("msgids").value = msgids.join(",");
            }
            document.getElementById("multiactionform").action = multiAction;
            document.getElementById("multiactionform").submit();
        },

        selectAll: function(unsel) {
            var records = this.deliveryreport.dt.getRecordSet().getRecords();
            for (i = 0; i < records.length; i++) {
                this.deliveryreport.dt.getRecordSet().updateKey(records[i], "check", (unsel ? "" : "true"));
            }
            this.deliveryreport.dt.render();
        },

        unselectAll: function() {
            this.selectAll(1);
        }

    };
})();
Back to Directory File Manager