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_Downloadable
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: /**
28: * File uploader for API
29: *
30: * @category Mage
31: * @package Mage_Downloadable
32: * @author Magento Core Team <core@magentocommerce.com>
33: */
34: class Mage_Downloadable_Model_Link_Api_Uploader extends Mage_Core_Model_File_Uploader
35: {
36: /**
37: * Filename prefix
38: *
39: * @var string
40: */
41: protected $_filePrefix = 'Api';
42:
43: /**
44: * Default file type
45: */
46: const DEFAULT_FILE_TYPE = 'application/octet-stream';
47:
48: /**
49: * Check if the uploaded file exists
50: *
51: * @throws Exception
52: * @param array $file
53: */
54: public function __construct($file)
55: {
56: $this->_setUploadFile($file);
57: if( !file_exists($this->_file['tmp_name']) ) {
58: throw new Exception('', 'file_not_uploaded');
59: } else {
60: $this->_fileExists = true;
61: }
62: }
63:
64: /**
65: * Sets uploaded file info and decodes the file
66: *
67: * @throws Exception
68: * @param array $fileInfo
69: * @return void
70: */
71: private function _setUploadFile($fileInfo)
72: {
73: if (!is_array($fileInfo)) {
74: throw new Exception('', 'file_data_not_correct');
75: }
76:
77: $this->_file = $this->_decodeFile($fileInfo);
78: $this->_uploadType = self::SINGLE_STYLE;
79: }
80:
81: /**
82: * Decode uploaded file base64 encoded content
83: *
84: * @param array $fileInfo
85: * @return array
86: */
87: private function _decodeFile($fileInfo)
88: {
89: $tmpFileName = $this->_getTmpFilePath();
90:
91: $file = new Varien_Io_File();
92: $file->open(array('path' => sys_get_temp_dir()));
93: $file->streamOpen($tmpFileName);
94: $file->streamWrite(base64_decode($fileInfo['base64_content']));
95: $file->streamClose();
96:
97: return array(
98: 'name' => $fileInfo['name'],
99: 'type' => isset($fileInfo['type'])? $fileInfo['type'] : self::DEFAULT_FILE_TYPE,
100: 'tmp_name' => $tmpFileName,
101: 'error' => 0,
102: 'size' => filesize($tmpFileName)
103: );
104: }
105:
106: /**
107: * Generate temporary file name
108: *
109: * @return string
110: */
111: private function _getTmpFilePath()
112: {
113: return tempnam(sys_get_temp_dir(), $this->_filePrefix);
114:
115: }
116:
117: /**
118: * Moves a file
119: *
120: * @param string $sourceFile
121: * @param string $destinationFile
122: * @return bool
123: */
124: protected function _moveFile($sourceFile, $destinationFile)
125: {
126: return rename($sourceFile, $destinationFile);
127: }
128:
129: }
130: