Feature #19472 » sysactionToolbar.diff
typo3/sysext/sys_action/class.tx_sysaction_toolbaritem.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!
|
||
***************************************************************/
|
||
/**
|
||
* Adding developer links to toolbar of backend.php
|
||
*
|
||
* @author Steffen Kamper <info@sk-typo3.de>
|
||
* @package TYPO3
|
||
* @subpackage tx_extdeveval
|
||
*/
|
||
|
||
require_once(PATH_typo3 . 'interfaces/interface.backend_toolbaritem.php');
|
||
|
||
class tx_sysactionToolbarItem implements backend_toolbarItem {
|
||
|
||
/**
|
||
* reference back to the backend object
|
||
*
|
||
* @var TYPO3backend
|
||
*/
|
||
private $backendReference;
|
||
|
||
private $docLinks;
|
||
private $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;
|
||
}
|
||
|
||
public function render() {
|
||
$this->addJavascriptToBackend();
|
||
$this->addCssToBackend();
|
||
|
||
$toolbarItems = $this->getActionItems();
|
||
if (!$toolbarItems) {
|
||
return '';
|
||
}
|
||
|
||
$sysactionMenu = array();
|
||
|
||
$sysactionMenu[] = '<a href="#" class="toolbar-item"> <img'.t3lib_iconWorks::skinImg($this->backPath,t3lib_extMgm::extRelPath($this->EXTKEY).'ext_icon.gif','width="16" height="16"').' title="Sys actions" alt="" /></a>';
|
||
$sysactionMenu[] = '<ul class="toolbar-item-menu" style="display: none;">';
|
||
|
||
foreach($toolbarItems as $linkConf) {
|
||
$sysactionMenu[] = '<li><a href="' . $linkConf[1] . '" target="content">' . $linkConf[2] . htmlspecialchars($linkConf[0]) . '</a></li>';
|
||
}
|
||
$sysactionMenu[] = '</ul>';
|
||
|
||
return implode("\n", $sysactionMenu);
|
||
|
||
}
|
||
|
||
/**
|
||
* 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
|
||
*/
|
||
private function addJavascriptToBackend() {
|
||
$this->backendReference->addJavascriptFile(t3lib_extMgm::extRelPath($this->EXTKEY).'sysaction.js');
|
||
}
|
||
|
||
/**
|
||
* adds the neccessary css ot the backend
|
||
*
|
||
* @return void
|
||
*/
|
||
private function addCssToBackend() {
|
||
$this->backendReference->addCssFile('sysaction',t3lib_extMgm::extRelPath($this->EXTKEY).'sysaction.css');
|
||
}
|
||
|
||
/**
|
||
* fill the link array for toolbar items
|
||
*
|
||
* @return array $items
|
||
*/
|
||
private function getActionItems() {
|
||
if ($GLOBALS['BE_USER']->isAdmin()) {
|
||
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_action', 'sys_action.pid=0', '', 'sys_action.sorting');
|
||
} else {
|
||
$wQ = 'be_groups.uid IN (' . ($GLOBALS['BE_USER']->groupList ? $GLOBALS['BE_USER']->groupList : 0) . ')';
|
||
$hQ = 'AND sys_action.hidden=0 ';
|
||
|
||
$res = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
|
||
'sys_action.*',
|
||
'sys_action',
|
||
'sys_action_asgr_mm',
|
||
'be_groups',
|
||
' AND ' . $wQ . ' AND sys_action.pid=0 ' . $hQ,
|
||
'sys_action.uid',
|
||
'sys_action.sorting'
|
||
);
|
||
}
|
||
|
||
if (!$res) {
|
||
return NULL;
|
||
} else {
|
||
while ($actionRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
|
||
$items[] = 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 $items;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Checks if user has access to this item
|
||
*
|
||
* @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/class.tx_sysaction_toolbaritem.php']) {
|
||
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['Ext:sys_action/class.tx_sysaction_toolbaritem.php']);
|
||
}
|
||
|
||
|
||
?>
|
typo3/sysext/sys_action/ext_tables.php (working copy) | ||
---|---|---|
'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY).'tca.php'
|
||
)
|
||
);
|
||
|
||
$GLOBALS['TYPO3_CONF_VARS']['typo3/backend.php']['additionalBackendItems'][] = t3lib_extMgm::extPath('sys_action').'registerToolbarItem.php';
|
||
|
||
}
|
||
t3lib_extMgm::addLLrefForTCAdescr('sys_action','EXT:sys_action/locallang_csh_sysaction.xml');
|
typo3/sysext/sys_action/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').'class.tx_sysaction_toolbaritem.php');
|
||
// now register the class as toolbar item
|
||
$GLOBALS['TYPO3backend']->addToolbarItem('sys_action', 'tx_sysactionToolbarItem');
|
||
}
|
||
?>
|
typo3/sysext/sys_action/sysaction.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;
|
||
}
|
typo3/sysext/sys_action/sysaction.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(document, 'dom:loaded', 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() {
|
||
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});
|
||
}
|
||
}
|
||
|
||
|
||
|
||
});
|
||
|
||
var TYPO3BackendSysactionMenu = new sysactionMenu();
|