PEAR
[ class tree: PEAR ] [ index: PEAR ] [ all elements ]

Source for file Common.php

Documentation is available at Common.php

  1. <?php
  2. /**
  3.  * PEAR_Task_Common, base class for installer tasks
  4.  *
  5.  * PHP versions 4 and 5
  6.  *
  7.  * @category   pear
  8.  * @package    PEAR
  9.  * @author     Greg Beaver <cellog@php.net>
  10.  * @copyright  1997-2009 The Authors
  11.  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
  12.  * @version    CVS: $Id: Common.php 313023 2011-07-06 19:17:11Z dufuz $
  13.  * @link       http://pear.php.net/package/PEAR
  14.  * @since      File available since Release 1.4.0a1
  15.  */
  16. /**#@+
  17.  * Error codes for task validation routines
  18.  */
  19. define('PEAR_TASK_ERROR_NOATTRIBS'1);
  20. define('PEAR_TASK_ERROR_MISSING_ATTRIB'2);
  21. define('PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE'3);
  22. define('PEAR_TASK_ERROR_INVALID'4);
  23. /**#@-*/
  24. define('PEAR_TASK_PACKAGE'1);
  25. define('PEAR_TASK_INSTALL'2);
  26. define('PEAR_TASK_PACKAGEANDINSTALL'3);
  27. /**
  28.  * A task is an operation that manipulates the contents of a file.
  29.  *
  30.  * Simple tasks operate on 1 file.  Multiple tasks are executed after all files have been
  31.  * processed and installed, and are designed to operate on all files containing the task.
  32.  * The Post-install script task simply takes advantage of the fact that it will be run
  33.  * after installation, replace is a simple task.
  34.  *
  35.  * Combining tasks is possible, but ordering is significant.
  36.  *
  37.  * <file name="test.php" role="php">
  38.  *  <tasks:replace from="@data-dir@" to="data_dir" type="pear-config"/>
  39.  *  <tasks:postinstallscript/>
  40.  * </file>
  41.  *
  42.  * This will first replace any instance of @data-dir@ in the test.php file
  43.  * with the path to the current data directory.  Then, it will include the
  44.  * test.php file and run the script it contains to configure the package post-installation.
  45.  * @category   pear
  46.  * @package    PEAR
  47.  * @author     Greg Beaver <cellog@php.net>
  48.  * @copyright  1997-2009 The Authors
  49.  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
  50.  * @version    Release: 1.9.4
  51.  * @link       http://pear.php.net/package/PEAR
  52.  * @since      Class available since Release 1.4.0a1
  53.  * @abstract
  54.  */
  55. {
  56.     /**
  57.      * Valid types for this version are 'simple' and 'multiple'
  58.      *
  59.      * - simple tasks operate on the contents of a file and write out changes to disk
  60.      * - multiple tasks operate on the contents of many files and write out the
  61.      *   changes directly to disk
  62.      *
  63.      * Child task classes must override this property.
  64.      * @access protected
  65.      */
  66.     var $type = 'simple';
  67.     /**
  68.      * Determines which install phase this task is executed under
  69.      */
  70.     var $phase = PEAR_TASK_INSTALL;
  71.     /**
  72.      * @access protected
  73.      */
  74.     var $config;
  75.     /**
  76.      * @access protected
  77.      */
  78.     var $registry;
  79.     /**
  80.      * @access protected
  81.      */
  82.     var $logger;
  83.     /**
  84.      * @access protected
  85.      */
  86.     var $installphase;
  87.     /**
  88.      * @param PEAR_Config 
  89.      * @param PEAR_Common 
  90.      */
  91.     function PEAR_Task_Common(&$config&$logger$phase)
  92.     {
  93.         $this->config = &$config;
  94.         $this->registry = &$config->getRegistry();
  95.         $this->logger = &$logger;
  96.         $this->installphase = $phase;
  97.         if ($this->type == 'multiple'{
  98.             $GLOBALS['_PEAR_TASK_POSTINSTANCES'][get_class($this)][&$this;
  99.         }
  100.     }
  101.  
  102.     /**
  103.      * Validate the basic contents of a task tag.
  104.      * @param PEAR_PackageFile_v2 
  105.      * @param array 
  106.      * @param PEAR_Config 
  107.      * @param array the entire parsed <file> tag
  108.      * @return true|arrayOn error, return an array in format:
  109.      *     array(PEAR_TASK_ERROR_???[, param1][, param2][, ...])
  110.      *
  111.      *     For PEAR_TASK_ERROR_MISSING_ATTRIB, pass the attribute name in
  112.      *     For PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE, pass the attribute name and an array
  113.      *     of legal values in
  114.      * @static
  115.      * @abstract
  116.      */
  117.     function validateXml($pkg$xml$config$fileXml)
  118.     {
  119.     }
  120.  
  121.     /**
  122.      * Initialize a task instance with the parameters
  123.      * @param array raw, parsed xml
  124.      * @param array attributes from the <file> tag containing this task
  125.      * @param string|nulllast installed version of this package
  126.      * @abstract
  127.      */
  128.     function init($xml$fileAttributes$lastVersion)
  129.     {
  130.     }
  131.  
  132.     /**
  133.      * Begin a task processing session.  All multiple tasks will be processed after each file
  134.      * has been successfully installed, all simple tasks should perform their task here and
  135.      * return any errors using the custom throwError() method to allow forward compatibility
  136.      *
  137.      * This method MUST NOT write out any changes to disk
  138.      * @param PEAR_PackageFile_v2 
  139.      * @param string file contents
  140.      * @param string the eventual final file location (informational only)
  141.      * @return string|false|PEAR_Errorfalse to skip this file, PEAR_Error to fail
  142.      *          (use $this->throwError), otherwise return the new contents
  143.      * @abstract
  144.      */
  145.     function startSession($pkg$contents$dest)
  146.     {
  147.     }
  148.  
  149.     /**
  150.      * This method is used to process each of the tasks for a particular multiple class
  151.      * type.  Simple tasks need not implement this method.
  152.      * @param array an array of tasks
  153.      * @access protected
  154.      * @static
  155.      * @abstract
  156.      */
  157.     function run($tasks)
  158.     {
  159.     }
  160.  
  161.     /**
  162.      * @static
  163.      * @final
  164.      */
  165.     function hasPostinstallTasks()
  166.     {
  167.         return isset($GLOBALS['_PEAR_TASK_POSTINSTANCES']);
  168.     }
  169.  
  170.     /**
  171.      * @static
  172.      * @final
  173.      */
  174.      function runPostinstallTasks()
  175.      {
  176.          foreach ($GLOBALS['_PEAR_TASK_POSTINSTANCES'as $class => $tasks{
  177.              $err call_user_func(array($class'run'),
  178.                   $GLOBALS['_PEAR_TASK_POSTINSTANCES'][$class]);
  179.              if ($err{
  180.                  return PEAR_Task_Common::throwError($err);
  181.              }
  182.          }
  183.          unset($GLOBALS['_PEAR_TASK_POSTINSTANCES']);
  184.     }
  185.  
  186.     /**
  187.      * Determines whether a role is a script
  188.      * @return bool 
  189.      */
  190.     function isScript()
  191.     {
  192.         return $this->type == 'script';
  193.     }
  194.  
  195.     function throwError($msg$code = -1)
  196.     {
  197.         include_once 'PEAR.php';
  198.         return PEAR::raiseError($msg$code);
  199.     }
  200. }
  201. ?>

Documentation generated on Wed, 06 Jul 2011 23:30:35 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.