Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/market_provider_manager/index.cmb.js

/*
# templates/ssl_provider_manager/services/manageService.js Copyright(c) 2020 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 */
/* jshint -W100 */

define(
    'app/services/manageService',[
        "angular",
        "cjt/io/api",
        "cjt/io/whm-v1-request",
        "cjt/io/whm-v1", // IMPORTANT: Load the driver so its ready
    ],
    function(angular, API, APIREQUEST) {

        var app = angular.module("App");
        var NO_MODULE = "";

        function manageServiceFactory($q, PAGE) {
            var manageService = {};
            var providers = [];// eslint-disable-line no-unused-vars
            var products = [];
            var CONTACTEMAIL = "";

            manageService.get_providers = function() {
                if (PAGE.providers) {
                    return PAGE.providers;
                } else {
                    return [];
                }
            };

            manageService.get_products = function() {
                return products;
            };

            manageService.fetch_providers = function() {
                var deferred = $q.defer();

                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, "get_market_providers_list");
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                deferred.promise.then(function(result) {
                    providers = result.data;
                });
                return deferred.promise;
            };

            manageService.fetch_products = function() {
                var deferred = $q.defer();

                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, "get_market_providers_products");
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                deferred.promise.then(function(result) {
                    products = result.data;
                });
                return deferred.promise;
            };

            manageService.set_provider_enabled_status = function(provider, enabled) {
                var deferred = $q.defer();

                var api_function = enabled ? "enable_market_provider" : "disable_market_provider";
                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, api_function);
                apiCall.addArgument("name", provider.name);
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                return deferred.promise;
            };

            manageService.get_contact_email = function() {
                return CONTACTEMAIL;
            };

            manageService.fetch_contact_email = function() {
                var deferred = $q.defer();
                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, "get_tweaksetting");
                apiCall.addArgument("key", "CONTACTEMAIL");
                apiCall.addArgument("module", "Basic");
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                deferred.promise.then(function(result) {
                    CONTACTEMAIL = result.data.tweaksetting.value;
                });
                return deferred.promise;
            };

            return manageService;
        }

        manageServiceFactory.$inject = ["$q", "PAGE"];
        return app.factory("manageService", manageServiceFactory);
    }
);

/*
# templates/ssl_provider_manager/services/editProductsService.js Copyright(c) 2020 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: false */
/* jshint -W100 */

