Index: typo3/sysext/taskcenter/classes/class.tx_taskcenter_status.php
===================================================================
--- typo3/sysext/taskcenter/classes/class.tx_taskcenter_status.php	(Revision 0)
+++ typo3/sysext/taskcenter/classes/class.tx_taskcenter_status.php	(Revision 0)
@@ -0,0 +1,76 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Georg Ringer <typo3@ringerge.org>
+*  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.
+*
+*  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!
+***************************************************************/
+
+
+/**
+ * Status of tasks
+ *
+ * @author		Georg Ringer <typo3@ringerge.org
+ * @package		TYPO3
+ * @subpackage	taskcenter
+ *
+ */
+class tx_taskcenter_status {
+
+	/**
+	 * Saves the section toggle state of tasks in the backend user's uc
+	 *
+	 * @param	array		array of parameters from the AJAX interface, currently unused
+	 * @param	TYPO3AJAX	object of type TYPO3AJAX
+	 * @return	void
+	 */
+	public function saveCollapseState(array $params, TYPO3AJAX $ajaxObj) {
+			// remove 'el_' in the beginning which is needed for the saveSortingState
+		$item	= substr(htmlspecialchars(t3lib_div::_POST('item')), 3);
+		$state	= (bool)t3lib_div::_POST('state');
+
+		$GLOBALS['BE_USER']->uc['taskcenter']['states'][$item] = $state;
+		$GLOBALS['BE_USER']->writeUC();
+	}
+
+
+	/**
+	 * Saves the sorting order of tasks in the backend user's uc
+	 *
+	 * @param	array		array of parameters from the AJAX interface, currently unused
+	 * @param	TYPO3AJAX	object of type TYPO3AJAX
+	 * @return	void
+	 */
+	public function saveSortingState(array $params, TYPO3AJAX $ajaxObj) {
+		$sort = array();
+		$items = explode('&', t3lib_div::_POST('data'));
+		foreach($items as $item) {
+		 $sort[] = substr($item, 12);
+		}
+
+		$GLOBALS['BE_USER']->uc['taskcenter']['sorting'] = serialize($sort);
+		$GLOBALS['BE_USER']->writeUC();
+	}
+}
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/taskcenter/classes/class.tx_taskcenter_status.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/taskcenter/classes/class.tx_taskcenter_status.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/taskcenter/ext_autoload.php
===================================================================
--- typo3/sysext/taskcenter/ext_autoload.php	(Revision 0)
+++ typo3/sysext/taskcenter/ext_autoload.php	(Revision 0)
@@ -0,0 +1,11 @@
+<?php
+/*
+ * Register necessary class names with autoloader
+ *
+ */
+$extensionPath = t3lib_extMgm::extPath('taskcenter');
+return array (
+	'tx_taskcenter_task' => $extensionPath . 'interfaces/interface.tx_taskcenter_task.php',
+	'tx_taskcenter_about' => $extensionPath . 'task/class.tx_taskcenter_about.php',
+);
+?>
Index: typo3/sysext/taskcenter/ext_emconf.php
===================================================================
--- typo3/sysext/taskcenter/ext_emconf.php	(Revision 7230)
+++ typo3/sysext/taskcenter/ext_emconf.php	(Arbeitskopie)
@@ -19,7 +19,7 @@
 	'conflicts' => '',
 	'priority' => '',
 	'loadOrder' => '',
-	'module' => 'task',
+	'module' => 'mod',
 	'doNotLoadInFE' => 1,
 	'state' => 'stable',
 	'internal' => 0,
Index: typo3/sysext/taskcenter/ext_tables.php
===================================================================
--- typo3/sysext/taskcenter/ext_tables.php	(Revision 7230)
+++ typo3/sysext/taskcenter/ext_tables.php	(Arbeitskopie)
@@ -1,5 +1,20 @@
 <?php
-if (!defined ('TYPO3_MODE')) 	die ('Access denied.');
+if (!defined ('TYPO3_MODE')) {
+	die ('Access denied.');
+}
 
-if (TYPO3_MODE=='BE')	t3lib_extMgm::addModule('user','task','top',t3lib_extMgm::extPath($_EXTKEY).'task/');
+if (TYPO3_MODE == 'BE') {
+	t3lib_extMgm::addModulePath('tools_txtaskcenterM1', t3lib_extMgm::extPath($_EXTKEY) . 'task/');
+	t3lib_extMgm::addModule('user','task', 'top', t3lib_extMgm::extPath($_EXTKEY) . 'task/');
+
+//	$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['taskcenter']['taskcenter']['about'] = array(
+//		'title'			=> 'LLL:EXT:taskcenter/locallang.xml:task_help_title',
+//		'description'	=> 'LLL:EXT:taskcenter/locallang.xml:task_help_description',
+//		'icon'			=> 'EXT:taskcenter/task/icon.gif',
+//		'task'			=> 'tx_taskcenter_about'
+//	);
+
+	$GLOBALS['TYPO3_CONF_VARS']['BE']['AJAX']['Taskcenter::saveCollapseState']	= 'EXT:taskcenter/classes/class.tx_taskcenter_status.php:tx_taskcenter_status->saveCollapseState';
+	$GLOBALS['TYPO3_CONF_VARS']['BE']['AJAX']['Taskcenter::saveSortingState']	= 'EXT:taskcenter/classes/class.tx_taskcenter_status.php:tx_taskcenter_status->saveSortingState';
+}
 ?>
