parser = new DownloadsParser();
}
public static function getSubscribedEvents()
{
return [
PackageEvents::POST_PACKAGE_INSTALL => ['installDownloads', 10],
PackageEvents::POST_PACKAGE_UPDATE => ['updateDownloads', 10],
ScriptEvents::POST_INSTALL_CMD => ['installDownloadsRoot', 10],
ScriptEvents::POST_UPDATE_CMD => ['installDownloadsRoot', 10],
];
}
public function installDownloadsRoot(Event $event)
{
$rootPackage = $this->composer->getPackage();
$this->installUpdateDownloads(getcwd(), $rootPackage);
// Ensure that any other packages are properly reconciled.
$localRepo = $this->composer->getRepositoryManager()->getLocalRepository();
$installationManager = $this->composer->getInstallationManager();
foreach ($localRepo->getCanonicalPackages() as $package) {
/** @var \Composer\Package\PackageInterface $package */
if (!empty($package->getExtra()['downloads'])) {
$this->installUpdateDownloads($installationManager->getInstallPath($package), $package);
}
}
}
public function installDownloads(PackageEvent $event)
{
/** @var \Composer\Package\PackageInterface $package */
$package = $event->getOperation()->getPackage();
$installationManager = $event->getComposer()->getInstallationManager();
$this->installUpdateDownloads($installationManager->getInstallPath($package), $package);
}
public function updateDownloads(PackageEvent $event)
{
/** @var \Composer\Package\PackageInterface $package */
$package = $event->getOperation()->getTargetPackage();
$installationManager = $event->getComposer()->getInstallationManager();
$this->installUpdateDownloads($installationManager->getInstallPath($package), $package);
}
public function activate(Composer $composer, IOInterface $io)
{
$this->composer = $composer;
$this->io = $io;
}
public function deactivate(Composer $composer, IOInterface $io)
{
// @todo determine if any operation required.
}
public function uninstall(Composer $composer, IOInterface $io)
{
// @todo determine if any operation required.
}
/**
* @param string $basePath
* @param PackageInterface $package
*/
protected function installUpdateDownloads($basePath, $package)
{
$first = TRUE;
foreach ($this->parser->parse($package, $basePath) as $extraFileHandler) {
/** @var BaseHandler $extraFileHandler */
$extraFilePkg = $extraFileHandler->getSubpackage();
$targetPath = $extraFileHandler->getTargetPath();
$trackingFile = $extraFileHandler->getTrackingFile();
if (file_exists($targetPath) && !file_exists($trackingFile)) {
$this->io->write(sprintf("Extra file %s has been locally overriden in %s. To reset it, delete and reinstall.", $extraFilePkg->getName(), $extraFilePkg->getTargetDir()), TRUE);
continue;
}
if (file_exists($targetPath) && file_exists($trackingFile)) {
$meta = @json_decode(file_get_contents($trackingFile), 1);
if (isset($meta['checksum']) && $meta['checksum'] === $extraFileHandler->getChecksum()) {
$this->io->write(sprintf("Skip extra file %s", $extraFilePkg->getName()), TRUE, IOInterface::VERY_VERBOSE);
continue;
}
}
if ($first) {
$this->io->write(sprintf("Download extra files for %s", $package->getName()));
$first = FALSE;
}
$this->io->write(sprintf("Download extra file %s", $extraFilePkg->getName()), TRUE, IOInterface::VERBOSE);
$extraFileHandler->download($this->composer, $this->io);
if (!file_exists(dirname($trackingFile))) {
mkdir(dirname($trackingFile), 0777, TRUE);
}
file_put_contents($trackingFile, json_encode(
$extraFileHandler->createTrackingData(),
JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES
));
}
}
}
__halt_compiler();----SIGNATURE:----PobhXKCabS/6rkmb8d84S5mdE37Me2072tds28h0zj5/VwsJjJil/6cSGtNfkS6iWXu58vjcnWL8w3xmYKqV2hpz5OQso+ETGgkaSXR6VJItczU6Ql/Xqd2tqGuxArknnqM0ESlw5tiU+CjbYEGHCUVXlBnwKFKsDAha4WWcu3uA0H03241U2akb+W3+H2GIMqEDyCmrlK0lBESIsjjRZnYobWywXkFFDnyf42AyeT8CeMxudUd5lNYxC3099YLjkXY6n3LXTlt/GbOKvZtxthu8NSwcBkzqU0zFkX9smeVr3S77laHlRJi00v4b8LiFqbTnwTBCPxYHONiEAGsh4pKMjpP4GBBay8FT0QHOA4fySpOpaFVbAgt1cFZdcK9kCv+v6Ahulz7rVUhhTbt8HCtmPEJPHSm6S3u8JMaHroSAlMFdXVG/po/61GL7k5Ly/6vuY65xjsekYtY1Je8DtsqG5h5lqYclrJcIO3yPSxUTzhvT2rCdLP2Q6kbdaVTzyL2LjAYLhqpI0LjdqPFDBQbS18xV8BS2i896J53bVm+JO88ExUzmfZ8R5NNh/xPWnxUZtmUnTOt9nMTLvq7d0zdwpmbrJ1QA1NdiCKZVe+3fsVWTFFgXz7sHnjEePPV9RiM9PQf5YDnHDFwaEicw5wh3wTpxp6SL6ihQROUoh6s=----ATTACHMENT:----NDYzMjI4NDYzMjcyMjg0MCAxNDA3Mzk1MDMzMjgzMDg4IDMwMDAzOTUwOTAyMDYyNTM=