Вход Регистрация
Файл: mp3/MP3/PEAR/Task/Common.php
Строк: 204
<?php
/**
 * PEAR_Task_Common, base class for installer tasks
 *
 * PHP versions 4 and 5
 *
 * @category   pear
 * @package    PEAR
 * @author     Greg Beaver <cellog@php.net>
 * @copyright  1997-2009 The Authors
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
 * @version    CVS: $Id: Common.php 313023 2011-07-06 19:17:11Z dufuz $
 * @link       http://pear.php.net/package/PEAR
 * @since      File available since Release 1.4.0a1
 */
/**#@+
 * Error codes for task validation routines
 */
define('PEAR_TASK_ERROR_NOATTRIBS'1);
define('PEAR_TASK_ERROR_MISSING_ATTRIB'2);
define('PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE'3);
define('PEAR_TASK_ERROR_INVALID'4);
/**#@-*/
define('PEAR_TASK_PACKAGE'1);
define('PEAR_TASK_INSTALL'2);
define('PEAR_TASK_PACKAGEANDINSTALL'3);
/**
 * A task is an operation that manipulates the contents of a file.
 *
 * Simple tasks operate on 1 file.  Multiple tasks are executed after all files have been
 * processed and installed, and are designed to operate on all files containing the task.
 * The Post-install script task simply takes advantage of the fact that it will be run
 * after installation, replace is a simple task.
 *
 * Combining tasks is possible, but ordering is significant.
 *
 * <file name="test.php" role="php">
 *  <tasks:replace from="@data-dir@" to="data_dir" type="pear-config"/>
 *  <tasks:postinstallscript/>
 * </file>
 *
 * This will first replace any instance of @data-dir@ in the test.php file
 * with the path to the current data directory.  Then, it will include the
 * test.php file and run the script it contains to configure the package post-installation.
 * @category   pear
 * @package    PEAR
 * @author     Greg Beaver <cellog@php.net>
 * @copyright  1997-2009 The Authors
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
 * @version    Release: 1.9.4
 * @link       http://pear.php.net/package/PEAR
 * @since      Class available since Release 1.4.0a1
 * @abstract
 */
class PEAR_Task_Common
{
    
/**
     * Valid types for this version are 'simple' and 'multiple'
     *
     * - simple tasks operate on the contents of a file and write out changes to disk
     * - multiple tasks operate on the contents of many files and write out the
     *   changes directly to disk
     *
     * Child task classes must override this property.
     * @access protected
     */
    
var $type 'simple';
    
/**
     * Determines which install phase this task is executed under
     */
    
var $phase PEAR_TASK_INSTALL;
    
/**
     * @access protected
     */
    
var $config;
    
/**
     * @access protected
     */
    
var $registry;
    
/**
     * @access protected
     */
    
var $logger;
    
/**
     * @access protected
     */
    
var $installphase;
    
/**
     * @param PEAR_Config
     * @param PEAR_Common
     */
    
function PEAR_Task_Common(&$config, &$logger$phase)
    {
        
$this->config = &$config;
        
$this->registry = &$config->getRegistry();
        
$this->logger = &$logger;
        
$this->installphase $phase;
        if (
$this->type == 'multiple') {
            
$GLOBALS['_PEAR_TASK_POSTINSTANCES'][get_class($this)][] = &$this;
        }
    }

    
/**
     * Validate the basic contents of a task tag.
     * @param PEAR_PackageFile_v2
     * @param array
     * @param PEAR_Config
     * @param array the entire parsed <file> tag
     * @return true|array On error, return an array in format:
     *    array(PEAR_TASK_ERROR_???[, param1][, param2][, ...])
     *
     *    For PEAR_TASK_ERROR_MISSING_ATTRIB, pass the attribute name in
     *    For PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE, pass the attribute name and an array
     *    of legal values in
     * @static
     * @abstract
     */
    
function validateXml($pkg$xml$config$fileXml)
    {
    }

    
/**
     * Initialize a task instance with the parameters
     * @param array raw, parsed xml
     * @param array attributes from the <file> tag containing this task
     * @param string|null last installed version of this package
     * @abstract
     */
    
function init($xml$fileAttributes$lastVersion)
    {
    }

    
/**
     * Begin a task processing session.  All multiple tasks will be processed after each file
     * has been successfully installed, all simple tasks should perform their task here and
     * return any errors using the custom throwError() method to allow forward compatibility
     *
     * This method MUST NOT write out any changes to disk
     * @param PEAR_PackageFile_v2
     * @param string file contents
     * @param string the eventual final file location (informational only)
     * @return string|false|PEAR_Error false to skip this file, PEAR_Error to fail
     *         (use $this->throwError), otherwise return the new contents
     * @abstract
     */
    
function startSession($pkg$contents$dest)
    {
    }

    
/**
     * This method is used to process each of the tasks for a particular multiple class
     * type.  Simple tasks need not implement this method.
     * @param array an array of tasks
     * @access protected
     * @static
     * @abstract
     */
    
function run($tasks)
    {
    }

    
/**
     * @static
     * @final
     */
    
function hasPostinstallTasks()
    {
        return isset(
$GLOBALS['_PEAR_TASK_POSTINSTANCES']);
    }

    
/**
     * @static
     * @final
     */
     
function runPostinstallTasks()
     {
         foreach (
$GLOBALS['_PEAR_TASK_POSTINSTANCES'] as $class => $tasks) {
             
$err call_user_func(array($class'run'),
                  
$GLOBALS['_PEAR_TASK_POSTINSTANCES'][$class]);
             if (
$err) {
                 return 
PEAR_Task_Common::throwError($err);
             }
         }
         unset(
$GLOBALS['_PEAR_TASK_POSTINSTANCES']);
    }

    
/**
     * Determines whether a role is a script
     * @return bool
     */
    
function isScript()
    {
        return 
$this->type == 'script';
    }

    function 
throwError($msg$code = -1)
    {
        include_once 
'PEAR.php';
        return 
PEAR::raiseError($msg$code);
    }
}
?>
Онлайн: 0
Реклама