Mage_Downloader - Version 1.6.2.0

Version Notes

1.6.2.0

Download this release

Release Info

Developer Magento Core Team
Extension Mage_Downloader
Version 1.6.2.0
Comparing to
See all releases


Code changes from version 1.6.1.0 to 1.6.2.0

downloader/lib/Mage/Connect/Packager.php CHANGED
@@ -31,38 +31,52 @@
31
  * @package Mage_Connect
32
  * @author Magento Core Team <core@magentocommerce.com>
33
  */
34
-
35
  class Mage_Connect_Packager
36
  {
37
- const CONFIG_FILE_NAME='downloader/connect.cfg';
38
- const CACHE_FILE_NAME='downloader/cache.cfg';
39
-
40
- protected $install_states = array(
41
- 'install' => 'Ready to install',
42
- 'upgrade' => 'Ready to upgrade',
43
- 'already_installed' => 'Already installed',
44
- 'wrong_version' => 'Wrong version',
45
- );
46
-
47
  /**
48
- * Constructor
49
- * @param Mage_connect_Config $config
50
  */
51
- public function __construct()
52
- {
 
 
 
53
 
54
- }
 
 
 
 
 
 
 
55
 
56
  /**
 
57
  *
 
 
 
 
 
 
 
 
 
 
 
58
  * @var Mage_Archive
59
  */
60
  protected $_archiver = null;
61
- protected $_http = null;
62
-
63
 
 
 
 
 
 
64
 
65
  /**
 
66
  *
67
  * @return Mage_Archive
68
  */
@@ -74,6 +88,10 @@ class Mage_Connect_Packager
74
  return $this->_archiver;
75
  }
76
 
 
 
 
 
77
  public function getDownloader()
78
  {
79
  if(is_null($this->_http)) {
@@ -82,7 +100,12 @@ class Mage_Connect_Packager
82
  return $this->_http;
83
  }
84
 
85
-
 
 
 
 
 
86
  public function getRemoteConf($ftpString)
87
  {
88
  $ftpObj = new Mage_Connect_Ftp();
@@ -90,7 +113,6 @@ class Mage_Connect_Packager
90
  $cfgFile = self::CONFIG_FILE_NAME;
91
  $cacheFile = self::CACHE_FILE_NAME;
92
 
93
-
94
  $wd = $ftpObj->getcwd();
95
 
96
  $remoteConfigExists = $ftpObj->fileExists($cfgFile);
@@ -121,7 +143,12 @@ class Mage_Connect_Packager
121
  return array($remoteCache, $remoteCfg, $ftpObj);
122
  }
123
 
124
-
 
 
 
 
 
125
  public function getRemoteCache($ftpString)
126
  {
127
 
@@ -141,7 +168,12 @@ class Mage_Connect_Packager
141
  return array($remoteCfg, $ftpObj);
142
  }
143
 
144
-
 
 
 
 
 
145
  public function getRemoteConfig($ftpString)
146
  {
147
  $ftpObj = new Mage_Connect_Ftp();
@@ -163,6 +195,13 @@ class Mage_Connect_Packager
163
  return array($remoteCfg, $ftpObj);
164
  }
165
 
 
 
 
 
 
 
 
166
  public function writeToRemoteCache($cache, $ftpObj)
167
  {
168
  $wd = $ftpObj->getcwd();
@@ -171,6 +210,13 @@ class Mage_Connect_Packager
171
  $ftpObj->chdir($wd);
172
  }
173
 
 
 
 
 
 
 
 
174
  public function writeToRemoteConfig($cache, $ftpObj)
175
  {
176
  $wd = $ftpObj->getcwd();
@@ -181,6 +227,7 @@ class Mage_Connect_Packager
181
 
182
  /**
183
  * Remove empty directories recursively up
 
184
  * @param string $dir
185
  * @param Mage_Connect_Ftp $ftp
186
  */
@@ -200,12 +247,13 @@ class Mage_Connect_Packager
200
  }
201
 
202
  /**
 
203
  *
204
- * @param $chanName
205
- * @param $package
206
  * @param Mage_Connect_Singleconfig $cacheObj
207
  * @param Mage_Connect_Config $configObj
208
- * @return unknown_type
209
  */
210
  public function processUninstallPackage($chanName, $package, $cacheObj, $configObj)
211
  {
@@ -229,12 +277,13 @@ class Mage_Connect_Packager
229
  }
230
 
231
  /**
 
232
  *
233
  * @param $chanName
234
  * @param $package
235
  * @param Mage_Connect_Singleconfig $cacheObj
236
  * @param Mage_Connect_Ftp $ftp
237
- * @return unknown_type
238
  */
239
  public function processUninstallPackageFtp($chanName, $package, $cacheObj, $ftp)
240
  {
@@ -242,7 +291,7 @@ class Mage_Connect_Packager
242
  $package = $cacheObj->getPackageObject($chanName, $package);
243
  $contents = $package->getContents();
244
  foreach($contents as $file) {
245
- $res = $ftp->delete($file);
246
  $this->removeEmptyDirectory(dirname($file), $ftp);
247
  }
248
  $remoteXml = Mage_Connect_Package::PACKAGE_XML_DIR . DS . $package->getReleaseFilename() . '.xml';
@@ -264,8 +313,8 @@ class Mage_Connect_Packager
264
  }
265
  return true;
266
  }
 
267
  /**
268
- *
269
  * Return correct global dir mode in octal representation
270
  *
271
  * @param Maged_Model_Config $config
@@ -306,6 +355,15 @@ class Mage_Connect_Packager
306
  return str_replace("\\", "/", $str);
307
  }
308
 
 
 
 
 
 
 
 
 
 
309
  public function processInstallPackageFtp($package, $file, $configObj, $ftp)
310
  {
311
  $ftpDir = $ftp->getcwd();
@@ -317,8 +375,6 @@ class Mage_Connect_Packager
317
  $modeFile = $this->_getFileMode($configObj);
318
  $modeDir = $this->_getDirMode($configObj);
319
  foreach($contents as $file) {
320
- $fileName = basename($file);
321
- $filePath = $this->convertFtpPath(dirname($file));
322
  $source = $tar.DS.$file;
323
  if (file_exists($source) && is_file($source)) {
324
  $args = array(ltrim($file,"/"), $source);
@@ -342,6 +398,7 @@ class Mage_Connect_Packager
342
 
343
  /**
344
  * Package installation to FS
 
345
  * @param Mage_Connect_Package $package
346
  * @param string $file
347
  * @return void
@@ -356,11 +413,11 @@ class Mage_Connect_Packager
356
  $tar = $arc->unpack($file, $target);
357
  $modeFile = $this->_getFileMode($configObj);
358
  $modeDir = $this->_getDirMode($configObj);
 
359
  foreach($contents as $file) {
360
  $fileName = basename($file);
361
  $filePath = dirname($file);
362
  $source = $tar.DS.$file;
363
- $targetPath = rtrim($configObj->magento_root, "\\/");
364
  @mkdir($targetPath. DS . $filePath, $modeDir, true);
365
  $dest = $targetPath . DS . $filePath . DS . $fileName;
366
  if (is_file($source)) {
@@ -386,13 +443,13 @@ class Mage_Connect_Packager
386
  Mage_System_Dirs::rm(array("-r",$target));
387
  }
388
 
389
-
390
  /**
391
  * Get local modified files
392
- * @param $chanName
393
- * @param $package
394
- * @param $cacheObj
395
- * @param $configObj
 
396
  * @return array
397
  */
