function install( $package, $installType, $parameters, $name, $os, $filename, $subdirectory, $content, &$installParameters, &$installData ) { //$this->Package =& $package; $trans = eZCharTransform::instance(); $name = $content->getAttribute( 'name' ); $extensionName = $trans->transformByGroup( $name, 'urlalias' ); if ( strcmp( $name, $extensionName ) !== 0 ) { $description = ezpI18n::tr( 'kernel/package', 'Package contains an invalid extension name: %extensionname', false, array( '%extensionname' => $name ) ); $installParameters['error'] = array( 'error_code' => false, 'element_id' => $name, 'description' => $description ); return false; } $siteINI = eZINI::instance(); $extensionRootDir = $siteINI->variable( 'ExtensionSettings', 'ExtensionDirectory' ); $extensionDir = $extensionRootDir . '/' . $extensionName; $packageExtensionDir = $package->path() . '/' . $parameters['sub-directory'] . '/' . $extensionName; // Error: extension already exists. if ( file_exists( $extensionDir ) ) { $description = ezpI18n::tr( 'kernel/package', "Extension '%extensionname' already exists.", false, array( '%extensionname' => $extensionName ) ); $choosenAction = $this->errorChoosenAction( self::ERROR_EXISTS, $installParameters, $description, $this->HandlerType ); switch( $choosenAction ) { case self::ACTION_SKIP: return true; case eZPackage::NON_INTERACTIVE: case self::ACTION_REPLACE: eZDir::recursiveDelete( $extensionDir ); break; default: $installParameters['error'] = array( 'error_code' => self::ERROR_EXISTS, 'element_id' => $extensionName, 'description' => $description, 'actions' => array( self::ACTION_REPLACE => ezpI18n::tr( 'kernel/package', "Replace extension" ), self::ACTION_SKIP => ezpI18n::tr( 'kernel/package', 'Skip' ) ) ); return false; } } eZDir::mkdir( $extensionDir, false, true ); eZDir::copy( $packageExtensionDir, $extensionRootDir ); // Regenerate autoloads for extensions to pick up the newly created extension ezpAutoloader::updateExtensionAutoloadArray(); // Activate extension $siteINI = eZINI::instance( 'site.ini', 'settings/override', null, null, false, true ); if ( $siteINI->hasVariable( 'ExtensionSettings', "ActiveExtensions" ) ) { $selectedExtensions = $siteINI->variable( 'ExtensionSettings', "ActiveExtensions" ); } else { $selectedExtensions = array(); } if ( !in_array( $extensionName, $selectedExtensions ) ) { $selectedExtensions[] = $extensionName; $siteINI->setVariable( "ExtensionSettings", "ActiveExtensions", $selectedExtensions ); $siteINI->save( 'site.ini.append', '.php', false, false ); } return true; }
function init() { $this->Error = array('errors' => array()); set_time_limit(10 * 60); $siteType = $this->chosenSiteType(); // If we are installing a package without extension packages we // generate the autoload array for extensions. // For the time being we only do this for the plain_site package. if ($siteType['identifier'] == 'plain_site') { ezpAutoloader::updateExtensionAutoloadArray(); } $saveData = true; // set to true to save data //$ini = eZINI::create(); $accessMap = array('url' => array(), 'hostname' => array(), 'port' => array(), 'accesses' => array()); $primaryLanguage = null; $allLanguages = array(); $allLanguageCodes = array(); $variationsLanguages = array(); $primaryLanguageCode = $this->PersistenceList['regional_info']['primary_language']; $extraLanguageCodes = isset($this->PersistenceList['regional_info']['languages']) ? $this->PersistenceList['regional_info']['languages'] : array(); $extraLanguageCodes = array_diff($extraLanguageCodes, array($primaryLanguageCode)); /* if ( isset( $this->PersistenceList['regional_info']['variations'] ) ) { $variations = $this->PersistenceList['regional_info']['variations']; foreach ( $variations as $variation ) { $locale = eZLocale::create( $variation ); if ( $locale->localeCode() == $primaryLanguageCode ) { $primaryLanguage = $locale; } else { $variationsLanguages[] = $locale; } } } */ if ($primaryLanguage === null) { $primaryLanguage = eZLocale::create($primaryLanguageCode); } $allLanguages[] = $primaryLanguage; foreach ($extraLanguageCodes as $extraLanguageCode) { $allLanguages[] = eZLocale::create($extraLanguageCode); $allLanguageCodes[] = $extraLanguageCode; } // If we have already figured out charset we used that if (isset($this->PersistenceList['regional_info']['site_charset']) and strlen($this->PersistenceList['regional_info']['site_charset']) > 0) { $charset = $this->PersistenceList['regional_info']['site_charset']; } else { // Figure out charset automatically if it is not set yet $canUseUnicode = $this->PersistenceList['database_info']['use_unicode']; $charset = $this->findAppropriateCharset($primaryLanguage, $allLanguages, $canUseUnicode); } if (!$charset) { // Make sure kickstart functionality stops $this->setAllowKickstart(false); return 'LanguageOptions'; } else { $i18nINI = eZINI::create('i18n.ini'); // Set ReadOnlySettingsCheck to false: towards // Ignore site.ini[eZINISettings].ReadonlySettingList[] settings when saving ini variables. $i18nINI->setReadOnlySettingsCheck(false); $i18nINI->setVariable('CharacterSettings', 'Charset', $charset); $i18nINI->save(false, '.php', 'append', true); } $siteINISettings = array(); $result = true; $accessType = $siteType['access_type']; $resultArray = array('errors' => array()); $result = $this->initializePackage($siteType, $accessMap, $charset, $allLanguageCodes, $allLanguages, $primaryLanguage, $this->PersistenceList['admin'], $resultArray); if (!$result) { $this->Error['errors'] = array_merge($this->Error['errors'], $resultArray['errors']); $this->Error['errors'][] = array('code' => 'EZSW-040', 'text' => "Failed to initialize site package '" . $siteType['identifier'] . "'"); //$result = false; return false; } if ($resultArray['common_settings']) { $extraCommonSettings = $resultArray['common_settings']; foreach ($extraCommonSettings as $extraSetting) { if ($extraSetting === false) { continue; } $iniName = $extraSetting['name']; $settings = $extraSetting['settings']; $resetArray = false; if (isset($extraSetting['reset_arrays'])) { $resetArray = $extraSetting['reset_arrays']; } if ($iniName == 'site.ini') { $siteINISettings[] = $settings; continue; } if (file_exists('settings/override/' . $iniName . '.append') || file_exists('settings/override/' . $iniName . '.append.php')) { $tmpINI = eZINI::instance($iniName, 'settings/override', null, null, false, true); } else { $tmpINI = eZINI::create($iniName); } // Set ReadOnlySettingsCheck to false: towards // Ignore site.ini[eZINISettings].ReadonlySettingList[] settings when saving ini variables. $tmpINI->setReadOnlySettingsCheck(false); $tmpINI->setVariables($settings); $tmpINI->save(false, '.append.php', false, true, "settings/override", $resetArray); } } if (!$result) { // Display errors return false; } $ini = eZINI::instance(); // Set ReadOnlySettingsCheck to false: towards // Ignore site.ini[eZINISettings].ReadonlySettingList[] settings when saving ini variables. $ini->setReadOnlySettingsCheck(false); $regionalInfo = $this->PersistenceList['regional_info']; $emailInfo = $this->PersistenceList['email_info']; $imageINI = eZINI::create('image.ini'); // Set ReadOnlySettingsCheck to false: towards // Ignore site.ini[eZINISettings].ReadonlySettingList[] settings when saving ini variables. $imageINI->setReadOnlySettingsCheck(false); $imageINI->setVariable('ImageMagick', 'IsEnabled', 'false'); if ($this->PersistenceList['imagemagick_program']['result']) { $imageINI->setVariable('ImageMagick', 'ExecutablePath', $this->PersistenceList['imagemagick_program']['path']); $imageINI->setVariable('ImageMagick', 'Executable', $this->PersistenceList['imagemagick_program']['program']); $imageINI->setVariable('ImageMagick', 'IsEnabled', 'true'); } $saveResult = false; if (!$saveData) { $saveResult = true; } if ($saveData) { $saveResult = $imageINI->save(false, '.php', 'append', true); } if ($saveResult and $charset !== false) { /*$i18nINI = eZINI::create( 'i18n.ini' ); // Set ReadOnlySettingsCheck to false: towards // Ignore site.ini[eZINISettings].ReadonlySettingList[] settings when saving ini variables. $i18nINI->setReadOnlySettingsCheck( false ); $i18nINI->setVariable( 'CharacterSettings', 'Charset', $charset ); if ( $saveData ) $saveResult = $i18nINI->save( false, '.php', 'append', true ); */ } switch ($accessType) { case 'port': $matchOrder = 'port'; break; case 'hostname': $matchOrder = 'host'; break; case 'url': default: $matchOrder = 'uri'; break; } $hostMatchMapItems = array(); foreach ($accessMap['hostname'] as $hostName => $siteAccessName) { $hostMatchMapItems[] = $hostName . ';' . $siteAccessName; } $portMatchMapItems = array(); foreach ($accessMap['port'] as $port => $siteAccessName) { $portMatchMapItems[$port] = $siteAccessName; } $ini->setVariable('SiteAccessSettings', 'MatchOrder', $matchOrder); $ini->setVariable('SiteAccessSettings', 'HostMatchMapItems', $hostMatchMapItems); foreach ($portMatchMapItems as $port => $siteAccessName) { $ini->setVariable('PortAccessSettings', $port, $siteAccessName); } $ini->setVariable('SiteSettings', 'SiteList', $accessMap['sites']); $ini->setVariable('SiteAccessSettings', 'AvailableSiteAccessList', $accessMap['accesses']); $ini->setVariable("SiteAccessSettings", "CheckValidity", "false"); $ini->setVariable('Session', 'SessionNameHandler', 'custom'); $ini->setVariable('MailSettings', 'AdminEmail', $this->PersistenceList['admin']['email']); $ini->setVariable('MailSettings', 'EmailSender', false); $defaultAccess = 'admin'; if (isset($accessMap['accesses'][0])) { $defaultAccess = $accessMap['accesses'][0]; } $ini->setVariable('SiteSettings', 'DefaultAccess', $defaultAccess); if ($emailInfo['type'] == 1) { $ini->setVariable('MailSettings', 'Transport', 'sendmail'); } else { $ini->setVariable('MailSettings', 'Transport', 'SMTP'); $ini->setVariable('MailSettings', 'TransportServer', $emailInfo['server']); $ini->setVariable('MailSettings', 'TransportUser', $emailInfo['user']); $ini->setVariable('MailSettings', 'TransportPassword', $emailInfo['password']); } // Enable design location cache $ini->setVariable('DesignSettings', 'DesignLocationCache', 'enabled'); if ($saveData) { foreach ($siteINISettings as $siteINISetting) { $ini->setVariables($siteINISetting); } } if ($saveData) { $saveResult = $ini->save(false, '.php', 'append', true, true, true); } return true; // Never show, generate sites }
/** * Resets the local, in-memory autoload cache. * * If the autoload arrays are extended during a requests lifetime, this * method must be called, to make them available. * * @return void */ public static function reset() { self::$ezpClasses = null; }