define(
    'app/services/editProductsService',[
        "angular",
        "cjt/io/api",
        "cjt/util/query",   // XXX FIXME remove when batch is in
        "cjt/util/parse",
        "cjt/io/whm-v1-request",
        "cjt/io/whm-v1", // IMPORTANT: Load the driver so its ready
    ],
    function(angular, API, QUERY, cjt2Parse, APIREQUEST) {

        "use strict";

        var app = angular.module("App");
        var NO_MODULE = "";

        function editProductsServiceFactory($q) {
            var editProductsService = {};
            var products = [];
            var productsMetadata = [];

            editProductsService.get_products = function() {
                return products;
            };

            editProductsService.fetch_products = function() {
                var deferred = $q.defer();

                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, "get_adjusted_market_providers_products");
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                deferred.promise.then(function(result) {
                    products = result.data;

                    // Typecast the responses.
                    products.forEach( function(p) {
                        ["recommended", "x_ssl_per_domain_pricing"].forEach(
                            function(attr) {
                                p[attr] = cjt2Parse.parsePerlBoolean(p[attr]);
                            }
                        );

                        p.price = p.price && cjt2Parse.parseNumber(p.price);

                        if (p.x_ssl_per_domain_pricing) {
                            p.x_price_per_domain = cjt2Parse.parseNumber(p.x_price_per_domain);
                        }
                    } );
                });

                return deferred.promise;
            };

            editProductsService.set_product_enabled = function(product, provider, enabled) {
                var deferred = $q.defer();
                var apiCall = new APIREQUEST.Class();

                var enabled_value = enabled ? 1 : 0;

                apiCall.initialize(NO_MODULE, "set_market_product_attribute");
                apiCall.addArgument("product_id", product.product_id);
                apiCall.addArgument("value", enabled_value);
                apiCall.addArgument("provider", provider);
                apiCall.addArgument("attribute", "enabled");
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                return deferred.promise;
            };

            editProductsService.setMarketProductAttribute = function(providerID, productID, attribute, value) {
                var deferred = $q.defer();
                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, "set_market_product_attribute");
                apiCall.addArgument("product_id", productID);
                apiCall.addArgument("provider", providerID);
                apiCall.addArgument("attribute", attribute);
                apiCall.addArgument("value", value);
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                return deferred.promise;
            };

            editProductsService.set_provider_product_recommended = function(product, provider, recommended) {
                var deferred = $q.defer();

                var recommended_value = recommended ? 1 : 0;

                var need_to_disable = recommended_value && products.filter( function(p) {
                    return ( !!p.recommended && product.product_group === p.product_group );
                } );

                var apiCall = new APIREQUEST.Class();

                // XXX FIXME HACK HACK improve once we have batch
                if (need_to_disable && need_to_disable.length) {
                    apiCall.initialize(NO_MODULE, "batch");

                    var calls = {};
                    need_to_disable.forEach( function(p, i) {
                        calls["command-" + i] = {
                            product_id: p.product_id,
                            value: 0,
                            provider: p.provider_name
                        };
                    } );

                    calls["command-" + need_to_disable.length] = {
                        product_id: product.product_id,
                        value: 1,
                        provider: product.provider_name
                    };

                    for (var query_key in calls) {
                        if ( calls.hasOwnProperty(query_key) ) {
                            calls[query_key].attribute = "recommended";

                            // calls[query_key].version = 1;

                            var this_call_query = QUERY.make_query_string( calls[query_key] );
                            apiCall.addArgument(query_key, "set_market_product_attribute?" + this_call_query);
                        }
                    }
                } else {
                    apiCall.initialize(NO_MODULE, "set_market_product_attribute");
                    apiCall.addArgument("product_id", product.product_id);
                    apiCall.addArgument("value", recommended_value);
                    apiCall.addArgument("provider", provider);
                    apiCall.addArgument("attribute", "recommended");
                }

                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                return deferred.promise;
            };

            editProductsService.fetch_product_metadata = function() {
                var deferred = $q.defer();

                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, "get_market_providers_product_metadata");
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                deferred.promise.then(function(result) {
                    productsMetadata = result.data;

                    productsMetadata.forEach( function(m) {
                        for (var attr in m.attributes) {
                            if (m.attributes.hasOwnProperty(attr)) {
                                m.attributes[attr].read_only = cjt2Parse.parsePerlBoolean(m.attributes[attr].read_only);
                            }
                        }
                    } );
                });
                return deferred.promise;
            };

            editProductsService.get_product_metadata = function() {
                return productsMetadata;
            };

            return editProductsService;
        }

        editProductsServiceFactory.$inject = ["$q"];
        return app.factory("editProductsService", editProductsServiceFactory);
    }
);

/*
# templates/ssl_provider_manager/services/editCPStoreService.js Copyright(c) 2020 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: false */
/* jshint -W100 */