398
  public function getLocalModifiedFiles($chanName, $package, $cacheObj, $configObj)
@@ -411,9 +468,9 @@ class Mage_Connect_Packager
411
  /**
412
  * Get remote modified files
413
  *
414
- * @param $chanName
415
- * @param $package
416
- * @param $cacheObj
417
  * @param Mage_Connect_Ftp $ftp
418
  * @return array
419
  */
@@ -436,9 +493,7 @@ class Mage_Connect_Packager
436
  return $listModified;
437
  }
438
 
439
-
440
  /**
441
- *
442
  * Get upgrades list
443
  *
444
  * @param string/array $channels
@@ -490,7 +545,7 @@ class Mage_Connect_Packager
490
  $remoteVersion = $localVersion = trim($localData[Mage_Connect_Singleconfig::K_VER]);
491
  foreach($package as $version => $s) {
492
 
493
- if( $cacheObject->compareStabilities($s, $state) < 0 ) {
494
  continue;
495
  }
496
 
@@ -520,6 +575,7 @@ class Mage_Connect_Packager
520
 
521
  /**
522
  * Get uninstall list
 
523
  * @param string $chanName
524
  * @param string $package
525
  * @param Mage_Connect_Singleconfig $cache
@@ -533,7 +589,6 @@ class Mage_Connect_Packager
533
  static $hash = array();
534
 
535
  $chanName = $cache->chanName($chanName);
536
- $keyOuter = $chanName . "/" . $package;
537
  $level++;
538
 
539
  try {
@@ -549,10 +604,8 @@ class Mage_Connect_Packager
549
  $dependencies = $cache->getPackageDependencies($chanName, $package);
550
  $data = $cache->getPackage($chanName, $package);
551
  $version = $data['version'];
552
- $keyOuter = $chanName . "/" . $package;
553
 
554
- //print "Processing outer: {$keyOuter} \n";
555
- $hash[$keyOuter] = array (
556
  'name' => $package,
557
  'channel' => $chanName,
558
  'version' => $version,
@@ -560,10 +613,14 @@ class Mage_Connect_Packager
560
  );
561
 
562
  if($withDepsRecursive) {
563
- $flds = array('name','channel','min','max');
564
- $fldsCount = count($flds);
565
  foreach($dependencies as $row) {
566
- foreach($flds as $key) {
 
 
 
 
 
567
  $varName = "p".ucfirst($key);
568
  $$varName = $row[$key];
569
  }
@@ -577,13 +634,6 @@ class Mage_Connect_Packager
577
  }
578
 
579
  } catch (Exception $e) {
580
- // $this->_failed[] = array(
581
- // 'name'=>$package,
582
- // 'channel'=>$chanName,
583
- // 'max'=>$versionMax,
584
- // 'min'=>$versionMin,
585
- // 'reason'=>$e->getMessage()
586
- // );
587
  }
588
 
589
  $level--;
@@ -596,6 +646,7 @@ class Mage_Connect_Packager
596
 
597
  /**
598
  * Add data to package dependencies hash array
 
599
  * @param array $hash Package dependencies hash array
600
  * @param string $name Package name
601
  * @param string $channel Package chaannel
@@ -603,19 +654,19 @@ class Mage_Connect_Packager
603
  * @param string $stability Package stability
604
  * @param string $versionMin Required package minimum version
605
  * @param string $versionMax Required package maximum version
606
- * @param string $install_state Package install state
607
  * @param string $message Package install message
608
  * @param array $dependencies Package dependencies
 
609
  */
610
  private function addHashData(&$hash, $name, $channel, $downloaded_version = '', $stability = '', $versionMin = '',
611
- $versionMax = '', $install_state = '', $message = '', $dependencies = '')
612
  {
613
  /**
614
- * @todo When we are building dependencies tree we should base this calculations not on full key as on a
615
  * unique value but check it by parts. First part which should be checked is EXTENSION_NAME also this
616
  * part should be unique globally not per channel.
617
  */
618
- //$key = $chanName . "/" . $package;
619
  $key = $name;
620
  $hash[$key] = array (
621
  'name' => $name,
@@ -624,19 +675,17 @@ class Mage_Connect_Packager
624
  'stability' => $stability,
625
  'min' => $versionMin,
626
  'max' => $versionMax,
627
- 'install_state' => $install_state,
628
- 'message' => (isset($this->install_states[$install_state]) ?
629
- $this->install_states[$install_state] : '').$message,
630
  'packages' => $dependencies,
631
  );
632
-
633
  return true;
634
  }
635
 
636
  /**
637
  * Get dependencies list/install order info
638
  *
639
- *
640
  * @param string $chanName
641
  * @param string $package
642
  * @param Mage_Connect_Singleconfig $cache
@@ -651,16 +700,13 @@ class Mage_Connect_Packager
651
  public function getDependenciesList( $chanName, $package, $cache, $config, $versionMax = false, $versionMin = false,
652
  $withDepsRecursive = true, $forceRemote = false, $rest = null)
653
  {
654
-
655
  static $level = 0;
656
  static $_depsHash = array();
657
  static $_deps = array();
658
  static $_failed = array();
659
- $install_state = 'install';
660
  $version = '';
661
- $stability = '';
662
  $message = '';
663
- $dependencies = array();
664
 
665
  $level++;
666
 
@@ -709,31 +755,31 @@ class Mage_Connect_Packager
709
  $stability = $packageInfo->getStability();
710
 
711
  /**
712
- * @todo check is package already installed
713
  */
714
  if ($installedPackage = $cache->isPackageInstalled($package)) {
715
  if ($chanName == $installedPackage['channel']){
716
  /**
717
- * @todo check versions!!!
718
  */
719
  if (version_compare($version, $installedPackage['version'], '>')) {
720
- $install_state = 'upgrade';
721
  } elseif (version_compare($version, $installedPackage['version'], '<')) {
722
  $version = $installedPackage['version'];
723
  $stability = $installedPackage['stability'];
724
- $install_state = 'wrong_version';
725
  } else {
726
- $install_state = 'already_installed';
727
  }
728
  } else {
729
- $install_state = 'incompatible';
730
  }
731
  }
732
 
733
  $deps_tmp = $packageInfo->getDependencyPackages();
734
 
735
  /**
736
- * @todo Select distinct packages grouped by name
737
  */
738
  $dependencies = array();