\ No newline at end of file
Index: typo3/sysext/taskcenter/interfaces/interface.tx_taskcenter_task.php
===================================================================
--- typo3/sysext/taskcenter/interfaces/interface.tx_taskcenter_task.php	(Revision 0)
+++ typo3/sysext/taskcenter/interfaces/interface.tx_taskcenter_task.php	(Revision 0)
@@ -0,0 +1,54 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Georg Ringer <typo3@ringerge.orgY
+*  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!
+***************************************************************/
+
+
+/**
+ * Interface for classes which provide a report.
+ *
+ * @author		Georg Ringer <typo3@ringerge.org
+ * @package		TYPO3
+ * @subpackage	tx_taskcenter
+ *
+ */
+interface tx_taskcenter_Task {
+
+	/**
+	 * returns the content for a task
+	 *
+	 * @return	string	A task rendered HTML
+	 */
+	public function getTask();
+
+	/**
+	 * returns the overview of a task
+	 *
+	 * @return	string	A task rendered HTML
+	 */
+	public function getOverview();
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/taskcenter/locallang.xml
===================================================================
--- typo3/sysext/taskcenter/locallang.xml	(Revision 0)
+++ typo3/sysext/taskcenter/locallang.xml	(Revision 0)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<T3locallang>
+	<meta type="array">
+		<description>Module labels</description>
+		<type>module</type>
+	</meta>
+	<data type="array">
+		<languageKey index="default" type="array">
+			<label index="taskcenter">Taskcenter</label>
+			<label index="choose_task">Task:</label>
+			<label index="mlang_tabs_tab">Tasks</label>
+			<label index="task_overview">Overview</label>
+
+
+
+
+
+
+			<label index="lReplyAddress">Reply address is your email</label>
+			<label index="lSelf">Self</label>
+			<label index="lSendNew">Send message</label>
+			<label index="lSendReply">Reply to message</label>
+			<label index="listSeparator_Groups">__Groups:__</label>
+			<label index="lHomedir">Home dir</label>
+			<label index="lNone">[none]</label>
+			<label index="lCreate">Create</label>
+			<label index="lCancel">Cancel</label>
+			<label index="lDelete_warning">Are you sure you want to delete this user?</label>
+			<label index="lDelete">Delete</label>
+			<label index="lUpdate">Update</label>
+			
+			
+			
+			
+			<label index="task_help_title">About the taskcenter</label>
+			<label index="task_help_description">Get more information about the taskcenter</label>
+			
+			
+			
+		</languageKey>
+	</data>
+</T3locallang>
\ No newline at end of file
Index: typo3/sysext/taskcenter/res/item-background.jpg
===================================================================
Kann nicht anzeigen: Dateityp ist als binär angegeben.
svn:mime-type = application/octet-stream

Eigenschaftsänderungen: typo3\sysext\taskcenter\res\item-background.jpg
___________________________________________________________________
Hinzugefügt: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/taskcenter/res/list-item-act.gif
===================================================================
Kann nicht anzeigen: Dateityp ist als binär angegeben.
svn:mime-type = application/octet-stream

Eigenschaftsänderungen: typo3\sysext\taskcenter\res\list-item-act.gif
___________________________________________________________________
Hinzugefügt: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/taskcenter/res/list-item.gif
===================================================================
Kann nicht anzeigen: Dateityp ist als binär angegeben.
svn:mime-type = application/octet-stream

Eigenschaftsänderungen: typo3\sysext\taskcenter\res\list-item.gif
___________________________________________________________________
Hinzugefügt: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/taskcenter/res/mod_styles.css
===================================================================
--- typo3/sysext/taskcenter/res/mod_styles.css	(Revision 0)
+++ typo3/sysext/taskcenter/res/mod_styles.css	(Revision 0)
@@ -0,0 +1,237 @@
+/* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- */
+
+/* general */
+body#ext-taskcenter-task-index-php {
+	margin:0;
+}
+
+body#ext-taskcenter-task-index-php div#typo3-docbody {
+	top:60px;
+}
+
+body#ext-taskcenter-task-index-php div#typo3-inner-docbody {
+	padding:0 10px;
+	height:100%;
+}
+
+#typo3-inner-docbody p.help {
+	font-size: 12px;
+	margin-bottom: 10px;
+}
+
+body#ext-taskcenter-task-index-php img.icon {
+	vertical-align: bottom;
+}
+
+body#ext-taskcenter-task-index-php h3 {
+	margin:4px 0 8px;
+	padding:0;
+}
+
+/* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- */
+/* overview */
+
+#taskcenter-main {
+	width:100%;
+}
+
+#taskcenter-main #taskcenter-menu {
+	width:250px;
+}
+
+#taskcenter-main #taskcenter-item {
+	position:absolute;
+	margin-left:270px;
+	margin-right:20px;
+	top:0;
+	min-width:300px;
+
+}
+
+/* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- */
+/* menu */
+#taskcenter-menu ul {
+	list-style:none;
+	padding:0;
+	margin:0;
+	border-bottom:1px solid #b0b7c2;
+}
+
+#taskcenter-menu li {
+	margin-top:1px;
+	border-top:1px solid #EFEFF4;
+}
+
+#taskcenter-menu .image {
+	float:left;
+	height:23px;
+	width:23px;
+}
+#taskcenter-menu .image img {
+	margin:3px 0 0 1px;
+}
+
+#taskcenter-menu .down {
+	background:url(../../t3skin/icons/gfx/pil2right.gif) no-repeat 5px 7px;
+	height:23px;
+	float:left;
+	width:25px;
+	cursor:pointer;
+}
+
+#taskcenter-menu .collapsed .down {
+	background-image:url(../../t3skin/icons/gfx/pil2down.gif);
+}
+
+#taskcenter-menu .drag {
+	float:right;
+	height:23px;
+	width:24px;
+}
+
+#taskcenter-menu .drag img {
+	margin-top:6px;
+	cursor:move;
+}
+
+
+#taskcenter-menu .link {
+	background:url(item-background.jpg) repeat-x;
+	border:1px solid #b0b7c2;
+	border-width:1px 1px 0;
+	line-height:18px;
+	/*height:23px;*/
+	display:block;
+}
+
+#taskcenter-menu .link a {
+	padding:2px 5px;
+	display:block;
+	color:#fff;
+}
+
+#taskcenter-menu .active-task .link a {
+	font-weight:bold;
+}
+
+#taskcenter-menu .content {
+	padding:5px 0;
+	background:#fff;
+	border:1px solid #b7bec9;
+}
+
+#taskcenter-menu .content p {
+	padding:3px 5px 5px 5px;
+	margin:0;
+}
+
+#taskcenter-menu .content ul, #taskcenter-menu .content ul li {
+	border:0;
+}
+
+
+#taskcenter-menu .content ul li a {
+	display:block;
+	line-height:16px;
+	margin:0;
+	padding:2px 24px;
+	background:url(list-item.gif) no-repeat 10px 6px;
+}
+
+#taskcenter-menu .content ul li.active {
+	background-color:#e1e6ec;
+}
+
+#taskcenter-menu .content ul li.active a {
+	color:#272527;
+	font-weight:bold;
+	background-image:url(list-item-act.gif);
+}
+
+
+
+/* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- */
+/* content section */
+#taskcenter-item ul {
+	padding:5px 0 5px 5px;
+	margin:0;
+	list-style:none;
+}
+
+#taskcenter-item ul li {
+	padding:5px 0 0 12px;
+}
+
+#taskcenter-item ul.withicons li {
+	background:url(list-item.gif) no-repeat 0 7px;
+}
+
+#taskcenter-item ul .image {
+	float:left;
+	width: 20px;
+}
+
+#taskcenter-item ul .link {
+	font-weight: bold;
+	padding: 2px 5px;
+}
+
+#taskcenter-item ul .link a {
+	padding:5px;
+}
+
+#taskcenter-item ul .link a:hover {
+	text-decoration:underline;
+}
+
+#taskcenter-item ul .content {
+	padding:2px 0 0 25px;
+}
+
+#taskcenter-item ul .content .edit {
+	display:block;
+	margin-top:2px;
+}
+
+
+/* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- */
+/* forms */
+#taskcenter-item fieldset.fields legend {
+	font-weight:bold;
+	border-bottom:1px solid #ccc;
+	width:100%;
+	padding:0 0 2px 20px;
+}
+
+#taskcenter-item fieldset.fields {
+	border:0;
+}
+
+#taskcenter-item fieldset.fields .row {
+	width:350px;
+	clear:both;
+	padding:5px 0;
+}
+
+#taskcenter-item fieldset.fields label {
+	width:120px;
+	display:block;
+	float:left;
+}
+
+#taskcenter-item fieldset.fields input, #taskcenter-item fieldset.fields select {
+	/*margin-left:140px;*/
+	width:160px;
+	float:left;
+	border:1px solid #ccc;
+	padding:2px 3px;
+}
+
+#taskcenter-item fieldset.fields select {
+	width:170px;
+}
+
+#taskcenter-item fieldset.fields input[type=checkbox] {
+	width:16px;
+	text-align:left;
+}
Index: typo3/sysext/taskcenter/res/mod_styles2.css
===================================================================
--- typo3/sysext/taskcenter/res/mod_styles2.css	(Revision 0)
+++ typo3/sysext/taskcenter/res/mod_styles2.css	(Revision 0)
@@ -0,0 +1,87 @@
+
+body#ext-taskcenter-task-index-php {
+	margin: 0px;
+}
+
+#typo3-inner-docbody p.help {
+	font-size: 12px;
+	margin-bottom: 10px;
+}
+
+img.icon {
+	vertical-align: bottom;
+}
+
+
+/* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- */
+/* overview */
+
+.task-list dt {
+	font-weight: bold;
+	font-size: 11px;
+	padding: 15px;
+margin:10px;
+border:1px solid #333;
+background:#eee;
+float:left;
+width:120px;
+height:60px;
+text-align:center
+}
+
+.task-list dt:hover {
+background:#ccc;
+border-color:red;
+}
+
+.task-list dt img {
+	margin: 0 auto 10px auto;
+height:30px;
+width:30px;
+display:block;
+}
+
+.task-list dd {
+	margin: 2px 0 15px 20px;
+	padding-left: 22px;
+display:none;
+}
+
+/* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- */
+/* status report */
+
+/*
+#ext-reports-mod-index-php h2.section-header {
+	margin: 15px 0;
+	padding: 2px 0 0 20px;
+	cursor: pointer;
+	height: 20px;
+	clear: left;
+}
+#ext-reports-mod-index-php h2.collapsed {
+	background-image:url(../../../gfx/arrowright.png);
+	background-repeat:no-repeat;
+}
+#ext-reports-mod-index-php h2.expanded {
+	background-image:url(../../../gfx/arrowdown.png);
+	background-repeat:no-repeat;
+}
+#ext-reports-mod-index-php h2.section-header img {
+	margin-right:2px;
+	vertical-align:bottom;
+}
+
+#ext-reports-mod-index-php .message-body {
+	clear: left;
+}
+
+#ext-reports-mod-index-php .message-left {
+	float: left;
+	width: 400px;
+}
+
+#ext-reports-mod-index-php .message-right {
+	float: left;
+}
+
+*/
\ No newline at end of file
Index: typo3/sysext/taskcenter/res/mod_template.html
===================================================================
--- typo3/sysext/taskcenter/res/mod_template.html	(Revision 0)
+++ typo3/sysext/taskcenter/res/mod_template.html	(Revision 0)
@@ -0,0 +1,35 @@
+<!-- ###FULLDOC### begin -->
+<div class="typo3-fullDoc">
+	<!-- Page header with buttons, path details and csh -->
+	<div id="typo3-docheader">
+		<div id="typo3-docheader-row1">
+			<div class="buttonsleft">###BUTTONLIST_LEFT###</div>
+			<div class="buttonsright">###BUTTONLIST_RIGHT###</div>
+		</div>
+		<div id="typo3-docheader-row2" style="xdisplay:none;">
+			<div class="docheader-row2-left"><div class="docheader-funcmenu">###FUNC_MENU###</div></div>
+			<div class="docheader-row2-right"> </div>
+		</div>
+	</div>
+	<!-- Content of module, for instance listing, info or editing -->
+	<div id="typo3-docbody">
+		<div id="typo3-inner-docbody">
+			###CONTENT###
+		</div>
+	</div>
+</div>
+<!-- ###FULLDOC### end -->
+
+<!-- Grouping the icons on top -->
+
+<!-- ###BUTTON_GROUP_WRAP### -->
+	<div class="buttongroup">###BUTTONS###</div>
+<!-- ###BUTTON_GROUP_WRAP### -->
+
+<!-- ###BUTTON_GROUPS_LEFT### -->
+
+<!-- ###BUTTON_GROUPS_LEFT### -->
+
+<!-- ###BUTTON_GROUPS_RIGHT### -->
+<!-- ###BUTTON_GROUP1### -->###OPEN_NEW_WINDOW### ###SHORTCUT###<!-- ###BUTTON_GROUP1### -->
+<!-- ###BUTTON_GROUPS_RIGHT### -->
\ No newline at end of file
Index: typo3/sysext/taskcenter/task/class.tx_taskcenter_about.php
===================================================================
--- typo3/sysext/taskcenter/task/class.tx_taskcenter_about.php	(Revision 0)
+++ typo3/sysext/taskcenter/task/class.tx_taskcenter_about.php	(Revision 0)
@@ -0,0 +1,87 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Georg Ringer <typo3@ringerge.org>
+*  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.
+*
+*  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!
+***************************************************************/
+
+
+/**
+ * This class provides a description about the taskcenter.
+ *
+ * @author		Georg Ringer <typo3@ringerge.org>
+ * @package		TYPO3
+ * @subpackage	tx_taskcenter
+ *
+ */
+class tx_taskcenter_about implements tx_taskcenter_Task {
+
+	/**
+	 * Back-reference to the calling reports module
+	 *
+	 * @var	tx_reports_Module	$taskObject
+	 */
+	protected $taskObject;
+
+
+	/**
+	 * Constructor
+	 */
+	public function __construct(SC_mod_user_task_index $taskObject) {
+		$this->taskObject = $taskObject;
+		$GLOBALS['LANG']->includeLLFile('EXT:taskcenter/task/locallang_mod.xml');
+	}
+
+	/**
+	 * Render the description of the taskcenter
+	 *
+	 * @return	string	The task as HTML
+	 */
+	public function getTask() {
+		$content = $this->taskObject->description (
+			$GLOBALS['LANG']->getLL('mlang_tabs_tab'),
+			$GLOBALS['LANG']->getLL('mlang_labels_tabdescr')
+		);
+
+		$content .= $GLOBALS['LANG']->getLL('taskcenter-about');
+
+		return $content;
+		
+	}
+
+	/**
+	 * Render an optional additional information for the 1st view in taskcenter.
+	 * Empty for this extension	 
+	 *
+	 * @return	string		Overview as HTML
+	 */
+	public function getOverview() {
+
+		return '';
+	}
+
+}
+
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/taskcenter/task/class.tx_taskcenter_about.php'])	{
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/taskcenter/task/class.tx_taskcenter_about.php']);
+}
+
+?>
\ No newline at end of file
Index: typo3/sysext/taskcenter/task/conf.php
===================================================================
--- typo3/sysext/taskcenter/task/conf.php	(Revision 7230)
+++ typo3/sysext/taskcenter/task/conf.php	(Arbeitskopie)
@@ -1,11 +1,11 @@
 <?php
