Project

General

Profile

Feature #19472 » sysactionToolbar.diff

Administrator Admin, 2008-10-18 22:00

View differences:

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">&nbsp;<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();
(2-2/3)