739
  foreach ($deps_tmp as $row) {
@@ -751,20 +797,25 @@ class Mage_Connect_Packager
751
  }
752
 
753
  /**
754
- * @todo When we are building dependencies tree we should base this calculations not on full key as on a
755
  * unique value but check it by parts. First part which should be checked is EXTENSION_NAME also this part
756
  * should be unique globally not per channel.
757
  */
758
- // $keyOuter = $chanName . "/" . $package;
759
- $keyOuter = $package;
760
-
761
- $this->addHashData($_depsHash, $package, $chanName, $version, $stability, $versionMin,
762
- $versionMax, $install_state, $message, $dependencies);
763
 
764
- if ($withDepsRecursive && 'incompatible' != $install_state) {
765
  $flds = array('name','channel','min','max');
766
- $fldsCount = count($flds);
767
  foreach($dependencies as $row) {
 
 
 
 
 
 
 
768
  foreach($flds as $key) {
769
  $varName = "p".ucfirst($key);
770
  $$varName = $row[$key];
@@ -775,7 +826,6 @@ class Mage_Connect_Packager
775
  * on a unique value but check it by parts. First part which should be checked is EXTENSION_NAME
776
  * also this part should be unique globally not per channel.
777
  */
778
- //$keyInner = $pChannel . "/" . $pName;
779
  $keyInner = $pName;
780
  if(!isset($_depsHash[$keyInner])) {
781
  $_deps[] = $row;
@@ -786,12 +836,10 @@ class Mage_Connect_Packager
786
  $hasMin = $_depsHash[$keyInner]['min'];
787
  $hasMax = $_depsHash[$keyInner]['max'];
788
  if($pMin === $hasMin && $pMax === $hasMax) {
789
- //var_dump("Equal requirements, skipping");
790
  continue;
791
  }
792
 
793
  if($cache->versionInRange($downloaded, $pMin, $pMax)) {
794
- //var_dump("Downloaded package matches new range too");
795
  continue;
796
  }
797
 
@@ -822,7 +870,6 @@ class Mage_Connect_Packager
822
  $newMinIsGreater = version_compare($pMin, $hasMin, ">");
823
  $forceMax = $newMaxIsLess ? $pMax : $hasMax;
824
  $forceMin = $newMinIsGreater ? $pMin : $hasMin;
825
- //var_dump("Trying to process {$pName} : max {$forceMax} - min {$forceMin}");
826
  $this->$method($pChannel, $pName, $cache, $config,
827
  $forceMax, $forceMin, $withDepsRecursive, $forceRemote, $rest);
828
  }
@@ -839,7 +886,6 @@ class Mage_Connect_Packager
839
  );
840
  }
841
 
842
-
843
  $level--;
844
  if($level == 0) {
845
  $out = $this->processDepsHash($_depsHash, false);
@@ -850,13 +896,11 @@ class Mage_Connect_Packager
850
  $_failed = array();
851
  return array('deps' => $deps, 'result' => $out, 'failed'=> $failed);
852
  }
853
-
854
  }
855
 
856
 
857
  /**
858
- * Process dependencies hash
859
- * Makes topological sorting and gives operation order list
860
  *
861
  * @param array $depsHash
862
  * @param bool $sortReverse
@@ -896,8 +940,7 @@ class Mage_Connect_Packager
896
  $result = $graph->topologicalSort();
897
  $sortReverse ? krsort($result) : ksort($result);
898
  $out = array();
899
- $total = 0;
900
- foreach($result as $order=>$nodes) {
901
  foreach($nodes as $n) {
902
  $out[] = $n->getData();
903
  }
@@ -905,5 +948,4 @@ class Mage_Connect_Packager
905
  unset($graph, $nodes);
906
  return $out;
907
  }
908
-
909
  }
31
  * @package Mage_Connect
32
  * @author Magento Core Team <core@magentocommerce.com>
33
  */
 
34
  class Mage_Connect_Packager
35
  {
 
 
 
 
 
 
 
 
 
 
36
  /**
37
+ * Default Config File name
 
38
  */
39
+ const CONFIG_FILE_NAME = 'downloader/connect.cfg';
40
+ /**
41
+ * Default Cache Config File name
42
+ */
43
+ const CACHE_FILE_NAME = 'downloader/cache.cfg';
44
 
45
+ /**
46
+ * Install states of package
47
+ */
48
+ const INSTALL_STATE_INSTALL = 'install';
49
+ const INSTALL_STATE_UPGRADE = 'upgrade';
50
+ const INSTALL_STATE_WRONG_VERSION = 'wrong_version';
51
+ const INSTALL_STATE_ALREADY_INSTALLED = 'already_installed';
52
+ const INSTALL_STATE_INCOMPATIBLE = 'incompatible';
53
 
54
  /**
55
+ * Install states messages
56
  *
57
+ * @var array
58
+ */
59
+ protected $installStates = array(
60
+ self::INSTALL_STATE_INSTALL => 'Ready to install',
61
+ self::INSTALL_STATE_UPGRADE => 'Ready to upgrade',
62
+ self::INSTALL_STATE_ALREADY_INSTALLED => 'Already installed',
63
+ self::INSTALL_STATE_WRONG_VERSION => 'Wrong version',
64
+ );
65
+
66
+ /**
67
+ * Archiver object
68
  * @var Mage_Archive
69
  */
70
  protected $_archiver = null;
 
 
71
 
72
+ /**
73
+ * HTTP Client (Curl/Socket etc)
74
+ * @var Mage_HTTP_IClient
75
+ */
76
+ protected $_http = null;
77
 
78
  /**
79
+ * Get Archiver object
80
  *
81
  * @return Mage_Archive
82
  */
88
  return $this->_archiver;
89
  }
90
 
91
+ /**
92
+ * Returns HTTP Client
93
+ * @return Mage_HTTP_IClient|null
94
+ */
95
  public function getDownloader()
