Index: typo3/sysext/sys_action/ext_tables.php =================================================================== --- typo3/sysext/sys_action/ext_tables.php (revision 4329) +++ typo3/sysext/sys_action/ext_tables.php (working copy) @@ -14,7 +14,7 @@ 'label' => 'title', 'tstamp' => 'tstamp', 'default_sortby' => 'ORDER BY title', - "sortby" => "sorting", + "sortby" => "sorting", 'prependAtCopy' => 'LLL:EXT:lang/locallang_general.php:LGL.prependAtCopy', 'title' => 'LLL:EXT:sys_action/locallang_tca.php:sys_action', 'crdate' => 'crdate', @@ -30,6 +30,8 @@ 'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY).'tca.php' ) ); + + $GLOBALS['TYPO3_CONF_VARS']['typo3/backend.php']['additionalBackendItems'][] = t3lib_extMgm::extPath('sys_action') . 'toolbarmenu/registerToolbarItem.php'; } t3lib_extMgm::addLLrefForTCAdescr('sys_action','EXT:sys_action/locallang_csh_sysaction.xml'); Index: typo3/sysext/sys_action/toolbarmenu/class.tx_sysaction_toolbarmenu.php =================================================================== --- typo3/sysext/sys_action/toolbarmenu/class.tx_sysaction_toolbarmenu.php (revision 0) +++ typo3/sysext/sys_action/toolbarmenu/class.tx_sysaction_toolbarmenu.php (revision 0) @@ -0,0 +1,202 @@ + +* All rights reserved +* +* This script is part of the TYPO3 project. The TYPO3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* A copy is found in the textfile GPL.txt and important notices to the license +* from the author is found in LICENSE.txt distributed with these scripts. +* +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ + +require_once(PATH_typo3 . 'interfaces/interface.backend_toolbaritem.php'); + +/** + * Adds action links to the backend's toolbar + * + * @author Steffen Kamper + * @package TYPO3 + * @subpackage tx_sysaction + */ +class tx_sysactionToolbarMenu implements backend_toolbarItem { + + /** + * reference back to the backend object + * + * @var TYPO3backend + */ + private $backendReference; + protected $EXTKEY = 'sys_action'; + + /** + * constructor + * + * @return void + */ + public function __construct(TYPO3backend &$backendReference = null) { + $this->backendReference = $backendReference; + } + + /** + * sets the backend reference + * + * @param TYPO3backend backend object reference + */ + public function setBackend(&$backendReference) { + $this->backendReference = $backendReference; + } + + /** + * renders the toolbar menu + * + * @return string the rendered backend menu + * @author Ingo Renner + */ + public function render() { + $actionMenu = array(); + $actionEntries = $this->getActionEntries(); + + if (!empty($actionEntries)) { + $this->addJavascriptToBackend(); + $this->addCssToBackend(); + + $actionMenu[] = 'backPath, + t3lib_extMgm::extRelPath($this->EXTKEY) . 'ext_icon.gif', + 'width="16" height="16"' + ) . ' title="System Actions" alt="" />'; + + $actionMenu[] = ''; + } + + return implode("\n", $actionMenu); + } + + /** + * gets the entries for the action menu + * + * @return array array of action menu entries + * @author Steffen Kamper + * @author Ingo Renner + */ + protected function getActionEntries() { + $actions = array(); + + if ($GLOBALS['BE_USER']->isAdmin()) { + $queryResource = $GLOBALS['TYPO3_DB']->exec_SELECTquery( + '*', + 'sys_action', + 'sys_action.pid = 0', + '', + 'sys_action.sorting' + ); + } else { + $groupList = 0; + if ($GLOBALS['BE_USER']->groupList) { + $groupList = $GLOBALS['BE_USER']->groupList; + } + + $queryResource = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query( + 'sys_action.*', + 'sys_action', + 'sys_action_asgr_mm', + 'be_groups', + ' AND be_groups.uid IN (' . $groupList + . ') AND sys_action.pid = 0 AND sys_action.hidden = 0', + 'sys_action.uid', + 'sys_action.sorting' + ); + } + + if ($queryResource) { + while ($actionRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($queryResource)) { + $actions[] = array( + $actionRow['title'], + 'sysext/taskcenter/task/index.php?SET[function]=tx_sysaction&sys_action_uid=' . $actionRow['uid'], + t3lib_iconworks::getIconImage( + 'sys_action', + $actionRow, + $GLOBALS['BACK_PATH'], + 'hspace="2" class="absmiddle"' + ), + ); + } + } + + return $actions; + } + + /** + * returns additional attributes for the list item in the toolbar + * + * @return string list item HTML attibutes + */ + public function getAdditionalAttributes() { + return ' id="sys-action-menu"'; + } + + /** + * adds the neccessary javascript ot the backend + * + * @return void + */ + protected function addJavascriptToBackend() { + $this->backendReference->addJavascriptFile( + t3lib_extMgm::extRelPath($this->EXTKEY) . 'toolbarmenu/tx_sysactions.js' + ); + } + + /** + * adds the neccessary css ot the backend + * + * @return void + */ + protected function addCssToBackend() { + $this->backendReference->addCssFile( + 'sysaction', + t3lib_extMgm::extRelPath($this->EXTKEY) + . 'toolbarmenu/tx_sysactions.css' + ); + } + + /** + * Checks if user has access to the sys action menu + * + * @return boolean true if has access + */ + public function checkAccess() { + // taskcenter is enabled for everybody + return true; + } +} + + +if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/sys_action/toolbarmenu/class.tx_sysaction_toolbarmenu.php']) { + include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/sys_action/toolbarmenu/class.tx_sysaction_toolbarmenu.php']); +} + +?>\ No newline at end of file Index: typo3/sysext/sys_action/toolbarmenu/registerToolbarItem.php =================================================================== --- typo3/sysext/sys_action/toolbarmenu/registerToolbarItem.php (revision 0) +++ typo3/sysext/sys_action/toolbarmenu/registerToolbarItem.php (revision 0) @@ -0,0 +1,18 @@ +addToolbarItem( + 'sys_action', + 'tx_sysactionToolbarMenu' + ); +} + +?>\ No newline at end of file Index: typo3/sysext/sys_action/toolbarmenu/tx_sysactions.css =================================================================== --- typo3/sysext/sys_action/toolbarmenu/tx_sysactions.css (revision 0) +++ typo3/sysext/sys_action/toolbarmenu/tx_sysactions.css (revision 0) @@ -0,0 +1,37 @@ +#sys-action-menu { + width: 30px; +} + +#sys-action-menu ul { + position: absolute; + list-style: none; + padding: 2px 0px 0px; + margin: 0px; + background-color: #f9f9f9; + border: 1px solid #abb2bc; + border-top: none; + width: 120px; +} + +#sys-action-menu li { + padding-top: 2px; + text-align: left; + float: none; + vertical-align: middle; + height: 19px; +} + +#sys-action-menu li img { + float: left; + padding-right: 3px; +} + +#sys-action-menu li a { + text-decoration: none; + line-height: 12px; + vertical-align: middle; + display: block; + padding-bottom: 2px; + padding-left: 3px; + font-size: 11px; +}\ No newline at end of file Index: typo3/sysext/sys_action/toolbarmenu/tx_sysactions.js =================================================================== --- typo3/sysext/sys_action/toolbarmenu/tx_sysactions.js (revision 0) +++ typo3/sysext/sys_action/toolbarmenu/tx_sysactions.js (revision 0) @@ -0,0 +1,100 @@ +/*************************************************************** +* Copyright notice +* +* (c) 2008 Steffen Kamper +* All rights reserved +* +* This script is part of the TYPO3 project. The TYPO3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* A copy is found in the textfile GPL.txt and important notices to the license +* from the author is found in LICENSE.txt distributed with these scripts. +* +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ + +/** + * class to handle the dev links menu + * + * $Id$ + */ +var sysactionMenu = Class.create({ + + /** + * registers for resize event listener and executes on DOM ready + */ + initialize: function() { + Event.observe(window, 'resize', this.positionMenu); + + Event.observe(window, 'load', function(){ + this.positionMenu(); + this.toolbarItemIcon = $$('#sys-action-menu .toolbar-item img')[0].src; + + Event.observe('sys-action-menu', 'click', this.toggleMenu); + + }.bindAsEventListener(this)); + }, + + /** + * positions the menu below the toolbar icon, let's do some math! + */ + positionMenu: function() { + var calculatedOffset = 0; + var parentWidth = $('sys-action-menu').getWidth(); + var ownWidth = $$('#sys-action-menu ul')[0].getWidth(); + var parentSiblings = $('sys-action-menu').previousSiblings(); + + parentSiblings.each(function(toolbarItem) { + calculatedOffset += toolbarItem.getWidth() - 1; + // -1 to compensate for the margin-right -1px of the list items, + // which itself is necessary for overlaying the separator with the active state background + + if(toolbarItem.down().hasClassName('no-separator')) { + calculatedOffset -= 1; + } + }); + calculatedOffset = calculatedOffset - ownWidth + parentWidth; + + + $$('#sys-action-menu ul')[0].setStyle({ + left: calculatedOffset + 'px' + }); + }, + + /** + * toggles the visibility of the menu and places it under the toolbar icon + */ + toggleMenu: function(event) { + var toolbarItem = $$('#sys-action-menu > a')[0]; + var menu = $$('#sys-action-menu .toolbar-item-menu')[0]; + toolbarItem.blur(); + + if(!toolbarItem.hasClassName('toolbar-item-active')) { + toolbarItem.addClassName('toolbar-item-active'); + Effect.Appear(menu, {duration: 0.2}); + TYPO3BackendToolbarManager.hideOthers(toolbarItem); + } else { + toolbarItem.removeClassName('toolbar-item-active'); + Effect.Fade(menu, {duration: 0.1}); + } + + if(event && (Event.element(event).hasClassName('toolbar-item') || Event.element(event).up().hasClassName('toolbar-item'))) { + Event.stop(event); + } + } + +}); + +var TYPO3BackendSysactionMenu = new sysactionMenu(); +