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_Connect
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: * Extension packages files collection
29: *
30: * @category Mage
31: * @package Mage_Connect
32: * @author Magento Core Team <core@magentocommerce.com>
33: */
34: class Mage_Connect_Model_Extension_Collection extends Varien_Data_Collection_Filesystem
35: {
36: /**
37: * Files and folders regexsp
38: *
39: * @var string
40: */
41: protected $_allowedDirsMask = '/^[a-z0-9\.\-]+$/i';
42: protected $_allowedFilesMask = '/^[a-z0-9\.\-\_]+\.(xml|ser)$/i';
43: protected $_disallowedFilesMask = '/^package\.xml$/i';
44:
45: /**
46: * Base dir where packages are located
47: *
48: * @var string
49: */
50: protected $_baseDir = '';
51:
52: /**
53: * Set base dir
54: */
55: public function __construct()
56: {
57: $this->_baseDir = Mage::getBaseDir('var') . DS . 'connect';
58: $io = new Varien_Io_File();
59: $io->setAllowCreateFolders(true)->createDestinationDir($this->_baseDir);
60: $this->addTargetDir($this->_baseDir);
61: }
62:
63: /**
64: * Row generator
65: *
66: * @param string $filename
67: * @return array
68: */
69: protected function _generateRow($filename)
70: {
71: $row = parent::_generateRow($filename);
72: $row['package'] = preg_replace('/\.(xml|ser)$/', '', str_replace($this->_baseDir . DS, '', $filename));
73: $row['filename_id'] = $row['package'];
74: $folder = explode(DS, $row['package']);
75: array_pop($folder);
76: $row['folder'] = DS;
77: if (!empty($folder)) {
78: $row['folder'] = implode(DS, $folder) . DS;
79: }
80: return $row;
81: }
82:
83: /**
84: * Get all folders as options array
85: *
86: * @return array
87: */
88: public function collectFolders()
89: {
90: $collectFiles = $this->_collectFiles;
91: $collectDirs = $this->_collectDirs;
92: $this->setCollectFiles(false)->setCollectDirs(true);
93:
94: $this->_collectRecursive($this->_baseDir);
95: $result = array(DS => DS);
96: foreach ($this->_collectedDirs as $dir) {
97: $dir = str_replace($this->_baseDir . DS, '', $dir) . DS;
98: $result[$dir] = $dir;
99: }
100:
101: $this->setCollectFiles($collectFiles)->setCollectDirs($collectDirs);
102: return $result;
103: }
104:
105: }
106: