summaryrefslogtreecommitdiff
path: root/pear/PEAR
diff options
context:
space:
mode:
authorSVN Migration <svn@php.net>2002-05-19 13:54:38 +0000
committerSVN Migration <svn@php.net>2002-05-19 13:54:38 +0000
commit62e263f01ef567ae3926739f37d13cac17fe7739 (patch)
tree353ff240a432d453632dcad134524cbb9e0ea610 /pear/PEAR
parente3490f1429d8f03c16d8cef7cd835c3fb2d5b43e (diff)
downloadphp-git-php-4.3.0dev-ZendEngine2.tar.gz
This commit was manufactured by cvs2svn to create tagphp-4.3.0dev-ZendEngine2
'php_4_3_0_dev_ZendEngine2'.
Diffstat (limited to 'pear/PEAR')
-rw-r--r--pear/PEAR/Autoloader.php186
-rw-r--r--pear/PEAR/Command.php290
-rw-r--r--pear/PEAR/Command/Auth.php131
-rw-r--r--pear/PEAR/Command/Common.php137
-rw-r--r--pear/PEAR/Command/Config.php169
-rw-r--r--pear/PEAR/Command/Install.php210
-rw-r--r--pear/PEAR/Command/Package.php469
-rw-r--r--pear/PEAR/Command/Registry.php161
-rw-r--r--pear/PEAR/Command/Remote.php212
-rw-r--r--pear/PEAR/Common.php1458
-rw-r--r--pear/PEAR/Config.php801
-rw-r--r--pear/PEAR/Dependency.php257
-rw-r--r--pear/PEAR/Frontend/CLI.php322
-rw-r--r--pear/PEAR/Frontend/Gtk.php133
-rw-r--r--pear/PEAR/Installer.php524
-rw-r--r--pear/PEAR/Packager.php158
-rw-r--r--pear/PEAR/Registry.php422
-rw-r--r--pear/PEAR/Remote.php258
-rw-r--r--pear/PEAR/WebInstaller.php639
19 files changed, 0 insertions, 6937 deletions
diff --git a/pear/PEAR/Autoloader.php b/pear/PEAR/Autoloader.php
deleted file mode 100644
index f9a9d4edb6..0000000000
--- a/pear/PEAR/Autoloader.php
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-if (!extension_loaded("overload")) {
- // die hard without ext/overload
- die("Rebuild PHP with the `overload' extension to use PEAR_Autoloader");
-}
-
-require_once "PEAR.php";
-
-/**
- * This class is for objects where you want to separate the code for
- * some methods into separate classes. This is useful if you have a
- * class with not-frequently-used methods that contain lots of code
- * that you would like to avoid always parsing.
- *
- * The PEAR_Autoloader class provides autoloading and aggregation.
- * The autoloading lets you set up in which classes the separated
- * methods are found. Aggregation is the technique used to import new
- * methods, an instance of each class providing separated methods is
- * stored and called every time the aggregated method is called.
- *
- * @author Stig Sæther Bakken <ssb@fast.no>
- */
-class PEAR_Autoloader extends PEAR
-{
- /**
- * Map of methods and classes where they are defined
- *
- * @var array
- *
- * @access private
- */
- var $_autoload_map = array();
-
- /**
- * Map of methods and aggregate objects
- *
- * @var array
- *
- * @access private
- */
- var $_method_map = array();
-
- /**
- * Add one or more autoload entries.
- *
- * @param string $method which method to autoload
- *
- * @param string $classname (optional) which class to find the method in.
- * If the $method parameter is an array, this
- * parameter may be omitted (and will be ignored
- * if not), and the $method parameter will be
- * treated as an associative array with method
- * names as keys and class names as values.
- *
- * @return void
- *
- * @access public
- */
- function addAutoload($method, $classname = null)
- {
- if (is_array($method)) {
- $this->_autoload_map = array_merge($this->_autoload_map, $method);
- } else {
- $this->_autoload_map[$method] = $classname;
- }
- }
-
- /**
- * Remove an autoload entry.
- *
- * @param string $method which method to remove the autoload entry for
- *
- * @return bool TRUE if an entry was removed, FALSE if not
- *
- * @access public
- */
- function removeAutoload($method)
- {
- $ok = isset($this->_autoload_map[$method]);
- unset($this->_autoload_map[$method]);
- return $ok;
- }
-
- /**
- * Add an aggregate object to this object. If the specified class
- * is not defined, loading it will be attempted following PEAR's
- * file naming scheme. All the methods in the class will be
- * aggregated, except private ones (name starting with an
- * underscore) and constructors.
- *
- * @param string $classname what class to instantiate for the object.
- *
- * @return void
- *
- * @access public
- */
- function addAggregateObject($classname)
- {
- $classname = strtolower($classname);
- if (!class_exists($classname)) {
- $include_file = preg_replace('/[^a-z0-9]/i', '_', $classname);
- include_once $include_file;
- }
- $obj =& new $classname;
- $methods = get_class_methods($classname);
- foreach ($methods as $method) {
- // don't import priviate methods and constructors
- if ($method{0} != '_' && $method != $classname) {
- $this->_method_map[$method] = $obj;
- }
- }
- }
-
- /**
- * Remove an aggregate object.
- *
- * @param string $classname the class of the object to remove
- *
- * @return bool TRUE if an object was removed, FALSE if not
- *
- * @access public
- */
- function removeAggregateObject($classname)
- {
- $ok = false;
- $classname = strtolower($classname);
- reset($this->_method_map);
- while (list($method, $obj) = each($this->_method_map)) {
- if (get_class($obj) == $classname) {
- unset($this->_method_map[$method]);
- $ok = true;
- }
- }
- return $ok;
- }
-
- /**
- * Overloaded object call handler, called each time an
- * undefined/aggregated method is invoked. This method repeats
- * the call in the right aggregate object and passes on the return
- * value.
- *
- * @param string $method which method that was called
- *
- * @param string $args An array of the parameters passed in the
- * original call
- *
- * @return mixed The return value from the aggregated method, or a PEAR
- * error if the called method was unknown.
- */
- function __call($method, $args, &$retval)
- {
- if (empty($this->_method_map[$method]) && isset($this->_autoload_map[$method])) {
- $this->addAggregateObject($this->_autoload_map[$method]);
- }
- if (isset($this->_method_map[$method])) {
- $retval = call_user_func_array(array($this->_method_map[$method], $method), $args);
- return true;
- }
- return false;
- }
-}
-
-overload("PEAR_Autoloader");
-
-?>
diff --git a/pear/PEAR/Command.php b/pear/PEAR/Command.php
deleted file mode 100644
index 6127a97099..0000000000
--- a/pear/PEAR/Command.php
+++ /dev/null
@@ -1,290 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-
-require_once "PEAR.php";
-
-/**
- * List of commands and what classes they are implemented in.
- * @var array command => implementing class
- */
-$GLOBALS['_PEAR_Command_commandlist'] = array();
-
-/**
- * Array of command objects
- * @var array class => object
- */
-$GLOBALS['_PEAR_Command_objects'] = array();
-
-/**
- * Which user interface class is being used.
- * @var string class name
- */
-$GLOBALS['_PEAR_Command_uiclass'] = 'PEAR_Frontend_CLI';
-
-/**
- * Instance of $_PEAR_Command_uiclass.
- * @var object
- */
-$GLOBALS['_PEAR_Command_uiobject'] = null;
-
-/**
- * PEAR command class, a simple factory class for administrative
- * commands.
- *
- * How to implement command classes:
- *
- * - The class must be called PEAR_Command_Nnn, installed in the
- * "PEAR/Common" subdir, with a method called getCommands() that
- * returns an array of the commands implemented by the class (see
- * PEAR/Command/Install.php for an example).
- *
- * - The class must implement a run() function that is called with three
- * params:
- *
- * (string) command name
- * (array) assoc array with options, freely defined by each
- * command, for example:
- * array('force' => true)
- * (array) list of the other parameters
- *
- * The run() function returns a PEAR_CommandResponse object. Use
- * these methods to get information:
- *
- * int getStatus() Returns PEAR_COMMAND_(SUCCESS|FAILURE|PARTIAL)
- * *_PARTIAL means that you need to issue at least
- * one more command to complete the operation
- * (used for example for validation steps).
- *
- * string getMessage() Returns a message for the user. Remember,
- * no HTML or other interface-specific markup.
- *
- * If something unexpected happens, run() returns a PEAR error.
- *
- * - DON'T OUTPUT ANYTHING! Return text for output instead.
- *
- * - DON'T USE HTML! The text you return will be used from both Gtk,
- * web and command-line interfaces, so for now, keep everything to
- * plain text. There may be a common (XML) markup format later.
- *
- * - DON'T USE EXIT OR DIE! Always use pear errors. From static
- * classes do PEAR::raiseError(), from other classes do
- * $this->raiseError().
- */
-class PEAR_Command
-{
- /**
- * Get the right object for executing a command.
- *
- * @param string $command The name of the command
- * @param object $config Instance of PEAR_Config object
- *
- * @return object the command object or a PEAR error
- *
- * @access public
- */
- function factory($command, &$config)
- {
- if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
- PEAR_Command::registerCommands();
- }
- $class = @$GLOBALS['_PEAR_Command_commandlist'][$command];
- if (empty($class)) {
- return PEAR::raiseError("unknown command `$command'");
- }
- $ui = PEAR_Command::getFrontendObject();
- $obj = &new $class($ui, $config);
- return $obj;
- }
-
- /**
- * Get instance of frontend object.
- *
- * @return object
- */
- function &getFrontendObject()
- {
- if (empty($GLOBALS['_PEAR_Command_uiobject'])) {
- $GLOBALS['_PEAR_Command_uiobject'] = &new $GLOBALS['_PEAR_Command_uiclass'];
- }
- return $GLOBALS['_PEAR_Command_uiobject'];
- }
-
- /**
- * Load current frontend class.
- *
- * @param string $uiclass Name of class implementing the frontend
- *
- * @return object the frontend object, or a PEAR error
- */
- function &setFrontendClass($uiclass)
- {
- $file = str_replace('_', '/', $uiclass) . '.php';
- @include_once $file;
- if (class_exists(strtolower($uiclass))) {
- $obj = &new $uiclass;
- // quick test to see if this class implements a few of the most
- // important frontend methods
- if (method_exists($obj, 'displayLine') && method_exists($obj, 'userConfirm')) {
- $GLOBALS['_PEAR_Command_uiobject'] = &$obj;
- $GLOBALS['_PEAR_Command_uiclass'] = $uiclass;
- return $obj;
- } else {
- return PEAR::raiseError("not a frontend class: $uiclass");
- }
- }
- return PEAR::raiseError("no such class: $uiclass");
- }
-
- /**
- * Set current frontend.
- *
- * @param string $uitype Name of the frontend type (for example "CLI")
- *
- * @return object the frontend object, or a PEAR error
- */
- function setFrontendType($uitype)
- {
- $uiclass = 'PEAR_Frontend_' . $uitype;
- return PEAR_Command::setFrontendClass($uiclass);
- }
-
- /**
- * Scan through the Command directory looking for classes
- * and see what commands they implement.
- *
- * @param bool (optional) if FALSE (default), the new list of
- * commands should replace the current one. If TRUE,
- * new entries will be merged with old.
- *
- * @param string (optional) where (what directory) to look for
- * classes, defaults to the Command subdirectory of
- * the directory from where this file (__FILE__) is
- * included.
- *
- * @return bool TRUE on success, a PEAR error on failure
- *
- * @access public
- */
- function registerCommands($merge = false, $dir = null)
- {
- if ($dir === null) {
- $dir = dirname(__FILE__) . '/Command';
- }
- $dp = @opendir($dir);
- if (empty($dp)) {
- return PEAR::raiseError("registerCommands: opendir($dir) failed");
- }
- if (!$merge) {
- $GLOBALS['_PEAR_Command_commandlist'] = array();
- }
- while ($entry = readdir($dp)) {
- if ($entry{0} == '.' || substr($entry, -4) != '.php' || $entry == 'Common.php') {
- continue;
- }
- $class = "PEAR_Command_".substr($entry, 0, -4);
- $file = "$dir/$entry";
- include_once $file;
- // List of commands
- if (empty($GLOBALS['_PEAR_Command_objects'][$class])) {
- $GLOBALS['_PEAR_Command_objects'][$class] = &new $class($ui, $config);
- }
- $implements = $GLOBALS['_PEAR_Command_objects'][$class]->getCommands();
- foreach ($implements as $command => $desc) {
- $GLOBALS['_PEAR_Command_commandlist'][$command] = $class;
- $GLOBALS['_PEAR_Command_commanddesc'][$command] = $desc;
- }
- }
- return true;
- }
-
- /**
- * Get the list of currently supported commands, and what
- * classes implement them.
- *
- * @return array command => implementing class
- *
- * @access public
- */
- function getCommands()
- {
- if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
- PEAR_Command::registerCommands();
- }
- return $GLOBALS['_PEAR_Command_commandlist'];
- }
-
- /**
- * Compiles arguments for getopt.
- *
- * @param string $command command to get optstring for
- * @param string $short_args (reference) short getopt format
- * @param array $long_args (reference) long getopt format
- *
- * @return void
- *
- * @access public
- */
- function getGetoptArgs($command, &$short_args, &$long_args)
- {
- if (empty($GLOBALS['_PEAR_Command_commandlist'])) {
- PEAR_Command::registerCommands();
- }
- $class = @$GLOBALS['_PEAR_Command_commandlist'][$command];
- if (empty($class)) {
- return null;
- }
- $obj = &$GLOBALS['_PEAR_Command_objects'][$class];
- return $obj->getGetoptArgs($command, $short_args, $long_args);
- }
-
- /**
- * Get description for a command.
- *
- * @param string $command Name of the command
- *
- * @return string command description
- *
- * @access public
- */
- function getDescription($command)
- {
- return @$GLOBALS['_PEAR_Command_commanddesc'][$command];
- }
-
- /**
- * Get help for command.
- *
- * @param string $command Name of the command to return help for
- *
- * @access public
- */
- function getHelp($command)
- {
- $cmds = PEAR_Command::getCommands();
- if (isset($cmds[$command])) {
- $class = $cmds[$command];
- return $GLOBALS['_PEAR_Command_objects'][$class]->getHelp($command);
- }
- return false;
- }
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Auth.php b/pear/PEAR/Command/Auth.php
deleted file mode 100644
index 5f99b2756e..0000000000
--- a/pear/PEAR/Command/Auth.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Remote.php";
-require_once "PEAR/Config.php";
-
-/**
- * PEAR commands for managing configuration data.
- *
- */
-class PEAR_Command_Auth extends PEAR_Command_Common
-{
- var $commands = array(
- 'login' => array(
- 'summary' => 'Connects and authenticates to remote server',
- 'function' => 'doLogin',
- 'options' => array(),
- 'doc' => 'To use functions in the installer that require any kind
-of privilege, you need to log in first. The username and password you enter
-here will be stored in your per-user PEAR configuration (~/.pearrc on
-Unix-like systems). After logging in, your username and password will be
-passed along in every subsequent operation on the remote server.
-',
- ),
- 'logout' => array(
- 'summary' => 'Logs out from the remote server',
- 'function' => 'doLogout',
- 'options' => array(),
- 'doc' => 'Logs out from the remote server.
-This command does not actually connect to the remote
-server, it only deletes the stored username and password from your
-user configuration.
-',
- )
-
- );
-
- /**
- * PEAR_Command_Auth constructor.
- *
- * @access public
- */
- function PEAR_Command_Auth(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- /**
- * Execute the 'login' command.
- *
- * @param string $command command name
- *
- * @param array $options option_name => value
- *
- * @param array $params list of additional parameters
- *
- * @return bool TRUE on success, FALSE for unknown commands, or
- * a PEAR error on failure
- *
- * @access public
- */
- function doLogin($command, $options, $params)
- {
- $server = $this->config->get('master_server');
- $remote = new PEAR_Remote($this->config);
- $username = $this->config->get('username');
- if (empty($username)) {
- $username = @$_ENV['USER'];
- }
- $this->ui->displayLine("Logging in to $server.");
- $username = trim($this->ui->userDialog('Username', 'text', $username));
-
- $this->config->set('username', $username);
- $password = trim($this->ui->userDialog('Password', 'password'));
- $this->config->set('password', $password);
- $remote->expectError(401);
- $ok = $remote->call('logintest');
- $remote->popExpect();
- if ($ok === true) {
- $this->ui->displayLine("Logged in.");
- $this->config->store();
- } else {
- $this->ui->displayLine("Login failed!");
- }
-
- }
-
- /**
- * Execute the 'logout' command.
- *
- * @param string $command command name
- *
- * @param array $options option_name => value
- *
- * @param array $params list of additional parameters
- *
- * @return bool TRUE on success, FALSE for unknown commands, or
- * a PEAR error on failure
- *
- * @access public
- */
- function doLogout($command, $options, $params)
- {
- $server = $this->config->get('master_server');
- $this->ui->displayLine("Logging out from $server.");
- $this->config->remove('username');
- $this->config->remove('password');
- $this->config->store();
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Common.php b/pear/PEAR/Command/Common.php
deleted file mode 100644
index dc308c6896..0000000000
--- a/pear/PEAR/Command/Common.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Sæther Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR.php";
-
-class PEAR_Command_Common extends PEAR
-{
- // {{{ properties
-
- /**
- * PEAR_Config object used to pass user system and configuration
- * on when executing commands
- *
- * @var object
- */
- var $config;
-
- /**
- * User Interface object, for all interaction with the user.
- * @var object
- */
- var $ui;
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Command_Common constructor.
- *
- * @access public
- */
- function PEAR_Command_Common(&$ui, &$config)
- {
- parent::PEAR();
- $this->config = &$config;
- $this->ui = &$ui;
- }
-
- // }}}
-
- // {{{ getCommands()
-
- /**
- * Return a list of all the commands defined by this class.
- * @return array list of commands
- * @access public
- */
- function getCommands()
- {
- $ret = array();
- foreach (array_keys($this->commands) as $command) {
- $ret[$command] = $this->commands[$command]['summary'];
- }
- return $ret;
- }
-
- // }}}
- // {{{ getOptions()
-
- function getOptions($command)
- {
- return @$this->commands[$command]['options'];
- }
-
- // }}}
- // {{{ getGetoptArgs()
-
- function getGetoptArgs($command, &$short_args, &$long_args)
- {
- $short_args = "";
- $long_args = array();
- if (empty($this->commands[$command])) {
- return;
- }
- reset($this->commands[$command]);
- while (list($option, $info) = each($this->commands[$command]['options'])) {
- $larg = $sarg = '';
- if (isset($info['arg'])) {
- if ($info['arg']{0} == '(') {
- $larg = '==';
- $sarg = '::';
- $arg = substr($info['arg'], 1, -1);
- } else {
- $larg = '=';
- $sarg = ':';
- $arg = $info['arg'];
- }
- }
- if (isset($info['shortopt'])) {
- $short_args .= $info['shortopt'] . $sarg;
- }
- $long_args[] = $option . $larg;
- }
- }
-
- // }}}
- // {{{ getHelp()
-
- function getHelp($command)
- {
- $help = preg_replace('/{config\s+([^\}]+)}/e', "\$config->get('\1')", @$this->commands[$command]['doc']);
- return $help;
- }
-
- // }}}
- // {{{ run()
-
- function run($command, $options, $params)
- {
- $func = @$this->commands[$command]['function'];
- if (empty($func)) {
- return $this->raiseError("unknown command `$command'");
- }
- return $this->$func($command, $options, $params);
- }
-
- // }}}
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Config.php b/pear/PEAR/Command/Config.php
deleted file mode 100644
index 2775a306e9..0000000000
--- a/pear/PEAR/Command/Config.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Config.php";
-
-/**
- * PEAR commands for managing configuration data.
- *
- */
-class PEAR_Command_Config extends PEAR_Command_Common
-{
- var $commands = array(
- 'config-show' => array(
- 'summary' => 'Show All Settings',
- 'options' => array(),
- 'doc' => 'Displays all configuration values. An optional argument
-may be used to tell which configuration layer to display. Valid
-configuration layers are "user", "system" and "default".
-',
- ),
- 'config-get' => array(
- 'summary' => 'Show One Setting',
- 'options' => array(),
- 'doc' => 'Displays the value of one configuration parameter. The
-first argument is the name of the parameter, an optional second argument
-may be used to tell which configuration layer to look in. Valid configuration
-layers are "user", "system" and "default". If no layer is specified, a value
-will be picked from the first layer that defines the parameter, in the order
-just specified.
-',
- ),
- 'config-set' => array(
- 'summary' => 'Change Setting',
- 'options' => array(),
- 'doc' => 'Sets the value of one configuration parameter. The first
-argument is the name of the parameter, the second argument is the new value.
-Some parameters are be subject to validation, and the command will fail with
-an error message if the new value does not make sense. An optional third
-argument may be used to specify which layer to set the configuration parameter
-in. The default layer is "user".
-',
- ),
- );
-
- /**
- * PEAR_Command_Config constructor.
- *
- * @access public
- */
- function PEAR_Command_Config(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- function run($command, $options, $params)
- {
- $cf = &$this->config;
- $failmsg = '';
- switch ($command) {
- case 'config-show': {
- // $params[0] -> the layer
- if ($error = $this->_checkLayer(@$params[0])) {
- $failmsg .= $error;
- break;
- }
- $keys = $cf->getKeys();
- sort($keys);
- $this->ui->startTable(array('caption' => 'Configuration:'));
- foreach ($keys as $key) {
- $type = $cf->getType($key);
- $value = $cf->get($key, @$params[0]);
- if ($type == 'password' && $value) {
- $value = '********';
- }
- if (empty($value)) {
- $value = '<not set>';
- }
- $this->ui->tableRow(array($key, $value));
- }
- $this->ui->endTable();
- break;
- }
- case 'config-get': {
- // $params[0] -> the parameter
- // $params[1] -> the layer
- if ($error = $this->_checkLayer(@$params[1])) {
- $failmsg .= $error;
- break;
- }
- if (sizeof($params) < 1 || sizeof($params) > 2) {
- $failmsg .= "config-get expects 1 or 2 parameters. Try \"help config-get\" for help";
- } elseif (sizeof($params) == 1) {
- $this->ui->displayLine("$params[0] = " . $cf->get($params[0]));
- } else {
- $this->ui->displayLine("($params[1])$params[0] = " .
- $cf->get($params[0], $params[1]));
- }
- break;
- }
- case 'config-set': {
- // $param[0] -> a parameter to set
- // $param[1] -> the value for the parameter
- // $param[2] -> the layer
- if (sizeof($params) < 2 || sizeof($params) > 3) {
- $failmsg .= "config-set expects 2 or 3 parameters. Try \"help config-set\" for help";
- break;
- }
- if ($error = $this->_checkLayer(@$params[2])) {
- $failmsg .= $error;
- break;
- }
- if (!call_user_func_array(array(&$cf, 'set'), $params))
- {
- $failmsg = "config-set (" . implode(", ", $params) . ") failed";
- } else {
- $cf->store();
- }
- break;
- }
- default: {
- return false;
- }
- }
- if ($failmsg) {
- return $this->raiseError($failmsg);
- }
- return true;
- }
-
- /**
- * Checks if a layer is defined or not
- *
- * @param string $layer The layer to search for
- * @return mixed False on no error or the error message
- */
- function _checkLayer($layer = null)
- {
- if (!empty($layer)) {
- $layers = $this->config->getLayers();
- if (!in_array($layer, $layers)) {
- return " only the layers: \"" . implode('" or "', $layers) . "\" are supported";
- }
- }
- return false;
- }
-
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Install.php b/pear/PEAR/Command/Install.php
deleted file mode 100644
index d136e740a5..0000000000
--- a/pear/PEAR/Command/Install.php
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Sæther Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Command/Common.php";
-require_once "PEAR/Installer.php";
-require_once "Console/Getopt.php";
-
-/**
- * PEAR commands for installation or deinstallation/upgrading of
- * packages.
- *
- */
-class PEAR_Command_Install extends PEAR_Command_Common
-{
- // {{{ command definitions
-
- var $commands = array(
- 'install' => array(
- 'summary' => 'Install Package',
- 'function' => 'doInstall',
- 'options' => array(
- 'force' => array(
- 'shortopt' => 'f',
- 'doc' => 'will overwrite newer installed packages',
- ),
- 'nodeps' => array(
- 'shortopt' => 'n',
- 'doc' => 'ignore dependencies, install anyway',
- ),
- 'register-only' => array(
- 'shortopt' => 'r',
- 'doc' => 'do not install files, only register the package as installed',
- ),
- 'soft' => array(
- 'shortopt' => 's',
- 'doc' => 'soft install, fail silently, or upgrade if already installed',
- ),
- 'nocompress' => array(
- 'shortopt' => 'Z',
- 'doc' => 'request uncompressed files when downloading',
- ),
- ),
- 'doc' => 'Installs one or more PEAR packages. You can specify a package to
-install in four ways:
-
-"Package-1.0.tgz" : installs from a local file
-
-"http://example.com/Package-1.0.tgz" : installs from
-anywhere on the net.
-
-"package.xml" : installs the package described in
-package.xml. Useful for testing, or for wrapping a PEAR package in
-another package manager such as RPM.
-
-"Package" : queries your configured server
-({config master_server}) and downloads the newest package with
-the preferred quality/state ({config preferred_state}).
-
-More than one package may be specified at once. It is ok to mix these
-four ways of specifying packages.
-'),
- 'upgrade' => array(
- 'summary' => 'Upgrade Package',
- 'function' => 'doInstall',
- 'options' => array(
- 'force' => array(
- 'shortopt' => 'f',
- 'doc' => 'overwrite newer installed packages',
- ),
- 'nodeps' => array(
- 'shortopt' => 'n',
- 'doc' => 'ignore dependencies, upgrade anyway',
- ),
- 'register-only' => array(
- 'shortopt' => 'r',
- 'doc' => 'do not install files, only register the package as upgraded',
- ),
- 'nocompress' => array(
- 'shortopt' => 'Z',
- 'request uncompressed files when downloading',
- ),
- ),
- 'doc' => 'Upgrades one or more PEAR packages. See documentation for the
-"install" command for ways to specify a package.
-
-When upgrading, your package will be updated if the provided new
-package has a higher version number (use the -f option if you need to
-upgrade anyway).
-
-More than one package may be specified at once.
-'),
- 'uninstall' => array(
- 'summary' => 'Un-install Package',
- 'function' => 'doUninstall',
- 'options' => array(
- 'nodeps' => array(
- 'shortopt' => 'n',
- 'doc' => 'ignore dependencies, uninstall anyway',
- ),
- 'register-only' => array(
- 'shortopt' => 'r',
- 'doc' => 'do not remove files, only register the packages as not installed',
- ),
- ),
- 'doc' => 'Upgrades one or more PEAR packages. See documentation for the
-"install" command for ways to specify a package.
-
-When upgrading, your package will be updated if the provided new
-package has a higher version number (use the -f option if you need to
-upgrade anyway).
-
-More than one package may be specified at once.
-'),
-
- );
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Command_Install constructor.
- *
- * @access public
- */
- function PEAR_Command_Install(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ getCommands()
-
- /**
- * Return a list of all the commands defined by this class.
- * @return array list of commands
- * @access public
- */
- function getCommands()
- {
- $ret = array();
- foreach (array_keys($this->commands) as $command) {
- $ret[$command] = $this->commands[$command]['summary'];
- }
- return $ret;
- }
-
- // }}}
- // {{{ run()
-
- function run($command, $options, $params)
- {
- $this->installer = &new PEAR_Installer($ui);
-// return parent::run($command, $options, $params);
- $failmsg = '';
- switch ($command) {
- case 'upgrade':
- $options['upgrade'] = true;
- // fall through
- case 'install':
- foreach ($params as $pkg) {
- $bn = basename($pkg);
- $info = $this->installer->install($pkg, $options, $this->config);
- if (is_array($info)) {
- $label = "$info[package] $info[version]";
- $this->ui->displayLine("$command ok: $label");
- } else {
- $failmsg = "$command failed";
- }
- }
- break;
- case 'uninstall':
- foreach ($params as $pkg) {
- if ($this->installer->uninstall($pkg, $options)) {
- $this->ui->displayLine("uninstall ok");
- } else {
- $failmsg = "uninstall failed";
- }
- }
- break;
- default:
- return false;
- }
- if ($failmsg) {
- return $this->raiseError($failmsg);
- }
- return true;
- }
-
- // }}}
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Package.php b/pear/PEAR/Command/Package.php
deleted file mode 100644
index d1cba6a6f7..0000000000
--- a/pear/PEAR/Command/Package.php
+++ /dev/null
@@ -1,469 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Command/Common.php';
-require_once 'PEAR/Packager.php';
-require_once 'PEAR/Common.php';
-
-class PEAR_Command_Package extends PEAR_Command_Common
-{
- var $commands = array(
- 'package' => array(
- 'summary' => 'Build Package',
- 'function' => 'doPackage',
- 'options' => array(
- 'nocompress' => array(
- 'shortopt' => 'Z',
- 'doc' => 'Do not gzip the package file'
- ),
- '???' => array(
- 'shortopt' => 'n',
- 'doc' => 'Return only the created package file name. Useful for
-shell script operations.
-',
- ),
- ),
- 'doc' => 'Creates a PEAR package from its description file (usually
-called package.xml).
-'
- ),
- 'package-info' => array(
- 'summary' => 'Display information about a package file',
- 'function' => 'doPackageInfo',
- 'options' => array(),
- 'doc' => 'Extracts information from a package file and displays it.
-',
- ),
- 'package-list' => array(
- 'summary' => 'List Files in Package',
- 'function' => 'doPackageList',
- 'options' => array(),
- 'doc' => '',
- ),
- 'package-validate' => array(
- 'summary' => 'Validate Package Consistency',
- 'function' => 'doPackageValidate',
- 'options' => array(),
- 'doc' => '',
- ),
- 'cvstag' => array(
- 'summary' => 'Set CVS Release Tag',
- 'function' => 'doCvsTag',
- 'options' => array(),
- 'doc' => '',
- ),
- 'run-tests' => array(
- 'summary' => 'Run Regression Tests',
- 'function' => 'doRunTests',
- 'options' => array(),
- 'doc' => '',
- ),
- );
-
- /**
- * PEAR_Command_Package constructor.
- *
- * @access public
- */
- function PEAR_Command_Package(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- function _displayValidationResults($err, $warn, $strict = false)
- {
- foreach ($err as $e) {
- $this->ui->displayLine("Error: $e");
- }
- foreach ($warn as $w) {
- $this->ui->displayLine("Warning: $w");
- }
- $this->ui->displayLine(sprintf('Validation: %d error(s), %d warning(s)',
- sizeof($err), sizeof($warn)));
- if ($strict && sizeof($err) > 0) {
- $this->ui->displayLine("Fix these errors and try again.");
- return false;
- }
- return true;
- }
-
- /**
- * Return a list of all the commands defined by this class.
- * @return array list of commands
- * @access public
- */
- function getCommands()
- {
- return array('package' => 'Build Package',
- 'package-info' => 'Show Package Info',
- 'package-list' => 'List Files in Package',
- 'package-validate' => 'Validate Package',
- 'cvstag' => 'Set CVS Release Tag',
- 'run-tests' => 'Run Regression Tests');
- }
-
- // {{{ getOptions()
-
- function getOptions()
- {
- return array('Z', 'n', 'F' /*, 'd', 'q', 'Q'*/);
- }
-
- // }}}
- // {{{ getHelp()
-
- function getHelp($command)
- {
- switch ($command) {
- case 'package':
- return array('[-n] [<package.xml>]',
- 'Creates a PEAR package from its description file (usually '.
- "named as package.xml)\n".
- " -n Return only the created package file name. Useful for\n".
- " shell script operations.\n".
- " -Z Do not compress the tar package");
- case 'package-list':
- return array('<pear package>',
- 'List the contents (the files) of a PEAR package');
- case 'package-info':
- return array('<pear package>',
- 'Shows information about a PEAR package');
- case 'package-validate':
- return array('<package.(tgz|tar|xml)>',
- 'Verifies a package or description file');
- case 'cvstag':
- return array('<package.xml>',
- 'Runs "cvs tag" on files contained in a release');
- }
- }
-
- // }}}
- // {{{ run()
-
- /**
- * Execute the command.
- *
- * @param string command name
- *
- * @param array option_name => value
- *
- * @param array list of additional parameters
- *
- * @return bool TRUE on success, FALSE for unknown commands, or
- * a PEAR error on failure
- *
- * @access public
- */
- function run($command, $options, $params)
- {
- $failmsg = '';
- switch ($command) {
- case 'package':
- case 'package-list':
- case 'package-info':
- case 'package-validate':
- break;
- // {{{ cvstag
-
- case 'cvstag': {
- }
-
- // }}}
- // {{{ run-tests
-
- case 'run-tests': {
- break;
- }
-
- // }}}
- default: {
- return false;
- }
- }
- if ($failmsg) {
- return $this->raiseError($failmsg);
- }
- return true;
- }
-
- // }}}
-
-
- function doPackage($command, $options, $params)
- {
- $pkginfofile = isset($params[0]) ? $params[0] : 'package.xml';
- ob_start();
- $packager =& new PEAR_Packager($this->config->get('php_dir'),
- $this->config->get('ext_dir'),
- $this->config->get('doc_dir'));
- $packager->debug = $this->config->get('verbose');
- $err = $warn = array();
- $packager->validatePackageInfo($pkginfofile, $err, $warn);
- if (!$this->_displayValidationResults($err, $warn, true)) {
- return;
- }
- $compress = empty($options['Z']) ? true : false;
- $result = $packager->Package($pkginfofile, $compress);
- $output = ob_get_contents();
- ob_end_clean();
- if (PEAR::isError($result)) {
- return $this->raiseError($result);
- }
- // Don't want output, only the package file name just created
- if (isset($options['n'])) {
- $this->ui->displayLine($result);
- return;
- }
- $lines = explode("\n", $output);
- foreach ($lines as $line) {
- $this->ui->displayLine($line);
- }
- if (PEAR::isError($result)) {
- $this->ui->displayLine("Package failed: ".$result->getMessage());
- }
- return true;
- }
-
-
- function doPackageList($command, $options, $params)
- {
- // $params[0] -> the PEAR package to list its files
- if (sizeof($params) != 1) {
- return $this->raiseError("bad parameters, try \"help $command\"");
- }
- $obj = new PEAR_Common();
-
- if (PEAR::isError($info = $obj->infoFromTgzFile($params[0]))) {
- return $info;
- }
- $list =$info['filelist'];
- $caption = 'Contents of ' . basename($params[0]);
- $this->ui->startTable(array('caption' => $caption,
- 'border' => true));
- $this->ui->tableRow(array('Package Files', 'Install Destination'),
- array('bold' => true));
- foreach ($list as $file => $att) {
- if (isset($att['baseinstalldir'])) {
- $dest = $att['baseinstalldir'] . DIRECTORY_SEPARATOR .
- $file;
- } else {
- $dest = $file;
- }
- switch ($att['role']) {
- case 'test':
- $dest = '-- will not be installed --'; break;
- case 'doc':
- $dest = $this->config->get('doc_dir') . DIRECTORY_SEPARATOR .
- $dest;
- break;
- case 'php':
- default:
- $dest = $this->config->get('php_dir') . DIRECTORY_SEPARATOR .
- $dest;
- }
- $dest = preg_replace('!/+!', '/', $dest);
- $file = preg_replace('!/+!', '/', $file);
- $opts = array(0 => array('wrap' => 23),
- 1 => array('wrap' => 45)
- );
- $this->ui->tableRow(array($file, $dest), null, $opts);
- }
- $this->ui->endTable();
- return true;
- }
-
- function doPackageInfo($command, $options, $params)
- {
- // $params[0] -> the PEAR package to list its information
- if (sizeof($params) != 1) {
- return $this->raiseError("bad parameter(s), try \"help $command\"");
- }
-
- $obj = new PEAR_Common();
- if (PEAR::isError($info = $obj->infoFromTgzFile($params[0]))) {
- return $info;
- }
- unset($info['filelist']);
- unset($info['changelog']);
- $keys = array_keys($info);
- $longtext = array('description', 'summary');
- foreach ($keys as $key) {
- if (is_array($info[$key])) {
- switch ($key) {
- case 'maintainers': {
- $i = 0;
- $mstr = '';
- foreach ($info[$key] as $m) {
- if ($i++ > 0) {
- $mstr .= "\n";
- }
- $mstr .= $m['name'] . " <";
- if (isset($m['email'])) {
- $mstr .= $m['email'];
- } else {
- $mstr .= $m['handle'] . '@php.net';
- }
- $mstr .= "> ($m[role])";
- }
- $info[$key] = $mstr;
- break;
- }
- case 'release_deps': {
- static $rel_trans = array(
- 'lt' => '<',
- 'le' => '<=',
- 'eq' => '=',
- 'ne' => '!=',
- 'gt' => '>',
- 'ge' => '>=',
- );
- $i = 0;
- $dstr = '';
- foreach ($info[$key] as $d) {
- if ($i++ > 0) {
- $dstr .= ", ";
- }
- if (isset($rel_trans[$d['rel']])) {
- $d['rel'] = $rel_trans[$d['rel']];
- }
- $dstr .= "$d[type] $d[rel]";
- if (isset($d['version'])) {
- $dstr .= " $d[version]";
- }
- }
- $info[$key] = $dstr;
- break;
- }
- default: {
- $info[$key] = implode(", ", $info[$key]);
- break;
- }
- }
- }
- $info[$key] = trim($info[$key]);
- if (in_array($key, $longtext)) {
- $info[$key] = preg_replace('/ +/', ' ', $info[$key]);
- }
- }
- $caption = 'About ' . basename($params[0]);
- $this->ui->startTable(array('caption' => $caption,
- 'border' => true));
- foreach ($info as $key => $value) {
- $key = ucwords(str_replace('_', ' ', $key));
- $this->ui->tableRow(array($key, $value), null, array(1 => array('wrap' => 55)));
- }
- $this->ui->endTable();
- return true;
- }
-
- function doPackageValidate($command, $options, $params)
- {
- if (sizeof($params) < 1) {
- $params[0] = "package.xml";
- }
- $obj = new PEAR_Common;
- $info = null;
- if (file_exists($params[0])) {
- $fp = fopen($params[0], "r");
- $test = fread($fp, 5);
- fclose($fp);
- if ($test == "<?xml") {
- $info = $obj->infoFromDescriptionFile($params[0]);
- }
- }
- if (empty($info)) {
- $info = $obj->infoFromTgzFile($params[0]);
- }
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- $obj->validatePackageInfo($info, $err, $warn);
- $this->_displayValidationResults($err, $warn);
- return true;
- }
-
- function doCvsTag($command, $options, $params)
- {
- if (sizeof($params) < 1) {
- $help = $this->getHelp($command);
- return $this->raiseError("$command: missing parameter: $help[0]");
- }
- $obj = new PEAR_Common;
- $info = $obj->infoFromDescriptionFile($params[0]);
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- $err = $warn = array();
- $obj->validatePackageInfo($info, $err, $warn);
- if (!$this->_displayValidationResults($err, $warn, true)) {
- break;
- }
- $version = $info['version'];
- $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $version);
- $cvstag = "RELEASE_$cvsversion";
- $files = array_keys($info['filelist']);
- $command = "cvs";
- if (isset($options['q'])) {
- $command .= ' -q';
- }
- if (isset($options['Q'])) {
- $command .= ' -Q';
- }
- $command .= ' tag';
- if (isset($options['F'])) {
- $command .= ' -F';
- }
- if (isset($options['d'])) {
- $command .= ' -d';
- }
- $command .= ' ' . $cvstag . ' ' . escapeshellarg($params[0]);
- foreach ($files as $file) {
- $command .= ' ' . escapeshellarg($file);
- }
- $this->ui->displayLine("+ $command");
- if (empty($options['n'])) {
- $fp = popen($command, "r");
- while ($line = fgets($fp, 1024)) {
- $this->ui->displayLine(rtrim($line));
- }
- pclose($fp);
- }
- return true;
- }
-
- function doRunTests($command, $options, $params)
- {
- $cwd = getcwd();
- $php = PHP_BINDIR . '/php' . (OS_WINDOWS ? '.exe' : '');
- putenv("TEST_PHP_EXECUTABLE=$php");
- $ip = ini_get("include_path");
- $ps = OS_WINDOWS ? ';' : ':';
- $run_tests = $this->config->get('php_dir') . DIRECTORY_SEPARATOR . 'run-tests.php';
- if (!file_exists($run_tests)) {
- $run_tests = PEAR_INSTALL_DIR . DIRECTORY_SEPARATOR . 'run-tests.php';
- }
- $plist = implode(" ", $params);
- $cmd = "$php -d include_path=$cwd$ps$ip $run_tests $plist";
- system($cmd);
- return true;
- }
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Registry.php b/pear/PEAR/Command/Registry.php
deleted file mode 100644
index be5bf182a8..0000000000
--- a/pear/PEAR/Command/Registry.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Command/Common.php';
-require_once 'PEAR/Registry.php';
-require_once 'PEAR/Config.php';
-
-class PEAR_Command_Registry extends PEAR_Command_Common
-{
- // {{{ constructor
-
- /**
- * PEAR_Command_Registry constructor.
- *
- * @access public
- */
- function PEAR_Command_Registry(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ getCommands()
-
- /**
- * Return a list of all the commands defined by this class.
- * @return array list of commands
- * @access public
- */
- function getCommands()
- {
- return array('list-installed' => 'List Installed Packages',
- 'shell-test' => 'Shell Script Test');
- }
-
- function getHelp($command)
- {
- switch ($command) {
- case 'list-installed':
- return array(null, 'List the installed PEAR packages in the system');
- case 'shell-test':
- return array('<package name> [<relation>] [<version>]',
- "Tests if a package is installed in the system. Will exit(1) if it is not.\n".
- " <relation> The version comparison operator. One of:\n".
- " <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne\n".
- " <version> The version to compare with");
- }
- }
-
- // }}}
- // {{{ run()
-
- /**
- * Execute the command.
- *
- * @param string command name
- *
- * @param array option_name => value
- *
- * @param array list of additional parameters
- *
- * @return bool TRUE on success, FALSE if the command was unknown,
- * or a PEAR error on failure
- *
- * @access public
- */
- function run($command, $options, $params)
- {
- $failmsg = '';
- $cf = &PEAR_Config::singleton();
- switch ($command) {
- // {{{ list-installed
-
- case 'list-installed': {
- $reg = new PEAR_Registry($cf->get('php_dir'));
- $installed = $reg->packageInfo();
- $i = $j = 0;
- $this->ui->startTable(
- array('caption' => 'Installed packages:',
- 'border' => true));
- foreach ($installed as $package) {
- if ($i++ % 20 == 0) {
- $this->ui->tableRow(
- array('Package', 'Version', 'State'),
- array('bold' => true));
- }
- $this->ui->tableRow(array($package['package'],
- $package['version'],
- @$package['release_state']));
- }
- if ($i == 0) {
- $this->ui->tableRow(array('(no packages installed yet)'));
- }
- $this->ui->endTable();
- break;
- }
-
- // }}}
- case 'shell-test': {
- // silence error messages for the rest of the execution
- PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
- $reg = &new PEAR_Registry($this->config->get('php_dir'));
- // "pear shell-test Foo"
- if (sizeof($params) == 1) {
- if (!$reg->packageExists($params[0])) {
- exit(1);
- }
- // "pear shell-test Foo 1.0"
- } elseif (sizeof($params) == 2) {
- $v = $reg->packageInfo($params[0], 'version');
- if (!$v || !version_compare($v, $params[1], "ge")) {
- exit(1);
- }
- // "pear shell-test Foo ge 1.0"
- } elseif (sizeof($params) == 3) {
- $v = $reg->packageInfo($params[0], 'version');
- if (!$v || !version_compare($v, $params[2], $params[1])) {
- exit(1);
- }
- } else {
- PEAR::popErrorHandling();
- PEAR::raiseError("$command: expects 1 to 3 parameters");
- exit(1);
- }
- break;
- }
- default: {
- return false;
- }
- }
- if ($failmsg) {
- return $this->raiseError($failmsg);
- }
- return true;
- }
-
- // }}}
-
-
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Command/Remote.php b/pear/PEAR/Command/Remote.php
deleted file mode 100644
index def57a4be1..0000000000
--- a/pear/PEAR/Command/Remote.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-// /* vim: set expandtab tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Command/Common.php';
-require_once 'PEAR/Common.php';
-require_once 'PEAR/Remote.php';
-
-class PEAR_Command_Remote extends PEAR_Command_Common
-{
- // {{{ constructor
-
- /**
- * PEAR_Command_Remote constructor.
- *
- * @access public
- */
- function PEAR_Command_Remote(&$ui, &$config)
- {
- parent::PEAR_Command_Common($ui, $config);
- }
-
- // }}}
-
- // {{{ getCommands()
-
- /**
- * Return a list of all the commands defined by this class.
- * @return array list of commands
- * @access public
- */
- function getCommands()
- {
- return array('remote-package-info' => 'Information About Remote Package',
- 'list-upgrades' => 'List Available Upgrades',
- 'list-remote-packages' => 'List Remote Packages',
- 'download' => 'Download Package');
- }
-
- // }}}
- // {{{ run()
-
- /**
- * Execute the command.
- *
- * @param string command name
- *
- * @param array option_name => value
- *
- * @param array list of additional parameters
- *
- * @return bool TRUE on success, FALSE for unknown commands, or
- * a PEAR error on failure
- *
- * @access public
- */
- function run($command, $options, $params)
- {
- $failmsg = '';
- $remote = &new PEAR_Remote($this->config);
- switch ($command) {
- // {{{ remote-package-info
-
- case 'remote-package-info': {
- break;
- }
-
- // }}}
- // {{{ list-remote-packages
-
- case 'list-remote-packages': {
- $r = new PEAR_Remote($this->config);
- $available = $r->call('package.listAll', true);
- if (PEAR::isError($available)) {
- return $this->raiseError($available);
- }
- $i = $j = 0;
- $this->ui->startTable(
- array('caption' => 'Available packages:',
- 'border' => true));
- foreach ($available as $name => $info) {
- if ($i++ % 20 == 0) {
- $this->ui->tableRow(
- array('Package', 'Version'),
- array('bold' => true));
- }
- $this->ui->tableRow(array($name, $info['stable']));
- }
- if ($i == 0) {
- $this->ui->tableRow(array('(no packages installed yet)'));
- }
- $this->ui->endTable();
- break;
- }
-
- // }}}
- // {{{ download
-
- case 'download': {
- //$params[0] -> The package to download
- if (count($params) != 1) {
- return PEAR::raiseError("download expects one argument: the package to download");
- }
- $server = $this->config->get('master_server');
- if (!ereg('^http://', $params[0])) {
- $pkgfile = "http://$server/get/$params[0]";
- } else {
- $pkgfile = $params[0];
- }
- $this->bytes_downloaded = 0;
- $saved = PEAR_Common::downloadHttp($pkgfile, $this->ui, '.',
- array(&$this, 'downloadCallback'));
- if (PEAR::isError($saved)) {
- return $this->raiseError($saved);
- }
- $fname = basename($saved);
- $this->ui->displayLine("File $fname downloaded ($this->bytes_downloaded bytes)");
- break;
- }
-
- // }}}
- // {{{ list-upgrades
-
- case 'list-upgrades': {
- include_once "PEAR/Registry.php";
- if (empty($params[0])) {
- $state = $this->config->get('preferred_state');
- } else {
- $state = $params[0];
- }
- $caption = 'Available Upgrades';
- if (empty($state) || $state == 'any') {
- $latest = $remote->call("package.listLatestReleases");
- } else {
- $latest = $remote->call("package.listLatestReleases", $state);
- $caption .= ' (' . $state . ')';
- }
- $caption .= ':';
- if (PEAR::isError($latest)) {
- return $latest;
- }
- $reg = new PEAR_Registry($this->config->get('php_dir'));
- $inst = array_flip($reg->listPackages());
- $this->ui->startTable(array('caption' => $caption,
- 'border' => 1));
- $this->ui->tableRow(array('Package', 'Version', 'Size'),
- array('bold' => true));
- foreach ($latest as $package => $info) {
- if (!isset($inst[$package])) {
- // skip packages we don't have installed
- continue;
- }
- extract($info);
- $inst_version = $reg->packageInfo($package, 'version');
- if (version_compare($version, $inst_version, "le")) {
- // installed version is up-to-date
- continue;
- }
- if ($filesize >= 20480) {
- $filesize += 1024 - ($filesize % 1024);
- $fs = sprintf("%dkB", $filesize / 1024);
- } elseif ($filesize > 0) {
- $filesize += 103 - ($filesize % 103);
- $fs = sprintf("%.1fkB", $filesize / 1024.0);
- } else {
- $fs = " -"; // XXX center instead
- }
- $this->ui->tableRow(array($package, $version, $fs));
- }
- $this->ui->endTable();
- break;
- }
-
- // }}}
- default: {
- return false;
- }
- }
- if ($failmsg) {
- return $this->raiseError($failmsg);
- }
- return true;
- }
-
- // }}}
-
- function downloadCallback($msg, $params = null)
- {
- if ($msg == 'done') {
- $this->bytes_downloaded = $params;
- }
- }
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Common.php b/pear/PEAR/Common.php
deleted file mode 100644
index 6720646178..0000000000
--- a/pear/PEAR/Common.php
+++ /dev/null
@@ -1,1458 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@fast.no> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-require_once 'Archive/Tar.php';
-require_once 'System.php';
-require_once 'PEAR/Config.php';
-
-// {{{ globals
-
-/**
- * List of temporary files and directories registered by
- * PEAR_Common::addTempFile().
- * @var array
- */
-$GLOBALS['_PEAR_Common_tempfiles'] = array();
-
-/**
- * Valid maintainer roles
- * @var array
- */
-$GLOBALS['_PEAR_Common_maintainer_roles'] = array('lead','developer','contributor','helper');
-
-/**
- * Valid release states
- * @var array
- */
-$GLOBALS['_PEAR_Common_release_states'] = array('alpha','beta','stable','snapshot','devel');
-
-/**
- * Valid dependency types
- * @var array
- */
-$GLOBALS['_PEAR_Common_dependency_types'] = array('pkg','ext','php','prog','ldlib','rtlib','os','websrv','sapi');
-
-/**
- * Valid dependency relations
- * @var array
- */
-$GLOBALS['_PEAR_Common_dependency_relations'] = array('has','eq','lt','le','gt','ge');
-
-/**
- * Valid file roles
- * @var array
- */
-$GLOBALS['_PEAR_Common_file_roles'] = array('php','ext','test','doc','data','extsrc','script');
-
-/**
- * Valid replacement types
- * @var array
- */
-$GLOBALS['_PEAR_Common_replacement_types'] = array('php-const', 'pear-config');
-
-/**
- * Valid "provide" types
- * @var array
- */
-$GLOBALS['_PEAR_Common_provide_types'] = array('ext', 'prog', 'class', 'function', 'feature', 'api');
-
-/**
- * Valid "provide" types
- * @var array
- */
-$GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'pre-uninstall', 'post-uninstall', 'pre-build', 'post-build', 'pre-configure', 'post-configure', 'pre-setup', 'post-setup');
-
-// }}}
-
-/**
- * Class providing common functionality for PEAR adminsitration classes.
- */
-class PEAR_Common extends PEAR
-{
- // {{{ properties
-
- /** stack of elements, gives some sort of XML context */
- var $element_stack = array();
-
- /** name of currently parsed XML element */
- var $current_element;
-
- /** array of attributes of the currently parsed XML element */
- var $current_attributes = array();
-
- /** assoc with information about a package */
- var $pkginfo = array();
-
- /**
- * User Interface object (PEAR_Frontend_* class). If null,
- * the log() method uses print.
- * @var object
- */
- var $ui = null;
-
- /**
- * Configuration object (PEAR_Config).
- * @var object
- */
- var $config = null;
-
- var $current_path = null;
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Common constructor
- *
- * @access public
- */
- function PEAR_Common()
- {
- $this->PEAR();
- $this->config = &PEAR_Config::singleton();
- }
-
- // }}}
- // {{{ destructor
-
- /**
- * PEAR_Common destructor
- *
- * @access private
- */
- function _PEAR_Common()
- {
- // doesn't work due to bug #14744
- //$tempfiles = $this->_tempfiles;
- $tempfiles =& $GLOBALS['_PEAR_Common_tempfiles'];
- while ($file = array_shift($tempfiles)) {
- if (@is_dir($file)) {
- System::rm("-rf $file");
- } elseif (file_exists($file)) {
- unlink($file);
- }
- }
- }
-
- // }}}
- // {{{ addTempFile()
-
- /**
- * Register a temporary file or directory. When the destructor is
- * executed, all registered temporary files and directories are
- * removed.
- *
- * @param string $file name of file or directory
- *
- * @return void
- *
- * @access public
- */
- function addTempFile($file)
- {
- $GLOBALS['_PEAR_Common_tempfiles'][] = $file;
- }
-
- // }}}
- // {{{ mkDirHier()
-
- /**
- * Wrapper to System::mkDir(), creates a directory as well as
- * any necessary parent directories.
- *
- * @param string $dir directory name
- *
- * @return bool TRUE on success, or a PEAR error
- *
- * @access public
- */
- function mkDirHier($dir)
- {
- $this->log(2, "+ create dir $dir");
- return System::mkDir("-p $dir");
- }
-
- // }}}
- // {{{ log()
-
- /**
- * Logging method.
- *
- * @param int $level log level (0 is quiet, higher is noisier)
- * @param string $msg message to write to the log
- *
- * @return void
- *
- * @access public
- */
- function log($level, $msg)
- {
- if ($this->debug >= $level) {
- if (is_object($this->ui)) {
- $this->ui->displayLine($msg);
- } else {
- print "$msg\n";
- }
- }
- }
-
- // }}}
- // {{{ mkTempDir()
-
- /**
- * Create and register a temporary directory.
- *
- * @param string $tmpdir (optional) Directory to use as tmpdir.
- * Will use system defaults (for example
- * /tmp or c:\windows\temp) if not specified
- *
- * @return string name of created directory
- *
- * @access public
- */
- function mkTempDir($tmpdir = '')
- {
- if ($tmpdir) {
- $topt = "-t $tmpdir ";
- } else {
- $topt = '';
- }
- if (!$tmpdir = System::mktemp($topt . '-d pear')) {
- return false;
- }
- $this->addTempFile($tmpdir);
- return $tmpdir;
- }
-
- // }}}
- // {{{ setFrontendObject()
-
- function setFrontendObject(&$ui)
- {
- $this->ui = &$ui;
- }
-
- // }}}
-
- // {{{ _element_start()
-
- /**
- * XML parser callback for starting elements. Used while package
- * format version is not yet known.
- *
- * @param resource $xp XML parser resource
- * @param string $name name of starting element
- * @param array $attribs element attributes, name => value
- *
- * @return void
- *
- * @access private
- */
- function _element_start($xp, $name, $attribs)
- {
- array_push($this->element_stack, $name);
- $this->current_element = $name;
- $spos = sizeof($this->element_stack) - 2;
- $this->prev_element = ($spos >= 0) ? $this->element_stack[$spos] : '';
- $this->current_attributes = $attribs;
- switch ($name) {
- case 'package': {
- if (isset($attribs['version'])) {
- $vs = preg_replace('/[^0-9a-z]/', '_', $attribs['version']);
- } else {
- $vs = '1_0';
- }
- $elem_start = '_element_start_'. $vs;
- $elem_end = '_element_end_'. $vs;
- $cdata = '_pkginfo_cdata_'. $vs;
- xml_set_element_handler($xp, $elem_start, $elem_end);
- xml_set_character_data_handler($xp, $cdata);
- break;
- }
- }
- }
-
- // }}}
- // {{{ _element_end()
-
- /**
- * XML parser callback for ending elements. Used while package
- * format version is not yet known.
- *
- * @param resource $xp XML parser resource
- * @param string $name name of ending element
- *
- * @return void
- *
- * @access private
- */
- function _element_end($xp, $name)
- {
- }
-
- // }}}
-
- // Support for package DTD v1.0:
- // {{{ _element_start_1_0()
-
- /**
- * XML parser callback for ending elements. Used for version 1.0
- * packages.
- *
- * @param resource $xp XML parser resource
- * @param string $name name of ending element
- *
- * @return void
- *
- * @access private
- */
- function _element_start_1_0($xp, $name, $attribs)
- {
- array_push($this->element_stack, $name);
- $this->current_element = $name;
- $spos = sizeof($this->element_stack) - 2;
- $this->prev_element = ($spos >= 0) ? $this->element_stack[$spos] : '';
- $this->current_attributes = $attribs;
- $this->cdata = '';
- switch ($name) {
- case 'dir':
- if ($this->in_changelog) {
- break;
- }
- if ($attribs['name'] != '/') {
- $this->dir_names[] = $attribs['name'];
- }
- if (isset($attribs['baseinstalldir'])) {
- $this->dir_install = $attribs['baseinstalldir'];
- }
- if (isset($attribs['role'])) {
- $this->dir_role = $attribs['role'];
- }
- break;
- case 'file':
- if ($this->in_changelog) {
- break;
- }
- if (isset($attribs['name'])) {
- $path = '';
- if (count($this->dir_names)) {
- foreach ($this->dir_names as $dir) {
- $path .= $dir . DIRECTORY_SEPARATOR;
- }
- }
- $path .= $attribs['name'];
- unset($attribs['name']);
- $this->current_path = $path;
- $this->filelist[$path] = $attribs;
- // Set the baseinstalldir only if the file don't have this attrib
- if (!isset($this->filelist[$path]['baseinstalldir']) &&
- isset($this->dir_install))
- {
- $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
- }
- // Set the Role
- if (!isset($this->filelist[$path]['role']) && isset($this->dir_role)) {
- $this->filelist[$path]['role'] = $this->dir_role;
- }
- }
- break;
- case 'replace':
- if (!$this->in_changelog) {
- $this->filelist[$this->current_path]['replacements'][] = $attribs;
- }
- break;
-
- case 'libfile':
- if (!$this->in_changelog) {
- $this->lib_atts = $attribs;
- $this->lib_atts['role'] = 'extsrc';
- }
- break;
- case 'maintainers':
- $this->pkginfo['maintainers'] = array();
- $this->m_i = 0; // maintainers array index
- break;
- case 'maintainer':
- // compatibility check
- if (!isset($this->pkginfo['maintainers'])) {
- $this->pkginfo['maintainers'] = array();
- $this->m_i = 0;
- }
- $this->pkginfo['maintainers'][$this->m_i] = array();
- $this->current_maintainer =& $this->pkginfo['maintainers'][$this->m_i];
- break;
- case 'changelog':
- $this->pkginfo['changelog'] = array();
- $this->c_i = 0; // changelog array index
- $this->in_changelog = true;
- break;
- case 'release':
- if ($this->in_changelog) {
- $this->pkginfo['changelog'][$this->c_i] = array();
- $this->current_release = &$this->pkginfo['changelog'][$this->c_i];
- } else {
- $this->current_release = &$this->pkginfo;
- }
- break;
- case 'deps':
- if (!$this->in_changelog) {
- $this->pkginfo['release_deps'] = array();
- }
- break;
- case 'dep':
- // dependencies array index
- if (!$this->in_changelog) {
- $this->d_i = (isset($this->d_i)) ? $this->d_i + 1 : 0;
- $this->pkginfo['release_deps'][$this->d_i] = $attribs;
- }
- break;
- }
- }
-
- // }}}
- // {{{ _element_end_1_0()
-
- /**
- * XML parser callback for ending elements. Used for version 1.0
- * packages.
- *
- * @param resource $xp XML parser resource
- * @param string $name name of ending element
- *
- * @return void
- *
- * @access private
- */
- function _element_end_1_0($xp, $name)
- {
- $data = trim($this->cdata);
- switch ($name) {
- case 'name':
- switch ($this->prev_element) {
- case 'package':
- $this->pkginfo['package'] = ereg_replace('[^a-zA-Z0-9._]', '_', $data);
- break;
- case 'maintainer':
- $this->current_maintainer['name'] = $data;
- break;
- }
- break;
- case 'summary':
- $this->pkginfo['summary'] = $data;
- break;
- case 'description':
- $this->pkginfo['description'] = $data;
- break;
- case 'user':
- $this->current_maintainer['handle'] = $data;
- break;
- case 'email':
- $this->current_maintainer['email'] = $data;
- break;
- case 'role':
- $this->current_maintainer['role'] = $data;
- break;
- case 'version':
- $data = ereg_replace ('[^a-zA-Z0-9._\-]', '_', $data);
- if ($this->in_changelog) {
- $this->current_release['version'] = $data;
- } else {
- $this->pkginfo['version'] = $data;
- }
- break;
- case 'date':
- if ($this->in_changelog) {
- $this->current_release['release_date'] = $data;
- } else {
- $this->pkginfo['release_date'] = $data;
- }
- break;
- case 'notes':
- if ($this->in_changelog) {
- $this->current_release['release_notes'] = $data;
- } else {
- $this->pkginfo['release_notes'] = $data;
- }
- break;
- case 'state':
- if ($this->in_changelog) {
- $this->current_release['release_state'] = $data;
- } else {
- $this->pkginfo['release_state'] = $data;
- }
- break;
- case 'license':
- $this->pkginfo['release_license'] = $data;
- break;
- case 'sources':
- $this->lib_sources[] = $data;
- break;
- case 'dep':
- if ($data = trim($data)) {
- $this->pkginfo['release_deps'][$this->d_i]['name'] = $data;
- }
- break;
- case 'dir':
- if ($this->in_changelog) {
- break;
- }
- array_pop($this->dir_names);
- break;
- case 'file':
- if ($this->in_changelog) {
- break;
- }
- if ($data) {
- $path = '';
- if (count($this->dir_names)) {
- foreach ($this->dir_names as $dir) {
- $path .= $dir . DIRECTORY_SEPARATOR;
- }
- }
- $path .= $data;
- $this->filelist[$path] = $this->current_attributes;
- // Set the baseinstalldir only if the file don't have this attrib
- if (!isset($this->filelist[$path]['baseinstalldir']) &&
- isset($this->dir_install))
- {
- $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
- }
- // Set the Role
- if (!isset($this->filelist[$path]['role']) && isset($this->dir_role)) {
- $this->filelist[$path]['role'] = $this->dir_role;
- }
- }
- break;
- case 'libfile':
- if ($this->in_changelog) {
- break;
- }
- $path = '';
- if (!empty($this->dir_names)) {
- foreach ($this->dir_names as $dir) {
- $path .= $dir . DIRECTORY_SEPARATOR;
- }
- }
- $path .= $this->lib_name;
- $this->filelist[$path] = $this->lib_atts;
- // Set the baseinstalldir only if the file don't have this attrib
- if (!isset($this->filelist[$path]['baseinstalldir']) &&
- isset($this->dir_install))
- {
- $this->filelist[$path]['baseinstalldir'] = $this->dir_install;
- }
- if (isset($this->lib_sources)) {
- $this->filelist[$path]['sources'] = implode(' ', $this->lib_sources);
- }
- unset($this->lib_atts);
- unset($this->lib_sources);
- unset($this->lib_name);
- break;
- case 'libname':
- if ($this->in_changelog) {
- break;
- }
- $this->lib_name = $data;
- break;
- case 'maintainer':
- if (empty($this->pkginfo['maintainers'][$this->m_i]['role'])) {
- $this->pkginfo['maintainers'][$this->m_i]['role'] = 'lead';
- }
- $this->m_i++;
- break;
- case 'release':
- if ($this->in_changelog) {
- $this->c_i++;
- }
- break;
- case 'changelog':
- $this->in_changelog = false;
- break;
- case 'summary':
- $this->pkginfo['summary'] = $data;
- break;
- }
- array_pop($this->element_stack);
- $spos = sizeof($this->element_stack) - 1;
- $this->current_element = ($spos > 0) ? $this->element_stack[$spos] : '';
- }
-
- // }}}
- // {{{ _pkginfo_cdata_1_0()
-
- /**
- * XML parser callback for character data. Used for version 1.0
- * packages.
- *
- * @param resource $xp XML parser resource
- * @param string $name character data
- *
- * @return void
- *
- * @access private
- */
- function _pkginfo_cdata_1_0($xp, $data)
- {
- if (isset($this->cdata)) {
- $this->cdata .= $data;
- }
- }
-
- // }}}
-
- // {{{ infoFromTgzFile()
-
- /**
- * Returns information about a package file. Expects the name of
- * a gzipped tar file as input.
- *
- * @param string $file name of .tgz file
- *
- * @return array array with package information
- *
- * @access public
- *
- */
- function infoFromTgzFile($file)
- {
- if (!@is_file($file)) {
- return $this->raiseError('tgz :: could not open file');
- }
- if (substr($file, -4) == '.tar') {
- $compress = false;
- } else {
- $compress = true;
- }
- $tar = new Archive_Tar($file, $compress);
- $content = $tar->listContent();
- if (!is_array($content)) {
- return $this->raiseError('tgz :: could not get contents of package');
- }
- $xml = null;
- foreach ($content as $file) {
- $name = $file['filename'];
- if ($name == 'package.xml') {
- $xml = $name;
- } elseif (ereg('^.*/package.xml$', $name, $match)) {
- $xml = $match[0];
- }
- }
- $tmpdir = System::mkTemp('-d pear');
- $this->addTempFile($tmpdir);
- if (!$xml || !$tar->extractList($xml, $tmpdir)) {
- return $this->raiseError('tgz :: could not extract the package.xml file');
- }
- return $this->infoFromDescriptionFile("$tmpdir/$xml");
- }
-
- // }}}
- // {{{ infoFromDescriptionFile()
-
- /**
- * Returns information about a package file. Expects the name of
- * a package xml file as input.
- *
- * @param string $descfile name of package xml file
- *
- * @return array array with package information
- *
- * @access public
- *
- */
- function infoFromDescriptionFile($descfile)
- {
- if (!@is_file($descfile) || !is_readable($descfile) ||
- (!$fp = @fopen($descfile, 'r'))) {
- return $this->raiseError("Unable to open $descfile");
- }
-
- // read the whole thing so we only get one cdata callback
- // for each block of cdata
- $data = fread($fp, filesize($descfile));
- return $this->infoFromString($data);
- }
-
- // }}}
- // {{{ infoFromString()
-
- /**
- * Returns information about a package file. Expects the contents
- * of a package xml file as input.
- *
- * @param string $data name of package xml file
- *
- * @return array array with package information
- *
- * @access public
- *
- */
- function infoFromString($data)
- {
- $xp = @xml_parser_create();
- if (!$xp) {
- return $this->raiseError('Unable to create XML parser');
- }
- xml_set_object($xp, $this);
- xml_set_element_handler($xp, '_element_start', '_element_end');
- xml_set_character_data_handler($xp, '_pkginfo_cdata');
- xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
-
- $this->element_stack = array();
- $this->pkginfo = array();
- $this->current_element = false;
- $this->destdir = '';
- $this->pkginfo['filelist'] = array();
- $this->filelist =& $this->pkginfo['filelist'];
- $this->dir_names = array();
- $this->in_changelog = false;
-
- if (!xml_parse($xp, $data, 1)) {
- $code = xml_get_error_code($xp);
- $msg = sprintf("XML error: %s at line %d",
- xml_error_string($code),
- xml_get_current_line_number($xp));
- xml_parser_free($xp);
- return $this->raiseError($msg, $code);
- }
-
- xml_parser_free($xp);
-
- foreach ($this->pkginfo as $k => $v) {
- if (!is_array($v)) {
- $this->pkginfo[$k] = trim($v);
- }
- }
- return $this->pkginfo;
- }
- // }}}
- // {{{ xmlFromInfo()
-
- /**
- * Return an XML document based on the package info (as returned
- * by the PEAR_Common::infoFrom* methods).
- *
- * @param array $pkginfo package info
- *
- * @return string XML data
- *
- * @access public
- */
- function xmlFromInfo($pkginfo)
- {
- static $maint_map = array(
- "handle" => "user",
- "name" => "name",
- "email" => "email",
- "role" => "role",
- );
- $ret = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
- //$ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/package10.dtd\">\n";
- $ret .= "<package version=\"1.0\">
- <name>$pkginfo[package]</name>
- <summary>".htmlspecialchars($pkginfo['summary'])."</summary>
- <description>".htmlspecialchars($pkginfo['description'])."</description>
- <maintainers>
-";
- foreach ($pkginfo['maintainers'] as $maint) {
- $ret .= " <maintainer>\n";
- foreach ($maint_map as $idx => $elm) {
- $ret .= " <$elm>";
- $ret .= htmlspecialchars($maint[$idx]);
- $ret .= "</$elm>\n";
- }
- $ret .= " </maintainer>\n";
- }
- $ret .= " </maintainers>\n";
- $ret .= $this->_makeReleaseXml($pkginfo);
- if (@sizeof($pkginfo['changelog']) > 0) {
- $ret .= " <changelog>\n";
- foreach ($pkginfo['changelog'] as $oldrelease) {
- $ret .= $this->_makeReleaseXml($oldrelease, true);
- }
- $ret .= " </changelog>\n";
- }
- $ret .= "</package>\n";
- return $ret;
- }
-
- // }}}
- // {{{ _makeReleaseXml()
-
- /**
- * Generate part of an XML description with release information.
- *
- * @param array $pkginfo array with release information
- * @param bool $changelog whether the result will be in a changelog element
- *
- * @return string XML data
- *
- * @access private
- */
- function _makeReleaseXml($pkginfo, $changelog = false)
- {
- // XXX QUOTE ENTITIES IN PCDATA, OR EMBED IN CDATA BLOCKS!!
- $indent = $changelog ? " " : "";
- $ret = "$indent <release>\n";
- if (!empty($pkginfo['version'])) {
- $ret .= "$indent <version>$pkginfo[version]</version>\n";
- }
- if (!empty($pkginfo['release_date'])) {
- $ret .= "$indent <date>$pkginfo[release_date]</date>\n";
- }
- if (!empty($pkginfo['release_license'])) {
- $ret .= "$indent <license>$pkginfo[release_license]</license>\n";
- }
- if (!empty($pkginfo['release_state'])) {
- $ret .= "$indent <state>$pkginfo[release_state]</state>\n";
- }
- if (!empty($pkginfo['release_notes'])) {
- $ret .= "$indent <notes>".htmlspecialchars($pkginfo['release_notes'])."</notes>\n";
- }
- if (isset($pkginfo['release_deps']) && sizeof($pkginfo['release_deps']) > 0) {
- $ret .= "$indent <deps>\n";
- foreach ($pkginfo['release_deps'] as $dep) {
- $ret .= "$indent <dep type=\"$dep[type]\" rel=\"$dep[rel]\"";
- if (isset($dep['version'])) {
- $ret .= " version=\"$dep[version]\"";
- }
- if (isset($dep['name'])) {
- $ret .= ">$dep[name]</dep>\n";
- } else {
- $ret .= "/>\n";
- }
- }
- $ret .= "$indent </deps>\n";
- }
- if (isset($pkginfo['filelist'])) {
- $ret .= "$indent <filelist>\n";
- foreach ($pkginfo['filelist'] as $file => $fa) {
- if (@$fa['role'] == 'extsrc') {
- $ret .= "$indent <libfile>\n";
- $ret .= "$indent <libname>$file</libname>\n";
- $ret .= "$indent <sources>$fa[sources]</sources>\n";
- $ret .= "$indent </libfile>\n";
- } else {
- @$ret .= "$indent <file role=\"$fa[role]\"";
- if (isset($fa['baseinstalldir'])) {
- $ret .= ' baseinstalldir="' .
- htmlspecialchars($fa['baseinstalldir']) . '"';
- }
- if (isset($fa['md5sum'])) {
- $ret .= " md5sum=\"$fa[md5sum]\"";
- }
- if (!empty($fa['install-as'])) {
- $ret .= ' install-as="' .
- htmlspecialchars($fa['install-as']) . '"';
- }
- $ret .= ' name="' . htmlspecialchars($file) . '"';
- if (empty($fa['replacements'])) {
- $ret .= "/>\n";
- } else {
- $ret .= ">\n";
- foreach ($fa['replacements'] as $r) {
- $ret .= "$indent <replace";
- foreach ($r as $k => $v) {
- $ret .= " $k=\"" . htmlspecialchars($v) .'"';
- }
- $ret .= "/>\n";
- }
- @$ret .= "$indent </file>\n";
- }
- }
- }
- $ret .= "$indent </filelist>\n";
- }
- $ret .= "$indent </release>\n";
- return $ret;
- }
-
- // }}}
- // {{{ _infoFromAny()
-
- function _infoFromAny($info)
- {
- if (is_string($info) && file_exists($info)) {
- $tmp = substr($info, -4);
- if ($tmp == '.xml') {
- $info = $this->infoFromDescriptionFile($info);
- } elseif ($tmp == '.tar' || $tmp == '.tgz') {
- $info = $this->infoFromTgzFile($info);
- } else {
- $fp = fopen($params[0], "r");
- $test = fread($fp, 5);
- fclose($fp);
- if ($test == "<?xml") {
- $info = $obj->infoFromDescriptionFile($info);
- } else {
- $info = $obj->infoFromTgzFile($info);
- }
- }
- if (PEAR::isError($info)) {
- return $this->raiseError($info);
- }
- }
- return $info;
- }
-
- // }}}
- // {{{ validatePackageInfo()
-
- function validatePackageInfo($info, &$errors, &$warnings)
- {
- global $_PEAR_Common_maintainer_roles,
- $_PEAR_Common_release_states,
- $_PEAR_Common_dependency_types,
- $_PEAR_Common_dependency_relations,
- $_PEAR_Common_file_roles,
- $_PEAR_Common_replacement_types;
- if (PEAR::isError($info = $this->_infoFromAny($info))) {
- return $this->raiseError($info);
- }
- if (!is_array($info)) {
- return false;
- }
- $errors = array();
- $warnings = array();
- if (empty($info['package'])) {
- $errors[] = 'missing package name';
- }
- if (empty($info['summary'])) {
- $errors[] = 'missing summary';
- } elseif (strpos(trim($info['summary']), "\n") !== false) {
- $warnings[] = 'summary should be on a single line';
- }
- if (empty($info['description'])) {
- $errors[] = 'missing description';
- }
- if (empty($info['release_license'])) {
- $errors[] = 'missing license';
- }
- if (empty($info['version'])) {
- $errors[] = 'missing version';
- }
- if (empty($info['release_state'])) {
- $errors[] = 'missing release state';
- } elseif (!in_array($info['release_state'], $_PEAR_Common_release_states)) {
- $errors[] = "invalid release state `$info[release_state]', should be one of: ".implode(' ', $_PEAR_Common_release_states);
- }
- if (empty($info['release_date'])) {
- $errors[] = 'missing release date';
- } elseif (!preg_match('/^\d{4}-\d\d-\d\d$/', $info['release_date'])) {
- $errors[] = "invalid release date `$info[release_date]', format is YYYY-MM-DD";
- }
- if (empty($info['release_notes'])) {
- $errors[] = "missing release notes";
- }
- if (empty($info['maintainers'])) {
- $errors[] = 'no maintainer(s)';
- } else {
- $i = 1;
- foreach ($info['maintainers'] as $m) {
- if (empty($m['handle'])) {
- $errors[] = "maintainer $i: missing handle";
- }
- if (empty($m['role'])) {
- $errors[] = "maintainer $i: missing role";
- } elseif (!in_array($m['role'], $_PEAR_Common_maintainer_roles)) {
- $errors[] = "maintainer $i: invalid role `$m[role]', should be one of: ".implode(' ', $_PEAR_Common_maintainer_roles);
- }
- if (empty($m['name'])) {
- $errors[] = "maintainer $i: missing name";
- }
- if (empty($m['email'])) {
- $errors[] = "maintainer $i: missing email";
- }
- $i++;
- }
- }
- if (!empty($info['deps'])) {
- $i = 1;
- foreach ($info['deps'] as $d) {
- if (empty($d['type'])) {
- $errors[] = "depenency $i: missing type";
- } elseif (!in_array($d['type'], $_PEAR_Common_dependency_types)) {
- $errors[] = "dependency $i: invalid type, should be one of: ".implode(' ', $_PEAR_Common_depenency_types);
- }
- if (empty($d['rel'])) {
- $errors[] = "dependency $i: missing relation";
- } elseif (!in_array($d['rel'], $_PEAR_Common_dependency_relations)) {
- $errors[] = "dependency $i: invalid relation, should be one of: ".implode(' ', $_PEAR_Common_dependency_relations);
- }
- if ($d['rel'] != 'has' && empty($d['version'])) {
- $warnings[] = "dependency $i: missing version";
- } elseif ($d['rel'] == 'has' && !empty($d['version'])) {
- $warnings[] = "dependency $i: version ignored for `has' dependencies";
- }
- if ($d['type'] == 'php' && !empty($d['name'])) {
- $warnings[] = "dependency $i: name ignored for php type dependencies";
- } elseif ($d['type'] != 'php' && empty($d['name'])) {
- $errors[] = "dependency $i: missing name";
- }
- $i++;
- }
- }
- if (empty($info['filelist'])) {
- $errors[] = 'no files';
- } else {
- foreach ($info['filelist'] as $file => $fa) {
- if (empty($fa['role'])) {
- $errors[] = "file $file: missing role";
- } elseif (!in_array($fa['role'], $_PEAR_Common_file_roles)) {
- $errors[] = "file $file: invalid role, should be one of: ".implode(' ', $_PEAR_Common_file_roles);
- } elseif ($fa['role'] == 'extsrc' && empty($fa['sources'])) {
- $errors[] = "file $file: no source files";
- }
- // (ssb) Any checks we can do for baseinstalldir?
- // (cox) Perhaps checks that either the target dir and baseInstall
- // doesn't cointain "../../"
- }
- }
- return true;
- }
-
- // }}}
- // {{{ analyzeSourceCode()
-
- function analyzeSourceCode($file)
- {
- if (!function_exists("token_get_all")) {
- return false;
- }
- if (!$fp = @fopen($file, "r")) {
- return false;
- }
- $contents = fread($fp, filesize($file));
- $tokens = token_get_all($contents);
- for ($i = 0; $i < sizeof($tokens); $i++) {
- list($token, $data) = $tokens[$i];
- if (is_string($token)) {
- var_dump($token);
- } else {
- print token_name($token) . ' ';
- var_dump(rtrim($data));
- }
- }
- $look_for = 0;
- $paren_level = 0;
- $bracket_level = 0;
- $brace_level = 0;
- $lastphpdoc = '';
- $current_class = '';
- $current_class_level = -1;
- $current_function = '';
- $current_function_level = -1;
- $declared_classes = array();
- $declared_functions = array();
- $declared_methods = array();
- $used_classes = array();
- $used_functions = array();
- for ($i = 0; $i < sizeof($tokens); $i++) {
- list($token, $data) = $tokens[$i];
- switch ($token) {
- case '{':
- $brace_level++;
- continue 2;
- case '}':
- $brace_level--;
- if ($current_class_level == $brace_level) {
- $current_class = '';
- $current_class_level = -1;
- }
- if ($current_function_level == $brace_level) {
- $current_function = '';
- $current_function_level = -1;
- }
- continue 2;
- case '[': $bracket_level++; continue 2;
- case ']': $bracket_level--; continue 2;
- case '(': $paren_level++; continue 2;
- case ')': $paren_level--; continue 2;
- case T_CLASS:
- case T_FUNCTION:
- case T_NEW:
- $look_for = $token;
- continue 2;
- case T_STRING:
- if ($look_for == T_CLASS) {
- $current_class = $data;
- $current_class_level = $brace_level;
- $declared_classes[] = $current_class;
- } elseif ($look_for == T_FUNCTION) {
- if ($current_class) {
- $current_function = "$current_class::$data";
- $declared_methods[$current_class][] = $data;
- } else {
- $current_function = $data;
- }
- $current_function_level = $brace_level;
- $declared_functions[] = $current_function;
- } elseif ($look_for == T_NEW) {
- $used_classes[$data] = true;
- }
- $look_for = 0;
- continue 2;
- case T_COMMENT:
- if (preg_match('!^/\*\*\s!', $data)) {
- $lastphpdoc = $data;
- //$j = $i;
- //while ($tokens[$j][0] == T_WHITESPACE) $j++;
- // the declaration that the phpdoc applies to
- // is at $tokens[$j] now
- }
- continue 2;
- case T_DOUBLE_COLON:
- $used_classes[$tokens[$i - 1][1]] = true;
- continue 2;
- }
- }
- return array(
- "declared_classes" => $declared_classes,
- "declared_methods" => $declared_methods,
- "declared_functions" => $declared_functions,
- "used_classes" => array_keys($used_classes),
- );
- }
-
- // }}}
- // {{{ detectDependencies()
-
- function detectDependencies($any, $status_callback = null)
- {
- if (!function_exists("token_get_all")) {
- return false;
- }
- if (PEAR::isError($info = $this->_infoFromAny($any))) {
- return $this->raiseError($info);
- }
- if (!is_array($info)) {
- return false;
- }
- $deps = array();
- $used_c = $decl_c = array();
- foreach ($info['filelist'] as $file => $fa) {
- $tmp = $this->analyzeSourceCode($file);
- $used_c = @array_merge($used_c, $tmp['used_classes']);
- $decl_c = @array_merge($decl_c, $tmp['declared_classes']);
- }
- $used_c = array_unique($used_c);
- $decl_c = array_unique($decl_c);
- $undecl_c = array_diff($used_c, $decl_c);
- return array('used_classes' => $used_c,
- 'declared_classes' => $decl_c,
- 'undeclared_classes' => $undecl_c);
- }
-
- // }}}
- // {{{ getUserRoles()
-
- /**
- * Get the valid roles for a PEAR package maintainer
- *
- * @return array
- * @static
- */
- function getUserRoles()
- {
- return $GLOBALS['_PEAR_Common_maintainer_roles'];
- }
-
- // }}}
- // {{{ getReleaseStates()
-
- /**
- * Get the valid package release states of packages
- *
- * @return array
- * @static
- */
- function getReleaseStates()
- {
- return $GLOBALS['_PEAR_Common_release_states'];
- }
-
- // }}}
- // {{{ getDependencyTypes()
-
- /**
- * Get the implemented dependency types (php, ext, pkg etc.)
- *
- * @return array
- * @static
- */
- function getDependencyTypes()
- {
- return $GLOBALS['_PEAR_Common_dependency_types'];
- }
-
- // }}}
- // {{{ getDependencyRelations()
-
- /**
- * Get the implemented dependency relations (has, lt, ge etc.)
- *
- * @return array
- * @static
- */
- function getDependencyRelations()
- {
- return $GLOBALS['_PEAR_Common_dependency_relations'];
- }
-
- // }}}
- // {{{ getFileRoles()
-
- /**
- * Get the implemented file roles
- *
- * @return array
- * @static
- */
- function getFileRoles()
- {
- return $GLOBALS['_PEAR_Common_file_roles'];
- }
-
- // }}}
- // {{{ getReplacementTypes()
-
- /**
- * Get the implemented file replacement types in
- *
- * @return array
- * @static
- */
- function getReplacementTypes()
- {
- return $GLOBALS['_PEAR_Common_replacement_types'];
- }
-
- // }}}
- // {{{ getReplacementTypes()
-
- /**
- * Get the implemented file replacement types in
- *
- * @return array
- * @static
- */
- function getProvideTypes()
- {
- return $GLOBALS['_PEAR_Common_provide_types'];
- }
-
- // }}}
- // {{{ getReplacementTypes()
-
- /**
- * Get the implemented file replacement types in
- *
- * @return array
- * @static
- */
- function getScriptPhases()
- {
- return $GLOBALS['_PEAR_Common_script_phases'];
- }
-
- // }}}
- // {{{ validPackageName()
-
- /**
- * Test whether a string contains a valid package name.
- *
- * @param string $name the package name to test
- *
- * @return bool
- *
- * @access public
- */
- function validPackageName($name)
- {
- return (bool)preg_match('/^[A-Z][A-Za-z0-9_]+$/', $name);
- }
-
-
- // }}}
-
- // {{{ downloadHttp()
-
- /**
- * Download a file through HTTP. Considers suggested file name in
- * Content-disposition: header and can run a callback function for
- * different events. The callback will be called with two
- * parameters: the callback type, and parameters. The implemented
- * callback types are:
- *
- * 'setup' called at the very beginning, parameter is a UI object
- * that should be used for all output
- * 'message' the parameter is a string with an informational message
- * 'saveas' may be used to save with a different file name, the
- * parameter is the filename that is about to be used.
- * If a 'saveas' callback returns a non-empty string,
- * that file name will be used as the filename instead.
- * Note that $save_dir will not be affected by this, only
- * the basename of the file.
- * 'start' download is starting, parameter is number of bytes
- * that are expected, or -1 if unknown
- * 'bytesread' parameter is the number of bytes read so far
- * 'done' download is complete, parameter is the total number
- * of bytes read
- * 'connfailed' if the TCP connection fails, this callback is called
- * with array(host,port,errno,errmsg)
- * 'writefailed' if writing to disk fails, this callback is called
- * with array(destfile,errmsg)
- *
- * If an HTTP proxy has been configured (http_proxy PEAR_Config
- * setting), the proxy will be used.
- *
- * @param string $url the URL to download
- * @param object $ui PEAR_Frontend_* instance
- * @param object $config PEAR_Config instance
- * @param string $save_dir (optional) directory to save file in
- * @param mixed $callback (optional) function/method to call for status
- * updates
- *
- * @return string Returns the full path of the downloaded file or a PEAR
- * error on failure. If the error is caused by
- * socket-related errors, the error object will
- * have the fsockopen error code available through
- * getCode().
- *
- * @access public
- */
- function downloadHttp($url, &$ui, $save_dir = '.', $callback = null)
- {
- if ($callback) {
- call_user_func($callback, 'setup', array(&$ui));
- }
- if (preg_match('!^http://([^/:?#]*)(:(\d+))?(/.*)!', $url, $matches)) {
- list(,$host,,$port,$path) = $matches;
- }
- if (isset($this)) {
- $config = &$this->config;
- } else {
- $config = &PEAR_Config::singleton();
- }
- $proxy_host = $proxy_port = null;
- if ($proxy = $config->get('http_proxy')) {
- list($proxy_host, $proxy_port) = explode(':', $proxy);
- if (empty($proxy_port)) {
- $proxy_port = 8080;
- }
- if ($callback) {
- call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
- }
- }
- if (empty($port)) {
- $port = 80;
- }
- if ($proxy_host) {
- $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr);
- if (!$fp) {
- if ($callback) {
- call_user_func($callback, 'connfailed', array($proxy_host, $proxy_port,
- $errno, $errstr));
- }
- return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", $errno);
- }
- $request = "GET $url HTTP/1.0\r\n";
- } else {
- $fp = @fsockopen($host, $port, $errno, $errstr);
- if (!$fp) {
- if ($callback) {
- call_user_func($callback, 'connfailed', array($host, $port,
- $errno, $errstr));
- }
- return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
- }
- $request = "GET $path HTTP/1.0\r\n";
- }
- $request .= "Host: $host:$port\r\n".
- "User-Agent: ".PHP_VERSION."\r\n".
- "\r\n";
- fwrite($fp, $request);
- $headers = array();
- while (trim($line = fgets($fp, 1024))) {
- if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
- $headers[strtolower($matches[1])] = trim($matches[2]);
- } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
- if ($matches[1] != 200) {
- return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
- }
- }
- }
- if (isset($headers['content-disposition']) &&
- preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|$)/', $headers['content-disposition'], $matches)) {
- $save_as = basename($matches[1]);
- } else {
- $save_as = basename($url);
- }
- if ($callback) {
- $tmp = call_user_func($callback, 'saveas', $save_as);
- if ($tmp) {
- $save_as = $tmp;
- }
- }
- $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
- if (!$wp = @fopen($dest_file, 'wb')) {
- fclose($fp);
- if ($callback) {
- call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
- }
- return PEAR::raiseError("could not open $dest_file for writing");
- }
- if (isset($headers['content-length'])) {
- $length = $headers['content-length'];
- } else {
- $length = -1;
- }
- $bytes = 0;
- if ($callback) {
- call_user_func($callback, 'start', $length);
- }
- while ($data = @fread($fp, 1024)) {
- $bytes += strlen($data);
- if ($callback) {
- call_user_func($callback, 'bytesread', $bytes);
- }
- if (!@fwrite($wp, $data)) {
- fclose($fp);
- if ($callback) {
- call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
- }
- return PEAR::raiseError("$dest_file: write failed ($php_errormsg)");
- }
- }
- fclose($fp);
- fclose($wp);
- if ($callback) {
- call_user_func($callback, 'done', $bytes);
- }
- // callback: done!
- return $dest_file;
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Config.php b/pear/PEAR/Config.php
deleted file mode 100644
index 8e3ed6dbd5..0000000000
--- a/pear/PEAR/Config.php
+++ /dev/null
@@ -1,801 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-
-/**
- * Last created PEAR_Config instance.
- * @var object
- */
-$GLOBALS['_PEAR_Config_instance'] = null;
-
-define('PEAR_CONFIG_DEFAULT_DOCDIR',
- PHP_DATADIR.DIRECTORY_SEPARATOR.'doc'.DIRECTORY_SEPARATOR.'pear');
-define('PEAR_DEFAULT_UMASK', umask());
-
-// in case a --without-pear PHP installation is used
-if (!defined('PEAR_INSTALL_DIR')) {
- define('PEAR_INSTALL_DIR', PHP_LIBDIR);
-}
-if (!defined('PEAR_EXTENSION_DIR')) {
- define('PEAR_EXTENSION_DIR', PHP_EXTENSION_DIR);
-}
-
-/**
- * This is a class for storing configuration data, keeping track of
- * which are system-defined, user-defined or defaulted.
- */
-class PEAR_Config extends PEAR
-{
- // {{{ properties
-
- /**
- * Array of config files used.
- *
- * @var array layer => config file
- */
- var $files = array(
- 'system' => '',
- 'user' => '',
- );
-
- var $layers = array();
-
- /**
- * Configuration data, two-dimensional array where the first
- * dimension is the config layer ('user', 'system' and 'default'),
- * and the second dimension is keyname => value.
- *
- * The order in the first dimension is important! Earlier
- * layers will shadow later ones when a config value is
- * requested (if a 'user' value exists, it will be returned first,
- * then 'system' and finally 'default').
- *
- * @var array layer => array(keyname => value, ...)
- */
- var $configuration = array(
- 'user' => array(),
- 'system' => array(),
- 'default' => array(),
- );
-
- /**
- * Information about the configuration data. Stores the type,
- * default value and a documentation string for each configuration
- * value.
- *
- * @var array layer => array(infotype => value, ...)
- */
- var $configuration_info = array(
- 'master_server' => array(
- 'type' => 'string',
- 'default' => 'pear.php.net',
- 'doc' => 'name of the main PEAR server',
- ),
- 'php_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_INSTALL_DIR,
- 'doc' => 'directory where .php files are installed',
- ),
- 'ext_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_EXTENSION_DIR,
- 'doc' => 'directory where loadable extensions are installed',
- ),
- 'doc_dir' => array(
- 'type' => 'directory',
- 'default' => PEAR_CONFIG_DEFAULT_DOCDIR,
- 'doc' => 'directory where documentation is installed',
- ),
- 'bin_dir' => array(
- 'type' => 'directory',
- 'default' => PHP_BINDIR,
- 'doc' => 'directory where executables are installed',
- ),
- 'username' => array(
- 'type' => 'string',
- 'default' => '',
- 'doc' => '(maintainers) your PEAR account name',
- ),
- 'password' => array(
- 'type' => 'password',
- 'default' => '',
- 'doc' => '(maintainers) your PEAR account password',
- ),
- 'verbose' => array(
- 'type' => 'integer',
- 'default' => 1,
- 'doc' => 'verbosity level',
- ),
- 'preferred_state' => array(
- 'type' => 'set',
- 'default' => 'stable',
- 'doc' => 'the installer will prefer releases with this state
-when installing packages without a version or state specified',
- 'valid_set' => array(
- 'stable', 'beta', 'alpha', 'devel', 'snapshot', 'any'),
- ),
- 'http_proxy' => array(
- 'type' => 'string',
- 'default' => '',
- 'doc' => 'HTTP proxy (host:port) to use when downloading packages',
- ),
- 'umask' => array(
- 'type' => 'int',
- 'default' => PEAR_DEFAULT_UMASK,
- 'doc' => 'umask used when creating files (Unix-like systems only)',
- ),
-/*
- 'testset1' => array(
- 'type' => 'set',
- 'default' => 'foo',
- 'doc' => 'test set',
- 'valid_set' => array('foo', 'bar'),
- ),
-*/
- );
-
- // }}}
-
- // {{{ PEAR_Config([file], [defaults_file])
-
- /**
- * Constructor.
- *
- * @param string (optional) file to read user-defined options from
- * @param string (optional) file to read system-wide defaults from
- *
- * @access public
- *
- * @see PEAR_Config::singleton
- */
- function PEAR_Config($user_file = '', $system_file = '')
- {
- $this->PEAR();
- $sl = DIRECTORY_SEPARATOR;
- if (empty($user_file)) {
- if (OS_WINDOWS) {
- $user_file = PHP_SYSCONFDIR . $sl . 'pear.ini';
- } else {
- $user_file = getenv('HOME') . $sl . '.pearrc';
- }
- }
- if (empty($system_file)) {
- if (OS_WINDOWS) {
- $system_file = PHP_SYSCONFDIR . $sl . 'pearsys.ini';
- } else {
- $system_file = PHP_SYSCONFDIR . $sl . 'pear.conf';
- }
- }
- $this->layers = array_keys($this->configuration);
- $this->files['user'] = $user_file;
- $this->files['system'] = $system_file;
- if ($user_file && file_exists($user_file)) {
- $this->readConfigFile($user_file);
- }
- if ($system_file && file_exists($system_file)) {
- $this->mergeConfigFile($system_file, false, 'system');
- }
- foreach ($this->configuration_info as $key => $info) {
- $this->configuration['default'][$key] = $info['default'];
- }
- //$GLOBALS['_PEAR_Config_instance'] = &$this;
- }
-
- // }}}
- // {{{ singleton([file], [defaults_file])
-
- /**
- * Static singleton method. If you want to keep only one instance
- * of this class in use, this method will give you a reference to
- * the last created PEAR_Config object if one exists, or create a
- * new object.
- *
- * @param string (optional) file to read user-defined options from
- * @param string (optional) file to read system-wide defaults from
- *
- * @return object an existing or new PEAR_Config instance
- *
- * @access public
- *
- * @see PEAR_Config::PEAR_Config
- */
- function &singleton($user_file = '', $system_file = '')
- {
- if (is_object($GLOBALS['_PEAR_Config_instance'])) {
- return $GLOBALS['_PEAR_Config_instance'];
- }
- $GLOBALS['_PEAR_Config_instance'] =
- &new PEAR_Config($user_file, $system_file);
- return $GLOBALS['_PEAR_Config_instance'];
- }
-
- // }}}
- // {{{ readConfigFile([file], [layer])
-
- /**
- * Reads configuration data from a file. All existing values in
- * the config layer are discarded and replaced with data from the
- * file.
- *
- * @param string (optional) file to read from, if NULL or not
- * specified, the last-used file for the same layer (second param)
- * is used
- *
- * @param string (optional) config layer to insert data into
- * ('user' or 'system')
- *
- * @return bool TRUE on success or a PEAR error on failure
- *
- * @access public
- */
- function readConfigFile($file = null, $layer = 'user')
- {
- if (empty($this->files[$layer])) {
- return $this->raiseError("unknown config file type `$layer'");
- }
- if ($file === null) {
- $file = $this->files[$layer];
- }
- $data = $this->_readConfigDataFrom($file);
- if (PEAR::isError($data)) {
- return $data;
- }
- $this->_decodeInput($data);
- $this->configuration[$layer] = $data;
- return true;
- }
-
- // }}}
- // {{{ mergeConfigFile(file, [override], [layer])
-
- /**
- * Merges data into a config layer from a file. Does the same
- * thing as readConfigFile, except it does not replace all
- * existing values in the config layer.
- *
- * @param string file to read from
- *
- * @param bool (optional) whether to overwrite existing data
- * (default TRUE)
- *
- * @param string config layer to insert data into ('user' or
- * 'system')
- *
- * @return bool TRUE on success or a PEAR error on failure
- *
- * @access public.
- */
- function mergeConfigFile($file, $override = true, $layer = 'user')
- {
- if (empty($this->files[$layer])) {
- return $this->raiseError("unknown config file type `$layer'");
- }
- if ($file === null) {
- $file = $this->files[$layer];
- }
- $data = $this->_readConfigDataFrom($file);
- if (PEAR::isError($data)) {
- return $data;
- }
- $this->_decodeInput($data);
- if ($override) {
- $this->configuration[$layer] = array_merge($this->configuration[$layer], $data);
- } else {
- $this->configuration[$layer] = array_merge($data, $this->configuration[$layer]);
- }
- return true;
- }
-
- // }}}
- // {{{ writeConfigFile([file], [layer])
-
- /**
- * Writes data into a config layer from a file.
- *
- * @param string file to read from
- *
- * @param bool (optional) whether to overwrite existing data
- * (default TRUE)
- *
- * @param string config layer to insert data into ('user' or
- * 'system')
- *
- * @return bool TRUE on success or a PEAR error on failure
- *
- * @access public.
- */
- function writeConfigFile($file = null, $layer = 'user')
- {
- if ($layer == 'both' || $layer == 'all') {
- foreach ($this->files as $type => $file) {
- $err = $this->writeConfigFile($file, $type);
- if (PEAR::isError($err)) {
- return $err;
- }
- }
- return true;
- }
- if (empty($this->files[$layer])) {
- return $this->raiseError("unknown config file type `$layer'");
- }
- if ($file === null) {
- $file = $this->files[$layer];
- }
- $data = $this->configuration[$layer];
- $this->_encodeOutput($data);
- if (!@System::mkDir("-p " . dirname($file))) {
- return $this->raiseError("could not create directory: " . dirname($file));
- }
- if (@is_file($file) && !@is_writeable($file)) {
- return $this->raiseError("no write access to $file!");
- }
- $fp = @fopen($file, "w");
- if (!$fp) {
- return $this->raiseError("PEAR_Config::writeConfigFile fopen('$file','w') failed");
- }
- $contents = "#PEAR_Config 0.9\n" . serialize($data);
- if (!@fwrite($fp, $contents)) {
- return $this->raiseError("PEAR_Config::writeConfigFile: fwrite failed");
- }
- return true;
- }
-
- // }}}
- // {{{ _readConfigDataFrom(file)
-
- /**
- * Reads configuration data from a file and returns the parsed data
- * in an array.
- *
- * @param string file to read from
- *
- * @return array configuration data or a PEAR error on failure
- *
- * @access private
- */
- function _readConfigDataFrom($file)
- {
- $fp = @fopen($file, "r");
- if (!$fp) {
- return $this->raiseError("PEAR_Config::readConfigFile fopen('$file','r') failed");
- }
- $size = filesize($file);
- $contents = fread($fp, $size);
- $version = '0.1';
- if (preg_match('/^#PEAR_Config\s+(\S+)\s+/si', $contents, $matches)) {
- $version = $matches[1];
- $contents = substr($contents, strlen($matches[0]));
- }
- if (version_compare($version, '1', '<')) {
- $data = unserialize($contents);
- if (!is_array($data)) {
- if (strlen(trim($contents)) > 0) {
- $error = "PEAR_Config: bad data in $file";
-// if (isset($this)) {
- return $this->raiseError($error);
-// } else {
-// return PEAR::raiseError($error);
- } else {
- $data = array();
- }
- }
- // add parsing of newer formats here...
- } else {
- return $this->raiseError("$file: unknown version `$version'");
- }
- return $data;
- }
-
- // }}}
- // {{{ _encodeOutput(&data)
-
- /**
- * Encodes/scrambles configuration data before writing to files.
- * Currently, 'password' values will be base64-encoded as to avoid
- * that people spot cleartext passwords by accident.
- *
- * @param array (reference) array to encode values in
- *
- * @return bool TRUE on success
- *
- * @access private
- */
- function _encodeOutput(&$data)
- {
- foreach ($data as $key => $value) {
- if (!isset($this->configuration_info[$key])) {
- continue;
- }
- $type = $this->configuration_info[$key]['type'];
- switch ($type) {
- // we base64-encode passwords so they are at least
- // not shown in plain by accident
- case 'password': {
- $data[$key] = base64_encode($data[$key]);
- break;
- }
- }
- }
- return true;
- }
-
- // }}}
- // {{{ _decodeInput(&data)
-
- /**
- * Decodes/unscrambles configuration data after reading from files.
- *
- * @param array (reference) array to encode values in
- *
- * @return bool TRUE on success
- *
- * @access private
- *
- * @see PEAR_Config::_encodeOutput
- */
- function _decodeInput(&$data)
- {
- if (!is_array($data)) {
- return true;
- }
- foreach ($data as $key => $value) {
- if (!isset($this->configuration_info[$key])) {
- continue;
- }
- $type = $this->configuration_info[$key]['type'];
- switch ($type) {
- case 'password': {
- $data[$key] = base64_decode($data[$key]);
- break;
- }
- }
- }
- return true;
- }
-
- // }}}
- // {{{ get(key, [layer])
-
- /**
- * Returns a configuration value, prioritizing layers as per the
- * layers property.
- *
- * @param string config key
- *
- * @return mixed the config value, or NULL if not found
- *
- * @access public
- */
- function get($key, $layer = null)
- {
- if ($layer === null) {
- foreach ($this->layers as $layer) {
- if (isset($this->configuration[$layer][$key])) {
- return $this->configuration[$layer][$key];
- }
- }
- } elseif (isset($this->configuration[$layer][$key])) {
- return $this->configuration[$layer][$key];
- }
- return null;
- }
-
- // }}}
- // {{{ set(key, value, [layer])
-
- /**
- * Set a config value in a specific layer (defaults to 'user').
- * Enforces the types defined in the configuration_info array. An
- * integer config variable will be cast to int, and a set config
- * variable will be validated against its legal values.
- *
- * @param string config key
- *
- * @param string config value
- *
- * @param string (optional) config layer
- *
- * @return bool TRUE on success, FALSE on failure
- *
- * @access public
- */
- function set($key, $value, $layer = 'user')
- {
- if (empty($this->configuration_info[$key])) {
- return false;
- }
- extract($this->configuration_info[$key]);
- switch ($type) {
- case 'integer': {
- $value = (int)$value;
- break;
- }
- case 'set': {
- // If a valid_set is specified, require the value to
- // be in the set. If there is no valid_set, accept
- // any value.
- if ($valid_set) {
- reset($valid_set);
- if ((key($valid_set) === 0 && !in_array($value, $valid_set)) ||
- empty($valid_set[$value]))
- {
- return false;
- }
- }
- break;
- }
- }
- $this->configuration[$layer][$key] = $value;
- return true;
- }
-
- // }}}
- // {{{ getType(key)
-
- /**
- * Get the type of a config value.
- *
- * @param string config key
- *
- * @return string type, one of "string", "integer", "file",
- * "directory", "set" or "password".
- *
- * @access public
- *
- */
- function getType($key)
- {
- if (isset($this->configuration_info[$key])) {
- return $this->configuration_info[$key]['type'];
- }
- return false;
- }
-
- // }}}
- // {{{ getDocs(key)
-
- /**
- * Get the documentation for a config value.
- *
- * @param string config key
- *
- * @return string documentation string
- *
- * @access public
- *
- */
- function getDocs($key)
- {
- if (isset($this->configuration_info[$key])) {
- return $this->configuration_info[$key]['doc'];
- }
- return false;
- }
-
- // }}}
- // {{{ getSetValues(key)
-
- /**
- * Get the list of allowed set values for a config value. Returns
- * NULL for config values that are not sets.
- *
- * @param string config key
- *
- * @return array enumerated array of set values, or NULL if the
- * config key is unknown or not a set
- *
- * @access public
- *
- */
- function getSetValues($key)
- {
- if (isset($this->configuration_info[$key]) &&
- isset($this->configuration_info[$key]['type']) &&
- $this->configuration_info[$key]['type'] == 'set')
- {
- $valid_set = $this->configuration_info[$key]['valid_set'];
- reset($valid_set);
- if (key($valid_set) === 0) {
- return $valid_set;
- }
- return array_keys($valid_set);
- }
- return false;
- }
-
- // }}}
- // {{{ getKeys()
-
- /**
- * Get all the current config keys.
- *
- * @return array simple array of config keys
- *
- * @access public
- */
- function getKeys()
- {
- $keys = array();
- foreach ($this->layers as $layer) {
- $keys = array_merge($keys, $this->configuration[$layer]);
- }
- return array_keys($keys);
- }
-
- // }}}
- // {{{ remove(key, [layer])
-
- /**
- * Remove the a config key from a specific config layer.
- *
- * @param string config key
- *
- * @param string (optional) config layer
- *
- * @return bool TRUE on success, FALSE on failure
- *
- * @access public
- */
- function remove($key, $layer = 'user')
- {
- if (isset($this->configuration[$layer][$key])) {
- unset($this->configuration[$layer][$key]);
- return true;
- }
- return false;
- }
-
- // }}}
- // {{{ store([layer])
-
- /**
- * Stores configuration data in a layer.
- *
- * @param string config layer to store
- *
- * @return bool TRUE on success, or PEAR error on failure
- *
- * @access public
- */
- function store($layer = 'user')
- {
- return $this->writeConfigFile(null, $layer);
- }
-
- // }}}
- // {{{ toDefault(key)
-
- /**
- * Unset the user-defined value of a config key, reverting the
- * value to the system-defined one.
- *
- * @param string config key
- *
- * @return bool TRUE on success, FALSE on failure
- *
- * @access public
- */
- function toDefault($key)
- {
- trigger_error("PEAR_Config::toDefault() deprecated, use PEAR_Config::remove() instead", E_USER_NOTICE);
- return $this->remove($key, 'user');
- }
-
- // }}}
- // {{{ definedBy(key)
-
- /**
- * Tells what config layer that gets to define a key.
- *
- * @param string config key
- *
- * @return string the config layer, or an empty string if not found
- *
- * @access public
- */
- function definedBy($key)
- {
- foreach ($this->layers as $layer) {
- if (isset($this->configuration[$layer][$key])) {
- return $layer;
- }
- }
- return '';
- }
-
- // }}}
- // {{{ isDefaulted(key)
-
- /**
- * Tells whether a config value has a system-defined value.
- *
- * @param string config key
- *
- * @return bool
- *
- * @access public
- *
- * @deprecated
- */
- function isDefaulted($key)
- {
- trigger_error("PEAR_Config::isDefaulted() deprecated, use PEAR_Config::definedBy() instead", E_USER_NOTICE);
- return $this->definedBy($key) == 'system';
- }
-
- // }}}
- // {{{ isDefined(key)
-
- /**
- * Tells whether a given key exists as a config value.
- *
- * @param string config key
- *
- * @return bool whether <config key> exists in this object
- *
- * @access public
- */
- function isDefined($key)
- {
- foreach ($this->layers as $layer) {
- if (isset($this->configuration[$layer][$key])) {
- return true;
- }
- }
- return false;
- }
-
- // }}}
- // {{{ isDefinedLayer(key)
-
- /**
- * Tells whether a given config layer exists.
- *
- * @param string config layer
- *
- * @return bool whether <config layer> exists in this object
- *
- * @access public
- */
- function isDefinedLayer($layer)
- {
- return isset($this->configuration[$layer]);
- }
-
- // }}}
- // {{{ getLayers()
-
- /**
- * Returns the layers defined (except the 'default' one)
- *
- * @return array of the defined layers
- */
- function getLayers()
- {
- $cf = $this->configuration;
- unset($cf['default']);
- return array_keys($cf);
- }
-
- // }}}
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Dependency.php b/pear/PEAR/Dependency.php
deleted file mode 100644
index 3b6f6a7684..0000000000
--- a/pear/PEAR/Dependency.php
+++ /dev/null
@@ -1,257 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Authors: Tomas V.V.Cox <cox@idecnet.com> |
-// | Stig Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Methods for dependencies check. Based on Stig's dependencies RFC
-* at http://cvs.php.net/cvs.php/pearweb/rfc
-* (requires php >= 4.1)
-*/
-
-require_once "PEAR.php";
-
-class PEAR_Dependency
-{
- function PEAR_Dependency(&$registry)
- {
- $this->registry = &$registry;
- }
- /**
- * This method maps the xml dependency definition to the
- * PEAR_dependecy one
- *
- * $opts => Array
- * (
- * [type] => pkg
- * [rel] => ge
- * [version] => 3.4
- * [name] => HTML_Common
- * )
- */
- function callCheckMethod($opts)
- {
- $rel = isset($opts['rel']) ? $opts['rel'] : 'has';
- if (isset($opts['version'])) {
- $req = $opts['version'];
- $rel = 'v.' . $rel;
- } else {
- $req = null;
- }
- $name = isset($opts['name']) ? $opts['name'] : null;
- switch ($opts['type']) {
- case 'pkg':
- return $this->checkPackage($name, $req, $rel);
- break;
- case 'ext':
- return $this->checkExtension($name, $req, $rel);
- break;
- case 'php':
- return $this->checkPHP($req, $rel);
- break;
- case 'prog':
- return $this->checkProgram($name);
- break;
- case 'os':
- return $this->checkOS($name);
- break;
- case 'sapi':
- return $this->checkSAPI($name);
- break;
- default:
- return "'{$opts['type']}' dependency type not supported";
- }
- }
-
- /**
- * Package dependencies check method
- *
- * @param string $name Name of the package to test
- * @param string $version The package version required
- * @param string $relation How to compare versions with eachother
- *
- * @return mixed bool false if no error or the error string
- */
- function checkPackage($name, $req = null, $relation = 'has')
- {
- switch ($relation) {
- case 'has':
- if (!$this->registry->packageExists($name)) {
- return "requires package `$name'";
- }
- return false;
- case 'not':
- if (!$this->registry->packageExists($name)) {
- return "conflicts with package `$name'";
- }
- return false;
- case 'lt':
- case 'le':
- case 'eq':
- case 'ne':
- case 'ge':
- case 'gt':
- $version = $this->registry->packageInfo($name, 'version');
- if (!version_compare($version, $req, $relation)) {
- return "requires package `$name' " .
- $this->signOperator($relation) . " $req";
- }
- }
- return "Relation '$relation' with requirement '$req' is not supported (name=$name)";
- }
-
- /**
- * Extension dependencies check method
- *
- * @param string $name Name of the extension to test
- * @param string $req_ext_ver Required extension version to compare with
- * @param string $relation How to compare versions with eachother
- *
- * @return mixed bool false if no error or the error string
- */
- function checkExtension($name, $req = null, $relation = 'has')
- {
- // XXX (ssb): could we avoid loading the extension here?
- if (!extension_loaded($name)) {
- $dlext = OS_WINDOWS ? '.dll' : '.so';
- if (!@dl($name . $dlext)) {
- return "'$name' PHP extension is not installed";
- }
- }
- if ($relation == 'has') {
- return false;
- }
- if (substr($relation, 0, 2) == 'v.') {
- $ext_ver = phpversion($name);
- $operator = substr($relation, 2);
- if (!version_compare($ext_ver, $req, $operator)) {
- return "'$name' PHP extension version " .
- $this->signOperator($operator) . " $req is required";
- }
- }
- return false;
- }
-
- /**
- * Operating system dependencies check method
- *
- * @param string $os Name of the operating system
- *
- * @return mixed bool false if no error or the error string
- */
- function checkOS($os)
- {
- // XXX Fixme: Implement a more flexible way, like
- // comma separated values or something similar to PEAR_OS
-
- // only 'has' relation is supported
- if ($os == PHP_OS) {
- return false;
- }
- return "'$os' operating system not supported";
- }
-
- /**
- * PHP version check method
- *
- * @param string $req which version to compare
- * @param string $relation how to compare the version
- *
- * @return mixed bool false if no error or the error string
- */
- function checkPHP($req, $relation = 'v.ge')
- {
- if (substr($relation, 0, 2) == 'v.') {
- $php_ver = phpversion();
- $operator = substr($relation, 2);
- if (!version_compare($php_ver, $req, $operator)) {
- return "PHP version " . $this->signOperator($operator) .
- " $req is required";
- }
- }
- return false;
- }
-
- /**
- * External program check method. Looks for executable files in
- * directories listed in the PATH environment variable.
- *
- * @param string $program which program to look for
- *
- * @return mixed bool false if no error or the error string
- */
- function checkProgram($program)
- {
- // XXX FIXME honor safe mode
- $path_delim = OS_WINDOWS ? ';' : ':';
- $exe_suffix = OS_WINDOWS ? '.exe' : '';
- $path_elements = explode($path_delim, getenv('PATH'));
- foreach ($path_elements as $dir) {
- $file = $dir . DIRECTORY_SEPARATOR . $program . $exe_suffix;
- if (@file_exists($file) && @is_executable($file)) {
- return false;
- }
- }
- return "'$program' program is not present in the PATH";
- }
-
- /**
- * SAPI backend check method. Version comparison is not yet
- * available here.
- *
- * @param string $name name of SAPI backend
- * @param string $req which version to compare
- * @param string $relation how to compare versions (currently
- * hardcoded to 'has')
- * @return mixed bool false if no error or the error string
- */
- function checkSAPI($name, $req = null, $relation = 'has')
- {
- // XXX Fixme: There is no way to know if the user has or
- // not other SAPI backends installed than the installer one
-
- $sapi_backend = php_sapi_name();
- // Version comparisons not supported, sapi backends don't have
- // version information yet.
- if ($sapi_backend == $name) {
- return false;
- }
- return "'$sapi_backend' SAPI backend not supported";
- }
-
- /**
- * Converts text comparing operators to them sign equivalents
- * ex: 'ge' to '>='
- */
- function signOperator($operator)
- {
- switch($operator) {
- case 'lt': return '<';
- case 'le': return '<=';
- case 'gt': return '>';
- case 'ge': return '>=';
- case 'eq': return '==';
- case 'ne': return '!=';
- default:
- return $operator;
- }
- }
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Frontend/CLI.php b/pear/PEAR/Frontend/CLI.php
deleted file mode 100644
index f8e928a463..0000000000
--- a/pear/PEAR/Frontend/CLI.php
+++ /dev/null
@@ -1,322 +0,0 @@
-<?php
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-require_once "PEAR.php";
-
-class PEAR_Frontend_CLI extends PEAR
-{
- // {{{ properties
-
- /**
- * What type of user interface this frontend is for.
- * @var string
- * @access public
- */
- var $type = 'CLI';
- var $lp = ''; // line prefix
-
- var $omode = 'plain';
- var $params = array();
- var $term = array(
- 'bold' => '',
- 'normal' => '',
- );
-
- // }}}
-
- // {{{ constructor
-
- function PEAR_Frontend_CLI()
- {
- parent::PEAR();
- $term = getenv('TERM'); //(cox) $_ENV is empty for me in 4.1.1
- if ($term) {
- // XXX can use ncurses extension here, if available
- if (preg_match('/^(xterm|vt220|linux)/', $term)) {
- $this->term['bold'] = sprintf("%c%c%c%c", 27, 91, 49, 109);
- $this->term['normal']=sprintf("%c%c%c", 27, 91, 109);
- } elseif (preg_match('/^vt100/', $term)) {
- $this->term['bold'] = sprintf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0);
- $this->term['normal']=sprintf("%c%c%c%c%c", 27, 91, 109, 0, 0);
- }
- } elseif (OS_WINDOWS) {
- // XXX add ANSI codes here
- }
- }
-
- // }}}
-
- // {{{ displayLine(text)
-
- function displayLine($text)
- {
- print "$this->lp$text\n";
- }
-
- function display($text)
- {
- print $text;
- }
-
- // }}}
- // {{{ displayError(eobj)
-
- function displayError($eobj)
- {
- return $this->displayLine($eobj->getMessage());
- }
-
- // }}}
- // {{{ displayFatalError(eobj)
-
- function displayFatalError($eobj)
- {
- $this->displayError($eobj);
- exit(1);
- }
-
- // }}}
- // {{{ displayHeading(title)
-
- function displayHeading($title)
- {
- print $this->lp.$this->bold($title)."\n";
- print $this->lp.str_repeat("=", strlen($title))."\n";
- }
-
- // }}}
- // {{{ userDialog(prompt, [type], [default])
-
- function userDialog($prompt, $type = 'text', $default = '')
- {
- if ($type == 'password') {
- system('stty -echo');
- }
- print "$this->lp$prompt ";
- if ($default) {
- print "[$default] ";
- }
- print ": ";
- $fp = fopen("php://stdin", "r");
- $line = fgets($fp, 2048);
- fclose($fp);
- if ($type == 'password') {
- system('stty echo');
- print "\n";
- }
- if ($default && trim($line) == "") {
- return $default;
- }
- return $line;
- }
-
- // }}}
- // {{{ userConfirm(prompt, [default])
-
- function userConfirm($prompt, $default = 'yes')
- {
- static $positives = array('y', 'yes', 'on', '1');
- static $negatives = array('n', 'no', 'off', '0');
- print "$this->lp$prompt [$default] : ";
- $fp = fopen("php://stdin", "r");
- $line = fgets($fp, 2048);
- fclose($fp);
- $answer = strtolower(trim($line));
- if (empty($answer)) {
- $answer = $default;
- }
- if (in_array($answer, $positives)) {
- return true;
- }
- if (in_array($answer, $negatives)) {
- return false;
- }
- if (in_array($default, $positives)) {
- return true;
- }
- return false;
- }
-
- // }}}
- // {{{ startTable([params])
-
- function startTable($params = array())
- {
- $this->omode = 'table';
- $params['table_data'] = array();
- $params['widest'] = array(); // indexed by column
- $params['highest'] = array(); // indexed by row
- $params['ncols'] = 0;
- $this->params = $params;
- }
-
- // }}}
- // {{{ tableRow(columns, [rowparams], [colparams])
-
- function tableRow($columns, $rowparams = array(), $colparams = array())
- {
- $highest = 1;
- for ($i = 0; $i < sizeof($columns); $i++) {
- $col = &$columns[$i];
- if (isset($colparams[$i]) && !empty($colparams[$i]['wrap'])) {
- $col = wordwrap($col, $colparams[$i]['wrap'], "\n", 1);
- }
- if (strpos($col, "\n") !== false) {
- $multiline = explode("\n", $col);
- $w = 0;
- foreach ($multiline as $n => $line) {
- if (strlen($line) > $w) {
- $w = strlen($line);
- }
- }
- $lines = sizeof($lines);
- } else {
- $w = strlen($col);
- }
- if ($w > @$this->params['widest'][$i]) {
- $this->params['widest'][$i] = $w;
- }
- $tmp = count_chars($columns[$i], 1);
- // handle unix, mac and windows formats
- $lines = (isset($tmp[10]) ? $tmp[10] : @$tmp[13]) + 1;
- if ($lines > $highest) {
- $highest = $lines;
- }
- }
- if (sizeof($columns) > $this->params['ncols']) {
- $this->params['ncols'] = sizeof($columns);
- }
- $new_row = array(
- 'data' => $columns,
- 'height' => $highest,
- 'rowparams' => $rowparams,
- 'colparams' => $colparams,
- );
- $this->params['table_data'][] = $new_row;
- }
-
- // }}}
- // {{{ endTable()
-
- function endTable()
- {
- $this->omode = '';
- extract($this->params);
- if (!empty($caption)) {
- $this->displayHeading($caption);
- }
- if (count($table_data) == 0) {
- return;
- }
- if (!isset($width)) {
- $width = $widest;
- } else {
- for ($i = 0; $i < $ncols; $i++) {
- if (!isset($width[$i])) {
- $width[$i] = $widest[$i];
- }
- }
- }
- if (empty($border)) {
- $cellstart = '';
- $cellend = ' ';
- $rowend = '';
- $padrowend = false;
- $borderline = '';
- } else {
- $cellstart = '| ';
- $cellend = ' ';
- $rowend = '|';
- $padrowend = true;
- $borderline = '+';
- foreach ($width as $w) {
- $borderline .= str_repeat('-', $w + strlen($cellstart) + strlen($cellend) - 1);
- $borderline .= '+';
- }
- }
- if ($borderline) {
- $this->displayLine($borderline);
- }
- for ($i = 0; $i < sizeof($table_data); $i++) {
- extract($table_data[$i]);
- $rowlines = array();
- if ($height > 1) {
- for ($c = 0; $c < sizeof($data); $c++) {
- $rowlines[$c] = preg_split('/(\r?\n|\r)/', $data[$c]);
- if (sizeof($rowlines[$c]) < $height) {
- $rowlines[$c] = array_pad($rowlines[$c], $height, '');
- }
- }
- } else {
- for ($c = 0; $c < sizeof($data); $c++) {
- $rowlines[$c] = array($data[$c]);
- }
- }
- for ($r = 0; $r < $height; $r++) {
- $rowtext = '';
- for ($c = 0; $c < sizeof($data); $c++) {
- if (isset($colparams[$c])) {
- $attribs = array_merge($rowparams, $colparams);
- } else {
- $attribs = $rowparams;
- }
- $w = isset($width[$c]) ? $width[$c] : 0;
- //$cell = $data[$c];
- $cell = $rowlines[$c][$r];
- $l = strlen($cell);
- if ($l > $w) {
- $cell = substr($cell, 0, $w);
- }
- if (isset($attribs['bold'])) {
- $cell = $this->bold($cell);
- }
- if ($l < $w) {
- // not using str_pad here because we may
- // add bold escape characters to $cell
- $cell .= str_repeat(' ', $w - $l);
- }
-
- $rowtext .= $cellstart . $cell . $cellend;
- }
- $rowtext .= $rowend;
- $this->displayLine($rowtext);
- }
- }
- if ($borderline) {
- $this->displayLine($borderline);
- }
- }
-
- // }}}
- // {{{ bold($text)
-
- function bold($text)
- {
- if (empty($this->term['bold'])) {
- return strtoupper($text);
- }
- return $this->term['bold'] . $text . $this->term['normal'];
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Frontend/Gtk.php b/pear/PEAR/Frontend/Gtk.php
deleted file mode 100644
index f715fb41bb..0000000000
--- a/pear/PEAR/Frontend/Gtk.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Stig Sæther Bakken <ssb@fast.no> |
- +----------------------------------------------------------------------+
-
- $Id$
-*/
-
-require_once "PEAR.php";
-
-class PEAR_Frontend_Gtk extends PEAR
-{
- // {{{ properties
-
- /**
- * What type of user interface this frontend is for.
- * @var string
- * @access public
- */
- var $type = 'Gtk';
-
- var $omode = 'plain';
- var $params = array();
- var $window = null;
-
- // }}}
-
- // {{{ constructor
-
- function PEAR_Frontend_Gtk()
- {
- parent::PEAR();
- if (!extension_loaded('php_gtk')) {
- dl('php_gtk.' . (OS_WINDOWS ? 'dll' : 'so'));
- }
- $this->window = &new GtkWindow();
- $this->window->set_title('PEAR Installer');
- $this->window->set_usize((gdk::screen_width()/3), (gdk::screen_height()/3));
- $this->window->show_all();
- }
-
- // }}}
-
- // {{{ displayLine(text)
-
- function displayLine($text)
- {
- }
-
- function display($text)
- {
- }
-
- // }}}
- // {{{ displayError(eobj)
-
- function displayError($eobj)
- {
- }
-
- // }}}
- // {{{ displayFatalError(eobj)
-
- function displayFatalError($eobj)
- {
- }
-
- // }}}
- // {{{ displayHeading(title)
-
- function displayHeading($title)
- {
- }
-
- // }}}
- // {{{ userDialog(prompt, [type], [default])
-
- function userDialog($prompt, $type = 'text', $default = '')
- {
- }
-
- // }}}
- // {{{ userConfirm(prompt, [default])
-
- function userConfirm($prompt, $default = 'yes')
- {
- }
-
- // }}}
- // {{{ startTable([params])
-
- function startTable($params = array())
- {
- }
-
- // }}}
- // {{{ tableRow(columns, [rowparams], [colparams])
-
- function tableRow($columns, $rowparams = array(), $colparams = array())
- {
- }
-
- // }}}
- // {{{ endTable()
-
- function endTable()
- {
- }
-
- // }}}
- // {{{ bold($text)
-
- function bold($text)
- {
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Installer.php b/pear/PEAR/Installer.php
deleted file mode 100644
index 4341ea1864..0000000000
--- a/pear/PEAR/Installer.php
+++ /dev/null
@@ -1,524 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@fast.no> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Common.php';
-require_once 'PEAR/Registry.php';
-require_once 'PEAR/Dependency.php';
-
-/**
- * Administration class used to install PEAR packages and maintain the
- * installed package database.
- *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@fast.no>
- */
-class PEAR_Installer extends PEAR_Common
-{
- // {{{ properties
-
- /** name of the package directory, for example Foo-1.0
- * @var string
- */
- var $pkgdir;
-
- /** directory where PHP code files go
- * @var string
- */
- var $phpdir;
-
- /** directory where PHP extension files go
- * @var string
- */
- var $extdir;
-
- /** directory where documentation goes
- * @var string
- */
- var $docdir;
-
- /** directory where the package wants to put files, relative
- * to one of the previous dirs
- * @var string
- */
- var $destdir = '';
-
- /** debug level
- * @var int
- */
- var $debug = 1;
-
- /** temporary directory
- * @var string
- */
- var $tmpdir;
-
- /** PEAR_Registry object used by the installer
- * @var object
- */
- var $registry;
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Installer constructor.
- *
- * @param object $ui user interface object (instance of PEAR_Frontend_*)
- *
- * @access public
- */
- function PEAR_Installer(&$ui)
- {
- $this->PEAR_Common();
- $this->setFrontendObject($ui);
- $this->debug = $this->config->get('verbose');
- $this->registry = &new PEAR_Registry($this->config->get('php_dir'));
- }
-
- // }}}
-
- // {{{ _deletePackageFiles()
-
- /**
- * Delete a package's installed files, remove empty directories.
- *
- * @param string $package package name
- *
- * @return bool TRUE on success, or a PEAR error on failure
- *
- * @access private
- */
- function _deletePackageFiles($package)
- {
- if (!strlen($package)) {
- return $this->raiseError("No package to uninstall given");
- }
- $filelist = $this->registry->packageInfo($package, 'filelist');
- if ($filelist == null) {
- return $this->raiseError("$package not installed");
- }
- foreach ($filelist as $file => $props) {
- if (empty($props['installed_as'])) {
- continue;
- }
- $path = $props['installed_as'];
- if (!@unlink($path)) {
- $this->log(1, "unable to delete: $path");
- } else {
- $this->log(1, "deleted file $path");
- // Delete package directory if it's empty
- if (@rmdir(dirname($path))) {
- $this->log(2, "+ rmdir $path");
- }
- }
- }
- return true;
- }
-
- // }}}
- // {{{ _installFile()
-
- function _installFile($file, $atts, $tmp_path)
- {
- static $os;
- if (isset($atts['platform'])) {
- if (empty($os)) {
- include_once "OS/Guess.php";
- $os = new OS_Guess();
- }
- // return if this file is meant for another platform
- if (!$os->matchSignature($atts['platform'])) {
- $this->log(1, "skipped $file (meant for $atts[platform], we are ".$os->getSignature().")");
- return;
- }
- }
-
- switch ($atts['role']) {
- case 'test': case 'data': case 'ext':
- // don't install test files for now
- $this->log(2, "$file: $atts[role] file not installed yet");
- return true;
- case 'doc':
- $dest_dir = $this->config->get('doc_dir') .
- DIRECTORY_SEPARATOR . $this->pkginfo['package'];
- break;
- case 'extsrc':
- // don't install test files for now
- $this->log(2, "$file: no support for building extensions yet");
- return true;
- case 'php':
- $dest_dir = $this->config->get('php_dir');
- break;
- case 'script': {
- $dest_dir = $this->config->get('bin_dir');
- break;
- }
- default:
- break;
- }
- if (!isset($atts['baseinstalldir']) ||
- $atts['baseinstalldir'] == '/' ||
- $atts['baseinstalldir'] == DIRECTORY_SEPARATOR) {
- $atts['baseinstalldir'] = '';
- }
- if (!empty($atts['baseinstalldir']) && $atts['role'] != 'doc') {
- $dest_dir .= DIRECTORY_SEPARATOR . $atts['baseinstalldir'];
- }
- if (dirname($file) != '.' && empty($atts['install-as'])) {
- $dest_dir .= DIRECTORY_SEPARATOR . dirname($file);
- }
- if (empty($atts['install-as'])) {
- $dest_file = $dest_dir . DIRECTORY_SEPARATOR . basename($file);
- } else {
- $dest_file = $dest_dir . DIRECTORY_SEPARATOR . $atts['install-as'];
- }
- $dest_file = preg_replace('!//+!', '/', $dest_file);
- if (!@is_dir($dest_dir)) {
- if (!$this->mkDirHier($dest_dir)) {
- $this->log(0, "failed to mkdir $dest_dir");
- return false;
- }
- $this->log(2, "+ mkdir $dest_dir");
- }
- $orig_file = $tmp_path . DIRECTORY_SEPARATOR . $file;
- if (empty($atts['replacements'])) {
- if (!@copy($orig_file, $dest_file)) {
- $this->log(0, "failed to copy $orig_file to $dest_file");
- return false;
- }
- $this->log(2, "+ cp $orig_file $dest_file");
- } else {
- $fp = fopen($orig_file, "r");
- $contents = fread($fp, filesize($orig_file));
- fclose($fp);
- $subst_from = $subst_to = array();
- foreach ($atts['replacements'] as $a) {
- $to = '';
- if ($a['type'] == 'php-const') {
- if (preg_match('/^[a-z0-9_]+$/i', $a['to'])) {
- eval("\$to = $a[to];");
- } else {
- $this->log(0, "invalid php-const replacement: $a[to]");
- continue;
- }
- } elseif ($a['type'] == 'pear-config') {
- $to = $this->config->get($a['to']);
- }
- if ($to) {
- $subst_from = $a['from'];
- $subst_to = $to;
- }
- }
- $this->log(1, "doing ".sizeof($subst_from)." substitution(s) for $dest_file");
- if (sizeof($subst_from)) {
- $contents = str_replace($subst_from, $subst_to, $contents);
- }
- $wp = @fopen($dest_file, "w");
- if (!is_resource($wp)) {
- $this->log(0, "failed to create $dest_file");
- return false;
- }
- fwrite($wp, $contents);
- fclose($wp);
- }
- if (!OS_WINDOWS) {
- if ($atts['role'] == 'script') {
- $mode = 0777 & ~$this->config->get('umask');
- $this->log(2, "+ chmod +x $dest_file");
- } else {
- $mode = 0666 & ~$this->config->get('umask');
- }
- if (!@chmod($dest_file, $mode)) {
- $this->log(0, "failed to change mode of $dest_file");
- }
- }
-
- // Store the full path where the file was installed for easy unistall
- $this->pkginfo['filelist'][$file]['installed_as'] = $dest_file;
-
- $this->log(1, "installed file $dest_file");
- return true;
- }
-
- // }}}
- // {{{ getPackageDownloadUrl()
-
- function getPackageDownloadUrl($package)
- {
- if ($this === null || $this->config === null) {
- $package = "http://pear.php.net/get/$package";
- } else {
- $package = "http://" . $this->config->get('master_server') .
- "/get/$package";
- }
- if (!extension_loaded("zlib")) {
- $package .= '?uncompress=yes';
- }
- return $package;
- }
-
- // }}}
- // {{{ install()
-
- /**
- * Installs the files within the package file specified.
- *
- * @param $pkgfile path to the package file
- *
- * @return array package info if successful, null if not
- */
-
- function install($pkgfile, $options = array())
- {
- // recognized options:
- // - register-only : update registry but don't install files
- // - upgrade : upgrade existing install
- // - soft : fail silently
- //
- $need_download = false;
- // ==> XXX should be removed later on
- $flag_old_format = false;
- if (preg_match('#^(http|ftp)://#', $pkgfile)) {
- $need_download = true;
- } elseif (!@is_file($pkgfile)) {
- if ($this->validPackageName($pkgfile)) {
- if ($this->registry->packageExists($pkgfile) && empty($options['upgrade'])) {
- return $this->raiseError("$pkgfile already installed");
- }
- $pkgfile = $this->getPackageDownloadUrl($pkgfile);
- $need_download = true;
- } else {
- if (strlen($pkgfile)) {
- return $this->raiseError("Could not open the package file: $pkgfile");
- } else {
- return $this->raiseError("No package file given");
- }
- }
- }
-
- // Download package -----------------------------------------------
- if ($need_download) {
- $downloaddir = $this->config->get('download_dir');
- if (empty($downloaddir)) {
- if (PEAR::isError($downloaddir = $this->mkTempDir())) {
- return $downloaddir;
- }
- $this->log(2, '+ tmp dir created at ' . $downloaddir);
- }
- $callback = $this->ui ? array(&$this, '_downloadCallback') : null;
- $file = $this->downloadHttp($pkgfile, $this->ui, $downloaddir, $callback);
- if (PEAR::isError($file)) {
- return $this->raiseError($file);
- }
- $pkgfile = $file;
- }
-
- if (substr($pkgfile, -4) == '.xml') {
- $descfile = $pkgfile;
- } else {
- // Decompress pack in tmp dir -------------------------------------
-
- // To allow relative package file names
- $oldcwd = getcwd();
- if (@chdir(dirname($pkgfile))) {
- $pkgfile = getcwd() . DIRECTORY_SEPARATOR . basename($pkgfile);
- chdir($oldcwd);
- }
-
- if (PEAR::isError($tmpdir = $this->mkTempDir())) {
- return $tmpdir;
- }
- $this->log(2, '+ tmp dir created at ' . $tmpdir);
-
- $tar = new Archive_Tar($pkgfile, true);
- if (!@$tar->extract($tmpdir)) {
- return $this->raiseError("unable to unpack $pkgfile");
- }
-
- // ----- Look for existing package file
- $descfile = $tmpdir . DIRECTORY_SEPARATOR . 'package.xml';
-
- if (!is_file($descfile)) {
- // ----- Look for old package archive format
- // In this format the package.xml file was inside the
- // Package-n.n directory
- $dp = opendir($tmpdir);
- do {
- $pkgdir = readdir($dp);
- } while ($pkgdir{0} == '.');
-
- $descfile = $tmpdir . DIRECTORY_SEPARATOR . $pkgdir . DIRECTORY_SEPARATOR . 'package.xml';
- $flag_old_format = true;
- $this->log(0, "warning : you are using an archive with an old format");
- }
- // <== XXX This part should be removed later on
- }
-
- if (!is_file($descfile)) {
- return $this->raiseError("no package.xml file after extracting the archive");
- }
-
- // Parse xml file -----------------------------------------------
- $pkginfo = $this->infoFromDescriptionFile($descfile);
- if (PEAR::isError($pkginfo)) {
- return $pkginfo;
- }
-
- $pkgname = $pkginfo['package'];
-
- // Check dependencies -------------------------------------------
- if (isset($pkginfo['release_deps']) && !isset($options['nodeps'])) {
- $error = $this->checkDeps($pkginfo);
- if ($error) {
- if (empty($options['soft'])) {
- $this->log(0, $error);
- }
- return $this->raiseError("$pkgname: dependencies failed");
- }
- }
-
- if (empty($options['upgrade'])) {
- // checks to do only when installing new packages
- if (empty($options['force']) && $this->registry->packageExists($pkgname)) {
- return $this->raiseError("$pkgname already installed");
- }
- } else {
- // check to do only when upgrading packages
- if (!$this->registry->packageExists($pkgname)) {
- return $this->raiseError("$pkgname not installed");
- }
- $v1 = $this->registry->packageInfo($pkgname, 'version');
- $v2 = $pkginfo['version'];
- $cmp = version_compare($v1, $v2, 'gt');
- if (empty($options['force']) && !version_compare($v2, $v1, 'gt')) {
- return $this->raiseError("upgrade to a newer version ($v2 is not newer than $v1)");
- }
- if (empty($options['register-only'])) {
- // when upgrading, remove old release's files first:
- if (PEAR::isError($err = $this->_deletePackageFiles($pkgname))) {
- return $this->raiseError($err);
- }
- }
- }
-
- // Copy files to dest dir ---------------------------------------
-
- // info from the package it self we want to access from _installFile
- $this->pkginfo = $pkginfo;
- if (empty($options['register-only'])) {
- if (!is_dir($this->config->get('php_dir'))) {
- return $this->raiseError("no script destination directory\n",
- null, PEAR_ERROR_DIE);
- }
-
- // don't want strange characters
- $pkgname = ereg_replace ('[^a-zA-Z0-9._]', '_', $pkginfo['package']);
- $pkgversion = ereg_replace ('[^a-zA-Z0-9._\-]', '_', $pkginfo['version']);
- $tmp_path = dirname($descfile);
- if (substr($pkgfile, -4) != '.xml') {
- $tmp_path .= DIRECTORY_SEPARATOR . $pkgname . '-' . $pkgversion;
- }
-
- // ==> XXX This part should be removed later on
- if ($flag_old_format) {
- $tmp_path = dirname($descfile);
- }
- // <== XXX This part should be removed later on
-
- foreach ($pkginfo['filelist'] as $file => $atts) {
- $this->_installFile($file, $atts, $tmp_path);
- }
- }
-
- // Register that the package is installed -----------------------
- if (empty($options['upgrade'])) {
- // if 'force' is used, replace the info in registry
- if (!empty($options['force']) && $this->registry->packageExists($pkgname)) {
- $this->registry->deletePackage($pkgname);
- }
- $ret = $this->registry->addPackage($pkgname, $this->pkginfo);
- } else {
- $ret = $this->registry->updatePackage($pkgname, $this->pkginfo, false);
- }
- if (!$ret) {
- return null;
- }
- return $pkginfo;
- }
-
- // }}}
- // {{{ uninstall()
-
- function uninstall($package)
- {
- if (empty($this->registry)) {
- $this->registry = new PEAR_Registry($this->config->get('php_dir'));
- }
-
- // Delete the files
- if (PEAR::isError($err = $this->_deletePackageFiles($package))) {
- return $this->raiseError($err);
- }
-
- // Register that the package is no longer installed
- return $this->registry->deletePackage($package);
- }
-
- // }}}
- // {{{ checkDeps()
-
- function checkDeps(&$pkginfo)
- {
- $deps = &new PEAR_Dependency($this->registry);
- $errors = null;
- if (is_array($pkginfo['release_deps'])) {
- foreach($pkginfo['release_deps'] as $dep) {
- if ($error = $deps->callCheckMethod($dep)) {
- $errors .= "\n$error";
- }
- }
- if ($errors) {
- return $errors;
- }
- }
- return false;
- }
-
- // }}}
- // {{{ _downloadCallback()
-
- function _downloadCallback($msg, $params = null)
- {
- switch ($msg) {
- case 'saveas':
- $this->log(1, "downloading $params ...");
- break;
- case 'done':
- $this->log(1, '...done: ' . number_format($params, 0, '', ',') . ' bytes');
- break;
- }
- }
-
- // }}}
-}
-
-?>
diff --git a/pear/PEAR/Packager.php b/pear/PEAR/Packager.php
deleted file mode 100644
index c58ce8fab6..0000000000
--- a/pear/PEAR/Packager.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@fast.no> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR/Common.php';
-
-/**
- * Administration class used to make a PEAR release tarball.
- *
- * TODO:
- * - add an extra param the dir where to place the created package
- *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@fast.no>
- */
-class PEAR_Packager extends PEAR_Common
-{
- // {{{ constructor
-
- function PEAR_Packager()
- {
- $this->PEAR_Common();
- }
-
- // }}}
- // {{{ destructor
-
- function _PEAR_Packager()
- {
- $this->_PEAR_Common();
- }
-
- // }}}
-
- // {{{ package()
-
- function package($pkgfile = null, $compress = true)
- {
- if (empty($pkgfile)) {
- $pkgfile = 'package.xml';
- }
- $pkginfo = $this->infoFromDescriptionFile($pkgfile);
- if (PEAR::isError($pkginfo)) {
- return $this->raiseError($pkginfo);
- }
- if (empty($pkginfo['version'])) {
- return $this->raiseError("No version info found in $pkgfile");
- }
- // TMP DIR -------------------------------------------------
- // We allow calls like "pear package /home/user/mypack/package.xml"
- $oldcwd = getcwd();
- if (!@chdir(dirname($pkgfile))) {
- return $this->raiseError('Could not chdir to '.dirname($pkgfile));
- }
- $pkgfile = basename($pkgfile);
- if (@$pkginfo['release_state'] == 'snapshot' && empty($pkginfo['version'])) {
- $pkginfo['version'] = date('Ymd');
- }
- // don't want strange characters
- $pkgname = preg_replace('/[^a-z0-9._]/i', '_', $pkginfo['package']);
- $pkgversion = preg_replace('/[^a-z0-9._-]/i', '_', $pkginfo['version']);
- $pkgver = $pkgname . '-' . $pkgversion;
-
- // ----- Create the package file list
- $filelist = array();
- $i = 0;
-
- // Copy files -----------------------------------------------
- foreach ($pkginfo['filelist'] as $fname => $atts) {
- if (!file_exists($fname)) {
- chdir($oldcwd);
- return $this->raiseError("File $fname does not exist");
- } else {
- $filelist[$i++] = $fname;
- if (empty($pkginfo['filelist'][$fname]['md5sum'])) {
- $md5sum = md5_file($fname);
- $pkginfo['filelist'][$fname]['md5sum'] = $md5sum;
- }
- $this->log(2, "Adding file $fname");
- }
- }
- $new_xml = $this->xmlFromInfo($pkginfo);
- if (PEAR::isError($new_xml)) {
- chdir($oldcwd);
- return $this->raiseError($new_xml);
- }
- $tmpdir = $this->mkTempDir(getcwd());
- $newpkgfile = $tmpdir . DIRECTORY_SEPARATOR . 'package.xml';
- $np = @fopen($newpkgfile, "w");
- if (!$np) {
- chdir($oldcwd);
- return $this->raiseError("PEAR_Packager: unable to rewrite $pkgfile");
- }
- fwrite($np, $new_xml);
- fclose($np);
-
- // TAR the Package -------------------------------------------
- $ext = $compress ? '.tgz' : '.tar';
- $dest_package = $oldcwd . DIRECTORY_SEPARATOR . $pkgver . $ext;
- $tar =& new Archive_Tar($dest_package, $compress);
- $tar->setErrorHandling(PEAR_ERROR_RETURN); // XXX Don't print errors
- // ----- Creates with the package.xml file
- $ok = $tar->createModify($newpkgfile, '', $tmpdir);
- if (PEAR::isError($ok)) {
- chdir($oldcwd);
- return $this->raiseError($ok);
- } elseif (!$ok) {
- chdir($oldcwd);
- return $this->raiseError('PEAR_Packager: tarball creation failed');
- }
- // ----- Add the content of the package
- if (!$tar->addModify($filelist, $pkgver)) {
- chdir($oldcwd);
- return $this->raiseError('PEAR_Packager: tarball creation failed');
- }
- $this->log(1, "Package $dest_package done");
- if (file_exists("CVS/Root")) {
- $cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pkgversion);
- $cvstag = "RELEASE_$cvsversion";
- $this->log(1, "Tag the released code with `pear cvstag $pkgfile'");
- $this->log(1, "(or set the CVS tag $cvstag by hand)");
- }
- chdir($oldcwd);
- return $dest_package;
- }
-
- // }}}
-}
-
-if (!function_exists('md5_file')) {
- function md5_file($file) {
- if (!$fd = @fopen($file, 'r')) {
- return false;
- }
- $md5 = md5(fread($fd, filesize($file)));
- fclose($fd);
- return $md5;
- }
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Registry.php b/pear/PEAR/Registry.php
deleted file mode 100644
index 30f31ce6f9..0000000000
--- a/pear/PEAR/Registry.php
+++ /dev/null
@@ -1,422 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "System.php";
-require_once "PEAR.php";
-
-define("PEAR_REGISTRY_ERROR_LOCK", -2);
-
-/**
- * Administration class used to maintain the installed package database.
- */
-class PEAR_Registry extends PEAR
-{
- // {{{ properties
-
- /** Directory where registry files are stored.
- * @var string
- */
- var $statedir = '';
-
- /** File where the file map is stored
- * @var string
- */
- var $filemap = '';
-
- /** Name of file used for locking the registry
- * @var string
- */
- var $lockfile = '';
-
- /** File descriptor used during locking
- * @var resource
- */
- var $lock_fp = null;
-
- /** Mode used during locking
- * @var int
- */
- var $lock_mode = 0; // XXX UNUSED
-
- // }}}
-
- // {{{ constructor
-
- /**
- * PEAR_Registry constructor.
- *
- * @param string (optional) PEAR install directory (for .php files)
- *
- * @access public
- */
- function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR)
- {
- parent::PEAR();
- $ds = DIRECTORY_SEPARATOR;
- $this->statedir = $pear_install_dir.$ds.'.registry';
- $this->filemap = $pear_install_dir.$ds.'.filemap';
- $this->lockfile = $pear_install_dir.$ds.'.lock';
- if (!file_exists($this->filemap)) {
- $this->_rebuildFileMap();
- }
- }
-
- // }}}
- // {{{ destructor
-
- /**
- * PEAR_Registry destructor. Makes sure no locks are forgotten.
- *
- * @access private
- */
- function _PEAR_Registry()
- {
- parent::_PEAR();
- if (is_resource($this->lock_fp)) {
- $this->_unlock();
- }
- }
-
- // }}}
-
- // {{{ _assertStateDir()
-
- /**
- * Make sure the directory where we keep registry files exists.
- *
- * @return bool TRUE if directory exists, FALSE if it could not be
- * created
- *
- * @access private
- */
- function _assertStateDir()
- {
- if (!@is_dir($this->statedir)) {
- if (!System::mkdir("-p {$this->statedir}")) {
- return $this->raiseError("could not create directory '{$this->statedir}'");
- }
- }
- return true;
- }
-
- // }}}
- // {{{ _packageFileName()
-
- /**
- * Get the name of the file where data for a given package is stored.
- *
- * @param string package name
- *
- * @return string registry file name
- *
- * @access public
- */
- function _packageFileName($package)
- {
- return "{$this->statedir}/{$package}.reg";
- }
-
- // }}}
- // {{{ _openPackageFile()
-
- function _openPackageFile($package, $mode)
- {
- $this->_assertStateDir();
- $file = $this->_packageFileName($package);
- $fp = @fopen($file, $mode);
- if (!$fp) {
- return null;
- }
- return $fp;
- }
-
- // }}}
- // {{{ _closePackageFile()
-
- function _closePackageFile($fp)
- {
- fclose($fp);
- }
-
- // }}}
- // {{{ _rebuildFileMap()
-
- function _rebuildFileMap()
- {
- $packages = $this->listPackages();
- $files = array();
- foreach ($packages as $package) {
- $version = $this->packageInfo($package, 'version');
- $filelist = $this->packageInfo($package, 'filelist');
- if (!is_array($filelist)) {
- continue;
- }
- foreach ($filelist as $name => $attrs) {
- if (isset($attrs['role']) && $attrs['role'] != 'php') {
- continue;
- }
- if (isset($attrs['baseinstalldir'])) {
- $file = $attrs['baseinstalldir'].DIRECTORY_SEPARATOR.$name;
- } else {
- $file = $name;
- }
- $file = preg_replace(',^/+,', '', $file);
- $files[$file] = $package;
- }
- }
- $this->_assertStateDir();
- $fp = @fopen($this->filemap, 'w');
- if (!$fp) {
- return false;
- }
- fwrite($fp, serialize($files));
- fclose($fp);
- return true;
- }
-
- // }}}
- // {{{ _lock()
-
- /**
- * Lock the registry.
- *
- * @param integer lock mode, one of LOCK_EX, LOCK_SH or LOCK_UN.
- * See flock manual for more information.
- *
- * @return bool TRUE on success, FALSE if locking failed, or a
- * PEAR error if some other error occurs (such as the
- * lock file not being writable).
- *
- * @access private
- */
- function _lock($mode = LOCK_EX)
- {
- if(!strstr(php_uname(), 'Windows 95/98')) {
- if ($mode != LOCK_UN && is_resource($this->lock_fp)) {
- // XXX does not check type of lock (LOCK_SH/LOCK_EX)
- return true;
- }
- if (PEAR::isError($err = $this->_assertStateDir())) {
- return $err;
- }
- $open_mode = 'w';
- // XXX People reported problems with LOCK_SH and 'w'
- if ($mode === LOCK_SH) {
- if (@!is_file($this->lockfile)) {
- touch($this->lockfile);
- }
- $open_mode = 'r';
- }
- $this->lock_fp = @fopen($this->lockfile, $open_mode);
- if (!is_resource($this->lock_fp)) {
- return $this->raiseError("could not create lock file: $php_errormsg");
- }
- if (!(int)flock($this->lock_fp, $mode)) {
- switch ($mode) {
- case LOCK_SH: $str = 'shared'; break;
- case LOCK_EX: $str = 'exclusive'; break;
- case LOCK_UN: $str = 'unlock'; break;
- default: $str = 'unknown'; break;
- }
- return $this->raiseError("could not acquire $str lock ($this->lockfile)",
- PEAR_REGISTRY_ERROR_LOCK);
- }
- }
- return true;
- }
-
- // }}}
- // {{{ _unlock()
-
- function _unlock()
- {
- $ret = $this->_lock(LOCK_UN);
- $this->lock_fp = null;
- return $ret;
- }
-
- // }}}
- // {{{ _packageExists()
-
- function _packageExists($package)
- {
- return file_exists($this->_packageFileName($package));
- }
-
- // }}}
- // {{{ _packageInfo()
-
- function _packageInfo($package = null, $key = null)
- {
- if ($package === null) {
- return array_map(array($this, '_packageInfo'),
- $this->_listPackages());
- }
- $fp = $this->_openPackageFile($package, 'r');
- if ($fp === null) {
- return null;
- }
- $data = fread($fp, filesize($this->_packageFileName($package)));
- $this->_closePackageFile($fp);
- $data = unserialize($data);
- if ($key === null) {
- return $data;
- }
- if (isset($data[$key])) {
- return $data[$key];
- }
- return null;
- }
-
- // }}}
- // {{{ _listPackages()
-
- function _listPackages()
- {
- $pkglist = array();
- $dp = @opendir($this->statedir);
- if (!$dp) {
- return $pkglist;
- }
- while ($ent = readdir($dp)) {
- if ($ent{0} == '.' || substr($ent, -4) != '.reg') {
- continue;
- }
- $pkglist[] = substr($ent, 0, -4);
- }
- return $pkglist;
- }
-
- // }}}
-
- // {{{ packageExists()
-
- function packageExists($package)
- {
- if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
- return $e;
- }
- $ret = $this->_packageExists($package);
- $this->_unlock();
- return $ret;
- }
-
- // }}}
- // {{{ packageInfo()
-
- function packageInfo($package = null, $key = null)
- {
- if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
- return $e;
- }
- $ret = $this->_packageInfo($package, $key);
- $this->_unlock();
- return $ret;
- }
-
- // }}}
- // {{{ listPackages()
-
- function listPackages()
- {
- if (PEAR::isError($e = $this->_lock(LOCK_SH))) {
- return $e;
- }
- $ret = $this->_listPackages();
- $this->_unlock();
- return $ret;
- }
-
- // }}}
- // {{{ addPackage()
-
- function addPackage($package, $info)
- {
- if ($this->packageExists($package)) {
- return false;
- }
- if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
- return $e;
- }
- $fp = $this->_openPackageFile($package, 'w');
- if ($fp === null) {
- $this->_unlock();
- return false;
- }
- $info['_lastmodified'] = time();
- fwrite($fp, serialize($info));
- $this->_closePackageFile($fp);
- $this->_unlock();
- return true;
- }
-
- // }}}
- // {{{ deletePackage()
-
- function deletePackage($package)
- {
- if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
- return $e;
- }
- $file = $this->_packageFileName($package);
- $ret = @unlink($file);
- $this->_rebuildFileMap();
- $this->_unlock();
- return $ret;
- }
-
- // }}}
- // {{{ updatePackage()
-
- function updatePackage($package, $info, $merge = true)
- {
- $oldinfo = $this->packageInfo($package);
- if (empty($oldinfo)) {
- return false;
- }
- if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
- return $e;
- }
- if (!file_exists($this->filemap)) {
- $this->_rebuildFileMap();
- }
- $fp = $this->_openPackageFile($package, 'w');
- if ($fp === null) {
- $this->_unlock();
- return false;
- }
- $info['_lastmodified'] = time();
- if ($merge) {
- fwrite($fp, serialize(array_merge($oldinfo, $info)));
- } else {
- fwrite($fp, serialize($info));
- }
- $this->_closePackageFile($fp);
- if (isset($info['filelist'])) {
- $this->_rebuildFileMap();
- }
- $this->_unlock();
- return true;
- }
-
- // }}}
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/Remote.php b/pear/PEAR/Remote.php
deleted file mode 100644
index b7279b76a5..0000000000
--- a/pear/PEAR/Remote.php
+++ /dev/null
@@ -1,258 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Author: Stig Bakken <ssb@fast.no> |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once 'PEAR.php';
-require_once 'PEAR/Config.php';
-
-/**
- * This is a class for doing remote operations against the central
- * PEAR database.
- */
-class PEAR_Remote extends PEAR
-{
- // {{{ properties
-
- var $config = null;
-
- // }}}
-
- // {{{ PEAR_Remote(config_object)
-
- function PEAR_Remote(&$config)
- {
- $this->PEAR();
- $this->config = &$config;
- }
-
- // }}}
-
- // {{{ call(method, [args...])
-
- function call($method)
- {
- if (extension_loaded("xmlrpc")) {
- $args = func_get_args();
- return call_user_func_array(array(&$this, 'call_epi'), $args);
- }
- if (!@include_once("XML/RPC.php")) {
- return $this->raiseError("For this remote PEAR operation you need to install the XML_RPC package");
- }
- $args = func_get_args();
- array_shift($args);
- $server_host = $this->config->get('master_server');
- $username = $this->config->get('username');
- $password = $this->config->get('password');
- $f = new XML_RPC_Message($method, $this->_encode($args));
- $c = new XML_RPC_Client('/xmlrpc.php', $server_host, 80);
- if ($username && $password) {
- $c->setCredentials($username, $password);
- }
- $c->setDebug(1);
- $r = $c->send($f);
- if (!$r) {
- return $this->raiseError("XML_RPC send failed");
- }
- $v = $r->value();
- if ($e = $r->faultCode()) {
- return $this->raiseError($r->faultString(), $e);
- }
- return XML_RPC_decode($v);
- }
-
- // }}}
-
- // {{{ call_epi(method, [args...])
-
- function call_epi($method)
- {
- do {
- if (extension_loaded("xmlrpc")) {
- break;
- }
- if (OS_WINDOWS) {
- $ext = 'dll';
- } elseif (PHP_OS == 'HP-UX') {
- $ext = 'sl';
- } elseif (PHP_OS == 'AIX') {
- $ext = 'a';
- } else {
- $ext = 'so';
- }
- $ext = OS_WINDOWS ? 'dll' : 'so';
- @dl("xmlrpc-epi.$ext");
- if (extension_loaded("xmlrpc")) {
- break;
- }
- @dl("xmlrpc.$ext");
- if (extension_loaded("xmlrpc")) {
- break;
- }
- return $this->raiseError("xmlrpc extension not loaded");
- } while (false);
- $params = func_get_args();
- array_shift($params);
- $method = str_replace("_", ".", $method);
- $request = xmlrpc_encode_request($method, $params);
- $server_host = $this->config->get("master_server");
- if (empty($server_host)) {
- return $this->raiseError("PEAR_Remote::call: no master_server configured");
- }
- $server_port = 80;
- $fp = @fsockopen($server_host, $server_port);
- if (!$fp) {
- return $this->raiseError("PEAR_Remote::call: fsockopen(`$server_host', $server_port) failed");
- }
- $len = strlen($request);
- $req_headers = "Host: $server_host:$server_port\r\n" .
- "Content-type: text/xml\r\n" .
- "Content-length: $len\r\n";
- $username = $this->config->get('username');
- $password = $this->config->get('password');
- if ($username && $password) {
- $req_headers .= "Cookie: PEAR_USER=$username; PEAR_PW=$password\r\n";
- $tmp = base64_encode("$username:$password");
- $req_headers .= "Authorization: Basic $tmp\r\n";
- }
- fwrite($fp, ("POST /xmlrpc.php HTTP/1.0\r\n$req_headers\r\n$request"));
- $response = '';
- $line1 = fgets($fp, 2048);
- if (!preg_match('!^HTTP/[0-9\.]+ (\d+) (.*)!', $line1, $matches)) {
- return $this->raiseError("PEAR_Remote: invalid HTTP response from XML-RPC server");
- }
- switch ($matches[1]) {
- case "200":
- break;
- case "401":
- if ($username && $password) {
- return $this->raiseError("PEAR_Remote: authorization failed", 401);
- } else {
- return $this->raiseError("PEAR_Remote: authorization required, please log in first", 401);
- }
- default:
- return $this->raiseError("PEAR_Remote: unexpected HTTP response", (int)$matches[1], null, null, "$matches[1] $matches[2]");
- }
- while (trim(fgets($fp, 2048)) != ''); // skip rest of headers
- while ($chunk = fread($fp, 10240)) {
- $response .= $chunk;
- }
- fclose($fp);
- $ret = xmlrpc_decode($response);
- if (is_array($ret) && isset($ret['__PEAR_TYPE__'])) {
- if ($ret['__PEAR_TYPE__'] == 'error') {
- if (isset($ret['__PEAR_CLASS__'])) {
- $class = $ret['__PEAR_CLASS__'];
- } else {
- $class = "PEAR_Error";
- }
- if ($ret['code'] === '') $ret['code'] = null;
- if ($ret['message'] === '') $ret['message'] = null;
- if ($ret['userinfo'] === '') $ret['userinfo'] = null;
- if (strtolower($class) == 'db_error') {
- $ret = $this->raiseError(DB::errorMessage($ret['code']),
- $ret['code'], null, null,
- $ret['userinfo']);
- } else {
- $ret = $this->raiseError($ret['message'], $ret['code'],
- null, null, $ret['userinfo']);
- }
- }
- } elseif (is_array($ret) && sizeof($ret) == 1 &&
- isset($ret[0]['faultString']) &&
- isset($ret[0]['faultCode'])) {
- extract($ret[0]);
- $faultString = "XML-RPC Server Fault: " .
- str_replace("\n", " ", $faultString);
- return $this->raiseError($faultString, $faultCode);
- }
- return $ret;
- }
-
- // }}}
-
- // {{{ _encode
-
- // a slightly extended version of XML_RPC_encode
- function _encode($php_val)
- {
- global $XML_RPC_Boolean, $XML_RPC_Int, $XML_RPC_Double;
- global $XML_RPC_String, $XML_RPC_Array, $XML_RPC_Struct;
-
- $type = gettype($php_val);
- $xmlrpcval = new XML_RPC_value;
-
- switch($type) {
- case "array":
- reset($php_val);
- $firstkey = key($php_val);
- end($php_val);
- $lastkey = key($php_val);
- if ($firstkey === 0 && is_int($lastkey) &&
- ($lastkey + 1) == count($php_val)) {
- $is_continous = true;
- reset($php_val);
- for ($expect = 0; $expect < count($php_val); $expect++) {
- if (key($php_val) !== $expect) {
- $is_continous = false;
- break;
- }
- }
- if ($is_continous) {
- reset($php_val);
- $arr = array();
- while (list($k, $v) = each($php_val)) {
- $arr[$k] = $this->_encode($v);
- }
- $xmlrpcval->addArray($arr);
- break;
- }
- }
- // fall though if not numerical and continous
- case "object":
- $arr = array();
- while (list($k, $v) = each($php_val)) {
- $arr[$k] = $this->_encode($v);
- }
- $xmlrpcval->addStruct($arr);
- break;
- case "integer":
- $xmlrpcval->addScalar($php_val, $XML_RPC_Int);
- break;
- case "double":
- $xmlrpcval->addScalar($php_val, $XML_RPC_Double);
- break;
- case "string":
- case "NULL":
- $xmlrpcval->addScalar($php_val, $XML_RPC_String);
- break;
- case "boolean":
- $xmlrpcval->addScalar($php_val, $XML_RPC_Boolean);
- break;
- case "unknown type":
- default:
- return null;
- }
- return $xmlrpcval;
- }
-
- // }}}
-
-}
-
-?> \ No newline at end of file
diff --git a/pear/PEAR/WebInstaller.php b/pear/PEAR/WebInstaller.php
deleted file mode 100644
index 39ea212c98..0000000000
--- a/pear/PEAR/WebInstaller.php
+++ /dev/null
@@ -1,639 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4; */
-// +---------------------------------------------------------------------+
-// | PHP version 4.0 |
-// +---------------------------------------------------------------------+
-// | Copyright (c) 1997-2002 The PHP Group |
-// +---------------------------------------------------------------------+
-// | This source file is subject to version 2.0 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +---------------------------------------------------------------------+
-// | Authors: Christian Stocker <chregu@phant.ch> |
-// +---------------------------------------------------------------------+
-
-
-/*
-
- WARNING: Due to internal changes in PEAR, the webinstaller is
- currently not supported!
-
-*/
-
-
-/* This class should simplify the task of installing PEAR-packages, if you
- * don't have a cgi-php binary on your system or you don't have access to
- * the system-wide pear directory.
- *
- * To use it, make the following php-script:
- *
- * <?php
- * require("PEAR/WebInstaller.php");
- * $installer = new PEAR_WebInstaller("/path/to/your/install/dir","http://php.chregu.tv/pear/");
- * $installer->start();
- * ?>
- *
- * and put PEAR/WebInstaller.php (this script) anywhere in your include_path.
- *
- * (http://php.chregu.tv/pear/ is just for testing purposes until this
- * system runs on pear.php.net, but feel free to use it till then)
- *
- * Both parameters are optional. If the install dir is ommitted, the
- * installer takes either the system wide pear-directory (mostly
- * /usr/local/lib/php on unix), if it's writeable, or else the directory
- * the script is started. Be advised, that the directory, where the
- * PEAR::Packages will be installed, has to be writeable for the web-server.
- *
- * The second parameter points to the server/directory where all the
- * packages and especially Packages.xml is located. If not given, the
- * standard PEAR-Repository is taken (http://pear.php.net/whatever..)
- *
- * After installation, just add the install-dir to your include_path and
- * the packages should work.
- *
- * If you are System Adminisitrator and want the installed packages to be
- * made available for everyone, just copy the files to the systemwide
- * pear-dir after installation on the commandline. Or also add the
- * install-dir to the systemwide include_path (and maybe don't forget to
- * take the writeable off the directory..)
- *
- * TODO:
- * - More Error Detection
- * - Grouping of Packages
- * - Show installed Packages (from /var/lib/php/packages.lst?)
- * - Add possibility to install a package (.tgz) from the local file
- * system without a global Packages.xml (useful if no cgi-php
- * around and you need this package you downloaded installed :) )
- * - Search Function (maybe needed if we have hundreds of packages)
- * - Only download Packages.xml, if it actually changed.
- *
- * This Code is highly experimental.
- */
-
-require_once "PEAR.php";
-
-class PEAR_WebInstaller extends PEAR
-{
- // {{{ properties
-
- /** stack of elements, gives some sort of XML context */
- var $element_stack;
-
- /** name of currently parsed XML element */
- var $current_element;
-
- /** array of attributes of the currently parsed XML element */
- var $current_attributes = array();
-
- /** assoc with information about a package */
- var $pkginfo = array();
-
- /** assoc with information about all packages */
- var $AllPackages;
-
- /** URL to the server containing all packages in tgz-Format and the Package.xml */
- var $remotedir = "http://php.chregu.tv/pear/";
-
- /* Directory where the to be installed files should be put
- per default PEAR_INSTALL_DIR (/usr/local/lib/php) if it's writeable for the webserver,
- else current directory, or user defined directory (provided as first parameter in constructor)
- The Directory hast to be writeable for the php-module (webserver)
- */
- var $installdir;
-
- /** how many seconds we should cache Packages.xml */
- var $cachetime = 3600;
-
- var $printlogger = True;
- // }}}
-
- // {{{ constructor
-
- function PEAR_Webinstaller($installdir = Null,$remotedir = Null)
- {
- $this->PEAR();
- if ($installdir)
- {
- $this->installdir = $installdir;
- }
- else
- {
- if (is_writeable(PEAR_INSTALL_DIR))
- {
- $this->installdir = PEAR_INSTALL_DIR;
- }
- else
- {
- $this->installdir = getcwd();
- }
- }
-
- if ($remotedir)
- {
- $this->remotedir = $remotedir;
- }
- }
-
- // }}}
- // {{{ start()
-
- function start() {
- global $HTTP_POST_VARS,$HTTP_GET_VARS;
-
- //print header
- $this->header();
-
- $this->loggerStart();
-
- //if some checkboxes for installation were selected, install.
- if ($HTTP_GET_VARS["help"]) {
-
- $this->help($HTTP_GET_VARS["help"]);
- }
-
- elseif ($HTTP_POST_VARS["InstPack"]) {
- $this->installPackages(array_keys($HTTP_POST_VARS["InstPack"]));
- }
-
- //else print all modules
- else {
- $this->printTable();
- }
- $this->footer();
- }
- // }}}
- // {{{ installPackages()
-
- /* installs the Packages and prints if successfull or not */
-
- function installPackages($packages)
- {
- require_once "PEAR/Installer.php";
- $installer =& new PEAR_Installer();
- $installer->phpdir = $this->installdir;
- $this->loggerEnd();
- print "<TABLE CELLSPACING=0 BORDER=0 CELLPADDING=1>";
- print "<TR><TD BGCOLOR=\"#000000\">\n";
- print "<TABLE CELLSPACING=1 BORDER=0 CELLPADDING=3 width=100%>\n";
- print " <TR BGCOLOR=\"#e0e0e0\">\n";
- print " <TH>Package</TH>\n";
- print " <TH>Status</TH>\n";
-
- foreach ($packages as $package)
- {
-
-
- if (++$i % 2) {
- $bg1 = "#ffffff";
- $bg2 = "#f0f0f0";
- }
- else {
- $bg1 = "#f0f0f0";
- $bg2 = "#e0e0e0";
- }
- print " <TR>\n";
-
- print "<TD BGCOLOR=\"$bg1\">";
- print $package;
- print "</TD>\n";
-
-
- /*
- print "<TD BGCOLOR=\"$bg2\">";
- print "Installing ...";
- print "</td>";
- print " <TR>\n";
- print "<TD BGCOLOR=\"$bg1\">";
- print "&nbsp;";
- print "</TD>\n";
- */
- print "<TD BGCOLOR=\"$bg2\">";
- if (PEAR::isError($installer->Install($this->remotedir."/".$package.".tgz"))) {
- print "\ninstall failed\n";
- }
- else {
-
- print "install ok\n";
- }
- print "</td></tr>\n";
- }
- print "</td></tr>";
- print "</table>";
- print "<TABLE CELLSPACING=1 BORDER=0 CELLPADDING=3 width=\"100%\">\n";
- print " <TR BGCOLOR=\"$bg1\">\n";
- print "<th colspan=\"2\">";
- print "<a href=\"$GLOBALS[PHP_SELF]\">Back to the Packages</a>\n";
- print "</th></tr></table>";
- print"</td></tr></table>";
- }
-
- // }}}
- // {{{ printTable()
- /* Prints a table with all modules available on the server-directory */
-
- function printTable()
- {
- global $PHP_SELF;
- $Packages = $this->getPackages();
- if (PEAR::IsError($Packages))
- {
- if ($this->printlogger) {
- $this->logger($Packages->message);
- }
- else
- {
- print $Packages->message;
- }
- return $Packages;
- }
- $this->loggerEnd();
- print "<FORM action=\"$GLOBALS[PHP_SELF]\" method=\"post\">\n";
- print "<TABLE CELLSPACING=0 BORDER=0 CELLPADDING=1>";
- print "<TR><TD BGCOLOR=\"#000000\">\n";
- print "<TABLE CELLSPACING=1 BORDER=0 CELLPADDING=3 width=\"100%\">\n";
- print "<tr bgcolor=\"f0f0f0\">";
- print "<td COLSPAN=\"6\" ><input type=\"submit\" value=\"Install\"></td>";
- print "</tr>";
-
- print " <TR BGCOLOR=\"#e0e0e0\" >\n";
- print " <TH>Inst.</TH>\n";
- print " <TH>Package</TH>\n";
- print " <TH>Summary</TH>\n";
- print " <TH>Version</TH>\n";
- print " <TH>Release date</TH>\n";
- print " <TH>Release notes</TH>\n";
- print " </TR>\n";
- $i = 0;
-
- ksort($Packages);
- foreach ( $Packages as $package) {
-
- if (++$i % 2) {
- $bg1 = "#ffffff";
- $bg2 = "#f0f0f0";
- }
- else {
- $bg1 = "#f0f0f0";
- $bg2 = "#e0e0e0";
- }
-
-
- print "<TR>\n";
-
- print "<TD align=\"middle\" BGCOLOR=\"$bg2\">";
- print "<input type=\"checkbox\" name=\"InstPack[".$package["name"]."-".$package["version"]."]\">\n";
- print "</TD>\n";
-
- print " <TD BGCOLOR=\"$bg1\">";
- print $this->printCell ($package["name"],"http://pear.php.net/pkginfo.php?package=$package[name]");
- print "</TD>\n";
-
- print "<TD BGCOLOR=\"$bg2\">";
- $this->printCell ($package["summary"]);
- print "</TD>\n";
-
- print "<TD BGCOLOR=\"$bg2\">";
- $this->printCell ($package["version"],$this->remotedir."/".$package["name"]."-".$package["version"].".tgz");
- print "</TD>\n";
-
- print "<TD BGCOLOR=\"$bg2\">";
- $this->printCell ($package["release_date"]);
- print "</TD>\n";
-
- print "<TD BGCOLOR=\"$bg2\">";
- $this->printCell (nl2br($package["release_notes"]));
- print "</TD>\n";
- print " </TR>\n";
-
- }
- print "<tr bgcolor=\"$bg1\">";
- print "<td COLSPAN=\"6\" ><input type=\"submit\" value=\"Install\"></td>";
- print "</tr>";
- print "</TABLE> \n";
-
-
- print "<TABLE CELLSPACING=1 BORDER=0 CELLPADDING=3 width=\"100%\">\n";
- print " <TR BGCOLOR=\"#e0e0e0\">\n";
-
- print "<th align=left width=\"10%\" nowrap>\n";
- print "Install Directory: </th><td>$this->installdir";
- if (!is_writable($this->installdir))
- {
- print " <font color=\"red\">(Directory is NOT writeable!)</font>";
- }
-
- print "</td></tr>\n";
-
- print " <TR BGCOLOR=\"#f0f0f0\">\n";
- print "<th align=left width=\"10%\" nowrap>\n";
- print "PEAR Repository: </th><td>$this->remotedir</td></tr>\n";
-
- print " <TR BGCOLOR=\"#e0e0e0\">\n";
- print "<th align=left width=\"10%\" nowrap>\n";
- print "Caching Time: </th><td>$this->cachetime seconds</td></tr>\n";
-
- print "</table>\n";
- print "</tr></td></table></FORM>\n";
- print "<a href=\"$PHP_SELF?help=1\">Help</A>\n";
- }
-
- // }}}
- // {{{ getPackages()
-
- /** gets the Packages.xml from the server and saves it on the local disc for caching (if possible)
- * If the zlib-extension is compiled in, Packages.xml.gz is used instead.
- */
-
- function getPackages ($TryGz = True)
- {
-
- // if we can write to the installdir, cache the Packages.xml there
-
- $PackageFile = "Packages.xml";
-
- // check if we have the zlib-extension compiled in
- if ($TryGz && function_exists("gzfile")) { $useGz = True; $PackageFile .= ".gz";}
-
- // check if we can write the Package.xml file for caching
-
- if ( (file_exists($this->installdir."/$PackageFile") && is_writeable($this->installdir."/$PackageFile")) || !file_exists($this->installdir."/$PackageFile") && is_writeable($this->installdir) )
- {
- $time = filemtime($this->installdir."/$PackageFile");
-
- if ($time < (time () - $this->cachetime )) {
- $this->logger("$PackageFile too old. Get new one.");
- $fp = @fopen($this->remotedir."/$PackageFile","r");
- if (!$fp) {
- if ($useGz)
- {
- $this->logger("$PackageFile could not be read. Try uncompressed one");
- return $this->getPackages(False);
- }
- else {
- $this->logger("$PackageFile could not be read.");
- return $this->raiseError("$PackageFile could not be read.");
- }
- }
- $fout = fopen($this->installdir."/$PackageFile","w");
- while ($data = fread($fp,8192)) {
- fwrite ($fout, $data);
- }
- fclose($fout);
- fclose($fp);
- $this->logger("Got $PackageFile");
- }
- else {
- $this->logger("Cached $PackageFile seems new enough");
- }
- $Packages = $this->infoFromDescriptionFile($this->installdir."/$PackageFile");
- }
- else
- {
- $this->logger("$PackageFile can not be cached, because Install-Dir or $PackageFile is not writeable. Get it each time from the server");
- $Packages = $this->infoFromDescriptionFile($this->remotedir."/Packages.xml");
- }
- $this->logger("Got Packages");
- return $Packages;
- }
-
- // }}}
- // {{{ printCell()
-
- function printCell($text,$link = Null)
- {
- if ($text)
- {
- if ($link) {
- print "<a href=\"$link\" style=\"color: #000000;\">";
- }
-
- print "$text";
-
- if ($link) {
- print "</a>";
- }
-
- }
- else
- {
- print "&nbsp;";
- }
- }
-
- // }}}
- /* The following 4 functions are taken from PEAR/Common.php written by Stig Bakken
- I had to adjust to use the Packages.xml format.
- */
- // {{{ _element_start()
-
-
- function _element_start($xp, $name, $attribs)
- {
- array_push($this->element_stack, $name);
- $this->current_element = $name;
- $this->current_attributes = $attribs;
- }
-
- // }}}
- // {{{ _element_end()
-
- function _element_end($xp, $name)
- {
- array_pop($this->element_stack);
- if ($name == "PACKAGE")
- {
- $this->AllPackages[$this->pkginfo["name"]] = $this->pkginfo;
- $this->pkginfo = array();
-
- }
-
- $this->current_element = $this->element_stack[sizeof($this->element_stack)-1];
- }
-
- // }}}
- // {{{ _pkginfo_cdata()
-
- function _pkginfo_cdata($xp, $data)
- {
- $next = $this->element_stack[sizeof($this->element_stack)-1];
- switch ($this->current_element) {
- case "NAME":
- $this->pkginfo["name"] .= $data;
- break;
- case "SUMMARY":
- $this->pkginfo["summary"] .= $data;
- break;
- case "USER":
- $this->pkginfo["maintainer_handle"] .= $data;
- break;
- case "EMAIL":
- $this->pkginfo["maintainer_email"] .= $data;
- break;
- case "VERSION":
- $this->pkginfo["version"] .= $data;
- break;
- case "DATE":
- $this->pkginfo["release_date"] .= $data;
- break;
- case "NOTES":
- $this->pkginfo["release_notes"] .= $data;
- break;
- case "DIR":
- if (!$this->installdir) {
- break;
- }
- $dir = trim($data);
- // XXX add to file list
- break;
- case "FILE":
- $role = strtolower($this->current_attributes["ROLE"]);
- $file = trim($data);
- // XXX add to file list
- break;
- }
- }
-
- // }}}
- // {{{ infoFromDescriptionFile()
-
- function infoFromDescriptionFile($descfile)
- {
- $fp = @fopen($descfile,"r");
- if (!$fp) {
- return $this->raiseError("Unable to open $descfile in ".__FILE__.":".__LINE__);
- }
- $xp = @xml_parser_create();
-
- if (!$xp) {
- return $this->raiseError("Unable to create XML parser.");
- }
-
- xml_set_object($xp, $this);
-
- xml_set_element_handler($xp, "_element_start", "_element_end");
- xml_set_character_data_handler($xp, "_pkginfo_cdata");
- xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, true);
-
- $this->element_stack = array();
- $this->pkginfo = array();
- $this->current_element = false;
- $this->destdir = '';
-
- // read the whole thing so we only get one cdata callback
- // for each block of cdata
-
- if (preg_match("/\.gz$/",$descfile))
- {
- $data = implode("",gzfile($descfile));
- }
- else
- {
- $data = implode("",file($descfile));
- }
-
- if (!@xml_parse($xp, $data, 1)) {
- $msg = sprintf("XML error: %s at line %d",
- xml_error_string(xml_get_error_code($xp)),
- xml_get_current_line_number($xp));
- xml_parser_free($xp);
- return $this->raiseError($msg);
- }
-
- xml_parser_free($xp);
-
- foreach ($this->pkginfo as $k => $v) {
- $this->pkginfo[$k] = trim($v);
- }
-
- return $this->AllPackages;
- }
-
- // }}}
- // {{{ header()
-
- function header ()
- {
- print "<html>
- <head>
- <title>PEAR::WebInstaller</title>\n";
- if (file_exists("./style.css"))
- {
- print '<link rel="stylesheet" href="/style.css">';
- }
- print "</head>
- <body bgcolor=\"#FFFFFF\">
- <h3>PEAR::WebInstaller</h3>";
-
- }
-
- // }}}
- // {{{ footer()
-
- function footer () {
- print "</body></html>";
- }
-
- // }}}
-
- function logger ($text) {
-
- if ($this->printlogger) {
- if (++$this->logcol % 2) {
- $bg1 = "#ffffff";
- $bg2 = "#f0f0f0";
- }
- else {
- $bg1 = "#f0f0f0";
- $bg2 = "#e0e0e0";
- }
- print "<TR>\n";
- print "<TD BGCOLOR=\"$bg1\">".date("h:m:i",time())."</td>";
- print "<TD BGCOLOR=\"$bg2\">";
- print "$text\n";
- print "</TD>\n";
- print "</tr>";
- }
- }
- function loggerStart () {
- if ($this->printlogger) {
- print "<TABLE CELLSPACING=0 BORDER=0 CELLPADDING=1>";
- print "<TR><TD BGCOLOR=\"#000000\">\n";
- print "<TABLE CELLSPACING=1 BORDER=0 CELLPADDING=3 width=\"100%\">\n";
- }
- }
-
- function loggerEnd () {
- if ($this->printlogger) {
- print "</table></td></tr></table>";
- }
- }
- function help ($Full = False) {
- global $PHP_SELF;
- $this->loggerEnd();
- print "From the WebInstaller.php introduction: <p>";
-
- $file = file(__FILE__);
- foreach($file as $line)
- {
- if ($Full != 2 && strstr($line,"require_once")){
- break;
- }
- $help .= $line;
- }
-
- highlight_string($help);
- print "<p>";
- if ($Full != 2) {
- print "<a href=\"$PHP_SELF?help=2\">See the full source</a><p>\n";
- }
-
- print "<a href=\"$PHP_SELF\">Back to the packages overview</A>\n";
- }
-
-}
-
-?>