Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 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
class 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
?>