define(
    'app/services/editCPStoreService',[
        "angular",
        "cjt/io/api",
        "cjt/io/whm-v1-request",
        "cjt/io/whm-v1", // IMPORTANT: Load the driver so its ready
    ],
    function(angular, API, APIREQUEST) {

        var app = angular.module("App");
        var NO_MODULE = "";
        var commission_config;

        function editCPStoreServiceFactory($q) {
            var editCPStoreService = {};

            editCPStoreService.set_commission_id = function(provider, commission_id) {
                var deferred = $q.defer();

                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, "set_market_provider_commission_id");
                apiCall.addArgument("provider", provider);
                apiCall.addArgument("commission_id", commission_id);
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });
                return deferred.promise;
            };

            editCPStoreService.fetch_market_providers_commission_config = function() {
                var deferred = $q.defer();

                var apiCall = new APIREQUEST.Class();

                apiCall.initialize(NO_MODULE, "get_market_providers_commission_config");
                API.promise(apiCall.getRunArguments())
                    .done(function(response) {
                        response = response.parsedResponse;
                        if (response.status) {
                            deferred.resolve(response);
                        } else {
                            deferred.reject(response.error);
                        }
                    });

                deferred.promise.then(function(result) {
                    commission_config = result.data;
                });

                return deferred.promise;
            };

            editCPStoreService.get_market_providers_commission_config = function() {
                return commission_config;
            };

            return editCPStoreService;
        }


        editCPStoreServiceFactory.$inject = ["$q"];
        return app.factory("editCPStoreService", editCPStoreServiceFactory);
    }
);

/*
# templates/ssl_provider_manager/views/manageController.js
#                                                     Copyright(c) 2020 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: false */
/* jshint -W100 */

define(
    'app/views/manageController',[
        "lodash",
        "angular",
        "cjt/util/locale",
        "uiBootstrap",
        "cjt/directives/toggleSortDirective",
        "cjt/directives/actionButtonDirective",
        "cjt/directives/toggleSwitchDirective",
        "cjt/validator/email-validator",
        "cjt/directives/validationContainerDirective",
        "cjt/directives/validationItemDirective",
    ],
    function(_, angular, LOCALE) {

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

        // Setup the controller
        var controller = app.controller(
            "manageController", [
                "$scope",
                "manageService",
                "editCPStoreService",
                "growl",
                function($scope, manageService, editCPStoreService, growl) {
                    function _growl_error(error) {
                        return growl.error( _.escape(error) );
                    }

                    $scope.set_provider = function(provider, enabled) {
                        var enable_message = LOCALE.maketext("The system successfully enabled the Market provider “[_1]”.", _.escape(provider.name));
                        var disabled_message = LOCALE.maketext("The system successfully disabled the Market provider “[_1]”.", _.escape(provider.name));
                        var success_message = enabled ? enable_message : disabled_message;

                        return manageService.set_provider_enabled_status(provider, enabled).then(function() {
                            growl.success(success_message);

                            if (enabled && provider.supports_commission) {
                                var promise = check_for_commission_id_and_set_if_does_not_exist(provider.name);
                                return promise.then(function(success) {
                                    provider.enabled = enabled;
                                    $scope.$parent.go("edit_cpstore_config", 2);
                                }, function(error) {
                                    provider.enabled = enabled;
                                    $scope.$parent.go("edit_cpstore_config", 2);
                                });
                            } else {
                                provider.enabled = enabled;
                            }
                        }, _growl_error);
                    };

                    var check_for_commission_id_and_set_if_does_not_exist = function(provider) {
                        return editCPStoreService.fetch_market_providers_commission_config().then(function(success) {
                            var provider_needs_commission_id = false;
                            for (var x = 0; x < success.data.length; x++ ) {
                                if (success.data[x].provider_name === provider && !success.data[x].remote_commission_id) {
                                    provider_needs_commission_id = true;
                                }
                            }
                            if ( provider_needs_commission_id && $scope.CONTACTEMAIL ) {

                                // if no remote commission id, set one, otherwise we're done
                                return editCPStoreService.set_commission_id(provider, $scope.CONTACTEMAIL).then(function(success) {
                                    growl.success(LOCALE.maketext("The system successfully set the commission [asis,ID] for the provider “[_1]” to “[_2]”.", _.escape(provider), _.escape($scope.CONTACTEMAIL)));
                                }, function(error) {

                                    // We silence errors because they just might not be able to set it to an email
                                });
                            }
                        }, _growl_error);
                    };

                    $scope.init = function() {
                        $scope.fetching_products = true;
                        $scope.locale = LOCALE;
                        $scope.providers = manageService.get_providers();
                        $scope.$parent.loading = true;

                        manageService.fetch_products().then(function(result) {
                            angular.forEach(result.meta.warnings, function(value) {
                                growl.warning( _.escape(value) );
                            });
                            $scope.products = manageService.get_products();
                        }, _growl_error).finally(function() {
                            if ($scope && $scope.$parent) {
                                $scope.$parent.loading = false;
                            }
                            $scope.fetching_products = false;

                        });

                        manageService.fetch_contact_email().then(function() {
                            $scope.CONTACTEMAIL = manageService.get_contact_email();
                        }, _growl_error);
                    };
                    $scope.init();
                }
            ]
        );

        return controller;
    }
);