-define('TYPO3_MOD_PATH', 'sysext/taskcenter/task/');
-$BACK_PATH='../../../';
-
-$MLANG['default']['tabs_images']['tab'] = 'task.gif';
-$MLANG['default']['ll_ref']='LLL:EXT:taskcenter/task/locallang_mod.php';
-
-$MCONF['script']='index.php';
-$MCONF['access']='group,user';
-$MCONF['name']='user_task';
+	define('TYPO3_MOD_PATH', 'sysext/taskcenter/task/');
+	$BACK_PATH='../../../';
+	
+	$MLANG['default']['tabs_images']['tab'] = 'task.gif';
+	$MLANG['default']['ll_ref']='LLL:EXT:taskcenter/task/locallang_mod.xml';
+	
+	$MCONF['script']='index.php';
+	$MCONF['access']='group,user';
+	$MCONF['name']='user_task';
 ?>
\ No newline at end of file
Index: typo3/sysext/taskcenter/task/icon.gif
===================================================================
Kann nicht anzeigen: Dateityp ist als binär angegeben.
svn:mime-type = application/octet-stream

Eigenschaftsänderungen: typo3\sysext\taskcenter\task\icon.gif
___________________________________________________________________
Hinzugefügt: svn:mime-type
   + application/octet-stream

