Subversion Repositories Applications.gtt

Rev

Rev 94 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 94 Rev 187
Line 2... Line 2...
2
/**
2
/**
3
 * PEAR_REST_11 - implement faster list-all/remote-list command
3
 * PEAR_REST_11 - implement faster list-all/remote-list command
4
 *
4
 *
5
 * PHP versions 4 and 5
5
 * PHP versions 4 and 5
6
 *
6
 *
7
 * LICENSE: This source file is subject to version 3.0 of the PHP license
-
 
8
 * that is available through the world-wide-web at the following URI:
-
 
9
 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
-
 
10
 * the PHP License and are unable to obtain it through the web, please
-
 
11
 * send a note to license@php.net so we can mail you a copy immediately.
-
 
12
 *
-
 
13
 * @category   pear
7
 * @category   pear
14
 * @package    PEAR
8
 * @package    PEAR
15
 * @author     Greg Beaver <cellog@php.net>
9
 * @author     Greg Beaver <cellog@php.net>
16
 * @copyright  1997-2006 The PHP Group
10
 * @copyright  1997-2009 The Authors
17
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
11
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
18
 * @version    CVS: $Id: 11.php,v 1.8 2007/01/27 16:10:23 cellog Exp $
-
 
19
 * @link       http://pear.php.net/package/PEAR
12
 * @link       http://pear.php.net/package/PEAR
20
 * @since      File available since Release 1.4.3
13
 * @since      File available since Release 1.4.3
21
 */
14
 */
Line 22... Line 15...
22
 
15
 
Line 29... Line 22...
29
 * Implement REST 1.1
22
 * Implement REST 1.1
30
 *
23
 *
31
 * @category   pear
24
 * @category   pear
32
 * @package    PEAR
25
 * @package    PEAR
33
 * @author     Greg Beaver <cellog@php.net>
26
 * @author     Greg Beaver <cellog@php.net>
34
 * @copyright  1997-2006 The PHP Group
27
 * @copyright  1997-2009 The Authors
35
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
28
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
36
 * @version    Release: 1.5.1
29
 * @version    Release: 1.10.1
37
 * @link       http://pear.php.net/package/PEAR
30
 * @link       http://pear.php.net/package/PEAR
38
 * @since      Class available since Release 1.4.3
31
 * @since      Class available since Release 1.4.3
39
 */
32
 */
