angular.module('sba-git', []) .directive("sbaGit", function() { return { restrict: 'E', templateUrl: "/sbadirective/load/sba-git.html", controller: function($scope, $http, $filter, $sce) { $scope.buttons = [{ 'name': 'Fetch logs', 'function': 'fetchGitLogs', 'icon': 'fa-cog', 'class': 'col-md-2', }, { 'name': 'Update PHP files', 'function': 'updatePhp', 'icon': 'fa-cog', 'class': 'col-md-2', }, { 'name': 'Get Changes', 'function': 'getDiff', 'icon': 'fa-cog', 'class': 'col-md-2', }, { 'name': 'Get Status', 'function': 'fetchGitStatus', 'icon': 'fa-cog', 'class': 'col-md-2', }, { 'name': 'Push To Development', 'function': 'pushToDevelopment', 'icon': 'fa-cog', 'class': 'col-md-3', 'pushToProduction': true, }, { 'name': 'Push To Production', 'function': 'pushToProduction', 'icon': 'fa-cog', 'class': 'col-md-3', 'pushToProduction': true, }, { 'name': 'Get SQL Changes', 'function': 'getSqlDiff', 'icon': 'fa-cog', 'class': 'col-md-3', }]; $scope.dynCall = function(button){ button.loading = true; strFunction = button.function; $scope[strFunction](button); } $scope.fetchGitLogs = function(button) { $scope.logs = ""; var req = { method: 'get', url: '/git/getLogs', } $http(req).then(function(response) { if (response.status && response.data.status) { $scope.logs = $sce.trustAsHtml(response.data.data.response); delete button.loading; } else if (response.status) { $scope.logs = "Failed"; delete button.loading; } }); } $scope.fetchGitStatus = function(button) { $scope.logs = ""; var req = { method: 'get', url: '/git/getStatus', } $http(req).then(function(response) { if (response.status && response.data.status) { var logs = response.data.data.response; $scope.logs = $sce.trustAsHtml(logs); if (logs.indexOf('branch is ahead of') !== -1) { $scope.changedFiles = []; } delete button.loading; } else if (response.status) { $scope.logs = "Failed"; delete button.loading; } }); } $scope.getDiff = function(button) { $scope.logs = ""; var req = { method: 'get', url: '/git/getDiff', } $http(req).then(function(response) { if (response.status && response.data.status) { $scope.changedFiles = response.data.data.response.split('
').filter(function(item) { return item.trim(); }); angular.forEach($scope.changedFiles, function(item, index) { $scope.changedFiles[index] = item.trim(); }); $scope.logs = $sce.trustAsHtml(response.data.data.response); delete $scope.selectedFiles; delete button.loading; } else if (response.status) { $scope.logs = "Failed"; delete button.loading; } }); } $scope.pushToDevelopment = function(button) { $scope.logs = ""; var data = { comment: $scope.commitMessage, } if ($scope.selectedFiles) { data['files'] = Object.keys($scope.selectedFiles).map(function(key) { if ($scope.selectedFiles[key]) { if (key === 'all') { return key; } return key.split("\t")[1]; } }); data['files'] = data['files'].filter(function(item){ return item; }); } var req = { method: 'post', url: '/git/pushToDevelopment', data: data, } $http(req).then(function(response) { if (response.status && response.data.status) { $scope.logs = $sce.trustAsHtml(response.data.data.response); delete button.loading; delete $scope.selectedFiles; delete $scope.changedFiles; delete $scope.commitMessage; } else if (response.status) { $scope.logs = "Failed"; delete button.loading; } }); } $scope.pushToProduction = function(button) { var r = confirm("Are you sure the code can be pushed to production?"); if (r == false) { delete button.loading; return false; } $scope.logs = ""; var data = { comment: $scope.commitMessage, } if ($scope.selectedFiles) { data['files'] = Object.keys($scope.selectedFiles).map(function(key) { if ($scope.selectedFiles[key]) { if (key === 'all') { return key; } return key.split("\t")[1]; } }); data['files'] = data['files'].filter(function(item){ return item; }); } var req = { method: 'post', url: '/git/pushToProduction', data: data, } $http(req).then(function(response) { if (response.status && response.data.status) { $scope.logs = $sce.trustAsHtml(response.data.data.response); delete button.loading; delete $scope.selectedFiles; delete $scope.changedFiles; delete $scope.commitMessage; } else if (response.status) { $scope.logs = "Failed"; delete button.loading; } }); } $scope.updatePhp = function(button) { $scope.logs = ""; var req = { method: 'get', url: '/git/updatePhp', } $http(req).then(function(response) { if (response.status && response.data.status) { $scope.logs = $sce.trustAsHtml(response.data.data.response); delete button.loading; } else if (response.status) { $scope.logs = "Failed"; delete button.loading; } }); } // ----- [SQL compare] ----- // $scope.changedSql = {}; $scope.getSqlDiff = function(button) { $scope.processingSqlDiff = true; var req = { method: 'get', url: '/git/compareSql', } $http(req).then(function(response) { if (response.status && response.data.status) { $scope.changedSql = response.data.data; } delete button.loading; $scope.processingSqlDiff = false; }, (error) => { delete button.loading; $scope.processingSqlDiff = true; }); } $scope.hasObjectKeys = function(object) { if(object){ return Object.keys(object).length >= 0; } else{ return false; } } $scope.hasObjectValues = function(object) { if(object){ return Object.values(object).length >= 0; } else{ return false; } } $scope.objectValues = function(object) { return Object.values(object); } $scope.objectKeys = function(object) { return Object.keys(object); } }, } });