Files
server/usr/share/psa-horde/lib/View/Topbar.php
2026-01-07 20:52:11 +01:00

134 lines
4.6 KiB
PHP

<?php
/**
* This is a view of the Horde topbar.
*
* Useful properties:
* - subinfo: (string) Right-aligned content of the sub-bar.
* - search: (boolean) Whether to show the search bar.
* - searchAction: (string) The form action attribute of the search form.
* - searchMenu: (boolean) whether to show a drop down icon inside the search
* field.
* - searchLabel: (string) Ghost label of the search field.
* - searchParameters: (array) Key-value-hash with additional hidden form
* fields.
*
* Copyright 2012-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL-2). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl.
*
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @license http://www.horde.org/licenses/lgpl LGPL-2
* @package Horde
*/
class Horde_View_Topbar extends Horde_View
{
/**
* Constructor.
*
* @param array $config Configuration key-value pairs.
*/
public function __construct($config = array())
{
global $injector, $prefs, $registry;
if (empty($config['templatePath'])) {
$config['templatePath'] = $registry->get('templates', 'horde') . '/topbar';
}
parent::__construct($config);
$this->addHelper('Text');
/* Logo. */
$this->portalUrl = $registry->getServiceLink(
'portal', $registry->getApp());
if (class_exists('Horde_Bundle')) {
$this->version = Horde_Bundle::SHORTNAME . ' ' . Horde_Bundle::VERSION;
} else {
$this->version = $registry->getVersion('horde');
}
/* Main menu. */
$topbar = $injector->getInstance('Horde_Core_Factory_Topbar')
->create('Horde_Tree_Renderer_Menu', array('nosession' => true));
$this->menu = $topbar->getTree();
/* Search form. */
$this->searchAction = '#';
$this->searchIcon = Horde_Themes::img('search-topbar.png');
$this->searchLabel = _("Search");
/* Login/Logout. */
if ($registry->getAuth()) {
if ($registry->showService('logout')) {
$this->logoutUrl =
$registry->getServiceLink(
'logout',
$registry->getApp()
)
->setRaw(false);
}
} else {
if ($registry->showService('login')) {
$this->loginUrl =
$registry->getServiceLink(
'login',
$registry->getApp()
)
->setRaw(false)
->add('url', Horde::signUrl(Horde::selfUrl(true, true, true)));
}
}
/* Sub bar. */
$this->date = strftime($prefs->getValue('date_format'));
$pageOutput = $injector->getInstance('Horde_PageOutput');
$pageOutput->addScriptPackage('Horde_Core_Script_Package_Datejs');
$pageOutput->addScriptFile('topbar.js', 'horde');
$pageOutput->addInlineJsVars(array('HordeTopbar.conf' => array(
/* Need explicit URI here, since topbar may be running in
* an application's scope. */
'URI_AJAX' => $registry->getServiceLink('ajax', 'horde')->url,
'app' => $registry->getApp(),
'format' => Horde_Core_Script_Package_Datejs::translateFormat($prefs->getValue('date_format')),
'hash' => $topbar->getHash(),
'refresh' => intval($prefs->getValue('menu_refresh_time'))
)));
/* Sidebar. */
$this->sidebarWidth = $prefs->getValue('sidebar_width');
}
/**
* Returns the HTML code for the topbar.
*
* @param string $name The template to process.
*
* @return string The topbar's HTML code.
*/
public function render($name = 'topbar', $locals = array())
{
if ($this->search) {
$GLOBALS['injector']->getInstance('Horde_PageOutput')
->addScriptFile('form_ghost.js', 'horde');
if (!isset($this->searchParameters)) {
$action = new Horde_Url($this->searchAction);
$this->searchAction = $action->url;
$this->searchParameters = $action->parameters;
}
}
$this->sidebar = $GLOBALS['page_output']->sidebar;
return parent::render($name, $locals);
}
/**
* Handler for string casting.
*
* @return string The sidebar's HTML code.
*/
public function __toString()
{
return $this->render();
}
}