40
class PEAR_REST_11
33
class PEAR_REST_11
41
{
34
{
42
    /**
35
    /**
43
     * @var PEAR_REST
36
     * @var PEAR_REST
44
     */
37
     */
45
    var $_rest;
38
    var $_rest;
Line 46... Line 39...
46
 
39
 
47
    function PEAR_REST_11($config, $options = array())
40
    function __construct($config, $options = array())
48
    {
41
    {
49
        $this->_rest = &new PEAR_REST($config, $options);
42
        $this->_rest = new PEAR_REST($config, $options);
Line 50... Line 43...
50
    }
43
    }
51
 
44
 
52
    function listAll($base, $dostable, $basic = true)
45
    function listAll($base, $dostable, $basic = true, $searchpackage = false, $searchsummary = false, $channel = false)
53
    {
46
    {
54
        $categorylist = $this->_rest->retrieveData($base . 'c/categories.xml');
47
        $categorylist = $this->_rest->retrieveData($base . 'c/categories.xml', false, false, $channel);
55
        if (PEAR::isError($categorylist)) {
48
        if (PEAR::isError($categorylist)) {
-
 
49
            return $categorylist;
56
            return $categorylist;
50
        }
57
        }
51
 
58
        $ret = array();
52
        $ret = array();
59
        if (!is_array($categorylist['c']) || !isset($categorylist['c'][0])) {
53
        if (!is_array($categorylist['c']) || !isset($categorylist['c'][0])) {
-
 
54
            $categorylist['c'] = array($categorylist['c']);
60
            $categorylist['c'] = array($categorylist['c']);
55
        }
Line 61... Line 56...
61
        }
56
 
62
        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
57
        PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
63
 
58
 
64
        foreach ($categorylist['c'] as $progress => $category) {
59
        foreach ($categorylist['c'] as $progress => $category) {
Line 65... Line 60...
65
            $category = $category['_content'];
60
            $category = $category['_content'];
66
            $packagesinfo = $this->_rest->retrieveData($base .
61
            $packagesinfo = $this->_rest->retrieveData($base .
67
                'c/' . urlencode($category) . '/packagesinfo.xml');
62
                'c/' . urlencode($category) . '/packagesinfo.xml', false, false, $channel);
Line 77... Line 72...
77
            if (!is_array($packagesinfo['pi']) || !isset($packagesinfo['pi'][0])) {
72
            if (!is_array($packagesinfo['pi']) || !isset($packagesinfo['pi'][0])) {
78
                $packagesinfo['pi'] = array($packagesinfo['pi']);
73
                $packagesinfo['pi'] = array($packagesinfo['pi']);
79
            }
74
            }
Line 80... Line 75...
80
 
75
 
-
 
76
            foreach ($packagesinfo['pi'] as $packageinfo) {
-
 
77
                if (empty($packageinfo)) {
-
 
78
                    continue;
-
 
79
                }
81
            foreach ($packagesinfo['pi'] as $packageinfo) {
80
 
82
                $info = $packageinfo['p'];
81
                $info     = $packageinfo['p'];
83
                $package = $info['n'];
82
                $package  = $info['n'];
84
                $releases = isset($packageinfo['a']) ? $packageinfo['a'] : false;
83
                $releases = isset($packageinfo['a']) ? $packageinfo['a'] : false;
85
                unset($latest);
84
                unset($latest);
86
                unset($unstable);
85
                unset($unstable);
87
                unset($stable);
86
                unset($stable);
Line 88... Line 87...
88
                unset($state);
87
                unset($state);
89
 
88
 
90
                if ($releases) {
89
                if ($releases) {
91
                    if (!isset($releases['r'][0])) {
90
                    if (!isset($releases['r'][0])) {
-
 
91
                        $releases['r'] = array($releases['r']);
92
                        $releases['r'] = array($releases['r']);
92
                    }
93
                    }
93
 
94
                    foreach ($releases['r'] as $release) {
94
                    foreach ($releases['r'] as $release) {
95
                        if (!isset($latest)) {
95
                        if (!isset($latest)) {
96
                            if ($dostable && $release['s'] == 'stable') {
96
                            if ($dostable && $release['s'] == 'stable') {
Line 100... Line 100...
100
                            if (!$dostable) {
100
                            if (!$dostable) {
101
                                $latest = $release['v'];
101
                                $latest = $release['v'];
102
                                $state = $release['s'];
102
                                $state = $release['s'];
103
                            }
103
                            }
104
                        }
104
                        }
-
 
105
 
105
                        if (!isset($stable) && $release['s'] == 'stable') {
106
                        if (!isset($stable) && $release['s'] == 'stable') {
106
                            $stable = $release['v'];
107
                            $stable = $release['v'];
107
                            if (!isset($unstable)) {
108
                            if (!isset($unstable)) {
108
                                $unstable = $stable;
109
                                $unstable = $stable;
109
                            }
110
                            }
110
                        }
111
                        }
-
 
112
 
111
                        if (!isset($unstable) && $release['s'] != 'stable') {
113
                        if (!isset($unstable) && $release['s'] != 'stable') {
112
                            $latest = $unstable = $release['v'];
114
                            $unstable = $release['v'];
113
                            $state = $release['s'];
115
                            $state = $release['s'];
114
                        }
116
                        }
-
 
117
 
115
                        if (isset($latest) && !isset($state)) {
118
                        if (isset($latest) && !isset($state)) {
116
                            $state = $release['s'];
119
                            $state = $release['s'];
117
                        }
120
                        }
-
 
121
 
118
                        if (isset($latest) && isset($stable) && isset($unstable)) {
122
                        if (isset($latest) && isset($stable) && isset($unstable)) {
119
                            break;
123
                            break;
120
                        }
124
                        }
121
                    }
125
                    }
122
                }
126
                }
Line 123... Line 127...
123
 
127
 
124
                if ($basic) { // remote-list command
128
                if ($basic) { // remote-list command
125
                    if (!isset($latest)) {
129
                    if (!isset($latest)) {
126
                        $latest = false;
130
                        $latest = false;
-
 
131
                    }
127
                    }
132
 
128
                    if ($dostable) {
133
                    if ($dostable) {
129
                        // $state is not set if there are no releases
134
                        // $state is not set if there are no releases
130
                        if (isset($state) && $state == 'stable') {
135
                        if (isset($state) && $state == 'stable') {
131
                            $ret[$package] = array('stable' => $latest);
136
                            $ret[$package] = array('stable' => $latest);
132
                        } else {
137
                        } else {
133
                            $ret[$package] = array('stable' => '-n/a-');
138
                            $ret[$package] = array('stable' => '-n/a-');
134
                        }
139
                        }
135
                    } else {
140
                    } else {
136
                        $ret[$package] = array('stable' => $latest);
141
                        $ret[$package] = array('stable' => $latest);
-
 
142
                    }
137
                    }
143
 
138
                    continue;
144
                    continue;
Line 139... Line 145...
139
                }
145
                }
140
 
-
 
141
                // list-all command
146
 
142
                $deps = array();
147
                // list-all command
143
                if (!isset($unstable)) {
148
                if (!isset($unstable)) {
144
                    $unstable = false;
149
                    $unstable = false;
145
                    $state = 'stable';
150
                    $state = 'stable';
Line 152... Line 157...
152
 
157
 
153
                if (!isset($latest)) {
158
                if (!isset($latest)) {
154
                    $latest = false;
159
                    $latest = false;
Line 155... Line 160...
155
                }
160
                }
156
 
161
 
157
                if ($latest && $packageinfo['deps'] !== null) {
162
                $deps = array();
158
                    if (isset($packageinfo['deps'])) {
163
                if ($latest && isset($packageinfo['deps'])) {
-
 
164
                    if (!is_array($packageinfo['deps']) ||
159
                        if (!is_array($packageinfo['deps']) ||
165
                          !isset($packageinfo['deps'][0])
160
                              !isset($packageinfo['deps'][0])) {
-
 
161
                            $packageinfo['deps'] = array($packageinfo['deps']);
166
                    ) {
-
 
167
                        $packageinfo['deps'] = array($packageinfo['deps']);
162
                        }
168
                    }
163
                    }
169
 
164
                    $d = false;
170
                    $d = false;
165
                    foreach ($packageinfo['deps'] as $dep) {
171
                    foreach ($packageinfo['deps'] as $dep) {
166
                        if ($dep['v'] == $latest) {
172
                        if ($dep['v'] == $latest) {
167
                            $d = unserialize($dep['d']);
173
                            $d = unserialize($dep['d']);
-
 
174
                        }
168
                        }
175
                    }
169
                    }
176
 
170
                    if ($d) {
177
                    if ($d) {
171
                        if (isset($d['required'])) {
178
                        if (isset($d['required'])) {
172
                            if (!class_exists('PEAR_PackageFile_v2')) {
179
                            if (!class_exists('PEAR_PackageFile_v2')) {
-
 
180
                                require_once 'PEAR/PackageFile/v2.php';
173
                                require_once 'PEAR/PackageFile/v2.php';
181
                            }
174
                            }
182
 
175
                            if (!isset($pf)) {
183
                            if (!isset($pf)) {
-
 
184
                                $pf = new PEAR_PackageFile_v2;
176
                                $pf = new PEAR_PackageFile_v2;
185
                            }
177
                            }
186
 
178
                            $pf->setDeps($d);
187
                            $pf->setDeps($d);
179
                            $tdeps = $pf->getDeps();
188
                            $tdeps = $pf->getDeps();
180
                        } else {
189
                        } else {
-
 
190
                            $tdeps = $d;
181
                            $tdeps = $d;
191
                        }
182
                        }
192
 
183
                        foreach ($tdeps as $dep) {
193
                        foreach ($tdeps as $dep) {
184
                            if ($dep['type'] !== 'pkg') {
194
                            if ($dep['type'] !== 'pkg') {
-
 
195
                                continue;
185
                                continue;
196
                            }
186
                            }
197
 
187
                            $deps[] = $dep;
198
                            $deps[] = $dep;
188
                        }
199
                        }
Line -... Line 200...
-
 
200
                    }
-
 
201
                }
189
                    }
202
 
190
                }
203
                $info = array(
-
 
204
                    'stable'      => $latest,
191
 
205
                    'summary'     => $info['s'],
192
                $info = array('stable' => $latest, 'summary' => $info['s'],
206
                    'description' => $info['d'],
-
 
207
                    'deps'        => $deps,
-
 
208
                    'category'    => $info['ca']['_content'],
193
                    'description' =>
209
                    'unstable'    => $unstable,
194
                    $info['d'], 'deps' => $deps, 'category' => $info['ca']['_content'],
210
                    'state'       => $state
195
                    'unstable' => $unstable, 'state' => $state);
211
                );
-
 
212
                $ret[$package] = $info;
196
                $ret[$package] = $info;
213
            }
197
            }
214
        }
198
        }
215
 
Line 199... Line 216...
199
        PEAR::popErrorHandling();
216
        PEAR::popErrorHandling();
-
 
217
        return $ret;
-
 
218
    }
-
 
219
 
-
 
220
    /**
-
 
221
     * List all categories of a REST server
-
 
222
     *
-
 
223
     * @param string $base base URL of the server
-
 
224
     * @return array of categorynames
-
 
225
     */
-
 
226
    function listCategories($base, $channel = false)
-
 
227
    {
-
 
228
        $categorylist = $this->_rest->retrieveData($base . 'c/categories.xml', false, false, $channel);
-
 
229
        if (PEAR::isError($categorylist)) {
-
 
230
            return $categorylist;
-
 
231
        }
-
 
232
 
-
 
233
        if (!is_array($categorylist) || !isset($categorylist['c'])) {
-
 
234
            return array();
-
 
235
        }
-
 
236
 
-
 
237
        if (isset($categorylist['c']['_content'])) {
-
 
238
            // only 1 category
-
 
239
            $categorylist['c'] = array($categorylist['c']);
-
 
240
        }
-
 
241
 
-
 
242
        return $categorylist['c'];
-
 
243
    }
-
 
244
 
-
 
245
    /**
-
 
246
     * List packages in a category of a REST server
-
 
247
     *
-
 
248
     * @param string $base base URL of the server
-
 
249
     * @param string $category name of the category
-
 
250
     * @param boolean $info also download full package info
-
 
251
     * @return array of packagenames
-
 
252
     */
-
 
253
    function listCategory($base, $category, $info = false, $channel = false)
-
 
254
    {
-
 
255
        if ($info == false) {
-
 
256
            $url = '%s'.'c/%s/packages.xml';
-
 
257
        } else {
-
 
258
            $url = '%s'.'c/%s/packagesinfo.xml';
-
 
259
        }
-
 
260
        $url = sprintf($url,
-
 
261
                    $base,
-
 
262
                    urlencode($category));
-
 
263
 
-
 
264
        // gives '404 Not Found' error when category doesn't exist
-
 
265
        $packagelist = $this->_rest->retrieveData($url, false, false, $channel);
-
 
266
        if (PEAR::isError($packagelist)) {
-
 
267
            return $packagelist;
-
 
268
        }
-
 
269
        if (!is_array($packagelist)) {
-
 
270
            return array();
-
 
271
        }
-
 
272
 
-
 
273
        if ($info == false) {
-
 
274
            if (!isset($packagelist['p'])) {
-
 
275
                return array();
-
 
276
            }
-
 
277
            if (!is_array($packagelist['p']) ||
-
 
278
                !isset($packagelist['p'][0])) { // only 1 pkg
-
 
279
                $packagelist = array($packagelist['p']);
-
 
280
            } else {
-
 
281
                $packagelist = $packagelist['p'];
-
 
282
            }
-
 
283
            return $packagelist;
-
 
284
        }
-
 
285
 
-
 
286
        // info == true
-
 
287
        if (!isset($packagelist['pi'])) {
-
 
288
            return array();
-
 
289
        }
-
 
290
 
-
 
291
        if (!is_array($packagelist['pi']) ||
-
 
292
            !isset($packagelist['pi'][0])) { // only 1 pkg
-
 
293
            $packagelist_pre = array($packagelist['pi']);
-
 
294
        } else {
-
 
295
            $packagelist_pre = $packagelist['pi'];
-
 
296
        }
-
 
297
 
-
 
298
        $packagelist = array();
-
 
299
        foreach ($packagelist_pre as $i => $item) {
-
 
300
            // compatibility with r/<latest.txt>.xml
-
 
301
            if (isset($item['a']['r'][0])) {
-
 
302
                // multiple releases
-
 
303
                $item['p']['v'] = $item['a']['r'][0]['v'];
-
 
304
                $item['p']['st'] = $item['a']['r'][0]['s'];
-
 
305
            } elseif (isset($item['a'])) {
-
 
306
                // first and only release
-
 
307
                $item['p']['v'] = $item['a']['r']['v'];
-
 
308
                $item['p']['st'] = $item['a']['r']['s'];
-
 
309
            }
-
 
310
 
-
 
311
            $packagelist[$i] = array('attribs' => $item['p']['r'],
-
 
312
                                     '_content' => $item['p']['n'],
-
 
313
                                     'info' => $item['p']);
-
 
314
        }
-
 
315
 
200
        return $ret;
316
        return $packagelist;
201
    }
317
    }
202
 
318
 
203
    /**
319
    /**
204
     * Return an array containing all of the states that are more stable than
320
     * Return an array containing all of the states that are more stable than
Line 219... Line 335...
219
            $i--;
335
            $i--;
220
        }
336
        }
221
        return array_slice($states, $i + 1);
337
        return array_slice($states, $i + 1);
222
    }
338
    }
223
}
339
}
224
?>
-
 
225
340
?>
-
 
341