PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/setup/pub/magento/setup/readiness-check.js

https://gitlab.com/yousafsyed/easternglamor
JavaScript | 362 lines | 335 code | 15 blank | 12 comment | 39 complexity | e5fa07ecdd3a7bf76bd139540c1b93a7 MD5 | raw file
  1. /**
  2. * Copyright © 2016 Magento. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. 'use strict';
  6. angular.module('readiness-check', [])
  7. .constant('COUNTER', 1)
  8. .controller('readinessCheckController', ['$rootScope', '$scope', '$localStorage', '$http', '$timeout', '$sce', '$state', 'COUNTER', function ($rootScope, $scope, $localStorage, $http, $timeout, $sce, $state, COUNTER) {
  9. $scope.Object = Object;
  10. $scope.titles = $localStorage.titles;
  11. $scope.moduleName = $localStorage.moduleName;
  12. $scope.progressCounter = COUNTER;
  13. $scope.startProgress = function() {
  14. ++$scope.progressCounter;
  15. };
  16. $scope.componentDependency = {
  17. visible: false,
  18. processed: false,
  19. expanded: false,
  20. isRequestError: false,
  21. errorMessage: '',
  22. packages: null
  23. };
  24. switch ($state.current.type) {
  25. case 'uninstall':
  26. $scope.dependencyUrl = 'index.php/dependency-check/uninstall-dependency-check';
  27. if ($localStorage.packages) {
  28. $scope.componentDependency.packages = $localStorage.packages;
  29. }
  30. break;
  31. case 'enable':
  32. case 'disable':
  33. $scope.dependencyUrl = 'index.php/dependency-check/enable-disable-dependency-check';
  34. if ($localStorage.packages) {
  35. $scope.componentDependency.packages = {
  36. type: $state.current.type,
  37. packages: $localStorage.packages
  38. };
  39. }
  40. break;
  41. default:
  42. $scope.dependencyUrl = 'index.php/dependency-check/component-dependency';
  43. if ($localStorage.packages) {
  44. $scope.componentDependency.packages = $localStorage.packages;
  45. }
  46. }
  47. $scope.stopProgress = function() {
  48. --$scope.progressCounter;
  49. if ($scope.progressCounter == COUNTER) {
  50. $scope.resetProgress();
  51. }
  52. };
  53. $scope.resetProgress = function() {
  54. $scope.progressCounter = 0;
  55. };
  56. $rootScope.checkingInProgress = function() {
  57. return $scope.progressCounter > 0;
  58. };
  59. $scope.requestFailedHandler = function(obj) {
  60. obj.processed = true;
  61. obj.isRequestError = true;
  62. $scope.hasErrors = true;
  63. $rootScope.hasErrors = true;
  64. $scope.stopProgress();
  65. };
  66. $scope.completed = false;
  67. $scope.hasErrors = false;
  68. $scope.version = {
  69. visible: false,
  70. processed: false,
  71. expanded: false,
  72. isRequestError: false
  73. };
  74. $scope.settings = {
  75. visible: false,
  76. processed: false,
  77. expanded: false,
  78. isRequestError: false
  79. };
  80. $scope.extensions = {
  81. visible: false,
  82. processed: false,
  83. expanded: false,
  84. isRequestError: false
  85. };
  86. $scope.permissions = {
  87. visible: false,
  88. processed: false,
  89. expanded: false,
  90. isRequestError: false
  91. };
  92. $scope.updater = {
  93. visible: false,
  94. processed: false,
  95. expanded: false,
  96. isRequestError: false
  97. };
  98. $scope.cronScript = {
  99. visible: false,
  100. processed: false,
  101. expanded: false,
  102. isRequestError: false,
  103. notice: false,
  104. setupErrorMessage: '',
  105. updaterErrorMessage: '',
  106. setupNoticeMessage: '',
  107. updaterNoticeMessage: ''
  108. };
  109. $scope.items = {
  110. 'php-version': {
  111. url:'index.php/environment/php-version',
  112. params: $scope.actionFrom,
  113. useGet: true,
  114. show: function() {
  115. $scope.startProgress();
  116. $scope.version.visible = true;
  117. },
  118. process: function(data) {
  119. $scope.version.processed = true;
  120. angular.extend($scope.version, data);
  121. $scope.updateOnProcessed($scope.version.responseType);
  122. $scope.stopProgress();
  123. },
  124. fail: function() {
  125. $scope.requestFailedHandler($scope.version);
  126. }
  127. },
  128. 'php-settings': {
  129. url:'index.php/environment/php-settings',
  130. params: $scope.actionFrom,
  131. useGet: true,
  132. show: function() {
  133. $scope.startProgress();
  134. $scope.settings.visible = true;
  135. },
  136. process: function(data) {
  137. $scope.settings.processed = true;
  138. angular.extend($scope.settings, data);
  139. $scope.updateOnProcessed($scope.settings.responseType);
  140. $scope.stopProgress();
  141. },
  142. fail: function() {
  143. $scope.requestFailedHandler($scope.settings);
  144. }
  145. },
  146. 'php-extensions': {
  147. url:'index.php/environment/php-extensions',
  148. params: $scope.actionFrom,
  149. useGet: true,
  150. show: function() {
  151. $scope.startProgress();
  152. $scope.extensions.visible = true;
  153. },
  154. process: function(data) {
  155. $scope.extensions.processed = true;
  156. angular.extend($scope.extensions, data);
  157. if(data.responseType !== 'error') {
  158. $scope.extensions.length = Object.keys($scope.extensions.data.required).length;
  159. }
  160. $scope.updateOnProcessed($scope.extensions.responseType);
  161. $scope.stopProgress();
  162. },
  163. fail: function() {
  164. $scope.requestFailedHandler($scope.extensions);
  165. }
  166. }
  167. };
  168. if ($scope.actionFrom === 'installer') {
  169. $scope.items['file-permissions'] = {
  170. url:'index.php/environment/file-permissions',
  171. show: function() {
  172. $scope.startProgress();
  173. $scope.permissions.visible = true;
  174. },
  175. process: function(data) {
  176. $scope.permissions.processed = true;
  177. angular.extend($scope.permissions, data);
  178. $scope.updateOnProcessed($scope.permissions.responseType);
  179. $scope.stopProgress();
  180. },
  181. fail: function() {
  182. $scope.requestFailedHandler($scope.permissions);
  183. }
  184. };
  185. }
  186. if ($scope.actionFrom === 'updater') {
  187. $scope.items['updater-application'] = {
  188. url:'index.php/environment/updater-application',
  189. show: function() {
  190. $scope.startProgress();
  191. $scope.updater.visible = true;
  192. },
  193. process: function(data) {
  194. $scope.updater.processed = true;
  195. angular.extend($scope.updater, data);
  196. $scope.updateOnProcessed($scope.updater.responseType);
  197. $scope.stopProgress();
  198. },
  199. fail: function() {
  200. $scope.requestFailedHandler($scope.updater);
  201. }
  202. };
  203. $scope.items['cron-script'] = {
  204. url:'index.php/environment/cron-script',
  205. show: function() {
  206. $scope.startProgress();
  207. $scope.cronScript.visible = true;
  208. },
  209. process: function(data) {
  210. $scope.cronScript.processed = true;
  211. if (data.setupErrorMessage) {
  212. data.setupErrorMessage = $sce.trustAsHtml(data.setupErrorMessage);
  213. }
  214. if (data.updaterErrorMessage) {
  215. data.updaterErrorMessage = $sce.trustAsHtml(data.updaterErrorMessage);
  216. }
  217. if (data.setupNoticeMessage) {
  218. $scope.cronScript.notice = true;
  219. data.setupNoticeMessage = $sce.trustAsHtml(data.setupNoticeMessage);
  220. }
  221. if (data.updaterNoticeMessage) {
  222. $scope.cronScript.notice = true;
  223. data.updaterNoticeMessage = $sce.trustAsHtml(data.updaterNoticeMessage);
  224. }
  225. angular.extend($scope.cronScript, data);
  226. $scope.updateOnProcessed($scope.cronScript.responseType);
  227. $scope.stopProgress();
  228. },
  229. fail: function() {
  230. $scope.requestFailedHandler($scope.cronScript);
  231. }
  232. };
  233. $scope.items['component-dependency'] = {
  234. url: $scope.dependencyUrl,
  235. params: $scope.componentDependency.packages,
  236. show: function() {
  237. $scope.startProgress();
  238. $scope.componentDependency.visible = true;
  239. },
  240. process: function(data) {
  241. $scope.componentDependency.processed = true;
  242. if (data.errorMessage) {
  243. data.errorMessage = $sce.trustAsHtml(data.errorMessage);
  244. }
  245. angular.extend($scope.componentDependency, data);
  246. $scope.updateOnProcessed($scope.componentDependency.responseType);
  247. $scope.stopProgress();
  248. },
  249. fail: function() {
  250. $scope.requestFailedHandler($scope.componentDependency);
  251. }
  252. };
  253. }
  254. $scope.isCompleted = function() {
  255. return $scope.version.processed
  256. && $scope.settings.processed
  257. && $scope.extensions.processed
  258. && ($scope.permissions.processed || ($scope.actionFrom === 'updater'))
  259. && (($scope.cronScript.processed && $scope.componentDependency.processed && $scope.updater.processed)
  260. || ($scope.actionFrom !== 'updater'));
  261. };
  262. $scope.updateOnProcessed = function(value) {
  263. if (!$rootScope.hasErrors) {
  264. $rootScope.hasErrors = (value != 'success');
  265. $scope.hasErrors = $rootScope.hasErrors;
  266. }
  267. };
  268. $scope.updateOnError = function(obj) {
  269. obj.expanded = true;
  270. };
  271. $scope.updateOnSuccess = function(obj) {
  272. obj.expanded = false;
  273. };
  274. $scope.updateOnExpand = function(obj) {
  275. obj.expanded = !obj.expanded;
  276. };
  277. $scope.hasItem = function(haystack, needle) {
  278. return haystack.indexOf(needle) > -1;
  279. };
  280. $scope.query = function(item) {
  281. if (item.params) {
  282. if (item.useGet === true) {
  283. // The http request type has been changed from POST to GET for a reason. The POST request
  284. // results in PHP throwing a warning regards to 'always_populate_raw_post_data'
  285. // being incorrectly set to a value different than -1. This warning is throw during the initial
  286. // boot up sequence when POST request is received before the control gets transferred over to
  287. // the Magento customer error handler, hence not catchable. To avoid that warning, the HTTP
  288. // request type is being changed from POST to GET for select queries. Those queries are:
  289. // (1) PHP Version Check (2) PHP Settings Check and (3) PHP Extensions Check.
  290. item.url = item.url + '?type=' + item.params;
  291. } else {
  292. return $http.post(item.url, item.params)
  293. .success(function (data) {
  294. item.process(data)
  295. })
  296. .error(function (data, status) {
  297. item.fail();
  298. });
  299. }
  300. }
  301. // setting 1 minute timeout to prevent system from timing out
  302. return $http.get(item.url, {timeout: 60000})
  303. .success(function(data) { item.process(data) })
  304. .error(function(data, status) {
  305. item.fail();
  306. });
  307. };
  308. $scope.progress = function() {
  309. $rootScope.hasErrors = false;
  310. $scope.hasErrors = false;
  311. angular.forEach($scope.items, function(item) {
  312. item.show();
  313. });
  314. var $delay = 0;
  315. angular.forEach($scope.items, function(item) {
  316. $timeout(function() { $scope.query(item); }, $delay * 1000);
  317. $delay++;
  318. });
  319. };
  320. $scope.$on('$stateChangeSuccess', function (event, nextState) {
  321. if (nextState.id == 'root.readiness-check-' + nextState.type +'.progress') {
  322. $scope.progress();
  323. }
  324. });
  325. $scope.wordingOfReadinessCheckAction = function() {
  326. var $actionString = 'We\'re making sure your server environment is ready for ';
  327. if ($localStorage.moduleName) {
  328. $actionString += $localStorage.moduleName;
  329. } else {
  330. if($state.current.type === 'install' || $state.current.type === 'upgrade') {
  331. $actionString += 'Magento';
  332. if ($state.current.type === 'upgrade' && $localStorage.packages.length > 1 ) {
  333. $actionString += ' and selected components';
  334. }
  335. } else {
  336. $actionString += 'package';
  337. }
  338. }
  339. $actionString += " to be " + $state.current.type;
  340. if ($scope.endsWith($state.current.type, 'e')) {
  341. $actionString += 'd';
  342. } else {
  343. $actionString +='ed';
  344. }
  345. return $actionString;
  346. }
  347. }]);