/** * * 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; }