Mage_Connect_Packager::getUpgradesList PHP Method

getUpgradesList() public method

Get upgrades list
public getUpgradesList ( $channels, Mage_Connect_Singleconfig $cacheObject, $configObj, Mage_Connect_Rest $restObj = null, boolean $checkConflicts = false ) : array
$cacheObject Mage_Connect_Singleconfig
$restObj Mage_Connect_Rest optional
$checkConflicts boolean
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();
        }
        $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;
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * List-upgrades callback
  * @param srting $command
  * @param array $options
  * @param array $params
  * @return void
  */
 public function doListUpgrades($command, $options, $params)
 {
     $this->cleanupParams($params);
     try {
         $packager = new Mage_Connect_Packager();
         $ftp = empty($options['ftp']) ? false : $options['ftp'];
         if ($ftp) {
             list($cache, $config, $ftpObj) = $packager->getRemoteConf($ftp);
         } else {
             $cache = $this->getSconfig();
             $config = $this->config();
         }
         if (!empty($params[0])) {
             $channels = $params[0];
             $cache->getChannel($channels);
         } else {
             $channels = $cache->getChannelNames();
         }
         $ups = $packager->getUpgradesList($channels, $cache, $config);
         if (count($ups)) {
             $data = array($command => array('data' => $ups));
         } else {
             $data = "No upgrades available";
         }
         $this->ui()->output($data);
     } catch (Exception $e) {
         $this->doError($command, $e->getMessage());
     }
 }