Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

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