Subversion Repositories Applications.gtt

Rev

Rev 94 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
94 jpm 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
187 mathias 11
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
94 jpm 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
187 mathias 25
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
26
 * @version    Release: 1.10.1
94 jpm 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
     */
187 mathias 41
    function __construct(&$config)
94 jpm 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
}
187 mathias 173
?>