96
  {
97
  if(is_null($this->_http)) {
100
  return $this->_http;
101
  }
102
 
103
+ /**
104
+ * Get config data and cache config data remotely
105
+ *
106
+ * @param string $ftpString
107
+ * @return array
108
+ */
109
  public function getRemoteConf($ftpString)
110
  {
111
  $ftpObj = new Mage_Connect_Ftp();
113
  $cfgFile = self::CONFIG_FILE_NAME;
114
  $cacheFile = self::CACHE_FILE_NAME;
115
 
 
116
  $wd = $ftpObj->getcwd();
117
 
118
  $remoteConfigExists = $ftpObj->fileExists($cfgFile);
143
  return array($remoteCache, $remoteCfg, $ftpObj);
144
  }
145
 
146
+ /**
147
+ * Get Cache config data remotely
148
+ *
149
+ * @param string $ftpString
150
+ * @return array
151
+ */
152
  public function getRemoteCache($ftpString)
153
  {
154
 
168
  return array($remoteCfg, $ftpObj);
169
  }
170
 
171
+ /**
172
+ * Get config data remotely
173
+ *
174
+ * @param string $ftpString
175
+ * @return array
176
+ */
177
  public function getRemoteConfig($ftpString)
178
  {
179
  $ftpObj = new Mage_Connect_Ftp();
195
  return array($remoteCfg, $ftpObj);
196
  }
197
 
198
+ /**
199
+ * Write Cache config remotely
200
+ *
201
+ * @param Mage_Connect_Singleconfig $cache
202
+ * @param Mage_Connect_Ftp $ftpObj
203
+ * @return void
204
+ */
205
  public function writeToRemoteCache($cache, $ftpObj)
206
  {
207
  $wd = $ftpObj->getcwd();
210
  $ftpObj->chdir($wd);
211
  }
212
 
213
+ /**
214
+ * Write config remotely
215
+ *
216
+ * @param Mage_Connect_Config $cache
217
+ * @param Mage_Connect_Ftp $ftpObj
218
+ * @return void
219
+ */
220
  public function writeToRemoteConfig($cache, $ftpObj)
221
  {
222
  $wd = $ftpObj->getcwd();
227
 
228
  /**
229
  * Remove empty directories recursively up
230
+ *
231
  * @param string $dir
232
  * @param Mage_Connect_Ftp $ftp
233
  */
247
  }
248
 
249
  /**
250
+ * Uninstall Package
251
  *
252
+ * @param string $chanName
253
+ * @param string $package
254
  * @param Mage_Connect_Singleconfig $cacheObj
255
  * @param Mage_Connect_Config $configObj
256
+ * @return void
257
  */
258
  public function processUninstallPackage($chanName, $package, $cacheObj, $configObj)
259
  {
277
  }
278
 
279
  /**
280
+ * Uninstall Package over FTP
281
  *
282
  * @param $chanName
283
  * @param $package
284
  * @param Mage_Connect_Singleconfig $cacheObj
285
  * @param Mage_Connect_Ftp $ftp
286
+ * @return void
287
  */
288
  public function processUninstallPackageFtp($chanName, $package, $cacheObj, $ftp)
289
  {
291
  $package = $cacheObj->getPackageObject($chanName, $package);
292
  $contents = $package->getContents();
293
  foreach($contents as $file) {
294
+ $ftp->delete($file);
295
  $this->removeEmptyDirectory(dirname($file), $ftp);
296
  }
297
  $remoteXml = Mage_Connect_Package::PACKAGE_XML_DIR . DS . $package->getReleaseFilename() . '.xml';
313
  }
314
  return true;
315
  }
316
+
317
  /**
 
318
  * Return correct global dir mode in octal representation
319
  *
320
  * @param Maged_Model_Config $config
355
  return str_replace("\\", "/", $str);
356
  }
357
 
358
+ /**
359
+ * Install package over FTP
360
+ *
361
+ * @param Mage_Connect_Package $package
362
+ * @param string $file
363
+ * @param Maged_Model_Config $configObj
364
+ * @param Mage_Connect_Ftp $ftp
365
+ * @return void
366
+ */
367
  public function processInstallPackageFtp($package, $file, $configObj, $ftp)
368
  {
369
  $ftpDir = $ftp->getcwd();
375
  $modeFile = $this->_getFileMode($configObj);
376
  $modeDir = $this->_getDirMode($configObj);
377
  foreach($contents as $file) {
 
 
378
  $source = $tar.DS.$file;
379
  if (file_exists($source) && is_file($source)) {
380
  $args = array(ltrim($file,"/"), $source);
398
 
399
  /**
400
  * Package installation to FS
401
+ *
402
  * @param Mage_Connect_Package $package
403
  * @param string $file
404
  * @return void
413
  $tar = $arc->unpack($file, $target);
414
  $modeFile = $this->_getFileMode($configObj);
415
  $modeDir = $this->_getDirMode($configObj);
416
+ $targetPath = rtrim($configObj->magento_root, "\\/");
417
  foreach($contents as $file) {
418
  $fileName = basename($file);
419
  $filePath = dirname($file);
420
  $source = $tar.DS.$file;
 
421
  @mkdir($targetPath. DS . $filePath, $modeDir, true);
422
  $dest = $targetPath . DS . $filePath . DS . $fileName;
423
  if (is_file($source)) {
443
  Mage_System_Dirs::rm(array("-r",$target));
444
  }
445
 
 
446
  /**
447
  * Get local modified files
448
+ *
449
+ * @param string $chanName
450
+ * @param string $package
451
+ * @param Mage_Connect_Singleconfig $cacheObj
452
+ * @param Mage_Connect_Config $configObj
453
  * @return array
454
  */
455
  public function getLocalModifiedFiles($chanName, $package, $cacheObj, $configObj)
468
  /**
469
  * Get remote modified files
470
  *
471
+ * @param string $chanName
472
+ * @param string $package
473
+ * @param Mage_Connect_Singleconfig $cacheObj
474
  * @param Mage_Connect_Ftp $ftp
475
  * @return array
476
  */
493
  return $listModified;
494
  }
495
 
 
496
  /**
 
497
  * Get upgrades list
498
  *
499
  * @param string/array $channels
545
  $remoteVersion = $localVersion = trim($localData[Mage_Connect_Singleconfig::K_VER]);
546
  foreach($package as $version => $s) {
547
 
548
+ if($cacheObject->compareStabilities($s, $state) < 0) {
549
  continue;
550
  }
551
 
575
 
576
  /**
577
  * Get uninstall list
578
+ *
579
  * @param string $chanName
580
  * @param string $package
581
  * @param Mage_Connect_Singleconfig $cache
589
  static $hash = array();
590
 
591
  $chanName = $cache->chanName($chanName);
 
592
  $level++;
593
 
594
  try {
604
  $dependencies = $cache->getPackageDependencies($chanName, $package);
605
  $data = $cache->getPackage($chanName, $package);
606
  $version = $data['version'];
 
607
 
608
+ $hash[$chanName . "/" . $package] = array (
 
609
  'name' => $package,
610
  'channel' => $chanName,
611
  'version' => $version,
613
  );
614
 
615
  if($withDepsRecursive) {
616
+ $fields = array('name','channel','min','max');
 
617
  foreach($dependencies as $row) {
618
+ /**
619
+ * Converts an array to variables
620
+ * @var $pChannel string Channel Name
621
+ * @var $pName string Package Name
622
+ */
623
+ foreach($fields as $key) {
624
  $varName = "p".ucfirst($key);
625
  $$varName = $row[$key];
626
  }
634
  }
635
 
636
  } catch (Exception $e) {
 
 
 
 
 
 
 
637
  }
638
 
639
  $level--;
646
 
647
  /**
648
  * Add data to package dependencies hash array
649
+ *
650
  * @param array $hash Package dependencies hash array
651
  * @param string $name Package name
652
  * @param string $channel Package chaannel
654
  * @param string $stability Package stability
655
  * @param string $versionMin Required package minimum version
656
  * @param string $versionMax Required package maximum version
657
+ * @param string $installState Package install state
658
  * @param string $message Package install message
659
  * @param array $dependencies Package dependencies
660
+ * @return bool
661
  */
