D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
lampp
/
lib
/
php
/
PEAR
/
Filename :
Info.php
back
Copy
<?php /** * This package generate phpinfo() style PEAR information. * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.01 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_01.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category PEAR * @package PEAR_Info * @author Davey Shafik <davey@pixelated-dreams.com> * @author Laurent Laville <pear@laurent-laville.org> * @license http://www.php.net/license/3_01.txt PHP License 3.01 * @version CVS: $Id: Info.php,v 1.60 2009/02/18 17:29:43 farell Exp $ * @link http://pear.php.net/package/PEAR_Info * @since File available since Release 1.0.1 */ require_once 'PEAR/Config.php'; /** * PEAR_INFO_* is a bit-field. Or each number up to get desired information. * * Examples: * <code> * <?php * require_once 'PEAR/Info.php'; * // will display for each channel (list displayed), * // a quick package list with only its name and version * $options = array('resume' => PEAR_INFO_CHANNELS | PEAR_INFO_PACKAGES_VERSION); * $info = new PEAR_Info('', 'c:\wamp\php\pear.ini', '', $options); * $info->display(); * ?> * </code> * * - Show all informations, except for credits * * $options = array('resume' => PEAR_INFO_ALL & ~PEAR_INFO_CREDITS); * * - Show only credits and configuration * * $options = array('resume' => PEAR_INFO_CONFIGURATION | PEAR_INFO_CREDITS); */ /** * The configuration line, pear.ini | .pearrc location, and more. * * @var integer * @since 1.7.0RC1 */ define('PEAR_INFO_GENERAL', 1); /** * PEAR Credits * * @var integer * @since 1.7.0RC1 */ define('PEAR_INFO_CREDITS', 2); /** * All PEAR settings. * * @var integer * @since 1.7.0RC1 */ define('PEAR_INFO_CONFIGURATION', 4); /** * Information on PEAR channels. * * @var integer * @since 1.7.0RC1 */ define('PEAR_INFO_CHANNELS', 8); /**#@+ * Information on PEAR packages. * * @var integer * @since 1.7.0RC1 */ define('PEAR_INFO_PACKAGES', 4080); define('PEAR_INFO_PACKAGES_CHANNEL', 2048); define('PEAR_INFO_PACKAGES_SUMMARY', 1024); define('PEAR_INFO_PACKAGES_VERSION', 512); define('PEAR_INFO_PACKAGES_LICENSE', 256); define('PEAR_INFO_PACKAGES_DESCRIPTION', 128); define('PEAR_INFO_PACKAGES_DEPENDENCIES', 64); define('PEAR_INFO_PACKAGES_XML', 32); define('PEAR_INFO_PACKAGES_UPDATE', 16); /**#@-*/ /** * Shows all of the above. This is the default value. * * @var integer * @since 1.7.0RC1 */ define('PEAR_INFO_ALL', 4095); /**#@+ * Information on PEAR credits. * * @var integer * @since 1.7.0RC3 */ define('PEAR_INFO_CREDITS_GROUP', 4096); define('PEAR_INFO_CREDITS_DOCS', 8192); define('PEAR_INFO_CREDITS_WEBSITE', 16384); define('PEAR_INFO_CREDITS_PACKAGES', 32768); define('PEAR_INFO_CREDITS_ALL', 61440); /**#@-*/ /** * Indicates that a complete stand-alone HTML page needs to be printed * including the information indicated by the other flags. * * @var integer * @since 1.7.0RC3 */ define('PEAR_INFO_FULLPAGE', 65536); /** * The PEAR_Info class generate phpinfo() style PEAR information. * * @category PEAR * @package PEAR_Info * @author Davey Shafik <davey@pixelated-dreams.com> * @author Laurent Laville <pear@laurent-laville.org> * @license http://www.php.net/license/3_01.txt PHP License 3.01 * @version Release: 1.9.2 * @link http://pear.php.net/package/PEAR_Info * @since Class available since Release 1.0.1 */ class PEAR_Info { /** * Html code for phpinfo() style PEAR information * * @var string * @access public * @since 1.0.1 */ var $info; /** * Style sheet for the custom layout * * @var string * @access public * @since 1.7.0RC1 */ var $css; /** * instance of PEAR_config * * @var object * @access public * @since 1.0.1 */ var $config; /** * Alternative config files * * @var array * @access public * @since 1.9.0 */ var $cfg; /** * instance of PEAR_Registry * * @var object * @access public * @since 1.0.1 */ var $reg; /** * PHP 4 style constructor (ZE1) * * @param string $pear_dir (optional) The PEAR base install directory * @param string $user_file (optional) file to read PEAR user-defined * options from * @param string $system_file (optional) file to read PEAR system-wide * defaults from * @param array $options (optional) configure PEAR information output * * @return void * @access public * @since version 1.0.1 (2003-04-24) */ function PEAR_Info($pear_dir = '', $user_file = '', $system_file = '', $options = null) { $this->__construct($pear_dir, $user_file, $system_file, $options); } /** * PHP 5 style constructor (ZE2) * * @param string $pear_dir (optional) The PEAR base install directory * @param string $user_file (optional) file to read PEAR user-defined * options from * @param string $system_file (optional) file to read PEAR system-wide * defaults from * @param array $options (optional) configure PEAR information output * * @return void * @access private * @since version 1.7.0RC1 (2007-07-01) */ function __construct($pear_dir = '', $user_file = '', $system_file = '', $options = null) { // options defined at run-time (default) $this->options = array('channels' => array('pear.php.net'), 'resume' => PEAR_INFO_ALL | PEAR_INFO_FULLPAGE); if (isset($options)) { // overwrite one to all defaults $this->options = array_merge($this->options, $options); } // to keep compatibility with version less or equal than 1.6.1 if (!empty($pear_dir) && empty($user_file) && empty($system_file)) { $p_available = (is_dir($pear_dir)); $this->cfg['pear_dir'] = array($pear_dir, $p_available); if (!$p_available) { $e = '<p class="error">No valid PEAR directory</p>'; $this->info = $e; return; } // try to find a PEAR user-defined config file into $pear_dir $user_file = $pear_dir . DIRECTORY_SEPARATOR; if (OS_WINDOWS) { $user_file .= 'pear.ini'; } else { $user_file .= '.pearrc'; } $u_available = file_exists($user_file); $this->cfg['user_file'] = array($user_file, $u_available); // try to find a PEAR system-wide config file into $pear_dir $system_file = $pear_dir . DIRECTORY_SEPARATOR; if (OS_WINDOWS) { $system_file .= 'pearsys.ini'; } else { $system_file .= 'pear.conf'; } $s_available = file_exists($system_file); $this->cfg['system_file'] = array($system_file, $s_available); if ($u_available) { if (!$s_available) { $system_file = ''; } } else { if (!$s_available) { $e = '<p class="error">No PEAR configuration files (' . basename($user_file) . ' or ' . basename($system_file) . ") found into '$pear_dir' directory</p>"; $this->info = $e; return; } $user_file = ''; } } $this->config =& PEAR_Config::singleton($user_file, $system_file); // look for default PEAR installation if (empty($pear_dir)) { $php_dir = $this->config->get('php_dir'); $p_available = (is_dir($php_dir)); $this->cfg['pear_dir'] = array($php_dir, $p_available); $pear_user_file = $this->config->getConfFile('user'); $u_available = file_exists($pear_user_file); $this->cfg['user_file'] = array($pear_user_file, $u_available); $pear_system_file = $this->config->getConfFile('system'); $s_available = file_exists($pear_system_file); $this->cfg['system_file'] = array($pear_system_file, $s_available); } // to keep compatibility with version less or equal than 1.6.1 if (defined('PEAR_INFO_PROXY')) { $this->config->set('http_proxy', PEAR_INFO_PROXY); } if (empty($user_file) || !file_exists($user_file)) { if (empty($system_file) || !file_exists($system_file)) { $user_file = $this->config->getConfFile('user'); if (file_exists($user_file)) { $layer = 'user'; } else { $system_file = $this->config->getConfFile('system'); $layer = 'system'; } } else { $layer = 'system'; } } else { $layer = 'user'; } // prevent unexpected result if PEAR config file does not exist if (!file_exists($user_file) && !file_exists($system_file)) { $e = '<p class="error">PEAR configuration files "' . $user_file . '", "' . $system_file . '" does not exist</p>'; $this->info = $e; return; } // Get the config's registry object. $this->reg = &$this->config->getRegistry(); // Get list of all channels in your PEAR install, // when 'channels' option is empty if (isset($this->options['channels']) && empty($this->options['channels'])) { $channels = $this->reg->listChannels(); if (PEAR::isError($channels)) { $this->options['channels'] = array('pear.php.net'); } else { $this->options['channels'] = $channels; } } // show general informations such as PEAR version, PEAR logo, // and config file used if ($this->options['resume'] & PEAR_INFO_GENERAL) { $pear = $this->reg->getPackage("PEAR"); $pear_version = $pear->getVersion(); $this->info = ' <table> <tr class="h"> <td> <a href="http://pear.php.net/"> <img src="{phpself}?pear_image=true" alt="PEAR Logo" /> </a> <h1 class="p">PEAR {pearversion}</h1> </td> </tr> </table> '; $this->info = str_replace(array('{phpself}', '{pearversion}'), array(htmlentities($_SERVER['PHP_SELF']), $pear_version), $this->info); // Loaded configuration file $this->info .= ' <table> <tr class="v"> <td class="e">Loaded Configuration File</td> <td>{value}</td> </tr> <tr class="v"> <td class="e">Alternative Configuration Files</td> <td>{alt}</td> </tr> </table> '; $alt = '<dl>'; $found = $this->cfg['user_file'][1]; if ($found) { $class = 'cfg_found'; } else { $class = 'cfg_notfound'; } $alt .= '<dt>USER file </dt>'; $alt .= '<dd class="' . $class . '">' . $this->cfg['user_file'][0] .'</dd>'; $found = $this->cfg['system_file'][1]; if ($found) { $class = 'cfg_found'; } else { $class = 'cfg_notfound'; } $alt .= '<dt>SYSTEM file </dt>'; $alt .= '<dd class="' . $class . '">' . $this->cfg['system_file'][0] .'</dd>'; $alt .= '</dl>'; $this->info = str_replace(array('{value}','{alt}'), array($this->config->getConfFile($layer), $alt), $this->info); } if (($this->options['resume'] & PEAR_INFO_CREDITS_ALL) || isset($_GET['credits'])) { $this->info .= $this->getCredits(); } else { if ($this->options['resume'] & PEAR_INFO_CREDITS) { $this->info .= ' <h1><a href="{phpself}?credits=true">PEAR Credits</a></h1> '; $this->info = str_replace('{phpself}', htmlentities($_SERVER['PHP_SELF']), $this->info); } if ($this->options['resume'] & PEAR_INFO_CONFIGURATION) { $this->info .= $this->getConfig(); } if ($this->options['resume'] & PEAR_INFO_CHANNELS) { $this->info .= $this->getChannels(); } if ($this->options['resume'] & PEAR_INFO_PACKAGES) { $this->info .= $this->getPackages(); } } } /** * Sets PEAR HTTP Proxy Server Address * * Sets http_proxy config setting at runtime * * @param string $proxy PEAR HTTP Proxy Server Address * * @static * @return bool * @access public * @since version 1.0.6 (2003-05-11) */ function setProxy($proxy) { $res = define('PEAR_INFO_PROXY', $proxy); return $res; } /** * Returns the custom style sheet to use for presentation * * Default behavior is to return css string contents. * Sets $content parameter to false will return css filename reference * (defined by setStyleSheet function). * Easy for a <link rel="stylesheet" type="text/css" href="" /> * html tag integration (see example pear_info3.php). * * @param bool $content (optional) Either return css filename or string contents * * @return string * @access public * @since version 1.7.0RC1 (2007-07-01) */ function getStyleSheet($content = true) { if ($content) { $styles = file_get_contents($this->css); } else { $styles = $this->css; } return $styles; } /** * Sets the custom style sheet to use your own styles * * Sets the custom style sheet (colors, sizes) to applied to PEAR_Info output. * If you don't give any parameter, you'll then apply again the default style. * * @param string $css (optional) File to read user-defined styles from * * @return bool True if custom styles, false if default styles applied * @access public * @since version 1.7.0RC1 (2007-07-01) */ function setStyleSheet($css = null) { // default stylesheet is into package data directory if (!isset($css)) { $this->css = '/opt/lampp/lib/php/data' . DIRECTORY_SEPARATOR . 'PEAR_Info' . DIRECTORY_SEPARATOR . 'pearinfo.css'; } $res = isset($css) && file_exists($css); if ($res) { $this->css = $css; } return $res; } /** * Retrieve and format PEAR Packages info * * @return string * @access private * @since version 1.0.1 (2003-04-24) */ function getPackages() { $available = $this->reg->listAllPackages(); if (PEAR::isError($available)) { $e = '<p class="error">An Error occured while fetching the package list.' . ' Please try again.</p>'; return $e; } if (!is_array($available)) { $e = '<p class="error">The package list could not be fetched' . ' from the remote server. Please try again.</p>'; return $e; } // list of channels to scan $channel_allowed = $this->options['channels']; // check if there are new versions available for packages installed if ($this->options['resume'] & PEAR_INFO_PACKAGES_UPDATE) { $latest = array(); foreach ($channel_allowed as $channel) { // Get a channel object. $chan =& $this->reg->getChannel($channel); if (PEAR::isError($chan)) { $e = '<p class="error">An error has occured. ' . $chan->getMessage() . ' Please try again.</p>'; return $e; } if ($chan->supportsREST($channel) && $base = $chan->getBaseURL('REST1.0', $channel)) { $rest =& $this->config->getREST('1.0', array()); if (is_object($rest)) { $pref_state = $this->config->get('preferred_state'); $installed = array_flip($available[$channel]); $l = $rest->listLatestUpgrades($base, $pref_state, $installed, $channel, $this->reg); } else { $l = false; } } else { $r =& $this->config->getRemote(); $l = @$r->call('package.listLatestReleases'); } if (is_array($l)) { $latest = array_merge($latest, $l); } } } else { $latest = false; } if ((PEAR::isError($latest)) || (!is_array($latest))) { $latest = false; } $s = ''; $anchor_suffix = 0; // make page XHTML compliant foreach ($available as $channel => $pkg) { if (!in_array($channel, $channel_allowed)) { continue; } // sort package by alphabetic order sort($pkg); // $packages = ''; $index = array(); foreach ($pkg as $name) { // show general package informations $info = &$this->reg->getPackage($name, $channel); if (!is_object($info)) { continue; // should never arrive, if package is really installed } $__info = $info->getArray(); $installed['package'] = $info->getPackage(); if ($this->options['resume'] & PEAR_INFO_PACKAGES_CHANNEL) { $installed['channel'] = $channel; } if ($this->options['resume'] & PEAR_INFO_PACKAGES_SUMMARY) { $installed['summary'] = $info->getSummary(); } $installed['version'] = $info->getVersion(); if ($this->options['resume'] & PEAR_INFO_PACKAGES_VERSION) { $installed['current_release'] = $installed['version'] . ' (' . $info->getState() . ') was released on ' . $info->getDate(); } if ($this->options['resume'] & PEAR_INFO_PACKAGES_LICENSE) { $installed['license'] = $info->getLicense(); } if ($info->getPackagexmlVersion() == '1.0' ) { if ($this->options['resume'] & PEAR_INFO_PACKAGES_UPDATE) { $installed['lastmodified'] = $info->packageInfo('_lastmodified'); } if ($this->options['resume'] & PEAR_INFO_PACKAGES_XML) { $installed['packagexml'] = $info->getPackagexmlVersion(); if (isset($__info['packagerversion'])) { $installed['packagerversion'] = $__info['packagerversion']; } } } else { if ($this->options['resume'] & PEAR_INFO_PACKAGES_LICENSE) { $uri = $info->getLicenseLocation(); if ($uri) { if (isset($uri['uri'])) { $installed['license'] = '<a href="' . $uri['uri'] . '">' . $info->getLicense() . '</a>'; } } } if ($this->options['resume'] & PEAR_INFO_PACKAGES_UPDATE) { $installed['lastmodified'] = $info->getLastModified(); } if ($this->options['resume'] & PEAR_INFO_PACKAGES_XML) { $installed['packagexml'] = $info->getPackagexmlVersion(); $installed['packagerversion'] = $__info['attribs']['packagerversion']; } } if ($this->options['resume'] & PEAR_INFO_PACKAGES_DESCRIPTION) { $installed['description'] = $info->getDescription(); } // show dependency list $dependencies = ''; if ($this->options['resume'] & PEAR_INFO_PACKAGES_DEPENDENCIES) { $deps = $info->getDeps(); if (is_array($deps)) { static $_deps_rel_trans = array( 'lt' => '<', 'le' => '<=', 'eq' => '=', 'ne' => '!=', 'gt' => '>', 'ge' => '>=', 'has' => 'has', 'not' => 'not' ); static $_deps_type_trans = array( 'pkg' => 'Package', 'ext' => 'Extension', 'php' => 'PHP', 'prog'=> 'Prog', 'os' => 'OS', 'sapi'=> 'SAPI', 'zend'=> 'Zend' ); $ptpl = ' <tr class="w"> <td> {dep_required} </td> <td> {dep_type} </td> <td> {dep_name} </td> <td> {dep_rel} </td> <td> {dep_version} </td> </tr> '; foreach ($deps as $dep) { if (!isset($dep['optional'])) { $dep['optional'] = ''; } if (isset($dep['name'])) { if (isset($dep['channel'])) { $dep_name = '<a href="http://' . $dep['channel'] . '/' . $dep['name'] . '">' . $dep['name'] . '</a>'; } else { $dep_name = $dep['name']; } } else { $dep_name = ''; } $dependencies .= str_replace(array('{dep_required}', '{dep_type}', '{dep_name}', '{dep_rel}', '{dep_version}', ), array(($dep['optional'] == 'no') ? 'Yes' : 'No', $_deps_type_trans[$dep['type']], $dep_name, $_deps_rel_trans[$dep['rel']], isset($dep['version']) ? $dep['version'] : '' ), $ptpl); } $ptpl = ' <tr class="w"> <td class="f"> Required </td> <td class="f"> Type </td> <td class="f"> Name </td> <td class="f"> Relation </td> <td class="f"> Version </td> </tr> '; $dependencies = $ptpl . $dependencies; } } // end deps-list if (!isset($old_index)) { $old_index = ''; } $current_index = $name{0}; if (strtolower($current_index) != strtolower($old_index)) { $packages .= '<a id="' . $current_index . $anchor_suffix . '"></a>'; $old_index = $current_index; $index[] = $current_index; } // prepare package informations template $ptpl = ' <h2><a id="pkg_{package_name}"></a><a href="http://{channel}/{package}">{package_name}</a></h2> <table> '; $packages .= str_replace(array('{package_name}', '{package}','{channel}'), array(trim($installed['package']), $name, $channel), $ptpl); if ($this->options['resume'] & PEAR_INFO_PACKAGES_CHANNEL) { $ptpl = ' <tr class="v"> <td class="e"> Channel </td> <td> {channel} </td> </tr> '; $packages .= str_replace('{channel}', trim($installed['channel']), $ptpl); } if ($this->options['resume'] & PEAR_INFO_PACKAGES_SUMMARY) { $ptpl = ' <tr class="v"> <td class="e"> Summary </td> <td> {summary} </td> </tr> '; $packages .= str_replace('{summary}', nl2br(htmlentities(trim($installed['summary']))), $ptpl); } if ($this->options['resume'] & PEAR_INFO_PACKAGES_VERSION) { $ptpl = ' <tr class="v"> <td class="e"> Version </td> <td> {version} </td> </tr> '; $packages .= str_replace('{version}', trim($installed['current_release']), $ptpl); } if ($this->options['resume'] & PEAR_INFO_PACKAGES_LICENSE) { $ptpl = ' <tr class="v"> <td class="e"> License </td> <td> {license} </td> </tr> '; $packages .= str_replace('{license}', trim($installed['license']), $ptpl); } if ($this->options['resume'] & PEAR_INFO_PACKAGES_DESCRIPTION) { $ptpl = ' <tr class="v"> <td class="e"> Description </td> <td> {description} </td> </tr> '; $packages .= str_replace('{description}', nl2br(htmlentities(trim($installed['description']))), $ptpl); } if (!empty($dependencies)) { $ptpl = ' <tr class="v"> <td class="e"> Dependencies </td> <td> <table class="d"> {dependencies} </table> </td> </tr>'; $packages .= str_replace('{dependencies}', $dependencies, $ptpl); } if ($this->options['resume'] & PEAR_INFO_PACKAGES_UPDATE) { if ($latest != false) { if (isset($latest[$installed['package']])) { $latestInstalledPkg = $latest[$installed['package']]; if (version_compare($latestInstalledPkg['version'], $installed['version'], '>')) { $ptpl = ' <tr class="v"> <td class="e"> Latest Version </td> <td> <a href="http://{channel}/get/{package}">{latest_version}</a>({latest_state}) </td> </tr>'; $packages .= str_replace(array('{package}', '{latest_version}', '{latest_state}', '{channel}' ), array(trim($installed['package']), $latestInstalledPkg['version'], $latestInstalledPkg['state'], $channel ), $ptpl); } } } if ($this->options['resume'] & PEAR_INFO_PACKAGES_XML) { $ptpl = ' <tr class="v"> <td class="e"> Package XML version </td> <td> {packagexml} </td> </tr>'; $packagexml = $installed['packagexml']; if (isset($installed['packagerversion'])) { $packagexml .= ' packaged with PEAR version ' . $installed['packagerversion']; } $packages .= str_replace('{packagexml}', $packagexml, $ptpl); } $ptpl = ' <tr class="v"> <td class="e"> Last Modified </td> <td> {lastmodified} </td> </tr>'; $packages .= str_replace('{lastmodified}', date('Y-m-d', $installed['lastmodified']), $ptpl); } $packages .= ' <tr> <td colspan="2" class="v"><a href="#{top}">Top</a></td> </tr> </table> '; $packages = str_replace('{top}', 'top'.$anchor_suffix, $packages); } $index_header = ' <h2><a id="{top}">{count} Installed Packages, Channel {channel}</a></h2> '; if (count($pkg) > 0) { // improve render and display index only when there are packages $index_header .= ' <table> <tr> <td class="e"> Index </td> </tr> <tr> <td class ="v" style="text-align: center"> '; } $index_header = str_replace(array('{channel}', '{top}', '{count}'), array($channel, 'top'.$anchor_suffix, count($pkg)), $index_header); foreach ($index as $i) { $index_header .= ' | <a href="#'.$i.$anchor_suffix.'">' . strtoupper($i) . '</a>'; } if (count($pkg) > 0) { // improve render and display index only when there are packages $index_header .= ' | </td> </tr> </table> '; } $s .= $index_header . $packages; $anchor_suffix++; } return $s; } /** * Retrieves and formats the PEAR Config data * * @return string * @access private * @since version 1.0.1 (2003-04-24) */ function getConfig() { $keys = $this->config->getKeys(); sort($keys); $html_pear_config = ' <h2>PEAR Configuration</h2> <table>'; foreach ($keys as $key) { if ( ($key != 'password') && ($key != 'username') && ($key != 'sig_keyid') && ($key != 'http_proxy')) { $html_config = ' <tr class="v"> <td class="e">{key}</td> <td>{value}</td> </tr>'; $html_config = str_replace(array('{key}', '{value}'), array($key, $this->config->get($key)), $html_config); $html_pear_config .= $html_config; } } $html_pear_config .= ' </table> '; return $html_pear_config; } /** * Retrieves and formats the PEAR Channel data * * @return string * @access private * @since version 1.7.0RC1 (2007-07-01) */ function getChannels() { $channels = $this->reg->listChannels(); if (PEAR::isError($channels)) { $e = '<p class="error">An Error occured while fetching the channel list.' . ' Please try again.</p>'; return $e; } $channel_allowed = $this->options['channels']; $html_pear_channel = ' <h2>PEAR Channels</h2>'; $anchor_suffix = 0; foreach ($channels as $channel) { if (!in_array($channel, $channel_allowed)) { continue; } $html_pear_channel .= ' <table>'; $info = $this->reg->channelInfo($channel); if (PEAR::isError($info) || is_null($info)) { $e = '<p class="error">An Error occured while fetching ' . $channel . ' channel data.' . ' Please try again.</p>'; return $e; } $data = array('name' => $info['name']); if (isset($info['suggestedalias'])) { $data['alias'] = $info['suggestedalias']; } $data['summary'] = $info['summary']; foreach ($data as $key => $value) { $html_channel = ' <tr class="v"> <td class="e">{key}</td> <td>{value}</td> </tr>'; if ($key == 'name') { $value = '<a href="#top' . $anchor_suffix . '">' . $value . '</a>'; } $html_channel = str_replace(array('{key}', '{value}'), array(ucfirst($key), $value), $html_channel); $html_pear_channel .= $html_channel; } $html_pear_channel .= ' </table> <br /> '; $anchor_suffix++; } return $html_pear_channel; } /** * Retrieves and formats the PEAR Credits * * @return string * @access private * @since version 1.0.1 (2003-04-24) */ function getCredits() { $html_pear_credits = '<h1>PEAR Credits</h1>'; $teams = PEAR_Info::getMembers(); if (($this->options['resume'] & PEAR_INFO_CREDITS_GROUP) || isset($_GET['credits'])) { $html_pear_credits .= ' <table> <tr class="hc"> <td colspan="2"> PEAR Group </td> </tr> <tr class="v"> <td class="e"> President </td> <td> {president} </td> </tr> <tr class="v"> <td colspan="2"> '; foreach ($teams['president'] as $handle => $name) { $html_member = '<a href="http://pear.php.net/account-info.php?handle=' . $handle .'">'. $name .'</a>,'; $html_pear_credits = str_replace('{president}', $html_member, $html_pear_credits); } foreach ($teams['group'] as $handle => $name) { $html_member = '<a href="http://pear.php.net/account-info.php?handle=' . $handle .'">'. $name .'</a>,'; $html_pear_credits .= $html_member; } $html_pear_credits .= ' </td> </tr> </table> <br /> '; } if (($this->options['resume'] & PEAR_INFO_CREDITS_DOCS) || isset($_GET['credits'])) { if (count($teams['docs']) > 0) { $html_pear_credits .= ' <table> <tr class="hc"> <td> PEAR Documentation Team </td> </tr> <tr class="v"> <td> '; foreach ($teams['docs'] as $handle => $name) { $html_member = '<a href="http://pear.php.net/account-info.php?handle=' . $handle .'">'. $name .'</a>,'; $html_pear_credits .= $html_member; } $html_pear_credits .= ' </td> </tr> </table> <br /> '; } } if (($this->options['resume'] & PEAR_INFO_CREDITS_WEBSITE) || isset($_GET['credits'])) { if (count($teams['website']) > 0) { $html_pear_credits .= ' <table> <tr class="hc"> <td> PEAR Website Team </td> </tr> <tr class="v"> <td> '; foreach ($teams['website'] as $handle => $name) { $html_member = '<a href="http://pear.php.net/account-info.php?handle=' . $handle .'">'. $name .'</a>,'; $html_pear_credits .= $html_member; } $html_pear_credits .= ' </td> </tr> </table> <br /> '; } } if (!($this->options['resume'] & PEAR_INFO_CREDITS_PACKAGES) && !isset($_GET['credits'])) { return $html_pear_credits; } // Credits authors of packages group by channels $channel_allowed = $this->options['channels']; $available = $this->reg->listAllPackages(); if (PEAR::isError($available)) { $e = '<p class="error">An Error occured while fetching the credits' . ' from the remote server. Please try again.</p>'; return $e; } if (!is_array($available)) { $e = '<p class="error">The credits could not be fetched' . ' from the remote server. Please try again.</p>'; return $e; } foreach ($available as $channel => $pkg) { if (!in_array($channel, $channel_allowed)) { continue; } if (count($pkg) == 0) { // improve render and did not display channel without package continue; } $html_pear_credits .= ' <br /> <table border="0" cellpadding="3" width="600"> <tr class="hc"><td colspan="2">Channel {channel}</td></tr> <tr class="h"><td>Package</td><td>Maintainers</td></tr>'; $html_pear_credits = str_replace('{channel}', $channel, $html_pear_credits); // sort package by alphabetic order sort($pkg); // foreach ($pkg as $name) { $info = &$this->reg->getPackage($name, $channel); if (is_object($info)) { $installed['package'] = $info->getPackage(); $installed['maintainers'] = $info->getMaintainers(); } else { $installed = $info; } $ptpl = ' <tr> <td class="e"> <a href="http://{channel}/{packageURI}">{package}</a> </td> <td class="v"> {maintainers} </td> </tr>'; $maintainers = array(); foreach ($installed['maintainers'] as $i) { $maintainers[] = '<a href="http://pear.php.net/account-info.php?handle=' . $i['handle']. '">' . htmlentities(html_entity_decode(utf8_decode($i['name']))) . '</a>' .' (' . $i['role'] . (isset($i['active']) && $i['active'] === 'no' ? ', inactive' : '') . ')'; } $maintainers = implode(', ', $maintainers); $html_pear_credits .= str_replace(array('{packageURI}', '{package}', '{channel}', '{maintainers}' ), array(trim(strtolower($installed['package'])), trim($installed['package']), $channel, $maintainers ), $ptpl); } $html_pear_credits .= ' </table> '; } return $html_pear_credits; } /** * Display the PEAR logo * * Display the PEAR logo (gif image) on browser output * * @return void * @access public * @since version 1.0.1 (2003-04-24) */ function pearImage() { $pear_image = 'R0lGODlhaAAyAMT/AMDAwP3+/TWaAvD47Pj89vz++zebBDmcBj6fDEek' . 'FluvKmu3PvX68ujz4XvBS8LgrNXqxeHw1ZnPaa/dgvv9+cLqj8LmltD2msnuls' . '3xmszwmf7+/f///wAAAAAAAAAAACH5BAEAAAAALAAAAABoADIAQAX/IC' . 'COZGmeaKqubOtWWjwJphLLgH1XUu//C1Jisfj9YLEKQnSY3GaixWQqQTkYHM4' . 'AMulNLJFC9pEwIW/odKU8cqTfsWoTTtcomU4ZjbR4ZP+AgYKCG0EiZ1A' . 'uiossEhwEXRMEg5SVWQ6MmZqKWD0QlqCUEHubpaYlExwRPRZioZZVp7KzKQoS' . 'DxANDLsNXA5simd2FcQYb4YAc2jEU80TmAAIztPCMcjKdg4OEsZJmwIW' . 'WQPQI4ikIwtoVQnddgrv8PFlCWgYCwkI+fp5dkvJ/IlUKMCy6tYrDhNIIKLFE' . 'AWCTxse+ABD4SClWA0zovAjcUJFi6EwahxZwoGqHhFA/4IqoICkyxQSK' . 'kbo0gDkuBXV4FRAJkRCnTgi2P28IcEfk5xpWppykFJVuScmEvDTEETAVJ6bEp' . 'ypcADPkz3pvKVAICHChkC7siQ08zVqu4Q6hgIFEFZuEn/KMgRUkaBmAQ' . 's+cEHgIiHVH5EAFpIgW4+NT6LnaqhDwe/Ov7YOmWZp4MkiAWBIl0kAVsJWuzc' . 'YpdiNgddc0E8cKBAu/FElBwagMb88ZZKDRAkWJtkWhHh3wwUbKHQJN3w' . 'QAaXGR2LpArv5oFHRR34C7Mf6oLXZNfqBgNI7oOLhj1f8PaGpygHQ0xtP8MDV' . 'KwYTSKcgxr9/hS6/pCCAAg5M4B9/sWh1YP9/XSgQWRML/idBfKUc4IBE' . 'T9lFjggKhDYZAELZJYEBI2BDB3ouNBEABwE8gAwiCcSYgAKqPdEVAG7scM8BP' . 'PZ4AIlM+OgjAgpMhRE24OVoBwsIFEGFA7ZkQQBWienWxmRa7XDjKZXhB' . 'dAeSmKQwgLuUVLICa6VEKIGcK2mQWoVZHCBXJblJUFkY06yAXlGsPIHBEYdYi' . 'WHb+WQBgaIJqqoHFNpgMGB7dT5ZQuG/WbBAIAUEEFNfwxAWpokTIXJAW' . 'dgoJ9kRFG2g5eDRpXSBpEIF0oEQFaZhDbaSFANRgqcJoEDRARLREtxOQpsPO9' . '06ZUeJgjQB6dZUPBAdwcF8KLXXRVQaKFcsRRLJ6vMiiCNKxRE8ECZKgU' . 'A3Va4arOAAqdGRWO7uMZH5AL05gvsjQbg6y4NCjQ1kw8TVGcbdoKGKx8j3bGH' . '7nARBArqwi0gkFJBrZiXBQRbHoIgnhSjcEBKfD7c3HMhz+JIQSY3t8GG' . 'KW+SUhfUajxGzKd0IoHBNkNQK86ZYEqdzYA8AHQpqXRUm80oHs1CAgMoBxzRq' . 'vzs9CIKECC1JBp7enUpfXHApwVYNAfo16c4IrYPLVdSAJVob7IAtCBFQ' . 'GHcs/RRdiUDPHA33oADEAIAOw=='; header('content-type: image/gif'); echo base64_decode($pear_image); } /** * Returns a members list depending of its category (group, docs, website) * * Retrieve the members list of PEAR group, PEAR doc team, or PEAR website team * * @param string $group (optional) Member list category. * Either president, group, docs or website * @param bool $sort (optional) Return a member list sorted * in alphabetic order * * @static * @return array * @access public * @since version 1.7.0RC3 (2007-07-10) */ function getMembers($group = 'all', $sort = true) { $members = array( 'president' => array('davidc' => 'David Coallier'), 'group' => array( 'jeichorn' => 'Joshua Eichorn', 'dufuz' => 'Helgi þormar', 'jstump' => 'Joe Stump', 'cweiske' => 'Christian Weiske', 'ashnazg' => 'Chuck Burgess', 'tswicegood' => 'Travis Swicegood', 'saltybeagle' => 'Brett Bieber', ), 'docs' => array( ), 'website' => array( ) ); if ($group === 'all') { $list = $members; if ($sort === true) { asort($list['group']); asort($list['docs']); asort($list['website']); } } elseif (in_array($group, array_keys($members))) { $list = $members[$group]; if ($sort === true) { asort($list); } } else { $list = false; } return $list; } /** * Shows PEAR_Info output * * Displays PEAR_Info output depending of style applied (style sheet). * * @return void * @access public * @since version 1.0.1 (2003-04-24) * @see setStyleSheet() * @deprecated use display() instead */ function show() { $this->display(); } /** * Displays PEAR_Info output * * Displays PEAR_Info output depending of style applied (style sheet). * * @return void * @access public * @since version 1.7.0RC1 (2007-07-01) * @see setStyleSheet() */ function display() { echo $this->toHtml(); } /** * Returns PEAR_Info output (html code) * * Returns html code. This code is XHTML 1.1 compliant since version 1.7.0 * A stand-alone HTML page will be printed only if PEAR_INFO_FULLPAGE * resume options is set. * * @return string * @access public * @since version 1.7.0RC1 (2007-07-01) * @see setStyleSheet(), getStyleSheet() */ function toHtml() { $body = $this->info; if (!($this->options['resume'] & PEAR_INFO_FULLPAGE)) { return $body; } if (!isset($this->css)) { // when no user-styles defined, used the default values $this->setStyleSheet(); } $styles = $this->getStyleSheet(); $html = <<<HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>PEAR :: PEAR_Info()</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> <!-- $styles --> </style> </head> <body> <div> $body </div> </body> </html> HTML; return $html; } /** * Check if a package is installed * * Simple function to check if a package is installed under user * or system PEAR installation. Minimal version and channel info are supported. * * @param string $name Package name * @param string $version (optional) The minimal version * that should be installed * @param string $channel (optional) The package channel distribution * @param string $user_file (optional) file to read PEAR user-defined * options from * @param string $system_file (optional) file to read PEAR system-wide * defaults from * * @static * @return bool * @access public * @since version 1.6.0 (2005-01-03) */ function packageInstalled($name, $version = null, $channel = null, $user_file = '', $system_file = '') { $config =& PEAR_Config::singleton($user_file, $system_file); $reg =& $config->getRegistry(); if (is_null($version)) { return $reg->packageExists($name, $channel); } else { $info = &$reg->getPackage($name, $channel); if (is_object($info)) { $installed['version'] = $info->getVersion(); } else { $installed = $info; } return version_compare($version, $installed['version'], '<='); } } } if (isset($_GET['pear_image'])) { PEAR_Info::pearImage(); exit(); } ?>