Index: typo3/sysext/taskcenter/task/index.php
===================================================================
--- typo3/sysext/taskcenter/task/index.php	(Revision 7230)
+++ typo3/sysext/taskcenter/task/index.php	(Arbeitskopie)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2009 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 2010 Georg Ringer <typo3@ringerge.org>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -13,10 +13,7 @@
 *
 *  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
@@ -24,21 +21,24 @@
 *
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
+
+
 /**
-* User Task Center
-*
-* @author Kasper Skårhøj <kasperYYYY@typo3.com>
-* @author Christian Jul Jensen <christian(at)jul(dot)net>
-*     Revision for TYPO3 3.8.0 / Native Workflow System
-*/
+ * This class provides a taskcenter for BE users
+ *
+ * @author		Georg Ringer <typo3@ringerge.org>
+ * @package		TYPO3
+ * @subpackage	taskcenter
+ *
+ */
 
 unset($MCONF);
 require ('conf.php');
 require ($BACK_PATH.'init.php');
 require ($BACK_PATH.'template.php');
-$LANG->includeLLFile('EXT:taskcenter/task/locallang.php');
-require_once('class.mod_user_task.php');
+$LANG->includeLLFile('EXT:taskcenter/task/locallang.xml');
 
+
 $BE_USER->modAccess($MCONF, 1);
 
 
