diff --git a/public/static/websiteFunctions/websiteFunctions.js b/public/static/websiteFunctions/websiteFunctions.js
index 810267b6f..f6c5f9dcb 100644
--- a/public/static/websiteFunctions/websiteFunctions.js
+++ b/public/static/websiteFunctions/websiteFunctions.js
@@ -2,7 +2,26 @@
* Created by usman on 7/26/17.
*/
+// Ensure app is available (get existing module or create reference)
+// This ensures compatibility with the global app variable from system-status.js
+if (typeof app === 'undefined') {
+ // First try to get window.app (set by system-status.js)
+ if (typeof window !== 'undefined' && typeof window.app !== 'undefined') {
+ app = window.app;
+ } else {
+ // If window.app doesn't exist, get the existing CyberCP module
+ // This works because system-status.js should have already created it
+ app = angular.module('CyberCP');
+ }
+}
+// Global function for deleting staging sites
+function deleteStagingGlobal(stagingId) {
+ if (confirm("Are you sure you want to delete this staging site? This action cannot be undone.")) {
+ // Redirect to WordPress list with delete parameter
+ window.location.href = "/websites/ListWPSites?DeleteID=" + stagingId;
+ }
+}
function getCookie(name) {
var cookieValue = null;
var t = document.cookie;
@@ -21,7 +40,5803 @@ function getCookie(name) {
}
+var arry = []
+
+function selectpluginJs(val) {
+ $('#mysearch').hide()
+ arry.push(val)
+
+ // console.log(arry)
+ document.getElementById('selJS').innerHTML = "";
+
+ for (var i = 0; i < arry.length; i++) {
+ $('#selJS').show()
+ var mlm = ' ' + arry[i] + '    '
+ $('#selJS').append(mlm)
+ }
+
+
+}
+
+
+var DeletePluginURL;
+
+function DeletePluginBuucket(url) {
+ DeletePluginURL = url;
+}
+
+function FinalDeletePluginBuucket() {
+ window.location.href = DeletePluginURL;
+}
+
+var SPVal;
+
+app.controller('WPAddNewPlugin', function ($scope, $http, $timeout, $window, $compile) {
+ $scope.webSiteCreationLoading = true;
+
+ $scope.SearchPluginName = function (val) {
+ $scope.webSiteCreationLoading = false;
+ SPVal = val;
+ url = "/websites/SearchOnkeyupPlugin";
+
+ var searchcontent = $scope.searchcontent;
+
+
+ var data = {
+ pluginname: searchcontent
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.webSiteCreationLoading = true;
+
+ if (response.data.status === 1) {
+ if (SPVal == 'add') {
+ $('#mysearch').show()
+ document.getElementById('mysearch').innerHTML = "";
+ var res = response.data.plugns.plugins
+ // console.log(res);
+ for (i = 0; i <= res.length; i++) {
+ //
+ var tml = '
';
+ $('#mysearch').append(tml);
+ }
+ } else if (SPVal == 'eidt') {
+ $('#mysearch').show()
+ document.getElementById('mysearch').innerHTML = "";
+ var res = response.data.plugns.plugins
+ // console.log(res);
+ for (i = 0; i <= res.length; i++) {
+ //
+ var tml = '
';
+ var temp = $compile(tml)($scope)
+ angular.element(document.getElementById('mysearch')).append(temp);
+ }
+
+ }
+
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+ }
+
+ $scope.AddNewplugin = function () {
+
+ url = "/websites/AddNewpluginAjax";
+
+ var bucketname = $scope.PluginbucketName
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ var data = {
+ config: arry,
+ Name: bucketname
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Bucket created.',
+ type: 'success'
+ });
+ location.reload();
+ } else {
+
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+ }
+
+ $scope.deletesPlgin = function (val) {
+
+ url = "/websites/deletesPlgin";
+
+
+ var data = {
+ pluginname: val,
+ pluginbBucketID: $('#pluginbID').html()
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ location.reload();
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+ }
+
+ $scope.Addplugin = function (slug) {
+ $('#mysearch').hide()
+
+ url = "/websites/Addplugineidt";
+
+
+ var data = {
+ pluginname: slug,
+ pluginbBucketID: $('#pluginbID').html()
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ location.reload();
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+
+ }
+
+});
+
+var domain_check = 0;
+
+function checkbox_function() {
+
+ var checkBox = document.getElementById("myCheck");
+ // Get the output text
+
+
+ // If the checkbox is checked, display the output text
+ if (checkBox.checked == true) {
+ domain_check = 0;
+ document.getElementById('Test_Domain').style.display = "block";
+ document.getElementById('Own_Domain').style.display = "none";
+
+ } else {
+ document.getElementById('Test_Domain').style.display = "none";
+ document.getElementById('Own_Domain').style.display = "block";
+ domain_check = 1;
+ }
+
+ // alert(domain_check);
+}
+
+app.controller('createWordpress', function ($scope, $http, $timeout, $compile, $window) {
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ // Password generation function
+ $scope.randomPassword = function(length) {
+ var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+";
+ var password = "";
+ for (var i = 0; i < length; i++) {
+ password += chars.charAt(Math.floor(Math.random() * chars.length));
+ }
+ return password;
+ };
+
+ // Initialize showPassword
+ $scope.showPassword = false;
+
+ var statusFile;
+
+ $scope.createWordPresssite = function () {
+
+ $scope.webSiteCreationLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+
+ $scope.currentStatus = "Starting creation..";
+
+ var apacheBackend = 0;
+
+ if ($scope.apacheBackend === true) {
+ apacheBackend = 1;
+ } else {
+ apacheBackend = 0
+ }
+
+ var package = $scope.packageForWebsite;
+ var websiteOwner = $scope.websiteOwner;
+ var WPtitle = $scope.WPtitle;
+
+ // if (domain_check == 0) {
+ // var Part2_domainNameCreate = document.getElementById('Part2_domainNameCreate').value;
+ // var domainNameCreate = document.getElementById('TestDomainNameCreate').value + Part2_domainNameCreate;
+ // }
+ // if (domain_check == 1) {
+ //
+ // var domainNameCreate = $scope.own_domainNameCreate;
+ // }
+
+ var domainNameCreate = $scope.domainNameCreate;
+
+
+ var WPUsername = $scope.WPUsername;
+ var adminEmail = $scope.adminEmail;
+ var WPPassword = $scope.WPPassword;
+ var WPVersions = $scope.WPVersions;
+ var pluginbucket = $scope.pluginbucket;
+ var autoupdates = $scope.autoupdates;
+ var pluginupdates = $scope.pluginupdates;
+ var themeupdates = $scope.themeupdates;
+
+ if (domain_check == 0) {
+
+ var path = "";
+
+ }
+ if (domain_check = 1) {
+
+ var path = $scope.installPath;
+
+ }
+
+
+ var home = "1";
+
+ if (typeof path != 'undefined') {
+ home = "0";
+ }
+
+ //alert(domainNameCreate);
+ var data = {
+
+ title: WPtitle,
+ domain: domainNameCreate,
+ WPVersion: WPVersions,
+ pluginbucket: pluginbucket,
+ adminUser: WPUsername,
+ Email: adminEmail,
+ PasswordByPass: WPPassword,
+ AutomaticUpdates: autoupdates,
+ Plugins: pluginupdates,
+ Themes: themeupdates,
+ websiteOwner: websiteOwner,
+ package: package,
+ home: home,
+ path: path,
+ apacheBackend: apacheBackend
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ var url = "/websites/submitWorpressCreation";
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.webSiteCreationLoading = true;
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ $scope.goBackDisable = false;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+ };
+ $scope.goBack = function () {
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $scope.webSiteCreationLoading = false;
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+
+});
+
+
+//........... delete wp list
+var FurlDeleteWP;
+
+function DeleteWPNow(url) {
+ FurlDeleteWP = url;
+}
+
+function FinalDeleteWPNow() {
+ window.location.href = FurlDeleteWP;
+}
+
+var DeploytoProductionID;
+
+function DeployToProductionInitial(vall) {
+ DeploytoProductionID = vall;
+}
+
+// Simplified staging domain input - checkbox functionality removed
+
+app.controller('WPsiteHome', function ($scope, $http, $timeout, $compile, $window) {
+ var CheckBoxpasssword = 0;
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.searchIndex = 0;
+
+ $(document).ready(function () {
+ var checkstatus = document.getElementById("wordpresshome");
+ if (checkstatus !== null) {
+ $scope.LoadWPdata();
+ }
+ });
+
+ $scope.LoadWPdata = function () {
+ $scope.wordpresshomeloading = false;
+ $('#wordpresshomeloading').show();
+
+ var url = "/websites/FetchWPdata";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(function(response) {
+ $scope.wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#WPVersion').text(response.data.ret_data.version);
+ if (response.data.ret_data.lscache === 1) {
+ $('#lscache').prop('checked', true);
+ }
+ if (response.data.ret_data.debugging === 1) {
+ $('#debugging').prop('checked', true);
+ }
+
+ // Set search index state
+ $scope.searchIndex = response.data.ret_data.searchIndex;
+
+ if (response.data.ret_data.maintenanceMode === 1) {
+ $('#maintenanceMode').prop('checked', true);
+ }
+ if (response.data.ret_data.wpcron === 1) {
+ $('#wpcron').prop('checked', true);
+ }
+ if (response.data.ret_data.passwordprotection == 1) {
+ var dc = '';
+ var mp = $compile(dc)($scope);
+ angular.element(document.getElementById('prsswdprodata')).append(mp);
+ CheckBoxpasssword = 1;
+ } else {
+ var dc = '';
+ $('#prsswdprodata').append(dc);
+ CheckBoxpasssword = 0;
+ }
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }, function(error) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ console.error('Failed to load WP data:', error);
+ });
+ };
+
+ $scope.UpdateWPSettings = function (setting) {
+ $scope.wordpresshomeloading = false;
+ $('#wordpresshomeloading').show();
+
+ var url = "/websites/UpdateWPSettings";
+ var data;
+
+ if (setting === "PasswordProtection") {
+ data = {
+ WPid: $('#WPid').html(),
+ setting: setting,
+ PPUsername: CheckBoxpasssword == 0 ? $scope.PPUsername : '',
+ PPPassword: CheckBoxpasssword == 0 ? $scope.PPPassword : ''
+ };
+ } else {
+ var settingValue;
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ settingValue = $scope.searchIndex;
+ } else {
+ settingValue = $('#' + setting).is(":checked") ? 1 : 0;
+ }
+ data = {
+ WPid: $('#WPid').html(),
+ setting: setting,
+ settingValue: settingValue
+ };
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(function(response) {
+ $scope.wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Updated!',
+ type: 'success'
+ });
+ if (setting === "PasswordProtection") {
+ location.reload();
+ }
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ // Revert the change on error
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ }
+ if (setting === "PasswordProtection") {
+ location.reload();
+ }
+ }
+ }, function(error) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ // Revert the change on error
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ }
+ console.error('Failed to update setting:', error);
+ });
+ };
+
+ $scope.GetCurrentPlugins = function () {
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/GetCurrentPlugins";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#PluginBody').html('');
+ var plugins = JSON.parse(response.data.plugins);
+ plugins.forEach(AddPlugins);
+
+ } else {
+ alert("Error:" + response.data.error_message)
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+
+ $scope.GetCurrentThemes = function () {
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/GetCurrentThemes";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+
+ $('#ThemeBody').html('');
+ var themes = JSON.parse(response.data.themes);
+ themes.forEach(AddThemes);
+
+ } else {
+ alert("Error:" + response.data.error_message)
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+
+ $scope.UpdatePlugins = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ pluginarray: PluginsList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/UpdatePlugins";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Updating Plugins in Background!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+
+ };
+
+ $scope.DeletePlugins = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ pluginarray: PluginsList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/DeletePlugins";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deleting Plugin in Background!',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ }
+
+ $scope.ChangeStatus = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/ChangeStatus";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Changed Plugin state Successfully !.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ }
+
+ function AddPlugins(value, index, array) {
+ var FinalMarkup = '
'
+ FinalMarkup = FinalMarkup + ' | ';
+ for (let x in value) {
+ if (x === 'status') {
+ if (value[x] === 'inactive') {
+ FinalMarkup = FinalMarkup + ' | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else if (x === 'update') {
+ if (value[x] === 'none') {
+ FinalMarkup = FinalMarkup + 'Upto Date | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else {
+ FinalMarkup = FinalMarkup + '' + value[x] + " | ";
+ }
+ }
+ FinalMarkup = FinalMarkup + ' | '
+ FinalMarkup = FinalMarkup + '
'
+ var temp = $compile(FinalMarkup)($scope)
+ AppendToTable('#PluginBody', temp)
+ }
+
+ $scope.UpdateThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ Theme: theme,
+ Themearray: ThemesList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/UpdateThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Updating Theme in background !.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+
+ };
+
+ $scope.DeleteThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ Theme: theme,
+ Themearray: ThemesList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/DeleteThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deleting Theme in Background!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+ $scope.ChangeStatusThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ theme: theme,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/StatusThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Change Theme state in Bsckground!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ };
+
+ function AddThemes(value, index, array) {
+ var FinalMarkup = ''
+ FinalMarkup = FinalMarkup + ' | ';
+ for (let x in value) {
+ if (x === 'status') {
+ if (value[x] === 'inactive') {
+ FinalMarkup = FinalMarkup + ' | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else if (x === 'update') {
+ if (value[x] === 'none') {
+ FinalMarkup = FinalMarkup + 'Upto Date | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else {
+ FinalMarkup = FinalMarkup + '' + value[x] + " | ";
+ }
+ }
+ FinalMarkup = FinalMarkup + ' | '
+ FinalMarkup = FinalMarkup + '
'
+ var temp = $compile(FinalMarkup)($scope)
+ AppendToTable('#ThemeBody', temp)
+ }
+
+ var statusFile; // Declare statusFile at controller scope
+
+ $scope.CreateStagingNow = function () {
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ $scope.currentStatus = "Starting creation Staging..";
+
+ // Get staging name
+ var stagingName = $('#stagingName').val();
+ if (!stagingName) {
+ new PNotify({
+ title: 'Error!',
+ text: 'Please enter a staging name',
+ type: 'error'
+ });
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ return;
+ }
+
+ // Get staging domain from the simplified input
+ var domainNameCreate = $('#stagingDomainName').val() || $scope.stagingDomainName;
+ if (!domainNameCreate) {
+ new PNotify({
+ title: 'Error!',
+ text: 'Please enter a staging domain',
+ type: 'error'
+ });
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ return;
+ }
+
+ var data = {
+ StagingName: stagingName,
+ StagingDomain: domainNameCreate,
+ WPid: $('#WPid').html(),
+ }
+ var url = "/websites/CreateStagingNow";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+ function getCreationStatus() {
+ $('#wordpresshomeloading').show();
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ //$('#wordpresshomeloading').hide();
+
+ if (response.data.abort === 1) {
+ if (response.data.installStatus === 1) {
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+
+ $("#installProgress").css("width", "100%");
+ $("#installProgressbackup").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+
+ } else {
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $("#installProgressbackup").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+
+ }
+
+ } else {
+
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $("#installProgressbackup").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ //$('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+ $scope.goBack = function () {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ $scope.fetchstaging = function () {
+
+ // Ensure DOM is ready
+ $timeout(function() {
+ // Check if the staging table exists
+ if ($('#StagingBody').length === 0) {
+ console.error('StagingBody table not found in DOM');
+ return;
+ }
+
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/fetchstaging";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+
+ // $('#ThemeBody').html('');
+ // var themes = JSON.parse(response.data.themes);
+ // themes.forEach(AddThemes);
+
+ $('#StagingBody').html('');
+ console.log('Staging response:', response.data);
+
+ try {
+ var staging = JSON.parse(response.data.wpsites);
+ console.log('Parsed staging data:', staging);
+
+ if (staging && staging.length > 0) {
+ staging.forEach(function(site, index) {
+ console.log('Processing staging site ' + index + ':', site);
+ AddStagings(site, index, staging);
+ });
+ } else {
+ $('#StagingBody').html('| No staging sites found |
');
+ }
+ } catch (e) {
+ console.error('Error parsing staging data:', e);
+ $('#StagingBody').html('| Error loading staging sites |
');
+ }
+
+ } else {
+ console.error("Error from server:", response.data.error_message);
+ $('#StagingBody').html('| Error: ' + response.data.error_message + ' |
');
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ console.error("Request failed:", response);
+ $('#StagingBody').html('| Failed to load staging sites |
');
+ }
+ }, 100); // Small delay to ensure DOM is ready
+
+ };
+
+ $scope.fetchDatabase = function () {
+
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/fetchDatabase";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#DB_Name').html(response.data.DataBaseName);
+ $('#DB_User').html(response.data.DataBaseUser);
+ $('#tableprefix').html(response.data.tableprefix);
+ } else {
+ alert("Error data.error_message:" + response.data.error_message)
+
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ alert("Error" + response)
+
+ }
+
+ };
+
+ $scope.SaveUpdateConfig = function () {
+ $('#wordpresshomeloading').show();
+ var data = {
+ AutomaticUpdates: $('#AutomaticUpdates').find(":selected").text(),
+ Plugins: $('#Plugins').find(":selected").text(),
+ Themes: $('#Themes').find(":selected").text(),
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/SaveUpdateConfig";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Update Configurations Sucessfully!.',
+ type: 'success'
+ });
+ $("#autoUpdateConfig").modal('hide');
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response,
+ type: 'error'
+ });
+
+ }
+ };
+
+ function AddStagings(value, index, array) {
+ console.log('Adding staging site:', value);
+
+ // Ensure all required properties exist
+ if (!value || !value.id) {
+ console.error('Invalid staging site data:', value);
+ return;
+ }
+
+ // Check if table exists
+ if ($('#StagingBody').length === 0) {
+ console.error('StagingBody table not found');
+ return;
+ }
+
+ var FinalMarkup = '';
+
+ // Add columns in correct order: Name, Domain, Path, Actions
+ FinalMarkup += '| ' + (value.name || 'Unnamed') + ' | ';
+ FinalMarkup += '' + (value.Domain || '') + ' | ';
+ FinalMarkup += '' + (value.path || '') + ' | ';
+ FinalMarkup += '' +
+ '' +
+ '' +
+ ' | ';
+
+ FinalMarkup += '
';
+
+ console.log('Appending markup to table:', FinalMarkup);
+ AppendToTable('#StagingBody', FinalMarkup);
+ console.log('Table content after append:', $('#StagingBody').html());
+ }
+
+ $scope.FinalDeployToProduction = function () {
+
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ var data = {
+ WPid: $('#WPid').html(),
+ StagingID: DeploytoProductionID
+ }
+
+ var url = "/websites/DeploytoProduction";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deploy To Production start!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response,
+ type: 'error'
+ });
+
+ }
+
+ };
+
+
+ $scope.CreateBackup = function () {
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.currentStatus = "Starting creation Backups..";
+ var data = {
+ WPid: $('#WPid').html(),
+ Backuptype: $('#backuptype').val()
+ }
+ var url = "/websites/WPCreateBackup";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Creating Backups!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ alert(response)
+
+ }
+
+ };
+
+ function getCreationStatus() {
+ $('#wordpresshomeloading').show();
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ if (response.data.abort === 1) {
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.installStatus === 1) {
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $("#installProgressbackup").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ // Re-enable buttons
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // For backup operations, refresh the backup list
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' Backup created successfully!');
+ // Clear status after 5 seconds
+ setTimeout(function() {
+ $('#backupStatus').text('');
+ }, 5000);
+ }
+ // For staging operations, refresh the staging list
+ else {
+ $('#stagingStatus').html(' Staging site created successfully!');
+ $scope.fetchstaging();
+ // Clear status after 5 seconds
+ setTimeout(function() {
+ $('#stagingStatus').text('');
+ }, 5000);
+ }
+
+ } else {
+ $('#wordpresshomeloading').hide();
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $("#installProgressbackup").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ // Re-enable buttons on error
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // Show error status
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' ' + response.data.error_message + '');
+ } else {
+ $('#stagingStatus').html(' ' + response.data.error_message + '');
+ }
+
+ }
+
+ } else {
+
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $("#installProgressbackup").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+
+ // Update status displays with progress
+ var statusHtml = ' ' + response.data.currentStatus;
+ if (response.data.installationProgress) {
+ statusHtml += ' (' + response.data.installationProgress + '%)';
+ }
+
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(statusHtml);
+ } else {
+ $('#stagingStatus').html(statusHtml);
+ }
+
+ $timeout(getCreationStatus, 1000);
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+ }
+
+ $scope.installwpcore = function () {
+
+ $('#wordpresshomeloading').show();
+ $('#wordpresshomeloadingsec').show();
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/installwpcore";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Results fetched..',
+ type: 'success'
+ });
+ $('#SecurityResult').html(response.data.result);
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ };
+
+ $scope.dataintegrity = function () {
+
+ $('#wordpresshomeloading').show();
+ $('#wordpresshomeloadingsec').show();
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/dataintegrity";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Results fetched',
+ type: 'success'
+ });
+ $('#SecurityResult').html(response.data.result);
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+ $scope.updateSetting = function(site, setting) {
+ var settingMap = {
+ 'search-indexing': 'searchIndex',
+ 'debugging': 'debugging',
+ 'password-protection': 'passwordProtection',
+ 'maintenance-mode': 'maintenanceMode'
+ };
+
+ // Toggle the state before sending request
+ site[settingMap[setting]] = site[settingMap[setting]] === 1 ? 0 : 1;
+
+ var data = {
+ siteId: site.id,
+ setting: setting,
+ value: site[settingMap[setting]]
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Setting updated successfully.',
+ type: 'success'
+ });
+ if (setting === 'password-protection' && site[settingMap[setting]] === 1) {
+ // Show password protection modal if enabling
+ site.PPUsername = "";
+ site.PPPassword = "";
+ $scope.currentWP = site;
+ $('#passwordProtectionModal').modal('show');
+ }
+ } else {
+ // Revert the change if update failed
+ site[settingMap[setting]] = site[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: response.data.error_message || 'Failed to update setting.',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ // Revert the change on error
+ site[settingMap[setting]] = site[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: 'Connection failed while updating setting.',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.submitPasswordProtection = function() {
+ console.log('submitPasswordProtection called');
+ console.log('Current WP:', $scope.currentWP);
+
+ if (!$scope.currentWP) {
+ console.error('No WordPress site selected');
+ new PNotify({
+ title: 'Error!',
+ text: 'No WordPress site selected.',
+ type: 'error'
+ });
+ return;
+ }
+
+ if (!$scope.currentWP.PPUsername || !$scope.currentWP.PPPassword) {
+ console.error('Missing username or password');
+ new PNotify({
+ title: 'Error!',
+ text: 'Please provide both username and password',
+ type: 'error'
+ });
+ return;
+ }
+
+ var data = {
+ siteId: $scope.currentWP.id,
+ setting: 'password-protection',
+ value: 1,
+ username: $scope.currentWP.PPUsername,
+ password: $scope.currentWP.PPPassword
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log('Sending request with data:', data);
+ $('#passwordProtectionModal').modal('hide');
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ console.log('Received response:', response);
+ if (response.data.status) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Password protection enabled successfully!',
+ type: 'success'
+ });
+ } else {
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to enable password protection',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ console.error('Request failed:', error);
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: 'Could not connect to server',
+ type: 'error'
+ });
+ });
+ };
+
+});
+
+
+var PluginsList = [];
+
+
+function AddPluginToArray(cBox, name) {
+ if (cBox.checked) {
+ PluginsList.push(name);
+ // alert(PluginsList);
+ } else {
+ const index = PluginsList.indexOf(name);
+ if (index > -1) {
+ PluginsList.splice(index, 1);
+ }
+ // alert(PluginsList);
+ }
+}
+
+var ThemesList = [];
+
+function AddThemeToArray(cBox, name) {
+ if (cBox.checked) {
+ ThemesList.push(name);
+ // alert(ThemesList);
+ } else {
+ const index = ThemesList.indexOf(name);
+ if (index > -1) {
+ ThemesList.splice(index, 1);
+ }
+ // alert(ThemesList);
+ }
+}
+
+
+function AppendToTable(table, markup) {
+ try {
+ if ($(table).length === 0) {
+ console.error('Table element not found:', table);
+ return false;
+ }
+
+ console.log('Appending to table:', table);
+ console.log('Markup:', markup);
+
+ $(table).append(markup);
+
+ console.log('Successfully appended. Table now has', $(table).find('tr').length, 'rows');
+ return true;
+ } catch (e) {
+ console.error('Error appending to table:', e);
+ return false;
+ }
+}
+
+
+//..................Restore Backup Home
+
+
+app.controller('RestoreWPBackup', function ($scope, $http, $timeout, $window) {
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+
+ $scope.checkmethode = function () {
+ var val = $('#RestoreMethode').children("option:selected").val();
+ if (val == 1) {
+ $('#Newsitediv').show();
+ $('#exinstingsitediv').hide();
+ } else if (val == 0) {
+ $('#exinstingsitediv').show();
+ $('#Newsitediv').hide();
+ } else {
+
+ }
+ };
+
+
+ $scope.RestoreWPbackupNow = function () {
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.currentStatus = "Start Restoring WordPress..";
+
+ var Domain = $('#wprestoresubdirdomain').val()
+ var path = $('#wprestoresubdirpath').val();
+ var home = "1";
+
+ if (typeof path != 'undefined' || path != '') {
+ home = "0";
+ }
+ if (typeof path == 'undefined') {
+ path = "";
+ }
+
+
+ var backuptype = $('#backuptype').html();
+ var data;
+ if (backuptype == "DataBase Backup") {
+ data = {
+ backupid: $('#backupid').html(),
+ DesSite: $('#DesSite').children("option:selected").val(),
+ Domain: '',
+ path: path,
+ home: home,
+ }
+ } else {
+ data = {
+ backupid: $('#backupid').html(),
+ DesSite: $('#DesSite').children("option:selected").val(),
+ Domain: Domain,
+ path: path,
+ home: home,
+ }
+
+ }
+
+ var url = "/websites/RestoreWPbackupNow";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ // console.log(data)
+
+ var d = $('#DesSite').children("option:selected").val();
+ var c = $("input[name=Newdomain]").val();
+ // if (d == -1 || c == "") {
+ // alert("Please Select Method of Backup Restore");
+ // } else {
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ // }
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Restoring process starts!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+ }
+
+ function getCreationStatus() {
+ $('#wordpresshomeloading').show();
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ if (response.data.abort === 1) {
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.installStatus === 1) {
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $("#installProgressbackup").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ // Re-enable buttons
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // For backup operations, refresh the backup list
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' Backup created successfully!');
+ if (typeof window.fetchBackupList === 'function') {
+ window.fetchBackupList();
+ }
+ // Clear status after 5 seconds
+ setTimeout(function() {
+ $('#backupStatus').text('');
+ }, 5000);
+ }
+ // For staging operations, refresh the staging list
+ else {
+ $('#stagingStatus').html(' Staging site created successfully!');
+ $scope.fetchstaging();
+ // Clear status after 5 seconds
+ setTimeout(function() {
+ $('#stagingStatus').text('');
+ }, 5000);
+ }
+
+
+ } else {
+ $('#wordpresshomeloading').hide();
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $("#installProgressbackup").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ // Re-enable buttons on error
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // Show error status
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' ' + response.data.error_message + '');
+ } else {
+ $('#stagingStatus').html(' ' + response.data.error_message + '');
+ }
+
+
+ }
+
+ } else {
+
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $("#installProgressbackup").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+
+ // Update status displays with progress
+ var statusHtml = ' ' + response.data.currentStatus;
+ if (response.data.installationProgress) {
+ statusHtml += ' (' + response.data.installationProgress + '%)';
+ }
+
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(statusHtml);
+ } else {
+ $('#stagingStatus').html(statusHtml);
+ }
+
+ $timeout(getCreationStatus, 1000);
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+ $scope.goBack = function () {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+});
+
+
+//.......................................Remote Backup
+
+//........... delete DeleteBackupConfigNow
+
+function DeleteBackupConfigNow(url) {
+ window.location.href = url;
+}
+
+function DeleteRemoteBackupsiteNow(url) {
+ window.location.href = url;
+}
+
+function DeleteBackupfileConfigNow(url) {
+ window.location.href = url;
+}
+
+
+app.controller('RemoteBackupConfig', function ($scope, $http, $timeout, $window) {
+ $scope.RemoteBackupLoading = true;
+ $scope.SFTPBackUpdiv = true;
+
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ $scope.SelectRemoteBackuptype = function () {
+ var val = $scope.RemoteBackuptype;
+ if (val == "SFTP") {
+ $scope.SFTPBackUpdiv = false;
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ } else if (val == "S3") {
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = false;
+ $scope.S3keyNamediv = false;
+ $scope.Accesskeydiv = false;
+ $scope.SecretKeydiv = false;
+ $scope.SFTPBackUpdiv = true;
+ } else {
+ $scope.RemoteBackupLoading = true;
+ $scope.SFTPBackUpdiv = true;
+
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ }
+ }
+
+ $scope.SelectProvidertype = function () {
+ $scope.EndpointURLdiv = true;
+ var provider = $scope.Providervalue
+ if (provider == 'Backblaze') {
+ $scope.EndpointURLdiv = false;
+ } else {
+ $scope.EndpointURLdiv = true;
+ }
+ }
+
+ $scope.SaveBackupConfig = function () {
+ $scope.RemoteBackupLoading = false;
+ var Hname = $scope.Hostname;
+ var Uname = $scope.Username;
+ var Passwd = $scope.Password;
+ var path = $scope.path;
+ var type = $scope.RemoteBackuptype;
+ var Providervalue = $scope.Providervalue;
+ var data;
+ if (type == "SFTP") {
+
+ data = {
+ Hname: Hname,
+ Uname: Uname,
+ Passwd: Passwd,
+ path: path,
+ type: type
+ }
+ } else if (type == "S3") {
+ if (Providervalue == "Backblaze") {
+ data = {
+ S3keyname: $scope.S3keyName,
+ Provider: Providervalue,
+ AccessKey: $scope.Accesskey,
+ SecertKey: $scope.SecretKey,
+ EndUrl: $scope.EndpointURL,
+ type: type
+ }
+ } else {
+ data = {
+ S3keyname: $scope.S3keyName,
+ Provider: Providervalue,
+ AccessKey: $scope.Accesskey,
+ SecertKey: $scope.SecretKey,
+ type: type
+ }
+
+ }
+
+ }
+ var url = "/websites/SaveBackupConfig";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ }
+
+});
+
+var UpdatescheduleID;
+app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) {
+ $scope.BackupScheduleLoading = true;
+ $scope.SaveBackupSchedule = function () {
+ $scope.RemoteBackupLoading = false;
+ var FileRetention = $scope.Fretention;
+ var Backfrequency = $scope.Bfrequency;
+
+
+ var data = {
+ FileRetention: FileRetention,
+ Backfrequency: Backfrequency,
+ ScheduleName: $scope.ScheduleName,
+ RemoteConfigID: $('#RemoteConfigID').html(),
+ BackupType: $scope.BackupType
+ }
+ var url = "/websites/SaveBackupSchedule";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ };
+
+
+ $scope.getupdateid = function (ID) {
+ UpdatescheduleID = ID;
+ }
+
+ $scope.UpdateRemoteschedules = function () {
+ $scope.RemoteBackupLoading = false;
+ var Frequency = $scope.RemoteFrequency;
+ var fretention = $scope.RemoteFileretention;
+
+ var data = {
+ ScheduleID: UpdatescheduleID,
+ Frequency: Frequency,
+ FileRetention: fretention
+ }
+ var url = "/websites/UpdateRemoteschedules";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Updated!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+ };
+
+ $scope.AddWPsiteforRemoteBackup = function () {
+ $scope.RemoteBackupLoading = false;
+
+
+ var data = {
+ WpsiteID: $('#Wpsite').val(),
+ RemoteScheduleID: $('#RemoteScheduleID').html()
+ }
+ var url = "/websites/AddWPsiteforRemoteBackup";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ };
+});
/* Java script code to create account */
+
+var website_create_domain_check = 0;
+
+function website_create_checkbox_function() {
+
+ var checkBox = document.getElementById("myCheck");
+ // Get the output text
+
+
+ // If the checkbox is checked, display the output text
+ if (checkBox.checked == true) {
+ website_create_domain_check = 0;
+ document.getElementById('Website_Create_Test_Domain').style.display = "block";
+ document.getElementById('Website_Create_Own_Domain').style.display = "none";
+
+ } else {
+ document.getElementById('Website_Create_Test_Domain').style.display = "none";
+ document.getElementById('Website_Create_Own_Domain').style.display = "block";
+ website_create_domain_check = 1;
+ }
+
+ // alert(domain_check);
+}
+
+
+/* Java script code to create account ends here */
+
+/* Java script code to list accounts */
+
+$("#listFail").hide();
+
+
+app.controller('listWebsites', function ($scope, $http, $window) {
+ $scope.web = {};
+ $scope.WebSitesList = [];
+ $scope.loading = true; // Add loading state
+ $scope.expandedSites = {}; // Track which sites are expanded
+
+ $scope.currentPage = 1;
+ $scope.recordsToShow = 10;
+
+ // Function to toggle site expansion
+ $scope.toggleSite = function(site) {
+ if (!$scope.expandedSites[site.domain]) {
+ $scope.expandedSites[site.domain] = true;
+ site.loading = true;
+ // You can add any data fetching logic here if needed
+ setTimeout(function() {
+ site.loading = false;
+ $scope.$apply();
+ }, 500);
+ } else {
+ $scope.expandedSites[site.domain] = false;
+ }
+ };
+
+ // Function to check if site is expanded
+ $scope.isExpanded = function(siteId) {
+ return $scope.expandedSites[siteId];
+ };
+
+ // Function to check if site data is loaded
+ $scope.isDataLoaded = function(site) {
+ return site.version !== undefined;
+ };
+
+ // Function to get SSL tooltip text
+ $scope.getSslTooltip = function(web) {
+ if (!web.ssl) return '';
+
+ var tooltip = '';
+ if (web.ssl.issuer && web.ssl.issuer !== '') {
+ tooltip += 'Issuer: ' + web.ssl.issuer;
+ }
+
+ if (web.ssl.days !== undefined) {
+ if (tooltip) tooltip += ' | ';
+ if (web.ssl.days < 0) {
+ tooltip += 'Expired ' + Math.abs(web.ssl.days) + ' days ago';
+ } else {
+ tooltip += 'Valid for ' + web.ssl.days + ' days';
+ }
+ }
+
+ if (web.ssl.is_wildcard) {
+ if (tooltip) tooltip += ' | ';
+ tooltip += 'Wildcard Certificate';
+ }
+
+ if (web.ssl.status === 'none') {
+ tooltip = 'No SSL certificate installed. Click "Issue SSL" to secure this site.';
+ } else if (web.ssl.status === 'self-signed') {
+ tooltip = 'Self-signed certificate detected. Not trusted by browsers.';
+ }
+
+ return tooltip;
+ };
+
+ // Initial fetch of websites
+ $scope.getFurtherWebsitesFromDB = function () {
+ $scope.loading = true; // Set loading to true when starting fetch
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ page: $scope.currentPage,
+ recordsToShow: $scope.recordsToShow
+ };
+
+ var dataurl = "/websites/fetchWebsitesList";
+
+ $http.post(dataurl, data, config).then(function(response) {
+ if (response.data.listWebSiteStatus === 1) {
+ $scope.WebSitesList = JSON.parse(response.data.data);
+ $scope.pagination = response.data.pagination;
+ $("#listFail").hide();
+ // Expand the first site by default
+ if ($scope.WebSitesList.length > 0) {
+ $scope.expandedSites[$scope.WebSitesList[0].domain] = true;
+ }
+ } else {
+ $("#listFail").fadeIn();
+ $scope.errorMessage = response.data.error_message;
+ }
+ $scope.loading = false; // Set loading to false when done
+ }).catch(function(error) {
+ $("#listFail").fadeIn();
+ $scope.errorMessage = error.message || 'An error occurred while fetching websites';
+ $scope.loading = false; // Set loading to false on error
+ });
+ };
+
+ // Call it immediately
+ $scope.getFurtherWebsitesFromDB();
+
+ $scope.showWPSites = function(domain) {
+ console.log('showWPSites called for domain:', domain);
+
+ // Make sure domain is defined
+ if (!domain) {
+ console.error('Domain is undefined');
+ return;
+ }
+
+ // Find the website in the list
+ var site = $scope.WebSitesList.find(function(website) {
+ return website.domain === domain;
+ });
+
+ if (!site) {
+ console.error('Website not found:', domain);
+ return;
+ }
+
+ // Set loading state
+ site.loadingWPSites = true;
+
+ // Toggle visibility
+ site.showWPSites = !site.showWPSites;
+
+ // If we're hiding, just return
+ if (!site.showWPSites) {
+ site.loadingWPSites = false;
+ return;
+ }
+
+ var config = {
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = $.param({
+ domain: domain
+ });
+
+ $http.post('/websites/fetchWPDetails', data, config)
+ .then(function(response) {
+ console.log('Response received:', response);
+ if (response.data.status === 1 && response.data.fetchStatus === 1) {
+ site.wp_sites = response.data.sites || [];
+ // Initialize loading states for each WP site
+ site.wp_sites.forEach(function(wp) {
+ wp.loading = false;
+ wp.loadingPlugins = false;
+ wp.loadingTheme = false;
+ });
+ $("#listFail").hide();
+ } else {
+ $("#listFail").fadeIn();
+ site.showWPSites = false;
+ $scope.errorMessage = response.data.error_message || 'Failed to fetch WordPress sites';
+ console.error('Error in response:', response.data.error_message);
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to fetch WordPress sites',
+ type: 'error'
+ });
+ }
+ })
+ .catch(function(error) {
+ console.error('Request failed:', error);
+ site.showWPSites = false;
+ $("#listFail").fadeIn();
+ $scope.errorMessage = error.message || 'An error occurred while fetching WordPress sites';
+ new PNotify({
+ title: 'Error!',
+ text: error.message || 'Could not connect to server',
+ type: 'error'
+ });
+ })
+ .finally(function() {
+ site.loadingWPSites = false;
+ });
+ };
+
+ $scope.visitSite = function(wp) {
+ var url = wp.url || wp.domain;
+ if (!url) return;
+ if (!url.startsWith('http://') && !url.startsWith('https://')) {
+ url = 'https://' + url;
+ }
+ window.open(url, '_blank');
+ };
+
+ $scope.wpLogin = function(wpId) {
+ window.open('/websites/AutoLogin?id=' + wpId, '_blank');
+ };
+
+ $scope.manageWP = function(wpId) {
+ window.location.href = '/websites/WPHome?ID=' + wpId;
+ };
+
+ $scope.deleteWPSite = function(wp) {
+ if (confirm('Are you sure you want to delete this WordPress site? This action cannot be undone.')) {
+ window.location.href = '/websites/ListWPSites?DeleteID=' + wp.id;
+ }
+ };
+
+ $scope.getFullUrl = function(url) {
+ console.log('getFullUrl called with:', url);
+ if (!url) {
+ // If no URL is provided, try to use the domain
+ if (this.wp && this.wp.domain) {
+ url = this.wp.domain;
+ } else {
+ return '';
+ }
+ }
+ if (url.startsWith('http://') || url.startsWith('https://')) {
+ return url;
+ }
+ return 'https://' + url;
+ };
+
+
+ $scope.updateSetting = function(wp, setting) {
+ var settingMap = {
+ 'search-indexing': 'searchIndex',
+ 'debugging': 'debugging',
+ 'password-protection': 'passwordProtection',
+ 'maintenance-mode': 'maintenanceMode'
+ };
+
+ // Toggle the state before sending request
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+
+ var data = {
+ siteId: wp.id,
+ setting: setting,
+ value: wp[settingMap[setting]]
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Setting updated successfully.',
+ type: 'success'
+ });
+ if (setting === 'password-protection' && wp[settingMap[setting]] === 1) {
+ // Show password protection modal if enabling
+ wp.PPUsername = "";
+ wp.PPPassword = "";
+ $scope.currentWP = wp;
+ $('#passwordProtectionModal').modal('show');
+ }
+ } else {
+ // Revert the change if update failed
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: response.data.error_message || 'Failed to update setting.',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ // Revert the change on error
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: 'Connection failed while updating setting.',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.UpdateWPSettings = function(wp) {
+ $('#wordpresshomeloading').show();
+
+ var url = "/websites/UpdateWPSettings";
+ var data = {};
+
+ if (wp.setting === "PasswordProtection") {
+ data = {
+ wpID: wp.id,
+ setting: wp.setting,
+ PPUsername: wp.PPUsername,
+ PPPassword: wp.PPPassword
+ };
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken'),
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ transformRequest: function(obj) {
+ var str = [];
+ for(var p in obj)
+ str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
+ return str.join("&");
+ }
+ };
+
+ $http.post(url, data, config).then(function(response) {
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Updated!',
+ type: 'success'
+ });
+ if (wp.setting === "PasswordProtection") {
+ location.reload();
+ }
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ if (wp.setting === "PasswordProtection") {
+ location.reload();
+ }
+ }
+ }, function(error) {
+ $('#wordpresshomeloading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.togglePasswordProtection = function(wp) {
+ console.log('togglePasswordProtection called for:', wp);
+ console.log('Current password protection state:', wp.passwordProtection);
+
+ if (wp.passwordProtection) {
+ // Show modal for credentials
+ console.log('Showing modal for credentials');
+ wp.PPUsername = "";
+ wp.PPPassword = "";
+ $scope.currentWP = wp;
+ console.log('Current WP set to:', $scope.currentWP);
+ $('#passwordProtectionModal').modal('show');
+ } else {
+ // Disable password protection
+ console.log('Disabling password protection');
+ var data = {
+ siteId: wp.id,
+ setting: 'password-protection',
+ value: 0
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log('Sending request with data:', data);
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ console.log('Received response:', response);
+ if (!response.data.status) {
+ wp.passwordProtection = !wp.passwordProtection;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message || 'Failed to disable password protection',
+ type: 'error'
+ });
+ } else {
+ new PNotify({
+ title: 'Success!',
+ text: 'Password protection disabled successfully.',
+ type: 'success'
+ });
+ }
+ }).catch(function(error) {
+ console.error('Request failed:', error);
+ wp.passwordProtection = !wp.passwordProtection;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server.',
+ type: 'error'
+ });
+ });
+ }
+ };
+
+ $scope.submitPasswordProtection = function() {
+ console.log('submitPasswordProtection called');
+ console.log('Current WP:', $scope.currentWP);
+
+ if (!$scope.currentWP) {
+ console.error('No WordPress site selected');
+ new PNotify({
+ title: 'Error!',
+ text: 'No WordPress site selected.',
+ type: 'error'
+ });
+ return;
+ }
+
+ if (!$scope.currentWP.PPUsername || !$scope.currentWP.PPPassword) {
+ console.error('Missing username or password');
+ new PNotify({
+ title: 'Error!',
+ text: 'Please provide both username and password',
+ type: 'error'
+ });
+ return;
+ }
+
+ var data = {
+ siteId: $scope.currentWP.id,
+ setting: 'password-protection',
+ value: 1,
+ username: $scope.currentWP.PPUsername,
+ password: $scope.currentWP.PPPassword
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log('Sending request with data:', data);
+ $('#passwordProtectionModal').modal('hide');
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ console.log('Received response:', response);
+ if (response.data.status) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Password protection enabled successfully!',
+ type: 'success'
+ });
+ } else {
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to enable password protection',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ console.error('Request failed:', error);
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: 'Could not connect to server',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.cyberPanelLoading = true;
+
+ $scope.issueSSL = function (virtualHost) {
+ $scope.cyberPanelLoading = false;
+
+ var url = "/manageSSL/issueSSL";
+
+
+ var data = {
+ virtualHost: virtualHost
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.cyberPanelLoading = true;
+ if (response.data.SSL === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'SSL successfully issued.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.cyberPanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page',
+ type: 'error'
+ });
+ }
+
+
+ };
+
+ $scope.cyberPanelLoading = true;
+
+ $scope.searchWebsites = function () {
+ $scope.loading = true; // Set loading to true when starting search
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ patternAdded: $scope.patternAdded
+ };
+
+ dataurl = "/websites/searchWebsites";
+
+ $http.post(dataurl, data, config).then(function(response) {
+ if (response.data.listWebSiteStatus === 1) {
+ var finalData = JSON.parse(response.data.data);
+ $scope.WebSitesList = finalData;
+ $("#listFail").hide();
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ $scope.loading = false; // Set loading to false when done
+ }).catch(function(error) {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Connect disrupted, refresh the page.',
+ type: 'error'
+ });
+ $scope.loading = false; // Set loading to false on error
+ });
+ };
+
+ $scope.ScanWordpressSite = function () {
+
+ $('#cyberPanelLoading').show();
+
+
+ var url = "/websites/ScanWordpressSite";
+
+ var data = {}
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ $('#cyberPanelLoading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#cyberPanelLoading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ };
+
+ $scope.goToManage = function($event, domain) {
+ $event.stopPropagation();
+ window.location = '/websites/' + domain;
+ };
+
+ $scope.goToFileManager = function($event, domain) {
+ $event.stopPropagation();
+ window.location = '/filemanager/' + domain;
+ };
+
+});
+
+/**
+ * Created by usman on 7/26/17.
+ */
+function getCookie(name) {
+ var cookieValue = null;
+ var t = document.cookie;
+ if (document.cookie && document.cookie !== '') {
+ var cookies = document.cookie.split(';');
+ for (var i = 0; i < cookies.length; i++) {
+ var cookie = jQuery.trim(cookies[i]);
+ // Does this cookie string begin with the name we want?
+ if (cookie.substring(0, name.length + 1) === (name + '=')) {
+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
+ break;
+ }
+ }
+ }
+ return cookieValue;
+}
+
+
+var arry = []
+
+function selectpluginJs(val) {
+ $('#mysearch').hide()
+ arry.push(val)
+
+ // console.log(arry)
+ document.getElementById('selJS').innerHTML = "";
+
+ for (var i = 0; i < arry.length; i++) {
+ $('#selJS').show()
+ var mlm = ' ' + arry[i] + '    '
+ $('#selJS').append(mlm)
+ }
+
+
+}
+
+
+var DeletePluginURL;
+
+function DeletePluginBuucket(url) {
+ DeletePluginURL = url;
+}
+
+function FinalDeletePluginBuucket() {
+ window.location.href = DeletePluginURL;
+}
+
+var SPVal;
+
+app.controller('WPAddNewPlugin', function ($scope, $http, $timeout, $window, $compile) {
+ $scope.webSiteCreationLoading = true;
+
+ $scope.SearchPluginName = function (val) {
+ $scope.webSiteCreationLoading = false;
+ SPVal = val;
+ url = "/websites/SearchOnkeyupPlugin";
+
+ var searchcontent = $scope.searchcontent;
+
+
+ var data = {
+ pluginname: searchcontent
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.webSiteCreationLoading = true;
+
+ if (response.data.status === 1) {
+ if (SPVal == 'add') {
+ $('#mysearch').show()
+ document.getElementById('mysearch').innerHTML = "";
+ var res = response.data.plugns.plugins
+ // console.log(res);
+ for (i = 0; i <= res.length; i++) {
+ //
+ var tml = '
';
+ $('#mysearch').append(tml);
+ }
+ } else if (SPVal == 'eidt') {
+ $('#mysearch').show()
+ document.getElementById('mysearch').innerHTML = "";
+ var res = response.data.plugns.plugins
+ // console.log(res);
+ for (i = 0; i <= res.length; i++) {
+ //
+ var tml = '
';
+ var temp = $compile(tml)($scope)
+ angular.element(document.getElementById('mysearch')).append(temp);
+ }
+
+ }
+
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+ }
+
+ $scope.AddNewplugin = function () {
+
+ url = "/websites/AddNewpluginAjax";
+
+ var bucketname = $scope.PluginbucketName
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ var data = {
+ config: arry,
+ Name: bucketname
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Bucket created.',
+ type: 'success'
+ });
+ location.reload();
+ } else {
+
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+ }
+
+ $scope.deletesPlgin = function (val) {
+
+ url = "/websites/deletesPlgin";
+
+
+ var data = {
+ pluginname: val,
+ pluginbBucketID: $('#pluginbID').html()
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ location.reload();
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+ }
+
+ $scope.Addplugin = function (slug) {
+ $('#mysearch').hide()
+
+ url = "/websites/Addplugineidt";
+
+
+ var data = {
+ pluginname: slug,
+ pluginbBucketID: $('#pluginbID').html()
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ location.reload();
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+
+ }
+
+});
+
+var domain_check = 0;
+
+function checkbox_function() {
+
+ var checkBox = document.getElementById("myCheck");
+ // Get the output text
+
+
+ // If the checkbox is checked, display the output text
+ if (checkBox.checked == true) {
+ domain_check = 0;
+ document.getElementById('Test_Domain').style.display = "block";
+ document.getElementById('Own_Domain').style.display = "none";
+
+ } else {
+ document.getElementById('Test_Domain').style.display = "none";
+ document.getElementById('Own_Domain').style.display = "block";
+ domain_check = 1;
+ }
+
+ // alert(domain_check);
+}
+
+app.controller('createWordpress', function ($scope, $http, $timeout, $compile, $window) {
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ // Password generation function
+ $scope.randomPassword = function(length) {
+ var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+";
+ var password = "";
+ for (var i = 0; i < length; i++) {
+ password += chars.charAt(Math.floor(Math.random() * chars.length));
+ }
+ return password;
+ };
+
+ // Initialize showPassword
+ $scope.showPassword = false;
+
+ var statusFile;
+
+ $scope.createWordPresssite = function () {
+
+ $scope.webSiteCreationLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+
+ $scope.currentStatus = "Starting creation..";
+
+ var apacheBackend = 0;
+
+ if ($scope.apacheBackend === true) {
+ apacheBackend = 1;
+ } else {
+ apacheBackend = 0
+ }
+
+ var package = $scope.packageForWebsite;
+ var websiteOwner = $scope.websiteOwner;
+ var WPtitle = $scope.WPtitle;
+
+ // if (domain_check == 0) {
+ // var Part2_domainNameCreate = document.getElementById('Part2_domainNameCreate').value;
+ // var domainNameCreate = document.getElementById('TestDomainNameCreate').value + Part2_domainNameCreate;
+ // }
+ // if (domain_check == 1) {
+ //
+ // var domainNameCreate = $scope.own_domainNameCreate;
+ // }
+
+ var domainNameCreate = $scope.domainNameCreate;
+
+
+ var WPUsername = $scope.WPUsername;
+ var adminEmail = $scope.adminEmail;
+ var WPPassword = $scope.WPPassword;
+ var WPVersions = $scope.WPVersions;
+ var pluginbucket = $scope.pluginbucket;
+ var autoupdates = $scope.autoupdates;
+ var pluginupdates = $scope.pluginupdates;
+ var themeupdates = $scope.themeupdates;
+
+ if (domain_check == 0) {
+
+ var path = "";
+
+ }
+ if (domain_check = 1) {
+
+ var path = $scope.installPath;
+
+ }
+
+
+ var home = "1";
+
+ if (typeof path != 'undefined') {
+ home = "0";
+ }
+
+ //alert(domainNameCreate);
+ var data = {
+
+ title: WPtitle,
+ domain: domainNameCreate,
+ WPVersion: WPVersions,
+ pluginbucket: pluginbucket,
+ adminUser: WPUsername,
+ Email: adminEmail,
+ PasswordByPass: WPPassword,
+ AutomaticUpdates: autoupdates,
+ Plugins: pluginupdates,
+ Themes: themeupdates,
+ websiteOwner: websiteOwner,
+ package: package,
+ home: home,
+ path: path,
+ apacheBackend: apacheBackend
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ var url = "/websites/submitWorpressCreation";
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.webSiteCreationLoading = true;
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ $scope.goBackDisable = false;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+ };
+ $scope.goBack = function () {
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $scope.webSiteCreationLoading = false;
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+
+});
+
+
+//........... delete wp list
+var FurlDeleteWP;
+
+function DeleteWPNow(url) {
+ FurlDeleteWP = url;
+}
+
+function FinalDeleteWPNow() {
+ window.location.href = FurlDeleteWP;
+}
+
+var DeploytoProductionID;
+
+function DeployToProductionInitial(vall) {
+ DeploytoProductionID = vall;
+}
+
+// Simplified staging domain input - checkbox functionality removed
+
+app.controller('WPsiteHome', function ($scope, $http, $timeout, $compile, $window) {
+ var CheckBoxpasssword = 0;
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.searchIndex = 0;
+
+ $(document).ready(function () {
+ var checkstatus = document.getElementById("wordpresshome");
+ if (checkstatus !== null) {
+ $scope.LoadWPdata();
+ }
+ });
+
+ $scope.LoadWPdata = function () {
+ $scope.wordpresshomeloading = false;
+ $('#wordpresshomeloading').show();
+
+ var url = "/websites/FetchWPdata";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(function(response) {
+ $scope.wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#WPVersion').text(response.data.ret_data.version);
+ if (response.data.ret_data.lscache === 1) {
+ $('#lscache').prop('checked', true);
+ }
+ if (response.data.ret_data.debugging === 1) {
+ $('#debugging').prop('checked', true);
+ }
+
+ // Set search index state
+ $scope.searchIndex = response.data.ret_data.searchIndex;
+
+ if (response.data.ret_data.maintenanceMode === 1) {
+ $('#maintenanceMode').prop('checked', true);
+ }
+ if (response.data.ret_data.wpcron === 1) {
+ $('#wpcron').prop('checked', true);
+ }
+ if (response.data.ret_data.passwordprotection == 1) {
+ var dc = '';
+ var mp = $compile(dc)($scope);
+ angular.element(document.getElementById('prsswdprodata')).append(mp);
+ CheckBoxpasssword = 1;
+ } else {
+ var dc = '';
+ $('#prsswdprodata').append(dc);
+ CheckBoxpasssword = 0;
+ }
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }, function(error) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ console.error('Failed to load WP data:', error);
+ });
+ };
+
+ $scope.UpdateWPSettings = function (setting) {
+ $scope.wordpresshomeloading = false;
+ $('#wordpresshomeloading').show();
+
+ var url = "/websites/UpdateWPSettings";
+ var data;
+
+ if (setting === "PasswordProtection") {
+ data = {
+ WPid: $('#WPid').html(),
+ setting: setting,
+ PPUsername: CheckBoxpasssword == 0 ? $scope.PPUsername : '',
+ PPPassword: CheckBoxpasssword == 0 ? $scope.PPPassword : ''
+ };
+ } else {
+ var settingValue;
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ settingValue = $scope.searchIndex;
+ } else {
+ settingValue = $('#' + setting).is(":checked") ? 1 : 0;
+ }
+ data = {
+ WPid: $('#WPid').html(),
+ setting: setting,
+ settingValue: settingValue
+ };
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(function(response) {
+ $scope.wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Updated!',
+ type: 'success'
+ });
+ if (setting === "PasswordProtection") {
+ location.reload();
+ }
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ // Revert the change on error
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ }
+ if (setting === "PasswordProtection") {
+ location.reload();
+ }
+ }
+ }, function(error) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ // Revert the change on error
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ }
+ console.error('Failed to update setting:', error);
+ });
+ };
+
+ $scope.GetCurrentPlugins = function () {
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/GetCurrentPlugins";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#PluginBody').html('');
+ var plugins = JSON.parse(response.data.plugins);
+ plugins.forEach(AddPlugins);
+
+ } else {
+ alert("Error:" + response.data.error_message)
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+
+ $scope.GetCurrentThemes = function () {
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/GetCurrentThemes";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+
+ $('#ThemeBody').html('');
+ var themes = JSON.parse(response.data.themes);
+ themes.forEach(AddThemes);
+
+ } else {
+ alert("Error:" + response.data.error_message)
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+
+ $scope.UpdatePlugins = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ pluginarray: PluginsList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/UpdatePlugins";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Updating Plugins in Background!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+
+ };
+
+ $scope.DeletePlugins = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ pluginarray: PluginsList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/DeletePlugins";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deleting Plugin in Background!',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ }
+
+ $scope.ChangeStatus = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/ChangeStatus";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Changed Plugin state Successfully !.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ }
+
+ function AddPlugins(value, index, array) {
+ var FinalMarkup = ''
+ FinalMarkup = FinalMarkup + ' | ';
+ for (let x in value) {
+ if (x === 'status') {
+ if (value[x] === 'inactive') {
+ FinalMarkup = FinalMarkup + ' | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else if (x === 'update') {
+ if (value[x] === 'none') {
+ FinalMarkup = FinalMarkup + 'Upto Date | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else {
+ FinalMarkup = FinalMarkup + '' + value[x] + " | ";
+ }
+ }
+ FinalMarkup = FinalMarkup + ' | '
+ FinalMarkup = FinalMarkup + '
'
+ var temp = $compile(FinalMarkup)($scope)
+ AppendToTable('#PluginBody', temp)
+ }
+
+ $scope.UpdateThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ Theme: theme,
+ Themearray: ThemesList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/UpdateThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Updating Theme in background !.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+
+ };
+
+ $scope.DeleteThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ Theme: theme,
+ Themearray: ThemesList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/DeleteThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deleting Theme in Background!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+ $scope.ChangeStatusThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ theme: theme,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/StatusThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Change Theme state in Bsckground!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ };
+
+ function AddThemes(value, index, array) {
+ var FinalMarkup = ''
+ FinalMarkup = FinalMarkup + ' | ';
+ for (let x in value) {
+ if (x === 'status') {
+ if (value[x] === 'inactive') {
+ FinalMarkup = FinalMarkup + ' | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else if (x === 'update') {
+ if (value[x] === 'none') {
+ FinalMarkup = FinalMarkup + 'Upto Date | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else {
+ FinalMarkup = FinalMarkup + '' + value[x] + " | ";
+ }
+ }
+ FinalMarkup = FinalMarkup + ' | '
+ FinalMarkup = FinalMarkup + '
'
+ var temp = $compile(FinalMarkup)($scope)
+ AppendToTable('#ThemeBody', temp)
+ }
+
+ $scope.CreateStagingNow = function () {
+ $('#wordpresshomeloading').show();
+ $('#stagingStatus').html(' Starting staging site creation...');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', true).html(' Creating Staging Site...');
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+
+ $scope.currentStatus = "Starting creation Staging..";
+
+ // Get the staging domain from the simplified input
+ var domainNameCreate = $('#stagingDomainName').val() || $scope.stagingDomainName;
+ var data = {
+ StagingName: $('#stagingName').val(),
+ StagingDomain: domainNameCreate,
+ WPid: $('#WPid').html(),
+ }
+ var url = "/websites/CreateStagingNow";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+ $('#stagingStatus').html(' ' + response.data.error_message + '');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#stagingStatus').html(' Could not connect to server');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+ function getCreationStatus() {
+ $('#wordpresshomeloading').show();
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ //$('#wordpresshomeloading').hide();
+
+ if (response.data.abort === 1) {
+ if (response.data.installStatus === 1) {
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+
+ $("#installProgress").css("width", "100%");
+ $("#installProgressbackup").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+
+ } else {
+ $('#wordpresshomeloading').hide();
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $("#installProgressbackup").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ // Re-enable buttons on error
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // Show error status
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' ' + response.data.error_message + '');
+ } else {
+ $('#stagingStatus').html(' ' + response.data.error_message + '');
+ }
+
+
+ }
+
+ } else {
+
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $("#installProgressbackup").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+
+ // Update status displays with progress
+ var statusHtml = ' ' + response.data.currentStatus;
+ if (response.data.installationProgress) {
+ statusHtml += ' (' + response.data.installationProgress + '%)';
+ }
+
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(statusHtml);
+ } else {
+ $('#stagingStatus').html(statusHtml);
+ }
+
+ $timeout(getCreationStatus, 1000);
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+ $scope.goBack = function () {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ $scope.fetchstaging = function () {
+
+ // Ensure DOM is ready
+ $timeout(function() {
+ // Check if the staging table exists
+ if ($('#StagingBody').length === 0) {
+ console.error('StagingBody table not found in DOM');
+ return;
+ }
+
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/fetchstaging";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+
+ // $('#ThemeBody').html('');
+ // var themes = JSON.parse(response.data.themes);
+ // themes.forEach(AddThemes);
+
+ $('#StagingBody').html('');
+ console.log('Staging response:', response.data);
+
+ try {
+ var staging = JSON.parse(response.data.wpsites);
+ console.log('Parsed staging data:', staging);
+
+ if (staging && staging.length > 0) {
+ staging.forEach(function(site, index) {
+ console.log('Processing staging site ' + index + ':', site);
+ AddStagings(site, index, staging);
+ });
+ } else {
+ $('#StagingBody').html('| No staging sites found |
');
+ }
+ } catch (e) {
+ console.error('Error parsing staging data:', e);
+ $('#StagingBody').html('| Error loading staging sites |
');
+ }
+
+ } else {
+ console.error("Error from server:", response.data.error_message);
+ $('#StagingBody').html('| Error: ' + response.data.error_message + ' |
');
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ console.error("Request failed:", response);
+ $('#StagingBody').html('| Failed to load staging sites |
');
+ }
+ }, 100); // Small delay to ensure DOM is ready
+
+ };
+
+ $scope.fetchDatabase = function () {
+
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/fetchDatabase";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#DB_Name').html(response.data.DataBaseName);
+ $('#DB_User').html(response.data.DataBaseUser);
+ $('#tableprefix').html(response.data.tableprefix);
+ } else {
+ alert("Error data.error_message:" + response.data.error_message)
+
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ alert("Error" + response)
+
+ }
+
+ };
+
+ $scope.SaveUpdateConfig = function () {
+ $('#wordpresshomeloading').show();
+ var data = {
+ AutomaticUpdates: $('#AutomaticUpdates').find(":selected").text(),
+ Plugins: $('#Plugins').find(":selected").text(),
+ Themes: $('#Themes').find(":selected").text(),
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/SaveUpdateConfig";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Update Configurations Sucessfully!.',
+ type: 'success'
+ });
+ $("#autoUpdateConfig").modal('hide');
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response,
+ type: 'error'
+ });
+
+ }
+ };
+
+ function AddStagings(value, index, array) {
+ console.log('AddStagings function called with:', value);
+
+ // Check if table element exists
+ if ($('#stagingListBody').length === 0) {
+ console.error('stagingListBody not found! Looking for StagingBody...');
+ if ($('#StagingBody').length > 0) {
+ console.log('Found StagingBody, using that instead');
+ var tableSelector = '#StagingBody';
+ } else {
+ console.error('Neither stagingListBody nor StagingBody found!');
+ console.log('Available table bodies:', $('tbody').map(function() { return this.id; }).get());
+ return;
+ }
+ } else {
+ var tableSelector = '#stagingListBody';
+ }
+
+ var stagingUrl = 'http://' + value.Domain;
+ var createdDate = new Date().toLocaleDateString();
+
+ var FinalMarkup = '';
+ FinalMarkup += '| ' + value.name + ' | ';
+ FinalMarkup += '' + stagingUrl + ' | ';
+ FinalMarkup += '' + createdDate + ' | ';
+ FinalMarkup += '';
+ FinalMarkup += ' ';
+ FinalMarkup += '';
+ FinalMarkup += ' | ';
+ FinalMarkup += '
';
+
+ console.log('Appending to:', tableSelector);
+ $(tableSelector).append(FinalMarkup);
+ console.log('Rows in table after append:', $(tableSelector).find('tr').length);
+ }
+
+ $scope.FinalDeployToProduction = function () {
+
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ var data = {
+ WPid: $('#WPid').html(),
+ StagingID: DeploytoProductionID
+ }
+
+ var url = "/websites/DeploytoProduction";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deploy To Production start!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response,
+ type: 'error'
+ });
+
+ }
+
+ };
+
+
+ $scope.CreateBackup = function () {
+ $('#wordpresshomeloading').show();
+ $('#createbackupbutton').prop('disabled', true).html(' Creating Backup...');
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.currentStatus = "Starting creation Backups..";
+ var data = {
+ WPid: $('#WPid').html(),
+ Backuptype: $('#backuptype').val()
+ }
+ var url = "/websites/WPCreateBackup";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Creating Backups!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ alert(response)
+
+ }
+
+ };
+
+
+ $scope.installwpcore = function () {
+
+ $('#wordpresshomeloading').show();
+ $('#wordpresshomeloadingsec').show();
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/installwpcore";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Results fetched..',
+ type: 'success'
+ });
+ $('#SecurityResult').html(response.data.result);
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ };
+
+ $scope.dataintegrity = function () {
+
+ $('#wordpresshomeloading').show();
+ $('#wordpresshomeloadingsec').show();
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/dataintegrity";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Results fetched',
+ type: 'success'
+ });
+ $('#SecurityResult').html(response.data.result);
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+});
+
+
+var PluginsList = [];
+
+
+function AddPluginToArray(cBox, name) {
+ if (cBox.checked) {
+ PluginsList.push(name);
+ // alert(PluginsList);
+ } else {
+ const index = PluginsList.indexOf(name);
+ if (index > -1) {
+ PluginsList.splice(index, 1);
+ }
+ // alert(PluginsList);
+ }
+}
+
+var ThemesList = [];
+
+function AddThemeToArray(cBox, name) {
+ if (cBox.checked) {
+ ThemesList.push(name);
+ // alert(ThemesList);
+ } else {
+ const index = ThemesList.indexOf(name);
+ if (index > -1) {
+ ThemesList.splice(index, 1);
+ }
+ // alert(ThemesList);
+ }
+}
+
+
+function AppendToTable(table, markup) {
+ $(table).append(markup);
+}
+
+
+//..................Restore Backup Home
+
+
+app.controller('RestoreWPBackup', function ($scope, $http, $timeout, $window) {
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+
+ $scope.checkmethode = function () {
+ var val = $('#RestoreMethode').children("option:selected").val();
+ if (val == 1) {
+ $('#Newsitediv').show();
+ $('#exinstingsitediv').hide();
+ } else if (val == 0) {
+ $('#exinstingsitediv').show();
+ $('#Newsitediv').hide();
+ } else {
+
+ }
+ };
+
+
+ $scope.RestoreWPbackupNow = function () {
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.currentStatus = "Start Restoring WordPress..";
+
+ var Domain = $('#wprestoresubdirdomain').val()
+ var path = $('#wprestoresubdirpath').val();
+ var home = "1";
+
+ if (typeof path != 'undefined' || path != '') {
+ home = "0";
+ }
+ if (typeof path == 'undefined') {
+ path = "";
+ }
+
+
+ var backuptype = $('#backuptype').html();
+ var data;
+ if (backuptype == "DataBase Backup") {
+ data = {
+ backupid: $('#backupid').html(),
+ DesSite: $('#DesSite').children("option:selected").val(),
+ Domain: '',
+ path: path,
+ home: home,
+ }
+ } else {
+ data = {
+ backupid: $('#backupid').html(),
+ DesSite: $('#DesSite').children("option:selected").val(),
+ Domain: Domain,
+ path: path,
+ home: home,
+ }
+
+ }
+
+ var url = "/websites/RestoreWPbackupNow";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ // console.log(data)
+
+ var d = $('#DesSite').children("option:selected").val();
+ var c = $("input[name=Newdomain]").val();
+ // if (d == -1 || c == "") {
+ // alert("Please Select Method of Backup Restore");
+ // } else {
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ // }
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Restoring process starts!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+ }
+
+ function getCreationStatus() {
+ $('#wordpresshomeloading').show();
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ if (response.data.abort === 1) {
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.installStatus === 1) {
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $("#installProgressbackup").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ // Re-enable buttons
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // For backup operations, refresh the backup list
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' Backup created successfully!');
+ if (typeof window.fetchBackupList === 'function') {
+ window.fetchBackupList();
+ }
+ // Clear status after 5 seconds
+ setTimeout(function() {
+ $('#backupStatus').text('');
+ }, 5000);
+ }
+ // For staging operations, refresh the staging list
+ else {
+ $('#stagingStatus').html(' Staging site created successfully!');
+ $scope.fetchstaging();
+ // Clear status after 5 seconds
+ setTimeout(function() {
+ $('#stagingStatus').text('');
+ }, 5000);
+ }
+
+
+ } else {
+ $('#wordpresshomeloading').hide();
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $("#installProgressbackup").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ // Re-enable buttons on error
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // Show error status
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' ' + response.data.error_message + '');
+ } else {
+ $('#stagingStatus').html(' ' + response.data.error_message + '');
+ }
+
+
+ }
+
+ } else {
+
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $("#installProgressbackup").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+
+ // Update status displays with progress
+ var statusHtml = ' ' + response.data.currentStatus;
+ if (response.data.installationProgress) {
+ statusHtml += ' (' + response.data.installationProgress + '%)';
+ }
+
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(statusHtml);
+ } else {
+ $('#stagingStatus').html(statusHtml);
+ }
+
+ $timeout(getCreationStatus, 1000);
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+ $scope.goBack = function () {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+});
+
+
+//.......................................Remote Backup
+
+//........... delete DeleteBackupConfigNow
+
+function DeleteBackupConfigNow(url) {
+ window.location.href = url;
+}
+
+function DeleteRemoteBackupsiteNow(url) {
+ window.location.href = url;
+}
+
+function DeleteBackupfileConfigNow(url) {
+ window.location.href = url;
+}
+
+
+app.controller('RemoteBackupConfig', function ($scope, $http, $timeout, $window) {
+ $scope.RemoteBackupLoading = true;
+ $scope.SFTPBackUpdiv = true;
+
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ $scope.SelectRemoteBackuptype = function () {
+ var val = $scope.RemoteBackuptype;
+ if (val == "SFTP") {
+ $scope.SFTPBackUpdiv = false;
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ } else if (val == "S3") {
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = false;
+ $scope.S3keyNamediv = false;
+ $scope.Accesskeydiv = false;
+ $scope.SecretKeydiv = false;
+ $scope.SFTPBackUpdiv = true;
+ } else {
+ $scope.RemoteBackupLoading = true;
+ $scope.SFTPBackUpdiv = true;
+
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ }
+ }
+
+ $scope.SelectProvidertype = function () {
+ $scope.EndpointURLdiv = true;
+ var provider = $scope.Providervalue
+ if (provider == 'Backblaze') {
+ $scope.EndpointURLdiv = false;
+ } else {
+ $scope.EndpointURLdiv = true;
+ }
+ }
+
+ $scope.SaveBackupConfig = function () {
+ $scope.RemoteBackupLoading = false;
+ var Hname = $scope.Hostname;
+ var Uname = $scope.Username;
+ var Passwd = $scope.Password;
+ var path = $scope.path;
+ var type = $scope.RemoteBackuptype;
+ var Providervalue = $scope.Providervalue;
+ var data;
+ if (type == "SFTP") {
+
+ data = {
+ Hname: Hname,
+ Uname: Uname,
+ Passwd: Passwd,
+ path: path,
+ type: type
+ }
+ } else if (type == "S3") {
+ if (Providervalue == "Backblaze") {
+ data = {
+ S3keyname: $scope.S3keyName,
+ Provider: Providervalue,
+ AccessKey: $scope.Accesskey,
+ SecertKey: $scope.SecretKey,
+ EndUrl: $scope.EndpointURL,
+ type: type
+ }
+ } else {
+ data = {
+ S3keyname: $scope.S3keyName,
+ Provider: Providervalue,
+ AccessKey: $scope.Accesskey,
+ SecertKey: $scope.SecretKey,
+ type: type
+ }
+
+ }
+
+ }
+ var url = "/websites/SaveBackupConfig";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ }
+
+});
+
+var UpdatescheduleID;
+app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) {
+ $scope.BackupScheduleLoading = true;
+ $scope.SaveBackupSchedule = function () {
+ $scope.RemoteBackupLoading = false;
+ var FileRetention = $scope.Fretention;
+ var Backfrequency = $scope.Bfrequency;
+
+
+ var data = {
+ FileRetention: FileRetention,
+ Backfrequency: Backfrequency,
+ ScheduleName: $scope.ScheduleName,
+ RemoteConfigID: $('#RemoteConfigID').html(),
+ BackupType: $scope.BackupType
+ }
+ var url = "/websites/SaveBackupSchedule";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ };
+
+
+ $scope.getupdateid = function (ID) {
+ UpdatescheduleID = ID;
+ }
+
+ $scope.UpdateRemoteschedules = function () {
+ $scope.RemoteBackupLoading = false;
+ var Frequency = $scope.RemoteFrequency;
+ var fretention = $scope.RemoteFileretention;
+
+ var data = {
+ ScheduleID: UpdatescheduleID,
+ Frequency: Frequency,
+ FileRetention: fretention
+ }
+ var url = "/websites/UpdateRemoteschedules";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Updated!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+ };
+
+ $scope.AddWPsiteforRemoteBackup = function () {
+ $scope.RemoteBackupLoading = false;
+
+
+ var data = {
+ WpsiteID: $('#Wpsite').val(),
+ RemoteScheduleID: $('#RemoteScheduleID').html()
+ }
+ var url = "/websites/AddWPsiteforRemoteBackup";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ };
+});
+/* Java script code to create account */
+
+var website_create_domain_check = 0;
+
+function website_create_checkbox_function() {
+
+ var checkBox = document.getElementById("myCheck");
+ // Get the output text
+
+
+ // If the checkbox is checked, display the output text
+ if (checkBox.checked == true) {
+ website_create_domain_check = 0;
+ document.getElementById('Website_Create_Test_Domain').style.display = "block";
+ document.getElementById('Website_Create_Own_Domain').style.display = "none";
+
+ } else {
+ document.getElementById('Website_Create_Test_Domain').style.display = "none";
+ document.getElementById('Website_Create_Own_Domain').style.display = "block";
+ website_create_domain_check = 1;
+ }
+
+ // alert(domain_check);
+}
+
app.controller('createWebsite', function ($scope, $http, $timeout, $window) {
$scope.webSiteCreationLoading = true;
@@ -46,7 +5861,7 @@ app.controller('createWebsite', function ($scope, $http, $timeout, $window) {
$scope.currentStatus = "Starting creation..";
- var ssl, dkimCheck, openBasedir, mailDomain;
+ var ssl, dkimCheck, openBasedir, mailDomain, apacheBackend;
if ($scope.sslCheck === true) {
ssl = 1;
@@ -54,6 +5869,12 @@ app.controller('createWebsite', function ($scope, $http, $timeout, $window) {
ssl = 0
}
+ if ($scope.apacheBackend === true) {
+ apacheBackend = 1;
+ } else {
+ apacheBackend = 0
+ }
+
if ($scope.dkimCheck === true) {
dkimCheck = 1;
} else {
@@ -72,11 +5893,19 @@ app.controller('createWebsite', function ($scope, $http, $timeout, $window) {
mailDomain = 0
}
-
url = "/websites/submitWebsiteCreation";
var package = $scope.packageForWebsite;
+
+ // if (website_create_domain_check == 0) {
+ // var Part2_domainNameCreate = document.getElementById('Part2_domainNameCreate').value;
+ // var domainName = document.getElementById('TestDomainNameCreate').value + Part2_domainNameCreate;
+ // }
+ // if (website_create_domain_check == 1) {
+ // var domainName = $scope.domainNameCreate;
+ // }
var domainName = $scope.domainNameCreate;
+
var adminEmail = $scope.adminEmail;
var phpSelection = $scope.phpSelection;
var websiteOwner = $scope.websiteOwner;
@@ -91,9 +5920,11 @@ app.controller('createWebsite', function ($scope, $http, $timeout, $window) {
websiteOwner: websiteOwner,
dkimCheck: dkimCheck,
openBasedir: openBasedir,
- mailDomain: mailDomain
+ mailDomain: mailDomain,
+ apacheBackend: apacheBackend
};
+
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
@@ -238,13 +6069,74 @@ $("#listFail").hide();
app.controller('listWebsites', function ($scope, $http, $window) {
-
+ $scope.web = {};
+ $scope.WebSitesList = [];
+ $scope.loading = true; // Add loading state
+ $scope.expandedSites = {}; // Track which sites are expanded
$scope.currentPage = 1;
$scope.recordsToShow = 10;
- $scope.getFurtherWebsitesFromDB = function () {
+ // Function to toggle site expansion
+ $scope.toggleSite = function(site) {
+ if (!$scope.expandedSites[site.domain]) {
+ $scope.expandedSites[site.domain] = true;
+ site.loading = true;
+ // You can add any data fetching logic here if needed
+ setTimeout(function() {
+ site.loading = false;
+ $scope.$apply();
+ }, 500);
+ } else {
+ $scope.expandedSites[site.domain] = false;
+ }
+ };
+ // Function to check if site is expanded
+ $scope.isExpanded = function(siteId) {
+ return $scope.expandedSites[siteId];
+ };
+
+ // Function to check if site data is loaded
+ $scope.isDataLoaded = function(site) {
+ return site.version !== undefined;
+ };
+
+ // Function to get SSL tooltip text
+ $scope.getSslTooltip = function(web) {
+ if (!web.ssl) return '';
+
+ var tooltip = '';
+ if (web.ssl.issuer && web.ssl.issuer !== '') {
+ tooltip += 'Issuer: ' + web.ssl.issuer;
+ }
+
+ if (web.ssl.days !== undefined) {
+ if (tooltip) tooltip += ' | ';
+ if (web.ssl.days < 0) {
+ tooltip += 'Expired ' + Math.abs(web.ssl.days) + ' days ago';
+ } else {
+ tooltip += 'Valid for ' + web.ssl.days + ' days';
+ }
+ }
+
+ if (web.ssl.is_wildcard) {
+ if (tooltip) tooltip += ' | ';
+ tooltip += 'Wildcard Certificate';
+ }
+
+ if (web.ssl.status === 'none') {
+ tooltip = 'No SSL certificate installed. Click "Issue SSL" to secure this site.';
+ } else if (web.ssl.status === 'self-signed') {
+ tooltip = 'Self-signed certificate detected. Not trusted by browsers.';
+ }
+
+ return tooltip;
+ };
+
+ // Initial fetch of websites
+ $scope.getFurtherWebsitesFromDB = function () {
+ $scope.loading = true; // Set loading to true when starting fetch
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
@@ -256,32 +6148,395 @@ app.controller('listWebsites', function ($scope, $http, $window) {
recordsToShow: $scope.recordsToShow
};
+ var dataurl = "/websites/fetchWebsitesList";
- dataurl = "/websites/fetchWebsitesList";
-
- $http.post(dataurl, data, config).then(ListInitialData, cantLoadInitialData);
-
-
- function ListInitialData(response) {
+ $http.post(dataurl, data, config).then(function(response) {
if (response.data.listWebSiteStatus === 1) {
-
$scope.WebSitesList = JSON.parse(response.data.data);
$scope.pagination = response.data.pagination;
- $scope.clients = JSON.parse(response.data.data);
$("#listFail").hide();
+ // Expand the first site by default
+ if ($scope.WebSitesList.length > 0) {
+ $scope.expandedSites[$scope.WebSitesList[0].domain] = true;
+ }
} else {
$("#listFail").fadeIn();
$scope.errorMessage = response.data.error_message;
+ }
+ $scope.loading = false; // Set loading to false when done
+ }).catch(function(error) {
+ $("#listFail").fadeIn();
+ $scope.errorMessage = error.message || 'An error occurred while fetching websites';
+ $scope.loading = false; // Set loading to false on error
+ });
+ };
+ // Call it immediately
+ $scope.getFurtherWebsitesFromDB();
+
+ $scope.showWPSites = function(domain) {
+ console.log('showWPSites called for domain:', domain);
+
+ // Make sure domain is defined
+ if (!domain) {
+ console.error('Domain is undefined');
+ return;
+ }
+
+ // Find the website in the list
+ var site = $scope.WebSitesList.find(function(website) {
+ return website.domain === domain;
+ });
+
+ if (!site) {
+ console.error('Website not found:', domain);
+ return;
+ }
+
+ // Set loading state
+ site.loadingWPSites = true;
+
+ // Toggle visibility
+ site.showWPSites = !site.showWPSites;
+
+ // If we're hiding, just return
+ if (!site.showWPSites) {
+ site.loadingWPSites = false;
+ return;
+ }
+
+ var config = {
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = $.param({
+ domain: domain
+ });
+
+ $http.post('/websites/fetchWPDetails', data, config)
+ .then(function(response) {
+ console.log('Response received:', response);
+ if (response.data.status === 1 && response.data.fetchStatus === 1) {
+ site.wp_sites = response.data.sites || [];
+ // Initialize loading states for each WP site
+ site.wp_sites.forEach(function(wp) {
+ wp.loading = false;
+ wp.loadingPlugins = false;
+ wp.loadingTheme = false;
+ });
+ $("#listFail").hide();
+ } else {
+ $("#listFail").fadeIn();
+ site.showWPSites = false;
+ $scope.errorMessage = response.data.error_message || 'Failed to fetch WordPress sites';
+ console.error('Error in response:', response.data.error_message);
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to fetch WordPress sites',
+ type: 'error'
+ });
+ }
+ })
+ .catch(function(error) {
+ console.error('Request failed:', error);
+ site.showWPSites = false;
+ $("#listFail").fadeIn();
+ $scope.errorMessage = error.message || 'An error occurred while fetching WordPress sites';
+ new PNotify({
+ title: 'Error!',
+ text: error.message || 'Could not connect to server',
+ type: 'error'
+ });
+ })
+ .finally(function() {
+ site.loadingWPSites = false;
+ });
+ };
+
+ $scope.visitSite = function(wp) {
+ var url = wp.url || wp.domain;
+ if (!url) return;
+ if (!url.startsWith('http://') && !url.startsWith('https://')) {
+ url = 'https://' + url;
+ }
+ window.open(url, '_blank');
+ };
+
+ $scope.wpLogin = function(wpId) {
+ window.open('/websites/wpLogin?wpID=' + wpId, '_blank');
+ };
+
+ $scope.manageWP = function(wpId) {
+ window.location.href = '/websites/WPHome?ID=' + wpId;
+ };
+
+ $scope.deleteWPSite = function(wp) {
+ if (confirm('Are you sure you want to delete this WordPress site? This action cannot be undone.')) {
+ window.location.href = '/websites/ListWPSites?DeleteID=' + wp.id;
+ }
+ };
+
+ $scope.getFullUrl = function(url) {
+ console.log('getFullUrl called with:', url);
+ if (!url) {
+ // If no URL is provided, try to use the domain
+ if (this.wp && this.wp.domain) {
+ url = this.wp.domain;
+ } else {
+ return '';
}
}
+ if (url.startsWith('http://') || url.startsWith('https://')) {
+ return url;
+ }
+ return 'https://' + url;
+ };
- function cantLoadInitialData(response) {
+
+
+ $scope.updateSetting = function(wp, setting) {
+ var settingMap = {
+ 'search-indexing': 'searchIndex',
+ 'debugging': 'debugging',
+ 'password-protection': 'passwordProtection',
+ 'maintenance-mode': 'maintenanceMode'
+ };
+
+ // Toggle the state before sending request
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+
+ var data = {
+ siteId: wp.id,
+ setting: setting,
+ value: wp[settingMap[setting]]
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Setting updated successfully.',
+ type: 'success'
+ });
+ if (setting === 'password-protection' && wp[settingMap[setting]] === 1) {
+ // Show password protection modal if enabling
+ wp.PPUsername = "";
+ wp.PPPassword = "";
+ $scope.currentWP = wp;
+ $('#passwordProtectionModal').modal('show');
+ }
+ } else {
+ // Revert the change if update failed
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: response.data.error_message || 'Failed to update setting.',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ // Revert the change on error
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: 'Connection failed while updating setting.',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.UpdateWPSettings = function(wp) {
+ $('#wordpresshomeloading').show();
+
+ var url = "/websites/UpdateWPSettings";
+ var data = {};
+
+ if (wp.setting === "PasswordProtection") {
+ data = {
+ wpID: wp.id,
+ setting: wp.setting,
+ PPUsername: wp.PPUsername,
+ PPPassword: wp.PPPassword
+ };
}
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken'),
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ transformRequest: function(obj) {
+ var str = [];
+ for(var p in obj)
+ str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
+ return str.join("&");
+ }
+ };
+ $http.post(url, data, config).then(function(response) {
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Updated!',
+ type: 'success'
+ });
+ if (wp.setting === "PasswordProtection") {
+ location.reload();
+ }
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ if (wp.setting === "PasswordProtection") {
+ location.reload();
+ }
+ }
+ }, function(error) {
+ $('#wordpresshomeloading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.togglePasswordProtection = function(wp) {
+ console.log('togglePasswordProtection called for:', wp);
+ console.log('Current password protection state:', wp.passwordProtection);
+
+ if (wp.passwordProtection) {
+ // Show modal for credentials
+ console.log('Showing modal for credentials');
+ wp.PPUsername = "";
+ wp.PPPassword = "";
+ $scope.currentWP = wp;
+ console.log('Current WP set to:', $scope.currentWP);
+ $('#passwordProtectionModal').modal('show');
+ } else {
+ // Disable password protection
+ console.log('Disabling password protection');
+ var data = {
+ siteId: wp.id,
+ setting: 'password-protection',
+ value: 0
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log('Sending request with data:', data);
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ console.log('Received response:', response);
+ if (!response.data.status) {
+ wp.passwordProtection = !wp.passwordProtection;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message || 'Failed to disable password protection',
+ type: 'error'
+ });
+ } else {
+ new PNotify({
+ title: 'Success!',
+ text: 'Password protection disabled successfully.',
+ type: 'success'
+ });
+ }
+ }).catch(function(error) {
+ console.error('Request failed:', error);
+ wp.passwordProtection = !wp.passwordProtection;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server.',
+ type: 'error'
+ });
+ });
+ }
+ };
+
+ $scope.submitPasswordProtection = function() {
+ console.log('submitPasswordProtection called');
+ console.log('Current WP:', $scope.currentWP);
+
+ if (!$scope.currentWP) {
+ console.error('No WordPress site selected');
+ new PNotify({
+ title: 'Error!',
+ text: 'No WordPress site selected.',
+ type: 'error'
+ });
+ return;
+ }
+
+ if (!$scope.currentWP.PPUsername || !$scope.currentWP.PPPassword) {
+ console.error('Missing username or password');
+ new PNotify({
+ title: 'Error!',
+ text: 'Please provide both username and password',
+ type: 'error'
+ });
+ return;
+ }
+
+ var data = {
+ siteId: $scope.currentWP.id,
+ setting: 'password-protection',
+ value: 1,
+ username: $scope.currentWP.PPUsername,
+ password: $scope.currentWP.PPPassword
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log('Sending request with data:', data);
+ $('#passwordProtectionModal').modal('hide');
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ console.log('Received response:', response);
+ if (response.data.status) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Password protection enabled successfully!',
+ type: 'success'
+ });
+ } else {
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to enable password protection',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ console.error('Request failed:', error);
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: 'Could not connect to server',
+ type: 'error'
+ });
+ });
};
- $scope.getFurtherWebsitesFromDB();
$scope.cyberPanelLoading = true;
@@ -337,8 +6592,7 @@ app.controller('listWebsites', function ($scope, $http, $window) {
$scope.cyberPanelLoading = true;
$scope.searchWebsites = function () {
-
- $scope.cyberPanelLoading = false;
+ $scope.loading = true; // Set loading to true when starting search
var config = {
headers: {
@@ -352,13 +6606,8 @@ app.controller('listWebsites', function ($scope, $http, $window) {
dataurl = "/websites/searchWebsites";
- $http.post(dataurl, data, config).then(ListInitialData, cantLoadInitialData);
-
-
- function ListInitialData(response) {
- $scope.cyberPanelLoading = true;
+ $http.post(dataurl, data, config).then(function(response) {
if (response.data.listWebSiteStatus === 1) {
-
var finalData = JSON.parse(response.data.data);
$scope.WebSitesList = finalData;
$("#listFail").hide();
@@ -368,161 +6617,27 @@ app.controller('listWebsites', function ($scope, $http, $window) {
text: response.data.error_message,
type: 'error'
});
-
}
- }
-
- function cantLoadInitialData(response) {
- $scope.cyberPanelLoading = true;
+ $scope.loading = false; // Set loading to false when done
+ }).catch(function(error) {
new PNotify({
title: 'Operation Failed!',
text: 'Connect disrupted, refresh the page.',
type: 'error'
});
- }
-
-
- };
-
- $scope.getFullUrl = function(url) {
- console.log('getFullUrl called with:', url);
- if (!url) {
- // If no URL is provided, try to use the domain
- if (this.wp && this.wp.domain) {
- url = this.wp.domain;
- } else {
- return '';
- }
- }
- if (url.startsWith('http://') || url.startsWith('https://')) {
- return url;
- }
- return 'https://' + url;
- };
-
- $scope.showWPSites = function(domain) {
- var site = $scope.WebSitesList.find(function(site) {
- return site.domain === domain;
+ $scope.loading = false; // Set loading to false on error
});
- if (site) {
- site.showWPSites = !site.showWPSites;
- if (site.showWPSites && (!site.wp_sites || !site.wp_sites.length)) {
- // Fetch WordPress sites if not already loaded
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
- var data = { domain: domain };
- site.loadingWPSites = true;
- $http.post('/websites/getWordPressSites', data, config).then(
- function(response) {
- site.loadingWPSites = false;
- if (response.data.status === 1) {
- site.wp_sites = response.data.sites;
- site.wp_sites.forEach(function(wp) {
- // Ensure each WP site has a URL
- if (!wp.url) {
- wp.url = wp.domain || domain;
- }
- fetchWPSiteData(wp);
- });
- } else {
- new PNotify({
- title: 'Error!',
- text: response.data.error_message || 'Could not fetch WordPress sites',
- type: 'error'
- });
- }
- },
- function(response) {
- site.loadingWPSites = false;
- new PNotify({
- title: 'Error!',
- text: 'Could not connect to server',
- type: 'error'
- });
- }
- );
- }
- }
};
- function fetchWPSiteData(wp) {
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
- var data = { WPid: wp.id };
-
- // Fetch site data
- $http.post('/websites/FetchWPdata', data, config).then(
- function(response) {
- if (response.data.status === 1) {
- var data = response.data.ret_data;
- wp.version = data.version;
- wp.phpVersion = data.phpVersion || 'PHP 7.4';
- wp.searchIndex = data.searchIndex === 1;
- wp.debugging = data.debugging === 1;
- wp.passwordProtection = data.passwordprotection === 1;
- wp.maintenanceMode = data.maintenanceMode === 1;
- fetchPluginData(wp);
- fetchThemeData(wp);
- }
- }
- );
- }
+ $scope.ScanWordpressSite = function () {
- function fetchPluginData(wp) {
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
- var data = { WPid: wp.id };
- $http.post('/websites/GetCurrentPlugins', data, config).then(
- function(response) {
- if (response.data.status === 1) {
- var plugins = JSON.parse(response.data.plugins);
- wp.activePlugins = plugins.filter(function(p) { return p.status === 'active'; }).length;
- wp.totalPlugins = plugins.length;
- }
- }
- );
- }
+ $('#cyberPanelLoading').show();
- function fetchThemeData(wp) {
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
- var data = { WPid: wp.id };
- $http.post('/websites/GetCurrentThemes', data, config).then(
- function(response) {
- if (response.data.status === 1) {
- var themes = JSON.parse(response.data.themes);
- wp.theme = themes.find(function(t) { return t.status === 'active'; }).name;
- wp.totalThemes = themes.length;
- }
- }
- );
- }
- $scope.updateSetting = function(wp, setting) {
- var settingMap = {
- 'search-indexing': 'searchIndex',
- 'debugging': 'debugging',
- 'password-protection': 'passwordProtection',
- 'maintenance-mode': 'maintenanceMode'
- };
+ var url = "/websites/ScanWordpressSite";
+
+ var data = {}
- var data = {
- siteId: wp.id,
- setting: setting,
- value: wp[settingMap[setting]] ? 1 : 0
- };
var config = {
headers: {
@@ -530,97 +6645,45 @@ app.controller('listWebsites', function ($scope, $http, $window) {
}
};
- $http.post('/websites/UpdateWPSettings', data, config).then(
- function(response) {
- if (!response.data.status) {
- wp[settingMap[setting]] = !wp[settingMap[setting]];
- new PNotify({
- title: 'Operation Failed!',
- text: response.data.error_message || 'Unknown error',
- type: 'error'
- });
- } else {
- new PNotify({
- title: 'Success!',
- text: 'Setting updated successfully.',
- type: 'success'
- });
- }
- },
- function(response) {
- wp[settingMap[setting]] = !wp[settingMap[setting]];
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ $('#cyberPanelLoading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+ } else {
new PNotify({
title: 'Operation Failed!',
- text: 'Could not connect to server, please try again.',
+ text: response.data.error_message,
type: 'error'
});
+
}
- );
- };
- $scope.wpLogin = function(wpId) {
- window.open('/websites/AutoLogin?id=' + wpId, '_blank');
- };
-
- $scope.manageWP = function(wpId) {
- window.location.href = '/websites/WPHome?ID=' + wpId;
- };
-
- $scope.deleteWPSite = function(wp) {
- if (confirm('Are you sure you want to delete this WordPress site? This action cannot be undone.')) {
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
- var data = {
- wpid: wp.id,
- domain: wp.domain
- };
-
- $http.post('/websites/deleteWordPressSite', data, config).then(
- function(response) {
- if (response.data.status === 1) {
- // Remove the WP site from the list
- var site = $scope.WebSitesList.find(function(site) {
- return site.domain === wp.domain;
- });
- if (site && site.wp_sites) {
- site.wp_sites = site.wp_sites.filter(function(wpSite) {
- return wpSite.id !== wp.id;
- });
- }
- new PNotify({
- title: 'Success!',
- text: 'WordPress site deleted successfully.',
- type: 'success'
- });
- } else {
- new PNotify({
- title: 'Error!',
- text: response.data.error_message || 'Could not delete WordPress site',
- type: 'error'
- });
- }
- },
- function(response) {
- new PNotify({
- title: 'Error!',
- text: 'Could not connect to server',
- type: 'error'
- });
- }
- );
}
- };
- $scope.visitSite = function(wp) {
- var url = wp.url || wp.domain;
- if (!url) return '';
- if (url.startsWith('http://') || url.startsWith('https://')) {
- return url;
+ function cantLoadInitialDatas(response) {
+ $('#cyberPanelLoading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
}
- return 'https://' + url;
+
+
};
});
@@ -938,8 +7001,3606 @@ app.controller('listChildDomainsMain', function ($scope, $http, $timeout) {
}
+
var DeleteDomain;
- $scope.deleteDomainInit = function (childDomainForDeletion){
+ $scope.DeleteDocRoot = false;
+ $scope.deleteDomainInit = function (childDomainForDeletion) {
+ DeleteDomain = childDomainForDeletion;
+ $scope.DeleteDocRoot = false;
+ };
+
+ $scope.deleteChildDomain = function () {
+ console.log("Delete child domain called for:", DeleteDomain);
+ console.log("Delete doc root:", $scope.DeleteDocRoot);
+
+ $scope.cyberPanelLoading = false;
+ url = "/websites/submitDomainDeletion";
+
+ var data = {
+ websiteName: DeleteDomain,
+ DeleteDocRoot: $scope.DeleteDocRoot
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log("Sending delete request with data:", data);
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+ console.log("Delete response received:", response.data);
+ $scope.cyberPanelLoading = true;
+ if (response.data.websiteDeleteStatus === 1) {
+ console.log("Delete successful");
+ new PNotify({
+ title: 'Success!',
+ text: 'Child Domain successfully deleted.',
+ type: 'success'
+ });
+ $('#DeleteChild').modal('hide');
+ $('.modal-backdrop').remove();
+ $scope.DeleteDocRoot = false;
+ $scope.getFurtherWebsitesFromDB();
+ } else {
+ console.log("Delete failed:", response.data.error_message);
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ console.log("Delete request failed:", response);
+ $scope.cyberPanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page',
+ type: 'error'
+ });
+
+ }
+
+ };
+
+});
+
+/* Java script code to list accounts ends here */
+
+
+/* Java script code to delete Website */
+
+
+$("#websiteDeleteFailure").hide();
+$("#websiteDeleteSuccess").hide();
+
+$("#deleteWebsiteButton").hide();
+$("#deleteLoading").hide();
+
+app.controller('deleteWebsiteControl', function ($scope, $http) {
+
+
+ $scope.deleteWebsite = function () {
+
+ $("#deleteWebsiteButton").fadeIn();
+
+
+ };
+
+ $scope.deleteWebsiteFinal = function () {
+
+ $("#deleteLoading").show();
+
+ var websiteName = $scope.websiteToBeDeleted;
+
+
+ url = "/websites/submitWebsiteDeletion";
+
+ var data = {
+ websiteName: websiteName
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.websiteDeleteStatus === 0) {
+ $scope.errorMessage = response.data.error_message;
+ $("#websiteDeleteFailure").fadeIn();
+ $("#websiteDeleteSuccess").hide();
+ $("#deleteWebsiteButton").hide();
+
+
+ $("#deleteLoading").hide();
+
+ } else {
+ $("#websiteDeleteFailure").hide();
+ $("#websiteDeleteSuccess").fadeIn();
+ $("#deleteWebsiteButton").hide();
+ $scope.deletedWebsite = websiteName;
+ $("#deleteLoading").hide();
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ }
+
+
+ };
+
+});
+
+
+/**
+ * Created by usman on 7/26/17.
+ */
+function getCookie(name) {
+ var cookieValue = null;
+ var t = document.cookie;
+ if (document.cookie && document.cookie !== '') {
+ var cookies = document.cookie.split(';');
+ for (var i = 0; i < cookies.length; i++) {
+ var cookie = jQuery.trim(cookies[i]);
+ // Does this cookie string begin with the name we want?
+ if (cookie.substring(0, name.length + 1) === (name + '=')) {
+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
+ break;
+ }
+ }
+ }
+ return cookieValue;
+}
+
+
+var arry = []
+
+function selectpluginJs(val) {
+ $('#mysearch').hide()
+ arry.push(val)
+
+ // console.log(arry)
+ document.getElementById('selJS').innerHTML = "";
+
+ for (var i = 0; i < arry.length; i++) {
+ $('#selJS').show()
+ var mlm = ' ' + arry[i] + '    '
+ $('#selJS').append(mlm)
+ }
+
+
+}
+
+
+var DeletePluginURL;
+
+function DeletePluginBuucket(url) {
+ DeletePluginURL = url;
+}
+
+function FinalDeletePluginBuucket() {
+ window.location.href = DeletePluginURL;
+}
+
+var SPVal;
+
+app.controller('WPAddNewPlugin', function ($scope, $http, $timeout, $window, $compile) {
+ $scope.webSiteCreationLoading = true;
+
+ $scope.SearchPluginName = function (val) {
+ $scope.webSiteCreationLoading = false;
+ SPVal = val;
+ url = "/websites/SearchOnkeyupPlugin";
+
+ var searchcontent = $scope.searchcontent;
+
+
+ var data = {
+ pluginname: searchcontent
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.webSiteCreationLoading = true;
+
+ if (response.data.status === 1) {
+ if (SPVal == 'add') {
+ $('#mysearch').show()
+ document.getElementById('mysearch').innerHTML = "";
+ var res = response.data.plugns.plugins
+ // console.log(res);
+ for (i = 0; i <= res.length; i++) {
+ //
+ var tml = '
';
+ $('#mysearch').append(tml);
+ }
+ } else if (SPVal == 'eidt') {
+ $('#mysearch').show()
+ document.getElementById('mysearch').innerHTML = "";
+ var res = response.data.plugns.plugins
+ // console.log(res);
+ for (i = 0; i <= res.length; i++) {
+ //
+ var tml = '
';
+ var temp = $compile(tml)($scope)
+ angular.element(document.getElementById('mysearch')).append(temp);
+ }
+
+ }
+
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+ }
+
+ $scope.AddNewplugin = function () {
+
+ url = "/websites/AddNewpluginAjax";
+
+ var bucketname = $scope.PluginbucketName
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ var data = {
+ config: arry,
+ Name: bucketname
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Bucket created.',
+ type: 'success'
+ });
+ location.reload();
+ } else {
+
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+ }
+
+ $scope.deletesPlgin = function (val) {
+
+ url = "/websites/deletesPlgin";
+
+
+ var data = {
+ pluginname: val,
+ pluginbBucketID: $('#pluginbID').html()
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ location.reload();
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+ }
+
+ $scope.Addplugin = function (slug) {
+ $('#mysearch').hide()
+
+ url = "/websites/Addplugineidt";
+
+
+ var data = {
+ pluginname: slug,
+ pluginbBucketID: $('#pluginbID').html()
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.status === 1) {
+ location.reload();
+
+ } else {
+
+ // $scope.errorMessage = response.data.error_message;
+ alert("Status not = 1: Error..." + response.data.error_message)
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+
+ }
+
+});
+
+var domain_check = 0;
+
+function checkbox_function() {
+
+ var checkBox = document.getElementById("myCheck");
+ // Get the output text
+
+
+ // If the checkbox is checked, display the output text
+ if (checkBox.checked == true) {
+ domain_check = 0;
+ document.getElementById('Test_Domain').style.display = "block";
+ document.getElementById('Own_Domain').style.display = "none";
+
+ } else {
+ document.getElementById('Test_Domain').style.display = "none";
+ document.getElementById('Own_Domain').style.display = "block";
+ domain_check = 1;
+ }
+
+ // alert(domain_check);
+}
+
+app.controller('createWordpress', function ($scope, $http, $timeout, $compile, $window) {
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ // Password generation function
+ $scope.randomPassword = function(length) {
+ var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+";
+ var password = "";
+ for (var i = 0; i < length; i++) {
+ password += chars.charAt(Math.floor(Math.random() * chars.length));
+ }
+ return password;
+ };
+
+ // Initialize showPassword
+ $scope.showPassword = false;
+
+ var statusFile;
+
+ $scope.createWordPresssite = function () {
+
+ $scope.webSiteCreationLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+
+ $scope.currentStatus = "Starting creation..";
+
+ var apacheBackend = 0;
+
+ if ($scope.apacheBackend === true) {
+ apacheBackend = 1;
+ } else {
+ apacheBackend = 0
+ }
+
+ var package = $scope.packageForWebsite;
+ var websiteOwner = $scope.websiteOwner;
+ var WPtitle = $scope.WPtitle;
+
+ // if (domain_check == 0) {
+ // var Part2_domainNameCreate = document.getElementById('Part2_domainNameCreate').value;
+ // var domainNameCreate = document.getElementById('TestDomainNameCreate').value + Part2_domainNameCreate;
+ // }
+ // if (domain_check == 1) {
+ //
+ // var domainNameCreate = $scope.own_domainNameCreate;
+ // }
+
+ var domainNameCreate = $scope.domainNameCreate;
+
+
+ var WPUsername = $scope.WPUsername;
+ var adminEmail = $scope.adminEmail;
+ var WPPassword = $scope.WPPassword;
+ var WPVersions = $scope.WPVersions;
+ var pluginbucket = $scope.pluginbucket;
+ var autoupdates = $scope.autoupdates;
+ var pluginupdates = $scope.pluginupdates;
+ var themeupdates = $scope.themeupdates;
+
+ if (domain_check == 0) {
+
+ var path = "";
+
+ }
+ if (domain_check = 1) {
+
+ var path = $scope.installPath;
+
+ }
+
+
+ var home = "1";
+
+ if (typeof path != 'undefined') {
+ home = "0";
+ }
+
+ //alert(domainNameCreate);
+ var data = {
+
+ title: WPtitle,
+ domain: domainNameCreate,
+ WPVersion: WPVersions,
+ pluginbucket: pluginbucket,
+ adminUser: WPUsername,
+ Email: adminEmail,
+ PasswordByPass: WPPassword,
+ AutomaticUpdates: autoupdates,
+ Plugins: pluginupdates,
+ Themes: themeupdates,
+ websiteOwner: websiteOwner,
+ package: package,
+ home: home,
+ path: path,
+ apacheBackend: apacheBackend
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ var url = "/websites/submitWorpressCreation";
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.webSiteCreationLoading = true;
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ $scope.goBackDisable = false;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ alert("Error..." + response)
+
+ }
+
+ };
+ $scope.goBack = function () {
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $scope.webSiteCreationLoading = false;
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+
+});
+
+
+//........... delete wp list
+var FurlDeleteWP;
+
+function DeleteWPNow(url) {
+ FurlDeleteWP = url;
+}
+
+function FinalDeleteWPNow() {
+ window.location.href = FurlDeleteWP;
+}
+
+var DeploytoProductionID;
+
+function DeployToProductionInitial(vall) {
+ DeploytoProductionID = vall;
+}
+
+// Simplified staging domain input - checkbox functionality removed
+
+app.controller('WPsiteHome', function ($scope, $http, $timeout, $compile, $window) {
+ var CheckBoxpasssword = 0;
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.searchIndex = 0;
+
+ $(document).ready(function () {
+ var checkstatus = document.getElementById("wordpresshome");
+ if (checkstatus !== null) {
+ $scope.LoadWPdata();
+ }
+ });
+
+ $scope.LoadWPdata = function () {
+ $scope.wordpresshomeloading = false;
+ $('#wordpresshomeloading').show();
+
+ var url = "/websites/FetchWPdata";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(function(response) {
+ $scope.wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#WPVersion').text(response.data.ret_data.version);
+ if (response.data.ret_data.lscache === 1) {
+ $('#lscache').prop('checked', true);
+ }
+ if (response.data.ret_data.debugging === 1) {
+ $('#debugging').prop('checked', true);
+ }
+
+ // Set search index state
+ $scope.searchIndex = response.data.ret_data.searchIndex;
+
+ if (response.data.ret_data.maintenanceMode === 1) {
+ $('#maintenanceMode').prop('checked', true);
+ }
+ if (response.data.ret_data.wpcron === 1) {
+ $('#wpcron').prop('checked', true);
+ }
+ if (response.data.ret_data.passwordprotection == 1) {
+ var dc = '';
+ var mp = $compile(dc)($scope);
+ angular.element(document.getElementById('prsswdprodata')).append(mp);
+ CheckBoxpasssword = 1;
+ } else {
+ var dc = '';
+ $('#prsswdprodata').append(dc);
+ CheckBoxpasssword = 0;
+ }
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }, function(error) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ console.error('Failed to load WP data:', error);
+ });
+ };
+
+ $scope.UpdateWPSettings = function (setting) {
+ $scope.wordpresshomeloading = false;
+ $('#wordpresshomeloading').show();
+
+ var url = "/websites/UpdateWPSettings";
+ var data;
+
+ if (setting === "PasswordProtection") {
+ data = {
+ WPid: $('#WPid').html(),
+ setting: setting,
+ PPUsername: CheckBoxpasssword == 0 ? $scope.PPUsername : '',
+ PPPassword: CheckBoxpasssword == 0 ? $scope.PPPassword : ''
+ };
+ } else {
+ var settingValue;
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ settingValue = $scope.searchIndex;
+ } else {
+ settingValue = $('#' + setting).is(":checked") ? 1 : 0;
+ }
+ data = {
+ WPid: $('#WPid').html(),
+ setting: setting,
+ settingValue: settingValue
+ };
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(function(response) {
+ $scope.wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Updated!',
+ type: 'success'
+ });
+ if (setting === "PasswordProtection") {
+ location.reload();
+ }
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ // Revert the change on error
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ }
+ if (setting === "PasswordProtection") {
+ location.reload();
+ }
+ }
+ }, function(error) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ // Revert the change on error
+ if (setting === 'searchIndex') {
+ $scope.searchIndex = $scope.searchIndex === 1 ? 0 : 1;
+ }
+ console.error('Failed to update setting:', error);
+ });
+ };
+
+ $scope.GetCurrentPlugins = function () {
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/GetCurrentPlugins";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#PluginBody').html('');
+ var plugins = JSON.parse(response.data.plugins);
+ plugins.forEach(AddPlugins);
+
+ } else {
+ alert("Error:" + response.data.error_message)
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+
+ $scope.GetCurrentThemes = function () {
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/GetCurrentThemes";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+
+ $('#ThemeBody').html('');
+ var themes = JSON.parse(response.data.themes);
+ themes.forEach(AddThemes);
+
+ } else {
+ alert("Error:" + response.data.error_message)
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.webSiteCreationLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+
+ $scope.UpdatePlugins = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ pluginarray: PluginsList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/UpdatePlugins";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Updating Plugins in Background!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+
+ };
+
+ $scope.DeletePlugins = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ pluginarray: PluginsList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/DeletePlugins";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deleting Plugin in Background!',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ }
+
+ $scope.ChangeStatus = function (plugin) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ plugin: plugin,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/ChangeStatus";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Changed Plugin state Successfully !.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ }
+
+ function AddPlugins(value, index, array) {
+ var FinalMarkup = ''
+ FinalMarkup = FinalMarkup + ' | ';
+ for (let x in value) {
+ if (x === 'status') {
+ if (value[x] === 'inactive') {
+ FinalMarkup = FinalMarkup + ' | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else if (x === 'update') {
+ if (value[x] === 'none') {
+ FinalMarkup = FinalMarkup + 'Upto Date | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else {
+ FinalMarkup = FinalMarkup + '' + value[x] + " | ";
+ }
+ }
+ FinalMarkup = FinalMarkup + ' | '
+ FinalMarkup = FinalMarkup + '
'
+ var temp = $compile(FinalMarkup)($scope)
+ AppendToTable('#PluginBody', temp)
+ }
+
+ $scope.UpdateThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ Theme: theme,
+ Themearray: ThemesList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/UpdateThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Updating Theme in background !.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+
+ };
+
+ $scope.DeleteThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ Theme: theme,
+ Themearray: ThemesList,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/DeleteThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deleting Theme in Background!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+ $scope.ChangeStatusThemes = function (theme) {
+ $('#wordpresshomeloading').show();
+ var data = {
+ theme: theme,
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/StatusThemes";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Change Theme state in Bsckground!.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ };
+
+ function AddThemes(value, index, array) {
+ var FinalMarkup = ''
+ FinalMarkup = FinalMarkup + ' | ';
+ for (let x in value) {
+ if (x === 'status') {
+ if (value[x] === 'inactive') {
+ FinalMarkup = FinalMarkup + ' | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else if (x === 'update') {
+ if (value[x] === 'none') {
+ FinalMarkup = FinalMarkup + 'Upto Date | ';
+ } else {
+ FinalMarkup = FinalMarkup + ' | ';
+ }
+ } else {
+ FinalMarkup = FinalMarkup + '' + value[x] + " | ";
+ }
+ }
+ FinalMarkup = FinalMarkup + ' | '
+ FinalMarkup = FinalMarkup + '
'
+ var temp = $compile(FinalMarkup)($scope)
+ AppendToTable('#ThemeBody', temp)
+ }
+
+ $scope.CreateStagingNow = function () {
+ $('#wordpresshomeloading').show();
+ $('#stagingStatus').html(' Starting staging site creation...');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', true).html(' Creating Staging Site...');
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+
+ $scope.currentStatus = "Starting creation Staging..";
+
+ // Get the staging domain from the simplified input
+ var domainNameCreate = $('#stagingDomainName').val() || $scope.stagingDomainName;
+ var data = {
+ StagingName: $('#stagingName').val(),
+ StagingDomain: domainNameCreate,
+ WPid: $('#WPid').html(),
+ }
+ var url = "/websites/CreateStagingNow";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+ $('#stagingStatus').html(' ' + response.data.error_message + '');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#stagingStatus').html(' Could not connect to server');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+ function getCreationStatus() {
+ $('#wordpresshomeloading').show();
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ //$('#wordpresshomeloading').hide();
+
+ if (response.data.abort === 1) {
+ if (response.data.installStatus === 1) {
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+
+ $("#installProgress").css("width", "100%");
+ $("#installProgressbackup").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+
+ } else {
+ $('#wordpresshomeloading').hide();
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $("#installProgressbackup").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ // Re-enable buttons on error
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // Show error status
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' ' + response.data.error_message + '');
+ } else {
+ $('#stagingStatus').html(' ' + response.data.error_message + '');
+ }
+
+
+ }
+
+ } else {
+
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $("#installProgressbackup").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+
+ // Update status displays with progress
+ var statusHtml = ' ' + response.data.currentStatus;
+ if (response.data.installationProgress) {
+ statusHtml += ' (' + response.data.installationProgress + '%)';
+ }
+
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(statusHtml);
+ } else {
+ $('#stagingStatus').html(statusHtml);
+ }
+
+ $timeout(getCreationStatus, 1000);
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+ $scope.goBack = function () {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ $scope.fetchstaging = function () {
+
+ // Ensure DOM is ready
+ $timeout(function() {
+ // Check if the staging table exists
+ if ($('#StagingBody').length === 0) {
+ console.error('StagingBody table not found in DOM');
+ return;
+ }
+
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/fetchstaging";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+
+ // $('#ThemeBody').html('');
+ // var themes = JSON.parse(response.data.themes);
+ // themes.forEach(AddThemes);
+
+ $('#StagingBody').html('');
+ console.log('Staging response:', response.data);
+
+ try {
+ var staging = JSON.parse(response.data.wpsites);
+ console.log('Parsed staging data:', staging);
+
+ if (staging && staging.length > 0) {
+ staging.forEach(function(site, index) {
+ console.log('Processing staging site ' + index + ':', site);
+ AddStagings(site, index, staging);
+ });
+ } else {
+ $('#StagingBody').html('| No staging sites found |
');
+ }
+ } catch (e) {
+ console.error('Error parsing staging data:', e);
+ $('#StagingBody').html('| Error loading staging sites |
');
+ }
+
+ } else {
+ console.error("Error from server:", response.data.error_message);
+ $('#StagingBody').html('| Error: ' + response.data.error_message + ' |
');
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ console.error("Request failed:", response);
+ $('#StagingBody').html('| Failed to load staging sites |
');
+ }
+ }, 100); // Small delay to ensure DOM is ready
+
+ };
+
+ $scope.fetchDatabase = function () {
+
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/fetchDatabase";
+
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ $('#DB_Name').html(response.data.DataBaseName);
+ $('#DB_User').html(response.data.DataBaseUser);
+ $('#tableprefix').html(response.data.tableprefix);
+ } else {
+ alert("Error data.error_message:" + response.data.error_message)
+
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ alert("Error" + response)
+
+ }
+
+ };
+
+ $scope.SaveUpdateConfig = function () {
+ $('#wordpresshomeloading').show();
+ var data = {
+ AutomaticUpdates: $('#AutomaticUpdates').find(":selected").text(),
+ Plugins: $('#Plugins').find(":selected").text(),
+ Themes: $('#Themes').find(":selected").text(),
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/SaveUpdateConfig";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Update Configurations Sucessfully!.',
+ type: 'success'
+ });
+ $("#autoUpdateConfig").modal('hide');
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response,
+ type: 'error'
+ });
+
+ }
+ };
+
+ function AddStagings(value, index, array) {
+ var stagingUrl = 'http://' + value.Domain;
+ var createdDate = new Date().toLocaleDateString();
+
+ var FinalMarkup = '';
+ FinalMarkup += '| ' + value.name + ' | ';
+ FinalMarkup += '' + stagingUrl + ' | ';
+ FinalMarkup += '' + createdDate + ' | ';
+ FinalMarkup += '';
+ FinalMarkup += ' ';
+ FinalMarkup += '';
+ FinalMarkup += ' | ';
+ FinalMarkup += '
';
+
+ console.log('Appending to #stagingListBody');
+ if ($('#stagingListBody').length === 0) {
+ console.error('stagingListBody not found! Looking for StagingBody...');
+ if ($('#StagingBody').length > 0) {
+ console.log('Found StagingBody, using that instead');
+ $('#StagingBody').append(FinalMarkup);
+ } else {
+ console.error('Neither stagingListBody nor StagingBody found!');
+ console.log('Available table bodies:', $('tbody').map(function() { return this.id; }).get());
+ }
+ } else {
+ $('#stagingListBody').append(FinalMarkup);
+ }
+ console.log('Rows in table after append:', $('#stagingListBody').find('tr').length + ' in stagingListBody, ' + $('#StagingBody').find('tr').length + ' in StagingBody');
+ }
+
+ $scope.FinalDeployToProduction = function () {
+
+ $('#wordpresshomeloading').show();
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ var data = {
+ WPid: $('#WPid').html(),
+ StagingID: DeploytoProductionID
+ }
+
+ var url = "/websites/DeploytoProduction";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Deploy To Production start!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response,
+ type: 'error'
+ });
+
+ }
+
+ };
+
+
+ $scope.CreateBackup = function () {
+ $('#wordpresshomeloading').show();
+ $('#createbackupbutton').prop('disabled', true).html(' Creating Backup...');
+
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.currentStatus = "Starting creation Backups..";
+ var data = {
+ WPid: $('#WPid').html(),
+ Backuptype: $('#backuptype').val()
+ }
+ var url = "/websites/WPCreateBackup";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Creating Backups!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ alert(response)
+
+ }
+
+ };
+
+
+ $scope.installwpcore = function () {
+
+ $('#wordpresshomeloading').show();
+ $('#wordpresshomeloadingsec').show();
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/installwpcore";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Results fetched..',
+ type: 'success'
+ });
+ $('#SecurityResult').html(response.data.result);
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+
+ };
+
+ $scope.dataintegrity = function () {
+
+ $('#wordpresshomeloading').show();
+ $('#wordpresshomeloadingsec').show();
+ var data = {
+ WPid: $('#WPid').html(),
+ }
+
+ $scope.wordpresshomeloading = false;
+
+ var url = "/websites/dataintegrity";
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Results fetched',
+ type: 'success'
+ });
+ $('#SecurityResult').html(response.data.result);
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#wordpresshomeloadingsec').hide();
+ $scope.wordpresshomeloading = true;
+ alert(response)
+
+ }
+ };
+
+ $scope.updateSetting = function(site, setting) {
+ var settingMap = {
+ 'search-indexing': 'searchIndex',
+ 'debugging': 'debugging',
+ 'password-protection': 'passwordProtection',
+ 'maintenance-mode': 'maintenanceMode'
+ };
+
+ // Toggle the state before sending request
+ site[settingMap[setting]] = site[settingMap[setting]] === 1 ? 0 : 1;
+
+ var data = {
+ siteId: site.id,
+ setting: setting,
+ value: site[settingMap[setting]]
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Setting updated successfully.',
+ type: 'success'
+ });
+ if (setting === 'password-protection' && site[settingMap[setting]] === 1) {
+ // Show password protection modal if enabling
+ site.PPUsername = "";
+ site.PPPassword = "";
+ $scope.currentWP = site;
+ $('#passwordProtectionModal').modal('show');
+ }
+ } else {
+ // Revert the change if update failed
+ site[settingMap[setting]] = site[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: response.data.error_message || 'Failed to update setting.',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ // Revert the change on error
+ site[settingMap[setting]] = site[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: 'Connection failed while updating setting.',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.submitPasswordProtection = function() {
+ console.log('submitPasswordProtection called');
+ console.log('Current WP:', $scope.currentWP);
+
+ if (!$scope.currentWP) {
+ console.error('No WordPress site selected');
+ new PNotify({
+ title: 'Error!',
+ text: 'No WordPress site selected.',
+ type: 'error'
+ });
+ return;
+ }
+
+ if (!$scope.currentWP.PPUsername || !$scope.currentWP.PPPassword) {
+ console.error('Missing username or password');
+ new PNotify({
+ title: 'Error!',
+ text: 'Please provide both username and password',
+ type: 'error'
+ });
+ return;
+ }
+
+ var data = {
+ siteId: $scope.currentWP.id,
+ setting: 'password-protection',
+ value: 1,
+ username: $scope.currentWP.PPUsername,
+ password: $scope.currentWP.PPPassword
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log('Sending request with data:', data);
+ $('#passwordProtectionModal').modal('hide');
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ console.log('Received response:', response);
+ if (response.data.status) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Password protection enabled successfully!',
+ type: 'success'
+ });
+ } else {
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to enable password protection',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ console.error('Request failed:', error);
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: 'Could not connect to server',
+ type: 'error'
+ });
+ });
+ };
+
+});
+
+
+var PluginsList = [];
+
+
+function AddPluginToArray(cBox, name) {
+ if (cBox.checked) {
+ PluginsList.push(name);
+ // alert(PluginsList);
+ } else {
+ const index = PluginsList.indexOf(name);
+ if (index > -1) {
+ PluginsList.splice(index, 1);
+ }
+ // alert(PluginsList);
+ }
+}
+
+var ThemesList = [];
+
+function AddThemeToArray(cBox, name) {
+ if (cBox.checked) {
+ ThemesList.push(name);
+ // alert(ThemesList);
+ } else {
+ const index = ThemesList.indexOf(name);
+ if (index > -1) {
+ ThemesList.splice(index, 1);
+ }
+ // alert(ThemesList);
+ }
+}
+
+
+function AppendToTable(table, markup) {
+ $(table).append(markup);
+}
+
+
+//..................Restore Backup Home
+
+
+app.controller('RestoreWPBackup', function ($scope, $http, $timeout, $window) {
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+
+ $scope.checkmethode = function () {
+ var val = $('#RestoreMethode').children("option:selected").val();
+ if (val == 1) {
+ $('#Newsitediv').show();
+ $('#exinstingsitediv').hide();
+ } else if (val == 0) {
+ $('#exinstingsitediv').show();
+ $('#Newsitediv').hide();
+ } else {
+
+ }
+ };
+
+
+ $scope.RestoreWPbackupNow = function () {
+ $('#wordpresshomeloading').show();
+ $scope.wordpresshomeloading = false;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.currentStatus = "Start Restoring WordPress..";
+
+ var Domain = $('#wprestoresubdirdomain').val()
+ var path = $('#wprestoresubdirpath').val();
+ var home = "1";
+
+ if (typeof path != 'undefined' || path != '') {
+ home = "0";
+ }
+ if (typeof path == 'undefined') {
+ path = "";
+ }
+
+
+ var backuptype = $('#backuptype').html();
+ var data;
+ if (backuptype == "DataBase Backup") {
+ data = {
+ backupid: $('#backupid').html(),
+ DesSite: $('#DesSite').children("option:selected").val(),
+ Domain: '',
+ path: path,
+ home: home,
+ }
+ } else {
+ data = {
+ backupid: $('#backupid').html(),
+ DesSite: $('#DesSite').children("option:selected").val(),
+ Domain: Domain,
+ path: path,
+ home: home,
+ }
+
+ }
+
+ var url = "/websites/RestoreWPbackupNow";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ // console.log(data)
+
+ var d = $('#DesSite').children("option:selected").val();
+ var c = $("input[name=Newdomain]").val();
+ // if (d == -1 || c == "") {
+ // alert("Please Select Method of Backup Restore");
+ // } else {
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ // }
+
+
+ function ListInitialDatas(response) {
+ wordpresshomeloading = true;
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Restoring process starts!.',
+ type: 'success'
+ });
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+
+ } else {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+ }
+
+ function getCreationStatus() {
+ $('#wordpresshomeloading').show();
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ if (response.data.abort === 1) {
+ $('#wordpresshomeloading').hide();
+
+ if (response.data.installStatus === 1) {
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $("#installProgressbackup").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ // Re-enable buttons
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // For backup operations, refresh the backup list
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' Backup created successfully!');
+ if (typeof window.fetchBackupList === 'function') {
+ window.fetchBackupList();
+ }
+ // Clear status after 5 seconds
+ setTimeout(function() {
+ $('#backupStatus').text('');
+ }, 5000);
+ }
+ // For staging operations, refresh the staging list
+ else {
+ $('#stagingStatus').html(' Staging site created successfully!');
+ $scope.fetchstaging();
+ // Clear status after 5 seconds
+ setTimeout(function() {
+ $('#stagingStatus').text('');
+ }, 5000);
+ }
+
+
+ } else {
+ $('#wordpresshomeloading').hide();
+
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $("#installProgressbackup").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ // Re-enable buttons on error
+ $('#createbackupbutton').prop('disabled', false).html(' Create Backup');
+ $('button[ng-click="CreateStagingNow()"]').prop('disabled', false).html(' Create Staging Site');
+
+ // Show error status
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(' ' + response.data.error_message + '');
+ } else {
+ $('#stagingStatus').html(' ' + response.data.error_message + '');
+ }
+
+
+ }
+
+ } else {
+
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $("#installProgressbackup").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+
+ // Update status displays with progress
+ var statusHtml = ' ' + response.data.currentStatus;
+ if (response.data.installationProgress) {
+ statusHtml += ' (' + response.data.installationProgress + '%)';
+ }
+
+ if (statusFile && statusFile.includes('backup')) {
+ $('#backupStatus').html(statusHtml);
+ } else {
+ $('#stagingStatus').html(statusHtml);
+ }
+
+ $timeout(getCreationStatus, 1000);
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#wordpresshomeloading').hide();
+ $('#createBackupBtn').prop('disabled', false).html(' Create Backup');
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+ $scope.goBack = function () {
+ $('#wordpresshomeloading').hide();
+ $scope.wordpresshomeloading = true;
+ $scope.stagingDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+});
+
+
+//.......................................Remote Backup
+
+//........... delete DeleteBackupConfigNow
+
+function DeleteBackupConfigNow(url) {
+ window.location.href = url;
+}
+
+function DeleteRemoteBackupsiteNow(url) {
+ window.location.href = url;
+}
+
+function DeleteBackupfileConfigNow(url) {
+ window.location.href = url;
+}
+
+
+app.controller('RemoteBackupConfig', function ($scope, $http, $timeout, $window) {
+ $scope.RemoteBackupLoading = true;
+ $scope.SFTPBackUpdiv = true;
+
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ $scope.SelectRemoteBackuptype = function () {
+ var val = $scope.RemoteBackuptype;
+ if (val == "SFTP") {
+ $scope.SFTPBackUpdiv = false;
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ } else if (val == "S3") {
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = false;
+ $scope.S3keyNamediv = false;
+ $scope.Accesskeydiv = false;
+ $scope.SecretKeydiv = false;
+ $scope.SFTPBackUpdiv = true;
+ } else {
+ $scope.RemoteBackupLoading = true;
+ $scope.SFTPBackUpdiv = true;
+
+ $scope.EndpointURLdiv = true;
+ $scope.Selectprovider = true;
+ $scope.S3keyNamediv = true;
+ $scope.Accesskeydiv = true;
+ $scope.SecretKeydiv = true;
+ }
+ }
+
+ $scope.SelectProvidertype = function () {
+ $scope.EndpointURLdiv = true;
+ var provider = $scope.Providervalue
+ if (provider == 'Backblaze') {
+ $scope.EndpointURLdiv = false;
+ } else {
+ $scope.EndpointURLdiv = true;
+ }
+ }
+
+ $scope.SaveBackupConfig = function () {
+ $scope.RemoteBackupLoading = false;
+ var Hname = $scope.Hostname;
+ var Uname = $scope.Username;
+ var Passwd = $scope.Password;
+ var path = $scope.path;
+ var type = $scope.RemoteBackuptype;
+ var Providervalue = $scope.Providervalue;
+ var data;
+ if (type == "SFTP") {
+
+ data = {
+ Hname: Hname,
+ Uname: Uname,
+ Passwd: Passwd,
+ path: path,
+ type: type
+ }
+ } else if (type == "S3") {
+ if (Providervalue == "Backblaze") {
+ data = {
+ S3keyname: $scope.S3keyName,
+ Provider: Providervalue,
+ AccessKey: $scope.Accesskey,
+ SecertKey: $scope.SecretKey,
+ EndUrl: $scope.EndpointURL,
+ type: type
+ }
+ } else {
+ data = {
+ S3keyname: $scope.S3keyName,
+ Provider: Providervalue,
+ AccessKey: $scope.Accesskey,
+ SecertKey: $scope.SecretKey,
+ type: type
+ }
+
+ }
+
+ }
+ var url = "/websites/SaveBackupConfig";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ }
+
+});
+
+var UpdatescheduleID;
+app.controller('BackupSchedule', function ($scope, $http, $timeout, $window) {
+ $scope.BackupScheduleLoading = true;
+ $scope.SaveBackupSchedule = function () {
+ $scope.RemoteBackupLoading = false;
+ var FileRetention = $scope.Fretention;
+ var Backfrequency = $scope.Bfrequency;
+
+
+ var data = {
+ FileRetention: FileRetention,
+ Backfrequency: Backfrequency,
+ ScheduleName: $scope.ScheduleName,
+ RemoteConfigID: $('#RemoteConfigID').html(),
+ BackupType: $scope.BackupType
+ }
+ var url = "/websites/SaveBackupSchedule";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ };
+
+
+ $scope.getupdateid = function (ID) {
+ UpdatescheduleID = ID;
+ }
+
+ $scope.UpdateRemoteschedules = function () {
+ $scope.RemoteBackupLoading = false;
+ var Frequency = $scope.RemoteFrequency;
+ var fretention = $scope.RemoteFileretention;
+
+ var data = {
+ ScheduleID: UpdatescheduleID,
+ Frequency: Frequency,
+ FileRetention: fretention
+ }
+ var url = "/websites/UpdateRemoteschedules";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Updated!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+ };
+
+ $scope.AddWPsiteforRemoteBackup = function () {
+ $scope.RemoteBackupLoading = false;
+
+
+ var data = {
+ WpsiteID: $('#Wpsite').val(),
+ RemoteScheduleID: $('#RemoteScheduleID').html()
+ }
+ var url = "/websites/AddWPsiteforRemoteBackup";
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+
+ } else {
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.RemoteBackupLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ };
+});
+/* Java script code to create account */
+
+var website_create_domain_check = 0;
+
+function website_create_checkbox_function() {
+
+ var checkBox = document.getElementById("myCheck");
+ // Get the output text
+
+
+ // If the checkbox is checked, display the output text
+ if (checkBox.checked == true) {
+ website_create_domain_check = 0;
+ document.getElementById('Website_Create_Test_Domain').style.display = "block";
+ document.getElementById('Website_Create_Own_Domain').style.display = "none";
+
+ } else {
+ document.getElementById('Website_Create_Test_Domain').style.display = "none";
+ document.getElementById('Website_Create_Own_Domain').style.display = "block";
+ website_create_domain_check = 1;
+ }
+
+ // alert(domain_check);
+}
+
+
+/* Java script code to create account ends here */
+
+/* Java script code to list accounts */
+
+$("#listFail").hide();
+
+
+app.controller('listWebsites', function ($scope, $http, $window) {
+ $scope.web = {};
+ $scope.WebSitesList = [];
+ $scope.loading = true; // Add loading state
+ $scope.expandedSites = {}; // Track which sites are expanded
+
+ $scope.currentPage = 1;
+ $scope.recordsToShow = 10;
+
+ // Function to toggle site expansion
+ $scope.toggleSite = function(site) {
+ if (!$scope.expandedSites[site.domain]) {
+ $scope.expandedSites[site.domain] = true;
+ site.loading = true;
+ // You can add any data fetching logic here if needed
+ setTimeout(function() {
+ site.loading = false;
+ $scope.$apply();
+ }, 500);
+ } else {
+ $scope.expandedSites[site.domain] = false;
+ }
+ };
+
+ // Function to check if site is expanded
+ $scope.isExpanded = function(siteId) {
+ return $scope.expandedSites[siteId];
+ };
+
+ // Function to check if site data is loaded
+ $scope.isDataLoaded = function(site) {
+ return site.version !== undefined;
+ };
+
+ // Function to get SSL tooltip text
+ $scope.getSslTooltip = function(web) {
+ if (!web.ssl) return '';
+
+ var tooltip = '';
+ if (web.ssl.issuer && web.ssl.issuer !== '') {
+ tooltip += 'Issuer: ' + web.ssl.issuer;
+ }
+
+ if (web.ssl.days !== undefined) {
+ if (tooltip) tooltip += ' | ';
+ if (web.ssl.days < 0) {
+ tooltip += 'Expired ' + Math.abs(web.ssl.days) + ' days ago';
+ } else {
+ tooltip += 'Valid for ' + web.ssl.days + ' days';
+ }
+ }
+
+ if (web.ssl.is_wildcard) {
+ if (tooltip) tooltip += ' | ';
+ tooltip += 'Wildcard Certificate';
+ }
+
+ if (web.ssl.status === 'none') {
+ tooltip = 'No SSL certificate installed. Click "Issue SSL" to secure this site.';
+ } else if (web.ssl.status === 'self-signed') {
+ tooltip = 'Self-signed certificate detected. Not trusted by browsers.';
+ }
+
+ return tooltip;
+ };
+
+ // Initial fetch of websites
+ $scope.getFurtherWebsitesFromDB = function () {
+ $scope.loading = true; // Set loading to true when starting fetch
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ page: $scope.currentPage,
+ recordsToShow: $scope.recordsToShow
+ };
+
+ var dataurl = "/websites/fetchWebsitesList";
+
+ $http.post(dataurl, data, config).then(function(response) {
+ if (response.data.listWebSiteStatus === 1) {
+ $scope.WebSitesList = JSON.parse(response.data.data);
+ $scope.pagination = response.data.pagination;
+ $("#listFail").hide();
+ // Expand the first site by default
+ if ($scope.WebSitesList.length > 0) {
+ $scope.expandedSites[$scope.WebSitesList[0].domain] = true;
+ }
+ } else {
+ $("#listFail").fadeIn();
+ $scope.errorMessage = response.data.error_message;
+ }
+ $scope.loading = false; // Set loading to false when done
+ }).catch(function(error) {
+ $("#listFail").fadeIn();
+ $scope.errorMessage = error.message || 'An error occurred while fetching websites';
+ $scope.loading = false; // Set loading to false on error
+ });
+ };
+
+ // Call it immediately
+ $scope.getFurtherWebsitesFromDB();
+
+ $scope.showWPSites = function(domain) {
+ console.log('showWPSites called for domain:', domain);
+
+ // Make sure domain is defined
+ if (!domain) {
+ console.error('Domain is undefined');
+ return;
+ }
+
+ // Find the website in the list
+ var site = $scope.WebSitesList.find(function(website) {
+ return website.domain === domain;
+ });
+
+ if (!site) {
+ console.error('Website not found:', domain);
+ return;
+ }
+
+ // Set loading state
+ site.loadingWPSites = true;
+
+ // Toggle visibility
+ site.showWPSites = !site.showWPSites;
+
+ // If we're hiding, just return
+ if (!site.showWPSites) {
+ site.loadingWPSites = false;
+ return;
+ }
+
+ var config = {
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = $.param({
+ domain: domain
+ });
+
+ $http.post('/websites/fetchWPDetails', data, config)
+ .then(function(response) {
+ console.log('Response received:', response);
+ if (response.data.status === 1 && response.data.fetchStatus === 1) {
+ site.wp_sites = response.data.sites || [];
+ // Initialize loading states for each WP site
+ site.wp_sites.forEach(function(wp) {
+ wp.loading = false;
+ wp.loadingPlugins = false;
+ wp.loadingTheme = false;
+ });
+ $("#listFail").hide();
+ } else {
+ $("#listFail").fadeIn();
+ site.showWPSites = false;
+ $scope.errorMessage = response.data.error_message || 'Failed to fetch WordPress sites';
+ console.error('Error in response:', response.data.error_message);
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to fetch WordPress sites',
+ type: 'error'
+ });
+ }
+ })
+ .catch(function(error) {
+ console.error('Request failed:', error);
+ site.showWPSites = false;
+ $("#listFail").fadeIn();
+ $scope.errorMessage = error.message || 'An error occurred while fetching WordPress sites';
+ new PNotify({
+ title: 'Error!',
+ text: error.message || 'Could not connect to server',
+ type: 'error'
+ });
+ })
+ .finally(function() {
+ site.loadingWPSites = false;
+ });
+ };
+
+ $scope.visitSite = function(wp) {
+ var url = wp.url || wp.domain;
+ if (!url) return;
+ if (!url.startsWith('http://') && !url.startsWith('https://')) {
+ url = 'https://' + url;
+ }
+ window.open(url, '_blank');
+ };
+
+ $scope.wpLogin = function(wpId) {
+ window.open('/websites/wpLogin?wpID=' + wpId, '_blank');
+ };
+
+ $scope.manageWP = function(wpId) {
+ window.location.href = '/websites/WPHome?ID=' + wpId;
+ };
+
+ $scope.updateSetting = function(wp, setting) {
+ var settingMap = {
+ 'search-indexing': 'searchIndex',
+ 'debugging': 'debugging',
+ 'password-protection': 'passwordProtection',
+ 'maintenance-mode': 'maintenanceMode'
+ };
+
+ // Toggle the state before sending request
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+
+ var data = {
+ siteId: wp.id,
+ setting: setting,
+ value: wp[settingMap[setting]]
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Setting updated successfully.',
+ type: 'success'
+ });
+ if (setting === 'password-protection' && wp[settingMap[setting]] === 1) {
+ // Show password protection modal if enabling
+ wp.PPUsername = "";
+ wp.PPPassword = "";
+ $scope.currentWP = wp;
+ $('#passwordProtectionModal').modal('show');
+ }
+ } else {
+ // Revert the change if update failed
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: response.data.error_message || 'Failed to update setting.',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ // Revert the change on error
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: 'Connection failed while updating setting.',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.cyberPanelLoading = true;
+
+ $scope.issueSSL = function (virtualHost) {
+ $scope.cyberPanelLoading = false;
+
+ var url = "/manageSSL/issueSSL";
+
+
+ var data = {
+ virtualHost: virtualHost
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.cyberPanelLoading = true;
+ if (response.data.SSL === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'SSL successfully issued.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.cyberPanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page',
+ type: 'error'
+ });
+ }
+
+
+ };
+
+ $scope.cyberPanelLoading = true;
+
+ $scope.searchWebsites = function () {
+ $scope.loading = true; // Set loading to true when starting search
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ patternAdded: $scope.patternAdded
+ };
+
+ dataurl = "/websites/searchWebsites";
+
+ $http.post(dataurl, data, config).then(function(response) {
+ if (response.data.listWebSiteStatus === 1) {
+ var finalData = JSON.parse(response.data.data);
+ $scope.WebSitesList = finalData;
+ $("#listFail").hide();
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ $scope.loading = false; // Set loading to false when done
+ }).catch(function(error) {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Connect disrupted, refresh the page.',
+ type: 'error'
+ });
+ $scope.loading = false; // Set loading to false on error
+ });
+ };
+
+ $scope.ScanWordpressSite = function () {
+
+ $('#cyberPanelLoading').show();
+
+
+ var url = "/websites/ScanWordpressSite";
+
+ var data = {}
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ $('#cyberPanelLoading').hide();
+
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Successfully Saved!.',
+ type: 'success'
+ });
+ location.reload();
+
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $('#cyberPanelLoading').hide();
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+
+ }
+
+
+ };
+
+ $scope.deleteWPSite = function(wp) {
+ if (confirm('Are you sure you want to delete this WordPress site? This action cannot be undone.')) {
+ window.location.href = '/websites/ListWPSites?DeleteID=' + wp.id;
+ }
+ };
+
+ $scope.togglePasswordProtection = function(wp) {
+ console.log('togglePasswordProtection called for:', wp);
+ console.log('Current password protection state:', wp.passwordProtection);
+
+ if (wp.passwordProtection) {
+ // Show modal for credentials
+ console.log('Showing modal for credentials');
+ wp.PPUsername = "";
+ wp.PPPassword = "";
+ $scope.currentWP = wp;
+ console.log('Current WP set to:', $scope.currentWP);
+ $('#passwordProtectionModal').modal('show');
+ } else {
+ // Disable password protection
+ console.log('Disabling password protection');
+ var data = {
+ siteId: wp.id,
+ setting: 'password-protection',
+ value: 0
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log('Sending request with data:', data);
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ console.log('Received response:', response);
+ if (!response.data.status) {
+ wp.passwordProtection = !wp.passwordProtection;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message || 'Failed to disable password protection',
+ type: 'error'
+ });
+ } else {
+ new PNotify({
+ title: 'Success!',
+ text: 'Password protection disabled successfully.',
+ type: 'success'
+ });
+ }
+ }).catch(function(error) {
+ console.error('Request failed:', error);
+ wp.passwordProtection = !wp.passwordProtection;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server.',
+ type: 'error'
+ });
+ });
+ }
+ };
+
+ $scope.submitPasswordProtection = function() {
+ console.log('submitPasswordProtection called');
+ console.log('Current WP:', $scope.currentWP);
+
+ if (!$scope.currentWP) {
+ console.error('No WordPress site selected');
+ new PNotify({
+ title: 'Error!',
+ text: 'No WordPress site selected.',
+ type: 'error'
+ });
+ return;
+ }
+
+ if (!$scope.currentWP.PPUsername || !$scope.currentWP.PPPassword) {
+ console.error('Missing username or password');
+ new PNotify({
+ title: 'Error!',
+ text: 'Please provide both username and password',
+ type: 'error'
+ });
+ return;
+ }
+
+ var data = {
+ siteId: $scope.currentWP.id,
+ setting: 'password-protection',
+ value: 1,
+ username: $scope.currentWP.PPUsername,
+ password: $scope.currentWP.PPPassword
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ console.log('Sending request with data:', data);
+ $('#passwordProtectionModal').modal('hide');
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ console.log('Received response:', response);
+ if (response.data.status) {
+ new PNotify({
+ title: 'Success!',
+ text: 'Password protection enabled successfully!',
+ type: 'success'
+ });
+ } else {
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to enable password protection',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ console.error('Request failed:', error);
+ $scope.currentWP.passwordProtection = false;
+ new PNotify({
+ title: 'Error!',
+ text: 'Could not connect to server',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.goToManage = function($event, domain) {
+ $event.stopPropagation();
+ window.location = '/websites/' + domain;
+ };
+
+ $scope.goToFileManager = function($event, domain) {
+ $event.stopPropagation();
+ window.location = '/filemanager/' + domain;
+ };
+
+});
+
+app.controller('listChildDomainsMain', function ($scope, $http, $timeout) {
+
+ $scope.currentPage = 1;
+ $scope.recordsToShow = 10;
+
+ $scope.getFurtherWebsitesFromDB = function () {
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ page: $scope.currentPage,
+ recordsToShow: $scope.recordsToShow
+ };
+
+
+ dataurl = "/websites/fetchChildDomainsMain";
+
+ $http.post(dataurl, data, config).then(ListInitialData, cantLoadInitialData);
+
+
+ function ListInitialData(response) {
+ if (response.data.listWebSiteStatus === 1) {
+
+ $scope.WebSitesList = JSON.parse(response.data.data);
+ $scope.pagination = response.data.pagination;
+ $scope.clients = JSON.parse(response.data.data);
+ $("#listFail").hide();
+ } else {
+ $("#listFail").fadeIn();
+ $scope.errorMessage = response.data.error_message;
+
+ }
+ }
+
+ function cantLoadInitialData(response) {
+ }
+
+
+ };
+ $scope.getFurtherWebsitesFromDB();
+
+ $scope.cyberPanelLoading = true;
+
+ $scope.issueSSL = function (virtualHost) {
+ $scope.cyberPanelLoading = false;
+
+ var url = "/manageSSL/issueSSL";
+
+
+ var data = {
+ virtualHost: virtualHost
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ $scope.cyberPanelLoading = true;
+ if (response.data.SSL === 1) {
+ new PNotify({
+ title: 'Success!',
+ text: 'SSL successfully issued.',
+ type: 'success'
+ });
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.cyberPanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page',
+ type: 'error'
+ });
+ }
+
+
+ };
+
+ $scope.cyberPanelLoading = true;
+
+ $scope.searchWebsites = function () {
+
+ $scope.cyberPanelLoading = false;
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ patternAdded: $scope.patternAdded
+ };
+
+ dataurl = "/websites/searchChilds";
+
+ $http.post(dataurl, data, config).then(ListInitialData, cantLoadInitialData);
+
+
+ function ListInitialData(response) {
+ $scope.cyberPanelLoading = true;
+ if (response.data.listWebSiteStatus === 1) {
+
+ var finalData = JSON.parse(response.data.data);
+ $scope.WebSitesList = finalData;
+ $("#listFail").hide();
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+ }
+
+ function cantLoadInitialData(response) {
+ $scope.cyberPanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Connect disrupted, refresh the page.',
+ type: 'error'
+ });
+ }
+
+
+ };
+
+ $scope.initConvert = function (virtualHost) {
+ $scope.domainName = virtualHost;
+ };
+
+ var statusFile;
+
+ $scope.installationProgress = true;
+
+ $scope.convert = function () {
+
+ $scope.cyberPanelLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = true;
+
+ $scope.currentStatus = "Starting creation..";
+
+ var ssl, dkimCheck, openBasedir;
+
+ if ($scope.sslCheck === true) {
+ ssl = 1;
+ } else {
+ ssl = 0
+ }
+
+ if ($scope.dkimCheck === true) {
+ dkimCheck = 1;
+ } else {
+ dkimCheck = 0
+ }
+
+ if ($scope.openBasedir === true) {
+ openBasedir = 1;
+ } else {
+ openBasedir = 0
+ }
+
+ url = "/websites/convertDomainToSite";
+
+
+ var data = {
+ package: $scope.packageForWebsite,
+ domainName: $scope.domainName,
+ adminEmail: $scope.adminEmail,
+ phpSelection: $scope.phpSelection,
+ websiteOwner: $scope.websiteOwner,
+ ssl: ssl,
+ dkimCheck: dkimCheck,
+ openBasedir: openBasedir
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.createWebSiteStatus === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+
+ $scope.cyberPanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberPanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+ $scope.goBack = function () {
+ $scope.cyberPanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.cyberPanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.cyberPanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ $scope.currentStatus = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberPanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+ var DeleteDomain;
+ $scope.deleteDomainInit = function (childDomainForDeletion) {
DeleteDomain = childDomainForDeletion;
};
@@ -1082,6 +10743,39 @@ $("#modifyWebsiteLoading").hide();
$("#modifyWebsiteButton").hide();
app.controller('modifyWebsitesController', function ($scope, $http) {
+
+ // Initialize home directory variables
+ $scope.homeDirectories = [];
+ $scope.selectedHomeDirectory = '';
+ $scope.selectedHomeDirectoryInfo = null;
+ $scope.currentHomeDirectory = '';
+
+ // Load home directories on page load
+ $scope.loadHomeDirectories = function() {
+ $http.post('/userManagement/getUserHomeDirectories/', {})
+ .then(function(response) {
+ if (response.data.status === 1) {
+ $scope.homeDirectories = response.data.directories;
+ }
+ })
+ .catch(function(error) {
+ console.error('Error loading home directories:', error);
+ });
+ };
+
+ // Update home directory info when selection changes
+ $scope.updateHomeDirectoryInfo = function() {
+ if ($scope.selectedHomeDirectory) {
+ $scope.selectedHomeDirectoryInfo = $scope.homeDirectories.find(function(dir) {
+ return dir.id == $scope.selectedHomeDirectory;
+ });
+ } else {
+ $scope.selectedHomeDirectoryInfo = null;
+ }
+ };
+
+ // Initialize home directories
+ $scope.loadHomeDirectories();
$scope.fetchWebsites = function () {
@@ -1126,6 +10820,7 @@ app.controller('modifyWebsitesController', function ($scope, $http) {
$scope.webpacks = JSON.parse(response.data.packages);
$scope.adminNames = JSON.parse(response.data.adminNames);
$scope.currentAdmin = response.data.currentAdmin;
+ $scope.currentHomeDirectory = response.data.currentHomeDirectory || 'Default';
$("#webSiteDetailsToBeModified").fadeIn();
$("#websiteModifySuccess").fadeIn();
@@ -1153,6 +10848,7 @@ app.controller('modifyWebsitesController', function ($scope, $http) {
var email = $scope.adminEmail;
var phpVersion = $scope.phpSelection;
var admin = $scope.selectedAdmin;
+ var homeDirectory = $scope.selectedHomeDirectory;
$("#websiteModifyFailure").hide();
@@ -1169,7 +10865,8 @@ app.controller('modifyWebsitesController', function ($scope, $http) {
packForWeb: packForWeb,
email: email,
phpVersion: phpVersion,
- admin: admin
+ admin: admin,
+ homeDirectory: homeDirectory
};
var config = {
@@ -1224,9 +10921,125 @@ app.controller('modifyWebsitesController', function ($scope, $http) {
/* Java script code to create account */
+var website_child_domain_check = 0;
+
+function website_child_domain_checkbox_function() {
+
+ var checkBox = document.getElementById("myCheck");
+ // Get the output text
+
+
+ // If the checkbox is checked, display the output text
+ if (checkBox.checked == true) {
+ website_child_domain_check = 0;
+ document.getElementById('Website_Create_Test_Domain').style.display = "block";
+ document.getElementById('Website_Create_Own_Domain').style.display = "none";
+
+ } else {
+ document.getElementById('Website_Create_Test_Domain').style.display = "none";
+ document.getElementById('Website_Create_Own_Domain').style.display = "block";
+ website_child_domain_check = 1;
+ }
+
+ // alert(domain_check);
+}
app.controller('websitePages', function ($scope, $http, $timeout, $window) {
+ $scope.openWebTerminal = function() {
+ console.log('[DEBUG] openWebTerminal called');
+ $('#web-terminal-modal').modal('show');
+ console.log('[DEBUG] Modal should now be visible');
+
+ if ($scope.term) {
+ console.log('[DEBUG] Disposing previous terminal instance');
+ $scope.term.dispose();
+ }
+ var term = new Terminal({
+ cursorBlink: true,
+ fontFamily: 'monospace',
+ fontSize: 14,
+ theme: { background: '#000' }
+ });
+ $scope.term = term;
+ term.open(document.getElementById('xterm-container'));
+ term.focus();
+ console.log('[DEBUG] Terminal initialized and opened');
+
+ // Fetch JWT from backend with CSRF token
+ var domain = $("#domainNamePage").text();
+ var csrftoken = getCookie('csrftoken');
+ console.log('[DEBUG] Fetching JWT for domain:', domain);
+ $http.post('/websites/getTerminalJWT', { domain: domain }, {
+ headers: { 'X-CSRFToken': csrftoken }
+ })
+ .then(function(response) {
+ console.log('[DEBUG] JWT fetch response:', response);
+ if (response.data.status === 1 && response.data.token) {
+ var token = response.data.token;
+ var ssh_user = response.data.ssh_user;
+ var wsProto = location.protocol === 'https:' ? 'wss' : 'ws';
+ var wsUrl = wsProto + '://' + window.location.hostname + ':8888/ws?token=' + encodeURIComponent(token) + '&ssh_user=' + encodeURIComponent(ssh_user);
+ console.log('[DEBUG] Connecting to WebSocket:', wsUrl);
+ var socket = new WebSocket(wsUrl);
+ socket.binaryType = 'arraybuffer';
+ $scope.terminalSocket = socket;
+
+ socket.onopen = function() {
+ console.log('[DEBUG] WebSocket connection opened');
+ term.write('\x1b[32mConnected.\x1b[0m\r\n');
+ };
+ socket.onclose = function(event) {
+ console.log('[DEBUG] WebSocket connection closed', event);
+ term.write('\r\n\x1b[31mConnection closed.\x1b[0m\r\n');
+ // Optionally, log modal state
+ console.log('[DEBUG] Modal state on close:', $('#web-terminal-modal').is(':visible'));
+ };
+ socket.onerror = function(e) {
+ console.log('[DEBUG] WebSocket error', e);
+ term.write('\r\n\x1b[31mWebSocket error.\x1b[0m\r\n');
+ };
+ socket.onmessage = function(event) {
+ if (event.data instanceof ArrayBuffer) {
+ var text = new Uint8Array(event.data);
+ term.write(new TextDecoder().decode(text));
+ } else if (typeof event.data === 'string') {
+ term.write(event.data);
+ }
+ };
+ term.onData(function(data) {
+ if (socket.readyState === WebSocket.OPEN) {
+ var encoder = new TextEncoder();
+ socket.send(encoder.encode(data));
+ }
+ });
+ term.onResize(function(size) {
+ if (socket.readyState === WebSocket.OPEN) {
+ var msg = JSON.stringify({resize: {cols: size.cols, rows: size.rows}});
+ socket.send(msg);
+ }
+ });
+ $('#web-terminal-modal').on('hidden.bs.modal', function() {
+ console.log('[DEBUG] Modal hidden event triggered');
+ if ($scope.term) {
+ $scope.term.dispose();
+ $scope.term = null;
+ }
+ if ($scope.terminalSocket) {
+ $scope.terminalSocket.close();
+ $scope.terminalSocket = null;
+ }
+ });
+ } else {
+ console.log('[DEBUG] Failed to get terminal token', response);
+ term.write('\x1b[31mFailed to get terminal token.\x1b[0m\r\n');
+ }
+ }, function(error) {
+ console.log('[DEBUG] Failed to contact backend', error);
+ term.write('\x1b[31mFailed to contact backend.\x1b[0m\r\n');
+ });
+ };
+
$scope.logFileLoading = true;
$scope.logsFeteched = true;
$scope.couldNotFetchLogs = true;
@@ -2282,7 +12095,22 @@ app.controller('websitePages', function ($scope, $http, $timeout, $window) {
var statusFile;
- $scope.WebsiteSelection = function (){
+
+ $scope.webselection = true;
+ $scope.WebsiteType = function () {
+ var type = $scope.websitetype;
+ if (type == 'Sub Domain') {
+ $scope.webselection = false;
+ $scope.DomainCreateForm = true;
+
+ } else if (type == 'Addon Domain') {
+ $scope.DomainCreateForm = false;
+ $scope.webselection = true;
+ $scope.masterDomain = $('#defaultSite').html()
+ }
+ };
+
+ $scope.WebsiteSelection = function () {
$scope.DomainCreateForm = false;
};
@@ -2298,7 +12126,7 @@ app.controller('websitePages', function ($scope, $http, $timeout, $window) {
$scope.currentStatus = "Starting creation..";
$scope.DomainCreateForm = true;
- var ssl, dkimCheck, openBasedir;
+ var ssl, dkimCheck, openBasedir, apacheBackend;
if ($scope.sslCheck === true) {
ssl = 1;
@@ -2319,6 +12147,13 @@ app.controller('websitePages', function ($scope, $http, $timeout, $window) {
}
+ if ($scope.apacheBackend === true) {
+ apacheBackend = 1;
+ } else {
+ apacheBackend = 0
+ }
+
+
url = "/websites/submitDomainCreation";
var domainName = $scope.domainNameCreate;
var phpSelection = $scope.phpSelection;
@@ -2328,6 +12163,19 @@ app.controller('websitePages', function ($scope, $http, $timeout, $window) {
if (typeof path === 'undefined') {
path = "";
}
+ var package = $scope.packageForWebsite;
+
+ // if (website_child_domain_check == 0) {
+ // var Part2_domainNameCreate = document.getElementById('Part2_domainNameCreate').value;
+ // var domainName = document.getElementById('TestDomainNameCreate').value + Part2_domainNameCreate;
+ // }
+ // if (website_child_domain_check == 1) {
+ //
+ // var domainName = $scope.own_domainNameCreate;
+ // }
+ var type = $scope.websitetype;
+
+ var domainName = $scope.domainNameCreate;
var data = {
@@ -2337,7 +12185,8 @@ app.controller('websitePages', function ($scope, $http, $timeout, $window) {
path: path,
masterDomain: $scope.masterDomain,
dkimCheck: dkimCheck,
- openBasedir: openBasedir
+ openBasedir: openBasedir,
+ apacheBackend: apacheBackend
};
var config = {
@@ -2346,6 +12195,8 @@ app.controller('websitePages', function ($scope, $http, $timeout, $window) {
}
};
+ // console.log(data)
+
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
@@ -2552,7 +12403,6 @@ app.controller('websitePages', function ($scope, $http, $timeout, $window) {
}
-
$scope.changePHP = function (childDomain, phpSelection) {
// notifcations
@@ -2934,7 +12784,7 @@ app.controller('websitePages', function ($scope, $http, $timeout, $window) {
$scope.operationFailed = false;
$scope.operationSuccessfull = true;
$scope.couldNotConnect = true;
- $scope.openBaseDirBox = false;
+ $scope.openBaseDirChanged = false;
$scope.errorMessage = response.data.error_message;
@@ -2968,6 +12818,7 @@ RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
### End CyberPanel Generated Rules.
`;
+
const WWWToNonWWW = `### Rewrite Rules Added by CyberPanel Rewrite Rule Generator
RewriteEngine On
@@ -3003,11 +12854,9 @@ RewriteRule ^/(xmlrpc|wp-trackback)\.php - [F,L,NC]
$scope.rewriteRules = httpToHTTPS + $scope.rewriteRules;
} else if ($scope.rewriteTemplate === "Force NON-WWW -> WWW") {
$scope.rewriteRules = nonWWWToWWW + $scope.rewriteRules;
- }
- else if ($scope.rewriteTemplate === "Force WWW -> NON-WWW") {
+ } else if ($scope.rewriteTemplate === "Force WWW -> NON-WWW") {
$scope.rewriteRules = WWWToNonWWW + $scope.rewriteRules;
- }
- else if ($scope.rewriteTemplate === "Disable Wordpress XMLRPC & Trackback") {
+ } else if ($scope.rewriteTemplate === "Disable Wordpress XMLRPC & Trackback") {
$scope.rewriteRules = WordpressProtect + $scope.rewriteRules;
}
};
@@ -3489,6 +13338,16 @@ app.controller('manageAliasController', function ($scope, $http, $timeout, $wind
$scope.manageAliasLoading = true;
$scope.operationSuccess = true;
+ // Initialize the page to show aliases list
+ $scope.showAliasesList = function() {
+ $scope.aliasTable = true;
+ $scope.addAliasButton = true;
+ $scope.domainAliasForm = false;
+ };
+
+ // Auto-show aliases list on page load
+ $scope.showAliasesList();
+
$scope.createAliasEnter = function ($event) {
var keyCode = $event.which || $event.keyCode;
if (keyCode === 13) {
@@ -3499,12 +13358,15 @@ app.controller('manageAliasController', function ($scope, $http, $timeout, $wind
$scope.showAliasForm = function (domainName) {
- $scope.domainAliasForm = false;
- $scope.aliasTable = true;
- $scope.addAliasButton = true;
+ //$scope.domainAliasForm = false;
+ //$scope.aliasTable = true;
+ //$scope.addAliasButton = true;
masterDomain = domainName;
+ $scope.showCreateDomainForm();
+ $scope.masterDomain = domainName;
+
};
$scope.addAliasFunc = function () {
@@ -3698,6 +13560,7 @@ app.controller('manageAliasController', function ($scope, $http, $timeout, $wind
$window.location.reload();
}, 3000);
+
} else {
$scope.aliasTable = false;
@@ -3732,73 +13595,233 @@ app.controller('manageAliasController', function ($scope, $http, $timeout, $wind
};
+ $scope.issueAliasSSL = function (masterDomain, aliasDomain) {
+ $scope.manageAliasLoading = false;
-});
+ url = "/websites/issueAliasSSL";
-/* Java script code to manage cron ends here */
+ var data = {
+ masterDomain: masterDomain,
+ aliasDomain: aliasDomain
+ };
-app.controller('launchChild', function ($scope, $http) {
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
- $scope.logFileLoading = true;
- $scope.logsFeteched = true;
- $scope.couldNotFetchLogs = true;
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+ if (response.data.issueAliasSSL === 1) {
+ $scope.aliasTable = false;
+ $scope.addAliasButton = true;
+ $scope.domainAliasForm = true;
+ $scope.aliasError = true;
+ $scope.couldNotConnect = true;
+ $scope.aliasCreated = true;
+ $scope.manageAliasLoading = true;
+ $scope.operationSuccess = false;
+
+ $timeout(function () {
+ $window.location.reload();
+ }, 3000);
+ } else {
+ $scope.aliasTable = false;
+ $scope.addAliasButton = true;
+ $scope.domainAliasForm = true;
+ $scope.aliasError = false;
+ $scope.couldNotConnect = true;
+ $scope.aliasCreated = true;
+ $scope.manageAliasLoading = true;
+ $scope.operationSuccess = true;
+
+ $scope.errorMessage = response.data.error_message;
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.aliasTable = false;
+ $scope.addAliasButton = true;
+ $scope.domainAliasForm = true;
+ $scope.aliasError = true;
+ $scope.couldNotConnect = false;
+ $scope.aliasCreated = true;
+ $scope.manageAliasLoading = true;
+ $scope.operationSuccess = true;
+ }
+ };
+
+
+ ////// create domain part
+
+ $("#domainCreationForm").hide();
+
+ $scope.showCreateDomainForm = function () {
+ $("#domainCreationForm").fadeIn();
+ };
+
+ $scope.hideDomainCreationForm = function () {
+ $("#domainCreationForm").fadeOut();
+ };
+
+ $scope.masterDomain = $("#domainNamePage").text();
+
+ // notifcations settings
+ $scope.domainLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
$scope.couldNotConnect = true;
- $scope.fetchedData = true;
- $scope.hideLogs = true;
- $scope.hideErrorLogs = true;
+ $scope.goBackDisable = true;
+ $scope.DomainCreateForm = true;
- $scope.hidelogsbtn = function () {
- $scope.hideLogs = true;
+ var statusFile;
+
+
+ $scope.webselection = true;
+ $scope.WebsiteType = function () {
+ var type = $scope.websitetype;
+ if (type == 'Sub Domain') {
+ $scope.webselection = false;
+ $scope.DomainCreateForm = true;
+
+ } else if (type == 'Addon Domain') {
+ $scope.DomainCreateForm = false;
+ $scope.webselection = true;
+ $scope.masterDomain = $('#defaultSite').html()
+ }
};
- $scope.hideErrorLogsbtn = function () {
- $scope.hideLogs = true;
+ $scope.WebsiteSelection = function () {
+ $scope.DomainCreateForm = false;
};
- $scope.fileManagerURL = "/filemanager/" + $("#domainNamePage").text();
- $scope.previewUrl = "/preview/" + $("#childDomain").text() + "/";
- $scope.wordPressInstallURL = "/websites/" + $("#childDomain").text() + "/wordpressInstall";
- $scope.joomlaInstallURL = "/websites/" + $("#childDomain").text() + "/joomlaInstall";
- $scope.setupGit = "/websites/" + $("#childDomain").text() + "/setupGit";
- $scope.installPrestaURL = "/websites/" + $("#childDomain").text() + "/installPrestaShop";
- $scope.installMagentoURL = "/websites/" + $("#childDomain").text() + "/installMagento";
+ $scope.createDomain = function () {
- var logType = 0;
- $scope.pageNumber = 1;
+ $scope.domainLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.currentStatus = "Starting creation..";
+ $scope.DomainCreateForm = true;
- $scope.fetchLogs = function (type) {
+ var ssl, dkimCheck, openBasedir, apacheBackend;
- var pageNumber = $scope.pageNumber;
-
-
- if (type == 3) {
- pageNumber = $scope.pageNumber + 1;
- $scope.pageNumber = pageNumber;
- } else if (type == 4) {
- pageNumber = $scope.pageNumber - 1;
- $scope.pageNumber = pageNumber;
+ if ($scope.sslCheck === true) {
+ ssl = 1;
} else {
- logType = type;
+ ssl = 0
}
+ if ($scope.dkimCheck === true) {
+ dkimCheck = 1;
+ } else {
+ dkimCheck = 0
+ }
- $scope.logFileLoading = false;
- $scope.logsFeteched = true;
- $scope.couldNotFetchLogs = true;
- $scope.couldNotConnect = true;
- $scope.fetchedData = false;
- $scope.hideErrorLogs = true;
+ openBasedir = 0;
- url = "/websites/getDataFromLogFile";
+ apacheBackend = 0
- var domainNamePage = $("#domainNamePage").text();
+
+ url = "/websites/submitDomainCreation";
+ var domainName = $scope.domainNameCreate;
+
+ var path = $scope.docRootPath;
+
+ if (typeof path === 'undefined') {
+ path = "";
+ }
+
+ var domainName = $scope.domainNameCreate;
var data = {
- logType: logType,
- virtualHost: domainNamePage,
- page: pageNumber,
+ domainName: domainName,
+ ssl: ssl,
+ path: path,
+ masterDomain: $scope.masterDomain,
+ dkimCheck: 1,
+ openBasedir: 0,
+ alias: 1
+ };
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ // console.log(data)
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.createWebSiteStatus === 1) {
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+
+ $scope.domainLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.DomainCreateForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.domainLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.DomainCreateForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+
+ $scope.goBack = function () {
+ $scope.domainLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.DomainCreateForm = true;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $scope.DomainCreateForm = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
};
var config = {
@@ -3807,204 +13830,108 @@ app.controller('launchChild', function ($scope, $http) {
}
};
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
-
- function ListInitialDatas(response) {
-
- if (response.data.logstatus === 1) {
-
-
- $scope.logFileLoading = true;
- $scope.logsFeteched = false;
- $scope.couldNotFetchLogs = true;
- $scope.couldNotConnect = true;
- $scope.fetchedData = false;
- $scope.hideLogs = false;
-
-
- $scope.records = JSON.parse(response.data.data);
-
- } else {
-
- $scope.logFileLoading = true;
- $scope.logsFeteched = true;
- $scope.couldNotFetchLogs = false;
- $scope.couldNotConnect = true;
- $scope.fetchedData = true;
- $scope.hideLogs = false;
-
-
- $scope.errorMessage = response.data.error_message;
- console.log(domainNamePage)
-
- }
-
-
- }
-
- function cantLoadInitialDatas(response) {
-
- $scope.logFileLoading = true;
- $scope.logsFeteched = true;
- $scope.couldNotFetchLogs = true;
- $scope.couldNotConnect = false;
- $scope.fetchedData = true;
- $scope.hideLogs = false;
-
- }
-
-
- };
-
- $scope.errorPageNumber = 1;
-
-
- $scope.fetchErrorLogs = function (type) {
-
- var errorPageNumber = $scope.errorPageNumber;
-
-
- if (type === 3) {
- errorPageNumber = $scope.errorPageNumber + 1;
- $scope.errorPageNumber = errorPageNumber;
- } else if (type === 4) {
- errorPageNumber = $scope.errorPageNumber - 1;
- $scope.errorPageNumber = errorPageNumber;
- } else {
- logType = type;
- }
-
- // notifications
-
- $scope.logFileLoading = false;
- $scope.logsFeteched = true;
- $scope.couldNotFetchLogs = true;
- $scope.couldNotConnect = true;
- $scope.fetchedData = true;
- $scope.hideErrorLogs = true;
- $scope.hideLogs = false;
-
-
- url = "/websites/fetchErrorLogs";
-
- var domainNamePage = $("#domainNamePage").text();
-
-
- var data = {
- virtualHost: domainNamePage,
- page: errorPageNumber,
- };
-
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
$http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
function ListInitialDatas(response) {
- if (response.data.logstatus === 1) {
+ if (response.data.abort === 1) {
- // notifications
+ if (response.data.installStatus === 1) {
- $scope.logFileLoading = true;
- $scope.logsFeteched = false;
- $scope.couldNotFetchLogs = true;
- $scope.couldNotConnect = true;
- $scope.fetchedData = true;
- $scope.hideLogs = false;
- $scope.hideErrorLogs = false;
+ $scope.domainLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+ fetchDomains();
- $scope.errorLogsData = response.data.data;
+ } else {
+
+ $scope.domainLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.DomainCreateForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
} else {
-
- // notifications
-
- $scope.logFileLoading = true;
- $scope.logsFeteched = true;
- $scope.couldNotFetchLogs = false;
- $scope.couldNotConnect = true;
- $scope.fetchedData = true;
- $scope.hideLogs = true;
- $scope.hideErrorLogs = true;
-
-
- $scope.errorMessage = response.data.error_message;
-
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
}
-
}
function cantLoadInitialDatas(response) {
- // notifications
-
- $scope.logFileLoading = true;
- $scope.logsFeteched = true;
- $scope.couldNotFetchLogs = true;
+ $scope.domainLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.DomainCreateForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
$scope.couldNotConnect = false;
- $scope.fetchedData = true;
- $scope.hideLogs = true;
- $scope.hideErrorLogs = true;
+ $scope.goBackDisable = false;
}
- };
+ }
- ///////// Configurations Part
- $scope.configurationsBox = true;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
+ ////// List Domains Part
+
+ ////////////////////////
+
+ // notifcations
+
+ $scope.phpChanged = true;
+ $scope.domainError = true;
$scope.couldNotConnect = true;
- $scope.fetchedConfigsData = true;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.childBaseDirChanged = true;
- $scope.hideconfigbtn = function () {
+ fetchDomains();
- $scope.configurationsBox = true;
+ $scope.showListDomains = function () {
+ fetchDomains();
+ $("#listDomains").fadeIn();
};
- $scope.fetchConfigurations = function () {
+ $scope.hideListDomains = function () {
+ $("#listDomains").fadeOut();
+ };
+ function fetchDomains() {
+ $scope.domainLoading = false;
- $scope.hidsslconfigs = true;
- $scope.configurationsBoxRewrite = true;
- $scope.changePHPView = true;
-
-
- //Rewrite rules
- $scope.configurationsBoxRewrite = true;
- $scope.rewriteRulesFetched = true;
- $scope.couldNotFetchRewriteRules = true;
- $scope.rewriteRulesSaved = true;
- $scope.couldNotSaveRewriteRules = true;
- $scope.fetchedRewriteRules = true;
- $scope.saveRewriteRulesBTN = true;
-
- ///
-
- $scope.configFileLoading = false;
-
-
- url = "/websites/getDataFromConfigFile";
-
- var virtualHost = $("#childDomain").text();
-
+ var url = "/websites/fetchDomains";
var data = {
- virtualHost: virtualHost,
+ masterDomain: $("#domainNamePage").text(),
+ alias: 1
};
var config = {
@@ -4018,57 +13945,17 @@ app.controller('launchChild', function ($scope, $http) {
function ListInitialDatas(response) {
- if (response.data.configstatus === 1) {
- //Rewrite rules
+ if (response.data.fetchStatus === 1) {
- $scope.configurationsBoxRewrite = true;
- $scope.rewriteRulesFetched = true;
- $scope.couldNotFetchRewriteRules = true;
- $scope.rewriteRulesSaved = true;
- $scope.couldNotSaveRewriteRules = true;
- $scope.fetchedRewriteRules = true;
- $scope.saveRewriteRulesBTN = true;
+ $scope.childDomains = JSON.parse(response.data.data);
+ $scope.domainLoading = true;
- ///
-
- $scope.configurationsBox = false;
- $scope.configsFetched = false;
- $scope.couldNotFetchConfigs = true;
- $scope.couldNotConnect = true;
- $scope.fetchedConfigsData = false;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
- $scope.saveConfigBtn = false;
-
-
- $scope.configData = response.data.configData;
} else {
-
- //Rewrite rules
- $scope.configurationsBoxRewrite = true;
- $scope.rewriteRulesFetched = true;
- $scope.couldNotFetchRewriteRules = true;
- $scope.rewriteRulesSaved = true;
- $scope.couldNotSaveRewriteRules = true;
- $scope.fetchedRewriteRules = true;
- $scope.saveRewriteRulesBTN = true;
-
- ///
- $scope.configurationsBox = false;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = false;
- $scope.couldNotConnect = true;
- $scope.fetchedConfigsData = true;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
-
-
+ $scope.domainError = false;
$scope.errorMessage = response.data.error_message;
-
+ $scope.domainLoading = true;
}
@@ -4076,149 +13963,29 @@ app.controller('launchChild', function ($scope, $http) {
function cantLoadInitialDatas(response) {
- //Rewrite rules
- $scope.configurationsBoxRewrite = true;
- $scope.rewriteRulesFetched = true;
- $scope.couldNotFetchRewriteRules = true;
- $scope.rewriteRulesSaved = true;
- $scope.couldNotSaveRewriteRules = true;
- $scope.fetchedRewriteRules = true;
- $scope.saveRewriteRulesBTN = true;
- ///
-
- $scope.configurationsBox = false;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
$scope.couldNotConnect = false;
- $scope.fetchedConfigsData = true;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
-
}
+ }
- };
+ $scope.changePHP = function (childDomain, phpSelection) {
- $scope.saveCongiruations = function () {
+ // notifcations
- $scope.configFileLoading = false;
-
-
- url = "/websites/saveConfigsToFile";
-
- var virtualHost = $("#childDomain").text();
- var configData = $scope.configData;
-
-
- var data = {
- virtualHost: virtualHost,
- configData: configData,
- };
-
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
-
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
-
- function ListInitialDatas(response) {
-
- if (response.data.configstatus == 1) {
-
- $scope.configurationsBox = false;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
- $scope.couldNotConnect = true;
- $scope.fetchedConfigsData = true;
- $scope.configFileLoading = true;
- $scope.configSaved = false;
- $scope.couldNotSaveConfigurations = true;
- $scope.saveConfigBtn = true;
-
-
- } else {
- $scope.configurationsBox = false;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
- $scope.couldNotConnect = true;
- $scope.fetchedConfigsData = false;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = false;
-
-
- $scope.errorMessage = response.data.error_message;
-
- }
-
-
- }
-
- function cantLoadInitialDatas(response) {
-
- $scope.configurationsBox = false;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
- $scope.couldNotConnect = false;
- $scope.fetchedConfigsData = true;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
-
-
- }
-
-
- };
-
-
- ///////// Rewrite Rules
-
- $scope.configurationsBoxRewrite = true;
- $scope.rewriteRulesFetched = true;
- $scope.couldNotFetchRewriteRules = true;
- $scope.rewriteRulesSaved = true;
- $scope.couldNotSaveRewriteRules = true;
- $scope.fetchedRewriteRules = true;
- $scope.saveRewriteRulesBTN = true;
-
- $scope.hideRewriteRulesbtn = function () {
- $scope.configurationsBoxRewrite = true;
- };
-
-
- $scope.fetchRewriteFules = function () {
-
- $scope.hidsslconfigs = true;
- $scope.configurationsBox = true;
- $scope.changePHPView = true;
-
-
- $scope.configurationsBox = true;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
+ $scope.phpChanged = true;
+ $scope.domainError = true;
$scope.couldNotConnect = true;
- $scope.fetchedConfigsData = true;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
- $scope.saveConfigBtn = true;
-
- $scope.configFileLoading = false;
-
-
- url = "/websites/getRewriteRules";
-
- var virtualHost = $("#childDomain").text();
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.domainLoading = false;
+ $scope.childBaseDirChanged = true;
+ var url = "/websites/changePHP";
var data = {
- virtualHost: virtualHost,
+ childDomain: childDomain,
+ phpSelection: phpSelection,
};
var config = {
@@ -4232,64 +13999,110 @@ app.controller('launchChild', function ($scope, $http) {
function ListInitialDatas(response) {
- if (response.data.rewriteStatus == 1) {
+
+ if (response.data.changePHP === 1) {
+
+ $scope.domainLoading = true;
+
+ $scope.changedPHPVersion = phpSelection;
- // from main
+ // notifcations
- $scope.configurationsBox = true;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
- $scope.fetchedConfigsData = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
- $scope.saveConfigBtn = true;
-
- // main ends
-
- $scope.configFileLoading = true;
-
- //
-
-
- $scope.configurationsBoxRewrite = false;
- $scope.rewriteRulesFetched = false;
- $scope.couldNotFetchRewriteRules = true;
- $scope.rewriteRulesSaved = true;
- $scope.couldNotSaveRewriteRules = true;
- $scope.fetchedRewriteRules = false;
- $scope.saveRewriteRulesBTN = false;
+ $scope.phpChanged = false;
+ $scope.domainError = true;
$scope.couldNotConnect = true;
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.childBaseDirChanged = true;
- $scope.rewriteRules = response.data.rewriteRules;
-
} else {
- // from main
- $scope.configurationsBox = true;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
- $scope.fetchedConfigsData = true;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
- $scope.saveConfigBtn = true;
- // from main
+ $scope.errorMessage = response.data.error_message;
+ $scope.domainLoading = true;
- $scope.configFileLoading = true;
+ // notifcations
- ///
-
- $scope.configurationsBoxRewrite = true;
- $scope.rewriteRulesFetched = true;
- $scope.couldNotFetchRewriteRules = false;
- $scope.rewriteRulesSaved = true;
- $scope.couldNotSaveRewriteRules = true;
- $scope.fetchedRewriteRules = true;
- $scope.saveRewriteRulesBTN = true;
+ $scope.phpChanged = true;
+ $scope.domainError = false;
$scope.couldNotConnect = true;
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.childBaseDirChanged = true;
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.domainLoading = true;
+
+ // notifcations
+
+ $scope.phpChanged = true;
+ $scope.domainError = false;
+ $scope.couldNotConnect = true;
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.childBaseDirChanged = true;
+
+ }
+
+ };
+
+ $scope.changeChildBaseDir = function (childDomain, openBasedirValue) {
+
+ // notifcations
+
+ $scope.phpChanged = true;
+ $scope.domainError = true;
+ $scope.couldNotConnect = true;
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.domainLoading = false;
+ $scope.childBaseDirChanged = true;
+
+
+ var url = "/websites/changeOpenBasedir";
+
+ var data = {
+ domainName: childDomain,
+ openBasedirValue: openBasedirValue
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.changeOpenBasedir === 1) {
+
+ $scope.phpChanged = true;
+ $scope.domainError = true;
+ $scope.couldNotConnect = true;
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.domainLoading = true;
+ $scope.childBaseDirChanged = false;
+
+ } else {
+
+ $scope.phpChanged = true;
+ $scope.domainError = false;
+ $scope.couldNotConnect = true;
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.domainLoading = true;
+ $scope.childBaseDirChanged = true;
+
$scope.errorMessage = response.data.error_message;
}
@@ -4298,37 +14111,174 @@ app.controller('launchChild', function ($scope, $http) {
}
function cantLoadInitialDatas(response) {
- // from main
-
- $scope.configurationsBox = true;
- $scope.configsFetched = true;
- $scope.couldNotFetchConfigs = true;
- $scope.fetchedConfigsData = true;
- $scope.configFileLoading = true;
- $scope.configSaved = true;
- $scope.couldNotSaveConfigurations = true;
- $scope.saveConfigBtn = true;
-
- // from main
-
- $scope.configFileLoading = true;
-
- ///
-
- $scope.configurationsBoxRewrite = true;
- $scope.rewriteRulesFetched = true;
- $scope.couldNotFetchRewriteRules = true;
- $scope.rewriteRulesSaved = true;
- $scope.couldNotSaveRewriteRules = true;
- $scope.fetchedRewriteRules = true;
- $scope.saveRewriteRulesBTN = true;
+ $scope.phpChanged = true;
+ $scope.domainError = true;
$scope.couldNotConnect = false;
+ $scope.domainDeleted = true;
+ $scope.sslIssued = true;
+ $scope.domainLoading = true;
+ $scope.childBaseDirChanged = true;
}
+ }
+ $scope.showWPSites = function(domain) {
+ console.log('showWPSites called for domain:', domain);
+
+ // Make sure domain is defined
+ if (!domain) {
+ console.error('Domain is undefined');
+ return;
+ }
+
+ // Find the website in the list
+ var site = $scope.WebSitesList.find(function(website) {
+ return website.domain === domain;
+ });
+
+ if (!site) {
+ console.error('Website not found:', domain);
+ return;
+ }
+
+ // Set loading state
+ site.loadingWPSites = true;
+
+ // Toggle visibility
+ site.showWPSites = !site.showWPSites;
+
+ // If we're hiding, just return
+ if (!site.showWPSites) {
+ site.loadingWPSites = false;
+ return;
+ }
+
+ var config = {
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = $.param({
+ domain: domain
+ });
+
+ $http.post('/websites/fetchWPDetails', data, config)
+ .then(function(response) {
+ console.log('Response received:', response);
+ if (response.data.status === 1 && response.data.fetchStatus === 1) {
+ site.wp_sites = response.data.sites || [];
+ // Initialize loading states for each WP site
+ site.wp_sites.forEach(function(wp) {
+ wp.loading = false;
+ wp.loadingPlugins = false;
+ wp.loadingTheme = false;
+ });
+ $("#listFail").hide();
+ } else {
+ $("#listFail").fadeIn();
+ site.showWPSites = false;
+ $scope.errorMessage = response.data.error_message || 'Failed to fetch WordPress sites';
+ console.error('Error in response:', response.data.error_message);
+ new PNotify({
+ title: 'Error!',
+ text: response.data.error_message || 'Failed to fetch WordPress sites',
+ type: 'error'
+ });
+ }
+ })
+ .catch(function(error) {
+ console.error('Request failed:', error);
+ site.showWPSites = false;
+ $("#listFail").fadeIn();
+ $scope.errorMessage = error.message || 'An error occurred while fetching WordPress sites';
+ new PNotify({
+ title: 'Error!',
+ text: error.message || 'Could not connect to server',
+ type: 'error'
+ });
+ })
+ .finally(function() {
+ site.loadingWPSites = false;
+ });
+ };
+
+ $scope.updateSetting = function(wp, setting) {
+ var settingMap = {
+ 'search-indexing': 'searchIndex',
+ 'debugging': 'debugging',
+ 'password-protection': 'passwordProtection',
+ 'maintenance-mode': 'maintenanceMode'
+ };
+
+ // Toggle the state before sending request
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+
+ var data = {
+ siteId: wp.id,
+ setting: setting,
+ value: wp[settingMap[setting]]
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post('/websites/UpdateWPSettings', data, config).then(function(response) {
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Setting updated successfully.',
+ type: 'success'
+ });
+ if (setting === 'password-protection' && wp[settingMap[setting]] === 1) {
+ // Show password protection modal if enabling
+ wp.PPUsername = "";
+ wp.PPPassword = "";
+ $scope.currentWP = wp;
+ $('#passwordProtectionModal').modal('show');
+ }
+ } else {
+ // Revert the change if update failed
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: response.data.error_message || 'Failed to update setting.',
+ type: 'error'
+ });
+ }
+ }).catch(function(error) {
+ // Revert the change on error
+ wp[settingMap[setting]] = wp[settingMap[setting]] === 1 ? 0 : 1;
+ new PNotify({
+ title: 'Error',
+ text: 'Connection failed while updating setting.',
+ type: 'error'
+ });
+ });
+ };
+
+ $scope.visitSite = function(wp) {
+ var url = wp.url || wp.domain;
+ if (!url) return;
+ if (!url.startsWith('http://') && !url.startsWith('https://')) {
+ url = 'https://' + url;
+ }
+ window.open(url, '_blank');
+ };
+
+ $scope.wpLogin = function(wpId) {
+ window.open('/websites/wpLogin?wpID=' + wpId, '_blank');
+ };
+
+ $scope.manageWP = function(wpId) {
+ window.location.href = '/websites/listWPsites?wpID=' + wpId;
};
$scope.saveRewriteRules = function () {
@@ -5731,6 +15681,85 @@ app.controller('installMauticCTRL', function ($scope, $http, $timeout) {
app.controller('sshAccess', function ($scope, $http, $timeout) {
+ $scope.openWebTerminal = function() {
+ $('#web-terminal-modal').modal('show');
+
+ if ($scope.term) {
+ $scope.term.dispose();
+ }
+ var term = new Terminal({
+ cursorBlink: true,
+ fontFamily: 'monospace',
+ fontSize: 14,
+ theme: { background: '#000' }
+ });
+ $scope.term = term;
+ term.open(document.getElementById('xterm-container'));
+ term.focus();
+
+ // Fetch JWT from backend with CSRF token
+ var domain = $("#domainName").text();
+ var csrftoken = getCookie('csrftoken');
+ $http.post('/websites/getTerminalJWT', { domain: domain }, {
+ headers: { 'X-CSRFToken': csrftoken }
+ })
+ .then(function(response) {
+ if (response.data.status === 1 && response.data.token) {
+ var token = response.data.token;
+ var ssh_user = $("#externalApp").text();
+ var wsProto = location.protocol === 'https:' ? 'wss' : 'ws';
+ var wsUrl = wsProto + '://' + window.location.hostname + ':8888/ws?token=' + encodeURIComponent(token) + '&ssh_user=' + encodeURIComponent(ssh_user);
+ var socket = new WebSocket(wsUrl);
+ socket.binaryType = 'arraybuffer';
+ $scope.terminalSocket = socket;
+
+ socket.onopen = function() {
+ term.write('\x1b[32mConnected.\x1b[0m\r\n');
+ };
+ socket.onclose = function() {
+ term.write('\r\n\x1b[31mConnection closed.\x1b[0m\r\n');
+ };
+ socket.onerror = function(e) {
+ term.write('\r\n\x1b[31mWebSocket error.\x1b[0m\r\n');
+ };
+ socket.onmessage = function(event) {
+ if (event.data instanceof ArrayBuffer) {
+ var text = new Uint8Array(event.data);
+ term.write(new TextDecoder().decode(text));
+ } else if (typeof event.data === 'string') {
+ term.write(event.data);
+ }
+ };
+ term.onData(function(data) {
+ if (socket.readyState === WebSocket.OPEN) {
+ var encoder = new TextEncoder();
+ socket.send(encoder.encode(data));
+ }
+ });
+ term.onResize(function(size) {
+ if (socket.readyState === WebSocket.OPEN) {
+ var msg = JSON.stringify({resize: {cols: size.cols, rows: size.rows}});
+ socket.send(msg);
+ }
+ });
+ $('#web-terminal-modal').on('hidden.bs.modal', function() {
+ if ($scope.term) {
+ $scope.term.dispose();
+ $scope.term = null;
+ }
+ if ($scope.terminalSocket) {
+ $scope.terminalSocket.close();
+ $scope.terminalSocket = null;
+ }
+ });
+ } else {
+ term.write('\x1b[31mFailed to get terminal token.\x1b[0m\r\n');
+ }
+ }, function() {
+ term.write('\x1b[31mFailed to contact backend.\x1b[0m\r\n');
+ });
+ };
+
$scope.wpInstallLoading = true;
$scope.setupSSHAccess = function () {
@@ -6099,350 +16128,6 @@ app.controller('cloneWebsite', function ($scope, $http, $timeout, $window) {
});
/* Java script code to cloneWebsite ends here */
-
-/* Java script code to syncWebsite */
-app.controller('syncWebsite', function ($scope, $http, $timeout, $window) {
-
- $scope.cyberpanelLoading = true;
- $scope.installationDetailsForm = false;
- $scope.installationProgress = true;
- $scope.goBackDisable = true;
-
- var statusFile;
-
- $scope.startSyncing = function () {
-
- $scope.cyberpanelLoading = false;
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.goBackDisable = true;
-
- $scope.currentStatus = "Cloning started..";
-
- url = "/websites/startSync";
-
-
- var data = {
- childDomain: $("#childDomain").text(),
- eraseCheck: $scope.eraseCheck,
- dbCheck: $scope.dbCheck,
- copyChanged: $scope.copyChanged
-
- };
-
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
-
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
- function ListInitialDatas(response) {
-
- if (response.data.status === 1) {
- statusFile = response.data.tempStatusPath;
- getCreationStatus();
- } else {
-
- $scope.cyberpanelLoading = true;
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.goBackDisable = false;
-
- $scope.currentStatus = response.data.error_message;
- }
-
-
- }
-
- function cantLoadInitialDatas(response) {
-
- $scope.cyberpanelLoading = true;
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.goBackDisable = false;
-
- }
-
- };
- $scope.goBack = function () {
- $scope.cyberpanelLoading = true;
- $scope.installationDetailsForm = false;
- $scope.installationProgress = true;
- $scope.goBackDisable = true;
- $("#installProgress").css("width", "0%");
- };
-
- function getCreationStatus() {
-
- url = "/websites/installWordpressStatus";
-
- var data = {
- statusFile: statusFile
- };
-
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
-
-
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
-
- function ListInitialDatas(response) {
-
-
- if (response.data.abort === 1) {
-
- if (response.data.installStatus === 1) {
-
- $scope.cyberpanelLoading = true;
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.goBackDisable = false;
-
- $("#installProgress").css("width", "100%");
- $scope.installPercentage = "100";
- $scope.currentStatus = response.data.currentStatus;
- $timeout.cancel();
-
- } else {
-
- $scope.cyberpanelLoading = true;
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.goBackDisable = false;
-
- $scope.currentStatus = response.data.error_message;
-
- $("#installProgress").css("width", "0%");
- $scope.installPercentage = "0";
- $scope.goBackDisable = false;
-
- }
-
- } else {
- $("#installProgress").css("width", response.data.installationProgress + "%");
- $scope.installPercentage = response.data.installationProgress;
- $scope.currentStatus = response.data.currentStatus;
- $timeout(getCreationStatus, 1000);
- }
-
- }
-
- function cantLoadInitialDatas(response) {
-
- $scope.cyberpanelLoading = true;
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.goBackDisable = false;
-
- }
-
-
- }
-
-});
-/* Java script code to syncWebsite ends here */
-
-
-app.controller('installMagentoCTRL', function ($scope, $http, $timeout) {
-
- $scope.installationDetailsForm = false;
- $scope.installationProgress = true;
- $scope.installationFailed = true;
- $scope.installationSuccessfull = true;
- $scope.couldNotConnect = true;
- $scope.wpInstallLoading = true;
- $scope.goBackDisable = true;
-
- $scope.databasePrefix = 'ps_';
-
- var statusFile;
- var domain = $("#domainNamePage").text();
- var path;
-
-
- $scope.goBack = function () {
- $scope.installationDetailsForm = false;
- $scope.installationProgress = true;
- $scope.installationFailed = true;
- $scope.installationSuccessfull = true;
- $scope.couldNotConnect = true;
- $scope.wpInstallLoading = true;
- $scope.goBackDisable = true;
- $("#installProgress").css("width", "0%");
- };
-
- function getInstallStatus() {
-
- url = "/websites/installWordpressStatus";
-
- var data = {
- statusFile: statusFile,
- domainName: domain
- };
-
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
-
-
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
-
- function ListInitialDatas(response) {
-
-
- if (response.data.abort === 1) {
-
- if (response.data.installStatus === 1) {
-
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.installationFailed = true;
- $scope.installationSuccessfull = false;
- $scope.couldNotConnect = true;
- $scope.wpInstallLoading = true;
- $scope.goBackDisable = false;
-
- if (typeof path !== 'undefined') {
- $scope.installationURL = "http://" + domain + "/" + path;
- } else {
- $scope.installationURL = domain;
- }
-
-
- $("#installProgress").css("width", "100%");
- $scope.installPercentage = "100";
- $scope.currentStatus = response.data.currentStatus;
- $timeout.cancel();
-
- } else {
-
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.installationFailed = false;
- $scope.installationSuccessfull = true;
- $scope.couldNotConnect = true;
- $scope.wpInstallLoading = true;
- $scope.goBackDisable = false;
-
- $scope.errorMessage = response.data.error_message;
-
- $("#installProgress").css("width", "0%");
- $scope.installPercentage = "0";
-
- }
-
- } else {
- $("#installProgress").css("width", response.data.installationProgress + "%");
- $scope.installPercentage = response.data.installationProgress;
- $scope.currentStatus = response.data.currentStatus;
-
- $timeout(getInstallStatus, 1000);
-
-
- }
-
- }
-
- function cantLoadInitialDatas(response) {
-
- $scope.canNotFetch = true;
- $scope.couldNotConnect = false;
-
-
- }
-
-
- }
-
- $scope.installMagento = function () {
-
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.installationFailed = true;
- $scope.installationSuccessfull = true;
- $scope.couldNotConnect = true;
- $scope.wpInstallLoading = false;
- $scope.goBackDisable = true;
- $scope.currentStatus = "Starting installation..";
-
- path = $scope.installPath;
-
-
- url = "/websites/magentoInstall";
-
- var home = "1";
-
- if (typeof path !== 'undefined') {
- home = "0";
- }
- var sampleData;
- if ($scope.sampleData === true) {
- sampleData = 1;
- } else {
- sampleData = 0
- }
-
-
- var data = {
- domain: domain,
- home: home,
- path: path,
- firstName: $scope.firstName,
- lastName: $scope.lastName,
- username: $scope.username,
- email: $scope.email,
- passwordByPass: $scope.password,
- sampleData: sampleData
- };
-
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
-
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
-
- function ListInitialDatas(response) {
-
- if (response.data.installStatus === 1) {
- statusFile = response.data.tempStatusPath;
- getInstallStatus();
- } else {
-
- $scope.installationDetailsForm = true;
- $scope.installationProgress = false;
- $scope.installationFailed = false;
- $scope.installationSuccessfull = true;
- $scope.couldNotConnect = true;
- $scope.wpInstallLoading = true;
- $scope.goBackDisable = false;
-
- $scope.errorMessage = response.data.error_message;
-
- }
-
-
- }
-
- function cantLoadInitialDatas(response) {
- }
-
- };
-
-
-});
-
/* Java script code to git tracking */
app.controller('manageGIT', function ($scope, $http, $timeout, $window) {
@@ -7464,3 +17149,1868 @@ app.controller('manageGIT', function ($scope, $http, $timeout, $window) {
});
/* Java script code to git tracking ends here */
+
+
+app.controller('ApacheManager', function ($scope, $http, $timeout) {
+ $scope.cyberpanelloading = true;
+ $scope.apacheOLS = true;
+ $scope.pureOLS = true;
+ $scope.lswsEnt = true;
+
+ var apache = 1, ols = 2, lsws = 3;
+ var statusFile;
+
+ $scope.getSwitchStatus = function () {
+ $scope.cyberpanelloading = false;
+ url = "/websites/getSwitchStatus";
+
+ var data = {
+ domainName: $("#domainNamePage").text()
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
+
+
+ function ListInitialData(response) {
+ $scope.cyberpanelloading = true;
+ if (response.data.status === 1) {
+ if (response.data.server === apache) {
+ $scope.apacheOLS = false;
+ $scope.pureOLS = true;
+ $scope.lswsEnt = true;
+ $scope.configData = response.data.configData;
+
+ $scope.pmMaxChildren = response.data.pmMaxChildren;
+ $scope.pmStartServers = response.data.pmStartServers;
+ $scope.pmMinSpareServers = response.data.pmMinSpareServers;
+ $scope.pmMaxSpareServers = response.data.pmMaxSpareServers;
+ $scope.phpPath = response.data.phpPath;
+
+
+ } else if (response.data.server === ols) {
+ $scope.apacheOLS = true;
+ $scope.pureOLS = false;
+ $scope.lswsEnt = true;
+ } else {
+ $scope.apacheOLS = true;
+ $scope.pureOLS = true;
+ $scope.lswsEnt = false;
+ }
+ //$scope.records = JSON.parse(response.data.data);
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialData(response) {
+ $scope.cyberpanelloading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page.',
+ type: 'error'
+ });
+ }
+
+
+ };
+ $scope.getSwitchStatus();
+
+ $scope.switchServer = function (server) {
+ $scope.cyberpanelloading = false;
+ $scope.functionProgress = {"width": "0%"};
+ $scope.functionStatus = 'Starting conversion..';
+
+ url = "/websites/switchServer";
+
+ var data = {
+ domainName: $("#domainNamePage").text(),
+ phpSelection: $scope.phpSelection,
+ server: server
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
+
+ function ListInitialData(response) {
+ if (response.data.status === 1) {
+ statusFile = response.data.tempStatusPath;
+ statusFunc();
+
+ } else {
+ $scope.cyberpanelloading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialData(response) {
+ $scope.cyberpanelloading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page.',
+ type: 'error'
+ });
+ }
+
+
+ };
+
+ function statusFunc() {
+ $scope.cyberpanelloading = false;
+ url = "/websites/statusFunc";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
+
+
+ function ListInitialData(response) {
+ if (response.data.status === 1) {
+ if (response.data.abort === 1) {
+ $scope.functionProgress = {"width": "100%"};
+ $scope.functionStatus = response.data.currentStatus;
+ $scope.cyberpanelloading = true;
+ $timeout.cancel();
+ $scope.getSwitchStatus();
+ } else {
+ $scope.functionProgress = {"width": response.data.installationProgress + "%"};
+ $scope.functionStatus = response.data.currentStatus;
+ $timeout(statusFunc, 3000);
+ }
+
+ } else {
+ $scope.cyberpanelloading = true;
+ $scope.functionStatus = response.data.error_message;
+ $scope.functionProgress = {"width": response.data.installationProgress + "%"};
+ $timeout.cancel();
+ }
+
+ }
+
+ function cantLoadInitialData(response) {
+ $scope.functionProgress = {"width": response.data.installationProgress + "%"};
+ $scope.functionStatus = 'Could not connect to server, please refresh this page.';
+ $timeout.cancel();
+ }
+
+ }
+
+
+ $scope.tuneSettings = function () {
+ $scope.cyberpanelloading = false;
+
+ url = "/websites/tuneSettings";
+
+ var data = {
+ domainName: $("#domainNamePage").text(),
+ pmMaxChildren: $scope.pmMaxChildren,
+ pmStartServers: $scope.pmStartServers,
+ pmMinSpareServers: $scope.pmMinSpareServers,
+ pmMaxSpareServers: $scope.pmMaxSpareServers,
+ phpPath: $scope.phpPath
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
+
+ function ListInitialData(response) {
+ $scope.cyberpanelloading = true;
+ if (response.data.status === 1) {
+
+ new PNotify({
+ title: 'Success',
+ text: 'Changes successfully applied.',
+ type: 'success'
+ });
+
+ } else {
+ $scope.cyberpanelloading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialData(response) {
+ $scope.cyberpanelloading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page.',
+ type: 'error'
+ });
+ }
+
+
+ };
+
+ $scope.saveApacheConfig = function () {
+ $scope.cyberpanelloading = false;
+
+ url = "/websites/saveApacheConfigsToFile";
+
+ var data = {
+ domainName: $("#domainNamePage").text(),
+ configData: $scope.configData
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
+
+ function ListInitialData(response) {
+ $scope.cyberpanelloading = true;
+ if (response.data.status === 1) {
+
+ new PNotify({
+ title: 'Success',
+ text: 'Changes successfully applied.',
+ type: 'success'
+ });
+
+ } else {
+ $scope.cyberpanelloading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+
+ }
+
+ function cantLoadInitialData(response) {
+ $scope.cyberpanelloading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page.',
+ type: 'error'
+ });
+ }
+
+
+ };
+
+});
+
+
+app.controller('createDockerPackage', function ($scope, $http, $window) {
+ $scope.cyberpanelLoading = true;
+
+ $scope.createdockerpackage = function () {
+
+ $scope.cyberpanelLoading = false;
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ name: $scope.packagesname,
+ cpu: $scope.CPU,
+ Memory: $scope.Memory,
+ Bandwidth: $scope.Bandwidth,
+ disk: $scope.disk
+ };
+
+
+ dataurl = "/websites/AddDockerpackage";
+
+ $http.post(dataurl, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+ $scope.cyberpanelLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Successfully Saved.',
+ type: 'success'
+ });
+ setTimeout(function() {
+ location.reload();
+ }, 1500);
+
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.cyberpanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page.',
+ type: 'error'
+ });
+
+
+ }
+ }
+
+
+ $scope.Getpackage = function (packid) {
+
+ $scope.cyberpanelLoading = false;
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ id: packid,
+ };
+
+
+ dataurl = "/websites/Getpackage";
+
+ $http.post(dataurl, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+ $scope.cyberpanelLoading = true;
+ console.log('Getpackage response:', response.data);
+ if (response.data.status === 1) {
+ // Log the exact structure to understand the response
+ console.log('Response error_message:', response.data.error_message);
+
+ // Handle different possible response formats
+ var packageData = response.data.error_message;
+ if (packageData) {
+ // Check if data is nested in obj property or direct
+ var data = packageData.obj || packageData;
+
+ $scope.U_Name = data.Name;
+ $scope.U_CPU = data.CPU || data.CPUs;
+ $scope.U_Memory = data.Memory || data.Ram;
+ $scope.U_Bandwidth = data.Bandwidth;
+ $scope.U_DiskSpace = data.DiskSpace;
+ $scope.EditID = packid;
+
+ console.log('Set modal data:', {
+ Name: $scope.U_Name,
+ CPU: $scope.U_CPU,
+ Memory: $scope.U_Memory,
+ Bandwidth: $scope.U_Bandwidth,
+ DiskSpace: $scope.U_DiskSpace
+ });
+
+ // Force Angular to update the view
+ if (!$scope.$$phase) {
+ $scope.$apply();
+ }
+
+ // Also manually update the form fields as a fallback
+ setTimeout(function() {
+ $('#EditPackage input[ng-model="U_Name"]').val($scope.U_Name);
+ $('#EditPackage input[ng-model="U_CPU"]').val($scope.U_CPU);
+ $('#EditPackage input[ng-model="U_Memory"]').val($scope.U_Memory);
+ $('#EditPackage input[ng-model="U_Bandwidth"]').val($scope.U_Bandwidth);
+ $('#EditPackage input[ng-model="U_DiskSpace"]').val($scope.U_DiskSpace);
+
+ console.log('Manually updated form fields');
+
+ // Ensure Angular knows about the manual updates
+ $('#EditPackage').find('input[ng-model="U_CPU"]').trigger('input');
+ $('#EditPackage').find('input[ng-model="U_Memory"]').trigger('input');
+ $('#EditPackage').find('input[ng-model="U_Bandwidth"]').trigger('input');
+ $('#EditPackage').find('input[ng-model="U_DiskSpace"]').trigger('input');
+
+ // Show the modal
+ $('#EditPackage').modal('show');
+ }, 200);
+ } else {
+ console.error('Package data not found in response');
+ }
+
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.cyberpanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page.',
+ type: 'error'
+ });
+
+
+ }
+ }
+
+
+ $scope.SaveUpdate = function () {
+
+ $scope.cyberpanelLoading = false;
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ id: $scope.EditID,
+ CPU: $scope.U_CPU,
+ RAM: $scope.U_Memory,
+ Bandwidth: $scope.U_Bandwidth,
+ DiskSpace: $scope.U_DiskSpace,
+ };
+
+
+ dataurl = "/websites/Updatepackage";
+
+ $http.post(dataurl, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+ $scope.cyberpanelLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Successfully Updated.',
+ type: 'success'
+ });
+ setTimeout(function() {
+ location.reload();
+ }, 1500);
+ $('#EditPackage').modal('hide');
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.cyberpanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page.',
+ type: 'error'
+ });
+
+
+ }
+ }
+
+ var FinalDeletepackageURL;
+ $scope.Deletepackage = function (url) {
+ FinalDeletepackageURL = url;
+ console.log('Delete URL set to:', FinalDeletepackageURL);
+
+ // Show the delete confirmation modal
+ $('#packagedelete').modal('show');
+ }
+
+ $scope.ConfirmDelete = function () {
+ console.log('Confirming delete with URL:', FinalDeletepackageURL);
+
+ if (!FinalDeletepackageURL) {
+ console.error('No delete URL set');
+ return;
+ }
+
+ // Hide modal and redirect after a small delay
+ $('#packagedelete').modal('hide');
+
+ setTimeout(function() {
+ window.location.href = FinalDeletepackageURL;
+ }, 300);
+ }
+
+})
+app.controller('AssignPackage', function ($scope, $http,) {
+ $scope.cyberpanelLoading = true;
+ $scope.AddAssignment = function () {
+ $scope.cyberpanelLoading = false;
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ package: $('#packageSelection').val(),
+ user: $scope.userSelection,
+ };
+
+
+ dataurl = "/websites/AddAssignment";
+
+ $http.post(dataurl, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+ function ListInitialDatas(response) {
+ $scope.cyberpanelLoading = true;
+ if (response.data.status === 1) {
+ new PNotify({
+ title: 'Success',
+ text: 'Successfully saved.',
+ type: 'success'
+ });
+
+ // Reload page to show new assignment
+ setTimeout(function() {
+ location.reload();
+ }, 1500);
+
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+ }
+ }
+
+ function cantLoadInitialDatas(response) {
+ $scope.cyberpanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Could not connect to server, please refresh this page.',
+ type: 'error'
+ });
+
+
+ }
+ }
+
+ var FinalDeletepackageURL;
+ $scope.Deleteassingment = function (url) {
+ FinalDeletepackageURL = url;
+ // console.log(FinalDeletepackageURL);
+ }
+
+ $scope.ConfirmDelete = function () {
+ window.location.href = FinalDeletepackageURL
+ }
+
+})
+app.controller('createDockerSite', function ($scope, $http, $timeout) {
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ var statusFile;
+
+ $scope.createdockersite = function () {
+
+ $scope.cyberpanelLoading = false;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+
+ $scope.currentStatus = "Starting creation..";
+
+
+ url = "/websites/submitDockerSiteCreation";
+
+ var package = $scope.packageForWebsite;
+
+
+ var data = {
+ sitename: $scope.siteName,
+ Owner: $scope.userSelection,
+ Domain: $scope.domainNameCreate,
+ MysqlCPU: $scope.CPUMysql,
+ MYsqlRam: $scope.rammysql,
+ SiteCPU: $scope.CPUSite,
+ SiteRam: $scope.RamSite,
+ App: $scope.App,
+ WPusername: $scope.WPUsername,
+ WPemal: $scope.wpEmail,
+ WPpasswd: $scope.WPpassword
+ };
+
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+ console.log('.........................')
+ if (response.data.installStatus === 1) {
+ console.log(response.data.installsatus)
+ statusFile = response.data.tempStatusPath;
+ getCreationStatus();
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ };
+ $scope.goBack = function () {
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = false;
+ $scope.installationProgress = true;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = true;
+ $("#installProgress").css("width", "0%");
+ };
+
+ function getCreationStatus() {
+
+ url = "/websites/installWordpressStatus";
+
+ var data = {
+ statusFile: statusFile
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.abort === 1) {
+
+ if (response.data.installStatus === 1) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = false;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $("#installProgress").css("width", "100%");
+ $scope.installPercentage = "100";
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout.cancel();
+
+ } else {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = false;
+ $scope.success = true;
+ $scope.couldNotConnect = true;
+ $scope.goBackDisable = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ $("#installProgress").css("width", "0%");
+ $scope.installPercentage = "0";
+ $scope.goBackDisable = false;
+
+ }
+
+ } else {
+ $("#installProgress").css("width", response.data.installationProgress + "%");
+ $scope.installPercentage = response.data.installationProgress;
+ $scope.currentStatus = response.data.currentStatus;
+ $timeout(getCreationStatus, 1000);
+ }
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.cyberpanelLoading = true;
+ $scope.installationDetailsForm = true;
+ $scope.installationProgress = false;
+ $scope.errorMessageBox = true;
+ $scope.success = true;
+ $scope.couldNotConnect = false;
+ $scope.goBackDisable = false;
+
+ }
+
+
+ }
+
+})
+
+
+app.controller('listDockersite', function ($scope, $http) {
+
+ $scope.cyberPanelLoading = true;
+
+
+ $scope.currentPage = 1;
+ $scope.recordsToShow = 10;
+
+ $scope.fetchDockersiteFromDB = function () {
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ page: $scope.currentPage,
+ recordsToShow: $scope.recordsToShow
+ };
+
+
+ dataurl = "/websites/fetchDockersite";
+
+ $http.post(dataurl, data, config).then(ListInitialData, cantLoadInitialData);
+
+
+ function ListInitialData(response) {
+ $scope.cyberPanelLoading = false;
+ if (response.data.listWebSiteStatus === 1) {
+
+ $scope.WebSitesList = JSON.parse(response.data.data);
+ $scope.pagination = response.data.pagination;
+ $scope.clients = JSON.parse(response.data.data);
+ $("#listFail").hide();
+ } else {
+ $("#listFail").fadeIn();
+ $scope.errorMessage = response.data.error_message;
+
+ }
+ }
+
+ function cantLoadInitialData(response) {
+ $scope.cyberPanelLoading = false;
+ }
+
+
+ };
+ $scope.fetchDockersiteFromDB();
+
+ $scope.cyberPanelLoading = true;
+
+
+ $scope.cyberPanelLoading = true;
+
+ $scope.searchWebsites = function () {
+
+ $scope.cyberPanelLoading = false;
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ var data = {
+ patternAdded: $scope.patternAdded
+ };
+
+ dataurl = "/websites/searchWebsites";
+
+ $http.post(dataurl, data, config).then(ListInitialData, cantLoadInitialData);
+
+
+ function ListInitialData(response) {
+ $scope.cyberPanelLoading = true;
+ if (response.data.listWebSiteStatus === 1) {
+
+ var finalData = JSON.parse(response.data.data);
+ $scope.WebSitesList = finalData;
+ $("#listFail").hide();
+ } else {
+ new PNotify({
+ title: 'Operation Failed!',
+ text: response.data.error_message,
+ type: 'error'
+ });
+
+ }
+ }
+
+ function cantLoadInitialData(response) {
+ $scope.cyberPanelLoading = true;
+ new PNotify({
+ title: 'Operation Failed!',
+ text: 'Connect disrupted, refresh the page.',
+ type: 'error'
+ });
+ }
+
+
+ };
+
+ $scope.getFurtherWebsitesFromDB = function () {
+ $scope.fetchDockersiteFromDB();
+ };
+
+ var deletedockersiteurl;
+ $scope.DeleteDockersite = function (url, id) {
+ // console.log(url)
+ // console.log(id)
+ deletedockersiteurl = url + id;
+ }
+
+ $scope.ConfirmDelete = function () {
+ window.location.href = deletedockersiteurl;
+ }
+
+
+});
+
+
+app.controller('BuyAddons', function ($scope, $http) {
+
+
+ $scope.cyberpanelLoading = true;
+ $scope.sftpHide = true;
+ $scope.localHide = true;
+
+ $scope.PaypalBuyNowAddons = function (planName, monthlyPrice, yearlyPrice, lifetime, months) {
+
+ const baseURL = 'https://platform.cyberpersons.com/Billing/AddOnOrderPaypal';
+ // Get the current URL
+ var currentURL = window.location.href;
+
+// Find the position of the question mark
+ const queryStringIndex = currentURL.indexOf('?');
+
+// Check if there is a query string
+ currentURL = queryStringIndex !== -1 ? currentURL.substring(0, queryStringIndex) : currentURL;
+
+ // Encode parameters to make them URL-safe
+ const params = new URLSearchParams({
+ planName: planName,
+ monthlyPrice: monthlyPrice,
+ yearlyPrice: yearlyPrice,
+ returnURL: currentURL, // Add the current URL as a query parameter
+ months: months
+ });
+
+ // Build the complete URL with query string
+ const fullURL = `${baseURL}?${params.toString()}`;
+
+ // Redirect to the constructed URL
+
+ window.location.href = fullURL;
+
+ }
+
+})
+
+app.controller('launchChild', function ($scope, $http) {
+
+ $scope.logFileLoading = true;
+ $scope.logsFeteched = true;
+ $scope.couldNotFetchLogs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedData = true;
+ $scope.hideLogs = true;
+ $scope.hideErrorLogs = true;
+
+ $scope.hidelogsbtn = function () {
+ $scope.hideLogs = true;
+ };
+
+ $scope.hideErrorLogsbtn = function () {
+ $scope.hideLogs = true;
+ };
+
+ // Watch for when the scope variables are initialized from ng-init
+ $scope.$watch('childDomainName', function(newVal) {
+ if (newVal) {
+ $scope.fileManagerURL = "/filemanager/" + $scope.masterDomain;
+ $scope.previewUrl = "/preview/" + $scope.childDomainName + "/";
+ $scope.wordPressInstallURL = "/websites/" + $scope.childDomainName + "/wordpressInstall";
+ $scope.joomlaInstallURL = "/websites/" + $scope.childDomainName + "/joomlaInstall";
+ $scope.setupGit = "/websites/" + $scope.childDomainName + "/setupGit";
+ $scope.installPrestaURL = "/websites/" + $scope.childDomainName + "/installPrestaShop";
+ $scope.installMagentoURL = "/websites/" + $scope.childDomainName + "/installMagento";
+ }
+ });
+
+ var logType = 0;
+ $scope.pageNumber = 1;
+
+ $scope.fetchLogs = function (type) {
+
+ var pageNumber = $scope.pageNumber;
+
+
+ if (type == 3) {
+ pageNumber = $scope.pageNumber + 1;
+ $scope.pageNumber = pageNumber;
+ } else if (type == 4) {
+ pageNumber = $scope.pageNumber - 1;
+ $scope.pageNumber = pageNumber;
+ } else {
+ logType = type;
+ }
+
+
+ $scope.logFileLoading = false;
+ $scope.logsFeteched = true;
+ $scope.couldNotFetchLogs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedData = false;
+ $scope.hideErrorLogs = true;
+
+
+ url = "/websites/getDataFromLogFile";
+
+ var domainNamePage = $("#domainNamePage").text();
+
+
+ var data = {
+ logType: logType,
+ virtualHost: domainNamePage,
+ page: pageNumber,
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.logstatus === 1) {
+
+
+ $scope.logFileLoading = true;
+ $scope.logsFeteched = false;
+ $scope.couldNotFetchLogs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedData = false;
+ $scope.hideLogs = false;
+
+
+ $scope.records = JSON.parse(response.data.data);
+
+ } else {
+
+ $scope.logFileLoading = true;
+ $scope.logsFeteched = true;
+ $scope.couldNotFetchLogs = false;
+ $scope.couldNotConnect = true;
+ $scope.fetchedData = true;
+ $scope.hideLogs = false;
+
+
+ $scope.errorMessage = response.data.error_message;
+ console.log(domainNamePage)
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.logFileLoading = true;
+ $scope.logsFeteched = true;
+ $scope.couldNotFetchLogs = true;
+ $scope.couldNotConnect = false;
+ $scope.fetchedData = true;
+ $scope.hideLogs = false;
+
+ }
+
+
+ };
+
+ $scope.errorPageNumber = 1;
+
+
+ $scope.fetchErrorLogs = function (type) {
+
+ var errorPageNumber = $scope.errorPageNumber;
+
+
+ if (type === 3) {
+ errorPageNumber = $scope.errorPageNumber + 1;
+ $scope.errorPageNumber = errorPageNumber;
+ } else if (type === 4) {
+ errorPageNumber = $scope.errorPageNumber - 1;
+ $scope.errorPageNumber = errorPageNumber;
+ } else {
+ logType = type;
+ }
+
+ // notifications
+
+ $scope.logFileLoading = false;
+ $scope.logsFeteched = true;
+ $scope.couldNotFetchLogs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedData = true;
+ $scope.hideErrorLogs = true;
+ $scope.hideLogs = false;
+
+
+ url = "/websites/fetchErrorLogs";
+
+ var domainNamePage = $("#domainNamePage").text();
+
+
+ var data = {
+ virtualHost: domainNamePage,
+ page: errorPageNumber,
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.logstatus === 1) {
+
+
+ // notifications
+
+ $scope.logFileLoading = true;
+ $scope.logsFeteched = false;
+ $scope.couldNotFetchLogs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedData = true;
+ $scope.hideLogs = false;
+ $scope.hideErrorLogs = false;
+
+
+ $scope.errorLogsData = response.data.data;
+
+ } else {
+
+ // notifications
+
+ $scope.logFileLoading = true;
+ $scope.logsFeteched = true;
+ $scope.couldNotFetchLogs = false;
+ $scope.couldNotConnect = true;
+ $scope.fetchedData = true;
+ $scope.hideLogs = true;
+ $scope.hideErrorLogs = true;
+
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ // notifications
+
+ $scope.logFileLoading = true;
+ $scope.logsFeteched = true;
+ $scope.couldNotFetchLogs = true;
+ $scope.couldNotConnect = false;
+ $scope.fetchedData = true;
+ $scope.hideLogs = true;
+ $scope.hideErrorLogs = true;
+
+ }
+
+
+ };
+
+ ///////// Configurations Part
+
+ $scope.configurationsBox = true;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedConfigsData = true;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+
+ $scope.hideconfigbtn = function () {
+
+ $scope.configurationsBox = true;
+ };
+
+ $scope.fetchConfigurations = function () {
+
+
+ $scope.hidsslconfigs = true;
+ $scope.configurationsBoxRewrite = true;
+ $scope.changePHPView = true;
+
+
+ //Rewrite rules
+ $scope.configurationsBoxRewrite = true;
+ $scope.rewriteRulesFetched = true;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = true;
+
+ ///
+
+ $scope.configFileLoading = false;
+
+
+ url = "/websites/getDataFromConfigFile";
+
+ var virtualHost = $("#childDomain").text();
+
+
+ var data = {
+ virtualHost: virtualHost,
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.configstatus === 1) {
+
+ //Rewrite rules
+
+ $scope.configurationsBoxRewrite = true;
+ $scope.rewriteRulesFetched = true;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = true;
+
+ ///
+
+ $scope.configurationsBox = false;
+ $scope.configsFetched = false;
+ $scope.couldNotFetchConfigs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedConfigsData = false;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+ $scope.saveConfigBtn = false;
+
+
+ $scope.configData = response.data.configData;
+
+ } else {
+
+ //Rewrite rules
+ $scope.configurationsBoxRewrite = true;
+ $scope.rewriteRulesFetched = true;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = true;
+
+ ///
+ $scope.configurationsBox = false;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = false;
+ $scope.couldNotConnect = true;
+ $scope.fetchedConfigsData = true;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ //Rewrite rules
+ $scope.configurationsBoxRewrite = true;
+ $scope.rewriteRulesFetched = true;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = true;
+ ///
+
+ $scope.configurationsBox = false;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.couldNotConnect = false;
+ $scope.fetchedConfigsData = true;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+
+
+ }
+
+
+ };
+
+ $scope.saveCongiruations = function () {
+
+ $scope.configFileLoading = false;
+
+
+ url = "/websites/saveConfigsToFile";
+
+ var virtualHost = $("#childDomain").text();
+ var configData = $scope.configData;
+
+
+ var data = {
+ virtualHost: virtualHost,
+ configData: configData,
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.configstatus == 1) {
+
+ $scope.configurationsBox = false;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedConfigsData = true;
+ $scope.configFileLoading = true;
+ $scope.configSaved = false;
+ $scope.couldNotSaveConfigurations = true;
+ $scope.saveConfigBtn = true;
+
+
+ } else {
+ $scope.configurationsBox = false;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedConfigsData = false;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = false;
+
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.configurationsBox = false;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.couldNotConnect = false;
+ $scope.fetchedConfigsData = true;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+
+
+ }
+
+
+ };
+
+
+ ///////// Rewrite Rules
+
+ $scope.configurationsBoxRewrite = true;
+ $scope.rewriteRulesFetched = true;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = true;
+
+ $scope.hideRewriteRulesbtn = function () {
+ $scope.configurationsBoxRewrite = true;
+ };
+
+
+ $scope.fetchRewriteFules = function () {
+
+ $scope.hidsslconfigs = true;
+ $scope.configurationsBox = true;
+ $scope.changePHPView = true;
+
+
+ $scope.configurationsBox = true;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.couldNotConnect = true;
+ $scope.fetchedConfigsData = true;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+ $scope.saveConfigBtn = true;
+
+ $scope.configFileLoading = false;
+
+
+ url = "/websites/getRewriteRules";
+
+ var virtualHost = $("#childDomain").text();
+
+
+ var data = {
+ virtualHost: virtualHost,
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.rewriteStatus == 1) {
+
+
+ // from main
+
+ $scope.configurationsBox = true;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.fetchedConfigsData = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+ $scope.saveConfigBtn = true;
+
+ // main ends
+
+ $scope.configFileLoading = true;
+
+ //
+
+
+ $scope.configurationsBoxRewrite = false;
+ $scope.rewriteRulesFetched = false;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = false;
+ $scope.saveRewriteRulesBTN = false;
+ $scope.couldNotConnect = true;
+
+
+ $scope.rewriteRules = response.data.rewriteRules;
+
+ } else {
+ // from main
+ $scope.configurationsBox = true;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.fetchedConfigsData = true;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+ $scope.saveConfigBtn = true;
+ // from main
+
+ $scope.configFileLoading = true;
+
+ ///
+
+ $scope.configurationsBoxRewrite = true;
+ $scope.rewriteRulesFetched = true;
+ $scope.couldNotFetchRewriteRules = false;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = true;
+ $scope.couldNotConnect = true;
+
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+ // from main
+
+ $scope.configurationsBox = true;
+ $scope.configsFetched = true;
+ $scope.couldNotFetchConfigs = true;
+ $scope.fetchedConfigsData = true;
+ $scope.configFileLoading = true;
+ $scope.configSaved = true;
+ $scope.couldNotSaveConfigurations = true;
+ $scope.saveConfigBtn = true;
+
+ // from main
+
+ $scope.configFileLoading = true;
+
+ ///
+
+ $scope.configurationsBoxRewrite = true;
+ $scope.rewriteRulesFetched = true;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = true;
+
+ $scope.couldNotConnect = false;
+
+
+ }
+
+
+ };
+
+ $scope.saveRewriteRules = function () {
+
+ $scope.configFileLoading = false;
+
+
+ url = "/websites/saveRewriteRules";
+
+ var virtualHost = $("#childDomain").text();
+ var rewriteRules = $scope.rewriteRules;
+
+
+ var data = {
+ virtualHost: virtualHost,
+ rewriteRules: rewriteRules,
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.rewriteStatus == 1) {
+
+ $scope.configurationsBoxRewrite = false;
+ $scope.rewriteRulesFetched = true;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = false;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = true;
+ $scope.configFileLoading = true;
+
+
+ } else {
+ $scope.configurationsBoxRewrite = false;
+ $scope.rewriteRulesFetched = false;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = false;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = false;
+
+ $scope.configFileLoading = true;
+
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.configurationsBoxRewrite = false;
+ $scope.rewriteRulesFetched = false;
+ $scope.couldNotFetchRewriteRules = true;
+ $scope.rewriteRulesSaved = true;
+ $scope.couldNotSaveRewriteRules = true;
+ $scope.fetchedRewriteRules = true;
+ $scope.saveRewriteRulesBTN = false;
+
+ $scope.configFileLoading = true;
+
+ $scope.couldNotConnect = false;
+
+
+ }
+
+
+ };
+
+
+ //////// SSL Part
+
+ $scope.sslSaved = true;
+ $scope.couldNotSaveSSL = true;
+ $scope.hidsslconfigs = true;
+ $scope.couldNotConnect = true;
+
+
+ $scope.hidesslbtn = function () {
+ $scope.hidsslconfigs = true;
+ };
+
+ $scope.addSSL = function () {
+ $scope.hidsslconfigs = false;
+ $scope.configurationsBox = true;
+ $scope.configurationsBoxRewrite = true;
+ $scope.changePHPView = true;
+ };
+
+
+ $scope.saveSSL = function () {
+
+
+ $scope.configFileLoading = false;
+
+ url = "/websites/saveSSL";
+
+ var virtualHost = $("#childDomain").text();
+ var cert = $scope.cert;
+ var key = $scope.key;
+
+
+ var data = {
+ virtualHost: virtualHost,
+ cert: cert,
+ key: key,
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+ if (response.data.sslStatus === 1) {
+
+ $scope.sslSaved = false;
+ $scope.couldNotSaveSSL = true;
+ $scope.couldNotConnect = true;
+ $scope.configFileLoading = true;
+
+
+ } else {
+
+ $scope.sslSaved = true;
+ $scope.couldNotSaveSSL = false;
+ $scope.couldNotConnect = true;
+ $scope.configFileLoading = true;
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.sslSaved = true;
+ $scope.couldNotSaveSSL = true;
+ $scope.couldNotConnect = false;
+ $scope.configFileLoading = true;
+
+
+ }
+
+ };
+
+
+ //// Change PHP Master
+
+ $scope.failedToChangePHPMaster = true;
+ $scope.phpChangedMaster = true;
+ $scope.couldNotConnect = true;
+
+ $scope.changePHPView = true;
+
+
+ $scope.hideChangePHPMaster = function () {
+ $scope.changePHPView = true;
+ };
+
+ $scope.changePHPMaster = function () {
+ $scope.hidsslconfigs = true;
+ $scope.configurationsBox = true;
+ $scope.configurationsBoxRewrite = true;
+ $scope.changePHPView = false;
+ };
+
+
+ $scope.changePHPVersionMaster = function (childDomain, phpSelection) {
+
+ // notifcations
+
+ $scope.configFileLoading = false;
+
+ var url = "/websites/changePHP";
+
+ var data = {
+ childDomain: $("#childDomain").text(),
+ phpSelection: $scope.phpSelectionMaster,
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.changePHP === 1) {
+
+ $scope.configFileLoading = true;
+ $scope.websiteDomain = $("#childDomain").text();
+
+
+ // notifcations
+
+ $scope.failedToChangePHPMaster = true;
+ $scope.phpChangedMaster = false;
+ $scope.couldNotConnect = true;
+
+
+ } else {
+
+ $scope.configFileLoading = true;
+ $scope.errorMessage = response.data.error_message;
+
+ // notifcations
+
+ $scope.failedToChangePHPMaster = false;
+ $scope.phpChangedMaster = true;
+ $scope.couldNotConnect = true;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.configFileLoading = true;
+
+ // notifcations
+
+ $scope.failedToChangePHPMaster = true;
+ $scope.phpChangedMaster = true;
+ $scope.couldNotConnect = false;
+
+ }
+
+ };
+
+
+ /// Open_basedir protection
+
+ $scope.baseDirLoading = true;
+ $scope.operationFailed = true;
+ $scope.operationSuccessfull = true;
+ $scope.couldNotConnect = true;
+ $scope.openBaseDirBox = true;
+
+
+ $scope.openBaseDirView = function () {
+ $scope.openBaseDirBox = false;
+ };
+
+ $scope.hideOpenBasedir = function () {
+ $scope.openBaseDirBox = true;
+ };
+
+ $scope.applyOpenBasedirChanges = function (childDomain, phpSelection) {
+
+ // notifcations
+
+ $scope.baseDirLoading = false;
+ $scope.operationFailed = true;
+ $scope.operationSuccessfull = true;
+ $scope.couldNotConnect = true;
+ $scope.openBaseDirBox = false;
+
+
+ var url = "/websites/changeOpenBasedir";
+
+ var data = {
+ domainName: $("#childDomain").text(),
+ openBasedirValue: $scope.openBasedirValue
+ };
+
+ var config = {
+ headers: {
+ 'X-CSRFToken': getCookie('csrftoken')
+ }
+ };
+
+ $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
+
+
+ function ListInitialDatas(response) {
+
+
+ if (response.data.changeOpenBasedir === 1) {
+
+ $scope.baseDirLoading = true;
+ $scope.operationFailed = true;
+ $scope.operationSuccessfull = false;
+ $scope.couldNotConnect = true;
+ $scope.openBaseDirBox = false;
+
+ } else {
+
+ $scope.baseDirLoading = true;
+ $scope.operationFailed = false;
+ $scope.operationSuccessfull = true;
+ $scope.couldNotConnect = true;
+ $scope.openBaseDirBox = false;
+
+ $scope.errorMessage = response.data.error_message;
+
+ }
+
+
+ }
+
+ function cantLoadInitialDatas(response) {
+
+ $scope.baseDirLoading = true;
+ $scope.operationFailed = true;
+ $scope.operationSuccessfull = true;
+ $scope.couldNotConnect = false;
+ $scope.openBaseDirBox = false;
+
+
+ }
+
+ }
+
+});
\ No newline at end of file
diff --git a/static/websiteFunctions/websiteFunctions.js b/static/websiteFunctions/websiteFunctions.js
index 1089c21b5..f6c5f9dcb 100644
--- a/static/websiteFunctions/websiteFunctions.js
+++ b/static/websiteFunctions/websiteFunctions.js
@@ -5,7 +5,14 @@
// Ensure app is available (get existing module or create reference)
// This ensures compatibility with the global app variable from system-status.js
if (typeof app === 'undefined') {
- app = angular.module('CyberCP');
+ // First try to get window.app (set by system-status.js)
+ if (typeof window !== 'undefined' && typeof window.app !== 'undefined') {
+ app = window.app;
+ } else {
+ // If window.app doesn't exist, get the existing CyberCP module
+ // This works because system-status.js should have already created it
+ app = angular.module('CyberCP');
+ }
}
// Global function for deleting staging sites
diff --git a/websiteFunctions/static/websiteFunctions/websiteFunctions.js b/websiteFunctions/static/websiteFunctions/websiteFunctions.js
index f178d4810..dd86b2455 100644
--- a/websiteFunctions/static/websiteFunctions/websiteFunctions.js
+++ b/websiteFunctions/static/websiteFunctions/websiteFunctions.js
@@ -2,6 +2,19 @@
* Created by usman on 7/26/17.
*/
+// Ensure app is available (get existing module or create reference)
+// This ensures compatibility with the global app variable from system-status.js
+if (typeof app === 'undefined') {
+ // First try to get window.app (set by system-status.js)
+ if (typeof window !== 'undefined' && typeof window.app !== 'undefined') {
+ app = window.app;
+ } else {
+ // If window.app doesn't exist, get the existing CyberCP module
+ // This works because system-status.js should have already created it
+ app = angular.module('CyberCP');
+ }
+}
+
// Global function for deleting staging sites
function deleteStagingGlobal(stagingId) {
if (confirm("Are you sure you want to delete this staging site? This action cannot be undone.")) {
@@ -10730,39 +10743,6 @@ $("#modifyWebsiteLoading").hide();
$("#modifyWebsiteButton").hide();
app.controller('modifyWebsitesController', function ($scope, $http) {
-
- // Initialize home directory variables
- $scope.homeDirectories = [];
- $scope.selectedHomeDirectory = '';
- $scope.selectedHomeDirectoryInfo = null;
- $scope.currentHomeDirectory = '';
-
- // Load home directories on page load
- $scope.loadHomeDirectories = function() {
- $http.post('/userManagement/getUserHomeDirectories/', {})
- .then(function(response) {
- if (response.data.status === 1) {
- $scope.homeDirectories = response.data.directories;
- }
- })
- .catch(function(error) {
- console.error('Error loading home directories:', error);
- });
- };
-
- // Update home directory info when selection changes
- $scope.updateHomeDirectoryInfo = function() {
- if ($scope.selectedHomeDirectory) {
- $scope.selectedHomeDirectoryInfo = $scope.homeDirectories.find(function(dir) {
- return dir.id == $scope.selectedHomeDirectory;
- });
- } else {
- $scope.selectedHomeDirectoryInfo = null;
- }
- };
-
- // Initialize home directories
- $scope.loadHomeDirectories();
$scope.fetchWebsites = function () {
@@ -10807,7 +10787,6 @@ app.controller('modifyWebsitesController', function ($scope, $http) {
$scope.webpacks = JSON.parse(response.data.packages);
$scope.adminNames = JSON.parse(response.data.adminNames);
$scope.currentAdmin = response.data.currentAdmin;
- $scope.currentHomeDirectory = response.data.currentHomeDirectory || 'Default';
$("#webSiteDetailsToBeModified").fadeIn();
$("#websiteModifySuccess").fadeIn();
@@ -10835,7 +10814,6 @@ app.controller('modifyWebsitesController', function ($scope, $http) {
var email = $scope.adminEmail;
var phpVersion = $scope.phpSelection;
var admin = $scope.selectedAdmin;
- var homeDirectory = $scope.selectedHomeDirectory;
$("#websiteModifyFailure").hide();
@@ -10852,8 +10830,7 @@ app.controller('modifyWebsitesController', function ($scope, $http) {
packForWeb: packForWeb,
email: email,
phpVersion: phpVersion,
- admin: admin,
- homeDirectory: homeDirectory
+ admin: admin
};
var config = {
@@ -13325,16 +13302,6 @@ app.controller('manageAliasController', function ($scope, $http, $timeout, $wind
$scope.manageAliasLoading = true;
$scope.operationSuccess = true;
- // Initialize the page to show aliases list
- $scope.showAliasesList = function() {
- $scope.aliasTable = true;
- $scope.addAliasButton = true;
- $scope.domainAliasForm = false;
- };
-
- // Auto-show aliases list on page load
- $scope.showAliasesList();
-
$scope.createAliasEnter = function ($event) {
var keyCode = $event.which || $event.keyCode;
if (keyCode === 13) {
@@ -13582,64 +13549,6 @@ app.controller('manageAliasController', function ($scope, $http, $timeout, $wind
};
- $scope.issueAliasSSL = function (masterDomain, aliasDomain) {
- $scope.manageAliasLoading = false;
-
- url = "/websites/issueAliasSSL";
-
- var data = {
- masterDomain: masterDomain,
- aliasDomain: aliasDomain
- };
-
- var config = {
- headers: {
- 'X-CSRFToken': getCookie('csrftoken')
- }
- };
-
- $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas);
-
- function ListInitialDatas(response) {
- if (response.data.issueAliasSSL === 1) {
- $scope.aliasTable = false;
- $scope.addAliasButton = true;
- $scope.domainAliasForm = true;
- $scope.aliasError = true;
- $scope.couldNotConnect = true;
- $scope.aliasCreated = true;
- $scope.manageAliasLoading = true;
- $scope.operationSuccess = false;
-
- $timeout(function () {
- $window.location.reload();
- }, 3000);
- } else {
- $scope.aliasTable = false;
- $scope.addAliasButton = true;
- $scope.domainAliasForm = true;
- $scope.aliasError = false;
- $scope.couldNotConnect = true;
- $scope.aliasCreated = true;
- $scope.manageAliasLoading = true;
- $scope.operationSuccess = true;
-
- $scope.errorMessage = response.data.error_message;
- }
- }
-
- function cantLoadInitialDatas(response) {
- $scope.aliasTable = false;
- $scope.addAliasButton = true;
- $scope.domainAliasForm = true;
- $scope.aliasError = true;
- $scope.couldNotConnect = false;
- $scope.aliasCreated = true;
- $scope.manageAliasLoading = true;
- $scope.operationSuccess = true;
- }
- };
-
////// create domain part