[ Index ]
 

Code source de eZ Publish 3.9.0

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/kernel/classes/packagehandlers/ezextension/ -> ezextensionpackagehandler.php (source)

   1  <?php
   2  //
   3  // Definition of eZExtensionPackageHandler class
   4  //
   5  // Created on: <15-Dec-2005 11:15:42 ks>
   6  //
   7  // SOFTWARE NAME: eZ publish
   8  // SOFTWARE RELEASE: 3.9.0
   9  // BUILD VERSION: 17785
  10  // COPYRIGHT NOTICE: Copyright (C) 1999-2006 eZ systems AS
  11  // SOFTWARE LICENSE: GNU General Public License v2.0
  12  // NOTICE: >
  13  //   This program is free software; you can redistribute it and/or
  14  //   modify it under the terms of version 2.0  of the GNU General
  15  //   Public License as published by the Free Software Foundation.
  16  //
  17  //   This program is distributed in the hope that it will be useful,
  18  //   but WITHOUT ANY WARRANTY; without even the implied warranty of
  19  //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20  //   GNU General Public License for more details.
  21  //
  22  //   You should have received a copy of version 2.0 of the GNU General
  23  //   Public License along with this program; if not, write to the Free
  24  //   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  25  //   MA 02110-1301, USA.
  26  //
  27  //
  28  
  29  /*! \file ezextensionpackagehandler.php
  30  */
  31  
  32  /*!
  33    \class eZExtensionPackageHandler ezextensionpackagehandler.php
  34    \brief Handles extenstions in the package system
  35  
  36  */
  37  
  38  include_once ( 'lib/ezxml/classes/ezxml.php' );
  39  include_once ( 'kernel/classes/ezcontentobject.php' );
  40  include_once ( 'kernel/classes/ezpackagehandler.php' );
  41  
  42  define( "EZ_PACKAGE_EXTENSION_ERROR_EXISTS", 1 );
  43  
  44  define( "EZ_PACKAGE_EXTENSION_REPLACE", 1 );
  45  define( "EZ_PACKAGE_EXTENSION_SKIP", 2 );
  46  
  47  
  48  class eZExtensionPackageHandler extends eZPackageHandler
  49  {
  50      /*!
  51       Constructor
  52      */
  53      function eZExtensionPackageHandler()
  54      {
  55          $this->eZPackageHandler( 'ezextension',
  56                                   array( 'extract-install-content' => true ) );
  57      }
  58  
  59      /*!
  60       \reimp
  61       Returns an explanation for the extension install item.
  62      */
  63      function explainInstallItem( &$package, $installItem )
  64      {
  65          if ( $installItem['filename'] )
  66          {
  67              $filename = $installItem['filename'];
  68              $subdirectory = $installItem['sub-directory'];
  69              if ( $subdirectory )
  70                  $filepath = $subdirectory . '/' . $filename . '.xml';
  71              else
  72                  $filepath = $filename . '.xml';
  73  
  74              $filepath = $package->path() . '/' . $filepath;
  75  
  76              $dom =& $package->fetchDOMFromFile( $filepath );
  77              if ( $dom )
  78              {
  79                  $root =& $dom->root();
  80                  $extensionName = $root->getAttribute( 'name' );
  81                  return array( 'description' => ezi18n( 'kernel/package', 'Extension \'%extensionname\'', false,
  82                                                         array( '%extensionname' => $extensionName ) ) );
  83              }
  84          }
  85      }
  86  
  87      /*!
  88       \reimp
  89       Uninstalls extensions.
  90      */
  91      function uninstall( &$package, $installType, $parameters,
  92                        $name, $os, $filename, $subdirectory,
  93                        &$content, &$installParameters,
  94                        &$installData )
  95      {
  96          $extensionName = $content->getAttribute( 'name' );
  97          
  98          $siteINI = eZINI::instance();
  99          $extensionDir = $siteINI->variable( 'ExtensionSettings', 'ExtensionDirectory' ) . '/' . $extensionName;
 100  
 101          // TODO: don't delete modified files?
 102  
 103          if ( file_exists( $extensionDir ) )
 104              eZDir::recursiveDelete( $extensionDir );
 105  
 106          // Deactivate extension
 107          $siteINI = eZINI::instance( 'site.ini', 'settings/override', null, null, false, true );
 108          $selectedExtensions = $siteINI->variable( 'ExtensionSettings', "ActiveExtensions" );
 109  
 110          if ( in_array( $extensionName, $selectedExtensions ) )
 111          {
 112              $extensionsFlipped = array_flip( $selectedExtensions );
 113  
 114              $extKey = $extensionsFlipped[$extensionName];
 115              unset( $selectedExtensions[$extKey] );
 116  
 117              $siteINI->setVariable( "ExtensionSettings", "ActiveExtensions", $selectedExtensions );
 118              $siteINI->save( 'site.ini.append', '.php', false, false );
 119          }
 120  
 121          return true;
 122      }
 123  
 124      /*!
 125       \reimp
 126       Copy extension from the package to extension repository.
 127      */
 128      function install( &$package, $installType, $parameters,
 129                        $name, $os, $filename, $subdirectory,
 130                        &$content, &$installParameters,
 131                        &$installData )
 132      {
 133          //$this->Package =& $package;
 134          
 135          $extensionName = $content->getAttribute( 'name' );
 136          
 137          $siteINI = eZINI::instance();
 138          $extensionDir = $siteINI->variable( 'ExtensionSettings', 'ExtensionDirectory' ) . '/' . $extensionName;
 139          $packageExtensionDir = $package->path() . '/' . $parameters['sub-directory'] . '/' . $extensionName;
 140  
 141          // Error: extension already exists.
 142          if ( file_exists( $extensionDir ) )
 143          {
 144              $description = ezi18n( 'kernel/package', "Extension '%extensionname' already exists.",
 145                                     false, array( '%extensionname' => $extensionName ) );
 146              $choosenAction = $this->errorChoosenAction( EZ_PACKAGE_EXTENSION_ERROR_EXISTS,
 147                                                          $installParameters, $description );
 148              switch( $choosenAction )
 149              {
 150              case EZ_PACKAGE_EXTENSION_SKIP:
 151                  return true;
 152          
 153              case EZ_PACKAGE_NON_INTERACTIVE:
 154              case EZ_PACKAGE_EXTENSION_REPLACE:
 155                  eZDir::recursiveDelete( $extensionDir );
 156                  break;
 157  
 158              default:
 159                  $installParameters['error'] = array( 'error_code' => EZ_PACKAGE_EXTENSION_ERROR_EXISTS,
 160                                                       'element_id' => $extensionName,
 161                                                       'description' => $description,
 162                                                       'actions' => array( EZ_PACKAGE_EXTENSION_REPLACE => ezi18n( 'kernel/package', "Replace extension" ),
 163                                                                           EZ_PACKAGE_EXTENSION_SKIP => ezi18n( 'kernel/package', 'Skip' ) ) );
 164                  return false;
 165              }
 166          }
 167  
 168          eZDir::mkdir( $extensionDir, eZDir::directoryPermission(), true );
 169          
 170          include_once ( 'lib/ezfile/classes/ezfilehandler.php' );
 171  
 172          $files = $content->Children;
 173          foreach( $files as $file )
 174          {
 175              $path = $file->getAttribute( 'path' );
 176              $destPath = $extensionDir . $path . '/' . $file->getAttribute( 'name' );
 177  
 178              if ( $file->getAttribute( 'type' ) == 'dir' )
 179              {
 180                  eZDir::mkdir( $destPath, eZDir::directoryPermission() );
 181              }
 182              else
 183              {
 184                  $sourcePath = $packageExtensionDir . $path . '/' . $file->getAttribute( 'name' );
 185                  eZFileHandler::copy( $sourcePath, $destPath );
 186              }
 187          }
 188  
 189          // Activate extension
 190          $siteINI = eZINI::instance( 'site.ini', 'settings/override', null, null, false, true );
 191  
 192          if ( $siteINI->hasVariable( 'ExtensionSettings', "ActiveExtensions" ) )
 193          {
 194              $selectedExtensions = $siteINI->variable( 'ExtensionSettings', "ActiveExtensions" );
 195          }
 196          else
 197          {
 198              $selectedExtensions = array();
 199          }
 200  
 201          if ( !in_array( $extensionName, $selectedExtensions ) )
 202          {
 203              $selectedExtensions[] = $extensionName;
 204              $siteINI->setVariable( "ExtensionSettings", "ActiveExtensions", $selectedExtensions );
 205              $siteINI->save( 'site.ini.append', '.php', false, false );
 206          }
 207          return true;
 208      }
 209  
 210      var $Package = null;
 211  }
 212  
 213  ?>


Généré le : Sat Feb 24 10:30:04 2007 par Balluche grâce à PHPXref 0.7