mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-18 14:03:28 +01:00
384 lines
11 KiB
PHP
384 lines
11 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* eGroupWare: About informations
|
||
|
*
|
||
|
* rewrite of the old PHPLib based about page
|
||
|
* it now uses eTemplate
|
||
|
*
|
||
|
* This is NO typical eTemplate application as it is not stored in the
|
||
|
* correct namespace
|
||
|
*
|
||
|
* LICENSE: GPL.
|
||
|
*
|
||
|
* @package api
|
||
|
* @subpackage about
|
||
|
* @author Sebastian Ebling <hudeldudel@php.net>
|
||
|
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html
|
||
|
* @link http://www.egroupware.org
|
||
|
* @version SVN: $Id$
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Shows informations about eGroupWare
|
||
|
* - general information
|
||
|
* - installed applications
|
||
|
* - installed templates
|
||
|
* - installed languages
|
||
|
*
|
||
|
* Usage:
|
||
|
* <code>
|
||
|
* $aboutPage = new about();
|
||
|
* </code>
|
||
|
* The constuctor will do all
|
||
|
*
|
||
|
* There is no typical so, bo ui structure, this class is all in one
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
class about
|
||
|
{
|
||
|
/**
|
||
|
* constructor of about class
|
||
|
* decides to show tab- or detail view
|
||
|
*
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function about()
|
||
|
{
|
||
|
// list or detail view
|
||
|
$name = 'eGroupWare';
|
||
|
$detail = false;
|
||
|
$nonavbar = false;
|
||
|
|
||
|
// application detail?
|
||
|
if (isset($_GET['app']) && $_GET['app'] != 'eGroupWare') {
|
||
|
$name = basename($_GET['app']);
|
||
|
$type = 'application';
|
||
|
$detail = true;
|
||
|
}
|
||
|
|
||
|
// template detail?
|
||
|
if (isset($_GET['template']) && $_GET['template'] != 'eGroupWare') {
|
||
|
$name = basename($_GET['template']);
|
||
|
$type = 'template';
|
||
|
$detail = true;
|
||
|
}
|
||
|
|
||
|
// navbar or not
|
||
|
if (isset($_GET['nonavbar'])) {
|
||
|
$nonavbar = $_GET['nonavbar'];
|
||
|
}
|
||
|
|
||
|
|
||
|
if ($detail) {
|
||
|
$this->_detailView($name, $type, $nonavbar);
|
||
|
} else {
|
||
|
$this->_listView();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* output of list view
|
||
|
* collects data and shows a tabbed view that lists
|
||
|
* - general informations
|
||
|
* - installed applications
|
||
|
* - installed templates
|
||
|
* - installed languages
|
||
|
*
|
||
|
* @return nothing
|
||
|
*
|
||
|
* @access private
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function _listView()
|
||
|
{
|
||
|
// get informations about the applications
|
||
|
$apps = array();
|
||
|
$apps[] = ''; // first empty row for eTemplate
|
||
|
foreach ($GLOBALS['egw_info']['user']['apps'] as $app => $appinfo) {
|
||
|
$info = $this->_getParsedAppInfo($app);
|
||
|
$apps[] = array(
|
||
|
'appImage' => '<img src="'.$info['image'].'" />',
|
||
|
'appName' => $appinfo['title'],
|
||
|
'appAuthor' => $info['author'],
|
||
|
'appMaintainer' => $info['maintainer'],
|
||
|
'appVersion' => $info['version'],
|
||
|
'appLicense' => $this->_linkLicense($info['license']),
|
||
|
'appDetails' => '<a href="'.$GLOBALS['egw_info']['server']['webserver_url'].'/about.php?app='.$app.'&nonavbar=true" onclick="egw_openWindowCentered2(this.href,this.target,750,410,'."'yes'".'); return false;"><img src="'.$GLOBALS['egw']->common->image('phpgwapi','view.png').'" /></a>'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// get informations about the templates
|
||
|
$templates = array();
|
||
|
$templates[] = ''; // first empty row for eTemplate
|
||
|
foreach($GLOBALS['egw']->common->list_templates() as $template => $templateinfo) {
|
||
|
$info = $this->_getParsedTemplateInfo($template);
|
||
|
$templates[] = array(
|
||
|
'templateImage' => '<img src="'.$info['image'].'" />',
|
||
|
'templateName' => $templateinfo['name'],
|
||
|
'templateAuthor' => $info['author'],
|
||
|
'templateMaintainer'=> $info['maintainer'],
|
||
|
'templateVersion' => $info['version'],
|
||
|
'templateLicense' => $this->_linkLicense($info['license']),
|
||
|
'templateDetails' => '<a href="'.$GLOBALS['egw_info']['server']['webserver_url'].'/about.php?template='.$template.'&nonavbar=true" onclick="egw_openWindowCentered2(this.href,this.target,750,410,'."'yes'".'); return false;"><img src="'.$GLOBALS['egw']->common->image('phpgwapi','view.png').'" /></a>'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// get informations about installed languages
|
||
|
$translations = array();
|
||
|
$translations[] = ''; // first empty row for eTemplate
|
||
|
$langs = $GLOBALS['egw']->translation->get_installed_langs();
|
||
|
foreach($GLOBALS['egw']->translation->get_installed_langs() as $translation => $translationinfo) {
|
||
|
$translations[] = array(
|
||
|
'langName' => $translationinfo.' ('.$translation.')'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
|
||
|
// fill content array for eTemplate
|
||
|
$content = array(
|
||
|
'apiVersion' => '<p>'.lang('eGroupWare API version').' '.$GLOBALS['egw_info']['server']['versions']['phpgwapi'].'</p>',
|
||
|
'applications' => $apps,
|
||
|
'templates' => $templates,
|
||
|
'translations' => $translations
|
||
|
);
|
||
|
|
||
|
$tmpl =& CreateObject('etemplate.etemplate', 'phpgwapi.about.index');
|
||
|
$tmpl->exec('phpgwapi.about.index', $content);
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* output of detail view for applications or templates
|
||
|
*
|
||
|
* @param string $name application/template name
|
||
|
* @param string $type can be 'application' or 'template' :default $type='application'
|
||
|
* @param string $nonavbar don't show navbar :default $nonavbar=false
|
||
|
* @return nothing
|
||
|
*
|
||
|
* @access private
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function _detailView($name, $type='application', $nonavbar=false)
|
||
|
{
|
||
|
// get the informations
|
||
|
switch ($type) {
|
||
|
case 'application':
|
||
|
$info = $this->_getParsedAppInfo($name);
|
||
|
break;
|
||
|
case 'template':
|
||
|
$info = $this->_getParsedTemplateInfo($name);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// app names are translated, template names not...
|
||
|
if ($type == 'application') {
|
||
|
$translatedName = lang($name);
|
||
|
} else {
|
||
|
$translatedName = $name;
|
||
|
}
|
||
|
|
||
|
// fill content array
|
||
|
$content = array(
|
||
|
'image' => '<img src="'.$info['image'].'" />',
|
||
|
'name' => '<h2>'.$translatedName.'</h2>',
|
||
|
'description' => '<p>'.$info['description'].'</p>',
|
||
|
'note' => $info['note'],
|
||
|
'author' => $info['author'],
|
||
|
'maintainer' => $info['maintainer'],
|
||
|
'version' => $info['version'],
|
||
|
'license' => $this->_linkLicense($info['license'])
|
||
|
);
|
||
|
|
||
|
$tmpl =& CreateObject('etemplate.etemplate', 'phpgwapi.about.detail');
|
||
|
if ($nonavbar) {
|
||
|
$tmpl->exec('phpgwapi.about.detail', $content, array(), array(), array(), 2);
|
||
|
} else {
|
||
|
$GLOBALS['egw_info']['flags']['app_header'] = lang('About %1', $translatedName);
|
||
|
$tmpl->exec('phpgwapi.about.detail', $content);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* parse template informations from setup.inc.php file
|
||
|
*
|
||
|
* @param string $template template template name
|
||
|
* @return array html formated informations about author(s),
|
||
|
* maintainer(s), version, license of the
|
||
|
* given application
|
||
|
*
|
||
|
* @access private
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function _getParsedTemplateInfo($template)
|
||
|
{
|
||
|
// define the return array
|
||
|
$ret = array(
|
||
|
'image' => (file_exists($GLOBALS['egw_info']['template'][$template]['icon'])) ? $GLOBALS['egw_info']['template'][$template]['icon'] : $GLOBALS['egw']->common->image('thisdoesnotexist',array('navbar','nonav')),
|
||
|
'author' => '',
|
||
|
'maintainer' => '',
|
||
|
'version' => '',
|
||
|
'license' => '',
|
||
|
'description' => '',
|
||
|
'note' => ''
|
||
|
);
|
||
|
|
||
|
if (!file_exists(EGW_INCLUDE_ROOT . "/phpgwapi/templates/$template/setup/setup.inc.php")) {
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
include(EGW_INCLUDE_ROOT . "/phpgwapi/templates/$template/setup/setup.inc.php");
|
||
|
|
||
|
$ret['author'] = $this->_getHtmlPersonalInfo($GLOBALS['egw_info']['template'][$template], 'author');
|
||
|
$ret['maintainer'] = $this->_getHtmlPersonalInfo($GLOBALS['egw_info']['template'][$template], 'maintainer');
|
||
|
$ret['version'] = $GLOBALS['egw_info']['template'][$template]['version'];
|
||
|
$ret['license'] = $GLOBALS['egw_info']['template'][$template]['license'];
|
||
|
$ret['description'] = $GLOBALS['egw_info']['template'][$template]['description'];
|
||
|
$ret['note'] = $GLOBALS['egw_info']['template'][$template]['note'];
|
||
|
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* parse application informations from setup.inc.php file
|
||
|
*
|
||
|
* @param string $app application name
|
||
|
* @return array html formated informations about author(s),
|
||
|
* maintainer(s), version, license of the
|
||
|
* given application
|
||
|
*
|
||
|
* @access private
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function _getParsedAppInfo($app)
|
||
|
{
|
||
|
// define the return array
|
||
|
$ret = array(
|
||
|
'image' => $GLOBALS['egw']->common->image($app,array('navbar','nonav')),
|
||
|
'author' => '',
|
||
|
'maintainer' => '',
|
||
|
'version' => '',
|
||
|
'license' => '',
|
||
|
'description' => '',
|
||
|
'note' => ''
|
||
|
);
|
||
|
|
||
|
if (!file_exists(EGW_INCLUDE_ROOT . "/$app/setup/setup.inc.php")) {
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
include(EGW_INCLUDE_ROOT . "/$app/setup/setup.inc.php");
|
||
|
|
||
|
$ret['author'] = $this->_getHtmlPersonalInfo($setup_info[$app], 'author');
|
||
|
$ret['maintainer'] = $this->_getHtmlPersonalInfo($setup_info[$app], 'maintainer');
|
||
|
$ret['version'] = $setup_info[$app]['version'];
|
||
|
$ret['license'] = $setup_info[$app]['license'];
|
||
|
$ret['description'] = $setup_info[$app]['description'];
|
||
|
$ret['note'] = $setup_info[$app]['note'];
|
||
|
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* helper to parse author and maintainer info from setup_info array
|
||
|
*
|
||
|
* @param array $setup_info setup_info[$app] array
|
||
|
* ($GLOBALS['egw_info']['template'][$template] array for template informations)
|
||
|
* @param string $f 'author' or 'maintainer', default='author'
|
||
|
* @return string html formated informations about author/maintainer
|
||
|
*
|
||
|
* @access private
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function _getHtmlPersonalInfo($setup_info, $f = 'author')
|
||
|
{
|
||
|
$authors = array();
|
||
|
// get the author(s)
|
||
|
if ($setup_info[$f]) {
|
||
|
// author is set
|
||
|
if (!is_array($setup_info[$f])) {
|
||
|
// author is no array
|
||
|
$authors[0]['name'] = $setup_info[$f];
|
||
|
if ($setup_info[$f.'_email']) {
|
||
|
$authors[0]['email'] = $setup_info[$f.'_email'];
|
||
|
}
|
||
|
if ($setup_info[$f.'_url']) {
|
||
|
$authors[0]['url'] = $setup_info[$f.'_url'];
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
// author is array
|
||
|
if ($setup_info[$f]['name']) {
|
||
|
// only one author
|
||
|
$authors[0]['name'] = $setup_info[$f]['name'];
|
||
|
if ($setup_info[$f]['email']) {
|
||
|
$authors[0]['email'] = $setup_info[$f]['email'];
|
||
|
}
|
||
|
if ($setup_info[$f]['url']) {
|
||
|
$authors[0]['url'] = $setup_info[$f]['url'];
|
||
|
}
|
||
|
} else {
|
||
|
// may be more authors
|
||
|
foreach ($setup_info[$f] as $number => $values) {
|
||
|
if ($setup_info[$f][$number]['name']) {
|
||
|
$authors[$number]['name'] = $setup_info[$f][$number]['name'];
|
||
|
}
|
||
|
if ($setup_info[$f][$number]['email']) {
|
||
|
$authors[$number]['email'] = $setup_info[$f][$number]['email'];
|
||
|
}
|
||
|
if ($setup_info[$f][$number]['url']) {
|
||
|
$authors[$number]['url'] = $setup_info[$f][$number]['url'];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// html format authors
|
||
|
$s = '';
|
||
|
foreach ($authors as $author) {
|
||
|
if ($s != '') {
|
||
|
$s .= '<br />';
|
||
|
}
|
||
|
$s .= lang('name').': '.$author['name'];
|
||
|
if ($author['email']) {
|
||
|
$s .= '<br />'.lang('email').': <a href="mailto:'.$author['email'].'">'.$author['email'].'</a>';
|
||
|
}
|
||
|
if ($author['url']) {
|
||
|
$s .= '<br />'.lang('url').': <a href="'.$author['url'].'" target="_blank">'.$author['url'].'</a>';
|
||
|
}
|
||
|
}
|
||
|
return $s;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* surround license string with link to license if it is known
|
||
|
*
|
||
|
* @param string $license the license to surround with link
|
||
|
* @return string linked licence if known, $licence if not known
|
||
|
*
|
||
|
* @access private
|
||
|
* @since 1.4
|
||
|
*/
|
||
|
function _linkLicense($license)
|
||
|
{
|
||
|
// toupper known licenses
|
||
|
$knownLicenses = array(
|
||
|
'GPL' => 'http://www.gnu.org/copyleft/gpl.html'
|
||
|
);
|
||
|
|
||
|
if (array_key_exists(strtoupper($license), $knownLicenses)) {
|
||
|
$license = '<a href="'.$knownLicenses[strtoupper($license)].'" target="_blank">'.$license.'</a>';
|
||
|
}
|
||
|
|
||
|
return $license;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|