define(["angular","cjt/util/locale","lodash","uiBootstrap","cjt/services/alertService","cjt/directives/alert","cjt/directives/alertList","cjt/directives/callout","app/services/configService","app/views/impactedDomainsPopup"],(function(e,t,s){"use strict";return e.module("App").controller("config",["$scope","configService","$uibModal","$timeout","alertService",function(o,a,i,r,n){o.loadingVhostList=!1,o.phpVersionsEmpty=!0,o.selectedVersion={},o.phpVhostList=[],o.restrictedPhp={domainsSelected:[],showAlert:!1,alertInfo:"",showAllDomains:!1,showMore:!0},o.vhostSelected=!1;var l=[];o.totalSelectedDomains=0,o.checkdropdownOpen=!1,o.meta={sortReverse:!1,sortBy:"vhost",sortDirection:"asc",filterBy:"*",filterCompare:"contains",filterValue:"",maxPages:0,totalItems:o.phpVhostList.length,currentPage:1,pageSize:10,pageSizes:[10,20,50,100,500,1e3],start:0,limit:10};var c={loading:!1,warn:!1,show:!1,showMore:!1,text:""},p=t.maketext("We recommend that you update to a supported version of [asis,PHP]. For more information, read our [output,url,_1,PHP,target,_2] documentation.","https://go.cpanel.net/eaphp","_blank"),d=/^ea-php\d{2,}$/;o.php={systemPhp:{isEol:!1},showEolMsg:!1,eolWarningMsg:""};var h=function(){var e=[];return o.phpVhostList.forEach((function(t){t.rowSelected&&t.isRestricted&&e.push(t.vhost)})),e},m=function(){o.restrictedPhp.domainsSelected=h(),o.restrictedPhp.showMore=6<o.restrictedPhp.domainsSelected.length;var e=o.restrictedPhp.domainsSelected;if(e.length>0){o.restrictedPhp.showAlert=!0;var a=o.phpVersions.reduce((function(e,t){return"inherit"!==t.version&&e.push(t.displayPhpVersion),e}),[]);o.restrictedPhp.alertInfo=t.maketext("The system administrator only allows this account to use the [asis,PHP] [numerate,_2,version,versions] [list_and,_1].",a.map(s.escape),a.length)+" "+t.maketext("If you change the [asis,PHP] version for the following [numerate,_1,domain,domains], you cannot use this interface to change the [numerate,_1,domain,domains] back to use [numerate,_1,its,their] original version of [asis,PHP].",e.length)}else o.restrictedPhp.showAlert=!1};o.selectAllVhosts=function(){if(o.allRowsSelected)o.phpVhostList.forEach((function(e){e.rowSelected=!0,-1===l.indexOf(e.vhost)&&l.push(e.vhost)}));else{var e=o.phpVhostList.map((function(e){return e.rowSelected=!1,e.vhost}));l=s.difference(l,e),o.restrictedPhp.showAlert=!1}o.totalSelectedDomains=l.length,o.vhostSelected=o.totalSelectedDomains>0,o.restrictedPhp.domainsSelected=h(),o.restrictedPhp.showAlert&&m()};o.toggleRestrictedDomains=function(){o.restrictedPhp.showAllDomains=!o.restrictedPhp.showAllDomains},o.selectVhost=function(e){void 0!==e&&(!function(e,o){o?(e.impactedDomains.loading=!0,a.fetchImpactedDomains("domain",e.vhost).then((function(o){var a=s.without(o.data.domains,e.vhost);o.status&&a.length>0&&(e.impactedDomains.show=e.impactedDomains.warn=e.rowSelected,e.impactedDomains.showMore=a.length>10,e.impactedDomains.text=t.maketext("A change to the “[output,strong,_1]” domain‘s PHP version affects the following domains:",s.escape(e.vhost)),e.impactedDomains.domains=s.sortBy(a))}),(function(e){n.add({type:"danger",message:e,closeable:!0,replace:!1,group:"multiphpManager"})})).finally((function(){e.impactedDomains.loading=!1}))):e.impactedDomains.show=e.impactedDomains.warn=o}(e,e.rowSelected),e.rowSelected?(l.push(e.vhost),o.allRowsSelected=o.phpVhostList.every((function(e){return e.rowSelected}))):(l=l.filter((function(t){return t!==e.vhost})),o.allRowsSelected=!1)),o.totalSelectedDomains=l.length,o.vhostSelected=o.totalSelectedDomains>0,o.restrictedPhp.domainsSelected=h(),o.restrictedPhp.showAlert&&m()},o.rowClass=function(e){return e.impactedDomains.warn?"warning":e.impactedDomains.loading?"processing":void 0},o.showAllImpactedDomains=function(e){i.open({templateUrl:"impactedDomainsPopup.ptt",controller:"impactedDomainsPopup",resolve:{data:function(){return e}}})},o.clearAllSelections=function(e){e.preventDefault(),e.stopPropagation(),l=[],o.phpVhostList.forEach((function(e){e.rowSelected=!1})),o.checkdropdownOpen=!1,o.allRowsSelected=!1,o.totalSelectedDomains=0,o.vhostSelected=!1,o.restrictedPhp.showAlert=!1},o.hidePhpAlert=function(){o.restrictedPhp.showAlert=!1};var u=function(e){void 0!==e&&(o.phpVersions=e,void 0!==o.systemPhp&&""!==o.systemPhp&&o.phpVersions.push({version:"inherit",displayPhpVersion:"inherit"})),o.phpVersions&&o.phpVersions.length>0?(a.getCustomRecommendations().then((function(e){if(e&&e.data.length>0){var s=e.data,i=[];s.forEach((function(e){o.phpVersions.forEach((function(s){s.version.includes(e)&&(i.push(a.friendlyPhpFormat(s.version)),s.displayPhpVersion=s.displayPhpVersion+" - "+t.maketext("Recommended"),o.showRecommendedVersion=!0)}))})),i.length>0&&(o.recommendedVersionMessage=t.maketext("Your hosting provider recommends [list_or,_1].",i))}})),o.selectedVersion=o.phpVersions[0],o.phpVersionsEmpty=!1):o.phpVersionsEmpty=!0};o.performApplyDomainPhp=function(){return n.clear(),o.restrictedPhp.showAlert&&(o.restrictedPhp.showAlert=!1),a.applyDomainSetting(o.selectedVersion.version,l).then((function(e){void 0!==e&&(n.add({type:"success",message:t.maketext("Successfully applied [asis,PHP] version “[_1]” to the selected [numerate,_2,domain,domains].",o.selectedVersion.displayPhpVersion,l.length),closeable:!0,replace:!1,autoClose:1e4,group:"multiphpManager"}),o.selectPage())}),(function(e){if(void 0!==e.raw){var s=e.raw.errors;if(s.length>0){var a=[];e.data&&e.data.vhosts&&(a=e.data.vhosts),s.forEach((function(e){n.add({type:"danger",message:e,closeable:!0,replace:!1,group:"multiphpManager"})})),a.length>0&&n.add({type:"success",message:t.maketext("Successfully applied [asis,PHP] version “[_1]” to [numerate,_2,a domain,some domains].",o.selectedVersion.displayPhpVersion,a.length),closeable:!0,replace:!1,autoClose:1e4,group:"multiphpManager"})}}else n.add({type:"danger",message:e.error,closeable:!0,replace:!1,group:"multiphpManager"})})).finally((function(){u(),l=[],o.phpVhostList.forEach((function(e){e.rowSelected=!1})),o.allRowsSelected=!1,o.totalSelectedDomains=0,o.vhostSelected=!1}))},o.applyDomainPhp=function(){return o.restrictedPhp.domainsSelected.length>0?m():o.performApplyDomainPhp()};var g=function(a){var i=a.items;o.meta.totalItems=a.totalItems;var r=i;if(o.meta.totalItems>s.min(o.meta.pageSizes)){var n=(o.meta.currentPage-1)*o.meta.pageSize;o.showPager=!0,o.meta.start=n+1,o.meta.limit=n+r.length}else o.showPager=!1,0===r.length?o.meta.start=0:o.meta.start=1,o.meta.limit=r.length;var p=0;r.forEach((function(o){-1!==l.indexOf(o.vhost)?o.rowSelected=!0:(o.rowSelected=!1,p++),o.impactedDomains=e.copy(c),o.inherited=!1;var a=o.phpversion_source;if(void 0!==a){var i="",r="";void 0!==a.domain?(i="domain",r=a.domain):void 0!==a.system_default&&(i="system_default",r=t.maketext("System Default")),("domain"===i&&r!==o.vhost||"system_default"===i)&&(o.inherited=!0,o.inheritedInfo=t.maketext("This domain inherits its [asis,PHP] version “[output,em,_1]” from: [output,strong,_2]",s.escape(o.displayPhpVersion),s.escape(r)))}o.isRestricted=!1,o.showInheritInfo=!1;var n=PAGE.versionListData.data.versions;s.some(n,["version",o.version])||(o.isRestricted=!0)})),o.restrictedPhp.showMore=6<o.restrictedPhp.domainsSelected.length,o.phpVhostList=r,o.allRowsSelected=r.length>0&&0===p};o.selectPage=function(t){return t&&e.isNumber(t)&&(o.meta.currentPage=t),o.loadingVhostList=!0,a.fetchList(o.meta).then((function(e){g(e)}),(function(e){n.add({type:"danger",message:e,closeable:!0,replace:!1,group:"multiphpManager"})})).then((function(){o.loadingVhostList=!1}))};var f=function(e){return a.getEA4Recommendations().then((function(i){if(i&&void 0!==i.data){var r=function(e){var t=[],o=s.sortBy(s.filter(s.keys(e),(function(e){return d.test(e)})));return s.each(o,(function(o){s.each(e[o],(function(e){s.includes(e.filter,"eol")&&t.push(o)}))})),t}(i.data);if(r.length>0){o.php.systemPhp.isEol=s.includes(r,PAGE.systemPHPData.data.version);var l=s.intersection(r,e);if(l.length>0){var c=s.map(l,(function(e){return a.friendlyPhpFormat(e)})),h=t.maketext("[output,strong,Warning]: [asis,PHP] [numerate,_2,version,versions] [list_and,_1] [numerate,_2,is,are] [output,strong,deprecated].",c.map(s.escape),l.length)+" "+p;o.php.showEolMsg=!0,o.php.eolWarningMsg=h}}}else n.add({type:"warning",message:t.maketext("The system could not retrieve data for deprecated versions of PHP."),closeable:!0,id:"recommendationsError",group:"multiphpManager"})})).catch((function(e){n.add({type:"warning",message:e,closeable:!0,id:"recommendationsError",group:"multiphpManager"})}))};o.$on("$viewContentLoaded",(function(){var e;if(n.clear(),f(PAGE.versionListData.data.versions),PAGE.versionListData.data&&(PAGE.versionListData.data.versions=PAGE.versionListData.data.versions.map((function(e){return{version:e,displayPhpVersion:a.transformPhpFormat(e)}}))),PAGE.vhostListData.status){o.loadingVhostList=!1;var t=a.convertResponseToList(PAGE.vhostListData);g(t)}else e=PAGE.vhostListData.errors[0],n.add({type:"danger",message:PAGE.vhostListData.errors[0],closeable:!0,replace:!1,group:"multiphpManager"});PAGE.systemPHPData.status?o.systemPhp={version:PAGE.systemPHPData.data.version,displayPhpVersion:a.transformPhpFormat(PAGE.systemPHPData.data.version)}:e!==PAGE.systemPHPData.errors[0]&&n.add({type:"danger",message:PAGE.systemPHPData.errors[0],closeable:!0,replace:!1,group:"multiphpManager"}),PAGE.versionListData.status?u(PAGE.versionListData.data.versions):(u(),e!==PAGE.versionListData.errors[0]&&n.add({type:"danger",message:PAGE.versionListData.errors[0],closeable:!0,replace:!1,group:"multiphpManager"}))}))}])}));