* @author Ralf Becker * @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: * * $aboutPage = new about(); * * 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'])) && isset($GLOBALS['egw_info']['apps'][$name])) { $type = 'application'; $detail = true; } // template detail? if (isset($_GET['template']) && $_GET['template'] != 'eGroupWare' && ($name = basename($_GET['template'])) && (is_dir(EGW_SERVER_ROOT.'/phpgwapi/templates/'.$name) || is_dir(EGW_SERVER_ROOT.'/'.$name))) { $type = 'template'; $detail = true; } // navbar or not if (isset($_GET['nonavbar'])) { $nonavbar = (boolean)$_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() { $text_content = str_replace('GPLLINK',self::$knownLicenses['GPL'],'

EGroupware is a free enterprise ready groupware software for your network. It enables you to manage contacts, appointments, todos and many more for your whole business.

EGroupware is a groupware server. It comes with a native web-interface which allowes to access your data from any platform all over the planet. Moreover you also have the choice to access the EGroupware server with your favorite groupware client (Kontact, Evolution, Outlook, iCal, Lightning) and also with your mobile or PDA via SyncML.

EGroupware is international. At the time, it supports more than 25 languages including rtl support.

EGroupware is platform independent. The server runs on Linux, Mac, Windows and many more other operating systems. On the client side, all you need is a internet browser such as Firefox, Safari, Chrome, Konqueror or Internet Explorer and many more.

EGroupware is developed by Stylite AG with contributions from community developers.


For more information visit the EGroupware Website

'); // get informations about the applications $apps = array(); $apps[] = ''; // first empty row for eTemplate foreach (isset($GLOBALS['egw_info']['user']['apps']['admin']) ? $GLOBALS['egw_info']['apps'] : $GLOBALS['egw_info']['user']['apps'] as $app => $appinfo) { $info = $this->_getParsedAppInfo($app); $apps[] = array( 'appImage' => '', 'appName' => $appinfo['title'], 'appAuthor' => $info['author'], 'appMaintainer' => $info['maintainer'], 'appVersion' => $info['version'], 'appLicense' => $this->_linkLicense($info['license']), 'appDetails' => '' ); } // 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' => '', 'templateName' => $templateinfo['name'], 'templateAuthor' => $info['author'], 'templateMaintainer'=> $info['maintainer'], 'templateVersion' => $info['version'], 'templateLicense' => $this->_linkLicense($info['license']), 'templateDetails' => '' ); } // 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.')' ); } $changelog = EGW_SERVER_ROOT.'/doc/rpm-build/debian.changes'; // fill content array for eTemplate $content = array( 'apiVersion' => '

'.lang('eGroupWare API version').' '.$GLOBALS['egw_info']['server']['versions']['phpgwapi'].'

', 'applications' => $apps, 'templates' => $templates, 'translations' => $translations, 'text_content' => $text_content, 'changelog' => file_exists($changelog) ? file_get_contents($changelog) : 'not available', ); $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 boolean $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' => '', 'name' => '

'.$translatedName.'

', 'description' => '

'.$info['description'].'

', '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) { // we read all setup files once, as no every app has it's own file static $setup_info; if (is_null($setup_info)) { foreach($GLOBALS['egw_info']['apps'] as $_app => $_data) { if (file_exists($file = EGW_INCLUDE_ROOT.'/'.$_app.'/setup/setup.inc.php')) { include($file); } } } $app_info = $GLOBALS['egw_info']['apps'][$app]; // define the return array $ret = array( 'image' => $GLOBALS['egw']->common->image(isset($app_info['icon_app'])?$app_info['icon_app']:$app, isset($app_info['icon'])?$app_info['icon']:array('navbar','nonav')), 'author' => '', 'maintainer' => '', 'version' => $app_info['version'], 'license' => '', 'description' => '', 'note' => '' ); if (isset($setup_info[$app])) { $ret['author'] = $this->_getHtmlPersonalInfo($setup_info[$app], 'author'); $ret['maintainer'] = $this->_getHtmlPersonalInfo($setup_info[$app], 'maintainer'); if ($app_info['version'] != $setup_info[$app]['version']) $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 .= '
'; } $s .= lang('name').': '.$author['name']; if ($author['email']) { $s .= '
'.lang('email').': '.$author['email'].''; } if ($author['url']) { $s .= '
'.lang('url').': '.$author['url'].''; } } return $s; } static public $knownLicenses = array( 'GPL' => 'http://opensource.org/licenses/gpl-2.0.php', 'LGPL' => 'http://opensource.org/licenses/lgpl-2.1.php', 'GPL3' => 'http://opensource.org/licenses/gpl-3.0.php', 'LGPL3' => 'http://opensource.org/licenses/lgpl-3.0.php', 'PHP' => 'http://opensource.org/licenses/php.php', ); /** * 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) { $name = is_array($license) ? $license['name'] : $license; $url = is_array($license) && isset($license['url']) ? $license['url'] : ''; if (!$url && isset(self::$knownLicenses[strtoupper($name)])) { $url = $knownLicenses[$name=strtoupper($name)]; } return !$url ? $name : ''.htmlspecialchars($name).''; } }