/*
# templates/ssl_provider_manager/views/editProductsController.js
#                                                     Copyright(c) 2020 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 */
/* jshint -W100 */

define(
    'app/views/editProductsController',[
        "lodash",
        "angular",
        "cjt/util/locale",
        "cjt/validator/compare-validators",
        "cjt/validator/datatype-validators",
        "uiBootstrap",
        "cjt/directives/toggleSortDirective",
        "cjt/directives/actionButtonDirective",
        "cjt/directives/toggleSwitchDirective",
    ],
    function(_, angular, LOCALE) {

        "use strict";

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

        // Setup the controller
        var controller = app.controller(
            "editProductsController", [
                "$scope",
                "editProductsService",
                "growl",
                "$uibModal",
                "$log",
                "PAGE",
                function($scope, editProductsService, growl, $uibModal, $log, PAGE) {
                    function growlError(error) {
                        return growl.error( _.escape(error) );
                    }

                    var provider_commission = {};
                    $scope.provider_commission = provider_commission;

                    var modal;

                    var providers = PAGE.providers;
                    for (var p = 0; p < providers.length; p++) {
                        if ( providers[p].even_commission_divisor ) {
                            provider_commission[providers[p].name] = providers[p].even_commission_divisor / 100;
                        }
                    }

                    $scope.set_product = function(product, enabled) {
                        var enable_message = LOCALE.maketext("The system has successfully enabled the product “[_1]”.", _.escape(product.display_name));
                        var disabled_message = LOCALE.maketext("The system has successfully disabled the product “[_1]”.", _.escape(product.display_name));
                        var success_message = enabled ? enable_message : disabled_message;

                        return editProductsService.set_product_enabled(product, product.provider_name, enabled).then(function() {
                            growl.success(success_message);
                            product.enabled = enabled;
                        }, growlError);
                    };

                    $scope.product_group_changing = {};

                    $scope.set_recommended = function(product, recommended) {
                        product.recommended_is_changing = true;
                        $scope.product_group_changing[product.product_group] = true;

                        var set_message = LOCALE.maketext("“[_1]” is now recommended.", _.escape(product.display_name));
                        var unset_message = LOCALE.maketext("“[_1]” is no longer recommended.", _.escape(product.display_name));
                        var success_message = recommended ? set_message : unset_message;
                        return editProductsService.set_provider_product_recommended(product, product.provider_name, recommended).then(function() {

                            growl.success(success_message);

                            if ( recommended ) {
                                for (var x = 0; x < $scope.products.length; x++) {
                                    if ( $scope.products[x].product_group === product.product_group ) {
                                        $scope.products[x].recommended = false;
                                    }
                                }
                            }
                            product.recommended = recommended;
                        }, growlError).finally( function() {
                            product.recommended_is_changing = false;
                            $scope.product_group_changing[product.product_group] = false;
                        } );
                    };

                    function format_dollars(value) {
                        value = parseFloat(value) + 0.001;
                        var localized_value = LOCALE.numf(value);
                        return localized_value.substr(0, localized_value.length - 1);
                    }

                    $scope.format_dollars = format_dollars;

                    // TODO: If/when we parse localized numbers, set this to use
                    // that logic. It’ll basically be the inverse of format_dollars().
                    var _parseGivenPrice = Number;

                    $scope.get_product_commission = function(product) {
                        var commission = product[product._pricing_attribute] / 3;

                        // Round to the nearest one hundredth (i.e., penny).
                        commission = Math.round(100 * commission);

                        return parseFloat(("" + commission).replace(/(..)$/, ".$1"));
                    };

                    $scope.editProductPrice = function(product, wildcard) {

                        var productDisplayName = _.escape(product.display_name);
                        var editingAttribute = product._pricing_attribute;
                        var providerCommission = $scope.provider_commission[product.provider_name];

                        var minimumPrice = product.x_price_per_domain_minimum;
                        var maximumPrice = product.x_price_per_domain_maximum;
                        var editingDescription = LOCALE.maketext("Editing the per-domain pricing for the product “[_1]”.", product.display_name);

                        if (wildcard) {
                            editingAttribute = product._wildcard_pricing_attribute;
                            minimumPrice = product.x_price_per_wildcard_domain_minimum;
                            maximumPrice = product.x_price_per_wildcard_domain_maximum;
                            editingDescription = LOCALE.maketext("Editing the per-wildcard-domain pricing for the product “[_1]”.", product.display_name);
                        }

                        var price = product[editingAttribute];

                        // Creating isolated scope for flexibility with wildcard
                        var modalScope = {
                            editingDescription: editingDescription,
                            product: {
                                providerCommissionMessage: providerCommission ? $scope.get_provider_commission_msg(providerCommission) : null,
                                settingPrice: false,
                                price: {
                                    unit: product.price_unit,
                                    minimum: minimumPrice || 0,
                                    maximum: maximumPrice || 1000000,
                                    minimumMessage: $scope.get_min_price_msg(minimumPrice),
                                    maximumMessage: $scope.get_max_price_msg(maximumPrice),
                                    multipleOf: providerCommission ? $scope.provider_commission[product.provider_name] : 0.01,
                                },
                            },


                            // Use toFixed() for now instead of format_dollars()
                            // until we can actually parse localized numbers.
                            new_price: _parseGivenPrice(price).toFixed(2),
                            cancel_change_price: cancelChangePrice,
                            set_price: setPrice,
                        };

                        function cancelChangePrice() {

                            // We only need to remove the modal now
                            modal.close();
                        }

                        function setPrice(newPrice, priceForm) {
                            modalScope.product.settingPrice = true;

                            var price = _parseGivenPrice(newPrice);
                            var editingSuccessMessage;
                            if ( wildcard ) {
                                editingSuccessMessage = LOCALE.maketext("The system has successfully set the per-wildcard-domain pricing for the product “[_1]” to $[_2].", productDisplayName, format_dollars(price));
                            } else {
                                editingSuccessMessage = LOCALE.maketext("The system has successfully set the per-domain pricing for the product “[_1]” to $[_2].", productDisplayName, format_dollars(price));
                            }

                            return editProductsService.setMarketProductAttribute(product.provider_name, product.product_id, editingAttribute, price).then(function() {
                                product[editingAttribute] = price;

                                modal.dismiss();

                                priceForm.$setPristine();
                                growl.success(editingSuccessMessage);
                            }, growlError).finally(function() {
                                modalScope.product.settingPrice = false;
                            });
                        }

                        var $isolateScope = $scope.$new();
                        angular.extend($isolateScope, modalScope);

                        // We use the template in the page to reduce any delay from using templateUrl
                        var template = document.getElementById("product-price-modal").text;
                        modal = $uibModal.open({
                            template: template,
                            scope: $isolateScope,
                            size: "sm"
                        });
                    };

                    $scope.product_orderBy_sorter = function(p) {
                        return p[p._pricing_attribute];
                    };

                    var _product_lookup = {};
                    var _metadata_lookup = {};

                    var _when_done_loading = function() {
                        $scope.$parent.loading = false;

                        // Prepare specific display attributes.
                        $scope.products.forEach( function(p) {
                            var key = p.provider_name + "/" + p.product_id;

                            p._pricing_attribute = p.x_ssl_per_domain_pricing ? "x_price_per_domain" : "price";

                            if (p.x_price_per_wildcard_domain) {
                                p._wildcard_pricing_attribute = "x_price_per_wildcard_domain";
                            }

                            try {
                                p._price_is_read_only = _metadata_lookup[key].attributes[p._pricing_attribute].read_only;
                            } catch (e) {
                                $log.warn("Missing metadata attribute?", JSON.stringify(p), key, JSON.stringify(_metadata_lookup), e);
                                p._price_is_read_only = true;
                            }
                        } );
                    };

                    $scope.get_recommended_tooltip = function(product) {
                        return (product.recommended) ?
                            LOCALE.maketext("Clear the recommended product setting for this product group.") :
                            LOCALE.maketext("Make this the recommended product for its product group.");
                    };

                    $scope.get_provider_commission_msg = function(value) {
                        return LOCALE.maketext("Enter a multiple of $[_1] USD.", format_dollars(value));
                    };

                    $scope.get_min_price_msg = function(value) {
                        return LOCALE.maketext("The minimum price is $[_1] USD.", format_dollars(value));
                    };


                    $scope.get_max_price_msg = function(value) {
                        return LOCALE.maketext("The maximum price is $[_1] USD.", format_dollars(value));
                    };

                    $scope.init = function() {
                        $scope.fetching_products = true;
                        $scope.fetching_metadata = true;
                        $scope.selected_product = undefined;
                        $scope.$parent.loading = true;

                        editProductsService.fetch_products().then(function() {}, function(error) {
                            growl.error(error);
                        }).then(function() {
                            $scope.fetching_products = false;
                            $scope.products = editProductsService.get_products();

                            $scope.products.forEach( function(p) {
                                _product_lookup[ p.provider_name + "/" + p.product_id ] = p;
                            } );

                            // Because this can occur in an orphan scope we need to verify the parent exists
                            if ($scope && $scope.$parent && !$scope.fetching_metadata) {
                                _when_done_loading();
                            }
                        });

                        editProductsService.fetch_product_metadata().then(function() {}, function(error) {
                            growl.error(error);
                        }).then(function() {
                            $scope.fetching_metadata = false;
                            $scope.product_metadata = editProductsService.get_product_metadata();

                            $scope.product_metadata.forEach( function(m) {
                                _metadata_lookup[ m.provider_name + "/" + m.product_id ] = m;
                            } );

                            if ($scope && $scope.$parent && !$scope.fetching_products) {
                                _when_done_loading();
                            }
                        });
                    };

                    $scope.init();
                }
            ]
        );

        return controller;
    }
);

