PageRenderTime 65ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/magento/app/code/core/Mage/Backup/Helper/Data.php

https://bitbucket.org/jit_bec/shopifine
PHP | 323 lines | 155 code | 34 blank | 134 comment | 4 complexity | 1d90748863733bd38b2810a4de24262f MD5 | raw file
Possible License(s): LGPL-3.0
  1. <?php
  2. /**
  3. * Magento
  4. *
  5. * NOTICE OF LICENSE
  6. *
  7. * This source file is subject to the Open Software License (OSL 3.0)
  8. * that is bundled with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://opensource.org/licenses/osl-3.0.php
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@magentocommerce.com so we can send you a copy immediately.
  14. *
  15. * DISCLAIMER
  16. *
  17. * Do not edit or add to this file if you wish to upgrade Magento to newer
  18. * versions in the future. If you wish to customize Magento for your
  19. * needs please refer to http://www.magentocommerce.com for more information.
  20. *
  21. * @category Mage
  22. * @package Mage_Backup
  23. * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * Backup data helper
  28. */
  29. class Mage_Backup_Helper_Data extends Mage_Core_Helper_Abstract
  30. {
  31. /**
  32. * Backup type constant for database backup
  33. */
  34. const TYPE_DB = 'db';
  35. /**
  36. * Backup type constant for filesystem backup
  37. */
  38. const TYPE_FILESYSTEM = 'filesystem';
  39. /**
  40. * Backup type constant for full system backup(database + filesystem)
  41. */
  42. const TYPE_SYSTEM_SNAPSHOT = 'snapshot';
  43. /**
  44. * Backup type constant for media and database backup
  45. */
  46. const TYPE_MEDIA = 'media';
  47. /**
  48. * Backup type constant for full system backup excluding media folder
  49. */
  50. const TYPE_SNAPSHOT_WITHOUT_MEDIA = 'nomedia';
  51. /**
  52. * Get all possible backup type values with descriptive title
  53. *
  54. * @return array
  55. */
  56. public function getBackupTypes()
  57. {
  58. return array(
  59. self::TYPE_DB => self::__('Database'),
  60. self::TYPE_MEDIA => self::__('Database and Media'),
  61. self::TYPE_SYSTEM_SNAPSHOT => self::__('System'),
  62. self::TYPE_SNAPSHOT_WITHOUT_MEDIA => self::__('System (excluding Media)')
  63. );
  64. }
  65. /**
  66. * Get all possible backup type values
  67. *
  68. * @return array
  69. */
  70. public function getBackupTypesList()
  71. {
  72. return array(
  73. self::TYPE_DB,
  74. self::TYPE_SYSTEM_SNAPSHOT,
  75. self::TYPE_SNAPSHOT_WITHOUT_MEDIA,
  76. self::TYPE_MEDIA
  77. );
  78. }
  79. /**
  80. * Get default backup type value
  81. *
  82. * @return string
  83. */
  84. public function getDefaultBackupType()
  85. {
  86. return self::TYPE_DB;
  87. }
  88. /**
  89. * Get directory path where backups stored
  90. *
  91. * @return string
  92. */
  93. public function getBackupsDir()
  94. {
  95. return Mage::getBaseDir('var') . DS . 'backups';
  96. }
  97. /**
  98. * Get backup file extension by backup type
  99. *
  100. * @param string $type
  101. * @return string
  102. */
  103. public function getExtensionByType($type)
  104. {
  105. $extensions = $this->getExtensions();
  106. return isset($extensions[$type]) ? $extensions[$type] : '';
  107. }
  108. /**
  109. * Get all types to extensions map
  110. *
  111. * @return array
  112. */
  113. public function getExtensions()
  114. {
  115. return array(
  116. self::TYPE_SYSTEM_SNAPSHOT => 'tgz',
  117. self::TYPE_SNAPSHOT_WITHOUT_MEDIA => 'tgz',
  118. self::TYPE_MEDIA => 'tgz',
  119. self::TYPE_DB => 'gz'
  120. );
  121. }
  122. /**
  123. * Generate backup download name
  124. *
  125. * @param Mage_Backup_Model_Backup $backup
  126. * @return string
  127. */
  128. public function generateBackupDownloadName(Mage_Backup_Model_Backup $backup)
  129. {
  130. $additionalExtension = $backup->getType() == self::TYPE_DB ? '.sql' : '';
  131. return $backup->getType() . '-' . date('YmdHis', $backup->getTime()) . $additionalExtension . '.'
  132. . $this->getExtensionByType($backup->getType());
  133. }
  134. /**
  135. * Check Permission for Rollback
  136. *
  137. * @return boolean
  138. */
  139. public function isRollbackAllowed(){
  140. return Mage::getSingleton('admin/session')->isAllowed('system/tools/backup/rollback' );
  141. }
  142. /**
  143. * Get paths that should be ignored when creating system snapshots
  144. *
  145. * @return array
  146. */
  147. public function getBackupIgnorePaths()
  148. {
  149. return array(
  150. '.svn',
  151. 'maintenance.flag',
  152. Mage::getBaseDir('var') . DS . 'session',
  153. Mage::getBaseDir('var') . DS . 'cache',
  154. Mage::getBaseDir('var') . DS . 'full_page_cache',
  155. Mage::getBaseDir('var') . DS . 'locks',
  156. Mage::getBaseDir('var') . DS . 'log',
  157. Mage::getBaseDir('var') . DS . 'report'
  158. );
  159. }
  160. /**
  161. * Get paths that should be ignored when rolling back system snapshots
  162. *
  163. * @return array
  164. */
  165. public function getRollbackIgnorePaths()
  166. {
  167. return array(
  168. '.svn',
  169. 'maintenance.flag',
  170. Mage::getBaseDir('var') . DS . 'session',
  171. Mage::getBaseDir('var') . DS . 'locks',
  172. Mage::getBaseDir('var') . DS . 'log',
  173. Mage::getBaseDir('var') . DS . 'report',
  174. Mage::getBaseDir('app') . DS . 'Mage.php',
  175. Mage::getBaseDir() . DS . 'errors',
  176. Mage::getBaseDir() . DS . 'index.php'
  177. );
  178. }
  179. /**
  180. * Put store into maintenance mode
  181. *
  182. * @return bool
  183. */
  184. public function turnOnMaintenanceMode()
  185. {
  186. $maintenanceFlagFile = $this->getMaintenanceFlagFilePath();
  187. $result = file_put_contents($maintenanceFlagFile, 'maintenance');
  188. return $result !== false;
  189. }
  190. /**
  191. * Turn off store maintenance mode
  192. */
  193. public function turnOffMaintenanceMode()
  194. {
  195. $maintenanceFlagFile = $this->getMaintenanceFlagFilePath();
  196. @unlink($maintenanceFlagFile);
  197. }
  198. /**
  199. * Get backup create success message by backup type
  200. *
  201. * @param string $type
  202. * @return string
  203. */
  204. public function getCreateSuccessMessageByType($type)
  205. {
  206. $messagesMap = array(
  207. self::TYPE_SYSTEM_SNAPSHOT => $this->__('The system backup has been created.'),
  208. self::TYPE_SNAPSHOT_WITHOUT_MEDIA => $this->__('The system (excluding Media) backup has been created.'),
  209. self::TYPE_MEDIA => $this->__('The database and media backup has been created.'),
  210. self::TYPE_DB => $this->__('The database backup has been created.')
  211. );
  212. if (!isset($messagesMap[$type])) {
  213. return;
  214. }
  215. return $messagesMap[$type];
  216. }
  217. /**
  218. * Get path to maintenance flag file
  219. *
  220. * @return string
  221. */
  222. protected function getMaintenanceFlagFilePath()
  223. {
  224. return Mage::getBaseDir() . DS . 'maintenance.flag';
  225. }
  226. /**
  227. * Invalidate Cache
  228. * @return Mage_Backup_Helper_Data
  229. */
  230. public function invalidateCache()
  231. {
  232. if ($cacheTypesNode = Mage::getConfig()->getNode(Mage_Core_Model_Cache::XML_PATH_TYPES)) {
  233. $cacheTypesList = array_keys($cacheTypesNode->asArray());
  234. Mage::app()->getCacheInstance()->invalidateType($cacheTypesList);
  235. }
  236. return $this;
  237. }
  238. /**
  239. * Invalidate Indexer
  240. *
  241. * @return Mage_Backup_Helper_Data
  242. */
  243. public function invalidateIndexer()
  244. {
  245. foreach (Mage::getResourceModel('index/process_collection') as $process){
  246. $process->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
  247. }
  248. return $this;
  249. }
  250. /**
  251. * Creates backup's display name from it's name
  252. *
  253. * @param string $name
  254. * @return string
  255. */
  256. public function nameToDisplayName($name)
  257. {
  258. return str_replace('_', ' ', $name);
  259. }
  260. /**
  261. * Extracts information from backup's filename
  262. *
  263. * @param string $filename
  264. * @return Varien_Object
  265. */
  266. public function extractDataFromFilename($filename)
  267. {
  268. $extensions = $this->getExtensions();
  269. $filenameWithoutExtension = $filename;
  270. foreach ($extensions as $extension) {
  271. $filenameWithoutExtension = preg_replace('/' . preg_quote($extension, '/') . '$/', '',
  272. $filenameWithoutExtension
  273. );
  274. }
  275. $filenameWithoutExtension = substr($filenameWithoutExtension, 0, strrpos($filenameWithoutExtension, "."));
  276. list($time, $type) = explode("_", $filenameWithoutExtension);
  277. $name = str_replace($time . '_' . $type, '', $filenameWithoutExtension);
  278. if (!empty($name)) {
  279. $name = substr($name, 1);
  280. }
  281. $result = new Varien_Object();
  282. $result->addData(array(
  283. 'name' => $name,
  284. 'type' => $type,
  285. 'time' => $time
  286. ));
  287. return $result;
  288. }
  289. }