114 $reg = &$this->config->getRegistry();
115 $channelinfo = isset(
$options[
'channelinfo']);
116 if (isset(
$options[
'allchannels']) && !$channelinfo) {
120 if (isset(
$options[
'allchannels']) && $channelinfo) {
123 $channels = $reg->getChannels();
126 foreach ($channels as $channel) {
127 $options[
'channel'] = $channel->getName();
136 if (count($errors)) {
138 return PEAR::raiseError($errors[0]);
144 if (count($params) === 1) {
149 if (!$reg->channelExists(
$options[
'channel'])) {
150 return $this->raiseError(
'Channel "' .
$options[
'channel'] .
'" does not exist');
153 $channel = $reg->channelName(
$options[
'channel']);
155 $channel = $this->config->get(
'default_channel');
158 $installed = $reg->packageInfo(
null,
null, $channel);
159 usort($installed, array(&$this,
'_sortinfo'));
162 'caption' =>
'Installed packages, channel ' .
165 'headline' => array(
'Package',
'Version',
'State'),
166 'channel' => $channel,
169 $data[
'headline'] = array(
'Channel',
'Package',
'Version',
'State');
172 if (count($installed) && !isset($data[
'data'])) {
173 $data[
'data'] = array();
176 foreach ($installed as $package) {
177 $pobj = $reg->getPackage(isset($package[
'package']) ?
178 $package[
'package'] : $package[
'name'], $channel);
180 $packageinfo = array($pobj->getChannel(), $pobj->getPackage(), $pobj->getVersion(),
181 $pobj->getState() ? $pobj->getState() :
null);
183 $packageinfo = array($pobj->getPackage(), $pobj->getVersion(),
184 $pobj->getState() ? $pobj->getState() :
null);
186 $data[
'data'][] = $packageinfo;
189 if (count($installed) === 0) {
191 $data =
'(no packages installed from channel ' . $channel .
')';
194 'caption' =>
'Installed packages, channel ' .
197 'channel' => $channel,
198 'data' => array(array(
'(no packages installed)')),
203 $this->ui->outputData($data,
$command);
212 $reg = &$this->config->getRegistry();
213 $installed = $reg->packageInfo(
null,
null,
null);
214 foreach ($installed as $channel => $packages) {
215 usort($packages, array($this,
'_sortinfo'));
217 'caption' =>
'Installed packages, channel ' . $channel .
':',
219 'headline' => array(
'Package',
'Version',
'State'),
220 'channel' => $channel
223 foreach ($packages as $package) {
224 $p = isset($package[
'package']) ? $package[
'package'] : $package[
'name'];
225 $pobj = $reg->getPackage($p, $channel);
226 $data[
'data'][] = array($pobj->getPackage(), $pobj->getVersion(),
227 $pobj->getState() ? $pobj->getState() :
null);
231 $data[
'data'][] = array();
233 if (count($packages) === 0) {
235 'caption' =>
'Installed packages, channel ' . $channel .
':',
237 'data' => array(array(
'(no packages installed)'), array()),
238 'channel' => $channel
241 $this->ui->outputData($data,
$command);
248 if (count($params) !== 1) {
249 return $this->raiseError(
'list-files expects 1 parameter');
252 $reg = &$this->config->getRegistry();
254 if (!is_dir($params[0]) && (file_exists($params[0]) || $fp = @fopen($params[0],
'r'))) {
259 if (!class_exists(
'PEAR_PackageFile')) {
260 require_once
'PEAR/PackageFile.php';
267 $headings = array(
'Package File',
'Install Path');
271 $parsed = $reg->parsePackageName($params[0], $this->config->get(
'default_channel'));
274 return $this->raiseError($parsed);
277 $info = &$reg->getPackage($parsed[
'package'], $parsed[
'channel']);
278 $headings = array(
'Type',
'Install Path');
283 return $this->raiseError($info);
286 if ($info ===
null) {
287 return $this->raiseError(
"`$params[0]' not installed");
290 $list = ($info->getPackagexmlVersion() ==
'1.0' || $installed) ?
291 $info->getFilelist() : $info->getContents();
293 $caption =
'Installed Files For ' . $params[0];
295 $caption =
'Contents of ' . basename($params[0]);
299 'caption' => $caption,
301 'headline' => $headings);
302 if ($info->getPackagexmlVersion() ==
'1.0' || $installed) {
303 foreach ($list as $file => $att) {
305 if (empty($att[
'installed_as'])) {
308 $data[
'data'][] = array($att[
'role'], $att[
'installed_as']);
310 if (isset($att[
'baseinstalldir']) && !in_array($att[
'role'],
311 array(
'test',
'data',
'doc'))) {
312 $dest = $att[
'baseinstalldir'] . DIRECTORY_SEPARATOR .
317 switch ($att[
'role']) {
321 $role = $att[
'role'];
322 if ($role ==
'test') {
325 $dest = $this->config->get($role .
'_dir') . DIRECTORY_SEPARATOR .
326 $info->getPackage() . DIRECTORY_SEPARATOR . $dest;
330 $dest = $this->config->get(
'php_dir') . DIRECTORY_SEPARATOR .
333 $ds2 = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
334 $dest = preg_replace(array(
'!\\\\+!',
'!/!',
"!$ds2+!"),
335 array(DIRECTORY_SEPARATOR,
337 DIRECTORY_SEPARATOR),
339 $file = preg_replace(
'!/+!',
'/', $file);
340 $data[
'data'][] = array($file, $dest);
344 if (!isset($list[
'dir'][
'file'][0])) {
345 $list[
'dir'][
'file'] = array($list[
'dir'][
'file']);
348 foreach ($list[
'dir'][
'file'] as $att) {
349 $att = $att[
'attribs'];
350 $file = $att[
'name'];
352 $role->setup($this, $info, $att, $file);
353 if (!$role->isInstallable()) {
354 $dest =
'(not installable)';
356 $dest = $role->processInstallation($info, $att, $file,
'');
358 $dest =
'(Unknown role "' . $att[
'role'] .
')';
360 list(,, $dest) = $dest;
363 $data[
'data'][] = array($file, $dest);
367 $this->ui->outputData($data,
$command);
373 if (count($params) < 1) {
374 return PEAR::raiseError(
'ERROR, usage: pear shell-test packagename [[relation] version]');
378 $reg = &$this->config->getRegistry();
379 $info = $reg->parsePackageName($params[0], $this->config->get(
'default_channel'));
384 $package = $info[
'package'];
385 $channel = $info[
'channel'];
387 if (!$reg->packageExists($package, $channel)) {
388 if ($channel ==
'pecl.php.net') {
389 if ($reg->packageExists($package,
'pear.php.net')) {
390 $channel =
'pear.php.net';
395 if (count($params) === 1) {
396 if (!$reg->packageExists($package, $channel)) {
400 } elseif (count($params) === 2) {
401 $v = $reg->packageInfo($package,
'version', $channel);
402 if (!$v || !version_compare(
"$v",
"{$params[1]}",
"ge")) {
406 } elseif (count($params) === 3) {
407 $v = $reg->packageInfo($package,
'version', $channel);
408 if (!$v || !version_compare(
"$v",
"{$params[2]}", $params[1])) {
413 $this->raiseError(
"$command: expects 1 to 3 parameters");
420 if (count($params) !== 1) {
421 return $this->raiseError(
'pear info expects 1 parameter');
425 $reg = &$this->config->getRegistry();
426 if (is_file($params[0]) && !is_dir($params[0]) &&
427 (file_exists($params[0]) || $fp = @fopen($params[0],
'r'))
433 if (!class_exists(
'PEAR_PackageFile')) {
434 require_once
'PEAR/PackageFile.php';
442 $uinfo = $obj->getUserInfo();
443 if (is_array($uinfo)) {
444 foreach ($uinfo as $message) {
445 if (is_array($message)) {
446 $message = $message[
'message'];
448 $this->ui->outputData($message);
452 return $this->raiseError($obj);
455 if ($obj->getPackagexmlVersion() !=
'1.0') {
459 $info = $obj->toArray();
461 $parsed = $reg->parsePackageName($params[0], $this->config->get(
'default_channel'));
463 return $this->raiseError($parsed);
466 $package = $parsed[
'package'];
467 $channel = $parsed[
'channel'];
468 $info = $reg->packageInfo($package,
null, $channel);
469 if (isset($info[
'old'])) {
470 $obj = $reg->getPackage($package, $channel);
480 $this->raiseError(
"No information found for `$params[0]'");
484 unset($info[
'filelist']);
485 unset($info[
'dirtree']);
486 unset($info[
'changelog']);
487 if (isset($info[
'xsdversion'])) {
488 $info[
'package.xml version'] = $info[
'xsdversion'];
489 unset($info[
'xsdversion']);
492 if (isset($info[
'packagerversion'])) {
493 $info[
'packaged with PEAR version'] = $info[
'packagerversion'];
494 unset($info[
'packagerversion']);
497 $keys = array_keys($info);
498 $longtext = array(
'description',
'summary');
499 foreach ($keys as $key) {
500 if (is_array($info[$key])) {
502 case 'maintainers': {
505 foreach ($info[$key] as $m) {
509 $mstr .= $m[
'name'] .
" <";
510 if (isset($m[
'email'])) {
511 $mstr .= $m[
'email'];
513 $mstr .= $m[
'handle'] .
'@php.net';
515 $mstr .=
"> ($m[role])";
520 case 'release_deps': {
523 foreach ($info[$key] as $d) {
524 if (isset($this->_deps_rel_trans[$d[
'rel']])) {
525 $rel = $this->_deps_rel_trans[$d[
'rel']];
529 if (isset($this->_deps_type_trans[$d[
'type']])) {
530 $type = ucfirst($this->_deps_type_trans[$d[
'type']]);
534 if (isset($d[
'name'])) {
535 $name = $d[
'name'] .
' ';
539 if (isset($d[
'version'])) {
540 $version = $d[
'version'] .
' ';
544 if (isset($d[
'optional']) && $d[
'optional'] ==
'yes') {
545 $optional =
' (optional)';
549 $dstr .=
"$type $name$rel $version$optional\n";
555 $debug = $this->config->get(
'verbose');
562 foreach ($info[$key] as $p) {
563 if ($debug < 2 && $p[
'type'] !=
"class") {
576 $pstr .= ucfirst($p[
'type']) .
" " . $p[
'name'];
577 if (isset($p[
'explicit']) && $p[
'explicit'] == 1) {
578 $pstr .=
" (explicit)";
585 case 'configure_options' : {
586 foreach ($info[$key] as $i => $p) {
587 $info[$key][$i] = array_map(
null, array_keys($p), array_values($p));
588 $info[$key][$i] = array_map(
589 function($a) {
return join(
" = ", $a); },
591 $info[$key][$i] = implode(
', ', $info[$key][$i]);
593 $info[$key] = implode(
"\n", $info[$key]);
597 $info[$key] = implode(
", ", $info[$key]);
603 if ($key ==
'_lastmodified') {
604 $hdate = date(
'Y-m-d', $info[$key]);
606 $info[
'Last Modified'] = $hdate;
607 } elseif ($key ==
'_lastversion') {
608 $info[
'Previous Installed Version'] = $info[$key] ? $info[$key] :
'- None -';
611 $info[$key] = trim($info[$key]);
612 if (in_array($key, $longtext)) {
613 $info[$key] = preg_replace(
'/ +/',
' ', $info[$key]);
618 $caption =
'About ' . $info[
'package'] .
'-' . $info[
'version'];
620 'caption' => $caption,
622 foreach ($info as $key => $value) {
623 $key = ucwords(trim(str_replace(
'_',
' ', $key)));
624 $data[
'data'][] = array($key, $value);
626 $data[
'raw'] = $info;
628 $this->ui->outputData($data,
'package-info');
636 $reg = &$this->config->getRegistry();
637 $caption =
'About ' . $obj->getChannel() .
'/' .$obj->getPackage() .
'-' .
640 'caption' => $caption,
642 switch ($obj->getPackageType()) {
644 $release =
'PEAR-style PHP-based Package';
647 $release =
'PECL-style PHP extension (source code)';
650 $release =
'PECL-style Zend extension (source code)';
653 $release =
'PECL-style PHP extension (binary)';
656 $release =
'PECL-style Zend extension (binary)';
659 $release =
'Package bundle (collection of packages)';
662 $extends = $obj->getExtends();
663 $extends = $extends ?
664 $obj->getPackage() .
' (extends ' . $extends .
')' : $obj->getPackage();
665 if ($src = $obj->getSourcePackage()) {
666 $extends .=
' (source package ' . $src[
'channel'] .
'/' . $src[
'package'] .
')';
670 'Release Type' => $release,
672 'Channel' => $obj->getChannel(),
673 'Summary' => preg_replace(
'/ +/',
' ', $obj->getSummary()),
674 'Description' => preg_replace(
'/ +/',
' ', $obj->getDescription()),
676 $info[
'Maintainers'] =
'';
677 foreach (array(
'lead',
'developer',
'contributor',
'helper') as $role) {
678 $leads = $obj->{
"get{$role}s"}();
683 if (isset($leads[
'active'])) {
684 $leads = array($leads);
687 foreach ($leads as $lead) {
688 if (!empty($info[
'Maintainers'])) {
689 $info[
'Maintainers'] .=
"\n";
692 $active = $lead[
'active'] ==
'no' ?
', inactive' :
'';
693 $info[
'Maintainers'] .= $lead[
'name'] .
' <';
694 $info[
'Maintainers'] .= $lead[
'email'] .
"> ($role$active)";
698 $info[
'Release Date'] = $obj->getDate();
699 if ($time = $obj->getTime()) {
700 $info[
'Release Date'] .=
' ' . $time;
703 $info[
'Release Version'] = $obj->getVersion() .
' (' . $obj->getState() .
')';
704 $info[
'API Version'] = $obj->getVersion(
'api') .
' (' . $obj->getState(
'api') .
')';
705 $info[
'License'] = $obj->getLicense();
706 $uri = $obj->getLicenseLocation();
708 if (isset($uri[
'uri'])) {
709 $info[
'License'] .=
' (' . $uri[
'uri'] .
')';
711 $extra = $obj->getInstalledLocation($info[
'filesource']);
713 $info[
'License'] .=
' (' . $uri[
'filesource'] .
')';
718 $info[
'Release Notes'] = $obj->getNotes();
719 if ($compat = $obj->getCompatible()) {
720 if (!isset($compat[0])) {
721 $compat = array($compat);
724 $info[
'Compatible with'] =
'';
725 foreach ($compat as $package) {
726 $info[
'Compatible with'] .= $package[
'channel'] .
'/' . $package[
'name'] .
727 "\nVersions >= " . $package[
'min'] .
', <= ' . $package[
'max'];
728 if (isset($package[
'exclude'])) {
729 if (is_array($package[
'exclude'])) {
730 $package[
'exclude'] = implode(
', ', $package[
'exclude']);
733 if (!isset($info[
'Not Compatible with'])) {
734 $info[
'Not Compatible with'] =
'';
736 $info[
'Not Compatible with'] .=
"\n";
738 $info[
'Not Compatible with'] .= $package[
'channel'] .
'/' .
739 $package[
'name'] .
"\nVersions " . $package[
'exclude'];
744 $usesrole = $obj->getUsesrole();
746 if (!isset($usesrole[0])) {
747 $usesrole = array($usesrole);
750 foreach ($usesrole as $roledata) {
751 if (isset($info[
'Uses Custom Roles'])) {
752 $info[
'Uses Custom Roles'] .=
"\n";
754 $info[
'Uses Custom Roles'] =
'';
757 if (isset($roledata[
'package'])) {
758 $rolepackage = $reg->parsedPackageNameToString($roledata,
true);
760 $rolepackage = $roledata[
'uri'];
762 $info[
'Uses Custom Roles'] .= $roledata[
'role'] .
' (' . $rolepackage .
')';
766 $usestask = $obj->getUsestask();
768 if (!isset($usestask[0])) {
769 $usestask = array($usestask);
772 foreach ($usestask as $taskdata) {
773 if (isset($info[
'Uses Custom Tasks'])) {
774 $info[
'Uses Custom Tasks'] .=
"\n";
776 $info[
'Uses Custom Tasks'] =
'';
779 if (isset($taskdata[
'package'])) {
780 $taskpackage = $reg->parsedPackageNameToString($taskdata,
true);
782 $taskpackage = $taskdata[
'uri'];
784 $info[
'Uses Custom Tasks'] .= $taskdata[
'task'] .
' (' . $taskpackage .
')';
788 $deps = $obj->getDependencies();
789 $info[
'Required Dependencies'] =
'PHP version ' . $deps[
'required'][
'php'][
'min'];
790 if (isset($deps[
'required'][
'php'][
'max'])) {
791 $info[
'Required Dependencies'] .=
'-' . $deps[
'required'][
'php'][
'max'] .
"\n";
793 $info[
'Required Dependencies'] .=
"\n";
796 if (isset($deps[
'required'][
'php'][
'exclude'])) {
797 if (!isset($info[
'Not Compatible with'])) {
798 $info[
'Not Compatible with'] =
'';
800 $info[
'Not Compatible with'] .=
"\n";
803 if (is_array($deps[
'required'][
'php'][
'exclude'])) {
804 $deps[
'required'][
'php'][
'exclude'] =
805 implode(
', ', $deps[
'required'][
'php'][
'exclude']);
807 $info[
'Not Compatible with'] .=
"PHP versions\n " .
808 $deps[
'required'][
'php'][
'exclude'];
811 $info[
'Required Dependencies'] .=
'PEAR installer version';
812 if (isset($deps[
'required'][
'pearinstaller'][
'max'])) {
813 $info[
'Required Dependencies'] .=
's ' .
814 $deps[
'required'][
'pearinstaller'][
'min'] .
'-' .
815 $deps[
'required'][
'pearinstaller'][
'max'];
817 $info[
'Required Dependencies'] .=
' ' .
818 $deps[
'required'][
'pearinstaller'][
'min'] .
' or newer';
821 if (isset($deps[
'required'][
'pearinstaller'][
'exclude'])) {
822 if (!isset($info[
'Not Compatible with'])) {
823 $info[
'Not Compatible with'] =
'';
825 $info[
'Not Compatible with'] .=
"\n";
828 if (is_array($deps[
'required'][
'pearinstaller'][
'exclude'])) {
829 $deps[
'required'][
'pearinstaller'][
'exclude'] =
830 implode(
', ', $deps[
'required'][
'pearinstaller'][
'exclude']);
832 $info[
'Not Compatible with'] .=
"PEAR installer\n Versions " .
833 $deps[
'required'][
'pearinstaller'][
'exclude'];
836 foreach (array(
'Package',
'Extension') as $type) {
837 $index = strtolower($type);
838 if (isset($deps[
'required'][$index])) {
839 if (isset($deps[
'required'][$index][
'name'])) {
840 $deps[
'required'][$index] = array($deps[
'required'][$index]);
843 foreach ($deps[
'required'][$index] as $package) {
844 if (isset($package[
'conflicts'])) {
845 $infoindex =
'Not Compatible with';
846 if (!isset($info[
'Not Compatible with'])) {
847 $info[
'Not Compatible with'] =
'';
849 $info[
'Not Compatible with'] .=
"\n";
852 $infoindex =
'Required Dependencies';
853 $info[$infoindex] .=
"\n";
856 if ($index ==
'extension') {
857 $name = $package[
'name'];
859 if (isset($package[
'channel'])) {
860 $name = $package[
'channel'] .
'/' . $package[
'name'];
862 $name =
'__uri/' . $package[
'name'] .
' (static URI)';
866 $info[$infoindex] .=
"$type $name";
867 if (isset($package[
'uri'])) {
868 $info[$infoindex] .=
"\n Download URI: $package[uri]";
872 if (isset($package[
'max']) && isset($package[
'min'])) {
873 $info[$infoindex] .=
" \n Versions " .
874 $package[
'min'] .
'-' . $package[
'max'];
875 } elseif (isset($package[
'min'])) {
876 $info[$infoindex] .=
" \n Version " .
877 $package[
'min'] .
' or newer';
878 } elseif (isset($package[
'max'])) {
879 $info[$infoindex] .=
" \n Version " .
880 $package[
'max'] .
' or older';
883 if (isset($package[
'recommended'])) {
884 $info[$infoindex] .=
"\n Recommended version: $package[recommended]";
887 if (isset($package[
'exclude'])) {
888 if (!isset($info[
'Not Compatible with'])) {
889 $info[
'Not Compatible with'] =
'';
891 $info[
'Not Compatible with'] .=
"\n";
894 if (is_array($package[
'exclude'])) {
895 $package[
'exclude'] = implode(
', ', $package[
'exclude']);
898 $package[
'package'] = $package[
'name'];
899 if (isset($package[
'conflicts'])) {
900 $info[
'Not Compatible with'] .=
'=> except ';
902 $info[
'Not Compatible with'] .=
'Package ' .
903 $reg->parsedPackageNameToString($package,
true);
904 $info[
'Not Compatible with'] .=
"\n Versions " . $package[
'exclude'];
910 if (isset($deps[
'required'][
'os'])) {
911 if (isset($deps[
'required'][
'os'][
'name'])) {
912 $dep[
'required'][
'os'][
'name'] = array($dep[
'required'][
'os'][
'name']);
915 foreach ($dep[
'required'][
'os'] as $os) {
916 if (isset($os[
'conflicts']) && $os[
'conflicts'] ==
'yes') {
917 if (!isset($info[
'Not Compatible with'])) {
918 $info[
'Not Compatible with'] =
'';
920 $info[
'Not Compatible with'] .=
"\n";
922 $info[
'Not Compatible with'] .=
"$os[name] Operating System";
924 $info[
'Required Dependencies'] .=
"\n";
925 $info[
'Required Dependencies'] .=
"$os[name] Operating System";
930 if (isset($deps[
'required'][
'arch'])) {
931 if (isset($deps[
'required'][
'arch'][
'pattern'])) {
932 $dep[
'required'][
'arch'][
'pattern'] = array($dep[
'required'][
'os'][
'pattern']);
935 foreach ($dep[
'required'][
'arch'] as $os) {
936 if (isset($os[
'conflicts']) && $os[
'conflicts'] ==
'yes') {
937 if (!isset($info[
'Not Compatible with'])) {
938 $info[
'Not Compatible with'] =
'';
940 $info[
'Not Compatible with'] .=
"\n";
942 $info[
'Not Compatible with'] .=
"OS/Arch matching pattern '/$os[pattern]/'";
944 $info[
'Required Dependencies'] .=
"\n";
945 $info[
'Required Dependencies'] .=
"OS/Arch matching pattern '/$os[pattern]/'";
950 if (isset($deps[
'optional'])) {
951 foreach (array(
'Package',
'Extension') as $type) {
952 $index = strtolower($type);
953 if (isset($deps[
'optional'][$index])) {
954 if (isset($deps[
'optional'][$index][
'name'])) {
955 $deps[
'optional'][$index] = array($deps[
'optional'][$index]);
958 foreach ($deps[
'optional'][$index] as $package) {
959 if (isset($package[
'conflicts']) && $package[
'conflicts'] ==
'yes') {
960 $infoindex =
'Not Compatible with';
961 if (!isset($info[
'Not Compatible with'])) {
962 $info[
'Not Compatible with'] =
'';
964 $info[
'Not Compatible with'] .=
"\n";
967 $infoindex =
'Optional Dependencies';
968 if (!isset($info[
'Optional Dependencies'])) {
969 $info[
'Optional Dependencies'] =
'';
971 $info[
'Optional Dependencies'] .=
"\n";
975 if ($index ==
'extension') {
976 $name = $package[
'name'];
978 if (isset($package[
'channel'])) {
979 $name = $package[
'channel'] .
'/' . $package[
'name'];
981 $name =
'__uri/' . $package[
'name'] .
' (static URI)';
985 $info[$infoindex] .=
"$type $name";
986 if (isset($package[
'uri'])) {
987 $info[$infoindex] .=
"\n Download URI: $package[uri]";
991 if ($infoindex ==
'Not Compatible with') {
996 if (isset($package[
'max']) && isset($package[
'min'])) {
997 $info[$infoindex] .=
" \n Versions " .
998 $package[
'min'] .
'-' . $package[
'max'];
999 } elseif (isset($package[
'min'])) {
1000 $info[$infoindex] .=
" \n Version " .
1001 $package[
'min'] .
' or newer';
1002 } elseif (isset($package[
'max'])) {
1003 $info[$infoindex] .=
" \n Version " .
1004 $package[
'min'] .
' or older';
1007 if (isset($package[
'recommended'])) {
1008 $info[$infoindex] .=
"\n Recommended version: $package[recommended]";
1011 if (isset($package[
'exclude'])) {
1012 if (!isset($info[
'Not Compatible with'])) {
1013 $info[
'Not Compatible with'] =
'';
1015 $info[
'Not Compatible with'] .=
"\n";
1018 if (is_array($package[
'exclude'])) {
1019 $package[
'exclude'] = implode(
', ', $package[
'exclude']);
1022 $info[
'Not Compatible with'] .=
"Package $package\n Versions " .
1023 $package[
'exclude'];
1030 if (isset($deps[
'group'])) {
1031 if (!isset($deps[
'group'][0])) {
1032 $deps[
'group'] = array($deps[
'group']);
1035 foreach ($deps[
'group'] as $group) {
1036 $info[
'Dependency Group ' . $group[
'attribs'][
'name']] = $group[
'attribs'][
'hint'];
1037 $groupindex = $group[
'attribs'][
'name'] .
' Contents';
1038 $info[$groupindex] =
'';
1039 foreach (array(
'Package',
'Extension') as $type) {
1040 $index = strtolower($type);
1041 if (isset($group[$index])) {
1042 if (isset($group[$index][
'name'])) {
1043 $group[$index] = array($group[$index]);
1046 foreach ($group[$index] as $package) {
1047 if (!empty($info[$groupindex])) {
1048 $info[$groupindex] .=
"\n";
1051 if ($index ==
'extension') {
1052 $name = $package[
'name'];
1054 if (isset($package[
'channel'])) {
1055 $name = $package[
'channel'] .
'/' . $package[
'name'];
1057 $name =
'__uri/' . $package[
'name'] .
' (static URI)';
1061 if (isset($package[
'uri'])) {
1062 if (isset($package[
'conflicts']) && $package[
'conflicts'] ==
'yes') {
1063 $info[$groupindex] .=
"Not Compatible with $type $name";
1065 $info[$groupindex] .=
"$type $name";
1068 $info[$groupindex] .=
"\n Download URI: $package[uri]";
1072 if (isset($package[
'conflicts']) && $package[
'conflicts'] ==
'yes') {
1073 $info[$groupindex] .=
"Not Compatible with $type $name";
1077 $info[$groupindex] .=
"$type $name";
1078 if (isset($package[
'max']) && isset($package[
'min'])) {
1079 $info[$groupindex] .=
" \n Versions " .
1080 $package[
'min'] .
'-' . $package[
'max'];
1081 } elseif (isset($package[
'min'])) {
1082 $info[$groupindex] .=
" \n Version " .
1083 $package[
'min'] .
' or newer';
1084 } elseif (isset($package[
'max'])) {
1085 $info[$groupindex] .=
" \n Version " .
1086 $package[
'min'] .
' or older';
1089 if (isset($package[
'recommended'])) {
1090 $info[$groupindex] .=
"\n Recommended version: $package[recommended]";
1093 if (isset($package[
'exclude'])) {
1094 if (!isset($info[
'Not Compatible with'])) {
1095 $info[
'Not Compatible with'] =
'';
1097 $info[$groupindex] .=
"Not Compatible with\n";
1100 if (is_array($package[
'exclude'])) {
1101 $package[
'exclude'] = implode(
', ', $package[
'exclude']);
1103 $info[$groupindex] .=
" Package $package\n Versions " .
1104 $package[
'exclude'];
1112 if ($obj->getPackageType() ==
'bundle') {
1113 $info[
'Bundled Packages'] =
'';
1114 foreach ($obj->getBundledPackages() as $package) {
1115 if (!empty($info[
'Bundled Packages'])) {
1116 $info[
'Bundled Packages'] .=
"\n";
1119 if (isset($package[
'uri'])) {
1120 $info[
'Bundled Packages'] .=
'__uri/' . $package[
'name'];
1121 $info[
'Bundled Packages'] .=
"\n (URI: $package[uri]";
1123 $info[
'Bundled Packages'] .= $package[
'channel'] .
'/' . $package[
'name'];
1128 $info[
'package.xml version'] =
'2.0';
1130 if ($obj->getLastModified()) {
1131 $info[
'Last Modified'] = date(
'Y-m-d H:i', $obj->getLastModified());
1134 $v = $obj->getLastInstalledVersion();
1135 $info[
'Previous Installed Version'] = $v ? $v :
'- None -';
1138 foreach ($info as $key => $value) {
1139 $data[
'data'][] = array($key, $value);
1142 $data[
'raw'] = $obj->getArray();
1143 $this->ui->outputData($data,
'package-info');