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_Frontend, the singleton-based frontend for user input/output
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: Frontend.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
/**
18
 * Include error handling
19
 */
20
//require_once 'PEAR.php';
21
 
22
/**
23
 * Which user interface class is being used.
24
 * @var string class name
25
 */
26
$GLOBALS['_PEAR_FRONTEND_CLASS'] = 'PEAR_Frontend_CLI';
27
 
28
/**
29
 * Instance of $_PEAR_Command_uiclass.
30
 * @var object
31
 */
32
$GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
33
 
34
/**
35
 * Singleton-based frontend for PEAR user input/output
36
 *
37
 * @category   pear
38
 * @package    PEAR
39
 * @author     Greg Beaver <cellog@php.net>
40
 * @copyright  1997-2009 The Authors
41
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
42
 * @version    Release: 1.9.4
43
 * @link       http://pear.php.net/package/PEAR
44
 * @since      Class available since Release 1.4.0a1
45
 */
46
class PEAR_Frontend extends PEAR
47
{
48
    /**
49
     * Retrieve the frontend object
50
     * @return PEAR_Frontend_CLI|PEAR_Frontend_Web|PEAR_Frontend_Gtk
51
     * @static
52
     */
53
    function &singleton($type = null)
54
    {
55
        if ($type === null) {
56
            if (!isset($GLOBALS['_PEAR_FRONTEND_SINGLETON'])) {
57
                $a = false;
58
                return $a;
59
            }
60
            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
61
        }
62
 
63
        $a = PEAR_Frontend::setFrontendClass($type);
64
        return $a;
65
    }
66
 
67
    /**
68
     * Set the frontend class that will be used by calls to {@link singleton()}
69
     *
70
     * Frontends are expected to conform to the PEAR naming standard of
71
     * _ => DIRECTORY_SEPARATOR (PEAR_Frontend_CLI is in PEAR/Frontend/CLI.php)
72
     * @param string $uiclass full class name
73
     * @return PEAR_Frontend
74
     * @static
75
     */
76
    function &setFrontendClass($uiclass)
77
    {
78
        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
79
              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], $uiclass)) {
80
            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
81
        }
82
 
83
        if (!class_exists($uiclass)) {
84
            $file = str_replace('_', '/', $uiclass) . '.php';
85
            if (PEAR_Frontend::isIncludeable($file)) {
86
                include_once $file;
87
            }
88
        }
89
 
90
        if (class_exists($uiclass)) {
91
            $obj = &new $uiclass;
92
            // quick test to see if this class implements a few of the most
93
            // important frontend methods
94
            if (is_a($obj, 'PEAR_Frontend')) {
95
                $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$obj;
96
                $GLOBALS['_PEAR_FRONTEND_CLASS'] = $uiclass;
97
                return $obj;
98
            }
99
 
100
            $err = PEAR::raiseError("not a frontend class: $uiclass");
101
            return $err;
102
        }
103
 
104
        $err = PEAR::raiseError("no such class: $uiclass");
105
        return $err;
106
    }
107
 
108
    /**
109
     * Set the frontend class that will be used by calls to {@link singleton()}
110
     *
111
     * Frontends are expected to be a descendant of PEAR_Frontend
112
     * @param PEAR_Frontend
113
     * @return PEAR_Frontend
114
     * @static
115
     */
116
    function &setFrontendObject($uiobject)
117
    {
118
        if (is_object($GLOBALS['_PEAR_FRONTEND_SINGLETON']) &&
119
              is_a($GLOBALS['_PEAR_FRONTEND_SINGLETON'], get_class($uiobject))) {
120
            return $GLOBALS['_PEAR_FRONTEND_SINGLETON'];
121
        }
122
 
123
        if (!is_a($uiobject, 'PEAR_Frontend')) {
124
            $err = PEAR::raiseError('not a valid frontend class: (' .
125
                get_class($uiobject) . ')');
126
            return $err;
127
        }
128
 
129
        $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = &$uiobject;
130
        $GLOBALS['_PEAR_FRONTEND_CLASS'] = get_class($uiobject);
131
        return $uiobject;
132
    }
133
 
134
    /**
135
     * @param string $path relative or absolute include path
136
     * @return boolean
137
     * @static
138
     */
139
    function isIncludeable($path)
140
    {
141
        if (file_exists($path) && is_readable($path)) {
142
            return true;
143
        }
144
 
145
        $fp = @fopen($path, 'r', true);
146
        if ($fp) {
147
            fclose($fp);
148
            return true;
149
        }
150
 
151
        return false;
152
    }
153
 
154
    /**
155
     * @param PEAR_Config
156
     */
157
    function setConfig(&$config)
158
    {
159
    }
160
 
161
    /**
162
     * This can be overridden to allow session-based temporary file management
163
     *
164
     * By default, all files are deleted at the end of a session.  The web installer
165
     * needs to be able to sustain a list over many sessions in order to support
166
     * user interaction with install scripts
167
     */
168
    function addTempFile($file)
169
    {
170
        $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
171
    }
172
 
173
    /**
174
     * Log an action
175
     *
176
     * @param string $msg the message to log
177
     * @param boolean $append_crlf
178
     * @return boolean true
179
     * @abstract
180
     */
181
    function log($msg, $append_crlf = true)
182
    {
183
    }
184
 
185
    /**
186
     * Run a post-installation script
187
     *
188
     * @param array $scripts array of post-install scripts
189
     * @abstract
190
     */
191
    function runPostinstallScripts(&$scripts)
192
    {
193
    }
194
 
195
    /**
196
     * Display human-friendly output formatted depending on the
197
     * $command parameter.
198
     *
199
     * This should be able to handle basic output data with no command
200
     * @param mixed  $data    data structure containing the information to display
201
     * @param string $command command from which this method was called
202
     * @abstract
203
     */
204
    function outputData($data, $command = '_default')
205
    {
206
    }
207
 
208
    /**
209
     * Display a modal form dialog and return the given input
210
     *
211
     * A frontend that requires multiple requests to retrieve and process
212
     * data must take these needs into account, and implement the request
213
     * handling code.
214
     * @param string $command  command from which this method was called
215
     * @param array  $prompts  associative array. keys are the input field names
216
     *                         and values are the description
217
     * @param array  $types    array of input field types (text, password,
218
     *                         etc.) keys have to be the same like in $prompts
219
     * @param array  $defaults array of default values. again keys have
220
     *                         to be the same like in $prompts.  Do not depend
221
     *                         on a default value being set.
222
     * @return array input sent by the user
223
     * @abstract
224
     */
225
    function userDialog($command, $prompts, $types = array(), $defaults = array())
226
    {
227
    }
228
}