Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/feature/views/featureListController.js

//                                      Copyright 2024 WebPros International, LLC
//                                                           All rights reserved.
// copyright@cpanel.net                                         http://cpanel.net
// This code is subject to the cPanel license. Unauthorized copying is prohibited.

define(
    [
        "angular",
        "lodash",
        "cjt/util/locale",
        "uiBootstrap",
        "cjt/directives/autoFocus",
        "cjt/filters/wrapFilter",
        "cjt/filters/splitFilter",
        "cjt/filters/htmlFilter",
        "cjt/directives/spinnerDirective",
        "cjt/directives/actionButtonDirective",
        "cjt/directives/validationContainerDirective",
        "cjt/directives/validationItemDirective",
        "cjt/services/alertService",
        "app/services/featureListService",
        "cjt/io/whm-v1-querystring-service",
    ],
    function(angular, _, LOCALE) {
        "use strict";

        // Retrieve the current application
        var app = angular.module("App");

        var controller = app.controller(
            "featureListController", [
                "$scope",
                "$location",
                "$anchorScroll",
                "$timeout",
                "featureListService",
                "alertService",
                function(
                    $scope,
                    $location,
                    $anchorScroll,
                    $timeout,
                    featureListService,
                    alertService) {

                    $scope.loadingPageData = true;
                    $scope.loadingView = false;
                    $scope.onlyReseller = !PAGE.hasRoot;
                    $scope.hasMailOnlyList = PAGE.hasMailOnlyList;

                    /**
                     * Returns true if the feature list can be edited
                     *
                     * @method isEditable
                     * @param  {String} list The name of the feature list to check
                     * @return {Boolean}
                     */
                    $scope.isEditable = function(list) {
                        return typeof list !== "undefined" && list !== "";
                    };

                    /**
                     * Returns true if the feature list can be deleted
                     *
                     * @method isDeletable
                     * @param  {String} list The name of the feature list to check
                     * @return {Boolean}
                     */
                    $scope.isDeletable = function(list) {
                        if (typeof list !== "undefined") {
                            return $scope.isEditable(list) && !$scope.isSystemList(list);
                        }
                        return false;
                    };

                    /**
                     * Returns true if the feature list is reserved for use by the system
                     *
                     * @method isSystemList
                     * @param  {String} list The name of the feature list to check
                     * @return {Boolean}
                     */
                    $scope.isSystemList = function(list) {
                        if (typeof list !== "undefined") {
                            return list === "default" || list === "disabled" || list === "Mail Only";
                        }
                        return false;
                    };

                    /**
                     * Add a feature list
                     *
                     * @method add
                     * @param  {String} list The name of the feature list to add
                     * @return {Promise}
                     */
                    $scope.add = function(list) {
                        if (!$scope.formAddFeature.$valid) {

                            // dirty the name field and bail out
                            var currentValue = $scope.formAddFeature.txtNewFeatureList.$viewValue;
                            $scope.formAddFeature.txtNewFeatureList.$setViewValue(currentValue);
                            return;
                        }

                        // reseller check

                        if (!PAGE.hasRoot) {
                            var re = new RegExp("^" + PAGE.remoteUser + "_\\w+", "i");
                            if (list.search(re) === -1) {
                                list = PAGE.remoteUser + "_" + list;
                            }
                        }

                        return featureListService
                            .add(list)
                            .then(function() {

                                // success
                                $scope.loadingView = true;
                                $scope.loadView("editFeatureList", { name: list });
                            }, function(error) {

                                // failure
                                alertService.add({
                                    type: "danger",
                                    message: error,
                                    id: "errorAddingingFeatureList",
                                });
                            });
                    };

                    /**
                     * Deletes a feature list
                     *
                     * @method delete
                     * @param  {String} list The name of the feature list to delete
                     * @return {Promise}
                     */
                    $scope.delete = function(list) {

                        return featureListService
                            .remove(list)
                            .then(function(results) {

                                // success
                                $scope.featureLists = results.items;
                                $scope.selectedFeatureList = $scope.featureLists[0];
                            }, function(error) {

                                // failure
                                alertService.add({
                                    type: "danger",
                                    message: error,
                                    id: "errorDeletingFeatureList",
                                });
                            }, function() {

                                // notification
                                alertService.add({
                                    type: "success",
                                    message: LOCALE.maketext("You successfully deleted the “[_1]” feature list.", _.escape(list)),
                                    id: "alertDeleteSuccess",
                                });
                            });
                    };

                    /**
                     * Fetch the feature lists
                     * @method fetch
                     * @return {Promise} Promise that when fulfilled will result in the list being loaded with the new criteria.
                     */
                    $scope.fetch = function() {
                        $scope.loadingPageData = true;
                        alertService.removeById("errorFetchFeatureLists");

                        return featureListService
                            .loadFeatureLists()
                            .then(function(results) {
                                $scope.featureLists = results.items;
                                $scope.selectedFeatureList = $scope.featureLists[0];
                            }, function(error) {

                                // failure
                                alertService.add({
                                    type: "danger",
                                    message: error,
                                    id: "errorFetchFeatureLists",
                                });

                                // throw an error for chained promises
                                throw error;
                            }).finally(function() {
                                $scope.loadingPageData = false;
                            });

                    };

                    $scope.$on("$viewContentLoaded", function() {

                        // check for page data in the template if this is a first load
                        if (app.firstLoad.featureList && PAGE.featureLists) {
                            app.firstLoad.featureList = false;
                            $scope.loadingPageData = false;

                            var featureLists = featureListService.prepareList(PAGE.featureLists);
                            $scope.featureLists = featureLists.items;
                            $scope.selectedFeatureList = $scope.featureLists[0];
                            if (!featureLists.status) {
                                $scope.loadingPageData = "error";
                                alertService.add({
                                    type: "danger",
                                    message: LOCALE.maketext("There was a problem loading the page. The system is reporting the following error: [_1].", PAGE.featureLists.metadata.reason),
                                    id: "errorFetchFeatureLists",
                                });
                            }
                        } else {

                            // reload the feature lists
                            $scope.fetch();
                        }
                    });
                },
            ]);

        return controller;
    }
);
Back to Directory File Manager