Puli\Manager\Module\ModuleManagerImpl::installModule PHP Method

installModule() public method

public installModule ( $installPath, $name = null, $installerName = InstallInfo::DEFAULT_INSTALLER_NAME, $env = Environment::PROD )
    public function installModule($installPath, $name = null, $installerName = InstallInfo::DEFAULT_INSTALLER_NAME, $env = Environment::PROD)
    {
        Assert::string($installPath, 'The install path must be a string. Got: %s');
        Assert::string($installerName, 'The installer name must be a string. Got: %s');
        Assert::oneOf($env, Environment::all(), 'The environment must be one of: %2$s. Got: %s');
        Assert::nullOrModuleName($name);
        $this->assertModulesLoaded();
        $installPath = Path::makeAbsolute($installPath, $this->rootDir);
        foreach ($this->modules as $module) {
            if ($installPath === $module->getInstallPath()) {
                return;
            }
        }
        if (null === $name && ($moduleFile = $this->loadModuleFile($installPath))) {
            // Read the name from the module file
            $name = $moduleFile->getModuleName();
        }
        if (null === $name) {
            throw new InvalidConfigException(sprintf('Could not find a name for the module at %s. The name should ' . 'either be passed to the installer or be set in the "name" ' . 'property of %s.', $installPath, $installPath . '/puli.json'));
        }
        if ($this->modules->contains($name)) {
            throw NameConflictException::forName($name);
        }
        $relInstallPath = Path::makeRelative($installPath, $this->rootDir);
        $installInfo = new InstallInfo($name, $relInstallPath);
        $installInfo->setInstallerName($installerName);
        $installInfo->setEnvironment($env);
        $module = $this->loadModule($installInfo);
        $this->assertNoLoadErrors($module);
        $this->rootModuleFile->addInstallInfo($installInfo);
        try {
            $this->jsonStorage->saveRootModuleFile($this->rootModuleFile);
        } catch (Exception $e) {
            $this->rootModuleFile->removeInstallInfo($name);
            throw $e;
        }
        $this->modules->add($module);
    }