ExpressiveInstaller\OptionalPackages::install PHP Method

install() public static method

Prompts users for package selections, and copies in package-specific configuration when known. Updates the composer.json with the package selections, and removes the install and update commands on completion.
public static install ( Composer\Script\Event $event )
$event Composer\Script\Event
    public static function install(Event $event)
    {
        $io = $event->getIO();
        $composer = $event->getComposer();
        // Get composer.json
        $composerFile = Factory::getComposerFile();
        $json = new JsonFile($composerFile);
        self::$composerDefinition = $json->read();
        self::$projectRoot = realpath(dirname($composerFile));
        $io->write("<info>Setup data and cache dir</info>");
        if (!is_dir(self::$projectRoot . '/data/cache')) {
            mkdir(self::$projectRoot . '/data/cache', 0775, true);
            chmod(self::$projectRoot . '/data', 0775);
        }
        $io->write("<info>Setting up optional packages</info>");
        // Get root package
        $rootPackage = $composer->getPackage();
        while ($rootPackage instanceof AliasPackage) {
            $rootPackage = $rootPackage->getAliasOf();
        }
        // Get required packages
        self::$composerRequires = $rootPackage->getRequires();
        self::$composerDevRequires = $rootPackage->getDevRequires();
        // Get stability flags
        self::$stabilityFlags = $rootPackage->getStabilityFlags();
        // Cleanup development dependencies
        self::removeDevDependencies();
        // Minimal?
        $minimal = self::requestMinimal($io);
        $copyFilesKey = $minimal ? 'minimal-files' : 'copy-files';
        self::$config = (require __DIR__ . '/config.php');
        foreach (self::$config['questions'] as $questionName => $question) {
            $defaultOption = isset($question['default']) ? $question['default'] : 1;
            if (isset(self::$composerDefinition['extra']['optional-packages'][$questionName])) {
                // Skip question, it's already answered
                continue;
            }
            // Get answer
            $answer = self::askQuestion($composer, $io, $question, $defaultOption);
            // Process answer
            self::processAnswer($io, $question, $answer, $copyFilesKey);
            // Save user selected option
            self::$composerDefinition['extra']['optional-packages'][$questionName] = $answer;
            // Update composer definition
            $json->write(self::$composerDefinition);
        }
        // Set required packages
        $rootPackage->setRequires(self::$composerRequires);
        $rootPackage->setDevRequires(self::$composerDevRequires);
        // Set stability flags
        $rootPackage->setStabilityFlags(self::$stabilityFlags);
        // House keeping
        $io->write("<info>Remove installer</info>");
        self::removeInstallerFromDefinition();
        // Update composer definition
        $json->write(self::$composerDefinition);
        // Minimal install? Remove default middleware
        if ($minimal) {
            self::removeDefaultMiddleware($io, self::$projectRoot);
        }
        self::clearComposerLockFile($io, self::$projectRoot);
        self::cleanUp($io, self::$projectRoot);
    }