Example #1
0
 /**
  *
  * Get upgrades list
  *
  * @param string/array $channels
  * @param Mage_Connect_Singleconfig $cacheObject
  * @param Mage_Connect_Rest $restObj optional
  * @param bool $checkConflicts
  * @return array
  */
 public function getUpgradesList($channels, $cacheObject, $configObj, $restObj = null, $checkConflicts = false)
 {
     if (is_scalar($channels)) {
         $channels = array($channels);
     }
     if (!$restObj) {
         $restObj = new Mage_Connect_Rest($configObj->protocol);
     }
     $updates = array();
     foreach ($channels as $chan) {
         if (!$cacheObject->isChannel($chan)) {
             continue;
         }
         $chanName = $cacheObject->chanName($chan);
         $localPackages = $cacheObject->getInstalledPackages($chanName);
         $localPackages = $localPackages[$chanName];
         if (!count($localPackages)) {
             continue;
         }
         $channel = $cacheObject->getChannel($chan);
         $uri = $channel[Mage_Connect_Singleconfig::K_URI];
         $restObj->setChannel($uri);
         $remotePackages = $restObj->getPackagesHashed();
         /**
          * Iterate packages of channel $chan
          */
         $state = $configObj->preferred_state ? $configObj->preferred_state : "devel";
         foreach ($localPackages as $localName => $localData) {
             if (!isset($remotePackages[$localName])) {
                 continue;
             }
             $package = $remotePackages[$localName];
             $neededToUpgrade = false;
             $remoteVersion = $localVersion = trim($localData[Mage_Connect_Singleconfig::K_VER]);
             foreach ($package as $version => $s) {
                 if ($cacheObject->compareStabilities($s, $state) < 0) {
                     continue;
                 }
                 if (version_compare($version, $localVersion, ">")) {
                     $neededToUpgrade = true;
                     $remoteVersion = $version;
                 }
                 if ($checkConflicts) {
                     $conflicts = $cacheObject->hasConflicts($chanName, $localName, $remoteVersion);
                     if (false !== $conflicts) {
                         $neededToUpgrade = false;
                     }
                 }
             }
             if (!$neededToUpgrade) {
                 continue;
             }
             if (!isset($updates[$chanName])) {
                 $updates[$chanName] = array();
             }
             $updates[$chanName][$localName] = array("from" => $localVersion, "to" => $remoteVersion);
         }
     }
     return $updates;
 }