Project

General

Profile

Feature #19472 » sysaction_menu_v2.diff

Administrator Admin, 2008-10-19 20:16

View differences:

typo3/sysext/sys_action/ext_tables.php (working copy)
'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',
......
'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');
typo3/sysext/sys_action/toolbarmenu/class.tx_sysaction_toolbarmenu.php (revision 0)
<?php
/***************************************************************
* Copyright notice
*
* (c) 2008 Steffen Kamper <info@sk-typo3.de>
* 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 <info@sk-typo3.de>
* @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 <ingo@typo3.org>
*/
public function render() {
$actionMenu = array();
$actionEntries = $this->getActionEntries();
if (!empty($actionEntries)) {
$this->addJavascriptToBackend();
$this->addCssToBackend();
$actionMenu[] = '<a href="#" class="toolbar-item"><img'
. t3lib_iconWorks::skinImg(
$this->backPath,
t3lib_extMgm::extRelPath($this->EXTKEY) . 'ext_icon.gif',
'width="16" height="16"'
) . ' title="System Actions" alt="" /></a>';
$actionMenu[] = '<ul class="toolbar-item-menu" style="display: none;">';
foreach($actionEntries as $linkConf) {
$actionMenu[] = '<li><a href="' . $linkConf[1]
. '" target="content">' . $linkConf[2]
. htmlspecialchars($linkConf[0]) . '</a></li>';
}
$actionMenu[] = '</ul>';
}
return implode("\n", $actionMenu);
}
/**
* gets the entries for the action menu
*
* @return array array of action menu entries
* @author Steffen Kamper <info@sk-typo3.de>
* @author Ingo Renner <ingo@typo3.org>
*/
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
typo3/sysext/sys_action/toolbarmenu/registerToolbarItem.php (revision 0)
<?php
if (!defined('TYPO3_MODE')) {
die ('Access denied.');
}
if (TYPO3_MODE == 'BE') {
// first include the class file
include_once(t3lib_extMgm::extPath('sys_action')
. 'toolbarmenu/class.tx_sysaction_toolbarmenu.php');
// now register the class as toolbar item
$GLOBALS['TYPO3backend']->addToolbarItem(
'sys_action',
'tx_sysactionToolbarMenu'
);
}
?>\ No newline at end of file
typo3/sysext/sys_action/toolbarmenu/tx_sysactions.css (revision 0)
#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
typo3/sysext/sys_action/toolbarmenu/tx_sysactions.js (revision 0)
/***************************************************************
* Copyright notice
*
* (c) 2008 Steffen Kamper <info@sk-typo3.de>
* 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();
(3-3/3)