Viewing File: /usr/local/cpanel/base/webmail/jupiter/account_preferences/index.cmb.js

/*
# cpanel - base/webmail/jupiter/account_preferences/services/accountPrefs.js
#                                                  Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/

/* global define, PAGE */

define(
    'app/services/accountPrefs',[
        "angular",
        "lodash",
        "cjt/io/uapi-request",
        "cjt/modules",
        "cjt/io/api",
        "cjt/io/uapi",
        "cjt/services/APICatcher",
    ],
    function(angular, _, APIRequest) {

        "use strict";

        var MODULE_NAMESPACE = "webmail.accountPrefs.services.accountPrefs";
        var SERVICE_NAME = "AccountPrefsService";
        var MODULE_REQUIREMENTS = [ "cjt2.services.apicatcher" ];
        var SERVICE_INJECTABLES = ["APICatcher"];

        /**
         *
         * Service Factory to generate the Account Preferences service
         *
         * @module AccountPrefsService
         * @memberof webmail.accountPrefs
         *
         * @param {Object} APICatcher base service
         * @returns {Service} instance of the Domains service
         */
        var SERVICE_FACTORY = function(APICatcher) {

            var Service = function() {};

            Service.prototype = Object.create(APICatcher);

            _.assign(Service.prototype, {

                /**
                 * Wrapper for building an apiCall
                 *
                 * @private
                 *
                 * @param {String} module module name to call
                 * @param {String} func api function name to call
                 * @param {Object} args key value pairs to pass to the api
                 * @returns {UAPIRequest} returns the api call
                 *
                 * @example _apiCall( "Email", "get_mailbox_autocreate", { email:"foo@bar.com" } )
                 */
                _apiCall: function _createApiCall(module, func, args) {
                    var apiCall = new APIRequest.Class();
                    apiCall.initialize(module, func, args);
                    return apiCall;
                },

                /**
                 * Process the return value of the isMailboxAutoCreateEnabled call
                 *
                 * @param {Object} response object containing the data value
                 * @returns {Boolean} boolean value state of get_mailbox_autocreate
                 *
                 * @example _processMailboxAutoCreateResponse( { data:1 } )
                 */
                _processMailboxAutoCreateResponse: function _processPAResponse(response) {
                    return response && response.data && response.data.toString() === "1";
                },

                /**
                 * Retrieve current state of an email address's ability to auto create folders
                 *
                 * @param {String} email email address to check
                 * @returns {Promise<Boolean>} parsed value of the get_mailbox_autocreate call
                 *
                 * @example $service.isMailboxAutoCreateEnabled("foo@bar.com");
                 */
                isMailboxAutoCreateEnabled: function isMailboxAutoCreateEnabled(email) {
                    var apiCall = this._apiCall("Email", "get_mailbox_autocreate", { email: email });
                    return this._promise(apiCall).then(this._processMailboxAutoCreateResponse);
                },

                /**
                 * Enable Mailbox Auto Creation for an email address
                 *
                 * @param {String} email email address on which to enable auto creation
                 * @returns {Promise}
                 *
                 * @example $service.enableMailboxAutoCreate("foo@bar.com");
                 */
                enableMailboxAutoCreate: function enableMailboxAutoCreate(email) {
                    var apiCall = this._apiCall("Email", "enable_mailbox_autocreate", { email: email });
                    return this._promise(apiCall);
                },

                /**
                 * Disable Mailbox Auto Creation for an email address
                 *
                 * @param {String} email email address on which to enable auto creation
                 * @returns {Promise}
                 *
                 * @example $service.disableMailboxAutoCreate("foo@bar.com");
                 */
                disableMailboxAutoCreate: function disableMailboxAutoCreate(email) {
                    var apiCall = this._apiCall("Email", "disable_mailbox_autocreate", { email: email });
                    return this._promise(apiCall);
                },

                /**
                 * Wrapper for .promise method from APICatcher
                 *
                 * @param {Object} apiCall api call to pass to .promise
                 * @returns {Promise}
                 *
                 * @example $service._promise( $service._apiCall( "Email", "get_mailbox_autocreate", { email:"foo@bar.com" } ) );
                 */
                _promise: function _promise() {

                    // Because nested inheritence is annoying
                    return APICatcher.promise.apply(this, arguments);
                },
            });

            return new Service();
        };

        SERVICE_INJECTABLES.push(SERVICE_FACTORY);

        var app = angular.module(MODULE_NAMESPACE, MODULE_REQUIREMENTS);
        app.factory(SERVICE_NAME, SERVICE_INJECTABLES);

        return {
            "class": SERVICE_FACTORY,
            "serviceName": SERVICE_NAME,
            "namespace": MODULE_NAMESPACE,
        };
    }
);

/*
# cpanel - base/webmail/jupiter/account_preferences/views/main.js
#                                                  Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/

/* global define */