/*
# templates/ssl_provider_manager/views/editCPStoreController.js
#                                                     Copyright(c) 2020 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: false */
/* jshint -W100 */

define(
    'app/views/editCPStoreController',[
        "lodash",
        "angular",
        "cjt/util/locale",
        "uiBootstrap",
        "cjt/directives/actionButtonDirective",
        "cjt/validator/email-validator"
    ],
    function(_, angular, LOCALE) {

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

        // Setup the controller
        var controller = app.controller(
            "editCPStoreController", [
                "$scope",
                "editCPStoreService",
                "growl",
                function($scope, editCPStoreService, growl) {
                    function _growl_error(error) {
                        return growl.error( _.escape(error) );
                    }

                    $scope.init = function() {
                        $scope.locale = LOCALE;
                        $scope.$parent.loading = true;

                        editCPStoreService.fetch_market_providers_commission_config().then(function() {
                            $scope.cpstore_commission_config = editCPStoreService.get_market_providers_commission_config().filter( function(c) {
                                return c.provider_name === "cPStore";
                            } )[0];
                        }, _growl_error).then(function() {
                            if ($scope && $scope.$parent) {
                                $scope.$parent.loading = false;
                            }
                        });
                    };

                    $scope.set_commission_id = function(provider, commission_id) {
                        var message = LOCALE.maketext("You have set the Commission [asis,ID] for “[_1]” to “[_2]”.", _.escape(provider), _.escape(commission_id));
                        $scope.setting_commission_id = true;

                        return editCPStoreService.set_commission_id(provider, commission_id).then(function() {
                            growl.success(message);
                        }, _growl_error)
                            .then( function() {
                                $scope.setting_commission_id = false;
                            } );
                    };
                    $scope.init();
                }
            ]
        );

        return controller;
    }
);

