source: trunk/library/PEAR/PEAR/Task/Common.php @ 5146

Revision 5146, 6.0 KB checked in by wmerlotto, 12 years ago (diff)

Ticket #2305 - Enviando alteracoes, desenvolvidas internamente na Prognus. Library: adicionando arquivos.

Line 
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 */
19define('PEAR_TASK_ERROR_NOATTRIBS', 1);
20define('PEAR_TASK_ERROR_MISSING_ATTRIB', 2);
21define('PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE', 3);
22define('PEAR_TASK_ERROR_INVALID', 4);
23/**#@-*/
24define('PEAR_TASK_PACKAGE', 1);
25define('PEAR_TASK_INSTALL', 2);
26define('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 */
55class PEAR_Task_Common
56{
57    /**
58     * Valid types for this version are 'simple' and 'multiple'
59     *
60     * - simple tasks operate on the contents of a file and write out changes to disk
61     * - multiple tasks operate on the contents of many files and write out the
62     *   changes directly to disk
63     *
64     * Child task classes must override this property.
65     * @access protected
66     */
67    var $type = 'simple';
68    /**
69     * Determines which install phase this task is executed under
70     */
71    var $phase = PEAR_TASK_INSTALL;
72    /**
73     * @access protected
74     */
75    var $config;
76    /**
77     * @access protected
78     */
79    var $registry;
80    /**
81     * @access protected
82     */
83    var $logger;
84    /**
85     * @access protected
86     */
87    var $installphase;
88    /**
89     * @param PEAR_Config
90     * @param PEAR_Common
91     */
92    function PEAR_Task_Common(&$config, &$logger, $phase)
93    {
94        $this->config = &$config;
95        $this->registry = &$config->getRegistry();
96        $this->logger = &$logger;
97        $this->installphase = $phase;
98        if ($this->type == 'multiple') {
99            $GLOBALS['_PEAR_TASK_POSTINSTANCES'][get_class($this)][] = &$this;
100        }
101    }
102
103    /**
104     * Validate the basic contents of a task tag.
105     * @param PEAR_PackageFile_v2
106     * @param array
107     * @param PEAR_Config
108     * @param array the entire parsed <file> tag
109     * @return true|array On error, return an array in format:
110     *    array(PEAR_TASK_ERROR_???[, param1][, param2][, ...])
111     *
112     *    For PEAR_TASK_ERROR_MISSING_ATTRIB, pass the attribute name in
113     *    For PEAR_TASK_ERROR_WRONG_ATTRIB_VALUE, pass the attribute name and an array
114     *    of legal values in
115     * @static
116     * @abstract
117     */
118    function validateXml($pkg, $xml, $config, $fileXml)
119    {
120    }
121
122    /**
123     * Initialize a task instance with the parameters
124     * @param array raw, parsed xml
125     * @param array attributes from the <file> tag containing this task
126     * @param string|null last installed version of this package
127     * @abstract
128     */
129    function init($xml, $fileAttributes, $lastVersion)
130    {
131    }
132
133    /**
134     * Begin a task processing session.  All multiple tasks will be processed after each file
135     * has been successfully installed, all simple tasks should perform their task here and
136     * return any errors using the custom throwError() method to allow forward compatibility
137     *
138     * This method MUST NOT write out any changes to disk
139     * @param PEAR_PackageFile_v2
140     * @param string file contents
141     * @param string the eventual final file location (informational only)
142     * @return string|false|PEAR_Error false to skip this file, PEAR_Error to fail
143     *         (use $this->throwError), otherwise return the new contents
144     * @abstract
145     */
146    function startSession($pkg, $contents, $dest)
147    {
148    }
149
150    /**
151     * This method is used to process each of the tasks for a particular multiple class
152     * type.  Simple tasks need not implement this method.
153     * @param array an array of tasks
154     * @access protected
155     * @static
156     * @abstract
157     */
158    function run($tasks)
159    {
160    }
161
162    /**
163     * @static
164     * @final
165     */
166    function hasPostinstallTasks()
167    {
168        return isset($GLOBALS['_PEAR_TASK_POSTINSTANCES']);
169    }
170
171    /**
172     * @static
173     * @final
174     */
175     function runPostinstallTasks()
176     {
177         foreach ($GLOBALS['_PEAR_TASK_POSTINSTANCES'] as $class => $tasks) {
178             $err = call_user_func(array($class, 'run'),
179                  $GLOBALS['_PEAR_TASK_POSTINSTANCES'][$class]);
180             if ($err) {
181                 return PEAR_Task_Common::throwError($err);
182             }
183         }
184         unset($GLOBALS['_PEAR_TASK_POSTINSTANCES']);
185    }
186
187    /**
188     * Determines whether a role is a script
189     * @return bool
190     */
191    function isScript()
192    {
193        return $this->type == 'script';
194    }
195
196    function throwError($msg, $code = -1)
197    {
198        include_once 'PEAR.php';
199        return PEAR::raiseError($msg, $code);
200    }
201}
202?>
Note: See TracBrowser for help on using the repository browser.