define(
    'app/views/main',[
        "angular",
        "lodash",
        "cjt/util/locale",
        "app/services/accountPrefs",
        "cjt/modules",
        "cjt/services/alertService",
        "cjt/directives/toggleSwitchDirective",
        "cjt/directives/toggleLabelInfoDirective",
    ],
    function(angular, _, LOCALE, AccountPrefsService) {

        "use strict";

        var initialLoadVariable = "MAILBOX_AUTOCREATION_ENABLED";
        var MODULE_NAMESPACE = "webmail.accountPrefs.views.main";
        var TEMPLATE_URL = "views/main.ptt";
        var MODULE_DEPENDANCIES = [];

        var CONTROLLER_INJECTABLES = ["$scope", AccountPrefsService.serviceName, "alertService", initialLoadVariable, "RESOURCE_TEMPLATE", "EMAIL_ADDRESS", "DISPLAY_EMAIL_ADDRESS"];
        var CONTROLLER_NAME = "MainController";
        var CONTROLLER = function AccountPreferencesMainController($scope, $service, $alertService, mailboxAutoCreationEnabled, RESOURCE_TEMPLATE, email, displayEmailAddress) {
            $scope.email = email;
            $scope.displayEmailAddress = _.escape(displayEmailAddress);
            $scope.examplePlusAddress = $scope.displayEmailAddress.split("@").join("+plusaddress@");

            $scope.resourcesPanelTemplate = RESOURCE_TEMPLATE;
            $scope.mailboxAutoCreationEnabled = mailboxAutoCreationEnabled;

            /**
             * Enable Auto Folder Creation (Plus Addressing)
             *
             * @returns {Promise} update service promise
             */
            $scope.enableMailboxAutoCreate = function enableMailboxAutoCreate() {
                var onSuccess = $alertService.success.bind($alertService, LOCALE.maketext("You enabled automatic folder creation for “[_1]”.", $scope.displayEmailAddress));
                var onError = $alertService.add.bind($alertService, {
                    type: "danger",
                    message: LOCALE.maketext("The system could not enable automatic folder creation for “[_1]”.", $scope.displayEmailAddress),
                });
                return $service.enableMailboxAutoCreate($scope.email).then(onSuccess, onError);
            };

            /**
             * Disable Auto Folder Creation (Plus Addressing)
             *
             * @returns {Promise} update service promise
             */
            $scope.disableMailboxAutoCreate = function disableMailboxAutoCreate() {
                var onSuccess = $alertService.success.bind($alertService, LOCALE.maketext("You disabled automatic folder creation for “[_1]”.", $scope.displayEmailAddress));
                var onError = $alertService.add.bind($alertService, {
                    type: "danger",
                    message: LOCALE.maketext("The system could not disable automatic folder creation for “[_1]”.", $scope.displayEmailAddress),
                });
                return $service.disableMailboxAutoCreate($scope.email).then(onSuccess, onError);
            };

            /**
             * Toggle Whether Auto Folder Creation (Plus Addressing) is enabled
             *
             * @returns {Promise} update service promise
             */
            $scope.toggleAutoFolderCreation = function toggleAutoFolderCreation() {
                $scope.mailboxAutoCreationEnabled = !$scope.mailboxAutoCreationEnabled;
                return $scope.mailboxAutoCreationEnabled ? $scope.enableMailboxAutoCreate() : $scope.disableMailboxAutoCreate();
            };

        };

        var app = angular.module(MODULE_NAMESPACE, MODULE_DEPENDANCIES);
        app.controller(CONTROLLER_NAME, CONTROLLER_INJECTABLES.concat(CONTROLLER));

        var resolver = {};
        resolver[initialLoadVariable] = [
            AccountPrefsService.serviceName,
            "EMAIL_ADDRESS",
            function($service, EMAIL_ADDRESS) {
                return $service.isMailboxAutoCreateEnabled(EMAIL_ADDRESS);
            },
        ];

        return {
            "controller": CONTROLLER_NAME,
            "class": CONTROLLER,
            "template": TEMPLATE_URL,
            "namespace": MODULE_NAMESPACE,
            "resolver": resolver,
        };
    }
);

/*
# cpanel - base/webmail/jupiter/account_preferences/index.js
#                                                  Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/

/* global require, define, PAGE */

define(
    'app/index',[
        "angular",
        "app/services/accountPrefs",
        "app/views/main",
        "cjt/modules",
        "cjt/directives/alertList",
        "cjt/services/APICatcher",
        "ngRoute",
        "uiBootstrap",
    ],
    function(angular, AccountPrefsService, MainView) {

        "use strict";

        var MODULE_NAME = "webmail.accountPrefs";

        return function() {

            // First create the application
            var appModule = angular.module(MODULE_NAME, [
                "ngRoute",
                "ui.bootstrap",
                "cjt2.webmail",
                AccountPrefsService.namespace,
                MainView.namespace,
            ]);

            appModule.value("EMAIL_ADDRESS", PAGE.emailAddress);
            appModule.value("DISPLAY_EMAIL_ADDRESS", PAGE.displayEmailAddress);
            appModule.value("RESOURCE_TEMPLATE", "views/_resources.ptt");

            // Then load the application dependencies
            var app = require(["cjt/bootstrap"], function(BOOTSTRAP) {

                appModule.config([
                    "$routeProvider",
                    function($routeProvider) {

                        $routeProvider.when("/", {
                            controller: MainView.controller,
                            templateUrl: MainView.template,
                            resolve: MainView.resolver,
                        });

                        $routeProvider.otherwise({
                            "redirectTo": "/",
                        });
                    },
                ]);

                BOOTSTRAP("#mainContent", MODULE_NAME);

            });

            return app;
        };
    }
);

Back to Directory File Manager