/*
# templates/ssl_provider_manager/index.js Copyright(c)             2020 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 */
/* jshint -W100 */

/* global define: false, require: false */

define(
    'app/index',[
        "angular",
        "cjt/core",
        "cjt/modules",
        "uiBootstrap",
        "ngRoute",
        "ngAnimate"
    ],
    function(angular, CJT) {

        "use strict";

        CJT.config.html5Mode = false;

        return function() {
            angular.module("App", [
                "cjt2.config.whm.configProvider", // This needs to load first
                "ui.bootstrap",
                "angular-growl",
                "cjt2.whm",
                "ngAnimate"
            ]);

            var app = require(
                [
                    "cjt/bootstrap",

                    // Application Modules
                    "uiBootstrap",
                    "app/services/manageService",
                    "app/services/editProductsService",
                    "app/services/editCPStoreService",
                    "app/views/manageController",
                    "app/views/editProductsController",
                    "app/views/editCPStoreController",
                ], function(BOOTSTRAP) {

                    var app = angular.module("App");

                    app.value("PAGE", PAGE);

                    // If using views
                    app.controller("BaseController", ["$rootScope", "$scope", "$route", "$location",
                        function($rootScope, $scope, $route, $location) {

                            $scope.loading = false;

                            // Convenience functions so we can track changing views for loading purposes
                            $rootScope.$on("$routeChangeStart", function() {
                                $scope.loading = true;
                            });
                            $rootScope.$on("$routeChangeSuccess", function() {
                                $scope.loading = false;
                            });
                            $rootScope.$on("$routeChangeError", function() {
                                $scope.loading = false;
                            });
                            $scope.current_route_matches = function(key) {
                                return $location.path().match(key);
                            };
                            $scope.onSelectTab = function(tabIndex) {
                                $scope.activeTabIndex = tabIndex;
                            };
                            $scope.go = function(path, tabIndex) {
                                $location.path(path);
                                $scope.active_path = path;
                                $scope.onSelectTab(tabIndex);
                            };

                            $scope.activeTabIndex = 0;
                        }
                    ]);

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

                            // Setup a route - copy this to add additional routes as necessary
                            $routeProvider.when("/", {
                                controller: "manageController",
                                templateUrl: CJT.buildFullPath("market_provider_manager/views/manageView.ptt")
                            });

                            $routeProvider.when("/edit_products/", {
                                controller: "editProductsController",
                                templateUrl: CJT.buildFullPath("market_provider_manager/views/editProducts.ptt")
                            });

                            $routeProvider.when("/edit_cpstore_config/", {
                                controller: "editCPStoreController",
                                templateUrl: CJT.buildFullPath("market_provider_manager/views/editCPStore.ptt")
                            });

                            // default route
                            $routeProvider.otherwise({
                                "redirectTo": "/"
                            });

                        }
                    ]);

                    // end of using views

                    BOOTSTRAP();

                });

            return app;
        };
    }
);

Back to Directory File Manager