@@ -46,146 +46,517 @@
 // Script Classes
 // ***************************
 class SC_mod_user_task_index extends t3lib_SCbase {
-	var $allExtClassConf = array();
-	var $backPath;
 
+	protected $pageinfo;
+
 	/**
-	 * BE user
+	 * Initializes the Module
 	 *
-	 * @var t3lib_beUserAuth
+	 * @return	void
 	 */
-	var $BE_USER;
+	public function __construct() {
+		parent::init();
 
+			// initialize document
+		$this->doc = t3lib_div::makeInstance('template');
+		$this->doc->setModuleTemplate(
+			t3lib_extMgm::extPath('taskcenter') . 'res/mod_template.html'
+		);
+		$this->doc->backPath = $GLOBALS['BACK_PATH'];
+		$this->doc->getPageRenderer()->loadScriptaculous('effects,dragdrop');
+		$this->doc->addStyleSheet(
+			'tx_taskcenter',
+			'../' . t3lib_extMgm::siteRelPath('taskcenter') . 'res/mod_styles.css'
+		);
+	}
+
 	/**
-	 * document template object
+	 * Adds items to the ->MOD_MENU array. Used for the function menu selector.
 	 *
-	 * @var noDoc
+	 * @return	void
 	 */
-	var $doc;
+	public function menuConfig() {
+		$this->MOD_MENU   = array('mode' => array());
 
+		$this->MOD_MENU['mode']['tasks'] = 'Tasks';
+		$this->MOD_MENU['mode']['information'] = $GLOBALS['LANG']->sL('LLL:EXT:scheduler/mod1/locallang.xml:function.info');
+		
+		parent::menuConfig();
+	}
+
 	/**
-	 * This makes sure that all classes of task-center related extensions are included
-	 * Further it registers the classes in the variable $this->allExtClassConf
+	 * Creates the module's content. In this case it rather acts as a kind of #
+	 * dispatcher redirecting requests to specific tasks.
 	 *
 	 * @return	void
 	 */
-	function includeAllClasses() {
-		foreach($this->MOD_MENU['function'] as $key => $name) {
-			$curExtClassConf = $this->getExternalItemConfig($this->MCONF['name'], 'function', $key);
-			if (is_array($curExtClassConf) && $curExtClassConf['path']) {
-				$this->allExtClassConf[] = $curExtClassConf;
-				$this->include_once[] = $curExtClassConf['path'];
+	public function main() {
+		$docHeaderButtons = $this->getButtons();
+		$markers = array();
+
+			// Access check! @todo: need access check?
+		if ($GLOBALS['BE_USER']->user['admin'] || 1==1) {
+
+			$this->doc->JScodeArray[] = '
+				script_ended = 0;
+				function jumpToUrl(URL) {
+					document.location = URL;
+				}
+
+				Event.observe(document, "dom:loaded", function(){
+					var changeEffect;
+					Sortable.create("task-list", { handles:$$("#task-list .drag"), tag: "li", ghosting:false, overlap:"vertical", constraint:false,
+					 onChange: function(item) {
+						 var list = Sortable.options(item).element;
+						 // deactivate link
+						$$("#task-list a").each(function(link) {
+							link.writeAttribute("onclick","return false;");
+						});
+
+					 },
+
+					 onUpdate: function(list) {
+						 new Ajax.Request("../../../ajax.php", {
+							 method: "post",
+							 parameters: { ajaxID :"Taskcenter::saveSortingState", data:  Sortable.serialize(list)}
+							 //parameters : "ajaxID=Taskcenter::saveSortingState&item=" + Sortable.serialize(list)
+						 });
+							// activate link
+						 Event.observe(window,"mouseup",function(){
+							$$("#task-list a").each(function(link) {
+								link.writeAttribute("onclick","");
+							});
+						});
+
+					 }
+					});
+
+					$$("#taskcenter-menu .down").invoke("observe", "click", function(event){
+						var item = Event.element(event);
+						var itemParent = item.up();
+						item = item.next("div").next("div").next("div").next("div");
+
+						if (itemParent.hasClassName("expanded")) {
+							itemParent.removeClassName("expanded").addClassName("collapsed");
+							Effect.BlindUp(item, {duration : 0.5});
+							state = 1;
+						} else {
+							itemParent.removeClassName("collapsed").addClassName("expanded");
+							Effect.BlindDown(item, {duration : 0.5});
+							state = 0;
+						}
+						new Ajax.Request("../../../ajax.php", {
+							parameters : "ajaxID=Taskcenter::saveCollapseState&item=" + itemParent.id + "&state=" + state
+						});
+					});
+				});
+			';
+			$this->doc->postCode='
+				<script language="javascript" type="text/javascript">
+					script_ended = 1;
+					if (top.fsMod) {
+						top.fsMod.recentIds["web"] = 0;
+					}
+				</script>
+			';
+
+				// Render content depending on the mode
+			$mode = (string)$this->MOD_SETTINGS['mode'];
+			if ($mode == 'information') {
+				$this->renderInformationContent();
+			} else {
+				$this->renderModuleContent();
 			}
+
+			
+		} else {
+			$flashMessage = t3lib_div::makeInstance(
+				't3lib_FlashMessage',
+				$GLOBALS['LANG']->getLL('error-access', true),
+				$GLOBALS['LANG']->getLL('error_header'),
+				t3lib_FlashMessage::ERROR
+			);
+			$this->content.= $flashMessage->render();
 		}
+
+			// compile document
+		$markers['FUNC_MENU'] = t3lib_BEfunc::getFuncMenu(
+				0,
+				'SET[mode]',
+				$this->MOD_SETTINGS['mode'],
+				$this->MOD_MENU['mode']
+			);
+		$markers['CONTENT'] = $this->content;
+
+			// Build the <body> for the module
+		$this->content = $this->doc->startPage($GLOBALS['LANG']->getLL('title'));
+		$this->content .= $this->doc->moduleBody($this->pageinfo, $docHeaderButtons, $markers);
+		$this->content .= $this->doc->endPage();
+		$this->content = $this->doc->insertStylesAndJS($this->content);
 	}
 
 	/**
-	 * This is the main function called by the TYPO3 framework
+	 * Prints out the module's HTML
 	 *
-	 * @return	string		The conntent of the module (HTML)
+	 * @return	void
 	 */
-	function main() {
-		global $BE_USER, $LANG, $BACK_PATH, $TCA_DESCR, $TCA, $CLIENT, $TYPO3_CONF_VARS;
+	public function printContent() {
+		echo $this->content;
+	}
 
-		/* Setup document template */
-		$this->doc = t3lib_div::makeInstance('noDoc');
-		$this->doc->divClass = '';
-		$this->doc->form = '<form action="index.php" method="post" name="editform">';
-		$this->backPath = $this->doc->backPath = $BACK_PATH;
-		$this->doc->getPageRenderer()->loadPrototype();
-		$this->doc->JScode = '  <script language="javascript" type="text/javascript">
-			script_ended = 0;
-			function jumpToUrl(URL) {
-				window.location.href = URL;
+	/**
+	 * Generates the module content by calling the selected task
+	 *
+	 * @return	void
+	 */
+	protected function renderModuleContent() {
+		$title = $content = $actionContent = '';
+		$chosenTask	= (string)$this->MOD_SETTINGS['function'];
+
+			// render the taskcenter task as default
+		if (empty($chosenTask) || $chosenTask == 'index') {
+			$chosenTask = 'taskcenter.tasks';
+		}
+
+			// remder the task
+		list($extKey, $taskName) = explode('.', $chosenTask, 2);
+
+		$taskClass = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['taskcenter'][$extKey][$taskName]['task'];
+		$title     = $GLOBALS['LANG']->sL($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['taskcenter'][$extKey][$taskName]['title']);
+
+		if (class_exists($taskClass)) {
+			$taskInstance = t3lib_div::makeInstance($taskClass, $this);
+
+			if ($taskInstance instanceof tx_taskcenter_Task) {
+					// check if the task is restricted to admins only
+				if ($this->checkAccess($extKey, $taskName)) {
+					$actionContent .= $taskInstance->getTask();
+				} else {
+					$flashMessage = t3lib_div::makeInstance(
+						't3lib_FlashMessage',
+						$GLOBALS['LANG']->getLL('error-access', TRUE),
+						$GLOBALS['LANG']->getLL('error_header'),
+						t3lib_FlashMessage::ERROR
+					);
+					$actionContent .= $flashMessage->render();
+				}
+			} else {
+					// error if the task is not an instance of tx_taskcenter_Task
+				$flashMessage = t3lib_div::makeInstance(
+					't3lib_FlashMessage',
+					sprintf($GLOBALS['LANG']->getLL('error_no-instance', TRUE), $taskClass, 'tx_taskcenter_Task'),
+					$GLOBALS['LANG']->getLL('error_header'),
+					t3lib_FlashMessage::ERROR
+				);
+				$actionContent .= $flashMessage->render();
 			}
-			'.(is_object($this->extObj)?$this->extObj->JScode():"").'
-			</script>
-			';
-		$this->doc->JScode .= $this->doc->getDynTabMenuJScode();
-		$this->doc->JScode .= '<script language="javascript" type="text/javascript">
-		function resizeIframe(frame,max) {
-			var parent = $("list_frame").up("body");
-			var parentHeight = $(parent).getHeight();
-			$("list_frame").setStyle({height: parentHeight+"px"});
+		}
 
+		$content = '<div id="taskcenter-main">
+						<div id="taskcenter-menu">' . $this->indexAction() . '</div>
+						<div id="taskcenter-item" class="' . $extKey . '-' . $taskName . '">' .
+							$actionContent . '
+						</div>
+					</div>';
+
+		$this->content .= $content;
+	}
+
+	/**
+	 * Generates the information content
+	 *
+	 * @return	void
+	 */
+	protected function renderInformationContent() {
+		$content = $this->description (
+			$GLOBALS['LANG']->getLL('mlang_tabs_tab'),
+			$GLOBALS['LANG']->sL('LLL:EXT:taskcenter/task/locallang_mod.xml:mlang_labels_tabdescr')
+		);
+
+		$content .= $GLOBALS['LANG']->getLL('taskcenter-about');
+
+		if ($GLOBALS['BE_USER']->isAdmin()) {
+			$content .= '<br /><br />' . $this->description (
+				$GLOBALS['LANG']->getLL('taskcenter-adminheader'),
+				$GLOBALS['LANG']->getLL('taskcenter-admin')
+			);
 		}
-		// event crashes IE6 so he is excluded first
-		//TODO: use a central handler instead of multiple single ones
-		var version = parseFloat(navigator.appVersion.split(\';\')[1].strip().split(\' \')[1]);
-		if (!(Prototype.Browser.IE && version == 6)) {
-			Event.observe(window, "resize", resizeIframe, false);
+		
+		$this->content .= $content;
+	}
+
+	/**
+	 * Render the headline of a task including a title and an optional description.
+	 *
+	 * @param	string		$title: Title
+	 * @param	string		$description: Description
+	 * @return	string formatted title and description
+	 */
+	public function description($title, $description='') {
+		if (!empty($description)) {
+			$description = '<p class="description">' .	nl2br(htmlspecialchars($description)) . '</p><br />';
 		}
-</script>';
+		$content = $this->doc->section($title, $description, FALSE, TRUE);
 
-		/* call getMainContent first, because what happens here might affect leftContent */
-		$mainContent = $this->getMainContent();
+		return $content;
+	}
 
-		/* content... */
-		$this->content = '';
-		$this->content .= $this->doc->startPage($this->MOD_MENU['function'][$this->MOD_SETTINGS['function']]);
-		$this->content .= '<table style="width: 98%;"><tr>';
-		$this->content .= '<td valign="top" style="width: 20%;">'.$this->getleftHeader().$this->getDynTabMenu().'</td>';
-		$this->content .= '<td valign="top" style="height:100%">'.$mainContent.'</td>';
-		$this->content .= '</tr></table>';
+	/**
+	 * Render a list of items as a nicely formated definition list including a
+	 * link, icon, title and description.
+	 * The keys of a single item are:
+	 * 	- title:				Title of the item
+	 * 	- link:					Link to the task
+	 * 	- icon: 				Path to the icon or Icon as HTML if it begins with <img
+	 * 	- description:	Description of the task, using htmlspecialchars()
+	 * 	- descriptionHtml:	Description allowing HTML tags which will override the
+	 * 											description
+	 *
+	 * @param	array		$items: List of items to be displayed in the definition list.
+	 * @param	boolean		$mainMenu: Set it to true to render the main menu
+	 * @return	string	definition list
+	 */
+	public function renderListMenu($items, $mainMenu=FALSE) {
+		$content = '';
+		$count = 0;
+
+			// change the sorting of items to the user's one
+		if ($mainMenu) {
+			$userSorting = unserialize($GLOBALS['BE_USER']->uc['taskcenter']['sorting']);
+			if (is_array($userSorting)) {
+				$newSorting = array();
+				foreach($userSorting as $item) {
+					if(isset($items[$item])) {
+						$newSorting[] = $items[$item];
+						unset($items[$item]);
+					}
+				}
+				$items = $newSorting + $items;
+			}
+		}
+
+		if (is_array($items) && count($items) > 0) {
+			foreach($items as $item) {
+				$title = htmlspecialchars($item['title']);
+
+				$icon = $additionalClass = $collapsedStyle = '';
+					// Check for custom icon
+				if (!empty($item['icon'])) {
+					if (strpos($item['icon'], '<img ') === FALSE) {
+						$absIconPath = t3lib_div::getFileAbsFilename($item['icon']);
+							// If the file indeed exists, assemble relative path to it
+						if (file_exists($absIconPath)) {
+							$icon = $GLOBALS['BACK_PATH'] . '../' . str_replace(PATH_site, '', $absIconPath);
+							$icon = '<img src="' . $icon . '" title="' . $title . '" alt="' . $title . '" />';
+						}
+						if (@is_file($icon)) {
+							$icon = '<img' . t3lib_iconworks::skinImg($GLOBALS['BACK_PATH'], $icon, 'width="16" height="16"') . ' title="' . $title . '" alt="' . $title . '" />';
+						}
+					} else {
+						$icon = $item['icon'];
+					}
+				}
+
+
+				$description = (!empty($item['descriptionHtml'])) ? $item['descriptionHtml'] : '<p>' . nl2br(htmlspecialchars($item['description'])) . '</p>';
+
+				$id = $this->getUniqueKey($item['uid']);
+
+					// collapsed & expanded menu items
+				if ($mainMenu && isset($GLOBALS['BE_USER']->uc['taskcenter']['states'][$id]) && $GLOBALS['BE_USER']->uc['taskcenter']['states'][$id]) {
+					$collapsedStyle = 'style="display:none"';
+					$additionalClass = 'collapsed';
+				} else {
+					$additionalClass = 'expanded';
+				}
+
+					// first & last menu item
+				if ($count == 0) {
+					$additionalClass .= ' first-item';
+				} elseif ($count + 1 === count($items)) {
+					$additionalClass .= ' last-item';
+				}
+
+					// active menu item
+				$active = ((string) $this->MOD_SETTINGS['function'] == $item['uid']) ? ' active-task' : '';
+
+				if ($mainMenu) {
+					$section = '<div class="down">&nbsp;</div>
+											<div class="image">' . $icon . '</div>
+											<div class="drag">
+												<img' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/move.gif', 'width="16" height="16" hspace="2"') . ' title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.move', 1) . '" alt="" />
+											</div>';
+				}
+
+				$content .= '<li class="' . $additionalClass . $active . '" id="el_' .$id . '">
+								' . $section . '
+								<div class="link"><a href="' . $item['link'] . '">' . $title . '</a></div>
+								
+								<div class="content " ' . $collapsedStyle . '>' . $description . '</div>
+							</li>';
+
+				$count++;
+			}
+
+			$navId = ($mainMenu) ? 'id="task-list"' : '';
+
+			$content = '<ul ' . $navId . ' class="task-list">' . $content . '</ul>';
+
+		}
+
+		return $content;
 	}
 
-	/** Generate the dynamic tab menu in the left side by iterating
-	 * over all submodules and creating configurations.
+	/**
+	 * Shows an overview list of available reports.
 	 *
-	 * @return string  the code for the dynamic tab menu (HTML)
+	 * @return	string	list of available reports
 	 */
-	function getDynTabMenu() {
-		//walk through registered submodules and generate configuration
-		//for tabmenu
-		$parts = Array();
-		foreach($this->allExtClassConf as $conf) {
-			$extObj = t3lib_div::makeInstance($conf['name']);
-			/* call init to make sure the LOCAL_LANG is included for all listed
-			* extensions. If they OVERRIDE each other there is trouble! */
-			$extObj->init($this, $conf);
-			$extObj->backPath = $this->backPath;
-			$extObj->mod_user_task_init($GLOBALS['BE_USER']);
-			$part = $extObj->overview_main();
-			if (is_array($part)) {
-				$parts[] = $part;
+	protected function indexAction() {
+		$icon = t3lib_extMgm::extRelPath('taskcenter') . 'task/task.gif';
+		$tasks = array();
+
+		foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['taskcenter'] as $extKey => $extensionReports) {
+			foreach ($extensionReports as $taskName => $task) {
+				if (!$this->checkAccess($extKey, $taskName)) {
+					continue;
+				}
+				$link = 'index.php?M=tools_txtaskcenterM1&SET[function]=' . $extKey . '.' . $taskName;
+				$taskTitle = $GLOBALS['LANG']->sL($task['title']);
+				$taskDescriptionHtml = '';
+
+					// Check for custom icon
+				if (!empty($task['icon'])) {
+					$icon = t3lib_div::getFileAbsFilename($task['icon']);
+				}
+
+				$taskInstance = t3lib_div::makeInstance($task['task'], $this);
+				if ($taskInstance instanceof tx_taskcenter_Task) {
+					$taskDescriptionHtml = $taskInstance->getOverview();
+				}
+
+
+				$uniqueKey = $this->getUniqueKey($extKey . '.' . $taskName);
+				$tasks[$uniqueKey] = array(
+					'title'				=> $taskTitle,
+					'descriptionHtml'	=> $taskDescriptionHtml,
+					'description'		=> $GLOBALS['LANG']->sL($task['description']),
+					'icon'				=> $icon,
+					'link'				=> $link,
+					'uid'				=> $extKey . '.' . $taskName
+				);
 			}
 		}
-		return $this->doc->getDynTabMenu($parts, 'tx_taskcenter', 1, true);
+
+		$content .= $this->renderListMenu($tasks, TRUE);
+
+		return $content;
 	}
 
 	/**
-	 * Generate the header of the left column
+	 * Create the panel of buttons for submitting the form or otherwise
+	 * perform operations.
 	 *
-	 * @return	string		header in the left side (HTML)
+	 * @return	array	all available buttons as an assoc. array
 	 */
-	function getleftHeader() {
-		$name = $GLOBALS['BE_USER']->user['realName'] ? $GLOBALS['BE_USER']->user['realName'] : $GLOBALS['BE_USER']->user['username'];
-		return '<h1>TYPO3 taskcenter <br />' . htmlspecialchars($name) . '</h1>';
+	protected function getButtons() {
+		$buttons = array(
+			'csh' => t3lib_BEfunc::cshItem('_MOD_web_func', '', $GLOBALS['BACK_PATH']),
+			'shortcut' => '',
+			'open_new_window' => $this->openInNewWindow()
+		);
+
+			// Shortcut
+		if ($GLOBALS['BE_USER']->mayMakeShortcut()) {
+			$buttons['shortcut'] = $this->doc->makeShortcutIcon('', 'function', $this->MCONF['name']);
+		}
+
+		return $buttons;
 	}
 
 	/**
-	 * Get the main content for the module by initiating the external object (if any) and calling it's main function.
+	 * Check the access to a task. Considered are:
+	 *  - Admins are always allowed
+	 *  - Tasks can be restriced to admins only
+	 *  - Tasks can be blinded for Users with TsConfig taskcenter.<extensionkey>.<taskName> = 0
 	 *
-	 * @return	string		main content (HTML)
+	 * @param	string		$extKey: Extension key
+	 * @param	string		$taskName: Name of the task
+	 * @return boolean		Access to the task allowed or not
 	 */
-	function getMainContent() {
-		if (is_object($this->extObj)) {
-			$this->extObj->backPath = $this->backPath;
-			$this->extObj->mod_user_task_init($GLOBALS['BE_USER']);
-			return $this->extObj->main();
+	protected function checkAccess($extKey, $taskName) {
+			// check if task is blinded with TsConfig (taskcenter.<extkey>.<taskName>
+		$tsConfig = $GLOBALS['BE_USER']->getTSConfig('taskcenter.' . $extKey . '.' . $taskName);
+		if (isset($tsConfig['value']) && intval($tsConfig['value']) == 0) {
+			return FALSE;
+		} 
+
+		// admins are always allowed
+		if ($GLOBALS['BE_USER']->isAdmin()) {
+			return TRUE;
 		}
+
+			// check if task is restricted to admins
+		if (intval($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['taskcenter'][$extKey][$taskName]['admin']) == 1) {
+			return FALSE;
+		}
+
 	}
 
 	/**
-	 * Output the content of the object to the browser
+	 * Returns HTML code to dislay an url in an iframe at the right side of the taskcenter
 	 *
-	 * @return	void
+	 * @param	string		$url: url to display
+	 * @param	int		$max:
+	 * @return	string		code that inserts the iframe (HTML)
 	 */
-	function printContent() {
-		$this->content .= $this->doc->endPage();
-		echo $this->content;
+	public function urlInIframe($url, $max=0) {
+		$this->doc->JScodeArray[] =
+		'function resizeIframe(frame,max) {
+			var parent = $("typo3-docbody");
+			var parentHeight = $(parent).getHeight() - 0;
+			var parentWidth = $(parent).getWidth() - $("taskcenter-menu").getWidth() - 50;
+			$("list_frame").setStyle({height: parentHeight+"px", width: parentWidth+"px"});
+
+		}
+		// event crashes IE6 so he is excluded first
+		var version = parseFloat(navigator.appVersion.split(";")[1].strip().split(" ")[1]);
+		if (!(Prototype.Browser.IE && version == 6)) {
+			Event.observe(window, "resize", resizeIframe, false);
+		}';
+
+		return '<iframe onload="resizeIframe(this,' . $max . ');" scrolling="auto"  width="100%" src="' . $url . '" name="list_frame" id="list_frame" frameborder="no" style="margin-top:-51px;border: none;"></iframe>';
 	}
 
+	/**
+	 * Create a unique key from a string which can be used in Prototype's Sortable
+	 * Therefore '_' are replaced
+	 *
+	 * @param	string		$string: string which is used to generate the identifier
+	 * @return	string		modified string
+	 */
+	protected function getUniqueKey($string) {
+		$search		= array('.', '_');
+		$replace	= array('-', '');
+
+		return str_replace($search, $replace, $string);
+	}
+
+	/**
+	 * This method prepares the link for opening the devlog in a new window
+	 *
+	 * @return	string	Hyperlink with icon and appropriate JavaScript
+	 */
+	protected function openInNewWindow() {
+		$url = t3lib_div::getIndpEnv('TYPO3_REQUEST_SCRIPT');
+		$onClick = "devlogWin=window.open('" . $url . "','taskcenter','width=790,status=0,menubar=1,resizable=1,location=0,scrollbars=1,toolbar=0');return false;";
+		$content = '<a href="#" onclick="' . htmlspecialchars($onClick).'">' .
+					'<img' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/open_in_new_window.gif', 'width="19" height="14"') . ' title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.openInNewWindow', 1) . '" class="absmiddle" alt="" />' .
+					'</a>';
+		return $content;
+	}
+
+
 }
 
 
@@ -197,12 +568,10 @@
 
 // Make instance:
 $SOBE = t3lib_div::makeInstance('SC_mod_user_task_index');
-$SOBE->init();
-$SOBE->includeAllClasses();
-
 // Include files?
-foreach($SOBE->include_once as $INC_FILE) include_once($INC_FILE);
-$SOBE->checkExtObj(); // Checking for first level external objects
+foreach($SOBE->include_once as $INC_FILE) {
+	include_once($INC_FILE);
+}
 
 $SOBE->main();
 $SOBE->printContent();
Index: typo3/sysext/taskcenter/task/locallang.xml
===================================================================
--- typo3/sysext/taskcenter/task/locallang.xml	(Revision 7230)
+++ typo3/sysext/taskcenter/task/locallang.xml	(Arbeitskopie)
@@ -6,7 +6,16 @@
 	</meta>
 	<data type="array">
 		<languageKey index="default" type="array">
-			<label index="title">Task overview</label>
+			<label index="mlang_tabs_tab">Tasks</label>
+			<label index="task_overview">Overview</label>
+			<label index="error_header">Error</label>
+			<label index="error-access">No access to this module.</label>
+			<label index="error_no-instance">The class "%s" does not implement the task interface "%s" which is necessary to be displayed here.</label>
+
+
+
+
+
 			<label index="lReplyAddress">Reply address is your email</label>
 			<label index="lSelf">Self</label>
 			<label index="lSendNew">Send message</label>
@@ -19,6 +28,25 @@
 			<label index="lDelete_warning">Are you sure you want to delete this user?</label>
 			<label index="lDelete">Delete</label>
 			<label index="lUpdate">Update</label>
+
+			<label index="task_description">Description, blablabla lipusm</label>
+			<label index="taskcenter-about">
+				<![CDATA[
+					<p>The menu on the left side shows all allowed tasks and let you allow to complete your tasks in an effecient way.</p>
+					<ul class="withicons">
+						<li>Clicking on the title of a task will open a detailed view of the task itself.</li>
+						<li>Click on the arrow on the right side will open/close the submenu of the task.</li>
+					</ul>
+					<br />
+					<strong>Note:</strong> Set the taskcenter as the default module after your login to be even faster!
+
+				]]>
+			</label>
+			<label index="taskcenter-adminheader">Create a task</label>
+			<label index="taskcenter-admin">It is very to extend the taskcenter by a custom task. For more information please look into the manual of the extension 'taskcenter'.</label>
+
+
+			
 		</languageKey>
 	</data>
 </T3locallang>
\ No newline at end of file