662
  private function addHashData(&$hash, $name, $channel, $downloaded_version = '', $stability = '', $versionMin = '',
663
+ $versionMax = '', $installState = '', $message = '', $dependencies = '')
664
  {
665
  /**
666
+ * When we are building dependencies tree we should base this calculations not on full key as on a
667
  * unique value but check it by parts. First part which should be checked is EXTENSION_NAME also this
668
  * part should be unique globally not per channel.
669
  */
 
670
  $key = $name;
671
  $hash[$key] = array (
672
  'name' => $name,
675
  'stability' => $stability,
676
  'min' => $versionMin,
677
  'max' => $versionMax,
678
+ 'install_state' => $installState,
679
+ 'message' => (isset($this->installStates[$installState]) ?
680
+ $this->installStates[$installState] : '').$message,
681
  'packages' => $dependencies,
682
  );
 
683
  return true;
684
  }
685
 
686
  /**
687
  * Get dependencies list/install order info
688
  *
 
689
  * @param string $chanName
690
  * @param string $package
691
  * @param Mage_Connect_Singleconfig $cache
700
  public function getDependenciesList( $chanName, $package, $cache, $config, $versionMax = false, $versionMin = false,
701
  $withDepsRecursive = true, $forceRemote = false, $rest = null)
702
  {
 
703
  static $level = 0;
704
  static $_depsHash = array();
705
  static $_deps = array();
706
  static $_failed = array();
707
+ $install_state = self::INSTALL_STATE_INSTALL;
708
  $version = '';
 
709
  $message = '';
 
710
 
711
  $level++;
712
 
755
  $stability = $packageInfo->getStability();
756
 
757
  /**
758
+ * check is package already installed
759
  */
760
  if ($installedPackage = $cache->isPackageInstalled($package)) {
761
  if ($chanName == $installedPackage['channel']){
762
  /**
763
+ * check versions
764
  */
765
  if (version_compare($version, $installedPackage['version'], '>')) {
766
+ $install_state = self::INSTALL_STATE_UPGRADE;
767
  } elseif (version_compare($version, $installedPackage['version'], '<')) {
768
  $version = $installedPackage['version'];
769
  $stability = $installedPackage['stability'];
770
+ $install_state = self::INSTALL_STATE_WRONG_VERSION;
771
  } else {
772
+ $install_state = self::INSTALL_STATE_ALREADY_INSTALLED;
773
  }
774
  } else {
775
+ $install_state = self::INSTALL_STATE_INCOMPATIBLE;
776
  }
777
  }
778
 
779
  $deps_tmp = $packageInfo->getDependencyPackages();
780
 
781
  /**
782
+ * Select distinct packages grouped by name
783
  */
784
  $dependencies = array();
785
  foreach ($deps_tmp as $row) {
797
  }
798
 
799
  /**
800
+ * When we are building dependencies tree we should base this calculations not on full key as on a
801
  * unique value but check it by parts. First part which should be checked is EXTENSION_NAME also this part
802
  * should be unique globally not per channel.
803
  */
804
+ if (self::INSTALL_STATE_INCOMPATIBLE != $install_state) {
805
+ $this->addHashData($_depsHash, $package, $chanName, $version, $stability, $versionMin,
806
+ $versionMax, $install_state, $message, $dependencies);
807
+ }
 
808
 
809
+ if ($withDepsRecursive && self::INSTALL_STATE_INCOMPATIBLE != $install_state) {
810
  $flds = array('name','channel','min','max');
 
811
  foreach($dependencies as $row) {
812
+ /**
813
+ * Converts an array to variables
814
+ * @var $pChannel string Channel Name
815
+ * @var $pName string Package Name
816
+ * @var $pMax string Maximum version number
817
+ * @var $pMin string Minimum version number
818
+ */
819
  foreach($flds as $key) {
820
  $varName = "p".ucfirst($key);
821
  $$varName = $row[$key];
826
  * on a unique value but check it by parts. First part which should be checked is EXTENSION_NAME
827
  * also this part should be unique globally not per channel.
828
  */
 
829
  $keyInner = $pName;
830
  if(!isset($_depsHash[$keyInner])) {
831
  $_deps[] = $row;
836
  $hasMin = $_depsHash[$keyInner]['min'];
837
  $hasMax = $_depsHash[$keyInner]['max'];
838
  if($pMin === $hasMin && $pMax === $hasMax) {
 
839
  continue;
840
  }
841
 
842
  if($cache->versionInRange($downloaded, $pMin, $pMax)) {
 
843
  continue;
844
  }
845
 
870
  $newMinIsGreater = version_compare($pMin, $hasMin, ">");
871
  $forceMax = $newMaxIsLess ? $pMax : $hasMax;
872
  $forceMin = $newMinIsGreater ? $pMin : $hasMin;
 
873
  $this->$method($pChannel, $pName, $cache, $config,
874
  $forceMax, $forceMin, $withDepsRecursive, $forceRemote, $rest);
875
  }
886
  );
887
  }
888
 
 
889
  $level--;
890
  if($level == 0) {
891
  $out = $this->processDepsHash($_depsHash, false);
896
  $_failed = array();
897
  return array('deps' => $deps, 'result' => $out, 'failed'=> $failed);
898
  }
 
899
  }
900
 
901
 
