Updated PEAR and PEAR packages.
[timetracker.git] / WEB-INF / lib / pear / PEAR / Installer / Role / Common.php
1 <?php
2 /**
3  * Base class for all installation roles.
4  *
5  * PHP versions 4 and 5
6  *
7  * @category   pear
8  * @package    PEAR
9  * @author     Greg Beaver <cellog@php.net>
10  * @copyright  1997-2006 The PHP Group
11  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
12  * @link       http://pear.php.net/package/PEAR
13  * @since      File available since Release 1.4.0a1
14  */
15 /**
16  * Base class for all installation roles.
17  *
18  * This class allows extensibility of file roles.  Packages with complex
19  * customization can now provide custom file roles along with the possibility of
20  * adding configuration values to match.
21  * @category   pear
22  * @package    PEAR
23  * @author     Greg Beaver <cellog@php.net>
24  * @copyright  1997-2006 The PHP Group
25  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
26  * @version    Release: 1.10.1
27  * @link       http://pear.php.net/package/PEAR
28  * @since      Class available since Release 1.4.0a1
29  */
30 class PEAR_Installer_Role_Common
31 {
32     /**
33      * @var PEAR_Config
34      * @access protected
35      */
36     var $config;
37
38     /**
39      * @param PEAR_Config
40      */
41     function __construct(&$config)
42     {
43         $this->config = $config;
44     }
45
46     /**
47      * Retrieve configuration information about a file role from its XML info
48      *
49      * @param string $role Role Classname, as in "PEAR_Installer_Role_Data"
50      * @return array
51      */
52     function getInfo($role)
53     {
54         if (empty($GLOBALS['_PEAR_INSTALLER_ROLES'][$role])) {
55             return PEAR::raiseError('Unknown Role class: "' . $role . '"');
56         }
57         return $GLOBALS['_PEAR_INSTALLER_ROLES'][$role];
58     }
59
60     /**
61      * This is called for each file to set up the directories and files
62      * @param PEAR_PackageFile_v1|PEAR_PackageFile_v2
63      * @param array attributes from the <file> tag
64      * @param string file name
65      * @return array an array consisting of:
66      *
67      *    1 the original, pre-baseinstalldir installation directory
68      *    2 the final installation directory
69      *    3 the full path to the final location of the file
70      *    4 the location of the pre-installation file
71      */
72     function processInstallation($pkg, $atts, $file, $tmp_path, $layer = null)
73     {
74         $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
75             ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
76         if (PEAR::isError($roleInfo)) {
77             return $roleInfo;
78         }
79         if (!$roleInfo['locationconfig']) {
80             return false;
81         }
82         if ($roleInfo['honorsbaseinstall']) {
83             $dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'], $layer,
84                 $pkg->getChannel());
85             if (!empty($atts['baseinstalldir'])) {
86                 $dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
87             }
88         } elseif ($roleInfo['unusualbaseinstall']) {
89             $dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'],
90                     $layer, $pkg->getChannel()) . DIRECTORY_SEPARATOR . $pkg->getPackage();
91             if (!empty($atts['baseinstalldir'])) {
92                 $dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
93             }
94         } else {
95             $dest_dir = $save_destdir = $this->config->get($roleInfo['locationconfig'],
96                     $layer, $pkg->getChannel()) . DIRECTORY_SEPARATOR . $pkg->getPackage();
97         }
98         if (dirname($file) != '.' && empty($atts['install-as'])) {
99             $dest_dir .= DIRECTORY_SEPARATOR . dirname($file);
100         }
101         if (empty($atts['install-as'])) {
102             $dest_file = $dest_dir . DIRECTORY_SEPARATOR . basename($file);
103         } else {
104             $dest_file = $dest_dir . DIRECTORY_SEPARATOR . $atts['install-as'];
105         }
106         $orig_file = $tmp_path . DIRECTORY_SEPARATOR . $file;
107
108         // Clean up the DIRECTORY_SEPARATOR mess
109         $ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
110         
111         list($dest_dir, $dest_file, $orig_file) = preg_replace(array('!\\\\+!', '!/!', "!$ds2+!"),
112                                                     array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR,
113                                                           DIRECTORY_SEPARATOR),
114                                                     array($dest_dir, $dest_file, $orig_file));
115         return array($save_destdir, $dest_dir, $dest_file, $orig_file);
116     }
117
118     /**
119      * Get the name of the configuration variable that specifies the location of this file
120      * @return string|false
121      */
122     function getLocationConfig()
123     {
124         $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
125             ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
126         if (PEAR::isError($roleInfo)) {
127             return $roleInfo;
128         }
129         return $roleInfo['locationconfig'];
130     }
131
132     /**
133      * Do any unusual setup here
134      * @param PEAR_Installer
135      * @param PEAR_PackageFile_v2
136      * @param array file attributes
137      * @param string file name
138      */
139     function setup(&$installer, $pkg, $atts, $file)
140     {
141     }
142
143     function isExecutable()
144     {
145         $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
146             ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
147         if (PEAR::isError($roleInfo)) {
148             return $roleInfo;
149         }
150         return $roleInfo['executable'];
151     }
152
153     function isInstallable()
154     {
155         $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
156             ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
157         if (PEAR::isError($roleInfo)) {
158             return $roleInfo;
159         }
160         return $roleInfo['installable'];
161     }
162
163     function isExtension()
164     {
165         $roleInfo = PEAR_Installer_Role_Common::getInfo('PEAR_Installer_Role_' . 
166             ucfirst(str_replace('pear_installer_role_', '', strtolower(get_class($this)))));
167         if (PEAR::isError($roleInfo)) {
168             return $roleInfo;
169         }
170         return $roleInfo['phpextension'];
171     }
172 }
173 ?>