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
 }
Esempio n. 3
0
 /**
  * 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;
 }