902
  /**
903
+ * Process dependencies hash. Makes topological sorting and gives operation order list
 
904
  *
905
  * @param array $depsHash
906
  * @param bool $sortReverse
940
  $result = $graph->topologicalSort();
941
  $sortReverse ? krsort($result) : ksort($result);
942
  $out = array();
943
+ foreach($result as $nodes) {
 
944
  foreach($nodes as $n) {
945
  $out[] = $n->getData();
946
  }
948
  unset($graph, $nodes);
949
  return $out;
950
  }
 
951
  }
package.xml CHANGED
@@ -1,18 +1,18 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Mage_Downloader</name>
4
- <version>1.6.1.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Magento Downloader</summary>
10
  <description>Magento Downloader</description>
11
- <notes>1.6.1.0</notes>
12
  <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
13
- <date>2011-10-19</date>
14
- <time>11:50:15</time>
15
- <contents><target name="mage"><dir name="downloader"><dir name="js"><file name="prototype.js" hash="3766aeff5778b54f74f93670322ca0df"/></dir><dir name="Maged"><dir name="Connect"><file name="Frontend.php" hash="e469328440d5d865db40ed6dec2eb0dd"/></dir><file name="Connect.php" hash="3878355516c34d9544a02d44a4c1e2b8"/><file name="Controller.php" hash="667cee056eef10004144cbadab05a299"/><file name="Exception.php" hash="31befe07df0a61598f063f543991a04b"/><dir name="Model"><dir name="Config"><file name="Abstract.php" hash="b87bd9947efce3f373ff65e0c997334e"/><file name="Community.php" hash="0e39f2375ec50ef5c8d7994e67eaf49e"/><file name="Interface.php" hash="fe6daef73f9f63adcce14dd322a41050"/></dir><file name="Config.php" hash="0fdf21421b2874620f4708b835ad34d5"/><dir name="Connect"><file name="Request.php" hash="9b89d6528986fcd5b97d59a8ceb48eac"/></dir><file name="Connect.php" hash="c63a751c9c720a3c8b670134b816c2aa"/><file name="Dowloader.php" hash="01885097ba694f6e0119f3eaecfa463f"/><file name="Session.php" hash="2876ecde6b2c2bba65e11c3dcf2d913f"/></dir><file name="Model.php" hash="9d43f384a202246af906c65e156d4aaa"/><file name="View.php" hash="38f23f08650249dcb75ff6a0e203ad28"/></dir><dir name="skin"><file name="boxes.css" hash="5a6a94b06fbd4335b4d0f78b94cb9712"/><file name="ie7boxes.css" hash="c9e684ca787f6521190922e7e2e6ed9e"/><file name="ieboxes.css" hash="ff95c4f8ade70c9178f1315eb61eaabe"/><dir name="images"><file name="Magento_Connect.jpg" hash="20e1378c09506fdc5723abc0115d5f57"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="header_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="logo.gif" hash="5eb089ecea67d82311d7c91898460104"/><file name="nav_bg.gif" hash="1cb1366f03a9efad6b17e4483aef20cf"/><file name="nav_separator.gif" hash="492011a7de2de84a9c7837bfd879ab95"/></dir><dir name="install"><file name="boxes.css" hash="b6d074b3fce501813ed1d8dd323bf422"/><file name="clears.css" hash="bc94c9e4ee77d82530ca33b468b502e4"/><file name="ie7minus.css" hash="e0bad17242a3b6c20516bb292bf16493"/><file name="iestyles.css" hash="eb20094050695e0e02f0318b37c24e08"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="logo.gif" hash="073a947a39b967af678455a5c7f66e90"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir><file name="reset.css" hash="f473723e7a0aff5d6feedbbab6cb3392"/></dir></dir><dir name="template"><dir name="connect"><file name="iframe.phtml" hash="2aa7c28d092c43e14b8b1fe413e6a126"/><file name="packages.phtml" hash="72c6024a9891c01b603f2766f52ff914"/><file name="packages_prepare.phtml" hash="bd34d2a794e5fcc84d4ea22b5754d250"/></dir><file name="exception.phtml" hash="ce8145052f0a730088fc849c04c58c64"/><file name="footer.phtml" hash="454299883c093cc98b4550c99bba03b9"/><file name="header.phtml" hash="73ab5e15a8a58d624fb5b8e48da679d3"/><file name="index.phtml" hash="1c7d5cbca5c16632db3f891024086947"/><dir name="install"><file name="download.phtml" hash="b7f283992b89cae9e85cc655e4b2d4e3"/><file name="footer.phtml" hash="6a70fd31200cb9bfddf65d7f8f67ac5e"/><file name="header.phtml" hash="f07d63df229468c28043869f0b71e194"/><file name="writable.phtml" hash="2815049a02b3f1110b9f22e22047b941"/></dir><file name="login.phtml" hash="ad91f8daa2d8a8974782350a2d2e2578"/><file name="messages.phtml" hash="8753c0c5599fa55a190c4913651b2c77"/><file name="noroute.phtml" hash="ad5ded291fcbf3899af4f499b77aaf42"/><file name="settings.phtml" hash="5bda5f6e749e288f7e2cb0fc2b7f1b83"/><file name="writable.phtml" hash="5fc31df4f9795e8febe39da1e59d91cd"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="index.php" hash="db1b840cef501ba7830d1035d6a3df7b"/><dir name="lib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="a17be2772775eac2d1e3a36041a9f3c1"/><file name="Bz.php" hash="4e95c019f7c8983ecb225d0847806bed"/><file name="Gz.php" hash="e832e68bd2a3165234b6d6b52b3fcac0"/><file name="Interface.php" hash="1c57bd8e6ee7dbe4cfcaa3dfdceb1d7b"/><file name="Tar.php" hash="12983e34995349ab736eb8c5bbe03ba6"/></dir><file name="Archive.php" hash="7947ccf15f5df8300e7cf1a4681b9569"/><dir name="Autoload"><file name="Simple.php" hash="e062bd1b45f0b08ac456d3e0dc4c06b6"/></dir><dir name="Connect"><dir name="Channel"><file name="Generator.php" hash="4bbda17b29549ae9a50ea09c0db54649"/><file name="Parser.php" hash="3546e3b66eafe78bdd5628dc37f4bca9"/><file name="VO.php" hash="0525a71b043486aca9febcac6ce0ccff"/></dir><dir name="Command"><file name="Channels.php" hash="83e47fe8f407212ecc1797028211d15d"/><file name="Channels_Header.php" hash="8a828b219ec1b57eba88806845f133cb"/><file name="Config.php" hash="22161cf90d8d2abb5409a30dbe28a44c"/><file name="Config_Header.php" hash="0ce12f7207fe610f886aae15df145615"/><file name="Install.php" hash="b40177f31744db26010c8fbe8e10b05a"/><file name="Install_Header.php" hash="1d4da6660edb2e63ea9a223ccfe4610d"/><file name="Package.php" hash="09d265ec9666b7729276a54c88db1263"/><file name="Package_Header.php" hash="102080d8fad7234b60b103a5dbf65754"/><file name="Registry.php" hash="898b91578ee622b4914023edc9e34984"/><file name="Registry_Header.php" hash="fb37813d34f75835e4ecccea704b2ab0"/><file name="Remote.php" hash="3b0f8aa676ddd677e3a57823d8b0c60e"/><file name="Remote_Header.php" hash="9bd703a45c70ccc959f922392decc962"/></dir><file name="Command.php" hash="b3314fecd974fc3d767049cf323cc254"/><file name="Config.php" hash="4d688d01fd05522fa36166656bd5c697"/><file name="Converter.php" hash="435aad5d121240eb7784f3f71a848392"/><dir name="Frontend"><file name="CLI.php" hash="0b71bae7609966ebfcfc04f63a0318a3"/></dir><file name="Frontend.php" hash="811d665cee46fdbea623d651cf4ac44b"/><file name="Ftp.php" hash="4adbc5b56bf2be7ca7d042f78ae61298"/><dir name="Loader"><file name="Ftp.php" hash="1fbff02e85c5e2f7f0e61d8577c248d6"/></dir><file name="Loader.php" hash="ba5151383e4931a7f767a2d1897cb2a7"/><dir name="Package"><file name="Extension.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Hotfix.php" hash="370177a5cf2f3397e0b341466d34de75"/><file name="Maintainer.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Reader.php" hash="7fa1d41c6145f178e50e8a266e361f1e"/><file name="Target.php" hash="09c91f931b37f5e350a7ebdbb6bbf442"/><file name="VO.php" hash="e42f4d13abcaa766ca35f24c6280043b"/><file name="Writer.php" hash="32088dd140dfd14b3bde9c11a32b7d35"/></dir><file name="Package.php" hash="bcc3ed40ad75f37e6be0d90e833a84bb"/><file name="Packager.php" hash="812c9dd97f990744d4a763e4b6c3a7b5"/><dir name="Repository"><file name="Abstract.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><dir name="Channel"><file name="Abstract.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Commercial.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Community.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Core.php" hash="68b329da9893e34099c7d8ad5cb9c940"/></dir><file name="Channel.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Local.php" hash="68b329da9893e34099c7d8ad5cb9c940"/></dir><file name="Repository.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Rest.php" hash="9bf931f43e0840f903ce9089d90779a2"/><file name="Singleconfig.php" hash="bdcb3dcfb2a58b290cce8da370f8ac9c"/><dir name="Structures"><file name="Graph.php" hash="bb484f7ed43d819d9964c3dfa0489641"/><file name="Node.php" hash="5fe101c2a3c371ebca23b1a77a4d8b9a"/></dir><file name="Validator.php" hash="500f1fec82dc873ef02fae0d738b5162"/></dir><dir name="DB"><file name="Exception.php" hash="38385d6b8ba6dfabf53aa275ca5b1086"/><file name="Mysqli.php" hash="7afa22548284f2e6e8796fce50f736ce"/></dir><file name="Exception.php" hash="a5e649c88e376f850b83d35900525a7f"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="8eba20650fc9da09d8585e31ea3bd053"/><file name="Socket.php" hash="a1b2788a4fa596f70430d309ffc8f59f"/></dir><file name="Client.php" hash="189e5288453ce792e1eacbb178e20fd1"/><file name="IClient.php" hash="eb44927eabc6a87fbf37d52643732b2d"/></dir><dir name="System"><file name="Args.php" hash="a3058a52f975e8436a8d2b113943489a"/><file name="Dirs.php" hash="0addfeb8f206cc67539ca0625921e016"/></dir><dir name="Xml"><file name="Generator.php" hash="c0b790125cc714d1ca43cfdc046768ed"/><file name="Parser.php" hash="6f8ac6fb3c6332c257d28e335909e855"/></dir></dir></dir><file name="config.ini" hash="a52ba98e71ab19de387b3af1a04c6102"/><file name=".htaccess" hash="520cc012c84739584526b8a9ff098e23"/><file name="mage.php" hash="6de4d106e8080bd2be838d1674bf6136"/></dir><dir name="."><file name=".htaccess" hash="8c1f49780253bb13b4fa89d604e814b6"/><file name="index.php" hash="20b1633bd332a08e643afa4590ab8564"/><file name="mage" hash="091c45355c62a9189cff45c09328037c"/></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Mage_Downloader</name>
4
+ <version>1.6.2.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Magento Downloader</summary>
10
  <description>Magento Downloader</description>
11
+ <notes>1.6.2.0</notes>
12
  <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
13
+ <date>2012-01-11</date>
14
+ <time>11:50:47</time>
15
+ <contents><target name="mage"><dir name="downloader"><dir name="js"><file name="prototype.js" hash="3766aeff5778b54f74f93670322ca0df"/></dir><dir name="Maged"><dir name="Connect"><file name="Frontend.php" hash="e469328440d5d865db40ed6dec2eb0dd"/></dir><file name="Connect.php" hash="3878355516c34d9544a02d44a4c1e2b8"/><file name="Controller.php" hash="667cee056eef10004144cbadab05a299"/><file name="Exception.php" hash="31befe07df0a61598f063f543991a04b"/><dir name="Model"><dir name="Config"><file name="Abstract.php" hash="b87bd9947efce3f373ff65e0c997334e"/><file name="Community.php" hash="0e39f2375ec50ef5c8d7994e67eaf49e"/><file name="Interface.php" hash="fe6daef73f9f63adcce14dd322a41050"/></dir><file name="Config.php" hash="0fdf21421b2874620f4708b835ad34d5"/><dir name="Connect"><file name="Request.php" hash="9b89d6528986fcd5b97d59a8ceb48eac"/></dir><file name="Connect.php" hash="c63a751c9c720a3c8b670134b816c2aa"/><file name="Dowloader.php" hash="01885097ba694f6e0119f3eaecfa463f"/><file name="Session.php" hash="2876ecde6b2c2bba65e11c3dcf2d913f"/></dir><file name="Model.php" hash="9d43f384a202246af906c65e156d4aaa"/><file name="View.php" hash="38f23f08650249dcb75ff6a0e203ad28"/></dir><dir name="skin"><file name="boxes.css" hash="5a6a94b06fbd4335b4d0f78b94cb9712"/><file name="ie7boxes.css" hash="c9e684ca787f6521190922e7e2e6ed9e"/><file name="ieboxes.css" hash="ff95c4f8ade70c9178f1315eb61eaabe"/><dir name="images"><file name="Magento_Connect.jpg" hash="20e1378c09506fdc5723abc0115d5f57"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="header_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="logo.gif" hash="5eb089ecea67d82311d7c91898460104"/><file name="nav_bg.gif" hash="1cb1366f03a9efad6b17e4483aef20cf"/><file name="nav_separator.gif" hash="492011a7de2de84a9c7837bfd879ab95"/></dir><dir name="install"><file name="boxes.css" hash="b6d074b3fce501813ed1d8dd323bf422"/><file name="clears.css" hash="bc94c9e4ee77d82530ca33b468b502e4"/><file name="ie7minus.css" hash="e0bad17242a3b6c20516bb292bf16493"/><file name="iestyles.css" hash="eb20094050695e0e02f0318b37c24e08"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="logo.gif" hash="073a947a39b967af678455a5c7f66e90"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir><file name="reset.css" hash="f473723e7a0aff5d6feedbbab6cb3392"/></dir></dir><dir name="template"><dir name="connect"><file name="iframe.phtml" hash="2aa7c28d092c43e14b8b1fe413e6a126"/><file name="packages.phtml" hash="72c6024a9891c01b603f2766f52ff914"/><file name="packages_prepare.phtml" hash="bd34d2a794e5fcc84d4ea22b5754d250"/></dir><file name="exception.phtml" hash="ce8145052f0a730088fc849c04c58c64"/><file name="footer.phtml" hash="454299883c093cc98b4550c99bba03b9"/><file name="header.phtml" hash="73ab5e15a8a58d624fb5b8e48da679d3"/><file name="index.phtml" hash="1c7d5cbca5c16632db3f891024086947"/><dir name="install"><file name="download.phtml" hash="b7f283992b89cae9e85cc655e4b2d4e3"/><file name="footer.phtml" hash="6a70fd31200cb9bfddf65d7f8f67ac5e"/><file name="header.phtml" hash="f07d63df229468c28043869f0b71e194"/><file name="writable.phtml" hash="2815049a02b3f1110b9f22e22047b941"/></dir><file name="login.phtml" hash="ad91f8daa2d8a8974782350a2d2e2578"/><file name="messages.phtml" hash="8753c0c5599fa55a190c4913651b2c77"/><file name="noroute.phtml" hash="ad5ded291fcbf3899af4f499b77aaf42"/><file name="settings.phtml" hash="5bda5f6e749e288f7e2cb0fc2b7f1b83"/><file name="writable.phtml" hash="5fc31df4f9795e8febe39da1e59d91cd"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="index.php" hash="db1b840cef501ba7830d1035d6a3df7b"/><dir name="lib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="a17be2772775eac2d1e3a36041a9f3c1"/><file name="Bz.php" hash="4e95c019f7c8983ecb225d0847806bed"/><file name="Gz.php" hash="e832e68bd2a3165234b6d6b52b3fcac0"/><file name="Interface.php" hash="1c57bd8e6ee7dbe4cfcaa3dfdceb1d7b"/><file name="Tar.php" hash="12983e34995349ab736eb8c5bbe03ba6"/></dir><file name="Archive.php" hash="7947ccf15f5df8300e7cf1a4681b9569"/><dir name="Autoload"><file name="Simple.php" hash="e062bd1b45f0b08ac456d3e0dc4c06b6"/></dir><dir name="Connect"><dir name="Channel"><file name="Generator.php" hash="4bbda17b29549ae9a50ea09c0db54649"/><file name="Parser.php" hash="3546e3b66eafe78bdd5628dc37f4bca9"/><file name="VO.php" hash="0525a71b043486aca9febcac6ce0ccff"/></dir><dir name="Command"><file name="Channels.php" hash="83e47fe8f407212ecc1797028211d15d"/><file name="Channels_Header.php" hash="8a828b219ec1b57eba88806845f133cb"/><file name="Config.php" hash="22161cf90d8d2abb5409a30dbe28a44c"/><file name="Config_Header.php" hash="0ce12f7207fe610f886aae15df145615"/><file name="Install.php" hash="b40177f31744db26010c8fbe8e10b05a"/><file name="Install_Header.php" hash="1d4da6660edb2e63ea9a223ccfe4610d"/><file name="Package.php" hash="09d265ec9666b7729276a54c88db1263"/><file name="Package_Header.php" hash="102080d8fad7234b60b103a5dbf65754"/><file name="Registry.php" hash="898b91578ee622b4914023edc9e34984"/><file name="Registry_Header.php" hash="fb37813d34f75835e4ecccea704b2ab0"/><file name="Remote.php" hash="3b0f8aa676ddd677e3a57823d8b0c60e"/><file name="Remote_Header.php" hash="9bd703a45c70ccc959f922392decc962"/></dir><file name="Command.php" hash="b3314fecd974fc3d767049cf323cc254"/><file name="Config.php" hash="4d688d01fd05522fa36166656bd5c697"/><file name="Converter.php" hash="435aad5d121240eb7784f3f71a848392"/><dir name="Frontend"><file name="CLI.php" hash="0b71bae7609966ebfcfc04f63a0318a3"/></dir><file name="Frontend.php" hash="811d665cee46fdbea623d651cf4ac44b"/><file name="Ftp.php" hash="4adbc5b56bf2be7ca7d042f78ae61298"/><dir name="Loader"><file name="Ftp.php" hash="1fbff02e85c5e2f7f0e61d8577c248d6"/></dir><file name="Loader.php" hash="ba5151383e4931a7f767a2d1897cb2a7"/><dir name="Package"><file name="Extension.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Hotfix.php" hash="370177a5cf2f3397e0b341466d34de75"/><file name="Maintainer.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Reader.php" hash="7fa1d41c6145f178e50e8a266e361f1e"/><file name="Target.php" hash="09c91f931b37f5e350a7ebdbb6bbf442"/><file name="VO.php" hash="e42f4d13abcaa766ca35f24c6280043b"/><file name="Writer.php" hash="32088dd140dfd14b3bde9c11a32b7d35"/></dir><file name="Package.php" hash="bcc3ed40ad75f37e6be0d90e833a84bb"/><file name="Packager.php" hash="2eb9fb87e4bf3d8a8a0a27d1b2c8994d"/><dir name="Repository"><file name="Abstract.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><dir name="Channel"><file name="Abstract.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Commercial.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Community.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Core.php" hash="68b329da9893e34099c7d8ad5cb9c940"/></dir><file name="Channel.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Local.php" hash="68b329da9893e34099c7d8ad5cb9c940"/></dir><file name="Repository.php" hash="68b329da9893e34099c7d8ad5cb9c940"/><file name="Rest.php" hash="9bf931f43e0840f903ce9089d90779a2"/><file name="Singleconfig.php" hash="bdcb3dcfb2a58b290cce8da370f8ac9c"/><dir name="Structures"><file name="Graph.php" hash="bb484f7ed43d819d9964c3dfa0489641"/><file name="Node.php" hash="5fe101c2a3c371ebca23b1a77a4d8b9a"/></dir><file name="Validator.php" hash="500f1fec82dc873ef02fae0d738b5162"/></dir><dir name="DB"><file name="Exception.php" hash="38385d6b8ba6dfabf53aa275ca5b1086"/><file name="Mysqli.php" hash="7afa22548284f2e6e8796fce50f736ce"/></dir><file name="Exception.php" hash="a5e649c88e376f850b83d35900525a7f"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="8eba20650fc9da09d8585e31ea3bd053"/><file name="Socket.php" hash="a1b2788a4fa596f70430d309ffc8f59f"/></dir><file name="Client.php" hash="189e5288453ce792e1eacbb178e20fd1"/><file name="IClient.php" hash="eb44927eabc6a87fbf37d52643732b2d"/></dir><dir name="System"><file name="Args.php" hash="a3058a52f975e8436a8d2b113943489a"/><file name="Dirs.php" hash="0addfeb8f206cc67539ca0625921e016"/></dir><dir name="Xml"><file name="Generator.php" hash="c0b790125cc714d1ca43cfdc046768ed"/><file name="Parser.php" hash="6f8ac6fb3c6332c257d28e335909e855"/></dir></dir></dir><file name="config.ini" hash="a52ba98e71ab19de387b3af1a04c6102"/><file name=".htaccess" hash="520cc012c84739584526b8a9ff098e23"/><file name="mage.php" hash="6de4d106e8080bd2be838d1674bf6136"/></dir><dir name="."><file name=".htaccess" hash="8c1f49780253bb13b4fa89d604e814b6"/><file name="index.php" hash="20b1633bd332a08e643afa4590ab8564"/><file name="mage" hash="091c45355c62a9189cff45c09328037c"/></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>