/app/code/local/Xtento/OrderExport/controllers/Adminhtml/Orderexport/LogController.php

https://bitbucket.org/spenna/alexoo_produzione · PHP · 191 lines · 156 code · 27 blank · 8 comment · 20 complexity · 6189144dcee99dac9b44d1d798bac06e MD5 · raw file

  1. <?php
  2. /**
  3. * Product: Xtento_OrderExport (1.2.0)
  4. * ID: e6WLBQFx2/gx2klXgg3RFg49GuD6dk/ywJPoWrN/zYE=
  5. * Packaged: 2013-04-23T16:34:14+00:00
  6. * Last Modified: 2013-03-17T16:34:28+01:00
  7. * File: app/code/local/Xtento/OrderExport/controllers/Adminhtml/Orderexport/LogController.php
  8. * Copyright: Copyright (c) 2013 XTENTO GmbH & Co. KG <info@xtento.com> / All rights reserved.
  9. */
  10. class Xtento_OrderExport_Adminhtml_OrderExport_LogController extends Xtento_OrderExport_Controller_Abstract
  11. {
  12. public function indexAction()
  13. {
  14. $this->_initAction()
  15. ->renderLayout();
  16. }
  17. public function downloadAction()
  18. {
  19. $id = (int)$this->getRequest()->getParam('id');
  20. $exportedFiles = $this->_getFilesForLogId($id);
  21. if (!$exportedFiles) {
  22. return $this->_redirectReferer();
  23. }
  24. return $this->_prepareFileDownload($exportedFiles);
  25. }
  26. public function massDownloadAction()
  27. {
  28. $ids = $this->getRequest()->getParam('log');
  29. if (!is_array($ids)) {
  30. Mage::getSingleton('adminhtml/session')->addError(Mage::helper('xtento_orderexport')->__('Please select log entries to download.'));
  31. return $this->_redirect('*/*/');
  32. }
  33. $allExportedFiles = array();
  34. try {
  35. foreach ($ids as $id) {
  36. $exportedFiles = $this->_getFilesForLogId($id, true);
  37. if (empty($exportedFiles)) {
  38. continue;
  39. }
  40. foreach ($exportedFiles as $filename => $content) {
  41. if (isset($allExportedFiles[$filename])) {
  42. $filename = 'duplicate_filename_' . $id . '_' . $filename;
  43. }
  44. $allExportedFiles[$filename] = $content;
  45. }
  46. }
  47. } catch (Exception $e) {
  48. Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
  49. return $this->_redirectReferer();
  50. }
  51. return $this->_prepareFileDownload($allExportedFiles);
  52. }
  53. private function _getFilesForLogId($logId, $massDownload = false)
  54. {
  55. $model = Mage::getModel('xtento_orderexport/log');
  56. $model->load($logId);
  57. if (!$model->getId()) {
  58. if (!$massDownload) Mage::getSingleton('adminhtml/session')->addError(Mage::helper('xtento_orderexport')->__('This log entry (ID: %d) does not exist anymore.', $logId));
  59. return false;
  60. }
  61. $filesNotFound = 0;
  62. $exportedFiles = array();
  63. $savedFiles = $model->getFiles();
  64. if (empty($savedFiles)) {
  65. if (!$massDownload) Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('xtento_orderexport')->__('There is nothing to download. No files have been saved with this export. (Log ID: %d)', $logId));
  66. return false;
  67. }
  68. $savedFiles = explode("|", $savedFiles);
  69. $baseFilenames = array();
  70. foreach ($savedFiles as $filePath) {
  71. array_push($baseFilenames, basename($filePath));
  72. }
  73. $baseFilenames = array_unique($baseFilenames);
  74. foreach ($baseFilenames as $filename) {
  75. $filePath = Mage::helper('xtento_orderexport/export')->getExportBkpDir() . $logId . '_' . $filename;
  76. $data = @file_get_contents($filePath);
  77. if ($data === FALSE && !$this->getRequest()->getParam('force', false)) {
  78. $filesNotFound++;
  79. if (!$massDownload) Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('xtento_orderexport')->__('File not found in local backup directory: %s (Log ID: %d)', $filePath, $logId));
  80. if ($filesNotFound == count($baseFilenames)) {
  81. return false;
  82. }
  83. }
  84. $exportedFiles[$filename] = $data;
  85. }
  86. if ($filesNotFound > 0 && $filesNotFound !== count($baseFilenames) && !$this->getRequest()->getParam('force', false)) {
  87. Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('xtento_orderexport')->__('One or more files of this export have been deleted from the local backup directory. Please click <a href="%s">here</a> to download the remaining existing files. (Log ID: %d)', Mage::helper('adminhtml')->getUrl('*/*/*', array('id' => $logId, 'force' => true)), $logId));
  88. return false;
  89. }
  90. return $exportedFiles;
  91. }
  92. public function deleteAction()
  93. {
  94. $id = (int)$this->getRequest()->getParam('id');
  95. $model = Mage::getModel('xtento_orderexport/log');
  96. $model->load($id);
  97. if ($id && !$model->getId()) {
  98. Mage::getSingleton('adminhtml/session')->addError(Mage::helper('xtento_orderexport')->__('This log entry does not exist anymore.'));
  99. return $this->_redirectReferer();
  100. }
  101. try {
  102. $this->_deleteFilesFromFilesystem($model);
  103. $model->delete();
  104. Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('xtento_orderexport')->__('Log entry has been successfully deleted.'));
  105. } catch (Exception $e) {
  106. Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
  107. }
  108. return $this->_redirectReferer();
  109. }
  110. public function massDeleteAction()
  111. {
  112. $ids = $this->getRequest()->getParam('log');
  113. if (!is_array($ids)) {
  114. Mage::getSingleton('adminhtml/session')->addError(Mage::helper('xtento_orderexport')->__('Please select log entries to delete.'));
  115. return $this->_redirect('*/*/');
  116. }
  117. try {
  118. foreach ($ids as $id) {
  119. $model = Mage::getModel('xtento_orderexport/log');
  120. $model->load($id);
  121. $this->_deleteFilesFromFilesystem($model);
  122. $model->delete();
  123. }
  124. Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Total of %d record(s) were successfully deleted', count($ids)));
  125. } catch (Exception $e) {
  126. Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
  127. }
  128. return $this->_redirect('*/*/');
  129. }
  130. private function _deleteFilesFromFilesystem($model)
  131. {
  132. $savedFiles = $model->getFiles();
  133. if (empty($savedFiles)) {
  134. return false;
  135. }
  136. $savedFiles = explode("|", $savedFiles);
  137. $baseFilenames = array();
  138. foreach ($savedFiles as $filePath) {
  139. array_push($baseFilenames, basename($filePath));
  140. }
  141. $baseFilenames = array_unique($baseFilenames);
  142. foreach ($baseFilenames as $filename) {
  143. $filePath = Mage::helper('xtento_orderexport/export')->getExportBkpDir() . $model->getId() . '_' . $filename;
  144. @unlink($filePath);
  145. }
  146. return true;
  147. }
  148. public function gridAction()
  149. {
  150. $this->loadLayout();
  151. $this->renderLayout();
  152. }
  153. protected function _initAction()
  154. {
  155. $this->loadLayout()
  156. ->_setActiveMenu('sales/orderexport')
  157. ->_title(Mage::helper('xtento_orderexport')->__('Sales Export'))->_title(Mage::helper('xtento_orderexport')->__('Execution Log'));
  158. return $this;
  159. }
  160. protected function _isAllowed()
  161. {
  162. return Mage::getSingleton('admin/session')->isAllowed('sales/orderexport/log');
  163. }
  164. }