public function latest(CompletePackage $package) { $response = json_decode($this->client->get('/packages/' . $package->getName() . '.json')->send()->getBody(), true); $versions = $response['package']['versions']; $stability = VersionParser::parseStability($package->getPrettyVersion()); $versions = $this->trim->trim($versions, $stability); $versions = $this->sort->nameSort($versions); return array_shift($versions); }
/** * @api */ public function __construct(\Composer\Package\CompletePackage $pkgInstance = null) { parent::__construct(); $this->packageInstance = $pkgInstance; if ($pkgInstance) { $this->composerPackageName = $pkgInstance->getName(); } $this->type = Event\TYPE_BROADCAST_POST_ORDER; }
/** * Filter the package to add dist and other meta information. */ function filterPackage(CompletePackage $package) { list($vendor, $shortName) = explode('/', $package->getName()); // try to get the plugin info - may return an array or null/false try { $info = $this->getPluginInfo($shortName); } catch (RuntimeException $e) { if ($io->isVerbose()) { $io->writeError($e->getMessage()); } // this allows us to try again for this plugin return; } if ($info) { // set the dist info $package->setDistType('zip'); // strip out "tags", "trunk", slashes, and spaces $version = preg_replace('/tags|trunk|[\\/ ]/', '', $package->getSourceReference()); // if there is a version identifier, prepend with a period $version = $version ? ".{$version}" : ''; // set the dist url $package->setDistUrl('https://downloads.wordpress.org/plugin/' . urlencode($shortName . $version) . '.zip'); // set some additional meta info // this is inconsequential to the solver, but it gets stored in composer.lock // and appears when running `composer show vendor/package` if (isset($info['short_description'])) { $package->setDescription($info['short_description']); } if (!empty($info['contributors'])) { $authors = []; foreach ($info['contributors'] as $name => $homepage) { $authors[] = ['name' => $name, 'homepage' => $homepage]; } $package->setAuthors($authors); } if (!empty($info['tags'])) { $package->setKeywords($info['tags']); } // URL-ready slug $pluginSlug = urlencode($shortName); $package->setSupport(['forum' => "https://wordpress.org/support/plugin/{$pluginSlug}/", 'source' => "http://plugins.trac.wordpress.org/browser/{$pluginSlug}/", 'docs' => "https://wordpress.org/plugins/{$pluginSlug}/"]); $package->setHomepage("https://wordpress.org/plugins/{$pluginSlug}/"); } else { // null means the package is no longer active $package->setAbandoned(true); } }
/** * Filter the package to add dist and other meta information. */ function filterPackage(CompletePackage $package) { list($vendor, $shortName) = explode('/', $package->getName()); if (($themeInfo = $this->getThemeInfo()) && isset($themeInfo[$shortName])) { $info = $themeInfo[$shortName]; // set the dist info $package->setDistType('zip'); $package->setDistUrl($info['download_uri']); // additional meta info $package->setDescription($info['description']); $package->setAuthors([['name' => $info['author'], 'homepage' => $info['author_uri']]]); $package->setHomepage($info['theme_uri']); // is this theme retired? if (in_array($shortName, $this->getRetiredThemes())) { $package->setAbandoned(true); } } }
/** * @param \Composer\Package\CompletePackage $package * @return CM_App_Package * @throws CM_Exception_Invalid */ protected function _getPackageFromComposerPackage(\Composer\Package\CompletePackage $package) { $pathRelative = ''; if (!$package instanceof \Composer\Package\RootPackage) { $vendorDir = $this->_getComposerVendorDir(); $pathRelative = $vendorDir . $package->getPrettyName() . '/'; } $extra = $package->getExtra(); $modules = array(); if (array_key_exists('cm-modules', $extra)) { $modules = $extra['cm-modules']; } return new CM_App_Package($package->getName(), $pathRelative, $modules); }
private function updateAuthors(AddonVersion $version, CompletePackage $package) { if ($package->getAuthors()) { foreach ($package->getAuthors() as $details) { $author = null; if (!$details->getName() && !$details->getEmail()) { continue; } if ($details->getEmail()) { $author = AddonAuthor::get()->filter('Email', $details->getEmail())->first(); } if (!$author && $details->getHomepage()) { $author = AddonAuthor::get()->filter('Name', $details->getName())->filter('Homepage', $details->getHomepage())->first(); } if (!$author && $details->getName()) { $author = AddonAuthor::get()->filter('Name', $details->getName())->filter('Versions.Addon.Name', $package->getName())->first(); } if (!$author) { $author = new AddonAuthor(); } if ($details->getName()) { $author->Name = $details->getName(); } if ($details->getEmail()) { $author->Email = $details->getEmail(); } if ($details->getHomepage()) { $author->Homepage = $details->getHomepage(); } //to-do not supported by API //if(isset($details['role'])) $author->Role = $details['role']; $version->Authors()->add($author->write()); } } }
/** * Test the conversion of a complete repository. * * @return void */ public function testConvertRepositoryToArrayOnlyRequired() { $repository = new ArrayRepository([$package1 = new CompletePackage('test/dependency1', '1.0.0.0', '1.0.0.0'), $package2 = new CompletePackage('test/non-dependency2', '2.0.0.0', '2.0.0.0')]); $package1->setType('project'); $package1->setLicense(['LGPL-3']); $package2->setType('project'); $package2->setLicense(['GPL-3']); $converter = new PackageConverter($rootPackage = new RootPackage('root/package', 'dev-master', 'dev-master')); $rootPackage->setRequires(['test/dependency1' => new Link('root/package', 'test/dependency1', new Constraint('<', '2.0'))]); $converted = $converter->convertRepositoryToArray($repository, true); $this->assertEquals(['test\\/dependency1'], $converted->getEntries('/')); $this->assertEquals(['test\\/dependency1/name', 'test\\/dependency1/version', 'test\\/dependency1/constraint', 'test\\/dependency1/type', 'test\\/dependency1/locked', 'test\\/dependency1/license', 'test\\/dependency1/abandoned'], $converted->getEntries('/test\\/dependency1')); $this->assertEquals($package1->getName(), $converted->get('test\\/dependency1/name')); $this->assertEquals($package1->getPrettyVersion(), $converted->get('test\\/dependency1/version')); $this->assertEquals($converted->get('test\\/dependency1/constraint'), '< 2.0'); $this->assertEquals($package1->getType(), $converted->get('test\\/dependency1/type')); $this->assertFalse($converted->get('test\\/dependency1/locked')); $this->assertEquals($package1->getLicense(), $converted->get('test\\/dependency1/license')); $this->assertFalse($converted->get('test\\/dependency1/abandoned')); }
/** * Uninstall a plugin from the database * * @param CompletePackage $package */ public function uninstall(CompletePackage $package) { $plugin = $this->findOneByName($package->getName()); if ($plugin != null) { $this->entityManager->remove($plugin); $this->entityManager->flush(); } else { error_log('Tried to uninstall a plugin that wasn\'t in the database: ' . $package->getName()); } }