*** empty log message ***
authorKasper Skårhøj <kasper@typo3.org>
Tue, 16 Nov 2004 15:24:28 +0000 (15:24 +0000)
committerKasper Skårhøj <kasper@typo3.org>
Tue, 16 Nov 2004 15:24:28 +0000 (15:24 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@503 709f56b5-9817-0410-a4d7-c38de5d9e867

150 files changed:
typo3/sysext/belog/class.tx_belog_webinfo.php [new file with mode: 0755]
typo3/sysext/belog/doc/TODO.txt [new file with mode: 0755]
typo3/sysext/belog/ext_emconf.php [new file with mode: 0755]
typo3/sysext/belog/ext_icon.gif [new file with mode: 0755]
typo3/sysext/belog/ext_tables.php [new file with mode: 0755]
typo3/sysext/belog/locallang.php [new file with mode: 0755]
typo3/sysext/belog/mod/clear.gif [new file with mode: 0755]
typo3/sysext/belog/mod/conf.php [new file with mode: 0755]
typo3/sysext/belog/mod/index.php [new file with mode: 0755]
typo3/sysext/belog/mod/locallang.php [new file with mode: 0755]
typo3/sysext/belog/mod/locallang_mod.php [new file with mode: 0755]
typo3/sysext/belog/mod/log.gif [new file with mode: 0755]
typo3/sysext/beuser/doc/TODO.txt [new file with mode: 0755]
typo3/sysext/beuser/ext_emconf.php [new file with mode: 0755]
typo3/sysext/beuser/ext_icon.gif [new file with mode: 0755]
typo3/sysext/beuser/ext_tables.php [new file with mode: 0755]
typo3/sysext/beuser/mod/beuser.gif [new file with mode: 0755]
typo3/sysext/beuser/mod/clear.gif [new file with mode: 0755]
typo3/sysext/beuser/mod/conf.php [new file with mode: 0755]
typo3/sysext/beuser/mod/index.php [new file with mode: 0755]
typo3/sysext/beuser/mod/locallang_mod.php [new file with mode: 0755]
typo3/sysext/css_styled_content/css/example.css [new file with mode: 0755]
typo3/sysext/css_styled_content/css/example_outlines.css [new file with mode: 0755]
typo3/sysext/css_styled_content/css/img/background_gradient.gif [new file with mode: 0755]
typo3/sysext/css_styled_content/css/img/red_arrow_bullet.gif [new file with mode: 0755]
typo3/sysext/css_styled_content/css/readme.txt [new file with mode: 0755]
typo3/sysext/css_styled_content/doc/TODO.txt [new file with mode: 0755]
typo3/sysext/css_styled_content/doc/manual.sxw [new file with mode: 0755]
typo3/sysext/css_styled_content/ext_conf_template.txt [new file with mode: 0755]
typo3/sysext/css_styled_content/ext_emconf.php [new file with mode: 0755]
typo3/sysext/css_styled_content/ext_icon.gif [new file with mode: 0755]
typo3/sysext/css_styled_content/ext_localconf.php [new file with mode: 0755]
typo3/sysext/css_styled_content/ext_php_api.dat [new file with mode: 0755]
typo3/sysext/css_styled_content/ext_tables.php [new file with mode: 0755]
typo3/sysext/css_styled_content/pageTSconfig.txt [new file with mode: 0755]
typo3/sysext/css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php [new file with mode: 0755]
typo3/sysext/css_styled_content/pi1/locallang.php [new file with mode: 0755]
typo3/sysext/css_styled_content/static/constants.txt [new file with mode: 0755]
typo3/sysext/css_styled_content/static/editorcfg.txt [new file with mode: 0755]
typo3/sysext/css_styled_content/static/setup.txt [new file with mode: 0755]
typo3/sysext/impexp/app/clear.gif [new file with mode: 0755]
typo3/sysext/impexp/app/conf.php [new file with mode: 0755]
typo3/sysext/impexp/app/index.php [new file with mode: 0755]
typo3/sysext/impexp/app/locallang.php [new file with mode: 0755]
typo3/sysext/impexp/class.tx_impexp.php [new file with mode: 0755]
typo3/sysext/impexp/class.tx_impexp_clickmenu.php [new file with mode: 0755]
typo3/sysext/impexp/doc/TODO.txt [new file with mode: 0755]
typo3/sysext/impexp/export.gif [new file with mode: 0755]
typo3/sysext/impexp/ext_emconf.php [new file with mode: 0755]
typo3/sysext/impexp/ext_tables.php [new file with mode: 0755]
typo3/sysext/impexp/import.gif [new file with mode: 0755]
typo3/sysext/indexed_search/ChangeLog [new file with mode: 0755]
typo3/sysext/indexed_search/class.indexer.php [new file with mode: 0755]
typo3/sysext/indexed_search/doc/TODO.txt [new file with mode: 0755]
typo3/sysext/indexed_search/doc/manual.sxw [new file with mode: 0755]
typo3/sysext/indexed_search/ext_conf_template.txt [new file with mode: 0755]
typo3/sysext/indexed_search/ext_emconf.php [new file with mode: 0755]
typo3/sysext/indexed_search/ext_icon.gif [new file with mode: 0755]
typo3/sysext/indexed_search/ext_localconf.php [new file with mode: 0755]
typo3/sysext/indexed_search/ext_tables.php [new file with mode: 0755]
typo3/sysext/indexed_search/ext_tables.sql [new file with mode: 0755]
typo3/sysext/indexed_search/ext_typoscript_editorcfg.txt [new file with mode: 0755]
typo3/sysext/indexed_search/ext_typoscript_setup.txt [new file with mode: 0755]
typo3/sysext/indexed_search/locallang.php [new file with mode: 0755]
typo3/sysext/indexed_search/mod/clear.gif [new file with mode: 0755]
typo3/sysext/indexed_search/mod/conf.php [new file with mode: 0755]
typo3/sysext/indexed_search/mod/index.php [new file with mode: 0755]
typo3/sysext/indexed_search/mod/isearch.gif [new file with mode: 0755]
typo3/sysext/indexed_search/mod/locallang_mod.php [new file with mode: 0755]
typo3/sysext/indexed_search/modfunc1/class.tx_indexedsearch_modfunc1.php [new file with mode: 0755]
typo3/sysext/indexed_search/modfunc1/locallang.php [new file with mode: 0755]
typo3/sysext/indexed_search/pi/class.tx_indexedsearch.php [new file with mode: 0755]
typo3/sysext/indexed_search/pi/considerations.txt [new file with mode: 0755]
typo3/sysext/indexed_search/pi/locallang.php [new file with mode: 0755]
typo3/sysext/indexed_search/pi/res/doc.gif [new file with mode: 0755]
typo3/sysext/indexed_search/pi/res/html.gif [new file with mode: 0755]
typo3/sysext/indexed_search/pi/res/locked.gif [new file with mode: 0755]
typo3/sysext/indexed_search/pi/res/pages.gif [new file with mode: 0755]
typo3/sysext/indexed_search/pi/res/pdf.gif [new file with mode: 0755]
typo3/sysext/indexed_search/pi/res/txt.gif [new file with mode: 0755]
typo3/sysext/lowlevel/config/clear.gif [new file with mode: 0755]
typo3/sysext/lowlevel/config/conf.php [new file with mode: 0755]
typo3/sysext/lowlevel/config/config.gif [new file with mode: 0755]
typo3/sysext/lowlevel/config/index.php [new file with mode: 0755]
typo3/sysext/lowlevel/config/locallang_mod.php [new file with mode: 0755]
typo3/sysext/lowlevel/dbint/clear.gif [new file with mode: 0755]
typo3/sysext/lowlevel/dbint/conf.php [new file with mode: 0755]
typo3/sysext/lowlevel/dbint/db.gif [new file with mode: 0755]
typo3/sysext/lowlevel/dbint/index.php [new file with mode: 0755]
typo3/sysext/lowlevel/dbint/locallang_mod.php [new file with mode: 0755]
typo3/sysext/lowlevel/doc/TODO.txt [new file with mode: 0755]
typo3/sysext/lowlevel/ext_emconf.php [new file with mode: 0755]
typo3/sysext/lowlevel/ext_icon.gif [new file with mode: 0755]
typo3/sysext/lowlevel/ext_tables.php [new file with mode: 0755]
typo3/sysext/sys_action/TODO.txt [new file with mode: 0755]
typo3/sysext/sys_action/class.tx_sysaction.php [new file with mode: 0755]
typo3/sysext/sys_action/ext_emconf.php [new file with mode: 0755]
typo3/sysext/sys_action/ext_icon.gif [new file with mode: 0755]
typo3/sysext/sys_action/ext_tables.php [new file with mode: 0755]
typo3/sysext/sys_action/ext_tables.sql [new file with mode: 0755]
typo3/sysext/sys_action/locallang.php [new file with mode: 0755]
typo3/sysext/sys_action/locallang_csh_sysaction.php [new file with mode: 0755]
typo3/sysext/sys_action/locallang_tca.php [new file with mode: 0755]
typo3/sysext/sys_action/sys_action.gif [new file with mode: 0755]
typo3/sysext/sys_action/sys_action__h.gif [new file with mode: 0755]
typo3/sysext/sys_action/tca.php [new file with mode: 0755]
typo3/sysext/sys_note/ext_emconf.php [new file with mode: 0755]
typo3/sysext/sys_note/ext_icon.gif [new file with mode: 0755]
typo3/sysext/sys_note/ext_tables.php [new file with mode: 0755]
typo3/sysext/sys_note/ext_tables.sql [new file with mode: 0755]
typo3/sysext/sys_note/locallang_csh_sysnote.php [new file with mode: 0755]
typo3/sysext/sys_note/locallang_tca.php [new file with mode: 0755]
typo3/sysext/taskcenter/ext_emconf.php [new file with mode: 0755]
typo3/sysext/taskcenter/ext_icon.gif [new file with mode: 0755]
typo3/sysext/taskcenter/ext_tables.php [new file with mode: 0755]
typo3/sysext/taskcenter/task/class.mod_user_task.php [new file with mode: 0755]
typo3/sysext/taskcenter/task/clear.gif [new file with mode: 0755]
typo3/sysext/taskcenter/task/conf.php [new file with mode: 0755]
typo3/sysext/taskcenter/task/frameset.php [new file with mode: 0755]
typo3/sysext/taskcenter/task/index.php [new file with mode: 0755]
typo3/sysext/taskcenter/task/locallang.php [new file with mode: 0755]
typo3/sysext/taskcenter/task/locallang_mod.php [new file with mode: 0755]
typo3/sysext/taskcenter/task/overview.php [new file with mode: 0755]
typo3/sysext/taskcenter/task/task.gif [new file with mode: 0755]
typo3/sysext/version/class.tx_version_cm1.php [new file with mode: 0755]
typo3/sysext/version/cm1/clear.gif [new file with mode: 0755]
typo3/sysext/version/cm1/cm_icon.gif [new file with mode: 0755]
typo3/sysext/version/cm1/conf.php [new file with mode: 0755]
typo3/sysext/version/cm1/index.php [new file with mode: 0755]
typo3/sysext/version/cm1/locallang.php [new file with mode: 0755]
typo3/sysext/version/doc/wizard_form.dat [new file with mode: 0755]
typo3/sysext/version/doc/wizard_form.html [new file with mode: 0755]
typo3/sysext/version/ext_emconf.php [new file with mode: 0755]
typo3/sysext/version/ext_icon.gif [new file with mode: 0755]
typo3/sysext/version/ext_tables.php [new file with mode: 0755]
typo3/sysext/version/locallang.php [new file with mode: 0755]
typo3/sysext/version/locallang_db.php [new file with mode: 0755]
typo3/sysext/version/modfunc1/class.tx_version_modfunc1.php [new file with mode: 0755]
typo3/sysext/version/modfunc1/locallang.php [new file with mode: 0755]
typo3/sysext/viewpage/ext_emconf.php [new file with mode: 0755]
typo3/sysext/viewpage/ext_icon.gif [new file with mode: 0755]
typo3/sysext/viewpage/ext_tables.php [new file with mode: 0755]
typo3/sysext/viewpage/view/clear.gif [new file with mode: 0755]
typo3/sysext/viewpage/view/conf.php [new file with mode: 0755]
typo3/sysext/viewpage/view/dummy.html [new file with mode: 0755]
typo3/sysext/viewpage/view/frameset.php [new file with mode: 0755]
typo3/sysext/viewpage/view/index.php [new file with mode: 0755]
typo3/sysext/viewpage/view/layout.gif [new file with mode: 0755]
typo3/sysext/viewpage/view/locallang_mod.php [new file with mode: 0755]
typo3/sysext/viewpage/view/view.gif [new file with mode: 0755]

diff --git a/typo3/sysext/belog/class.tx_belog_webinfo.php b/typo3/sysext/belog/class.tx_belog_webinfo.php
new file mode 100755 (executable)
index 0000000..05566d3
--- /dev/null
@@ -0,0 +1,226 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 1999-2004 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  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!
+***************************************************************/
+/**
+ * @author     Kasper Skårhøj <kasperYYYY@typo3.com>
+ */
+
+
+require_once(PATH_t3lib."class.t3lib_pagetree.php");
+require_once(PATH_t3lib."class.t3lib_bedisplaylog.php");
+class logFunctions_ext extends t3lib_BEDisplayLog {
+       function initArray()    {
+               global $LANG;
+               $codeArr=Array();
+               $codeArr[$i][]=$LANG->getLL("chLog_l_time");
+               $codeArr[$i][]=$LANG->getLL("chLog_l_user");
+               $codeArr[$i][]=$LANG->getLL("chLog_l_error");
+               $codeArr[$i][]=$LANG->getLL("chLog_l_action");
+               $codeArr[$i][]=$LANG->getLL("chLog_l_table");
+               $codeArr[$i][]=$LANG->getLL("chLog_l_details");
+               return $codeArr;
+       }
+}
+
+
+require_once(PATH_t3lib."class.t3lib_extobjbase.php");
+
+class tx_belog_webinfo extends t3lib_extobjbase {
+       var $localLangFile = "locallang.php";
+
+       function modMenu()      {
+               global $LANG;
+
+               return array(
+                       "log_users" => array(
+                               0 => $LANG->getLL("chLog_users_0"),
+                               "-1" => $LANG->getLL("chLog_users_-1")
+                       ),
+                       "log_time" => array(
+                               0 => $LANG->getLL("chLog_time_0"),
+                               1 => $LANG->getLL("chLog_time_1"),
+                               2 => $LANG->getLL("chLog_time_2"),
+                               10 => $LANG->getLL("chLog_time_10"),
+                               11 => $LANG->getLL("chLog_time_11"),
+                               12 => $LANG->getLL("chLog_time_12"),
+                               20 => $LANG->getLL("chLog_time_20")
+                       ),
+                       "depth" => array(
+                               0 => $LANG->getLL("depth_0"),
+                               1 => $LANG->getLL("depth_1"),
+                               2 => $LANG->getLL("depth_2"),
+                               3 => $LANG->getLL("depth_3")
+                       )
+               );
+       }
+
+       // ***********************************
+       // MAIN function for log display
+       // ***********************************
+       function localLang()    {
+               include_once($this->thisPath."/mod/locallang.php");
+               $GLOBALS["LOCAL_LANG"]=t3lib_div::array_merge_recursive_overrule($GLOBALS["LOCAL_LANG"],$LOCAL_LANG);
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @return      [type]          ...
+        */
+       function main() {
+               global $SOBE,$LANG;
+
+               $this->localLang();
+
+               $lF = t3lib_div::makeInstance("logFunctions_ext");
+
+               $theOutput="";
+               $menu="";
+               $menu.=  "&nbsp;".$LANG->getLL("chLog_menuUsers").": ".t3lib_BEfunc::getFuncMenu($this->pObj->id,"SET[log_users]",$this->pObj->MOD_SETTINGS["log_users"],$this->pObj->MOD_MENU["log_users"]);
+               $menu.=  "&nbsp;".$LANG->getLL("chLog_menuDepth").": ".t3lib_BEfunc::getFuncMenu($this->pObj->id,"SET[depth]",$this->pObj->MOD_SETTINGS["depth"],$this->pObj->MOD_MENU["depth"]);
+               $menu.=  "&nbsp;".$LANG->getLL("chLog_menuTime").": ".t3lib_BEfunc::getFuncMenu($this->pObj->id,"SET[log_time]",$this->pObj->MOD_SETTINGS["log_time"],$this->pObj->MOD_MENU["log_time"]);
+               $theOutput.=$this->pObj->doc->section($LANG->getLL("chLog_title"),'<span class="nobr">'.$menu.'</span>',0,1);
+
+               // Build query
+
+               $where_part="";
+
+               // Get the idlist of pages for the treestructure.
+               $tree = t3lib_div::makeInstance("t3lib_pageTree");
+               $tree->init("AND ".$this->pObj->perms_clause);
+               $tree->makeHTML=0;
+               $tree->fieldArray = Array("uid");
+               if ($this->pObj->MOD_SETTINGS["depth"]) {
+                       $tree->getTree($this->pObj->id, $this->pObj->MOD_SETTINGS["depth"], "");
+               }
+               $tree->ids[]=$this->pObj->id;
+               $idList = implode($tree->ids,",");
+
+               //$where_part.=" AND ((tablename='pages' and recuid in (".$idList.")) OR (tablename!='pages' and recpid in (".$idList.")))";            // DB
+               $where_part.=" AND (event_pid in (".$idList."))";               // DB
+
+               // Time:
+               $starttime=0;
+               $endtime=time();
+               switch($this->pObj->MOD_SETTINGS["log_time"])           {
+                       case 0:
+                               // This week
+                               $week = (date("w") ? date("w") : 7)-1;
+                               $starttime = mktime (0,0,0)-$week*3600*24;
+                       break;
+                       case 1:
+                               // Last week
+                               $week = (date("w") ? date("w") : 7)-1;
+                               $starttime = mktime (0,0,0)-($week+7)*3600*24;
+                               $endtime = mktime (0,0,0)-$week*3600*24;
+                       break;
+                       case 2:
+                               // Last 7 days
+                               $starttime = mktime (0,0,0)-7*3600*24;
+                       break;
+                       case 10:
+                               // This month
+                               $starttime = mktime (0,0,0, date("m"),1);
+                       break;
+                       case 11:
+                               // Last month
+                               $starttime = mktime (0,0,0, date("m")-1,1);
+                               $endtime = mktime (0,0,0, date("m"),1);
+                       break;
+                       case 12:
+                               // Last 31 days
+                               $starttime = mktime (0,0,0)-31*3600*24;
+                       break;
+               }
+               if ($starttime) {
+                       $where_part.=" AND tstamp>=".$starttime." AND tstamp<".$endtime;
+               }
+
+               $where_part.=" AND type=1";             // DB
+
+
+                       // Users
+               $this->pObj->be_user_Array = t3lib_BEfunc::getUserNames();
+               if (!$this->pObj->MOD_SETTINGS["log_users"])    {       // All users
+                               // Get usernames and groupnames
+                       if (!$GLOBALS["BE_USER"]->isAdmin())            {
+                               $groupArray = explode(",",$GLOBALS["BE_USER"]->user["usergroup_cached_list"]);
+                               $this->pObj->be_user_Array = t3lib_BEfunc::blindUserNames($this->pObj->be_user_Array,$groupArray,1);
+                       }
+
+                       if (is_array($this->pObj->be_user_Array))       {
+                               while(list(,$val)=each($this->pObj->be_user_Array))     {
+                                       $selectUsers[]=$val["uid"];
+                               }
+                       }
+                       $selectUsers[] = $GLOBALS["BE_USER"]->user["uid"];
+                       $where_part.=" AND userid in (".implode($selectUsers,",").")";
+               } else {
+                       $where_part.=" AND userid=".$GLOBALS["BE_USER"]->user["uid"];   // Self user
+               }
+
+
+
+
+
+               $log = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_log', '1=1'.$where_part, '', 'uid DESC', 100);
+
+               $codeArr = $lF->initArray();
+               $oldHeader = "";
+               while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($log))       {
+                       $header = $this->pObj->doc->formatTime($row["tstamp"],10);
+                       if (!$oldHeader)        $oldHeader = $header;
+
+                       if ($header!=$oldHeader)        {
+                               $theOutput.=$this->pObj->doc->spacer(10);
+                               $theOutput.=$this->pObj->doc->section($oldHeader,$this->pObj->doc->table($codeArr));
+                               $codeArr=$lF->initArray();
+                               $oldHeader=$header;
+                               $lF->reset();
+                       }
+
+                       $i++;
+                       $codeArr[$i][]=$lF->getTimeLabel($row["tstamp"]);
+                       $codeArr[$i][]=$lF->getUserLabel($row["userid"]);
+                       $codeArr[$i][]=$row["error"] ? $lF->getErrorFormatting($lF->errorSign[$row["error"]]) : "";
+                       $codeArr[$i][]=$lF->getActionLabel($row["type"]."_".$row["action"]);
+                       $codeArr[$i][]=$row["tablename"];
+                       $codeArr[$i][]=$lF->formatDetailsForList($row);
+               }
+               $theOutput.=$this->pObj->doc->spacer(10);
+               $theOutput.=$this->pObj->doc->section($header,$this->pObj->doc->table($codeArr));
+
+               $GLOBALS['TYPO3_DB']->sql_free_result($log);
+
+               return $theOutput;
+       }
+}
+
+if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/belog/class.tx_belog_webinfo.php"])   {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/belog/class.tx_belog_webinfo.php"]);
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/doc/TODO.txt b/typo3/sysext/belog/doc/TODO.txt
new file mode 100755 (executable)
index 0000000..44bd093
--- /dev/null
@@ -0,0 +1 @@
+BUG: No usernames shown in the log-listing
diff --git a/typo3/sysext/belog/ext_emconf.php b/typo3/sysext/belog/ext_emconf.php
new file mode 100755 (executable)
index 0000000..674bbb9
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+
+########################################################################
+# Extension Manager/Repository config file for ext: 'belog'
+# 
+# Auto generated 12-02-2003 21:18
+# 
+# Manual updates:
+# Only the data in the array - anything else is removed by next write
+########################################################################
+
+$EM_CONF[$_EXTKEY] = Array (
+       'title' => 'Tools>Log',
+       'description' => 'Displays backend log, both per page and systemwide. Available as the module Tools>Log (system wide overview) and Web>Info/Log (page relative overview).',
+       'category' => 'module',
+       'shy' => 1,
+       'dependencies' => '',
+       'conflicts' => '',
+       'priority' => '',
+       'module' => 'mod',
+       'state' => 'stable',
+       'internal' => 0,
+       'uploadfolder' => 0,
+       'createDirs' => '',
+       'modify_tables' => '',
+       'clearCacheOnLoad' => 0,
+       'lockType' => '',
+       'author' => 'Kasper Skårhøj',
+       'author_email' => 'kasperYYYY@typo3.com',
+       'author_company' => 'Curby Soft Multimedia',
+       'private' => 0,
+       'download_password' => '',
+       'version' => '0.0.6',   // Don't modify this! Managed automatically during upload to repository.
+       '_md5_values_when_last_written' => 'a:10:{s:26:"class.tx_belog_webinfo.php";s:4:"c127";s:12:"ext_icon.gif";s:4:"a61e";s:14:"ext_tables.php";s:4:"9933";s:13:"locallang.php";s:4:"68ae";s:13:"mod/clear.gif";s:4:"cc11";s:12:"mod/conf.php";s:4:"144d";s:13:"mod/index.php";s:4:"188a";s:17:"mod/locallang.php";s:4:"8bcd";s:21:"mod/locallang_mod.php";s:4:"c7d4";s:11:"mod/log.gif";s:4:"a61e";}',
+);
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/ext_icon.gif b/typo3/sysext/belog/ext_icon.gif
new file mode 100755 (executable)
index 0000000..afa5bb7
Binary files /dev/null and b/typo3/sysext/belog/ext_icon.gif differ
diff --git a/typo3/sysext/belog/ext_tables.php b/typo3/sysext/belog/ext_tables.php
new file mode 100755 (executable)
index 0000000..23dd975
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+if (!defined ('TYPO3_MODE'))   die ('Access denied.');
+
+if (TYPO3_MODE=='BE')  {
+       t3lib_extMgm::addModule('tools','log','',t3lib_extMgm::extPath($_EXTKEY).'mod/');
+       t3lib_extMgm::insertModuleFunction(
+               'web_info',
+               'tx_belog_webinfo',
+               t3lib_extMgm::extPath($_EXTKEY).'class.tx_belog_webinfo.php',
+               'Log'
+       );
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/locallang.php b/typo3/sysext/belog/locallang.php
new file mode 100755 (executable)
index 0000000..859e024
--- /dev/null
@@ -0,0 +1,349 @@
+<?php
+
+$LOCAL_LANG = Array (
+       'default' => Array (
+               'chLog_title' => 'Admin Changelog',
+               'chLog_users_0' => 'All users',
+               'chLog_users_-1' => 'Self',
+               'chLog_time_0' => 'This week',
+               'chLog_time_1' => 'Last week',
+               'chLog_time_2' => 'Last 7 days',
+               'chLog_time_10' => 'This month',
+               'chLog_time_11' => 'Last month',
+               'chLog_time_12' => 'Last 31 days',
+               'chLog_time_20' => 'No limit',
+               'chLog_l_time' => 'Time',
+               'chLog_l_user' => 'User',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Action',
+               'chLog_l_table' => 'Table',
+               'chLog_l_details' => 'Details',
+               'chLog_menuUsers' => 'Users',
+               'chLog_menuDepth' => 'Depth',
+               'chLog_menuTime' => 'Time',
+       ),
+       'dk' => Array (
+               'chLog_title' => 'Opdateringslog',
+               'chLog_users_0' => 'Alle brugere',
+               'chLog_users_-1' => 'Selv',
+               'chLog_time_0' => 'Denne uge',
+               'chLog_time_1' => 'Forrige uge',
+               'chLog_time_2' => 'Sidste 7 dage',
+               'chLog_time_10' => 'Denne måned',
+               'chLog_time_11' => 'Forrige måned',
+               'chLog_time_12' => 'Sidste 31 dage',
+               'chLog_time_20' => 'Ingen grænse',
+               'chLog_l_time' => 'Tid',
+               'chLog_l_user' => 'Bruger',
+               'chLog_l_error' => 'F',
+               'chLog_l_action' => 'Handling',
+               'chLog_l_table' => 'Tabel',
+               'chLog_l_details' => 'Detaljer',
+               'chLog_menuUsers' => 'Brugere',
+               'chLog_menuDepth' => 'Niveauer',
+               'chLog_menuTime' => 'Tid',
+       ),
+       'de' => Array (
+               'chLog_title' => 'Admin Changelog',
+               'chLog_users_0' => 'Alle Benutzer',
+               'chLog_users_-1' => 'Selbst',
+               'chLog_time_0' => 'Diese Woche',
+               'chLog_time_1' => 'Letzte Woche',
+               'chLog_time_2' => 'Letzten 7 Tage',
+               'chLog_time_10' => 'Diesen Monat',
+               'chLog_time_11' => 'Letzten Monat',
+               'chLog_time_12' => 'Letzte 31 Tage',
+               'chLog_time_20' => 'Ohne Begrenzung',
+               'chLog_l_time' => 'Zeit',
+               'chLog_l_user' => 'Benutzer',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Befehl',
+               'chLog_l_table' => 'Tabelle',
+               'chLog_l_details' => 'Details',
+               'chLog_menuUsers' => 'Benutzer',
+               'chLog_menuDepth' => 'Tiefe',
+               'chLog_menuTime' => 'Zeit',
+       ),
+       'no' => Array (
+               'chLog_title' => 'Oppdateringslogg',
+               'chLog_users_0' => 'Alle brukere',
+               'chLog_users_-1' => 'Selv',
+               'chLog_time_0' => 'Denne uken',
+               'chLog_time_1' => 'Forrige uke',
+               'chLog_time_2' => 'Siste 7 dager',
+               'chLog_time_10' => 'Denne måned',
+               'chLog_time_11' => 'Forrige måned',
+               'chLog_time_12' => 'Siste 31 dager',
+               'chLog_time_20' => 'Ingen begrensning',
+               'chLog_l_time' => 'Tid',
+               'chLog_l_user' => 'Bruker',
+               'chLog_l_error' => 'F',
+               'chLog_l_action' => 'Handling',
+               'chLog_l_table' => 'Tabell',
+               'chLog_l_details' => 'Detaljer',
+               'chLog_menuUsers' => 'Brukere',
+               'chLog_menuDepth' => 'Nivåer',
+               'chLog_menuTime' => 'Tid',
+       ),
+       'it' => Array (
+               'chLog_title' => 'Changelog dell\'amministratore',
+               'chLog_users_0' => 'Tutti gli utenti',
+               'chLog_users_-1' => 'Self',
+               'chLog_time_0' => 'Questa settimana',
+               'chLog_time_1' => 'Ultima settimana',
+               'chLog_time_2' => 'Ultimi sette giorni',
+               'chLog_time_10' => 'Questo mese',
+               'chLog_time_11' => 'Ultimo mese',
+               'chLog_time_12' => 'Ultimi 31 giorni',
+               'chLog_time_20' => 'Nessun limite',
+               'chLog_l_time' => 'Ora',
+               'chLog_l_user' => 'Utente',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Azione',
+               'chLog_l_table' => 'Tavola',
+               'chLog_l_details' => 'Dettagli',
+               'chLog_menuUsers' => 'Utenti',
+               'chLog_menuDepth' => 'Profondita',
+               'chLog_menuTime' => 'Ora',
+       ),
+       'fr' => Array (
+               'chLog_title' => 'Log des modification (Admin)',
+               'chLog_users_0' => 'Tous les utilisateurs',
+               'chLog_users_-1' => 'Personnel',
+               'chLog_time_0' => 'Cette semaine',
+               'chLog_time_1' => 'Dernière semaine',
+               'chLog_time_2' => 'Derniers 7 jours',
+               'chLog_time_10' => 'Ce mois',
+               'chLog_time_11' => 'Dernier mois',
+               'chLog_time_12' => 'Dernier 31 jours',
+               'chLog_time_20' => 'Pas de limite',
+               'chLog_l_time' => 'Temps',
+               'chLog_l_user' => 'Utilisateur',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Action',
+               'chLog_l_table' => 'Table',
+               'chLog_l_details' => 'Détails',
+               'chLog_menuUsers' => 'Utilisateurs',
+               'chLog_menuDepth' => 'Profondeur',
+               'chLog_menuTime' => 'Temps',
+       ),
+       'es' => Array (
+               'chLog_title' => 'Bitácora de cambios',
+               'chLog_users_0' => 'Todos los usuarios',
+               'chLog_users_-1' => 'Yo mismo',
+               'chLog_time_0' => 'Esta semana',
+               'chLog_time_1' => 'Semana pasada',
+               'chLog_time_2' => 'Últimos 7 días',
+               'chLog_time_10' => 'Este mes',
+               'chLog_time_11' => 'Mes pasado',
+               'chLog_time_12' => 'Últimos 31 días',
+               'chLog_time_20' => 'Sin límite',
+               'chLog_l_time' => 'Hora',
+               'chLog_l_user' => 'Usuario',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Acción',
+               'chLog_l_table' => 'Tabla',
+               'chLog_l_details' => 'Detalles',
+               'chLog_menuUsers' => 'Usuarios',
+               'chLog_menuDepth' => 'Profundidad',
+               'chLog_menuTime' => 'Hora',
+       ),
+       'nl' => Array (
+               'chLog_title' => 'Overzicht van wijzigingen',
+               'chLog_users_0' => 'Alle gebruikers',
+               'chLog_users_-1' => 'Zelf',
+               'chLog_time_0' => 'Deze week',
+               'chLog_time_1' => 'Vorige week',
+               'chLog_time_2' => 'Laatste zeven dagen',
+               'chLog_time_10' => 'Deze maand',
+               'chLog_time_11' => 'Vorige maand',
+               'chLog_time_12' => 'Laatste 31 dagen',
+               'chLog_time_20' => 'Geen limiet',
+               'chLog_l_time' => 'Tijd',
+               'chLog_l_user' => 'Gebruiker',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Actie',
+               'chLog_l_table' => 'Tabel',
+               'chLog_l_details' => 'Details',
+               'chLog_menuUsers' => 'Gebruikers',
+               'chLog_menuDepth' => 'Diepte',
+               'chLog_menuTime' => 'Tijd',
+       ),
+       'cz' => Array (
+               'chLog_title' => 'Admin záznam zmìn',
+               'chLog_users_0' => 'V\9aichni u\9eivatelé',
+               'chLog_users_-1' => 'Já',
+               'chLog_time_0' => 'Tento týten',
+               'chLog_time_1' => 'Minulý týden',
+               'chLog_time_2' => 'Posledních 7 dní',
+               'chLog_time_10' => 'Tento mìsíc',
+               'chLog_time_11' => 'Minulý mìsíc',
+               'chLog_time_12' => 'Posledních 31 dní',
+               'chLog_time_20' => '\8eádné omezení',
+               'chLog_l_time' => 'Èas',
+               'chLog_l_user' => 'U\9eivatel',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Akce',
+               'chLog_l_table' => 'Tabulka',
+               'chLog_l_details' => 'Detaily',
+               'chLog_menuUsers' => 'U\9eivatelé',
+               'chLog_menuDepth' => 'Hloubka',
+               'chLog_menuTime' => 'Èas',
+       ),
+       'pl' => Array (
+               'chLog_title' => 'Log zmian',
+               'chLog_users_0' => 'Zmiany wszystkich',
+               'chLog_users_-1' => 'Tylko moje',
+               'chLog_time_0' => 'Z tego tygodnia',
+               'chLog_time_1' => 'Zesz³ego tygodnia',
+               'chLog_time_2' => 'Ostatnich 7 dni',
+               'chLog_time_10' => 'Tego miesi±ca',
+               'chLog_time_11' => 'Zesz³ego miesi±ca',
+               'chLog_time_12' => 'Ostatnich 31 dni',
+               'chLog_time_20' => 'Bez ograniczenia',
+               'chLog_l_time' => 'Czas',
+               'chLog_l_user' => 'U¿ytkownik',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Akcja',
+               'chLog_l_table' => 'Tablica',
+               'chLog_l_details' => 'Szczegó³y',
+               'chLog_menuUsers' => 'U¿ytkownicy',
+               'chLog_menuDepth' => 'G³êboko¶æ',
+               'chLog_menuTime' => 'Czas',
+       ),
+       'si' => Array (
+               'chLog_title' => 'Dnevnik',
+               'chLog_users_0' => 'Vsi uporabniki',
+               'chLog_users_-1' => 'Jaz',
+               'chLog_time_0' => 'Ta teden',
+               'chLog_time_1' => 'Prej\9anji teden',
+               'chLog_time_2' => 'Zadnjih 7 dni',
+               'chLog_time_10' => 'Ta mesec',
+               'chLog_time_11' => 'Zadnji mesec',
+               'chLog_time_12' => 'Zadnjih 31 dni',
+               'chLog_time_20' => 'Brez omejitve',
+               'chLog_l_time' => 'Èas',
+               'chLog_l_user' => 'Uporabnik',
+               'chLog_l_error' => 'N',
+               'chLog_l_action' => 'Akcija',
+               'chLog_l_table' => 'Tabela',
+               'chLog_l_details' => 'Podrobnosti',
+               'chLog_menuUsers' => 'Uporabniki',
+               'chLog_menuDepth' => 'Globina',
+               'chLog_menuTime' => 'Èas',
+       ),
+       'fi' => Array (
+               'chLog_title' => 'Admin muutosloki',
+               'chLog_users_0' => 'Kaikki käyttäjät',
+               'chLog_users_-1' => 'Itse',
+               'chLog_time_0' => 'Tämä viikko',
+               'chLog_time_1' => 'Viime viikko',
+               'chLog_time_2' => 'Viimeiset 7 päivää',
+               'chLog_time_10' => 'Tämä kuukausi',
+               'chLog_time_11' => 'Viime kuukausi',
+               'chLog_time_12' => 'Viimeiset 31 päivää',
+               'chLog_time_20' => 'Ei rajoituksia',
+               'chLog_l_time' => 'Aika',
+               'chLog_l_user' => 'Käyttäjä',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Toiminta',
+               'chLog_l_table' => 'Taulu',
+               'chLog_l_details' => 'Yksityiskohdat',
+               'chLog_menuUsers' => 'Käyttäjät',
+               'chLog_menuDepth' => 'Syvyys',
+               'chLog_menuTime' => 'Aika',
+       ),
+       'tr' => Array (
+               'chLog_title' => 'Deðiþim logunun Yönetim',
+               'chLog_users_0' => 'Tüm kullanýcýlar',
+               'chLog_users_-1' => 'Kendi',
+               'chLog_time_0' => 'Bu hafta',
+               'chLog_time_1' => 'Geçen hafta',
+               'chLog_time_2' => 'Geçen 7 gün',
+               'chLog_time_10' => 'Bu ay',
+               'chLog_time_11' => 'Geçen ay',
+               'chLog_time_12' => 'Son 31 gün',
+               'chLog_time_20' => 'Limitsiz',
+               'chLog_l_time' => 'Zaman',
+               'chLog_l_user' => 'Kullanýý',
+               'chLog_l_error' => 'H',
+               'chLog_l_action' => 'Aksiyon',
+               'chLog_l_table' => 'Tablo',
+               'chLog_l_details' => 'Ayrýntýlar',
+               'chLog_menuUsers' => 'Kullanýcýlar',
+               'chLog_menuDepth' => 'Derinlik',
+               'chLog_menuTime' => 'Zaman',
+       ),
+       'se' => Array (
+               'chLog_title' => 'Admin-log över ändringar',
+               'chLog_users_0' => 'Alla användare',
+               'chLog_users_-1' => 'Själv',
+               'chLog_time_0' => 'Denna vecka',
+               'chLog_time_1' => 'Senaste vecka',
+               'chLog_time_2' => 'Senaste 7 dagar',
+               'chLog_time_10' => 'Denna månad',
+               'chLog_time_11' => 'Senaste månad',
+               'chLog_time_12' => 'Senaste 31 dagar',
+               'chLog_time_20' => 'Utan gräns',
+               'chLog_l_time' => 'Tid',
+               'chLog_l_user' => 'Användare',
+               'chLog_l_error' => 'FEL',
+               'chLog_l_action' => 'Händelse',
+               'chLog_l_table' => 'Tabell',
+               'chLog_l_details' => 'Detaljer',
+               'chLog_menuUsers' => 'Användare',
+               'chLog_menuDepth' => 'Djup',
+               'chLog_menuTime' => 'Tid',
+       ),
+       'pt' => Array (
+               'chLog_title' => 'Diário do Admin',
+               'chLog_users_0' => 'Todos os Utilizadores',
+               'chLog_users_-1' => 'Próprio',
+               'chLog_time_0' => 'Esta semana',
+               'chLog_time_1' => 'Última semana',
+               'chLog_time_2' => 'Últimos 7 dias',
+               'chLog_time_10' => 'Este mês',
+               'chLog_time_11' => 'Último mês',
+               'chLog_time_12' => 'Últimos 31 dias',
+               'chLog_time_20' => 'Sem limite',
+               'chLog_l_time' => 'Hora',
+               'chLog_l_user' => 'Utilizador',
+               'chLog_l_error' => 'Erro',
+               'chLog_l_action' => 'Acção',
+               'chLog_l_table' => 'Tabela',
+               'chLog_l_details' => 'Detalhes',
+               'chLog_menuUsers' => 'Utilizadores',
+               'chLog_menuDepth' => 'Profundidade',
+               'chLog_menuTime' => 'Horas',
+       ),
+       'ru' => Array (
+       ),
+       'ro' => Array (
+               'chLog_title' => 'Modificãri administrare',
+               'chLog_users_0' => 'Toþi utilizatorii',
+               'chLog_users_-1' => 'Sine',
+               'chLog_time_0' => 'Sãptãmîna aceasta',
+               'chLog_time_1' => 'Ultima sãptãmînã',
+               'chLog_time_2' => 'Ultimile 7 zile',
+               'chLog_time_10' => 'Luna aceasta',
+               'chLog_time_11' => 'Ultima lunã',
+               'chLog_time_12' => 'Ultimile 31 zile',
+               'chLog_time_20' => 'Fãrã limite',
+               'chLog_l_time' => 'Data',
+               'chLog_l_user' => 'Utilizator',
+               'chLog_l_error' => 'E',
+               'chLog_l_action' => 'Acþiune',
+               'chLog_l_table' => 'Tabel',
+               'chLog_l_details' => 'Detalii',
+               'chLog_menuUsers' => 'Utilizatori',
+               'chLog_menuDepth' => 'Adîncime',
+               'chLog_menuTime' => 'Data',
+       ),
+       'ch' => Array (
+       ),
+       'sk' => Array (
+       ),
+       'lt' => Array (
+       ),
+);
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/mod/clear.gif b/typo3/sysext/belog/mod/clear.gif
new file mode 100755 (executable)
index 0000000..9ed1269
Binary files /dev/null and b/typo3/sysext/belog/mod/clear.gif differ
diff --git a/typo3/sysext/belog/mod/conf.php b/typo3/sysext/belog/mod/conf.php
new file mode 100755 (executable)
index 0000000..0950744
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+define('TYPO3_MOD_PATH', 'sysext/belog/mod/');
+$BACK_PATH='../../../';
+
+$MLANG['default']['tabs_images']['tab'] = 'log.gif';
+$MLANG['default']['ll_ref']='LLL:EXT:belog/mod/locallang_mod.php';
+
+$MCONF['script']='index.php';
+$MCONF['access']='admin';
+$MCONF['name']='tools_log';
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/mod/index.php b/typo3/sysext/belog/mod/index.php
new file mode 100755 (executable)
index 0000000..8550e15
--- /dev/null
@@ -0,0 +1,304 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 1999-2004 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  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!
+***************************************************************/
+/**
+ * Module: Log-viewing
+ *
+ * This module lets you view the changelog.
+ *
+ * @author     Kasper Skårhøj <kasperYYYY@typo3.com>
+ */
+
+
+unset($MCONF);
+require ("conf.php");
+require ($BACK_PATH."init.php");
+require ($BACK_PATH."template.php");
+$LANG->includeLLFile("EXT:belog/mod/locallang.php");
+require_once (PATH_t3lib."class.t3lib_bedisplaylog.php");
+require_once (PATH_t3lib."class.t3lib_pagetree.php");
+
+$BE_USER->modAccess($MCONF,1);
+
+
+
+
+// ***************************
+// Script Classes
+// ***************************
+class SC_mod_tools_log_index {
+       var $MCONF=array();
+       var $MOD_MENU=array();
+       var $MOD_SETTINGS=array();
+       var $doc;
+
+       var $content;
+       var $lF;
+       var $be_user_Array;
+
+       function init() {
+               global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
+               $this->MCONF = $GLOBALS["MCONF"];
+
+               $this->lF = t3lib_div::makeInstance("t3lib_BEDisplayLog");
+               $this->menuConfig();
+
+               $this->doc = t3lib_div::makeInstance("noDoc");
+               $this->doc->backPath = $BACK_PATH;
+                               // JavaScript
+               $this->doc->JScode = '
+               <script language="javascript" type="text/javascript">
+                       script_ended = 0;
+                       function jumpToUrl(URL) {
+                               document.location = URL;
+                       }
+               </script>
+               ';
+               $this->doc->tableLayout = Array (
+                       "0" => Array (
+                               "0" => Array('<TD valign="top"><b>','</b></td>'),
+                               "defCol" => Array('<TD><img src="'.$this->doc->backPath.'clear.gif" width=10 height=1></td><td valign="top"><b>','</b></td>')
+                       ),
+                       "defRow" => Array (
+                               "0" => Array('<TD valign="top">','</td>'),
+                               "defCol" => Array('<TD><img src="'.$this->doc->backPath.'clear.gif" width=10 height=1></td><td valign="top">','</td>')
+                       )
+               );
+               $this->doc->form = '<form action="" method="post">';
+
+               $this->be_user_Array = t3lib_BEfunc::getUserNames();
+               $this->lF->be_user_Array = &$this->be_user_Array;
+       }
+       function menuConfig()   {
+               global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
+
+                       // MENU-ITEMS:
+                       // If array, then it's a selector box menu
+                       // If empty string it's just a variable, that'll be saved.
+                       // Values NOT in this array will not be saved in the settings-array for the module.
+               $this->MOD_MENU = array(
+                       "users" => array(
+                               0 => "All users",
+                               "-1" => "Self"
+                       ),
+                       "time" => array(
+                               0 => "This week",
+                               1 => "Last week",
+                               2 => "Last 7 days",
+                               10 => "This month",
+                               11 => "Last month",
+                               12 => "Last 31 days",
+                               20 => "No limit"
+                       ),
+                       "max" => array(
+                               20 => "20",
+                               50 => "50",
+                               100 => "100",
+                               200 => "200",
+                               500 => "500"
+                       ),
+                       "action" => array(
+                               0 => "All",
+                               1 => "Database",
+                               2 => "File",
+                               254 => "Settings",
+                               255 => "Login",
+                               "-1" => "Errors"
+                       )
+               );
+
+                       // Adding groups to the users_array
+               $groups = t3lib_BEfunc::getGroupNames();
+               if (is_array($groups))  {
+                       while(list(,$grVals)=each($groups))     {
+                               $this->MOD_MENU["users"][$grVals["uid"]] = "Group: ".$grVals["title"];
+                       }
+               }
+
+                       // CLEANSE SETTINGS
+               $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::_GP("SET"), $this->MCONF["name"]);
+       }
+       function main() {
+               global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
+
+               $this->content.=$this->doc->startPage("Administration log");
+               $this->content.=$this->doc->header("Administration log");
+               $this->content.=$this->doc->spacer(5);
+
+
+               // Example of a menu!
+                       $menuU= t3lib_BEfunc::getFuncMenu(0,"SET[users]",$this->MOD_SETTINGS["users"],$this->MOD_MENU["users"]);
+                       $menuM= t3lib_BEfunc::getFuncMenu(0,"SET[max]",$this->MOD_SETTINGS["max"],$this->MOD_MENU["max"]);
+                       $menuT= t3lib_BEfunc::getFuncMenu(0,"SET[time]",$this->MOD_SETTINGS["time"],$this->MOD_MENU["time"]);
+                       $menuA= t3lib_BEfunc::getFuncMenu(0,"SET[action]",$this->MOD_SETTINGS["action"],$this->MOD_MENU["action"]);
+
+
+                       $this->content.=$this->doc->section("",$this->doc->menuTable(
+                               array(
+                                       array(fw("Users:"),$menuU),
+                                       array(fw("Time:"),$menuT)
+                               ),
+                               array(
+                                       array(fw("Max:"),$menuM),
+                                       array(fw("Action:"),$menuA)
+                               )
+                       ));
+                       $this->content.=$this->doc->divider(5);
+
+
+               $codeArr = $this->lF->initArray();
+               $oldHeader="";
+               $c=0;
+
+               // Action (type):
+               $where_part="";
+               if ($this->MOD_SETTINGS["action"] > 0)  {
+                       $where_part.=" AND type=".intval($this->MOD_SETTINGS["action"]);
+               } elseif ($this->MOD_SETTINGS["action"] == -1)  {
+                       $where_part.=" AND error";
+               }
+
+
+               $starttime=0;
+               $endtime=time();
+
+               // Time:
+               switch($this->MOD_SETTINGS["time"])             {
+                       case 0:
+                               // This week
+                               $week = (date("w") ? date("w") : 7)-1;
+                               $starttime = mktime (0,0,0)-$week*3600*24;
+                       break;
+                       case 1:
+                               // Last week
+                               $week = (date("w") ? date("w") : 7)-1;
+                               $starttime = mktime (0,0,0)-($week+7)*3600*24;
+                               $endtime = mktime (0,0,0)-$week*3600*24;
+                       break;
+                       case 2:
+                               // Last 7 days
+                               $starttime = mktime (0,0,0)-7*3600*24;
+                       break;
+                       case 10:
+                               // This month
+                               $starttime = mktime (0,0,0, date("m"),1);
+                       break;
+                       case 11:
+                               // Last month
+                               $starttime = mktime (0,0,0, date("m")-1,1);
+                               $endtime = mktime (0,0,0, date("m"),1);
+                       break;
+                       case 12:
+                               // Last 31 days
+                               $starttime = mktime (0,0,0)-31*3600*24;
+                       break;
+               }
+               if ($starttime) {
+                       $where_part.=" AND tstamp>=".$starttime." AND tstamp<".$endtime;
+               }
+
+
+                       // Users
+               if ($this->MOD_SETTINGS["users"] > 0)   {       // All users
+                       $this->be_user_Array = t3lib_BEfunc::blindUserNames($this->be_user_Array,array($this->MOD_SETTINGS["users"]),1);
+                       if (is_array($this->be_user_Array))     {
+                               while(list(,$val)=each($this->be_user_Array))   {
+                                       if ($val[uid]!=$BE_USER->user[uid])     {
+                                               $selectUsers[]=$val[uid];
+                                       }
+                               }
+                       }
+                       $selectUsers[] = 0;
+                       $where_part.=" AND userid in (".implode($selectUsers,",").")";
+               } elseif ($this->MOD_SETTINGS["users"]==-1) {
+                       $where_part.=" AND userid=".$BE_USER->user[uid];        // Self user
+               }
+
+
+
+
+               $log = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_log', '1=1'.$where_part, '', 'uid DESC', intval($this->MOD_SETTINGS['max']));
+
+               while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($log))       {
+                       $header=$this->doc->formatTime($row[tstamp],10);
+                       if (!$oldHeader)        $oldHeader=$header;
+
+                       if ($header!=$oldHeader)        {
+                               $this->content.=$this->doc->spacer(10);
+                               $this->content.=$this->doc->section($oldHeader,$this->doc->table($codeArr));
+                               $codeArr=$this->lF->initArray();
+                               $oldHeader=$header;
+                               $this->lF->reset();
+                       }
+
+                       $i++;
+                       $codeArr[$i][]=$this->lF->getTimeLabel($row[tstamp]);
+                       $codeArr[$i][]=$this->lF->getUserLabel($row[userid]);
+                       $codeArr[$i][]=$this->lF->getTypeLabel($row[type]);
+                       $codeArr[$i][]=$row[error] ? $this->lF->getErrorFormatting($this->lF->errorSign[$row[error]]) : "";
+                       $codeArr[$i][]=$this->lF->getActionLabel($row[type]."_".$row[action]);
+                       $codeArr[$i][]=$this->lF->formatDetailsForList($row);
+               }
+               $this->content.=$this->doc->spacer(10);
+               $this->content.=$this->doc->section($header,$this->doc->table($codeArr));
+
+               $GLOBALS['TYPO3_DB']->sql_free_result($log);
+
+               if ($BE_USER->mayMakeShortcut())        {
+                       $this->content.=$this->doc->spacer(20).$this->doc->section('',$this->doc->makeShortcutIcon("","users,time,max,action",$this->MCONF["name"]));
+               }
+
+       }
+       function printContent() {
+
+               $this->content.=$this->doc->spacer(20);
+               $this->content.=$this->doc->endPage();
+               echo $this->content;
+       }
+}
+
+// Include extension?
+if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/belog/mod/index.php"])        {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/belog/mod/index.php"]);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+// Make instance:
+$SOBE = t3lib_div::makeInstance("SC_mod_tools_log_index");
+$SOBE->init();
+$SOBE->main();
+$SOBE->printContent();
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/mod/locallang.php b/typo3/sysext/belog/mod/locallang.php
new file mode 100755 (executable)
index 0000000..4d62007
--- /dev/null
@@ -0,0 +1,435 @@
+<?php
+
+$LOCAL_LANG = Array (
+       'default' => Array (
+               'type_1' => 'DB',
+               'action_1_1' => 'Insert',
+               'action_1_2' => 'Update',
+               'action_1_3' => 'Delete',
+               'action_1_4' => 'Check',
+               'msg_1_0_1' => 'Referer host \'%s\' and server host \'%s\' did not match!',
+               'msg_1_1_11' => 'Attempt to insert record on page \'%s\' (%s) where this table, %s, is not allowed',
+               'msg_1_1_12' => 'Attempt to insert a record on page \'%s\' (%s) from table \'%s\' without permissions. Or non-existing page.',
+               'msg_1_2_1' => 'Attempt to modify table \'%s\' without permission',
+               'msg_1_2_2' => 'Attempt to modify record \'%s\' (%s) without permission. Or non-existing page.',
+               'msg_1_2_10' => 'Record \'%s\' (%s) was updated.',
+               'msg_1_2_12' => 'MySQL error: \'%s\' (%s)',
+               'msg_1_4_1' => 'Attempt to move record \'%s\' (%s) to after a non-existing record (uid=%s)',
+               'msg_1_4_2' => 'Moved record \'%s\' (%s) to page \'%s\' (%s)',
+               'msg_1_4_3' => 'Moved record \'%s\' (%s) from page \'%s\' (%s)',
+               'msg_1_4_4' => 'Moved record \'%s\' (%s) on page \'%s\' (%s)',
+               'msg_1_4_10' => 'Attempt to move page \'%s\' (%s) to inside of its own rootline (at page \'%s\' (%s))',
+               'msg_1_4_11' => 'Attempt to insert record on page \'%s\' (%s) where this table, %s, is not allowed',
+               'msg_1_4_12' => 'Attempt to insert a record on page \'%s\' (%s) from table \'%s\' without permissions. Or non-existing page.',
+               'msg_1_4_13' => 'Attempt to move record \'%s\' (%s) to after another record, although the table has no sorting row.',
+               'msg_1_4_14' => 'Attempt to move record \'%s\' (%s) without having permissions to do so',
+               'msg_1_5_1' => 'You cannot change the \'doktype\' of page \'%s\' to the desired value.',
+               'msg_1_5_2' => '\'doktype\' of page \'%s\' could not be changed because the page contains records from disallowed tables; %s',
+               'msg_1_5_3' => 'Too few items in the list of values. (%s)',
+               'msg_1_5_10' => 'Could not delete file \'%s\' (does not exist). (%s)',
+               'msg_1_5_11' => 'Copying file \'%s\' failed!: No destination file (%s) possible!. (%s)',
+               'msg_1_5_12' => 'Fileextension \'%s\' not allowed. (%s)',
+               'msg_1_5_13' => 'Filesize (%s) of file \'%s\' exceeds limit (%s). (%s)',
+               'msg_1_5_14' => 'The destination (%s) or the source file (%s) does not exist. (%s)',
+               'msg_1_5_15' => 'Copying to file \'%s\' failed! (%s)',
+               'msg_1_5_16' => 'Copying file \'%s\' failed!: The destination path (%s) may be write protected. Please make it write enabled!. (%s)',
+               'type_2' => 'FILE',
+               'action_2_1' => 'Upload',
+               'action_2_2' => 'Copy',
+               'action_2_3' => 'Move',
+               'action_2_4' => 'Delete',
+               'action_2_5' => 'Rename',
+               'action_2_6' => 'New',
+               'action_2_7' => 'Unzip',
+               'action_2_8' => 'New file',
+               'action_2_9' => 'Edit',
+               'msg_2_9_1' => 'File saved to \'%s\', bytes: %s, MD5: %s ',
+               'type_254' => 'SETTING',
+               'action_254_1' => 'Change',
+               'type_255' => 'LOGIN',
+               'action_255_1' => 'LOGIN',
+               'action_255_2' => 'LOGOUT',
+               'action_255_3' => 'ATTEMPT',
+       ),
+       'dk' => Array (
+               'msg_1_2_10' => 'Elementet \'%s\' (\'%s:%s\') er opdateret.',
+               'msg_2_9_1' => 'Fil \'%s\' gemt, bytes: %s, MD5: %s ',
+       ),
+       'de' => Array (
+               'type_1' => 'DB',
+               'action_1_1' => 'Einfügen',
+               'action_1_2' => 'Aktualisieren',
+               'action_1_3' => 'Löschen',
+               'action_1_4' => 'Prüfen',
+               'msg_1_2_12' => 'MySQL-Fehler: \'%s\' (%s)',
+               'msg_1_4_2' => 'Datensatz \'%s\' (%s) verschoben auf Seite \'%s\' (%s)',
+               'msg_1_4_3' => 'Datensatz \'%s\' (%s) verschoben von Seite \'%s\' (%s)',
+               'msg_1_4_4' => 'Datensatz \'%s\' (%s) verschoben innerhalb der Seite \'%s\' (%s)',
+               'msg_1_5_12' => 'Dateiendung \'%s\' nicht erlaubt. (%s)',
+               'msg_1_5_13' => 'Dateigrösse (%s) von Datei \'%s\' erreicht Limit (%s). (%s)',
+               'type_2' => 'DATEI',
+               'action_2_1' => 'Hochladen',
+               'action_2_2' => 'Kopieren',
+               'action_2_3' => 'Verschieben',
+               'action_2_4' => 'Löschen',
+               'action_2_5' => 'Umbenennen',
+               'action_2_6' => 'Neu',
+               'action_2_7' => 'Dekomprimieren',
+               'action_2_8' => 'Neue Datei',
+               'action_2_9' => 'Bearbeiten',
+               'msg_2_9_1' => 'Datei gespeichert unter \'%s\', Grösse: %s Bytes, MD5: %s',
+               'type_254' => 'EINSTELLUNGEN',
+               'action_254_1' => 'Ändern',
+               'type_255' => 'LOGIN',
+               'action_255_1' => 'LOGIN',
+               'action_255_2' => 'LOGOUT',
+       ),
+       'no' => Array (
+       ),
+       'it' => Array (
+               'type_1' => 'DB',
+               'type_2' => 'File',
+               'action_2_1' => 'Invia',
+               'action_2_2' => 'Copia',
+               'action_2_3' => 'Muovi',
+               'action_2_4' => 'Cancella',
+               'action_2_5' => 'Rinomina',
+               'action_2_6' => 'Nuovo',
+               'action_2_7' => 'Unzip',
+               'type_254' => 'Configurazione',
+               'action_254_1' => 'Cambio',
+               'type_255' => 'Login',
+               'action_255_1' => 'Login',
+               'action_255_2' => 'Uscita',
+               'action_255_3' => 'Tentativo',
+       ),
+       'fr' => Array (
+               'type_1' => 'BD',
+               'action_1_1' => 'Insérer',
+               'action_1_2' => 'Mettre à jour',
+               'action_1_3' => 'Supprimer',
+               'action_1_4' => 'Contrôler',
+               'type_2' => 'FICHIER',
+               'action_2_1' => 'Charger',
+               'action_2_2' => 'Copier',
+               'action_2_3' => 'Déplacer',
+               'action_2_4' => 'Supprimer',
+               'action_2_5' => 'Renommer',
+               'action_2_6' => 'Nouveau',
+               'action_2_7' => 'Décompresser',
+               'action_2_8' => 'Nouveau fichier',
+               'action_2_9' => 'Editer',
+               'type_254' => 'CONFIGURATION',
+               'action_254_1' => 'Changement',
+               'type_255' => 'ENTRER',
+               'action_255_1' => 'ENTRER',
+               'action_255_2' => 'SORTIR',
+               'action_255_3' => 'SORTIR',
+       ),
+       'es' => Array (
+       ),
+       'nl' => Array (
+       ),
+       'cz' => Array (
+               'type_1' => 'DB',
+               'action_1_1' => 'Vlo\9eení',
+               'action_1_2' => 'Aktualizace',
+               'action_1_3' => 'Odstranìní',
+               'action_1_4' => 'Kontrola',
+               'msg_1_2_10' => 'Záznam \'%s\' (%s) byl aktualizován.',
+               'type_2' => 'SOUBOR',
+               'action_2_1' => 'Upload',
+               'action_2_2' => 'Kopie',
+               'action_2_3' => 'Pøesun',
+               'action_2_4' => 'Odstranìní',
+               'action_2_5' => 'Pøejmenování',
+               'action_2_6' => 'Nový',
+               'action_2_7' => 'Unzip',
+               'action_2_8' => 'Nový soubor',
+               'action_2_9' => 'Upravit',
+               'msg_2_9_1' => 'Soubor ulo\9een do \'%s\', bytù: %s, MD5: %s',
+               'type_254' => 'NASTAVENÍ',
+               'action_254_1' => 'Zmìna',
+               'type_255' => 'LOGIN',
+               'action_255_1' => 'LOGIN',
+               'action_255_2' => 'LOGOUT',
+               'action_255_3' => 'POKUS',
+       ),
+       'pl' => Array (
+               'type_1' => 'DB',
+               'action_1_1' => 'Wstawienie',
+               'action_1_2' => 'Aktualizacja',
+               'action_1_3' => 'Usuniêcie',
+               'action_1_4' => 'Sprawdzenie',
+               'msg_1_2_10' => 'Rekord \'%s\' (%s) zosta³ zmieniony.',
+               'type_2' => 'FILE',
+               'action_2_1' => 'Upload',
+               'action_2_2' => 'Kopiowanie',
+               'action_2_3' => 'Przeniesienie',
+               'action_2_4' => 'Usuniêcie',
+               'action_2_5' => 'Zmiana nazwy',
+               'action_2_6' => 'Stworzenie nowego',
+               'action_2_7' => 'Rozpakowanie',
+               'action_2_8' => 'Nowy plik',
+               'action_2_9' => 'Edycja',
+               'msg_2_9_1' => 'Plik zapisany w \'%s\', bajtów: %s, MD5: %s',
+               'type_254' => 'USTAWIENIE',
+               'action_254_1' => 'Zmiana',
+               'type_255' => 'LOGIN',
+               'action_255_1' => 'LOGIN',
+               'action_255_2' => 'LOGOUT',
+               'action_255_3' => 'PRÓBA',
+       ),
+       'si' => Array (
+               'type_1' => 'BAZA',
+               'action_1_1' => 'Vstavi',
+               'action_1_2' => 'Posodobi',
+               'action_1_3' => 'Bri\9ai',
+               'action_1_4' => 'Preveri',
+               'msg_1_2_10' => 'Zapis \'%s\' (%s) je bil posodobljen.',
+               'type_2' => 'DATOTEKA',
+               'action_2_1' => 'Prenesi',
+               'action_2_2' => 'Kopiraj',
+               'action_2_3' => 'Premakni',
+               'action_2_4' => 'Bri\9ai',
+               'action_2_5' => 'Preimenuj',
+               'action_2_6' => 'Nova',
+               'action_2_7' => 'Unzip',
+               'type_254' => 'NASTAVITVE',
+               'action_254_1' => 'Spremeni',
+               'type_255' => 'PRIJAVA',
+               'action_255_1' => 'PRIJAVA',
+               'action_255_2' => 'ODJAVA',
+               'action_255_3' => 'POSKUS',
+       ),
+       'fi' => Array (
+               'type_1' => 'DB',
+               'action_1_1' => 'Lisää',
+               'action_1_2' => 'Päivitä',
+               'action_1_3' => 'Poista',
+               'action_1_4' => 'Tarkista',
+               'msg_1_0_1' => 'Referer host \'%s\' ja server host \'%s\' eivät vastaa toisiaan!',
+               'msg_1_1_11' => 'Yritys lisätä tietuetta sivulle \'%s\' (%s) jossa taulu, %s, ei ole sallittua',
+               'msg_1_1_12' => 'Yritys lisätä tietuetta sivulle \'%s\' (%s) taulusta \'%s\' ilman oikeuksia. Tai sivu jota ei ole.',
+               'msg_1_2_1' => 'Yritys muokata taulua \'%s\' ilman oikeuksia.',
+               'msg_1_2_2' => 'Yritys muokata tietuetta \'%s\' (%s) ilman oikeuksia. Tai sivu jota ei ole.',
+               'msg_1_2_10' => 'Tietue \'%s\' (%s) päivitettiin.',
+               'msg_1_2_12' => 'MySQL virhe: \'%s\' (%s)',
+               'msg_1_4_1' => 'Yritys siirtää tietuetta \'%s\' (%s) olemattoman tiedon jälkeiseksi (uid=%s)',
+               'msg_1_4_2' => 'Siirretty tietue \'%s\' (%s) sivulle \'%s\' (%s)',
+               'msg_1_4_3' => 'Siirretty tietue \'%s\' (%s) sivulta \'%s\' (%s)',
+               'msg_1_4_4' => 'Siirretty tietue \'%s\' (%s) sivulla \'%s\' (%s)',
+               'msg_1_4_10' => 'Yritys siirtäää sivu \'%s\' (%s) sen oman juuren sisälle (sivulla \'%s\' (%s))',
+               'msg_1_4_11' => 'Yritys lisätä tietue sivulle \'%s\' (%s) jossa on taulu, %s, ei ole sallittua',
+               'msg_1_4_12' => 'Yritys lisätä tietuetta sivulle \'%s\' (%s) taulusta \'%s\' ilman oikeuksia. Tai sivu jota ei ole.',
+               'msg_1_4_13' => 'Yritys siirtää tietuetta \'%s\' (%s) toisen tietueen jälkeiseksi, vaikkei taulussa ole lajittelu riviä.',
+               'msg_1_4_14' => 'Yritys siirtää tietuetta \'%s\' (%s) ilman oikeuksia tehdä sitä.',
+               'msg_1_5_1' => 'Et voi muuttaa sivun \'doktype\'  \'%s\' haluamaasi arvoon.',
+               'msg_1_5_2' => 'Sivun \'doktype\' \'%s\' ei voitu muuttaa koska sivu sisältää tietueita pois rajatuista tauluista; %s',
+               'msg_1_5_3' => 'Liian vähän muuttujia arvolistassa. (%s)',
+               'msg_1_5_10' => 'Tiedostoa \'%s\' ei voitu poistaa (ei ole olemassa). (%s)',
+               'msg_1_5_11' => 'Tiedoston \'%s\' kopiointi epäonnistui!: Ei kohdetiedosto (%s) mahdollisuutta!. (%s)',
+               'msg_1_5_12' => 'Tiedostolaji(pääte) \'%s\' ei sallittu. (%s)',
+               'msg_1_5_13' => 'Koko (%s) tiedostossa \'%s\' ylittää rajat (%s). (%s)',
+               'msg_1_5_14' => 'Kohde- (%s) tai lähdetiedostoa (%s) ei ole olemassa. (%s)',
+               'msg_1_5_15' => 'Kopiointi tiedostoon \'%s\' epäonnistui! (%s)',
+               'msg_1_5_16' => 'Tiedoston \'%s\' kopiointi epäonnistui!: Kohteen polku (%s) voi olla kirjoitussuojattu. Ole hyvä ja tee se kirjoituksen sallivaksi!. (%s)',
+               'type_2' => 'Tiedosto',
+               'action_2_1' => 'Vie',
+               'action_2_2' => 'Kopioi',
+               'action_2_3' => 'Siirrä',
+               'action_2_4' => 'Poista',
+               'action_2_5' => 'Nimeä uudelleen',
+               'action_2_6' => 'Uusi',
+               'action_2_7' => 'Pura (unzip)',
+               'action_2_8' => 'Uusi tiedosto',
+               'action_2_9' => 'Muokkaa',
+               'msg_2_9_1' => 'Tiedosto tallennettiin %s\', tavuja %s, MD5: %s',
+               'type_254' => 'Asetukset',
+               'action_254_1' => 'Muuta',
+               'type_255' => 'Sisäänkijoitus',
+               'action_255_1' => 'Sisäänkirjoitus',
+               'action_255_2' => 'Kirjottaudu ulos',
+               'action_255_3' => 'Yritys',
+       ),
+       'tr' => Array (
+               'type_1' => 'VB',
+               'action_1_1' => 'Ekle',
+               'action_1_2' => 'Güncelle',
+               'action_1_3' => 'Sil',
+               'action_1_4' => 'Kontrol et',
+               'msg_1_0_1' => 'Referer host \'%s\' ve sunucu host \'%s\' eþleþtirilemedi!',
+               'msg_1_1_11' => 'Sayfa üzerinde kayýt eklemeyi dene \'%s\' (%s) bu tablonun, %s, izin verilmediði aralýkta',
+               'msg_1_1_12' => 'Sayfa üzerinde bir kayýt eklemeyi dene \'%s\' (%s) tablodan \'%s\' izinsiz. Veya sayfa var olmaksýzýn.',
+               'msg_1_2_1' => 'Tabloyu modifiye etmeyi dene \'%s\' izinsiz',
+               'msg_1_2_2' => 'Kayýtý modifiye etmeyi dene \'%s\' (%s) izinsiz. Veya sayfa var olmaksýzýn.',
+               'msg_1_2_10' => 'Kayýt \'%s\' (%s) güncellendi.',
+               'msg_1_2_12' => 'MySQL hata: \'%s\' (%s)',
+               'msg_1_4_1' => 'Kayýtý taþýmayý dene \'%s\' (%s) sonraki var olmayan kayýta (uid=%s)',
+               'msg_1_4_2' => 'Kayýt taþýndý \'%s\' (%s) sayfaya \'%s\' (%s)',
+               'msg_1_4_3' => 'Kayýt taþýndý \'%s\' (%s) sayfadan \'%s\' (%s)',
+               'msg_1_4_4' => 'Kayýt taþýndý \'%s\' (%s) sayfa üzerine \'%s\' (%s)',
+               'msg_1_4_10' => 'Sayfayý taþýmayý dene \'%s\' (%s) kendi kökçizgisinin içine (sayfada \'%s\' (%s))',
+               'msg_1_4_11' => 'Sayfa üzerinde kayýt eklemeyi dene \'%s\' (%s) bu tablonun, %s, izin verilmediði aralýkta',
+               'msg_1_4_12' => 'Sayfa üzerinde bir kayýt eklemeyi dene \'%s\' (%s) tablodan \'%s\' izinsiz. Veya sayfa var olmaksýzýn.',
+               'msg_1_4_13' => 'Kayýtý taþýmayý dene \'%s\' (%s) sonraki baþka kayýta, yine de tablo satýrý olmadan.',
+               'msg_1_4_14' => 'Kayýtý taþýmayý dene \'%s\' (%s) bunu yapmayý saðlayan izinlere sahip olmadan',
+               'msg_1_5_1' => 'doktype\' sayfasýnýn arzu edilen deðerini\'%s\' deðiþtiemezsiniz.',
+               'msg_1_5_2' => '\'doktype\' sayfasý \'%s\' deðiþtirilemez çünkü sayfa içerik kayýtlarý izin alýnmayan tablolardan saðlanýyor; %s',
+               'msg_1_5_3' => 'Deðerlerin listelenmesinde çok az nesne var. (%s)',
+               'msg_1_5_10' => 'Silinemeyen dosya \'%s\' (mevcut deðil). (%s)',
+               'msg_1_5_11' => 'Kopyalanan dosya \'%s\' hatalý!: Herhangi bir hedef dosya (%s) olanaklý deðil!. (%s)',
+               'msg_1_5_12' => 'Dosya uzantýsý \'%s\' izin verilmedi. (%s)',
+               'msg_1_5_13' => 'Dosya ebatý (%s) dosyanýn \'%s\' limitini aþýyor (%s). (%s)',
+               'msg_1_5_14' => 'Hedef (%s) veya kaynak dosya (%s) mevcut deðil. (%s)',
+               'msg_1_5_15' => 'Kopyalanan dosya \'%s\' hatalý! (%s)',
+               'msg_1_5_16' => 'Kopyalanan dosya \'%s\' hatalý!: Hedef yolu (%s) yazmaya karþý korumalý olabilir. Lütfen yazýlabilir duruma çevirin!. (%s)',
+               'type_2' => 'DOSYA',
+               'action_2_1' => 'Yükleme',
+               'action_2_2' => 'Kopyala',
+               'action_2_3' => 'Taþý',
+               'action_2_4' => 'Sil',
+               'action_2_5' => 'Yeniden adlandýr',
+               'action_2_6' => 'Yeni',
+               'action_2_7' => 'Sýkýþtýrýlmýþ dosyayý aç',
+               'action_2_8' => 'Yeni dosya',
+               'action_2_9' => 'Düzenle',
+               'msg_2_9_1' => 'Dosyayý kaydet \'%s\', bytelara: %s, MD5: %s ',
+               'type_254' => 'AYAR',
+               'action_254_1' => 'Deðiþtir',
+               'type_255' => 'GÝRÝÞ',
+               'action_255_1' => 'GÝRÝÞ',
+               'action_255_2' => 'ÇIKIÞ',
+               'action_255_3' => 'DENE',
+       ),
+       'se' => Array (
+               'type_1' => 'DB',
+               'action_1_1' => 'Infoga',
+               'action_1_2' => 'Uppdatera',
+               'action_1_3' => 'Radera',
+               'action_1_4' => 'Kontrollera',
+               'msg_1_0_1' => 'Refererad host \'%s\' och serverhost stämmer inte överens!',
+               'msg_1_1_11' => 'Försöket att lägga till ett element på sidan \'%s\' (%s) var tabellen \'%s\' finns, är inte tillåtet',
+               'msg_1_1_12' => 'Försöket att lägga till ett element på sidan \'%s\' (%s) från tabell \'%s\' är utan rättigheter. Eller så finns inte sidan.',
+               'msg_1_2_1' => 'Inga rättigheter att ändra tabellen \'%s\'.',
+               'msg_1_2_2' => 'Inga rättigheter att ändra elementet \'%s\'. Eller så finns inte sidan.',
+               'msg_1_2_10' => 'Elementet \'%s\' (%s) uppdaterat.',
+               'msg_1_2_12' => 'MySQL -fel: \'%s\' (%s)',
+               'msg_1_4_1' => 'Försök att flytta elementet \'%s\' (%s) till en plats efter ett element som inte finns (uid=%s)',
+               'msg_1_4_2' => 'Flyttat elementet \'%s\' (%s) till sidan \'%s\' (%s)',
+               'msg_1_4_3' => 'Flyttat elementet \'%s\' (%s) från sidan \'%s\' (%s)',
+               'msg_1_4_4' => 'Flyttat elementet \'%s\' (%s) på sidan \'%s\' (%s)',
+               'msg_1_4_10' => 'Försöket att flytta sidan \'%s\' (%s) innanför sidans egen rotlinje (på sidan \'%s\' (%s))',
+               'msg_1_4_11' => 'Försök att infoga element på sidan \'%s\' (%s) var tabellen %s finns, är inte tillåtet',
+               'msg_1_4_12' => 'Försöket att lägga till ett element på sidan \'%s\' (%s) från tabell \'%s\' utan rättigheter. Eller så finns inte sidan.',
+               'msg_1_4_13' => 'Försök att flytta elementet \'%s\' (%s) till en plats efter ett annat element trots att tabellen inte har sorteringsrad.',
+               'msg_1_4_14' => 'Försök att flytta elementet \'%s\' (%s) utan att ha rättigheter till det.',
+               'msg_1_5_1' => 'Det går inte att ändra sidans \'doktyp\' till det önskade.',
+               'msg_1_5_2' => '\'%s\' -sidans \'doktyp\' kunde inte ändras eftersom sidan innehåller element från förbjudna tabeller; %s',
+               'msg_1_5_3' => 'För lite artiklar i listan över värden. (%s)',
+               'msg_1_5_10' => 'Kunde inte radera filen \'%s\' (filen existerar inte). (%s)',
+               'msg_1_5_11' => 'Kopieringen av filen \'%s\' misslyckades! Ingen möjlig målfil (%s)! (%s)',
+               'msg_1_5_12' => 'Fil-extensionen \'%s\' får inte användas. (%s)',
+               'msg_1_5_13' => 'Filen \'%s\':s filstorlek (%s) överskrider maxstorleken (%s). (%s)',
+               'msg_1_5_14' => 'Målfilen (%s) eller källfilen (%s) existerar inte. (%s)',
+               'msg_1_5_15' => 'Misslyckades att kopiera till filen \'%s\'! (%s)',
+               'msg_1_5_16' => 'Kopiering av filen \'%s\' misslyckades! Målstigen (%s) kan vara skrivskyddad. Vänligen ändra skrivskyddet! (%s)',
+               'type_2' => 'FIL',
+               'action_2_1' => 'Uppladdning',
+               'action_2_2' => 'Kopiera',
+               'action_2_3' => 'Flytta',
+               'action_2_4' => 'Radera',
+               'action_2_5' => 'Nytt namn',
+               'action_2_6' => 'Ny',
+               'action_2_7' => 'Packa upp',
+               'action_2_8' => 'Ny fil',
+               'action_2_9' => 'Ändra',
+               'msg_2_9_1' => 'Filen sparad i \'%s\', storlek: %s, MD5: %s',
+               'type_254' => 'INSTÄLLNING',
+               'action_254_1' => 'Ändra',
+               'type_255' => 'LOGGA IN',
+               'action_255_1' => 'LOGGA IN',
+               'action_255_2' => 'LOGGA UT',
+               'action_255_3' => 'FÖRSÖK',
+       ),
+       'pt' => Array (
+               'type_1' => 'BD',
+               'action_1_1' => 'Inserir',
+               'action_1_2' => 'Actualizar',
+               'action_1_3' => 'Apagar',
+               'action_1_4' => 'Verificar',
+               'msg_1_0_1' => 'Hospedeiro referência \'%s\' e servidor hospedeiro \'%s\' não coincidem!',
+               'msg_1_1_11' => 'Tentativa de inserir registo na página \'%s\' (%s) onde a tabela %s não é permitida',
+               'msg_1_1_12' => 'Tentativa de inserir um registo na página \'%s\' (%s) da tabela \'%s\' sem permissões. Ou página inexistente.',
+               'msg_1_2_1' => 'Tentativa de modificar tabela \'%s\' sem permissão',
+               'msg_1_2_2' => 'Tentativa de modificar registo \'%s\' (%s) sem permissão. Ou página inexistente.',
+               'msg_1_2_10' => 'Registo \'%s\' (%s) foi actualizado.',
+               'msg_1_2_12' => 'Erro MySQL: \'%s\' (%s)',
+               'msg_1_4_1' => 'Tentativa de mover registo \'%s\' (%s) para depois de um registo inexistente (uid=%s)',
+               'msg_1_4_2' => 'Movido o registo \'%s\' (%s) para a página \'%s\' (%s)',
+               'msg_1_4_3' => 'Movido o registo \'%s\' (%s) da página \'%s\' (%s)',
+               'msg_1_4_4' => 'Movido o registo \'%s\' (%s) na página \'%s\' (%s)',
+               'msg_1_4_10' => 'Tentativa de mover página \'%s\' (%s) para dentro da sua própria raíz (na página \'%s\' (%s))',
+               'msg_1_4_11' => 'Tentativa de inserir registo na página \'%s\' (%s) onde a tabela %s não é permitida',
+               'msg_1_4_12' => 'Tentativa de inserir um registo na página \'%s\' (%s) a partir da tabela \'%s\' sem permissão. Ou página inexistente.',
+               'msg_1_4_13' => 'Tentativa de mover o registo \'%s\' (%s) para depois de outro registo, contudo a tabela não tem linha de ordenação.',
+               'msg_1_4_14' => 'Tentativa de mover registo \'%s\' (%s) sem ter permissões para o efectuar',
+               'msg_1_5_1' => 'Não pode alterar o \'doktype\' da página \'%s\' para o valor desejado.',
+               'msg_1_5_2' => '\'doktype\' da página \'%s\' não pode ser alterado porque a mesma contém registos de tabelas não permitidas; %s',
+               'msg_1_5_3' => 'Muito poucos items na list de valores. (%s)',
+               'msg_1_5_10' => 'Impossível remover ficheiro \'%s\' (não existe). (%s)',
+               'msg_1_5_11' => 'Cópia do ficheiro \'%s\' falhou! Nenhum ficheiro (%s) destino possível! (%s)',
+               'msg_1_5_12' => 'Extensão \'%s\' não autorizada. (%s)',
+               'msg_1_5_13' => 'Tamanho (%s) do ficheiro \'%s\' excede limite (%s). (%s)',
+               'msg_1_5_14' => 'O destino (%s) ou o ficheiro fonte (%s) não existe. (%s)',
+               'msg_1_5_15' => 'Cópia do ficheiro \'%s\' falhou! (%s)',
+               'msg_1_5_16' => 'Cópia do ficheiro \'%s\' falhou! A directoria destino (%s) pode estar protegida contra escrita. Por favor modifique-a! (%s)',
+               'type_2' => 'FICHEIRO',
+               'action_2_1' => 'Carregar',
+               'action_2_2' => 'Copiar',
+               'action_2_3' => 'Mover',
+               'action_2_4' => 'Apagar',
+               'action_2_5' => 'Renomear',
+               'action_2_6' => 'Novo',
+               'action_2_7' => 'Descompactar',
+               'action_2_8' => 'Novo ficheiro',
+               'action_2_9' => 'Editar',
+               'msg_2_9_1' => 'Ficheiro salvo para \'%s\', bytes: %s, MD5: %s',
+               'type_254' => 'DEFINIÇÃO',
+               'action_254_1' => 'Alterar',
+               'type_255' => 'CONECTAR',
+               'action_255_1' => 'CONECTAR',
+               'action_255_2' => 'DESCONECTAR',
+               'action_255_3' => 'TENTATIVA',
+       ),
+       'ru' => Array (
+       ),
+       'ro' => Array (
+               'type_1' => 'DB',
+               'action_1_1' => 'Inserare',
+               'action_1_2' => 'Actualizare',
+               'action_1_3' => 'ªtergere',
+               'action_1_4' => 'Verificare',
+               'msg_1_0_1' => 'Calculatorul de referinþã ºi calculatorul server \'%s\' nu se potrivesc!',
+               'msg_1_1_11' => 'Încercare de a insera o înregistrare în pagina \'%s\' (%s), din tabela %s. Eroare permisiuni!!',
+               'msg_1_1_12' => 'Încercare de a insera o înregistrare în pagina \'%s\' (%s), din tabela %s. Eroare permisiuni sau paginã inexistentã!!',
+               'msg_1_2_1' => 'Încercare de a modifica tabelul \'%s\' fãrã permisiuni!!',
+               'msg_1_2_2' => 'Încercare de a modifica înregistrarea \'%s\' (%s) fãrã permisiuni. Sau paginã inexistentã.',
+               'msg_1_2_10' => 'Înregistrarea \'%s\' (%s) a fost actualizatã.',
+               'msg_1_2_12' => 'Eroare mysql: \'%s\' (%s)',
+               'msg_1_4_1' => 'Încercare de a muta înregistrarea \'%s\' (%s)',
+               'type_254' => 'SETARE',
+               'action_254_1' => 'Modificare',
+               'type_255' => 'CONECTARE',
+               'action_255_1' => 'CONECTARE',
+               'action_255_2' => 'DECONECTARE',
+               'action_255_3' => 'ÎNCERCARE',
+       ),
+       'ch' => Array (
+       ),
+       'sk' => Array (
+       ),
+       'lt' => Array (
+       ),
+);
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/mod/locallang_mod.php b/typo3/sysext/belog/mod/locallang_mod.php
new file mode 100755 (executable)
index 0000000..120bcfb
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+
+$LOCAL_LANG = Array (
+       'default' => Array (
+               'mlang_labels_tablabel' => 'Viewing log',
+               'mlang_labels_tabdescr' => 'Allows you access to the full backend changelog in TYPO3.<br /><em>Access for \'admin\' users only!</em>',
+               'mlang_tabs_tab' => 'Log',
+       ),
+       'dk' => Array (
+               'mlang_labels_tablabel' => 'Log-visning',
+               'mlang_labels_tabdescr' => 'Giver dig mulighed for at se den komplette opdateringslog i TYPO3.<br /><em>Adgang kun for \'admin\' brugere!</em>',
+               'mlang_tabs_tab' => 'Log',
+       ),
+       'de' => Array (
+               'mlang_labels_tablabel' => 'Log-Ansicht',
+               'mlang_labels_tabdescr' => 'Gibt Ihnen Zugriff zu der kompletten TYPO3 Änderungsprotokollierung.<br /><em>Zugriff nur durch Administratoren!</em>',
+               'mlang_tabs_tab' => 'Log',
+       ),
+       'no' => Array (
+               'mlang_labels_tablabel' => 'Logg-visning',
+               'mlang_labels_tabdescr' => 'Gir deg mulighet til å se den komplette oppdateringsloggen i TYPO3.<br /><em>Adgang kun for \'admin\' brukere!</em>',
+               'mlang_tabs_tab' => 'Logg',
+       ),
+       'it' => Array (
+               'mlang_labels_tablabel' => 'Mostra log',
+               'mlang_labels_tabdescr' => 'Accesso a tutto il log dei cambiamenti dell\'amministrazione di TYPO3. <br /><em>Accesso riservato solo agli utenti di tipo \'admin\'!</em>',
+               'mlang_tabs_tab' => 'Log',
+       ),
+       'fr' => Array (
+               'mlang_labels_tablabel' => 'Visualisation du fichier journal',
+               'mlang_labels_tabdescr' => 'Vous pouvez accéder depuis ici à tous les fichiers journaux de TYPO3.<br /><em>Accès pour l\'Administrateur uniquement</em>',
+               'mlang_tabs_tab' => 'Fichier journal',
+       ),
+       'es' => Array (
+               'mlang_labels_tablabel' => 'Bitácora de visitas',
+               'mlang_labels_tabdescr' => 'Permite acceder a la bitácora completa del backend de TYPO3.<br /><em>¡Acceso solamente para \'administradores\'!</em>',
+               'mlang_tabs_tab' => 'Bitácora',
+       ),
+       'nl' => Array (
+               'mlang_labels_tablabel' => 'Toon log',
+               'mlang_labels_tabdescr' => 'Geeft je toegang tot het log van wijzigingen voor de BeheerSite van TYPO3.<br /><em>Alleen toegang voor \'admin\' gebruikers!</em>',
+               'mlang_tabs_tab' => 'Log',
+       ),
+       'cz' => Array (
+               'mlang_labels_tablabel' => 'Ukázat log',
+               'mlang_labels_tabdescr' => 'Umo\9eòuje pøistoupit k záznamu zmìn v backendu v TYPO3.<br /><em>Pøístup pouze pro \'admin\' u\9eivatele!</em>',
+               'mlang_tabs_tab' => 'Log',
+       ),
+       'pl' => Array (
+               'mlang_labels_tablabel' => 'Poka¿ log',
+               'mlang_labels_tabdescr' => 'Dostêp do logu systemowego TYPO3.<br /><em>Dostêp tylko dla administratorów!<em>',
+               'mlang_tabs_tab' => 'Log',
+       ),
+       'si' => Array (
+               'mlang_labels_tablabel' => 'Ogled dnevnika',
+               'mlang_labels_tabdescr' => 'Dnevnik sprememb v TYPO3 \'backendu\'.<br /><em>Uporaba dovoljena le \'admin\' uporabnikom!</em>',
+               'mlang_tabs_tab' => 'Dnevnik',
+       ),
+       'fi' => Array (
+               'mlang_labels_tablabel' => 'Katsele lokia',
+               'mlang_labels_tabdescr' => 'Täältä on mahdollisuus katsella TYPO3n backend lokia.<br /><em>Pääsy vain \'Admin\' käyttäjille !</em>',
+               'mlang_tabs_tab' => 'Loki',
+       ),
+       'tr' => Array (
+               'mlang_labels_tablabel' => 'Log un gösterilmesi',
+               'mlang_labels_tabdescr' => 'TYPO3 içinde tüm arkaplan log deðiþikliklerinin eriþimine izin verir.<br /><em>Sadece kullanýcýlarýn \'yönetim\' için geçiþi!</em>',
+               'mlang_tabs_tab' => 'Log',
+       ),
+       'se' => Array (
+               'mlang_labels_tablabel' => 'Visa loggen',
+               'mlang_labels_tabdescr' => 'Ger möjlighet att nå hela TYPO3 -backendloggen.<br /><em>Endast för \'admin\'-användare!</em>',
+               'mlang_tabs_tab' => 'Logg',
+       ),
+       'pt' => Array (
+               'mlang_labels_tablabel' => 'Visualizar diário',
+               'mlang_labels_tabdescr' => 'Permite acesso a todo o diário de modificações do TYPO3.<br />Acesso só para utilizadores \'admin\'!</em>',
+               'mlang_tabs_tab' => 'Diário',
+       ),
+       'ru' => Array (
+       ),
+       'ro' => Array (
+       ),
+       'ch' => Array (
+       ),
+       'sk' => Array (
+       ),
+       'lt' => Array (
+       ),
+);
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/mod/log.gif b/typo3/sysext/belog/mod/log.gif
new file mode 100755 (executable)
index 0000000..afa5bb7
Binary files /dev/null and b/typo3/sysext/belog/mod/log.gif differ
diff --git a/typo3/sysext/beuser/doc/TODO.txt b/typo3/sysext/beuser/doc/TODO.txt
new file mode 100755 (executable)
index 0000000..7ed199e
--- /dev/null
@@ -0,0 +1,3 @@
+- Ability to create users / groups incl. filemounts in users/groups dirs.
+- Show x number of users in the list + ability to browse/search for a user.
+- Link to Web>List, id=0
\ No newline at end of file
diff --git a/typo3/sysext/beuser/ext_emconf.php b/typo3/sysext/beuser/ext_emconf.php
new file mode 100755 (executable)
index 0000000..e7dcabd
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+
+########################################################################
+# Extension Manager/Repository config file for ext: 'beuser'
+# 
+# Auto generated 22-10-2003 23:13
+# 
+# Manual updates:
+# Only the data in the array - anything else is removed by next write
+########################################################################
+
+$EM_CONF[$_EXTKEY] = Array (
+       'title' => 'Tools>User Admin',
+       'description' => 'Backend user administration and overview. Allows you to compare the settings of users and verify their permissions.',
+       'category' => 'module',
+       'shy' => 1,
+       'dependencies' => '',
+       'conflicts' => '',
+       'priority' => '',
+       'module' => 'mod',
+       'state' => 'stable',
+       'internal' => 0,
+       'uploadfolder' => 0,
+       'createDirs' => '',
+       'modify_tables' => '',
+       'clearCacheOnLoad' => 0,
+       'lockType' => '',
+       'author' => 'Kasper Skårhøj',
+       'author_email' => 'kasperYYYY@typo3.com',
+       'author_company' => 'Curby Soft Multimedia',
+       'private' => 0,
+       'download_password' => '',
+       'version' => '0.0.9',   // Don't modify this! Managed automatically during upload to repository.
+       '_md5_values_when_last_written' => 'a:8:{s:12:"ext_icon.gif";s:4:"2804";s:14:"ext_tables.php";s:4:"c05c";s:14:"mod/beuser.gif";s:4:"2804";s:13:"mod/clear.gif";s:4:"cc11";s:12:"mod/conf.php";s:4:"a6cc";s:13:"mod/index.php";s:4:"736a";s:21:"mod/locallang_mod.php";s:4:"ba4c";s:12:"doc/TODO.txt";s:4:"93f7";}',
+);
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/beuser/ext_icon.gif b/typo3/sysext/beuser/ext_icon.gif
new file mode 100755 (executable)
index 0000000..23b42ef
Binary files /dev/null and b/typo3/sysext/beuser/ext_icon.gif differ
diff --git a/typo3/sysext/beuser/ext_tables.php b/typo3/sysext/beuser/ext_tables.php
new file mode 100755 (executable)
index 0000000..7e6d00f
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+if (!defined ('TYPO3_MODE'))   die ('Access denied.');
+
+if (TYPO3_MODE=='BE')  t3lib_extMgm::addModule('tools','beuser','top',t3lib_extMgm::extPath($_EXTKEY).'mod/');
+?>
\ No newline at end of file
diff --git a/typo3/sysext/beuser/mod/beuser.gif b/typo3/sysext/beuser/mod/beuser.gif
new file mode 100755 (executable)
index 0000000..23b42ef
Binary files /dev/null and b/typo3/sysext/beuser/mod/beuser.gif differ
diff --git a/typo3/sysext/beuser/mod/clear.gif b/typo3/sysext/beuser/mod/clear.gif
new file mode 100755 (executable)
index 0000000..9ed1269
Binary files /dev/null and b/typo3/sysext/beuser/mod/clear.gif differ
diff --git a/typo3/sysext/beuser/mod/conf.php b/typo3/sysext/beuser/mod/conf.php
new file mode 100755 (executable)
index 0000000..562c38b
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+define('TYPO3_MOD_PATH', 'sysext/beuser/mod/');
+$BACK_PATH='../../../';
+
+$MLANG['default']['tabs_images']['tab'] = 'beuser.gif';
+$MLANG['default']['ll_ref']='LLL:EXT:beuser/mod/locallang_mod.php';
+
+$MCONF['script']='index.php';
+$MCONF['access']='admin';
+$MCONF['name']='tools_beuser';
+?>
\ No newline at end of file
diff --git a/typo3/sysext/beuser/mod/index.php b/typo3/sysext/beuser/mod/index.php
new file mode 100755 (executable)
index 0000000..f7b28fb
--- /dev/null
@@ -0,0 +1,1390 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 1999-2004 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  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!
+***************************************************************/
+/**
+ * Backend User Administration Module
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ */
+/**
+ * [CLASS/FUNCTION INDEX of SCRIPT]
+ *
+ *
+ *
+ *  114: class localPageTree extends t3lib_browseTree
+ *  124:     function localPageTree($BE_USER,$WEBMOUNTS='',$FILEMOUNTS='')
+ *  137:     function wrapTitle($str)
+ *  149:     function PM_ATagWrap($icon,$cmd,$bMark='')
+ *  158:     function permsC()
+ *  169:     function wrapIcon($str,$val)
+ *
+ *
+ *  195: class printAllPageTree extends localPageTree
+ *  202:     function permsC()
+ *  214:     function PM_ATagWrap($icon,$cmd,$bMark='')
+ *  225:     function wrapIcon($str,$val)
+ *
+ *
+ *  252: class printAllPageTree_perms extends printAllPageTree
+ *  259:     function printTree($treeArr='',$printPath=0)
+ *  302:     function ext_printPerms($int)
+ *  321:     function ext_groupPerms($row,$firstGroup)
+ *
+ *
+ *  350: class local_beUserAuth extends t3lib_beUserAuth
+ *  358:     function returnWebmounts($pClause='')
+ *  378:     function ext_non_readAccessPages()
+ *  394:     function user_where_clause()
+ *  407:     function ext_printOverview($uInfo,$compareFlags,$printTrees=0)
+ *  572:     function ext_getReadableButNonmounted()
+ *  604:     function ext_printPerms($int)
+ *  623:     function ext_groupPerms($row,$firstGroup)
+ *  639:     function ext_compileUserInfoForHash()
+ *  689:     function ext_uniqueAndSortList($list)
+ *  703:     function ext_ksortArrayRecursive(&$arr)
+ *
+ *
+ *  730: class SC_mod_tools_be_user_index
+ *  742:     function init()
+ *  772:     function menuConfig()
+ *  793:     function main()
+ *  829:     function printContent()
+ *
+ *              SECTION: OTHER FUNCTIONS:
+ *  852:     function compareUsers($compareFlags)
+ * 1030:     function linkUser($str,$rec)
+ * 1041:     function elementLinks($table,$row)
+ * 1072:     function initUsers()
+ * 1092:     function localPath($str)
+ * 1104:     function switchUser($switchUser)
+ *
+ * TOTAL FUNCTIONS: 31
+ * (This index is automatically created/updated by the extension 'extdeveval')
+ *
+ */
+
+unset($MCONF);
+require ('conf.php');
+require ($BACK_PATH.'init.php');
+require ($BACK_PATH.'template.php');
+require_once (PATH_t3lib.'class.t3lib_basicfilefunc.php');
+require_once (PATH_t3lib.'class.t3lib_browsetree.php');
+require_once (PATH_t3lib.'class.t3lib_foldertree.php');
+require_once (PATH_t3lib.'class.t3lib_tstemplate.php');
+require_once (PATH_t3lib.'class.t3lib_loadmodules.php');
+require_once (PATH_t3lib.'class.t3lib_tsparser_ext.php');
+require_once (PATH_typo3.'class.alt_menu_functions.inc');
+
+$BE_USER->modAccess($MCONF,1);
+
+
+
+
+
+
+/**
+ * Base Extension class for printing a page tree (non-browsable though)
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_beuser
+ */
+ class localPageTree extends t3lib_browseTree {
+       var $expandFirst=0;
+       var $expandAll=0;
+
+       /**
+        * Constructor for the local page tree.
+        *
+        * @param       object          Local backend user (not the GLOBALS[] backend user!!)
+        * @param       array           Webmounts for the backend user.
+        * @return      void
+        */
+       function localPageTree($BE_USER,$WEBMOUNTS='')  {
+               $this->init();
+
+               $this->BE_USER = $BE_USER;
+               $this->MOUNTS = $WEBMOUNTS;
+               $this->clause = $this->ext_permsC();    // Notice, this clause does NOT filter out un-readable pages. This is the POINT since this class is ONLY used for the main overview where ALL is shown! Otherwise "AND '.$this->BE_USER->getPagePermsClause(1).'" should be added.
+               $this->orderByFields = 'sorting';
+       }
+
+       /**
+        * Return select permissions.
+        *
+        * @return      string          WHERE query part.
+        */
+       function ext_permsC()   {
+               return '';
+       }
+
+       /**
+        * Wraps the title.
+        *
+        * @param       string          [See parent]
+        * @param       array           [See parent]
+        * @return      string
+        */
+       function wrapTitle($str,$row)   {
+               return $str;
+       }
+
+       /**
+        * Wraps the plus/minus icon - in this case we just return blank which means we STRIP AWAY the plus/minus icon!
+        *
+        * @param       string          [See parent]
+        * @param       string          [See parent]
+        * @param       string          [See parent]
+        * @return      string
+        */
+       function PM_ATagWrap($icon,$cmd,$bMark='')      {
+               return '';
+       }
+
+       /**
+        * Wrapping the icon of the element/page. Normally a click menu is wrapped around the icon, but in this case only a title parameter is set.
+        *
+        * @param       string          Icon image tag.
+        * @param       array           Row.
+        * @return      string          Icon with title attribute added.
+        */
+       function wrapIcon($icon,$row)   {
+                       // Add title attribute to input icon tag
+               $title = '['.$row['uid'].'] '.t3lib_BEfunc::getRecordPath($row['uid'],'',15);
+               $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : '').' border="0"');
+
+               return $theIcon;
+       }
+
+       /**
+        * This will make sure that no position data is acquired from the BE_USER uc variable.
+        *
+        * @return      void
+        */
+       function initializePositionSaving()     {
+               $this->stored=array();
+       }
+}
+
+
+
+
+
+
+
+
+
+
+/**
+ * Extension class for printing a page tree: All pages of a mount point.
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_beuser
+ */
+class printAllPageTree extends localPageTree {
+       var $expandFirst=1;
+       var $expandAll=1;
+
+       /**
+        * Return select permissions.
+        *
+        * @return      string          WHERE query part.
+        */
+       function ext_permsC()   {
+               return ' AND '.$this->BE_USER->getPagePermsClause(1);
+       }
+
+       /**
+        * Returns the plus/minus icon.
+        *
+        * @param       string          [See parent]
+        * @param       string          [See parent]
+        * @param       string          [See parent]
+        * @return      string
+        */
+       function PM_ATagWrap($icon,$cmd,$bMark='')      {
+               return $icon;
+       }
+
+       /**
+        * Wrapping the icon of the element/page. Normally a click menu is wrapped around the icon, but in this case only a title parameter is set.
+        *
+        * @param       string          Icon image tag.
+        * @param       array           Row.
+        * @return      string          Icon with title attribute added.
+        */
+       function wrapIcon($icon,$row)   {
+                       // Add title attribute to input icon tag
+               $title = '['.$row['uid'].']';
+               $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : '').' border="0"');
+
+               return $theIcon;
+       }
+}
+
+
+
+
+
+
+
+
+
+
+/**
+ * Extension class for printing a page tree: Printing all pages, with permissions.
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_beuser
+ */
+class printAllPageTree_perms extends printAllPageTree {
+
+       /**
+        * Print the tree of pages.
+        *
+        * @param       array           The tree items
+        * @param       boolean         If set, the path of the pages in the tree is printed (only done for pages outside of mounts).
+        * @return      string          HTML content.
+        */
+       function printTree($treeArr='',$printPath=0)    {
+               $titleLen=intval($this->BE_USER->uc['titleLen']);
+
+               $be_user_Array = t3lib_BEfunc::getUserNames();
+               $be_group_Array = t3lib_BEfunc::getGroupNames();
+               $lines=array();
+               $lines[]='<tr class="bgColor5">
+                       <td nowrap="nowrap"><strong>Page title:</strong></td>
+                       '.($printPath?'<td nowrap="nowrap"><strong>Path:</strong></td>':'').'
+                       <td nowrap="nowrap" colspan=2><strong>User:</strong></td>
+                       <td nowrap="nowrap" colspan=2><strong>Group: &nbsp;</strong></td>
+                       <td nowrap="nowrap"><strong>Everybody: &nbsp;</strong></td>
+                       <td nowrap="nowrap"><strong>This user: &nbsp;</strong></td>
+                       <td nowrap="nowrap"><strong>Main group:</strong></td>
+               </tr>';
+
+               if (!is_array($treeArr))        $treeArr=$this->tree;
+               reset($treeArr);
+               while(list($k,$v)=each($treeArr))       {
+                       $col1 = ' bgcolor="'.t3lib_div::modifyHtmlColor($GLOBALS['SOBE']->doc->bgColor4,+10,+10,+10).'"';
+                       $row = $v['row'];
+                       $title = htmlspecialchars(t3lib_div::fixed_lgd_cs($row['title'],$this->BE_USER->uc['titleLen']));
+                       $lines[]='<tr class="bgColor4">
+                               <td nowrap="nowrap">'.$v['HTML'].$title.' &nbsp;</td>
+                               '.($printPath?'<td nowrap="nowrap">'.htmlspecialchars(t3lib_BEfunc::getRecordPath ($row['pid'],'',15)).' &nbsp;</td>':'').'
+                               <td nowrap="nowrap"'.$col1.'>'.$be_user_Array[$row['perms_userid']]['username'].' &nbsp;</td>
+                               <td nowrap="nowrap"'.$col1.'>'.$this->ext_printPerms($row['perms_user']).' &nbsp;</td>
+                               <td nowrap="nowrap">'.$be_group_Array[$row['perms_groupid']]['title'].' &nbsp;</td>
+                               <td nowrap="nowrap">'.$this->ext_printPerms($row['perms_group']).' &nbsp;</td>
+                               <td nowrap="nowrap" align="center" '.$col1.'>'.$this->ext_printPerms($row['perms_everybody']).' &nbsp;</td>
+                               <td nowrap="nowrap" align="center">'.($row['editlock'] ? '<img src="'.$this->backPath.'gfx/recordlock_warning2.gif" width="22" height="16" title="Edit lock prevents all editing" alt="" />' : $this->ext_printPerms($this->BE_USER->calcPerms($row))).' &nbsp;</td>
+                               <td nowrap="nowrap" align="center">'.$this->ext_printPerms($this->ext_groupPerms($row,$be_group_Array[$this->BE_USER->firstMainGroup])).' &nbsp;</td>
+                       </tr>';
+               }
+               return '<table border="0" cellpadding="0" cellspacing="0">'.implode('',$lines).'</table>';
+       }
+
+       /**
+        * Print a set of permissions
+        *
+        * @param       integer         The permissions integer.
+        * @return      string          HTML formatted.
+        */
+       function ext_printPerms($int)   {
+               $str='';
+               $str.= (($int&1)?'*':'<font color="red">x</font>');
+               $str.= (($int&16)?'*':'<font color="red">x</font>');
+               $str.= (($int&2)?'*':'<font color="red">x</font>');
+               $str.= (($int&4)?'*':'<font color="red">x</font>');
+               $str.= (($int&8)?'*':'<font color="red">x</font>');
+
+               return '<b><font color="green">'.$str.'</font></b>';
+       }
+
+       /**
+        * returns the permissions for a group based of the perms_groupid of $row. If the $row[perms_groupid] equals the $firstGroup[uid] then the function returns perms_everybody OR'ed with perms_group, else just perms_everybody
+        *
+        * @param       array           Page record.
+        * @param       array           First-group record.
+        * @return      integer         Permissions.
+        */
+       function ext_groupPerms($row,$firstGroup)       {
+               if (is_array($row))     {
+                       $out=intval($row['perms_everybody']);
+                       if ($row['perms_groupid'] && $firstGroup['uid']==$row['perms_groupid']) {
+                               $out|= intval($row['perms_group']);
+                       }
+                       return $out;
+               }
+       }
+}
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * Base Extension class for printing a folder tree (non-browsable though)
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_beuser
+ */
+ class localFolderTree extends t3lib_folderTree {
+       var $expandFirst=0;
+       var $expandAll=0;
+
+       /**
+        * Constructor for the local folder tree.
+        *
+        * @param       object          Local backend user (not the GLOBALS[] backend user!!)
+        * @param       array           Filemounts for the backend user.
+        * @return      void
+        */
+       function localFolderTree($BE_USER,$FILEMOUNTS='')       {
+               $this->init();
+
+               $this->BE_USER = $BE_USER;
+               $this->MOUNTS = $FILEMOUNTS;
+               $this->clause = '';     // Notice, this clause does NOT filter out un-readable pages. This is the POINT since this class is ONLY used for the main overview where ALL is shown! Otherwise "AND '.$this->BE_USER->getPagePermsClause(1).'" should be added.
+       }
+
+       /**
+        * Wraps the title.
+        *
+        * @param       string          [See parent]
+        * @param       array           [See parent]
+        * @return      string
+        */
+       function wrapTitle($str,$row)   {
+               return $str;
+       }
+
+       /**
+        * Wraps the plus/minus icon - in this case we just return blank which means we STRIP AWAY the plus/minus icon!
+        *
+        * @param       string          [See parent]
+        * @param       string          [See parent]
+        * @param       string          [See parent]
+        * @return      string
+        */
+       function PM_ATagWrap($icon,$cmd,$bMark='')      {
+               return '';
+       }
+
+       /**
+        * Wrapping the icon of the element/page. Normally a click menu is wrapped around the icon, but in this case only a title parameter is set.
+        *
+        * @param       string          Icon image tag.
+        * @param       array           Row.
+        * @return      string          Icon with title attribute added.
+        */
+       function wrapIcon($icon,$row)   {
+                       // Add title attribute to input icon tag
+               $title = $GLOBALS['SOBE']->localPath($row['path']);
+               $theIcon = $this->addTagAttributes($icon,($this->titleAttrib ? $this->titleAttrib.'="'.htmlspecialchars($title).'"' : ''));
+
+               return $theIcon;
+       }
+
+       /**
+        * This will make sure that no position data is acquired from the BE_USER uc variable.
+        *
+        * @return      void
+        */
+       function initializePositionSaving()     {
+               $this->stored=array();
+       }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * Extension class for printing a folder tree: All folders
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_beuser
+ */
+class printAllFolderTree extends localFolderTree {
+       var $expandFirst=1;
+       var $expandAll=1;
+
+       /**
+        * Wraps the plus/minus icon - in this case we just return blank which means we STRIP AWAY the plus/minus icon!
+        *
+        * @param       string          [See parent]
+        * @param       string          [See parent]
+        * @param       string          [See parent]
+        * @return      string
+        */
+       function PM_ATagWrap($icon,$cmd,$bMark='')      {
+               return $icon;
+       }
+}
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * Extension class of beuserauth class.
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_beuser
+ */
+class local_beUserAuth extends t3lib_beUserAuth {
+       var $ext_pageIdsFromMounts='';                                  // List of mounted page ids (from browsetree class when selecting mountpoints)
+       var $ext_non_readAccessPageArray=array();               // Storage for non-readable webmounts, see returnWebmounts()
+
+       /**
+        * Returns an array of the webmounts for the user, with non-readable webmounts filtered out.
+        * If there are non-readable webmounts they are registered in $this->ext_non_readAccessPageArray
+        * (Extending function in parent class)
+        *
+        * @param       string          alternative select clause (default is getPagePermsClause(1)). For instance to make sure that ALL webmounts are selected regardless of whether the user has read access or not, you can set this to "1=1".
+        * @return      array           Webmounts id's
+        */
+       function returnWebmounts($pClause='')   {
+
+                       // Get array of webmounts:
+               $webmounts = (string)($this->groupData['webmounts'])!='' ? explode(',',$this->groupData['webmounts']) : Array();
+
+                       // Get select clause:
+               $pClause=$pClause?$pClause:$this->getPagePermsClause(1);
+
+                       // Traverse mounts, check if they are readable:
+               foreach($webmounts as $k => $id)        {
+                       $rec=t3lib_BEfunc::getRecord('pages',$id,'*',' AND '.$pClause);
+                       if (!is_array($rec))    {
+                               $this->ext_non_readAccessPageArray[$id]=t3lib_BEfunc::getRecord('pages',$id);
+                               unset($webmounts[$k]);
+                       }
+               }
+               return $webmounts;
+       }
+
+       /**
+        * Based on the content of ->ext_non_readAccessPageArray (see returnWebmounts()) it generates visually formatted information about these non-readable mounts.
+        *
+        * @return      string          HTML content showing which DB-mounts were not accessible for the user
+        */
+       function ext_non_readAccessPages()      {
+               $lines=array();
+
+               foreach($this->ext_non_readAccessPageArray as $pA)      {
+                       if ($pA)        $lines[]=t3lib_BEfunc::getRecordPath($pA['uid'],'',15);
+               }
+               if (count($lines))      {
+                       return '<table bgcolor="red" border="0" cellpadding="0" cellspacing="0">
+                               <tr>
+                                       <td align="center"><font color="white"><strong>The user has no read access to these DB-mounts!</strong></font></td>
+                               </tr>
+                               <tr>
+                                       <td>'.implode('</td></tr><tr><td>',$lines).'</td>
+                               </tr>
+                       </table>';
+               }
+       }
+
+       /**
+        * This returns the where-clause needed to select the user with respect flags like deleted, hidden, starttime, endtime
+        *
+        * @return      string
+        */
+       function user_where_clause()    {
+               return  'AND pid=0 ';
+       }
+
+       /**
+        * Creates the overview information based on which analysis topics were selected.
+        *
+        * @param       array           Array of analysis topics
+        * @param       array           Array of the selected analysis topics (from session variable somewhere)
+        * @param       boolean         If set, the full trees of pages/folders are printed.
+        * @return      array           Array with accumulated HTML content.
+        */
+       function ext_printOverview($uInfo,$compareFlags,$printTrees=0)  {
+                       // Prepare for filemount and db-mount
+               if ($printTrees)        {       // ... this is if we see the detailed view for a user:
+                               // Page tree object:
+                       $className=t3lib_div::makeInstanceClassName(!$this->isAdmin() ? 'printAllPageTree_perms' : 'printAllPageTree');
+                       $pagetree = new $className($this,$this->returnWebmounts());     // Here, only readable webmounts are returned (1=1)
+                       $pagetree->addField('perms_user',1);
+                       $pagetree->addField('perms_group',1);
+                       $pagetree->addField('perms_everybody',1);
+                       $pagetree->addField('perms_userid',1);
+                       $pagetree->addField('perms_groupid',1);
+                       $pagetree->addField('editlock',1);
+
+                               // Folder tree object:
+                       $className=t3lib_div::makeInstanceClassName('printAllFolderTree');
+                       $foldertree = new $className($this,$this->returnFilemounts());
+               } else {
+                               // Page tree object:
+                       $className=t3lib_div::makeInstanceClassName('localPageTree');
+                       $pagetree = new $className($this,$this->returnWebmounts('1=1'));        // Here, ALL webmounts are returned (1=1)
+
+                               // Folder tree object:
+                       $className=t3lib_div::makeInstanceClassName('localFolderTree');
+                       $foldertree = new $className($this,$this->returnFilemounts());
+               }
+
+                       // Names for modules:
+               $modNames = array(
+                       'web' => 'Web',
+                       'web_layout' => 'Page',
+                       'web_modules' => 'Modules',
+                       'web_info' => 'Info',
+                       'web_perms' => 'Access',
+                       'web_func' => 'Func',
+                       'web_list' => 'List',
+                       'web_ts' => 'Template',
+                       'file' => 'File',
+                       'file_list' => 'List',
+                       'file_images' => 'Images',
+                       'doc' => 'Doc.',
+                       'help' => 'Help',
+                       'help_about' => 'About',
+                       'help_quick' => 'User manual',
+                       'help_welcome' => 'Welcome',
+                       'user' => 'User',
+                       'user_setup' => 'Setup',
+                       'user_task' => 'Task center'
+               );
+
+                       // Traverse the enabled analysis topics:
+               $out=array();
+               foreach($uInfo as $k => $v)     {
+                       if ($compareFlags[$k])  {
+                               switch($k)      {
+                                       case 'filemounts':
+                                               $out[$k] = $foldertree->getBrowsableTree();
+                                       break;
+                                       case 'webmounts':
+                                                       // Print webmounts:
+                                               $pagetree->addSelfId=1;
+                                               $out[$k] = $this->ext_non_readAccessPages();    // Add HTML for non-readable webmounts (only shown when viewing details of a user - in overview/comparison ALL mounts are shown)
+                                               $out[$k].= $pagetree->getBrowsableTree();               // Add HTML for readable webmounts.
+                                               $this->ext_pageIdsFromMounts=implode(',',array_unique($pagetree->ids));         // List of mounted page ids
+                                       break;
+                                       case 'tempPath':
+                                               $out[$k] = $GLOBALS['SOBE']->localPath($v);
+                                       break;
+                                       case 'pagetypes_select':
+                                               $pageTypes = explode(',',$v);
+                                               reset($pageTypes);
+                                               while(list($kk,$vv)=each($pageTypes))   {
+                                                       $pageTypes[$kk]=$GLOBALS['LANG']->sL(t3lib_BEfunc::getLabelFromItemlist('pages','doktype',$vv));
+                                               }
+                                               $out[$k] = implode('<br />',$pageTypes);
+                                       break;
+                                       case 'tables_select':
+                                       case 'tables_modify':
+                                               $tables = explode(',',$v);
+                                               reset($tables);
+                                               while(list($kk,$vv)=each($tables))      {
+                                                       if ($vv)        {
+                                                               $tables[$kk]='<span class="nobr">'.t3lib_iconWorks::getIconImage($vv,array(),$GLOBALS['BACK_PATH'],'align="top"').$GLOBALS['LANG']->sL($GLOBALS['TCA'][$vv]['ctrl']['title']).'</span>';
+                                                       }
+                                               }
+                                               $out[$k] = implode('<br />',$tables);
+                                       break;
+                                       case 'non_exclude_fields':
+                                               $nef = explode(',',$v);
+                                               reset($nef);
+                                               $table='';
+                                               $pout=array();
+                                               while(list($kk,$vv)=each($nef)) {
+                                                       if ($vv)        {
+                                                               list($thisTable,$field) = explode(':',$vv);
+                                                               if ($thisTable!=$table) {
+                                                                       $table=$thisTable;
+                                                                       t3lib_div::loadTCA($table);
+                                                                       $pout[]='<span class="nobr">'.t3lib_iconWorks::getIconImage($table,array(),$GLOBALS['BACK_PATH'],'align="top"').$GLOBALS['LANG']->sL($GLOBALS['TCA'][$table]['ctrl']['title']).'</span>';
+                                                               }
+                                                               if ($GLOBALS['TCA'][$table]['columns'][$field]) {
+                                                                       $pout[]='<span class="nobr"> - '.ereg_replace(':$','',$GLOBALS['LANG']->sL($GLOBALS['TCA'][$table]['columns'][$field]['label'])).'</span>';
+                                                               }
+                                                       }
+                                               }
+                                               $out[$k] = implode('<br />',$pout);
+                                       break;
+                                       case 'groupList':
+                                       case 'firstMainGroup':
+                                               $uGroups = explode(',',$v);
+                                               reset($uGroups);
+                                               $table='';
+                                               $pout=array();
+                                               while(list($kk,$vv)=each($uGroups))     {
+                                                       if ($vv)        {
+                                                               $uGRow = t3lib_BEfunc::getRecord('be_groups',$vv);
+                                                               $pout[]='<tr><td nowrap="nowrap">'.t3lib_iconWorks::getIconImage('be_groups',$uGRow,$GLOBALS['BACK_PATH'],'align="top"').'&nbsp;'.htmlspecialchars($uGRow['title']).'&nbsp;&nbsp;</td><td width=1% nowrap="nowrap">'.$GLOBALS['SOBE']->elementLinks('be_groups',$uGRow).'</td></tr>';
+                                                       }
+                                               }
+                                               $out[$k] = '<table border="0" cellpadding="0" cellspacing="0" width="100%">'.implode('',$pout).'</table>';
+                                       break;
+                                       case 'modules':
+                                               $mods = explode(',',$v);
+                                               reset($mods);
+                                               $mainMod='';
+                                               $pout=array();
+                                               while(list($kk,$vv)=each($mods))        {
+                                                       if ($vv)        {
+                                                               list($thisMod,$subMod) = explode('_',$vv);
+                                                               if ($thisMod!=$mainMod) {
+                                                                       $mainMod=$thisMod;
+                                                                       $pout[]='<span class="nobr">'.($modNames[$mainMod]?$modNames[$mainMod]:$mainMod).'</span>';
+                                                               }
+                                                               if ($subMod)    {
+                                                                       $pout[]='<span class="nobr"> - '.($modNames[$mainMod.'_'.$subMod]?$modNames[$mainMod.'_'.$subMod]:$mainMod.'_'.$subMod).'</span>';
+                                                               }
+                                                       }
+                                               }
+                                               $out[$k] = implode('<br />',$pout);
+                                       break;
+                                       case 'userTS':
+
+                                               $tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext');  // Defined global here!
+                                               $tmpl->tt_track = 0;    // Do not log time-performance information
+
+                                               $tmpl->fixedLgd=0;
+                                               $tmpl->linkObjects=0;
+                                               $tmpl->bType='';
+                                               $tmpl->ext_expandAllNotes=1;
+                                               $tmpl->ext_noPMicons=1;
+                                               $out[$k] = $tmpl->ext_getObjTree($v,'','');
+                                       break;
+                                       case 'userTS_hl':
+                                               $tsparser = t3lib_div::makeInstance('t3lib_TSparser');
+                                               $tsparser->lineNumberOffset=0;
+                                               $out[$k] = $tsparser->doSyntaxHighlight($v,0,1);
+                                       break;
+                                       case 'explicit_allowdeny':
+
+                                                       // Explode and flip values:
+                                               $nef = array_flip(explode(',',$v));
+                                               $pout = array();
+
+                                               $theTypes = t3lib_BEfunc::getExplicitAuthFieldValues();
+
+                                                               // Icons:
+                                               $icons = array(
+                                                       'ALLOW' => '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/icon_ok2.gif','').' class="absmiddle" alt="" />',
+                                                       'DENY' => '<img'.t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'],'gfx/icon_fatalerror.gif','').' class="absmiddle" alt="" />',
+                                               );
+
+                                                       // Traverse types:
+                                               foreach($theTypes as $tableFieldKey => $theTypeArrays)  {
+                                                       if (is_array($theTypeArrays['items']))  {
+                                                               $pout[] = '<b>'.$theTypeArrays['tableFieldLabel'].'</b>';
+                                                                       // Traverse options for this field:
+                                                               foreach($theTypeArrays['items'] as $itemValue => $itemContent)  {
+                                                                       $v = $tableFieldKey.':'.$itemValue.':'.$itemContent[0];
+                                                                       if (isset($nef[$v]))    {
+                                                                               unset($nef[$v]);
+                                                                               $pout[] = $icons[$itemContent[0]].'['.$itemContent[2].'] '.$itemContent[1];
+                                                                       } else {
+                                                                               $pout[] = '<em style="color: #666666;">'.$icons[($itemContent[0]=='ALLOW' ? 'DENY' : 'ALLOW')].'['.$itemContent[2].'] '.$itemContent[1].'</em>';
+                                                                       }
+                                                               }
+                                                               $pout[] = '';
+                                                       }
+                                               }
+
+                                                       // Add remaining:
+                                               if (count($nef))        {
+                                                       $pout = array_merge($pout, array_keys($nef));
+                                               }
+
+                                                       // Implode for display:
+                                               $out[$k] = implode('<br />',$pout);
+                                       break;
+                                       case 'allowed_languages':
+
+                                                       // Explode and flip values:
+                                               $nef = array_flip(explode(',',$v));
+                                               $pout = array();
+
+                                                       // Get languages:
+                                               $items = t3lib_BEfunc::getSystemLanguages();
+
+                                                       // Traverse values:
+                                               foreach($items as $iCfg)        {
+                                                       if (isset($nef[$iCfg[1]]))      {
+                                                               unset($nef[$iCfg[1]]);
+                                                               $icon = '<img src="'.$GLOBALS['BACK_PATH'].$iCfg[2].'" class="absmiddle" style="margin-right: 5px;" alt="" />';
+                                                               $pout[] = $icon.$iCfg[0];
+                                                       }
+                                               }
+
+                                                       // Add remaining:
+                                               if (count($nef))        {
+                                                       $pout = array_merge($pout, array_keys($nef));
+                                               }
+
+                                                       // Implode for display:
+                                               $out[$k] = implode('<br />',$pout);
+                                       break;
+                                       case 'custom_options':
+
+                                                       // Explode and flip values:
+                                               $nef = array_flip(explode(',',$v));
+                                               $pout = array();
+
+                                                       // Initialize:
+                                               $customOptions = $GLOBALS['TYPO3_CONF_VARS']['BE']['customPermOptions'];
+                                               if (is_array($customOptions))   {
+                                                       foreach($customOptions as $coKey => $coValue) {
+                                                               if (is_array($coValue['items']))        {
+                                                                               // Traverse items:
+                                                                       foreach($coValue['items'] as $itemKey => $itemCfg)      {
+                                                                               $v = $coKey.':'.$itemKey;
+                                                                               if (isset($nef[$v]))    {
+                                                                                       unset($nef[$v]);
+                                                                                       $pout[] = $GLOBALS['LANG']->sl($coValue['header']).' / '.$GLOBALS['LANG']->sl($itemCfg[0]);
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+
+                                                       // Add remaining:
+                                               if (count($nef))        {
+                                                       $pout = array_merge($pout, array_keys($nef));
+                                               }
+
+                                                       // Implode for display:
+                                               $out[$k] = implode('<br />',$pout);
+                                       break;
+                               }
+                       }
+               }
+               return $out;
+       }
+
+       /**
+        * Get HTML code for the pages which were mounted, but NOT readable!
+        *
+        * @return      string          HTML code.
+        */
+       function ext_getReadableButNonmounted() {
+
+                       // List of page id mounts which ARE mounted (and should therefore not be selected)
+               if (!$this->ext_pageIdsFromMounts)      {
+                       $this->ext_pageIdsFromMounts=0;
+               }
+
+                       // User and group names:
+               $be_user_Array = t3lib_BEfunc::getUserNames();
+               $be_group_Array = t3lib_BEfunc::getGroupNames();
+
+                       // Create query:
+               $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
+                                               'pid,uid,title,doktype,perms_user,perms_group,perms_everybody,perms_userid,perms_groupid'.(t3lib_extMgm::isLoaded('cms')?',media,layout,hidden,starttime,endtime,fe_group,extendToSubpages':''),
+                                               'pages',
+                                               'uid NOT IN ('.$this->ext_pageIdsFromMounts.') AND '.$this->getPagePermsClause(1).t3lib_BEfunc::deleteClause('pages')
+                                       );
+               $dat = array();
+               while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
+                       $dat[] = array(
+                               'row'=>$row,
+                               'HTML'=>t3lib_iconWorks::getIconImage('pages',$row,$GLOBALS['BACK_PATH'],'align="top" title="['.$row['uid'].']"')       // .htmlspecialchars($row['title'])
+                       );
+               }
+               $className=t3lib_div::makeInstanceClassName('printAllPageTree_perms');
+               $pp = new $className($this);
+               return $pp->printTree($dat,1);
+       }
+
+       /**
+        * Print a set of permissions
+        *
+        * @param       integer         The permissions integer.
+        * @return      string          HTML formatted.
+        */
+       function ext_printPerms($int)   {
+               $str='';
+               $str.= (($int&1)?'*':'<font color="red">x</font>');
+               $str.= (($int&16)?'*':'<font color="red">x</font>');
+               $str.= (($int&2)?'*':'<font color="red">x</font>');
+               $str.= (($int&4)?'*':'<font color="red">x</font>');
+               $str.= (($int&8)?'*':'<font color="red">x</font>');
+
+               return '<b><font color="green">'.$str.'</font></b>';
+       }
+
+       /**
+        * returns the permissions for a group based of the perms_groupid of $row. If the $row[perms_groupid] equals the $firstGroup[uid] then the function returns perms_everybody OR'ed with perms_group, else just perms_everybody
+        *
+        * @param       array           Page record.
+        * @param       array           First-group record.
+        * @return      integer         Permissions.
+        */
+       function ext_groupPerms($row,$firstGroup)       {
+               if (is_array($row))     {
+                       $out=intval($row['perms_everybody']);
+                       if ($row['perms_groupid'] && $firstGroup['uid']==$row['perms_groupid']) {
+                               $out|= intval($row['perms_group']);
+                       }
+                       return $out;
+               }
+       }
+
+       /**
+        * Creates uInfo array for the user.
+        *
+        * @return      array           Array with the information of the user for each analysis topic.
+        */
+       function ext_compileUserInfoForHash()   {
+               $uInfo=array();
+
+                       // Filemounts:
+               $uInfo['filemounts']=$this->ext_uniqueAndSortList(implode(',',array_keys($this->groupData['filemounts'])));
+
+                       // DBmounts:
+               $uInfo['webmounts']=$this->ext_uniqueAndSortList($this->groupData['webmounts']);
+
+                       // Sharing Upload Folder
+               $fileProcessor = t3lib_div::makeInstance('t3lib_basicFileFunctions');
+               $fileProcessor->init($this->groupData['filemounts'], $GLOBALS['TYPO3_CONF_VARS']['BE']['fileExtensions']);
+               $uInfo['tempPath'] = $fileProcessor->findTempFolder();  // The closest TEMP-path is found
+
+                       // First Main Group:
+               $uInfo['firstMainGroup']=$this->firstMainGroup;
+
+                       // Group List:
+//             $uInfo['groupList']=$this->ext_uniqueAndSortList($this->groupList);
+               $uInfo['groupList']=$this->groupList;   // This gives a list that shows in which order the groups are processed. This may result in a list of groups which is similar to that of another user regarding which group but not the order of groups. For now, I believe it's most usefull to let separate orders of groups appear as different group settings for a user.
+
+                       // Page Types:
+               $uInfo['pagetypes_select']=$this->ext_uniqueAndSortList($this->groupData['pagetypes_select']);
+
+                       // Tables select:
+               $uInfo['tables_select']=$this->ext_uniqueAndSortList($this->groupData['tables_select'].','.$this->groupData['tables_modify']);
+
+                       // Tables modify:
+               $uInfo['tables_modify']=$this->ext_uniqueAndSortList($this->groupData['tables_modify']);
+
+                       // Non-exclude fields:
+               $uInfo['non_exclude_fields']=$this->ext_uniqueAndSortList($this->groupData['non_exclude_fields']);
+
+                       // Explicit Allow/Deny:
+               $uInfo['explicit_allowdeny']=$this->ext_uniqueAndSortList($this->groupData['explicit_allowdeny']);
+
+                       // Limit to languages:
+               $uInfo['allowed_languages']=$this->ext_uniqueAndSortList($this->groupData['allowed_languages']);
+
+                       // Custom options:
+               $uInfo['custom_options']=$this->ext_uniqueAndSortList($this->groupData['custom_options']);
+
+                       // Modules:
+               $uInfo['modules']=$this->ext_uniqueAndSortList($this->groupData['modules']);
+
+                       // User TS:
+               $this->ext_ksortArrayRecursive($this->userTS);
+               $uInfo['userTS'] = $this->userTS;
+
+               $uInfo['userTS_hl'] = $this->userTS_text;
+
+               return $uInfo;
+       }
+
+       /**
+        * Sorts a commalist of values and removes duplicates.
+        *
+        * @param       string          Commalist.
+        * @return      string          Sorted, unique commalist.
+        */
+       function ext_uniqueAndSortList($list)   {
+               $uList=t3lib_div::trimExplode(',',$list,1);
+               sort($uList);
+               $uList=array_unique($uList);
+               $uList=implode(',',$uList);
+               return $uList;
+       }
+
+       /**
+        * Key sort input array recursively.
+        *
+        * @param       array           Multidimensional array (value by reference!)
+        * @return      void
+        */
+       function ext_ksortArrayRecursive(&$arr) {
+               krsort($arr);
+               reset($arr);
+               while(list($k,$v)=each($arr))   {
+                       if (is_array($v))       $this->ext_ksortArrayRecursive($arr[$k]);
+               }
+       }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * Main script class
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_beuser
+ */
+class SC_mod_tools_be_user_index {
+       var $MCONF=array();
+       var $MOD_MENU=array();
+       var $MOD_SETTINGS=array();
+       var $doc;
+
+       var $include_once=array();
+       var $content;
+
+       /**
+        * @return      [type]          ...
+        */
+       function init() {
+               global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
+               $this->MCONF = $GLOBALS['MCONF'];
+
+               $this->menuConfig();
+               $this->switchUser(t3lib_div::_GP('SwitchUser'));
+
+
+               // **************************
+               // Initializing
+               // **************************
+               $this->doc = t3lib_div::makeInstance('noDoc');
+               $this->doc->form='<form action="" method="POST">';
+               $this->doc->backPath = $BACK_PATH;
+                               // JavaScript
+               $this->doc->JScode = $this->doc->wrapScriptTags('
+                       script_ended = 0;
+                       function jumpToUrl(URL) {       //
+                               document.location = URL;
+                       }
+               ');
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @return      [type]          ...
+        */
+       function menuConfig()   {
+               global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
+
+               // MENU-ITEMS:
+                       // If array, then it's a selector box menu
+                       // If empty string it's just a variable, that'll be saved.
+                       // Values NOT in this array will not be saved in the settings-array for the module.
+               $this->MOD_MENU = array(
+                       'function' => array(
+                               'compare' => 'Compare User Settings'
+                       )
+               );
+                       // CLEANSE SETTINGS
+               $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::_GP('SET'), $this->MCONF['name'], 'ses');
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @return      [type]          ...
+        */
+       function main() {
+               global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
+
+               $this->content='';
+               $this->content.=$this->doc->startPage('Backend User Administration');
+
+               $menu=t3lib_BEfunc::getFuncMenu(0,'SET[function]',$this->MOD_SETTINGS['function'],$this->MOD_MENU['function']);
+
+               $this->content.=$this->doc->header('Backend User Administration');
+               $this->content.=$this->doc->spacer(5);
+               $this->content.=$this->doc->section('',$menu).$this->doc->divider(5);
+
+               switch($this->MOD_SETTINGS['function']) {
+                       case 'compare':
+                               if (t3lib_div::_GP('ads'))      {
+                                       $compareFlags = t3lib_div::_GP('compareFlags');
+                                       $BE_USER->pushModuleData('tools_beuser/index.php/compare',$compareFlags);
+                               } else {
+                                       $compareFlags = $BE_USER->getModuleData('tools_beuser/index.php/compare','ses');
+                               }
+                               $this->content.=$this->compareUsers($compareFlags);
+                       break;
+               }
+
+
+               if ($BE_USER->mayMakeShortcut())        {
+                       $this->content.=$this->doc->spacer(20).
+                                               $this->doc->section('',$this->doc->makeShortcutIcon('be_user_uid,compareFlags','function',$this->MCONF['name']));
+               }
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @return      [type]          ...
+        */
+       function printContent() {
+
+               $this->content.=$this->doc->endPage();
+               echo $this->content;
+       }
+
+
+
+
+
+
+
+       /***************************
+        *
+        * OTHER FUNCTIONS:
+        *
+        ***************************/
+
+       /**
+        * @param       [type]          $compareFlags: ...
+        * @return      [type]          ...
+        */
+       function compareUsers($compareFlags)    {
+               global $SOBE;
+                       // Menu:
+               $options = array(
+                       'filemounts' => 'Filemounts',
+                       'webmounts' => 'Webmounts',
+                       'tempPath' => 'Default upload path',
+                       'firstMainGroup' => 'Main user group',
+                       'groupList' => 'Member of groups',
+                       'pagetypes_select' => 'Page types access',
+                       'tables_select' => 'Select tables',
+                       'tables_modify' => 'Modify tables',
+                       'non_exclude_fields' => 'Non-exclude fields',
+                       'explicit_allowdeny' => 'Explicit Allow/Deny',
+                       'allowed_languages' => 'Limit to languages',
+                       'custom_options' => 'Custom options',
+                       'modules' => 'Modules',
+                       'userTS' => 'TSconfig',
+                       'userTS_hl' => 'TSconfig HL',
+               );
+
+               $be_user_uid = t3lib_div::_GP('be_user_uid');
+               if ($be_user_uid)       {
+                               // This is used to test with other users. Development ONLY!
+                       $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');     // New backend user object
+                       $tempBE_USER->userTS_dontGetCached=1;
+                       $tempBE_USER->OS = TYPO3_OS;
+                       $tempBE_USER->setBeUserByUid($be_user_uid);
+                       $tempBE_USER->fetchGroupData();
+
+                       $uInfo = $tempBE_USER->ext_compileUserInfoForHash();
+                       $uInfo_dat = $tempBE_USER->ext_printOverview($uInfo,$options,1);
+
+                       $lines=array();
+                       reset($options);
+                       while(list($kk,$vv)=each($options))     {
+                               if ($kk=='modules')     {
+                                       $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
+                                       $loadModules->load($GLOBALS['TBE_MODULES'],$tempBE_USER);
+                                       $alt_menuObj = t3lib_div::makeInstance('alt_menu_functions');
+                                       $uInfo_dat[$kk] = $alt_menuObj->topMenu($loadModules->modules,1,$GLOBALS['BACK_PATH']);
+                               }
+                               $lines[]='<tr class="bgColor4">
+                                       <td nowrap="nowrap" valign="top">'.$vv.':&nbsp;&nbsp;</td>
+                                       <td>'.$uInfo_dat[$kk].'&nbsp;</td>
+                               </tr>';
+
+                               if ($kk=='webmounts' && !$tempBE_USER->isAdmin())       {
+                                       $lines[]='<tr class="bgColor4">
+                                               <td nowrap="nowrap" valign="top">Non-mounted readable pages:&nbsp;&nbsp;</td>
+                                               <td>'.$tempBE_USER->ext_getReadableButNonmounted().'&nbsp;</td>
+                                       </tr>';
+                               }
+                       }
+
+                       $outTable = '<table border="0" cellpadding="1" cellspacing="1"><tr class="bgColor5"><td>'.t3lib_iconWorks::getIconImage('be_users',$tempBE_USER->user,$GLOBALS['BACK_PATH'],'class="absmiddle" title="'.$tempBE_USER->user['uid'].'"').$tempBE_USER->user['username'].'</td>';
+                       $outTable.= '<td>'.$tempBE_USER->user['realName'].($tempBE_USER->user['email'] ? ', <a href="mailto:'.$tempBE_USER->user['email'].'">'.$tempBE_USER->user['email'].'</a>' : '').'</td>';
+                       $outTable.= '<td>'.$this->elementLinks('be_users',$tempBE_USER->user).'</td></tr></table>';
+                       $outTable.= '<strong><a href="index.php">&lt; Back to overview</a></strong><br />';
+
+                       $outTable.= '<br /><table border="0" cellpadding="2" cellspacing="1">'.implode('',$lines).'</table>';
+                       $content.= $this->doc->section('User info',$outTable,0,1);
+               } else {
+                       reset($options);
+                       $menu=array();
+                       while(list($kk,$vv)=each($options))     {
+                               $menu[]='<input type="checkbox" value="1" name="compareFlags['.$kk.']"'.($compareFlags[$kk]?' checked="checked"':'').'>'.htmlspecialchars($vv);
+                       }
+                       $outCode = 'Group by:<br />'.implode('<br />',$menu);
+                       $outCode.='<br /><input type="submit" name="ads" value="Update">';
+                       $content = $this->doc->section('Group and Compare Users',$outCode,0,1);
+
+
+                               // Traverse all users
+                       $users = t3lib_BEfunc::getUserNames();
+                       $comparation=array();
+       //              debug($users);
+                       reset($users);
+                       $counter=0;
+
+
+                       $offset=0;
+                       $numberAtTime=1000;
+                       $tooManyUsers='';
+
+                       while(list(,$r)=each($users))   {
+                               if ($counter>=$offset)  {
+                                               // This is used to test with other users. Development ONLY!
+                                       $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');     // New backend user object
+                                       $tempBE_USER->OS = TYPO3_OS;
+                                       $tempBE_USER->setBeUserByUid($r['uid']);
+                                       $tempBE_USER->fetchGroupData();
+
+                                               // Making group data
+                                       $md5pre='';
+                                       $menu=array();
+                                       $uInfo = $tempBE_USER->ext_compileUserInfoForHash();
+                                       reset($options);
+                                       while(list($kk,$vv)=each($options))     {
+                                               if ($compareFlags[$kk]) {
+                                                       $md5pre.=serialize($uInfo[$kk]).'|';
+                                               }
+                                       }
+                                               // setting md5:
+                                       $md5=md5($md5pre);
+                                       if (!isset($comparation[$md5])) {
+                                               $comparation[$md5]=$tempBE_USER->ext_printOverview($uInfo,$compareFlags);
+                                               $comparation[$md5]['users']=array();
+                                       }
+                                       $comparation[$md5]['users'][]=$tempBE_USER->user;       //array('uid'=>$r['uid'],'username'=>$r['username'],'realName'=>$tempBE_USER->user['realName'],'email'=>$tempBE_USER->user['email'],'admin'=>$tempBE_USER->user['admin']);
+                                       unset($tempBE_USER);
+                               }
+                               $counter++;
+                               if ($counter>=($numberAtTime+$offset)) {
+                                       $tooManyUsers='There were more than '.$numberAtTime.' users (total: '.count($users).') and this tool can display only '.$numberAtTime.' at a time!';
+                                       break;
+                               }
+                       }
+
+                               // Print the groups:
+                       $allGroups=array();
+                               // Header:
+                       $allCells = array();
+                       reset($options);
+                       $allCells['USERS'] = '<b>Usernames:</b>';
+                       while(list($kk,$vv)=each($options))     {
+                               if ($compareFlags[$kk]) {
+                                       $allCells[$kk] = '<b>'.$vv.':</b>';
+                               }
+                       }
+                       $allGroups[]=$allCells;
+
+                       reset($comparation);
+                       while(list(,$dat)=each($comparation))   {
+                               $allCells = array();
+
+                               $uListArr=array();
+                               reset($dat['users']);
+                               while(list(,$uDat)=each($dat['users'])) {
+                                       $uListArr[] = '<tr><td width="130">'.t3lib_iconWorks::getIconImage('be_users',$uDat,$GLOBALS['BACK_PATH'],'align="top" title="'.$uDat['uid'].'"').$this->linkuser($uDat['username'],$uDat).'&nbsp;&nbsp;</td><td nowrap="nowrap">'.$this->elementLinks('be_users',$uDat).
+                                               '<a href="'.t3lib_div::linkThisScript(array('SwitchUser'=>$uDat['uid'])).'" target="_top"><img src="'.$GLOBALS['BACK_PATH'].'gfx/su.gif" width="18" height="11" border="0" align="top" title="'.htmlspecialchars('Switch User to: '.$uDat['username']).'" alt="" /></a>'.
+                                               '</td></tr>';
+                               }
+                               $allCells['USERS'] = '<table border="0" cellspacing="0" cellpadding="0" width="100%">'.implode('',$uListArr).'</table>';
+
+                               reset($options);
+                               while(list($kk,$vv)=each($options))     {
+                                       if ($compareFlags[$kk]) {
+                                               $allCells[$kk] = $dat[$kk];
+                                       }
+                               }
+                               $allGroups[]=$allCells;
+                       }
+
+                               // Make table
+                       $outTable='';
+                       reset($allGroups);
+                       $TDparams=' nowrap="nowrap" class="bgColor5" valign="top"';
+                       while(list(,$allCells)=each($allGroups))        {
+                               $outTable.='<tr><td'.$TDparams.'>'.implode('</td><td'.$TDparams.'>',$allCells).'</td></tr>';
+                               $TDparams=' nowrap="nowrap" class="bgColor4" valign="top"';
+                       }
+                       $outTable='<table border="0" cellpadding="2" cellspacing="2">'.$outTable.'</table>';
+                       $outTable.=fw('<br /><br />(All cached group lists updated.)');
+                       $outTable.=$tooManyUsers?'<br /><br /><strong><span class="typo3-red">'.$tooManyUsers.'</span></strong>':'';
+                       $content.= $this->doc->spacer(10);
+                       $content.= $this->doc->section('Result',$outTable,0,1);
+               }
+               return $content;
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @param       [type]          $str: ...
+        * @param       [type]          $rec: ...
+        * @return      [type]          ...
+        */
+       function linkUser($str,$rec)    {
+               return '<a href="index.php?be_user_uid='.$rec['uid'].'">'.$str.'</a>';
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @param       [type]          $table: ...
+        * @param       [type]          $row: ...
+        * @return      [type]          ...
+        */
+       function elementLinks($table,$row)      {
+               global $TCA;
+                       // Info:
+               $cells[]='<a href="#" onclick="top.launchView(\''.$table.'\', \''.$row['uid'].'\',\''.$GLOBALS['BACK_PATH'].'\'); return false;"><img src="'.$GLOBALS['BACK_PATH'].'gfx/zoom2.gif" width="12" height="12" border="0" align="top" title="Show information" alt="" /></a>';
+
+                       // Edit:
+               $params='&edit['.$table.']['.$row['uid'].']=edit';
+               $cells[]='<a href="#" onclick="'.t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'],'').'"><img src="'.$GLOBALS['BACK_PATH'].'gfx/edit2.gif" width="11" height="12" border="0" align="top" title="Edit" alt="" /></a>';
+
+                       // Hide:
+               $hiddenField = $TCA[$table]['ctrl']['enablecolumns']['disabled'];
+               if ($row[$hiddenField]) {
+                       $params='&data['.$table.']['.$row['uid'].']['.$hiddenField.']=0';
+                       $cells[]='<a href="'.$this->doc->issueCommand($params).'"><img src="'.$GLOBALS['BACK_PATH'].'gfx/button_unhide.gif" width="11" height="10" border="0" title="Disable" align="top" alt="" /></a>';
+               } else {
+                       $params='&data['.$table.']['.$row['uid'].']['.$hiddenField.']=1';
+                       $cells[]='<a href="'.$this->doc->issueCommand($params).'"><img src="'.$GLOBALS['BACK_PATH'].'gfx/button_hide.gif" width="11" height="10" border="0" title="Disable" align="top" alt="" /></a>';
+               }
+
+                       // Delete
+               $params='&cmd['.$table.']['.$row['uid'].'][delete]=1';
+               $cells[]='<a href="'.$this->doc->issueCommand($params).'" onclick="return confirm(unescape(\''.rawurlencode('Are you sure you want to delete this element?').'\'));"><img src="'.$GLOBALS['BACK_PATH'].'gfx/garbage.gif" width="11" height="12" border="0" align="top" title="Delete(!)" alt="" /></a>';
+
+               return implode('',$cells);
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @return      [type]          ...
+        */
+       function initUsers()    {
+                       // Initializing all users in order to generate the usergroup_cached_list
+               $users = t3lib_BEfunc::getUserNames();
+               //debug($users);
+               reset($users);
+               while(list(,$r)=each($users))   {
+                               // This is used to test with other users. Development ONLY!
+                       $tempBE_USER = t3lib_div::makeInstance('local_beUserAuth');     // New backend user object
+                       $tempBE_USER->OS = TYPO3_OS;
+                       $tempBE_USER->setBeUserByUid($r['uid']);
+                       $tempBE_USER->fetchGroupData();
+               }
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @param       [type]          $str: ...
+        * @return      [type]          ...
+        */
+       function localPath($str)        {
+               if (substr($str,0,strlen(PATH_site))==PATH_site)        {
+                       return substr($str,strlen(PATH_site));
+               } else return $str;
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @param       [type]          $switchUser: ...
+        * @return      [type]          ...
+        */
+       function switchUser($switchUser)        {
+               $uRec=t3lib_BEfunc::getRecord('be_users',$switchUser);
+               if (is_array($uRec) && $GLOBALS['BE_USER']->isAdmin())  {
+                       $GLOBALS['TYPO3_DB']->exec_UPDATEquery('be_sessions', 'ses_id="'.$GLOBALS['TYPO3_DB']->quoteStr($GLOBALS['BE_USER']->id, 'be_sessions').'" AND ses_name="be_typo_user" AND ses_userid='.intval($GLOBALS['BE_USER']->user['uid']), array('ses_userid' => $uRec['uid']));
+
+                       header('Location: '.t3lib_div::locationHeaderUrl($GLOBALS['BACK_PATH'].'index.php'.($GLOBALS['TYPO3_CONF_VARS']['BE']['interfaces']?'':'?commandLI=1')));
+                       exit;
+               }
+       }
+}
+
+// Include extension?
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/beuser/mod/index.php'])       {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/beuser/mod/index.php']);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+// Make instance:
+$SOBE = t3lib_div::makeInstance('SC_mod_tools_be_user_index');
+$SOBE->init();
+$SOBE->main();
+$SOBE->printContent();
+?>
diff --git a/typo3/sysext/beuser/mod/locallang_mod.php b/typo3/sysext/beuser/mod/locallang_mod.php
new file mode 100755 (executable)
index 0000000..00af497
--- /dev/null
@@ -0,0 +1,139 @@
+<?php
+
+$LOCAL_LANG = Array (
+       'default' => Array (
+               'mlang_labels_tablabel' => 'Administration of Backend Users',
+               'mlang_labels_tabdescr' => 'The User Admin module provides you with an overview of all backend users. You can group them by their properties so you\'re able to monitor their permissions, filemounts, TSconfig, member groups etc.. This module is an indispensable tool in order to make sure the users are correctly configured.<br /><em>Access for \'admin\' users only!</em>',
+               'mlang_tabs_tab' => 'User Admin',
+       ),
+       'dk' => Array (
+               'mlang_labels_tablabel' => 'Administration af Opdateringsbrugere',
+               'mlang_labels_tabdescr' => '\'Brugere\' modulet giver dig et overblik over alle opdateringsbrugere. Du kan gruppere dem efter deres egenskaber så du er i stand til at overvåge deres rettigheder, fildrev, TSconfig, medlemsgrupper osv. Dette modul er et uundværligt værktøj når man skal være sikker på, at brugere er korrekt konfigureret.<br /><em>Adgang kun for \'admin\' brugere!</em>',
+               'mlang_tabs_tab' => 'Brugere',
+       ),
+       'de' => Array (
+               'mlang_labels_tablabel' => 'Administration der Backend Benutzer',
+               'mlang_labels_tabdescr' => 'Das Benutzer Administrations-Modul bietet Ihnen eine Übersicht über alle vorhanden Benutzer des TYPO3 Backends. Sie können diese Benutzer ihren Eigenschaften entsprechend gruppieren, deren Zugriffrechte, Dateifreigaben, Konfiguration, Gruppenzugehörigkeiten ansehen, usw. Dieses Modul ist ein unentbehrliches Hilfsmittel zur Überprüfung und Festlegung der korrekten Benutzerkonfiguration.<br /><em>Zugriff nur für Administratoren!</em>',
+               'mlang_tabs_tab' => 'Benutzer Administrator',
+       ),
+       'no' => Array (
+               'mlang_labels_tablabel' => 'Administrasjon av Oppdateringsbrukere',
+               'mlang_labels_tabdescr' => '\'Brukere\' modulen gir deg en oversikt over alle oppdateringsbrukerne. Du kan gruppere dem etter deres egenskaper slik at du er i stand til å overvåke deres rettigheter, fildrev, TSconfig, medlemsgrupper osv. Dette er et uunnværlig verktøy når man skal være sikker på at brukerne er riktig konfigurert.<br /><em>Adgang kun for \'admin\' brukere!</em>',
+               'mlang_tabs_tab' => 'Brukere',
+       ),
+       'it' => Array (
+               'mlang_labels_tablabel' => 'Gestione utenti Backend',
+               'mlang_labels_tabdescr' => 'Questo modulo offre una visione d\'insieme degli utenti del backend (gli amministratori): puoi raggrupparli in base ai loro attributi, in modo da analizzare i permessi, filemount, TSconfig, gruppi di appartenenza, etc. Questo modulo è indispensabile per assicurarsi che tutti gli account di amministrazione siano correttamente configurati. <br><em>Accesso riservato ai soli utenti \'admin\'!</em>',
+               'mlang_tabs_tab' => 'Gestione utenti Backend',
+       ),
+       'fr' => Array (
+               'mlang_labels_tablabel' => 'Administration des utilisateurs Backend',
+               'mlang_labels_tabdescr' => 'Ce module vous offre une vue d\'ensemble sur les comptes utilisateur Backend. Ce module est indispensable, pour être sûre de bien avoir configuer tous les comptes.',
+               'mlang_tabs_tab' => 'Administration des utilisateurs',
+       ),
+       'es' => Array (
+               'mlang_labels_tablabel' => 'Administración de los usuarios de Backend',
+               'mlang_labels_tabdescr' => 'El módulo de Administración de usuarios le da un listado de todos los usuraios de backend. Los puede agrupar por sus propiedades para así monitorear sus permisos, puntos de montaje de archivos, TSconfig, miembros de grupo etc. Este módulo es una herramienta indispensable para garantizar la correcta configuración de los usuarios.<br /><em>¡Acceso solamente para usuarios \'administrador\'!</em>',
+               'mlang_tabs_tab' => 'Administración de usuarios',
+       ),
+       'nl' => Array (
+               'mlang_labels_tablabel' => 'Administratie van de BeheerSitegebruikers',
+               'mlang_labels_tabdescr' => 'De Gebruikers Adminmodule biedt je een overzicht van de BeheerSitegebruikers. Je kan ze aan de hand van hun eigenschappen groeperen, zodat je toezicht kunt houden op hun rechten, startpunten, TSconfig, groepen van leden enz.... Deze module is een onmisbaar instrument. Zo kan je controleren of de gebruikers juist zijn geconfigureerd.<br /><em>Alleen toegang voor \'admin\' gebruikers!</em>',
+               'mlang_tabs_tab' => 'Gebruikers Admin',
+       ),
+       'cz' => Array (
+               'mlang_labels_tablabel' => 'Administrace u\9eivatelù backendu',
+               'mlang_labels_tabdescr' => 'Modul administrace u\9eivatelù poskytuje pøehled o v\9aech u\9eivatelích backendu. Mù\9eete je seskupovat podle vlastností, abyste mohli monitorovat jejich pøístupová práva, mounty souborù, TSconfig, skupiny u\9eivatelù atd. Tento modul je nepostradatelný, abyste si byli jisti, \9ee jsou u\9eivatelé správnì nakonfigurováni.<br /><em>Pøístup pouze pro \'admin\' u\9eivatele!</em>',
+               'mlang_tabs_tab' => 'U\9eivatelé',
+       ),
+       'pl' => Array (
+               'mlang_labels_tablabel' => 'Administracja u¿ytkownikami',
+               'mlang_labels_tabdescr' => 'Modu³ administracji u¿ytkownikami umo¿liwia przegl±danie listy u¿ytkowników. Mo¿na tu porównywaæ u¿ytkowników spe³niaj±cych zadane kryteria. Jest to pomocne przy monitorowaniu ich uprawnieñ, dostêpu do plików, grup oraz czuwaniu nad prawid³ow± konfiguracj± u¿ytkowników.<br /><em>Dostêp tylko dla administratorów!<em>',
+               'mlang_tabs_tab' => 'Administracja u¿ytkownikami',
+       ),
+       'si' => Array (
+               'mlang_labels_tablabel' => 'Administracija uporabnikov \'backend\'a',
+               'mlang_labels_tabdescr' => 'Modul za administracijo uporabnikov vam ponuja nadzor nad uporabniki programa. Lahko jih sortirate po znaèilnostih. Spreminjate jim lahko privilegije, dostop do datotek, TSconfig, èlanstvo v skupinah itd. Ta modul je nepogre\9aljivo orodje za administracijo.<br /><em>Uporaba dovoljena le \'admin\' uporabnikom!</em>',
+               'mlang_tabs_tab' => 'User Admin',
+       ),
+       'fi' => Array (
+               'mlang_labels_tablabel' => 'Backend käyttäjien hallinta',
+               'mlang_labels_tabdescr' => 'User admin modulilla hallitaan backend käyttäjiä. Nämä käyttäjät voidaan myös ryhmitellä jotta eri toimintojesa seuranta helpottuu. Modulin välttämättömyys korostuu varmistautuessa käyttäjien asetuksien ja oikeuksia asianmukaisuudesta.<br /><em>Sallittu vain \'Admin\'  käyttäjille.</em>',
+               'mlang_tabs_tab' => 'User Admin',
+       ),
+       'tr' => Array (
+               'mlang_labels_tablabel' => 'Arkaplan Kullanýcýlarýnýn Yönetimi ',
+               'mlang_labels_tabdescr' => 'Kullanýcý Yönetim modülü tüm arkaplan kullanýcýlarýna genel bir görünüm saðlar. Kullanýcýlarý özellikleriyle grup yapabilirisiniz ki izinlerini, dosya mountlarýný, TSkonfigürasyonlarýný, üye gruplarýný v.s.. görüntüleyebilirsiniz. Bu modül komuttaki gerekli aracý ne yapýp edip doðru bir þekilde konfigüre edilmesini saðlar.<br /><em>Sadece kullanýcýlarýn \'yönetim\' için geçiþi!</em>',
+               'mlang_tabs_tab' => 'Kullanýcý Yönetimi',
+       ),
+       'se' => Array (
+               'mlang_labels_tablabel' => 'Administration av Backend användare',
+               'mlang_labels_tabdescr' => 'I denna modul får du en överblick över alla backend användare. Det går att gruppera dem enligt deras inställningar, så att du kan följa med deras rättigheter, filmonteringar, TSinställningar, medlemsgrupper mm. Denna modul är ett oumbärligt verktyg då det gäller att se till, att varje användare har rätt inställningar. <BR><em>Tillgänglig endast för \'admin\'-användare!</em>',
+               'mlang_tabs_tab' => 'Användaradministration',
+       ),
+       'pt' => Array (
+               'mlang_labels_tablabel' => 'Administração de Utilizadores do Sistema',
+               'mlang_labels_tabdescr' => 'O módulo de Administração de Utilizadores providencia uma vista geral de todos os utilizadores do sistema. Pode agrupá-los pelas suas propriedades a fim de lhe ser possível monitorizar as suas permissões, directorias, TSconfig, grupos, etc... Este módulo é uma ferramenta indispensável para garantir que os utilizadores estão correctamente configurados.<br /><em>Acesso só para utilizadores \'admin\'!</em>',
+               'mlang_tabs_tab' => 'Admin Util',
+       ),
+       'ru' => Array (
+               'mlang_labels_tablabel' => 'Óïðàâëåíèå íàñòðîéêàìè âíóòðåííèõ ïîëüçîâàòåëåé',
+               'mlang_labels_tabdescr' => 'Ìîäóëü óïðàâëåíèÿ ïîëüçîâàòåëÿìè ïðåäîñòàâëÿåò îáçîð âñåõ âíóòðåííèõ ïîëüçîâàòåëåé. Âû ìîæåòå ãðóïïèðîâàòü èõ ïî èõ ñâîéñòâàì, ÷òîáû óâèäåòü èõ ïðàâà, êîðíåâûå ïàïêè ôàéëîâ, TSconfig, ÷ëåíñòâî â ãðóïïàõ è ò.ä. Ýòîò ìîäóëü - íåçàìåíèìûé èíñòðóìåíò äëÿ ïðîâåðêè ïðàâèëüíîé íàñòðîéêè ïîëüçîâàòåëåé.<BR><em>Äîñòóï òîëüêî äëÿ ïîëüçîâàòåëåé \'Admin\'!</em>',
+               'mlang_tabs_tab' => 'User Admin',
+       ),
+       'ro' => Array (
+               'mlang_labels_tablabel' => 'Administrarea utilizatorilor Backend',
+               'mlang_labels_tabdescr' => 'Modulul Administrare Utilizatori vã oferã o vedere de ansamblu a tuturor utilizatorilor backend. Îi puteþi grupa funcþie de proprietãþile lor, pentru a putea monitoriza permisiunile, cãile rãdãcinã, configurãrile TS, grupurile de membri, etc...Acest modul este o unealtã indispensabilã dacã doriþi sã fiþi sigur cã toþi utilizatorii sînt corect configuraþi.',
+               'mlang_tabs_tab' => 'Administrare Utilizatori',
+       ),
+       'ch' => Array (
+       ),
+       'sk' => Array (
+               'mlang_labels_tablabel' => 'Administrácia u\9eívate¾ov backendu',
+               'mlang_labels_tabdescr' => 'Modul administrácie u\9eívate¾ov poskytuje preh¾ad o v\9aetkých u\9eívate¾och backendu. Mô\9ees ich zoskupovat pod¾a vlastností, aby si mohol monitorova\9d ich prístupové práva, mounty súborov, TSconfig, skupiny u\9eívate¾ov atd. Tento modul je nepostradate¾ný, aby si si bol istí, \9ee sú u\9eívatelia správne nakonfigurovaní.<BR><em>Prístup len pre \'admin\' u\9eivate¾a !</em>',
+               'mlang_tabs_tab' => 'U\9eívatelia',
+       ),
+       'lt' => Array (
+       ),
+       'is' => Array (
+       ),
+       'hr' => Array (
+               'mlang_labels_tablabel' => 'Administracija korisnika backenda',
+               'mlang_labels_tabdescr' => 'Modul za administraciju backend korisnika omoguæava pregled svih backend korisnika. Mo\9eete ih grupirati po osobinama kako bi mogli pratiti njihove dozvole, filemount-ove, TSconfig, grupe èlanove i sl. Ovaj je modul nezaobilazan alat za pravilno pode\9aavanje korisnika.<BR /><em> Pristup dozvoljen samo admin korisnicima!</em>',
+               'mlang_tabs_tab' => 'Administracija korisnika',
+       ),
+       'hu' => Array (
+       ),
+       'gl' => Array (
+       ),
+       'th' => Array (
+       ),
+       'gr' => Array (
+       ),
+       'hk' => Array (
+               'mlang_labels_tablabel' => '«á¶Ô¨Ï¥ÎªÌºÞ²z',
+               'mlang_labels_tabdescr' => '«á¶Ô¨Ï¥ÎªÌ¼Ò²Õ¨Ï§A¦³©Ò¦³«á¶Ô¨Ï¥ÎªÌªº·§Äý¡C§A¥i¥H«öµÛ¥L­Ìªº¯S©Ê¨Ó¬°¥L­Ì¬°²Õ¡A¥H­P§A¯à°÷ºÊ¹î¥L­ÌªºÅv­­¡NÀɮתþ´Þ¡NTSconfig©M·|­û¸s²Õµ¥¡C³o­Ó¼Ò²Õ©ó¦³®Ä©M¥¿½T¦a³]©w¨Ï¥ÎªÌ¬O¤£¥i©Î¯Êªº¤u¨ã¡C<Br><em>¥u³\\¡uºÞ²z¡v¯Å¨Ï¥ÎªÌ¨Ï¥Î¡I</em?',
+               'mlang_tabs_tab' => '¨Ï¥ÎªÌºÞ²z',
+       ),
+       'eu' => Array (
+       ),
+       'bg' => Array (
+               'mlang_labels_tablabel' => 'Àäìèíèñòðàöèÿ íà Backend ïîòðåáèòåëè',
+               'mlang_labels_tabdescr' => 'Ìîäóëà çà àäìèíèñòðèðàíå íà ïîòðåáèòåëèòå Âè îñèãóðÿâà ïðåãëåä (overview) íà âñè÷êè backend ïîòðåáèòåëè. Ìîæåòå äà ãè ãðóïèðàòå ïî òåõíèòå ñâîéñòâà, òàêà ÷å äà ìîãàò äà áúäàò íàáëþäàâàíè ïî òåõíèòå ïðàâà, çàêà÷åíè ôàéëîâå (filemounts), TSconfig, ÷ëåíñêè ãðóïè è äð.. Òîçè ìîäóë å çàäúëæèòåëåí çà äà ñòå ñèãóðíè ÷å ïîòðåáèòåëèòå ñà êîíôèãóðèðàíè ïðàâèëíî. .<BR><em>Äîñòúï çà \'Àäìèí\' ïîòðåáèòåëè ñàìî!</em>',
+               'mlang_tabs_tab' => 'Àäìèíèñòðàòîð íà ïîòðåáèòåëèòå',
+       ),
+       'br' => Array (
+               'mlang_labels_tablabel' => 'Administração de Usuários do Sistema',
+               'mlang_labels_tabdescr' => 'O módulo de Administração de Usuários providencia uma visão geral de todos os usuários do sistema. Você pode agrupá-los pelas suas propriedades para monitorar as suas permissões, diretórios, TSconfig, grupos, etc... Este módulo é uma ferramenta indispensável para garantir que os usuários estão corretamente configurados.<br><em>Acesso só para usuários \'admin\'!</em>',
+               'mlang_tabs_tab' => 'Admin. de Usuários',
+       ),
+       'et' => Array (
+       ),
+       'ar' => Array (
+       ),
+       'he' => Array (
+       ),
+       'ua' => Array (
+       ),
+);
+?>
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/css/example.css b/typo3/sysext/css_styled_content/css/example.css
new file mode 100755 (executable)
index 0000000..53ff78d
--- /dev/null
@@ -0,0 +1,308 @@
+/* TYPO3 CVS id: $id$ */
+/* Template stylesheet which can be used for new sites */
+/* Make a copy of this stylesheet to some other location, modify it and use it from there! */
+/*
+
+Colorscheme is:
+
+Background Color 1: #EDEBF1;   (Background 1)
+Background Color 1-dimmed: #D8D7DC;    (Background 1 - dimmed)
+Background Color 2: #F5FFAA;   (Background 2)
+Background Color 3: #D1D2E4;   (Background 2)
+
+Text, main:    #000000
+Text Color 1: #186900; (red)
+Text Color 2: #10007B; (green)
+Text Color 3: #8A0020; (blue)
+
+Links          #000066
+Link hover: #660000;
+
+Borders/Lines  #333333
+*/
+
+
+/***************************/
+/* General element styles: */
+/***************************/
+H1, H2, H3, H4, H5, P, TD, UL, OL, BLOCKQUOTE, INPUT, TEXTAREA, SELECT { font-family: arial, helvetica; color: #000000; }
+PRE { font-family: monospace; }
+A { color: #000066; text-decoration: underline; }
+A:hover { color: #660000; }
+FORM { margin: 0px 0px 0px 0px;}
+P, PRE { margin: 0px 0px 0px 0px; }
+P, TD, UL, OL { font-size: 11px; }
+INPUT, TEXTAREA, SELECT { padding-left: 5px; font-size: 11px; }
+
+
+/********************************/
+/* Frames, spacing, link-to-top */
+/********************************/
+P.csc-linkToTop { text-align: right; }
+P.csc-linkToTop A { font-weight: bold; }
+
+DIV.csc-frame { border: 0px; }
+DIV.csc-frame-invisible {}
+DIV.csc-frame-rulerBefore { border-top: 1px solid #333333; }
+DIV.csc-frame-rulerAfter { border-bottom: 1px solid #333333; }
+DIV.csc-frame-indent { padding-left: 100px; }
+DIV.csc-frame-indent3366 { padding-left: 33%; }
+DIV.csc-frame-indent6633 { padding-right: 33%; }
+DIV.csc-frame-frame1 { background-color: #EDEBF1; padding: 2px 4px 2px 4px; border: 1px solid #333333; }
+DIV.csc-frame-frame2 { background-color: #F5FFAA; padding: 2px 4px 2px 4px; border: 1px solid #333333; }
+
+DIV.csc-frame-frame1 H1, DIV.csc-frame-frame1 H2, DIV.csc-frame-frame1 H3, DIV.csc-frame-frame1 H4, DIV.csc-frame-frame1 H5 { margin-top: 2px; }
+DIV.csc-frame-frame2 H1, DIV.csc-frame-frame2 H2, DIV.csc-frame-frame2 H3, DIV.csc-frame-frame2 H4, DIV.csc-frame-frame2 H5 { margin-top: 2px; }
+                               
+/******************/
+/* Headers, plain */
+/******************/
+H1 { font-size: 20px; }
+H2 { font-size: 18px; color: #186900; }
+H3 { font-size: 16px; color: #10007B; }
+H4 { font-size: 14px; color: #8A0020; }
+H1, H2, H3, H4, H5, H6 { margin: 0px 0px 0px 0px; margin-top: 10px; margin-bottom: 2px; }
+H1.csc-firstHeader, H2.csc-firstHeader, H3.csc-firstHeader, H4.csc-firstHeader, H5.csc-firstHeader, H6.csc-firstHeader { margin-top: 0px; }
+
+/* Headers, with link */
+H1 A, H2 A, H3 A, H4 A, H5 A { color: #000000; text-decoration: none; }
+H2 A { color: #186900; }
+H3 A { color: #10007B; }
+H4 A { color: #8A0020; }
+H1 A:hover, H2 A:hover, H3 A:hover, H4 A:hover, H5 A:hover { text-decoration: underline; }
+
+/* Header date */
+P.csc-header-date { font-size: 10px; color: #186900; }
+
+/* Subheader, general */
+P.csc-subheader { font-style: italic; background-color: #EDEBF1; }
+
+/* Subheader, specific */
+P.csc-subheader-0 { font-style: normal; }
+P.csc-subheader-1 { color: #186900; }
+P.csc-subheader-2 { color: #10007B; }
+P.csc-subheader-3 { color: #8A0020; }
+
+
+
+/*******************/
+/* RTE / Bodytext: */
+/*******************/
+P.bodytext { font-size: 11px; color: #000000; }
+P.bodytext A { font-weight: bold; }
+
+/* RTE / Bulletlists */
+UL { margin-top: 0px;  }
+UL UL LI { font-size: 10px; }
+OL { margin-top: 0px; }
+LI { margin-top: 0px; margin-bottom: 0px; padding-top: 2px; }
+
+/* RTE / Table styling */
+TABLE.contenttable { border: 1px #333333 solid; margin: 10px 0px 10px 0px; width: 100%; }
+TABLE.contenttable TR TD { padding: 0px 3px 0px 3px; }
+TABLE.contenttable TR TD P.bodytext { font-size: 10px; }
+TABLE.contenttable TR { background-color: #EDEBF1; }
+
+
+
+/**********/
+/* Images */
+/**********/
+
+/* Images / Captions */
+P.csc-caption { font-size: 10px; font-style: italic; }
+
+/* Images / Tables / Floating text */
+TABLE.imgtext-table { border: 0px; }
+
+/* Images / Tables / Wrapped text */
+/* When "Text w/Image" elements are wrapping the text into a table the top-margin of Hx elements should be transferred to the wrapping table instead. This is done here: */
+TABLE.imgtext-nowrap { border: 0px; }
+TABLE.imgtext-nowrap H1, TABLE.imgtext-nowrap H2, TABLE.imgtext-nowrap H3, TABLE.imgtext-nowrap H4, TABLE.imgtext-nowrap H5 { margin-top: 0px; }
+
+
+
+/***************/
+/* Bulletlists */
+/***************/
+
+/* Bulletlists, general */
+UL.csc-bulletlist LI { font-size: 11px; }
+
+/* Bulletlists, specifically */
+UL.csc-bulletlist-0 { color: #000000; }
+UL.csc-bulletlist-1 { color: #186900; list-style-type : decimal; }
+UL.csc-bulletlist-2 { color: #10007B; list-style-position : inside; }
+UL.csc-bulletlist-3 { color: #8A0020; list-style-image: url(img/red_arrow_bullet.gif); }
+
+
+
+/*********************/
+/* Tables, generally */
+/*********************/
+TABLE.contenttable P { font-size: 11px; }
+TABLE.contenttable TR TD { vertical-align: top; }
+
+/* Tables, specifically */
+TABLE.contenttable-0 P { color: #000000; }
+
+TABLE.contenttable-1 P { color: #186900; }
+TABLE.contenttable-1 TR.tr-0 TD P { font-weight: bold; }
+TABLE.contenttable-1 TR.tr-0 TD { background-color: #D1D2E4;}
+TABLE.contenttable-2 P { color: #10007B; }
+TABLE.contenttable-2 TR TD.td-0 { background-color: #F5FFAA;}
+TABLE.contenttable-2 TR TD.td-0 P { font-weight: bold; }
+
+TABLE.contenttable-3 P { color: #8A0020; }
+TABLE.contenttable-3 TR TD.td-0, TABLE.contenttable-3 TR.tr-0 TD { background-color: #D1D2E4;}
+TABLE.contenttable-3 TR TD.td-0 P, TABLE.contenttable-3 TR.tr-0 TD P { font-weight: bold; }
+
+
+
+/************************/
+/* Filelinks, generally */
+/************************/
+TABLE.csc-uploads { border: 0px; }
+TABLE.csc-uploads TR TD P { background-color : transparent; font-size: 12px; }
+TABLE.csc-uploads TR TD { vertical-align : top; }
+TABLE.csc-uploads TR.tr-even { background-color: #EDEBF1; }
+TABLE.csc-uploads TR.tr-odd { background-color: #D8D7DC; }
+TABLE.csc-uploads TR TD.csc-uploads-icon { padding-left: 6px; padding-right: 6px; width: 1%; text-align: center; vertical-align: middle; }
+TABLE.csc-uploads TR TD.csc-uploads-fileName { width: 80%; padding-left: 5px; }
+TABLE.csc-uploads TR TD.csc-uploads-fileName P A { font-weight: bold; }
+TABLE.csc-uploads TR TD.csc-uploads-fileName P.csc-uploads-description { font-style: italic; }
+TABLE.csc-uploads TR TD.csc-uploads-fileSize { white-space: nowrap; padding-left: 6px; padding-right: 6px; }
+
+/* Filelinks, specifically */
+TABLE.csc-uploads-1 { border-color: #186900; }
+
+TABLE.csc-uploads-2 { border-color: #10007B; }
+
+TABLE.csc-uploads-3 { border-color: #8A0020; }
+TABLE.csc-uploads-3 TR TD { vertical-align: middle; }
+TABLE.csc-uploads-3 TR.tr-even TD.csc-uploads-icon IMG { border: 2px solid #333333; }
+TABLE.csc-uploads-3 TR.tr-odd TD.csc-uploads-icon IMG { border: 2px solid #333333; }
+                               
+
+
+/*****************/
+/* Various Forms */
+/*****************/
+
+/* Email, Login and Search forms generally: */
+FORM TABLE TR TD { padding-left: 5px; padding-right: 20px; }
+FORM TABLE TR TD.csc-form-labelcell, FORM TABLE TR TD.csc-form-commentcell { background-color: #D8D7DC; }
+FORM TABLE TR TD.csc-form-fieldcell { background-color: #EDEBF1; }
+FORM TABLE TR TD.csc-form-fieldcell INPUT, FORM TABLE TR TD.csc-form-fieldcell SELECT, FORM TABLE TR TD.csc-form-fieldcell TEXTAREA { border: 1px solid #333333; }
+FORM TABLE TR TD.csc-form-labelcell P.csc-form-label-req { font-weight: bold; }
+
+/* Email form, specifically */
+FORM TABLE.csc-mailform TR TD.csc-form-labelcell  { }
+
+/* Search form, specifically */
+FORM TABLE.csc-searchform { width: 100%; }
+FORM TABLE.csc-searchform TR TD { padding: 5px 5px 5px 5px; }
+FORM TABLE.csc-searchform TR TD.csc-form-labelcell, FORM TABLE.csc-searchform TR TD.csc-form-commentcell { font-weight: bold; }
+FORM TABLE.csc-searchform TR TD.csc-form-fieldcell INPUT, FORM TABLE.csc-searchform TR TD.csc-form-fieldcell SELECT { width: 100%; }
+
+/* Login form, specifically */
+FORM TABLE.csc-loginform { width: 70%; }
+
+
+/*****************/
+/* Search result */
+/*****************/
+
+/* Search Result, result information box: */
+TABLE.csc-searchResultInfo { margin-left: 0px; margin-top: 10px; width: 100%;}
+TABLE.csc-searchResultInfo TR { background-color: #EDEBF1; }
+TABLE.csc-searchResultInfo TR TD P { padding: 0px 5px 0px 5px;}
+TABLE.csc-searchResultInfo TR TD.csc-searchResultRange P { font-weight: bold; }
+TABLE.csc-searchResultInfo TR TD.csc-searchResultPrevNext { text-align: right; }
+
+/* Search Result, header + abstract: */
+H3.csc-searchResultHeader A { color: #186900; }
+H3.csc-searchResultHeader { background-color: #EDEBF1; font-size: 14px; padding-left: 5px; }
+P.csc-searchResult { font-style: italic; margin-left: 20px;}
+
+/* Search word markup */
+SPAN.csc-sword { font-weight: bold; color: red; }
+
+
+/*****************************/
+/* Menu / Sitemap, generally */
+/*****************************/
+DIV.csc-menu { margin-left: 10px; }
+DIV.csc-menu P { font-size: 11px; font-weight: bold; margin: 1px 0px 0px 0px; padding: 2px 2px 2px 10px; background-color: #EDEBF1; }
+DIV.csc-menu P A { color: #000000; text-decoration: none; }
+DIV.csc-menu P A:hover { color: #660000; text-decoration: underline; }
+DIV.csc-menu P.csc-section { font-weight: normal; margin-left: 20px; font-style: italic; }
+
+/* Menu / Sitemap, "Menu of these pages" */
+DIV.csc-menu-def P {  }
+
+/* Menu / Sitemap, "Menu of subpages to these pages" */
+DIV.csc-menu-1 { }
+
+/* Menu / Sitemap, "Sitemap" */
+DIV.csc-menu-2 { }
+DIV.csc-menu-2 P.csc-sitemap { }
+DIV.csc-menu-2 P.csc-sitemap-level1 { margin-left: 20px; }
+DIV.csc-menu-2 P.csc-sitemap-level2 { margin-left: 40px; }
+DIV.csc-menu-2 P.csc-sitemap-level3 { margin-left: 60px; }
+DIV.csc-menu-2 P.csc-sitemap-level4 { margin-left: 80px; }
+DIV.csc-menu-2 P.csc-sitemap-level1 A { color: #000000; }
+DIV.csc-menu-2 P.csc-sitemap-level2 A { color: #186900; }
+DIV.csc-menu-2 P.csc-sitemap-level3 A { color: #10007B; }
+DIV.csc-menu-2 P.csc-sitemap-level4 A { color: #8A0020; }
+
+/* Menu / Sitemap, "Section index (pagecontent w/Index checked)" */
+DIV.csc-menu-3 { }
+DIV.csc-menu-3 P.csc-section { margin-left: 0px; }
+DIV.csc-menu-3 P.csc-section A { color: #186900; }
+
+/* Menu / Sitemap, "Menu of subpages to these pages (with abstract)" */
+DIV.csc-menu-4 { }
+DIV.csc-menu-4 P { margin-top: 2px; }
+DIV.csc-menu-4 P.csc-abstract { font-weight: normal; font-style: italic; margin-top: 0px; padding: 0px 2px 2px 20px; }
+
+/* Menu / Sitemap, "Recently updated pages" */
+DIV.csc-menu-5 { }
+
+/* Menu / Sitemap, "Related pages (based on keywords)" */
+DIV.csc-menu-6 { }
+
+/* Menu / Sitemap, "Menu of subpages to these pages + sections" */
+DIV.csc-menu-7 { }
+DIV.csc-menu-7 P { font-weight: bold; }
+DIV.csc-menu-7 P.csc-section A { color: #186900; }
+
+
+
+/****************************************/
+/* Frontend editing / TYPO3 Admin Panel */
+/****************************************/
+IMG.frontEndEditIcons { vertical-align: middle; margin: 0px 2px 0px 2px; } 
+
+/* Default styles for the Admin Panel */
+TABLE.typo3-adminPanel { border: 1px solid black; background-color: #F6F2E6; }
+TABLE.typo3-adminPanel TR.typo3-adminPanel-hRow TD { background-color: #9BA1A8; }
+TABLE.typo3-adminPanel TR.typo3-adminPanel-itemHRow TD { background-color: #ABBBB4; }
+TABLE.typo3-adminPanel TABLE, TABLE.typo3-adminPanel TD { border: 0px; }
+TABLE.typo3-adminPanel TD FONT { font-family: verdana; font-size: 10px; color: black; }
+TABLE.typo3-adminPanel TD A FONT { font-family: verdana; font-size: 10px; color: black; }                      
+TABLE.typo3-editPanel { border: 1px solid black; background-color: #F6F2E6; }
+TABLE.typo3-editPanel TD { border: 0px; }
+
+
+/*************/
+/* Debugging */
+/*************/
+/*
+H1, H2, H3, H4, H5, P, UL, OL, LI, BLOCKQUOTE, PRE { border: 1px dotted #999999;}
+TD TABLE { border: 1px dotted #000099;}
+DIV { border: 1px dotted #990000;}
+IMG.spacer-gif { border: 1px solid black; }
+*/
+
diff --git a/typo3/sysext/css_styled_content/css/example_outlines.css b/typo3/sysext/css_styled_content/css/example_outlines.css
new file mode 100755 (executable)
index 0000000..0b0dc59
--- /dev/null
@@ -0,0 +1,296 @@
+/* TYPO3 CVS id: $id$ */
+/* Experimental stylesheet which highlights/outlines all elements */
+
+
+
+/***************************/
+/* General element styles: */
+/***************************/
+H1, H2, H3, H4, H5, P, TD, UL, OL, BLOCKQUOTE { font-family: arial, helvetica; border: 1px dotted #999999;}
+PRE { border: 1px dotted #999999; font-family: monospace; }
+H1, H2, H3, H4, H5 { background-color: #ddddcc; }
+P, UL, OL, BLOCKQUOTE { background-color: #ffcc66; }
+LI { border: 1px dotted #333333; }
+A { color: navy; text-decoration: none; }
+A:hover { text-decoration: underline; }
+FORM { margin: 0px 0px 0px 0px;}
+P, PRE { margin: 0px 0px 0px 0px; }
+
+                               
+
+/********************************/
+/* Frames, spacing, link-to-top */
+/********************************/
+IMG.spacer-gif { border: 1px solid navy; }
+P.csc-linkToTop { text-align: right; }
+P.csc-linkToTop A { font-weight: bold; }
+
+DIV.csc-frame { border: 2px dotted olive; }
+DIV.csc-frame-invisible {}
+DIV.csc-frame-rulerBefore { border-top: 1px solid black; }
+DIV.csc-frame-rulerAfter { border-bottom: 1px solid black; }
+DIV.csc-frame-indent { padding-left: 100px; }
+DIV.csc-frame-indent3366 { padding-left: 33%; }
+DIV.csc-frame-indent6633 { padding-right: 33%; }
+DIV.csc-frame-frame1 { background-color: red; }
+DIV.csc-frame-frame2 { background-color: green; }
+                               
+/******************/
+/* Headers, plain */
+/******************/
+H1 { font-size: 20px; }
+H2 { font-size: 18px; }
+H3 { font-size: 16px; }
+H1, H2, H3, H4, H5, H6 { margin-top: 20px; margin-bottom: 2px; }
+H1.csc-firstHeader, H2.csc-firstHeader, H3.csc-firstHeader, H4.csc-firstHeader, H5.csc-firstHeader, H6.csc-firstHeader { margin-top: 0px; }
+
+/* Headers, with link */
+H1 A, H2 A { color: #660000; }
+H1 A:hover { color: red; }
+
+/* Header date */
+P.csc-header-date { font-size: 10px; color: navy; }
+
+/* Subheader, general */
+P.csc-subheader { font-size: 12px; font-style: italic; background-color: #ccffee; }
+
+/* Subheader, specific */
+P.csc-subheader-0 { color: red; }
+P.csc-subheader-1 { color: green; }
+P.csc-subheader-2 { color: blue; }
+P.csc-subheader-3 { color: olive; font-style: normal; }
+
+
+
+/*******************/
+/* RTE / Bodytext: */
+/*******************/
+P.bodytext { font-size: 11px; background-color: #ccccff; }
+P.bodytext I { background-color: olive; }
+P.bodytext U { background-color: maroon; }
+P.bodytext B { background-color: teal; }
+P.bodytext B I { background-color: red; }
+P.bodytext B I U { background-color: green; }
+P.bodytext A { font-weight: bold; }
+
+/* RTE / Bulletlists */
+UL { font-size: 11px; margin-top: 0px;  }
+UL UL LI { font-size: 10px; }
+UL LI A { color: green; }
+
+OL { font-size: 11px; margin-top: 0px; }
+OL LI A { color: green; }
+
+LI { margin-top: 0px; margin-bottom: 0px; padding-top: 2px; }
+
+/* RTE / BlockQuote styling */
+BLOCKQUOTE { background-color: #5588ee; }
+BLOCKQUOTE P.bodytext { margin-left: 20px; }
+BLOCKQUOTE BLOCKQUOTE { background-color: #6699ff; }
+BLOCKQUOTE BLOCKQUOTE P.bodytext { margin-left: 20px; }
+
+/* RTE / Table styling */
+TABLE.contenttable { border: 1px #666666 solid; margin: 10px 10px 10px 10px; width: 70%; }
+TABLE.contenttable TR TD { padding: 5px 5px 5px 5px; }
+TABLE.contenttable TR TD P.bodytext { font-size: 10px; color: #666666; font-style: italic; }
+TABLE.contenttable TR { background-color: #eeff99; }
+
+
+
+/**********/
+/* Images */
+/**********/
+
+/* Images / Captions */
+P.csc-caption { font-size: 11px; }
+P.csc-caption A { color: maroon; }
+
+/* Images / Tables / Floating text */
+TABLE.imgtext-table { border: 2px black solid; }
+
+/* Images / Tables / Wrapped text */
+/* When "Text w/Image" elements are wrapping the text into a table the top-margin of Hx elements should be transferred to the wrapping table instead. This is done here: */
+TABLE.imgtext-nowrap { border: 2px red solid; margin-top: 20px; }
+TABLE.imgtext-nowrap H1, TABLE.imgtext-nowrap H2, TABLE.imgtext-nowrap H3, TABLE.imgtext-nowrap H4, TABLE.imgtext-nowrap H5 { margin-top: 0px; }
+
+
+
+/***************/
+/* Bulletlists */
+/***************/
+
+/* Bulletlists, general */
+UL.csc-bulletlist { color: navy; background-color: transparent; }
+UL.csc-bulletlist LI { background-color: #ffaaff; }
+
+/* Bulletlists, specifically */
+UL.csc-bulletlist-0 { color: green; }
+UL.csc-bulletlist-1 { color: blue; list-style-type : decimal; }
+UL.csc-bulletlist-2 { color: red; list-style-position : inside; }
+UL.csc-bulletlist-3 { color: olive; list-style-image: url(img/red_arrow_bullet.gif); }
+
+
+
+/*********************/
+/* Tables, generally */
+/*********************/
+TABLE.contenttable P { font-size: 11px; }
+TABLE.contenttable TR TD { vertical-align: top; }
+TABLE.contenttable TR.tr-last TD P { background-color: #336699; }
+TABLE.contenttable TR TD.td-last P { background-color: #aa6699; }
+
+/* Tables, specifically */
+TABLE.contenttable-0 P { color: green; }
+
+TABLE.contenttable-1 P { color: blue; }
+TABLE.contenttable-1 TR.tr-0 TD { background-color: #ff9900;}
+TABLE.contenttable-1 TR.tr-0 TD P { font-weight: bold; }
+TABLE.contenttable-2 P { color: red; }
+TABLE.contenttable-2 TR TD.td-0 { background-color: #ff9900;}
+TABLE.contenttable-2 TR TD.td-0 P { font-weight: bold; }
+
+TABLE.contenttable-3 P { color: olive; }
+TABLE.contenttable-3 TR TD.td-0, TABLE.contenttable-3 TR.tr-0 TD { background-color: #ff9900;}
+TABLE.contenttable-3 TR TD.td-0 P, TABLE.contenttable-3 TR.tr-0 TD P { font-weight: bold; }
+
+
+
+/************************/
+/* Filelinks, generally */
+/************************/
+TABLE.csc-uploads { border: 2px solid black; width: 70%; }
+TABLE.csc-uploads TR TD P { background-color : transparent; font-size: 12px; }
+TABLE.csc-uploads TR TD { vertical-align : top; }
+TABLE.csc-uploads TR.tr-even { background-color: #ffccee; }
+TABLE.csc-uploads TR.tr-odd { background-color: #ccccee; }
+TABLE.csc-uploads TR TD.csc-uploads-icon { padding-left: 6px; padding-right: 6px; width: 1%; text-align: center; vertical-align: middle; }
+TABLE.csc-uploads TR TD.csc-uploads-fileName { width: 80%; padding-left: 5px; }
+TABLE.csc-uploads TR TD.csc-uploads-fileName P A { font-weight: bold; }
+TABLE.csc-uploads TR TD.csc-uploads-fileName P.csc-uploads-description { font-style: italic; }
+TABLE.csc-uploads TR TD.csc-uploads-fileSize { white-space: nowrap; padding-left: 6px; padding-right: 6px; }
+
+/* Filelinks, specifically */
+TABLE.csc-uploads-1 { border-color: red; }
+
+TABLE.csc-uploads-2 { border-color: green; }
+
+TABLE.csc-uploads-3 { border-color: blue; }
+TABLE.csc-uploads-3 TR.tr-even { background-color: #99ff99; }
+TABLE.csc-uploads-3 TR.tr-odd { background-color: #99ff66; }
+TABLE.csc-uploads-3 TR TD { vertical-align: middle; }
+TABLE.csc-uploads-3 TR.tr-even TD.csc-uploads-icon IMG { border: 3px solid black; }
+TABLE.csc-uploads-3 TR.tr-odd TD.csc-uploads-icon IMG { border: 3px solid red; }
+                               
+
+
+/*****************/
+/* Various Forms */
+/*****************/
+
+/* Email, Login and Search forms generally: */
+FORM TABLE TR TD { padding-left: 5px; padding-right: 20px; }
+FORM TABLE TR TD.csc-form-labelcell { background-color: #eeccaa; }
+FORM TABLE TR TD.csc-form-fieldcell { background-color: #aa66ff; }
+FORM TABLE TR TD.csc-form-fieldcell INPUT, FORM TABLE TR TD.csc-form-fieldcell SELECT, FORM TABLE TR TD.csc-form-fieldcell TEXTAREA { background-color: #eeeeee; border: 1px solid #666666; font-style: italic; font-size: 11px; }
+FORM TABLE TR TD.csc-form-labelcell P, FORM TABLE TR TD.csc-form-commentcell P { font-size: 11px;}
+FORM TABLE TR TD.csc-form-labelcell P.csc-form-label-req { font-weight: bold; color: navy; }
+FORM TABLE TR TD.csc-form-labelcell P.csc-form-label { color: #666666; }
+FORM TABLE { margin-top: 10px; border: 5px navy dashed; }
+
+/* Email form, specifically */
+FORM TABLE.csc-mailform { border-color: #ff6600; }
+FORM TABLE.csc-mailform TR TD.csc-form-labelcell  { background-color: #ccccff; }
+
+/* Search form, specifically */
+FORM TABLE.csc-searchform { border-color: red; }
+FORM TABLE.csc-searchform TR TD.csc-form-labelcell  { background-color: #ffffcc; }
+
+/* Login form, specifically */
+FORM TABLE.csc-loginform { border-color: green; }
+FORM TABLE.csc-loginform TR TD.csc-form-labelcell  { background-color: #ccffcc; }
+
+
+
+
+/*****************/
+/* Search result */
+/*****************/
+
+/* Search Result, result information box: */
+TABLE.csc-searchResultInfo { margin-left: 5px; margin-top: 10px; border: 1px black solid; width: 100%;}
+TABLE.csc-searchResultInfo TR { background-color: #33eeff; }
+TABLE.csc-searchResultInfo TR TD P { font-size: 11px; padding: 0px 5px 0px 5px;}
+TABLE.csc-searchResultInfo TR TD.csc-searchResultRange P { color: green; font-weight: bold; }
+TABLE.csc-searchResultInfo TR TD.csc-searchResultPrevNext P { color: red; }
+TABLE.csc-searchResultInfo TR TD.csc-searchResultPrevNext { text-align: right; }
+
+/* Search Result, header + abstract: */
+H3.csc-searchResultHeader A { color: maroon; }
+H3.csc-searchResultHeader { background-color: #aaaacc; padding-left: 5px; }
+P.csc-searchResult { font-size: 11px; font-style: italic; background-color: #eeeeee; margin-left: 20px;}
+
+
+
+/*****************************/
+/* Menu / Sitemap, generally */
+/*****************************/
+DIV.csc-menu { background-color: #99cc99; padding: 5px 5px 5px 5px; margin: 5px 5px 5px 5px; border: 3px solid black;}
+DIV.csc-menu P { margin-left: 30px; padding-left: 5px; font-size: 11px; }
+DIV.csc-menu P.csc-section { font-weight: normal; margin-left: 40px; font-style: italic; }
+DIV.csc-menu P A { color: green; }
+
+/* Menu / Sitemap, "Menu of these pages" */
+DIV.csc-menu-def  P A { color: red; } 
+
+/* Menu / Sitemap, "Menu of subpages to these pages" */
+DIV.csc-menu-1 { border-color: navy; }
+
+/* Menu / Sitemap, "Sitemap" */
+DIV.csc-menu-2 { border-color: red; }
+DIV.csc-menu-2 P.csc-sitemap { border: 2 dashed red; }
+DIV.csc-menu-2 P.csc-sitemap-level1 { margin-left: 50px; }
+DIV.csc-menu-2 P.csc-sitemap-level2 { margin-left: 100px; }
+DIV.csc-menu-2 P.csc-sitemap-level3 { margin-left: 150px; }
+DIV.csc-menu-2 P.csc-sitemap-level4 { margin-left: 200px; }
+DIV.csc-menu-2 P.csc-sitemap-level1 A { color: maroon; }
+DIV.csc-menu-2 P.csc-sitemap-level2 A { color: navy; }
+DIV.csc-menu-2 P.csc-sitemap-level3 A { color: green; }
+DIV.csc-menu-2 P.csc-sitemap-level4 A { color: purple; }
+
+/* Menu / Sitemap, "Section index (pagecontent w/Index checked)" */
+DIV.csc-menu-3 { border-color: purple; }
+DIV.csc-menu-3 P.csc-section A { color: teal; }
+
+/* Menu / Sitemap, "Menu of subpages to these pages (with abstract)" */
+DIV.csc-menu-4 { border-color: yellow; }
+DIV.csc-menu-4 P.csc-abstract { margin-left: 40px; font-style: italic; }
+
+/* Menu / Sitemap, "Recently updated pages" */
+DIV.csc-menu-5 { border-color: teal; }
+
+/* Menu / Sitemap, "Related pages (based on keywords)" */
+DIV.csc-menu-6 { border-color: olive; }
+
+/* Menu / Sitemap, "Menu of subpages to these pages + sections" */
+DIV.csc-menu-7 { border-color: maroon; }
+DIV.csc-menu-7 P { font-weight: bold; }
+DIV.csc-menu-7 P.csc-section A { color: navy; }
+
+
+
+/****************************************/
+/* Frontend editing / TYPO3 Admin Panel */
+/****************************************/
+IMG.frontEndEditIcons { vertical-align: middle; margin: 0px 2px 0px 2px; } 
+
+TABLE.typo3-adminPanel { border: 2px solid yellow; background-color: #ff6699; }
+TABLE.typo3-adminPanel TR.typo3-adminPanel-hRow TD { background-color: #22aabb; }
+TABLE.typo3-adminPanel TR.typo3-adminPanel-itemHRow TD { background-color: #ff99ee; }
+TABLE.typo3-adminPanel TABLE, TABLE.typo3-adminPanel TD { border: 1px; }
+TABLE.typo3-adminPanel TD FONT { font-family: verdana; font-size: 12px; color: black; }
+TABLE.typo3-adminPanel TD A FONT { font-family: verdana; font-size: 12px; color: maroon; }
+TABLE.typo3-editPanel TD { border: 0px; }
+TABLE.typo3-editPanel TD FONT { font-family: verdana; font-size: 12px; color: navy; }
+TABLE.typo3-editPanel TD.typo3-editPanel-controls { background-color: #ff99aa; }
+TABLE.typo3-editPanel TD.typo3-editPanel-label { background-color: #22aabb; }
diff --git a/typo3/sysext/css_styled_content/css/img/background_gradient.gif b/typo3/sysext/css_styled_content/css/img/background_gradient.gif
new file mode 100755 (executable)
index 0000000..04b834f
Binary files /dev/null and b/typo3/sysext/css_styled_content/css/img/background_gradient.gif differ
diff --git a/typo3/sysext/css_styled_content/css/img/red_arrow_bullet.gif b/typo3/sysext/css_styled_content/css/img/red_arrow_bullet.gif
new file mode 100755 (executable)
index 0000000..a449fe2
Binary files /dev/null and b/typo3/sysext/css_styled_content/css/img/red_arrow_bullet.gif differ
diff --git a/typo3/sysext/css_styled_content/css/readme.txt b/typo3/sysext/css_styled_content/css/readme.txt
new file mode 100755 (executable)
index 0000000..e3bad11
--- /dev/null
@@ -0,0 +1,37 @@
+***************************
+Example stylesheets.
+***************************
+These example stylesheets are for testing or modelling your own styles for TYPO3 content elements.
+
+
+----------------------------
+TypoScript Setup:
+----------------------------
+To use these stylesheets in a very simple TypoScript configuration you can use something like this:
+
+
+       page = PAGE
+       page.typeNum = 0
+       page.stylesheet = EXT:css_styled_content/css/example.css
+       
+       page.10 < styles.content.get
+
+
+The value "EXT:css_styled_content/css/example.css" points to the example stylesheet "example.css". Just change that filename to another of the example stylesheets if you need to.
+Notice: Do NOT alter the example stylesheets directly! Rather create a copy of one of them in for example "fileadmin/css/" folder. Then you just change the stylesheet value to "fileadmin/css/example.css" (or what other name you gave the stylesheet!)
+       
+
+----------------------------
+example.css
+----------------------------
+Normal stylesheet which defines relatively normal styles for all elements.
+Good to use as a basis for your own stylesheets.
+
+
+----------------------------
+example_outlines.css
+----------------------------
+Test stylesheet that enhances the edges of all elements drastically!
+
+
+
diff --git a/typo3/sysext/css_styled_content/doc/TODO.txt b/typo3/sysext/css_styled_content/doc/TODO.txt
new file mode 100755 (executable)
index 0000000..103dd19
--- /dev/null
@@ -0,0 +1,35 @@
+- http://typo3.com/index.php?id=1262 fænomen, når at billedet sættes ind i tabellen! Hvorfor? Hvorfor er der ikke <p class="bodytext"> på sitet heller?
+- BUG: tomme linier over afsnit skaber ikke afstand!
+- splitted links - leads to unwished click-enlarge if not all links are shown. Right?
+- Test with 
+  - testsite
+  - plaintext, XML, pda templates...
+
+
+- '<a href="#"...>' with "baseURL = 1" - compatible?
+*******************************        
+Remaining issues
+*******************************        
+- RTE issues / processing
+       - Adding default classes for text/image/tables etc...
+       - Intertweened with RTE api issues.
+       - B/I -> strong/em?
+
+
+*******************************        
+XHTML incompatibilities:
+*******************************
+- Multimedia elements not XHTML (Problem in TypoScript cObject "MULTIMEDIA" - advises are requested!)
+- wrap="virtual" in textarea - How can this be solved so wrapping/no-wrapping is observed in all browsers and still XHTML compatible? Advises are requested.
+- Nested UL elements not allowed! - What is the solution then?
+
+
+
+********************
+Mumbletext:
+********************
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut vitae lorem in velit rhoncus varius. Aliquam eget libero sed elit facilisis aliquam. Fusce eros sem, lobortis in, bibendum sit amet, imperdiet vulputate, elit. Nullam accumsan eleifend magna. 
+Pellentesque nulla ipsum, mollis condimentum, scelerisque quis, posuere sed, ante. Quisque faucibus. Integer facilisis. Aliquam est. Mauris scelerisque, augue a vestibulum accumsan, pede massa adipiscing nunc, at imperdiet pede est in dui. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi congue volutpat lacus. Donec justo. Pellentesque sagittis. Suspendisse potenti. Proin molestie. Phasellus turpis nisl, convallis in, fringilla eget, laoreet eget, quam. Proin euismod eros nec libero. 
+Nunc fermentum felis sit amet diam. 
+Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; 
+
diff --git a/typo3/sysext/css_styled_content/doc/manual.sxw b/typo3/sysext/css_styled_content/doc/manual.sxw
new file mode 100755 (executable)
index 0000000..6481508
Binary files /dev/null and b/typo3/sysext/css_styled_content/doc/manual.sxw differ
diff --git a/typo3/sysext/css_styled_content/ext_conf_template.txt b/typo3/sysext/css_styled_content/ext_conf_template.txt
new file mode 100755 (executable)
index 0000000..9c8e8db
--- /dev/null
@@ -0,0 +1,8 @@
+  # cat=basic/enable; type=boolean; label=Set PageTSconfig by default: If you are going to use this extension by default in this database then set this flag. In that case you don't need to set specific PageTSconfig for each page, which you have to do otherwise!
+setPageTSconfig = 1
+
+
+
+
+
+# TYPO3 CVS ID: $Id$
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/ext_emconf.php b/typo3/sysext/css_styled_content/ext_emconf.php
new file mode 100755 (executable)
index 0000000..2a1f513
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+########################################################################
+# Extension Manager/Repository config file for ext: "css_styled_content"
+# 
+# Auto generated 11-05-2004 17:07
+# 
+# Manual updates:
+# Only the data in the array - anything else is removed by next write
+########################################################################
+
+$EM_CONF[$_EXTKEY] = Array (
+       'title' => 'CSS styled content',
+       'description' => 'Contains configuration for CSS content-rendering of the table "tt_content". This is meant as a modern substitute for the classic "content (default)" template which was based more on <font>-tags, while this is pure CSS. It is intended to work with all modern browsers (which excludes the NS4 series).',
+       'category' => 'fe',
+       'shy' => 0,
+       'dependencies' => 'cms',
+       'conflicts' => '',
+       'priority' => 'top',
+       'loadOrder' => '',
+       'TYPO3_version' => '3.6.0rc2-',
+       'PHP_version' => '-',
+       'module' => '',
+       'state' => 'beta',
+       'internal' => 1,
+       'uploadfolder' => 0,
+       'createDirs' => '',
+       'modify_tables' => '',
+       'clearCacheOnLoad' => 1,
+       'lockType' => '',
+       'author' => 'Kasper Skårhøj',
+       'author_email' => 'kasperYYYY@typo3.com',
+       'author_company' => 'Curby Soft Multimedia',
+       'CGLcompliance' => '',
+       'CGLcompliance_note' => '',
+       'private' => 0,
+       'download_password' => '',
+       'version' => '0.1.0',   // Don't modify this! Managed automatically during upload to repository.
+       '_md5_values_when_last_written' => 'a:36:{s:21:"ext_conf_template.txt";s:4:"0fe2";s:12:"ext_icon.gif";s:4:"1845";s:17:"ext_localconf.php";s:4:"9472";s:15:"ext_php_api.dat";s:4:"f62a";s:14:"ext_tables.php";s:4:"8d6c";s:16:"pageTSconfig.txt";s:4:"182f";s:11:"CVS/Entries";s:4:"66bd";s:14:"CVS/Repository";s:4:"1e76";s:8:"CVS/Root";s:4:"be87";s:12:"doc/TODO.txt";s:4:"6534";s:14:"doc/manual.sxw";s:4:"85e4";s:15:"doc/CVS/Entries";s:4:"b6da";s:18:"doc/CVS/Repository";s:4:"0cf5";s:12:"doc/CVS/Root";s:4:"be87";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:4:"a3a6";s:17:"pi1/locallang.php";s:4:"eb36";s:15:"pi1/CVS/Entries";s:4:"dafa";s:18:"pi1/CVS/Repository";s:4:"6f39";s:12:"pi1/CVS/Root";s:4:"be87";s:20:"static/constants.txt";s:4:"c39d";s:20:"static/editorcfg.txt";s:4:"9509";s:16:"static/setup.txt";s:4:"3d8e";s:18:"static/CVS/Entries";s:4:"dbd4";s:21:"static/CVS/Repository";s:4:"f3a3";s:15:"static/CVS/Root";s:4:"be87";s:15:"css/example.css";s:4:"9804";s:24:"css/example_outlines.css";s:4:"e656";s:14:"css/readme.txt";s:4:"af18";s:15:"css/CVS/Entries";s:4:"bc38";s:18:"css/CVS/Repository";s:4:"2af2";s:12:"css/CVS/Root";s:4:"bbeb";s:31:"css/img/background_gradient.gif";s:4:"45d7";s:28:"css/img/red_arrow_bullet.gif";s:4:"82d6";s:19:"css/img/CVS/Entries";s:4:"70a6";s:22:"css/img/CVS/Repository";s:4:"d993";s:16:"css/img/CVS/Root";s:4:"bbeb";}',
+);
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/ext_icon.gif b/typo3/sysext/css_styled_content/ext_icon.gif
new file mode 100755 (executable)
index 0000000..f4093e8
Binary files /dev/null and b/typo3/sysext/css_styled_content/ext_icon.gif differ
diff --git a/typo3/sysext/css_styled_content/ext_localconf.php b/typo3/sysext/css_styled_content/ext_localconf.php
new file mode 100755 (executable)
index 0000000..0974674
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+# TYPO3 CVS ID: $Id$
+
+if (!defined ('TYPO3_MODE'))   die ('Access denied.');
+
+$_EXTCONF = unserialize($_EXTCONF);    // unserializing the configuration so we can use it here:
+if ($_EXTCONF['setPageTSconfig'])      {
+       t3lib_extMgm::addPageTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:css_styled_content/pageTSconfig.txt">');
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/ext_php_api.dat b/typo3/sysext/css_styled_content/ext_php_api.dat
new file mode 100755 (executable)
index 0000000..e55810f
--- /dev/null
@@ -0,0 +1,139 @@
+a:2:{s:4:"meta";a:3:{s:5:"title";s:18:"CSS Styled Content";s:5:"descr";s:0:"";s:7:"options";a:2:{s:10:"usageCount";s:1:"1";s:19:"includeCodeAbstract";s:1:"1";}}s:5:"files";a:1:{s:14:"MD5_9e7b520d8b";a:5:{s:8:"filename";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:8:"filesize";i:9027;s:6:"header";a:5:{s:4:"text";s:98:"
+
+Plugin class - instantiated from TypoScript. 
+Rendering content elements from tt_content table.
+";s:5:"param";a:0:{}s:6:"return";a:2:{i:0;s:6:"[type]";i:1;s:3:"...";}s:5:"other";a:3:{i:0;s:42:"@author       Kasper Skaarhoj <kasper@typo3.com>";i:1;s:14:"@package TYPO3";i:2;s:31:"@subpackage tx_cssstyledcontent";}s:11:"other_index";a:3:{s:7:"@author";a:1:{i:0;s:34:"Kasper Skaarhoj <kasper@typo3.com>";}s:8:"@package";a:1:{i:0;s:6:"TYPO3 ";}s:11:"@subpackage";a:1:{i:0;s:20:"tx_cssstyledcontent ";}}}s:3:"DAT";a:9:{i:1;a:8:{s:6:"header";s:52:"class tx_cssstyledcontent_pi1 extends tslib_pibase {";s:5:"class";i:1;s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:4:"cDat";a:5:{s:4:"text";s:98:"
+
+Plugin class - instantiated from TypoScript. 
+Rendering content elements from tt_content table.
+";s:5:"param";a:0:{}s:6:"return";a:2:{i:0;s:6:"[type]";i:1;s:3:"...";}s:5:"other";a:3:{i:0;s:42:"@author       Kasper Skaarhoj <kasper@typo3.com>";i:1;s:14:"@package TYPO3";i:2;s:31:"@subpackage tx_cssstyledcontent";}s:11:"other_index";a:3:{s:7:"@author";a:1:{i:0;s:34:"Kasper Skaarhoj <kasper@typo3.com>";}s:8:"@package";a:1:{i:0;s:6:"TYPO3 ";}s:11:"@subpackage";a:1:{i:0;s:20:"tx_cssstyledcontent ";}}}s:7:"content";a:2:{i:0;s:303:"
+               // Default plugin variables:
+       var $prefixId = 'tx_cssstyledcontent_pi1';              // Same as class name
+       var $scriptRelPath = 'pi1/class.tx_cssstyledcontent_pi1.php';   // Path to this script relative to the extension dir.
+       var $extKey = 'css_styled_content';     // The extension key.
+       var $conf = array();
+       
+
+
+
+       ";i:1;i:-1;}s:12:"content_size";i:303;s:13:"content_lines";i:10;s:6:"atLine";i:65;}i:3;a:7:{s:6:"header";s:31:"function main($content,$conf)    {";s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:4:"cDat";a:3:{s:4:"text";s:40:"
+
+Main function, called from TypoScript
+";s:5:"param";a:2:{i:0;a:2:{i:0;s:6:"string";i:1;s:32:"Content input. Not used, ignore.";}i:1;a:2:{i:0;s:5:"array";i:1;s:24:"TypoScript configuration";}}s:6:"return";a:2:{i:0;s:6:"string";i:1;s:12:"HTML output.";}}s:7:"content";a:2:{i:0;s:507:"           $content='';
+       
+                       // Setting TypoScript configuration:
+               $this->conf = $conf;
+               
+                       // Depending on the CType of the content, branch out:
+               $CTypeValue = (string)$this->cObj->data['CType'];       // This value is the Content Element Type - determines WHAT kind of element to render...
+               switch($CTypeValue)     {
+                       case 'header':
+                               $content = $this->getHeader().$this->render_subh
+[...]
+
+
+
+       /***********************************
+        *
+        * Rendering of Content Elements:
+        *
+        ***********************************/
+
+       ";i:1;i:1;}s:12:"content_size";i:1369;s:13:"content_lines";i:59;s:6:"atLine";i:83;}i:5;a:8:{s:6:"header";s:22:"function getHeader()     {";s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:11:"sectionText";a:1:{i:0;s:30:"Rendering of Content Elements:";}s:4:"cDat";a:4:{s:4:"text";s:91:"
+
+Rendering the "Header" type content element (and for all other content elements as well)
+";s:5:"param";a:0:{}s:6:"return";a:2:{i:0;s:6:"string";i:1;s:11:"HTML output";}s:6:"access";s:7:"private";}s:7:"content";a:2:{i:0;s:507:"              $conf = $GLOBALS['TSFE']->tmpl->setup['lib.']['stdheader.'];
+               $out='';
+               if (!strcmp(trim($this->cObj->data['header']),''))      return '';      // Return, if the 'header' fields is empty.
+               
+               if ($this->cObj->data['header_layout']==100)    return '';      // Hidden header...
+               if ($this->cObj->data['date'])  {       // Wrap date:
+                       $out='<p class="csc-header-date">'.date($conf['5.']['date'],
+[...]
+ns($out,'tt_content : header, header_layout, [header_link|date]','Edit header');
+#debug(array($out));
+
+               return $out;            
+       }
+
+       ";i:1;i:1;}s:12:"content_size";i:1017;s:13:"content_lines";i:27;s:6:"atLine";i:149;}i:7;a:7:{s:6:"header";s:25:"function render_image() {";s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:4:"cDat";a:4:{s:4:"text";s:59:"
+
+Rendering the "Image" type content element (and textpic)
+";s:5:"param";a:0:{}s:6:"return";a:2:{i:0;s:6:"string";i:1;s:11:"HTML output";}s:6:"access";s:7:"private";}s:7:"content";a:2:{i:0;s:113:"              $content = $this->cObj->cObjGetSingle('IMGTEXT',$this->conf['image.'],'CType: image');
+               return $content;
+       }
+
+       ";i:1;i:0;}s:12:"content_size";i:113;s:13:"content_lines";i:4;s:6:"atLine";i:183;}i:9;a:7:{s:6:"header";s:27:"function render_textpic() {";s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:4:"cDat";a:4:{s:4:"text";s:46:"
+
+Rendering the "Header" type content element
+";s:5:"param";a:0:{}s:6:"return";a:2:{i:0;s:6:"string";i:1;s:11:"HTML output";}s:6:"access";s:7:"private";}s:7:"content";a:2:{i:0;s:458:"              $header = $this->getHeader();
+               $bodytext = $this->render_text();
+               $content = '';
+
+               $conf=$this->conf['image.'];
+               if ($this->cObj->data['imageorient']<25)        {
+                       $conf['text.']['10']='TEXT';
+                       $conf['text.']['10.']['value']=$bodytext;
+                       $content.=$header;
+               } else {
+                       $conf['text.']['10']='TEXT';
+                       $conf['text.']['10.']['value']=$header.$bodytext;
+               }
+               $content.= $this->cObj->cObjGetSingle('IMGTEXT',$conf,'CType: image');
+               return $content;
+       }
+
+       ";i:1;i:0;}s:12:"content_size";i:458;s:13:"content_lines";i:17;s:6:"atLine";i:194;}i:11;a:7:{s:6:"header";s:24:"function render_text()  {";s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:4:"cDat";a:4:{s:4:"text";s:44:"
+
+Rendering the "Text" type content element
+";s:5:"param";a:0:{}s:6:"return";a:2:{i:0;s:6:"string";i:1;s:11:"HTML output";}s:6:"access";s:7:"private";}s:7:"content";a:2:{i:0;s:384:"              $content = trim($this->cObj->data['bodytext']); // Get bodytext field content
+               if (!strcmp($content,''))       return '';
+               
+               #$out = $this->cObj->parseFunc($content, $this->conf['text.']['20.']['parseFunc.']);
+               $out = $this->cObj->stdWrap($content, $this->conf['text.']['20.']);
+               $out = $this->editIcons($out,'tt_content:bodytext, rte_enabled','Edit bodytext');
+
+               return $out;
+       }
+
+       ";i:1;i:0;}s:12:"content_size";i:384;s:13:"content_lines";i:10;s:6:"atLine";i:218;}i:13;a:7:{s:6:"header";s:27:"function render_bullets()       {";s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:4:"cDat";a:4:{s:4:"text";s:50:"
+
+Rendering the "Bulletlist" type content element
+";s:5:"param";a:0:{}s:6:"return";a:2:{i:0;s:6:"string";i:1;s:11:"HTML output";}s:6:"access";s:7:"private";}s:7:"content";a:2:{i:0;s:431:"              $content = trim($this->cObj->data['bodytext']); // Get bodytext field content
+               if (!strcmp($content,''))       return '';
+               
+               $lines = t3lib_div::trimExplode(chr(10),$content);      // Split into single lines
+               while(list($k)=each($lines))    {
+                       $lines[$k]='<li>'.$lines[$k].'</li>';
+               }
+               $out = '<ul>'.
+                       implode(chr(10),$lines).
+                       '</ul>';
+
+               $out = $this->editIcons($out,'tt_content:bodytext','Edit bulletlist');
+               return $out;
+       }
+
+       ";i:1;i:0;}s:12:"content_size";i:431;s:13:"content_lines";i:15;s:6:"atLine";i:235;}i:15;a:4:{s:6:"header";s:25:"function render_table() {";s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:4:"cDat";a:4:{s:4:"text";s:45:"
+
+Rendering the "Table" type content element
+";s:5:"param";a:0:{}s:6:"return";a:2:{i:0;s:6:"string";i:1;s:11:"HTML output";}s:6:"access";s:7:"private";}s:6:"atLine";i:257;}i:17;a:8:{s:6:"header";s:45:"function editIcons($content,$fields,$title)        {";s:11:"parentClass";s:23:"tx_cssstyledcontent_pi1";s:11:"sectionText";a:1:{i:0;s:15:"Other functions";}s:4:"cDat";a:3:{s:4:"text";s:29:"
+
+Creation of the edit icons
+";s:5:"param";a:3:{i:0;a:2:{i:0;s:6:"string";i:1;s:14:"Content string";}i:1;a:2:{i:0;s:6:"string";i:1;s:14:"Fields to edit";}i:2;a:2:{i:0;s:6:"string";i:1;s:13:"Title of icon";}}s:6:"return";a:2:{i:0;s:6:"string";i:1;s:33:"Content string with added icon(s)";}}s:7:"content";a:2:{i:0;s:460:"             if ($GLOBALS['TSFE']->beUserLogin){
+                       $conf=array(
+                               'beforeLastTag'=>1,
+                               'iconTitle' => $title
+                       );
+                       $content=$this->cObj->editIcons($content,$fields,$conf);
+               }       
+               return $content;
+       }
+}
+
+
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php'])   {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php']);
+}
+?>";i:1;i:0;}s:12:"content_size";i:460;s:13:"content_lines";i:16;s:6:"atLine";i:311;}}s:10:"usageCount";a:9:{s:12:"H_4f94edff83";a:2:{s:24:"_searchtime_milliseconds";d:1;s:15:"_functionHeader";s:52:"class tx_cssstyledcontent_pi1 extends tslib_pibase {";}s:12:"H_e8476b0991";a:2:{s:24:"_searchtime_milliseconds";d:1;s:15:"_functionHeader";s:31:"function main($content,$conf)  {";}s:12:"H_7622e8ed6e";a:4:{s:3:"ALL";a:2:{s:11:"objectUsage";i:7;s:5:"TOTAL";i:7;}s:14:"MD5_9e7b520d8b";a:3:{s:8:"fileName";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:11:"objectUsage";i:7;s:5:"TOTAL";i:7;}s:24:"_searchtime_milliseconds";d:1;s:15:"_functionHeader";s:22:"function getHeader()        {";}s:12:"H_25bed698ef";a:4:{s:3:"ALL";a:2:{s:11:"objectUsage";i:1;s:5:"TOTAL";i:1;}s:14:"MD5_9e7b520d8b";a:3:{s:8:"fileName";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:11:"objectUsage";i:1;s:5:"TOTAL";i:1;}s:24:"_searchtime_milliseconds";d:1;s:15:"_functionHeader";s:25:"function render_image()     {";}s:12:"H_1769c0889f";a:4:{s:3:"ALL";a:2:{s:11:"objectUsage";i:1;s:5:"TOTAL";i:1;}s:14:"MD5_9e7b520d8b";a:3:{s:8:"fileName";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:11:"objectUsage";i:1;s:5:"TOTAL";i:1;}s:24:"_searchtime_milliseconds";d:9;s:15:"_functionHeader";s:27:"function render_textpic()   {";}s:12:"H_84197d4d25";a:4:{s:3:"ALL";a:2:{s:11:"objectUsage";i:2;s:5:"TOTAL";i:2;}s:14:"MD5_9e7b520d8b";a:3:{s:8:"fileName";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:11:"objectUsage";i:2;s:5:"TOTAL";i:2;}s:24:"_searchtime_milliseconds";d:1;s:15:"_functionHeader";s:24:"function render_text()      {";}s:12:"H_af60b38097";a:4:{s:3:"ALL";a:2:{s:11:"objectUsage";i:1;s:5:"TOTAL";i:1;}s:14:"MD5_9e7b520d8b";a:3:{s:8:"fileName";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:11:"objectUsage";i:1;s:5:"TOTAL";i:1;}s:24:"_searchtime_milliseconds";d:0;s:15:"_functionHeader";s:27:"function render_bullets()   {";}s:12:"H_6aa8e51d35";a:4:{s:3:"ALL";a:2:{s:11:"objectUsage";i:1;s:5:"TOTAL";i:1;}s:14:"MD5_9e7b520d8b";a:3:{s:8:"fileName";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:11:"objectUsage";i:1;s:5:"TOTAL";i:1;}s:24:"_searchtime_milliseconds";d:7;s:15:"_functionHeader";s:25:"function render_table()     {";}s:12:"H_5600e83a5b";a:4:{s:3:"ALL";a:2:{s:11:"objectUsage";i:5;s:5:"TOTAL";i:5;}s:14:"MD5_9e7b520d8b";a:3:{s:8:"fileName";s:37:"pi1/class.tx_cssstyledcontent_pi1.php";s:11:"objectUsage";i:5;s:5:"TOTAL";i:5;}s:24:"_searchtime_milliseconds";d:2;s:15:"_functionHeader";s:45:"function editIcons($content,$fields,$title) {";}}}}}
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/ext_tables.php b/typo3/sysext/css_styled_content/ext_tables.php
new file mode 100755 (executable)
index 0000000..c1e32ff
--- /dev/null
@@ -0,0 +1,6 @@
+<?php
+# TYPO3 CVS ID: $Id$
+if (!defined ('TYPO3_MODE'))   die ('Access denied.');
+
+t3lib_extMgm::addStaticFile($_EXTKEY,'static/','CSS Styled Content');
+?>
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/pageTSconfig.txt b/typo3/sysext/css_styled_content/pageTSconfig.txt
new file mode 100755 (executable)
index 0000000..7383174
--- /dev/null
@@ -0,0 +1,33 @@
+# ***************************************************************************************
+# Page TSconfig for "css_styled_content"
+#
+# Removes obsolete type values and fields from "Content Element" table "tt_content"
+# Configures processing for the Rich Text Editor according to the rendering principles.
+#
+# TYPO3 CVS ID: $Id$
+# ***************************************************************************************
+
+TCEFORM.tt_content {
+       text_properties.disabled=1
+       text_align.disabled=1
+       text_color.disabled=1
+       text_face.disabled=1
+       text_size.disabled=1
+       image_frames.disabled = 1
+
+       CType.removeItems = div,rte,script,splash
+}
+
+
+RTE.config.tt_content.bodytext.showButtons = table
+RTE.config.tt_content.bodytext.proc {
+  overruleMode = ts_css
+  allowedClasses= _
+  
+   # This will clean up content coming from RTE into database so that it is XHTML compatible regarding case and quotes around attributes:
+  entryHTMLparser_db = 1
+  entryHTMLparser_db {
+    keepNonMatchedTags = 1
+    xhtml_cleaning = 1
+  }
+}
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php b/typo3/sysext/css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php
new file mode 100755 (executable)
index 0000000..4d90315
--- /dev/null
@@ -0,0 +1,342 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2002-2004 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  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!
+***************************************************************/
+/**
+ * Plugin 'Content rendering' for the 'css_styled_content' extension.
+ *
+ * $Id$
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ */
+/**
+ * [CLASS/FUNCTION INDEX of SCRIPT]
+ *
+ *
+ *
+ *   63: class tx_cssstyledcontent_pi1 extends tslib_pibase
+ *
+ *              SECTION: Rendering of Content Elements:
+ *   91:     function render_bullets($content,$conf)
+ *  130:     function render_table($content,$conf)
+ *  191:     function render_uploads($content,$conf)
+ *
+ *              SECTION: Helper functions
+ *  313:     function getTableAttributes($conf,$type)
+ *
+ * TOTAL FUNCTIONS: 4
+ * (This index is automatically created/updated by the extension "extdeveval")
+ *
+ */
+
+require_once(PATH_tslib.'class.tslib_pibase.php');
+
+
+
+/**
+ * Plugin class - instantiated from TypoScript.
+ * Rendering some content elements from tt_content table.
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_cssstyledcontent
+ */
+class tx_cssstyledcontent_pi1 extends tslib_pibase {
+
+               // Default plugin variables:
+       var $prefixId = 'tx_cssstyledcontent_pi1';              // Same as class name
+       var $scriptRelPath = 'pi1/class.tx_cssstyledcontent_pi1.php';   // Path to this script relative to the extension dir.
+       var $extKey = 'css_styled_content';             // The extension key.
+       var $conf = array();
+
+
+
+
+
+
+
+       /***********************************
+        *
+        * Rendering of Content Elements:
+        *
+        ***********************************/
+
+       /**
+        * Rendering the "Bulletlist" type content element, called from TypoScript (tt_content.bullets.20)
+        *
+        * @param       string          Content input. Not used, ignore.
+        * @param       array           TypoScript configuration
+        * @return      string          HTML output.
+        * @access private
+        */
+       function render_bullets($content,$conf) {
+
+                       // Get bodytext field content, returning blank if empty:
+               $content = trim($this->cObj->data['bodytext']);
+               if (!strcmp($content,''))       return '';
+
+                       // Split into single lines:
+               $lines = t3lib_div::trimExplode(chr(10),$content);
+               while(list($k)=each($lines))    {
+                       $lines[$k]='
+                               <li>'.$this->cObj->stdWrap($lines[$k],$conf['innerStdWrap.']).'</li>';
+               }
+
+                       // Set header type:
+               $type = intval($this->cObj->data['layout']);
+
+                       // Compile list:
+               $out = '
+                       <ul class="csc-bulletlist csc-bulletlist-'.$type.'">'.
+                               implode('',$lines).'
+                       </ul>';
+
+                       // Calling stdWrap:
+               if ($conf['stdWrap.']) {
+                       $out = $this->cObj->stdWrap($out, $conf['stdWrap.']);
+               }
+
+                       // Return value
+               return $out;
+       }
+
+       /**
+        * Rendering the "Table" type content element, called from TypoScript (tt_content.table.20)
+        *
+        * @param       string          Content input. Not used, ignore.
+        * @param       array           TypoScript configuration
+        * @return      string          HTML output.
+        * @access private
+        */
+       function render_table($content,$conf)   {
+
+                       // Get bodytext field content
+               $content = trim($this->cObj->data['bodytext']);
+               if (!strcmp($content,''))       return '';
+
+                       // Split into single lines (will become table-rows):
+               $rows = t3lib_div::trimExplode(chr(10),$content);
+
+                       // Find number of columns to render:
+               $cols = t3lib_div::intInRange($this->cObj->data['cols']?$this->cObj->data['cols']:count(explode('|',current($rows))),0,100);
+
+                       // Traverse rows (rendering the table here)
+               $rCount = count($rows);
+               foreach($rows as $k => $v)      {
+                       $cells = explode('|',$v);
+                       $newCells=array();
+                       for($a=0;$a<$cols;$a++) {
+                               if (!strcmp(trim($cells[$a]),''))       $cells[$a]='&nbsp;';
+                               $cellAttribs =  ($a>0 && ($cols-1)==$a) ? ' class="td-last"' : ' class="td-'.$a.'"';
+                               $newCells[$a] = '
+                                       <td'.$cellAttribs.'><p>'.$this->cObj->stdWrap($cells[$a],$conf['innerStdWrap.']).'</p></td>';
+                       }
+
+                       $oddEven = $k%2 ? 'tr-odd' : 'tr-even';
+                       $rowAttribs =  ($k>0 && ($rCount-1)==$k) ? ' class="'.$oddEven.' tr-last"' : ' class="'.$oddEven.' tr-'.$k.'"';
+                       $rows[$k]='
+                               <tr'.$rowAttribs.'>'.implode('',$newCells).'
+                               </tr>';
+               }
+
+                       // Set header type:
+               $type = intval($this->cObj->data['layout']);
+
+                       // Table tag params.
+               $tableTagParams = $this->getTableAttributes($conf,$type);
+               $tableTagParams['class'] = 'contenttable contenttable-'.$type;
+
+                       // Compile table output:
+               $out = '
+                       <table '.t3lib_div::implodeAttributes($tableTagParams).'>'.     // Omitted xhtmlSafe argument TRUE - none of the values will be needed to be converted anyways, no need to spend processing time on that.
+                               implode('',$rows).'
+                       </table>';
+
+                       // Calling stdWrap:
+               if ($conf['stdWrap.']) {
+                       $out = $this->cObj->stdWrap($out, $conf['stdWrap.']);
+               }
+
+                       // Return value
+               return $out;
+       }
+
+       /**
+        * Rendering the "Filelinks" type content element, called from TypoScript (tt_content.uploads.20)
+        *
+        * @param       string          Content input. Not used, ignore.
+        * @param       array           TypoScript configuration
+        * @return      string          HTML output.
+        * @access private
+        */
+       function render_uploads($content,$conf) {
+
+               $out = '';
+
+                       // Set layout type:
+               $type = intval($this->cObj->data['layout']);
+
+                       // Get the list of files (using stdWrap function since that is easiest)
+               $lConf=array();
+               $lConf['override.']['filelist.']['field'] = 'select_key';
+               $fileList = $this->cObj->stdWrap($this->cObj->data['media'],$lConf);
+
+                       // Explode into an array:
+               $fileArray = t3lib_div::trimExplode(',',$fileList,1);
+
+                       // If there were files to list...:
+               if (count($fileArray))  {
+
+                               // Get the path from which the images came:
+                       $selectKeyValues = explode('|',$this->cObj->data['select_key']);
+                       $path = trim($selectKeyValues[0]) ? trim($selectKeyValues[0]) : 'uploads/media/';
+
+                               // Get the descriptions for the files (if any):
+                       $descriptions = t3lib_div::trimExplode(chr(10),$this->cObj->data['imagecaption']);
+
+                               // Adding hardcoded TS to linkProc configuration:
+                       $conf['linkProc.']['path.']['current'] = 1;
+                       $conf['linkProc.']['icon'] = 1; // Always render icon - is inserted by PHP if needed.
+                       $conf['linkProc.']['icon.']['wrap'] = ' | //**//';      // Temporary, internal split-token!
+                       $conf['linkProc.']['icon_link'] = 1;    // ALways link the icon
+                       $conf['linkProc.']['icon_image_ext_list'] = ($type==2 || $type==3) ? $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] : '';  // If the layout is type 2 or 3 we will render an image based icon if possible.
+
+                               // Traverse the files found:
+                       $filesData = array();
+                       foreach($fileArray as $key => $fileName)        {
+                               $absPath = t3lib_div::getFileAbsFileName($path.$fileName);
+                               if (@is_file($absPath)) {
+                                       $fI = pathinfo($fileName);
+                                       $filesData[$key] = array();
+
+                                       $filesData[$key]['filename'] = $fileName;
+                                       $filesData[$key]['path'] = $path;
+                                       $filesData[$key]['filesize'] = filesize($absPath);
+                                       $filesData[$key]['fileextension'] = strtolower($fI['extension']);
+                                       $filesData[$key]['description'] = trim($descriptions[$key]);
+
+                                       $this->cObj->setCurrentVal($path);
+                                       $GLOBALS['TSFE']->register['ICON_REL_PATH'] = $path.$fileName;
+                                       $filesData[$key]['linkedFilenameParts'] = explode('//**//',$this->cObj->filelink($fileName, $conf['linkProc.']));
+                               }
+                       }
+
+                               // Now, lets render the list!
+                       $tRows = array();
+                       foreach($filesData as $key => $fileD)   {
+
+                                       // Setting class of table row for odd/even rows:
+                               $oddEven = $key%2 ? 'tr-odd' : 'tr-even';
+
+                                       // Render row, based on the "layout" setting
+                               $tRows[]='
+                               <tr class="'.$oddEven.'">'.($type>0 ? '
+                                       <td class="csc-uploads-icon">
+                                               '.$fileD['linkedFilenameParts'][0].'
+                                       </td>' : '').'
+                                       <td class="csc-uploads-fileName">
+                                               <p>'.$fileD['linkedFilenameParts'][1].'</p>'.
+                                               ($fileD['description'] ? '
+                                               <p class="csc-uploads-description">'.htmlspecialchars($fileD['description']).'</p>' : '').'
+                                       </td>'.($this->cObj->data['filelink_size'] ? '
+                                       <td class="csc-uploads-fileSize">
+                                               <p>'.t3lib_div::formatSize($fileD['filesize']).'</p>
+                                       </td>' : '').'
+                               </tr>';
+                       }
+
+                               // Table tag params.
+                       $tableTagParams = $this->getTableAttributes($conf,$type);
+                       $tableTagParams['class'] = 'csc-uploads csc-uploads-'.$type;
+
+
+                               // Compile it all into table tags:
+                       $out = '
+                       <table '.t3lib_div::implodeAttributes($tableTagParams).'>
+                               '.implode('',$tRows).'
+                       </table>';
+               }
+
+                       // Calling stdWrap:
+               if ($conf['stdWrap.']) {
+                       $out = $this->cObj->stdWrap($out, $conf['stdWrap.']);
+               }
+
+                       // Return value
+               return $out;
+       }
+
+
+
+
+
+
+
+
+
+
+
+
+
+       /************************************
+        *
+        * Helper functions
+        *
+        ************************************/
+
+       /**
+        * Returns table attributes for uploads / tables.
+        *
+        * @param       array           TypoScript configuration array
+        * @param       integer         The "layout" type
+        * @return      array           Array with attributes inside.
+        */
+       function getTableAttributes($conf,$type)        {
+
+                       // Initializing:
+               $tableTagParams_conf = $conf['tableParams_'.$type.'.'];
+
+               $conf['color.'][200] = '';
+               $conf['color.'][240] = 'black';
+               $conf['color.'][241] = 'white';
+               $conf['color.'][242] = '#333333';
+               $conf['color.'][243] = 'gray';
+               $conf['color.'][244] = 'silver';
+
+                       // Create table attributes array:
+               $tableTagParams = array();
+               $tableTagParams['border'] =  $this->cObj->data['table_border'] ? intval($this->cObj->data['table_border']) : $tableTagParams_conf['border'];
+               $tableTagParams['cellspacing'] =  $this->cObj->data['table_cellspacing'] ? intval($this->cObj->data['table_cellspacing']) : $tableTagParams_conf['cellspacing'];
+               $tableTagParams['cellpadding'] =  $this->cObj->data['table_cellpadding'] ? intval($this->cObj->data['table_cellpadding']) : $tableTagParams_conf['cellpadding'];
+               $tableTagParams['bgcolor'] =  isset($conf['color.'][$this->cObj->data['table_bgColor']]) ? $conf['color.'][$this->cObj->data['table_bgColor']] : $conf['color.']['default'];
+
+                       // Return result:
+               return $tableTagParams;
+       }
+}
+
+
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php'])   {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php']);
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/pi1/locallang.php b/typo3/sysext/css_styled_content/pi1/locallang.php
new file mode 100755 (executable)
index 0000000..f05cc5f
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Language labels for extension "css_styled_content"
+ * 
+ * $Id$
+ * 
+ * This file is detected by the translation tool.
+ */
+
+$LOCAL_LANG = Array (
+       "default" => Array (
+               "label.toTop" => "To top",
+
+               "login.username" => "Username:",
+               "login.password" => "Password:",
+               "login.login" => "Login",
+               "login.logout" => "Logout",
+
+               "search.emptySearch" => "Sorry, your search was empty!",
+               "search.resultRange" => "Searchresult: ###RANGELOW###-###RANGEHIGH### of ###TOTAL###",
+               "search.searchResultNext" => "Next",
+               "search.searchResultPrev" => "Prev",
+               
+               "search.searchWord" => "Searchword:",
+               "search.searchIn" => "Search in:",
+               "search.headersKeywords" => "Headers and keywords",
+               "search.pageContent" => "Page content",
+               "search.searchButton" => "Search now!",
+               
+               "eIcon.html" => "Edit pure HTML content",
+               "eIcon.header" => "Edit header",
+               "eIcon.subheader" => "Edit subheader",
+               "eIcon.bodytext" => "Edit bodytext",
+               "eIcon.images" => "Edit images",
+               "eIcon.caption" => "Edit image caption",
+               "eIcon.bullets" => "Edit bullet list",
+               "eIcon.table" => "Edit table",
+               "eIcon.filelist" => "Edit file list",
+               "eIcon.menuSitemap" => "Edit menu / sitemap",
+               "eIcon.recordList" => "Edit recordlist",
+               "eIcon.plugin" => "Change/configure plugin",
+               "eIcon.multimedia" => "Edit multimedia element",
+               "eIcon.form" => "Edit email form",
+               "eIcon.search" => "Edit search element",
+               "eIcon.login" => "Edit login element",
+               "eIcon.page" => "Page:",
+       ),
+       "dk" => Array (
+               "label.toTop" => "Til toppen",
+
+               "login.username" => "Brugernavn:",
+               "login.password" => "Kodeord:",
+               "login.login" => "Login",
+               "login.logout" => "Logout",
+
+               "search.emptySearch" => "Beklager, men din søgning var tom!",
+               "search.resultRange" => "Søgeresultat: ###RANGELOW###-###RANGEHIGH### ud af ###TOTAL###",
+               "search.searchResultNext" => "Næste",
+               "search.searchResultPrev" => "Forrige",
+               
+               "search.searchWord" => "Søgeord:",
+               "search.searchIn" => "Søg i:",
+               "search.headersKeywords" => "Overskrifter og nøgleord",
+               "search.pageContent" => "Sideindhold",
+               "search.searchButton" => "Søg nu!",
+               
+               "eIcon.html" => "Rediger ren HTML",
+               "eIcon.header" => "Rediger overskrift",
+               "eIcon.subheader" => "Rediger manchet tekst",
+               "eIcon.bodytext" => "Rediger brødtekst",
+               "eIcon.images" => "Rediger billeder",
+               "eIcon.caption" => "Rediger billedtekst",
+               "eIcon.bullets" => "Rediger punktliste",
+               "eIcon.table" => "Rediger tabel",
+               "eIcon.filelist" => "Rediger filliste",
+               "eIcon.menuSitemap" => "Rediger menu/oversigtskort",
+               "eIcon.recordList" => "Rediger elementliste",
+               "eIcon.plugin" => "Ændre/Konfigurer plugin",
+               "eIcon.multimedia" => "Rediger multimedie element",
+               "eIcon.form" => "Rediger email formular",
+               "eIcon.search" => "Rediger søge formular",
+               "eIcon.login" => "Rediger login formular",
+               "eIcon.page" => "Side:",
+       ),
+       "de" => Array (
+       ),
+       "no" => Array (
+       ),
+       "it" => Array (
+       ),
+       "fr" => Array (
+       ),
+       "es" => Array (
+       ),
+       "nl" => Array (
+       ),
+       "cz" => Array (
+       ),
+       "pl" => Array (
+       ),
+       "si" => Array (
+       ),
+       "fi" => Array (
+       ),
+       "tr" => Array (
+       ),
+       "se" => Array (
+       ),
+       "pt" => Array (
+       ),
+       "ru" => Array (
+       ),
+       "ro" => Array (
+       ),
+       "ch" => Array (
+       ),
+       "sk" => Array (
+       ),
+       "lt" => Array (
+       ),
+);
+?>
\ No newline at end of file
diff --git a/typo3/sysext/css_styled_content/static/constants.txt b/typo3/sysext/css_styled_content/static/constants.txt
new file mode 100755 (executable)
index 0000000..ae8fa80
--- /dev/null
@@ -0,0 +1,97 @@
+  # Clear out any constants in this reserved room!
+styles.content >
+
+content {
+    # cat=content/cHeader/h0; type=int[1-5]; label=Default Header type: Enter the number of the header layout to be used by default. 
+  defaultHeaderType = 1
+    # cat=advanced/links; type=small; label=Pageframe object: The name of the "contentframe". Normally set to "page" if the site has a frameset. Otherwise it should be an empty value. This is important, as it determines the target of internal links!
+  pageFrameObj = page
+    
+  shortcut.tables = tt_content,tt_address,tt_links,tt_guest,tt_board,tt_calender,tt_products,tt_news,tt_rating,tt_poll
+    # cat=content; type=wrap; label= Content Element margins: Space above / below each content element (pixels of a clear-gif).
+  space = 0|0
+
+  splash.bgCol = white
+}
+
+
+    # cat=advanced; type=int+; label= News Content PID: If your template has a column with "news"-content fetched from another page-id, this is where you enter the id-number of that page!
+styles.content.getNews.newsPid = 0
+
+styles.content.links {
+  keep = path
+    # cat=content/links; type=small; label= Target for external links
+  extTarget = _blank
+  target = {$PAGE_TARGET}
+  allowTags = b,i,u,a,img,br,div,center,pre,font,hr,sub,sup,p,strong,em,li,ul,ol,blockquote,strike,span,h1,h2,h3,h4,h5,h6
+}
+
+styles.content.imgtext {
+    # TIP! if register[maxImageWidth] is set, this will override maxW
+    # cat=content,basic/cImage/a_maxw1; type=int+; label= Max Image Width: This indicates that maximum number of pixels (width) a block of images inserted as content is allowed to consume.
+  maxW = 600
+    # cat=content/cImage/a_maxw2; type=int+; label= Max Image Width (Text): Same as above, but this is the maximum width when text is wrapped around an imageblock. Default is 50% of the normal Max Image Width
+  maxWInText =
+    # cat=content/cImage/b; type=color; label= Image border color: Bordercolor of images in content elements when "Border"-option for element is set.
+  borderColor = black
+    # cat=content/cImage/b; type=int[0-100]; label= Image border thickness: Thickness of border around images in content elements when "Border"-option for element is set.
+  borderThick = 2
+    # cat=content/cImage/x; type=int[0-100]; label= Advanced, Column space: Horizontal distance between images in a block in content elements of type "Image" or "Text w/Image".
+  colSpace = 10
+    # cat=content/cImage/x; type=int[0-100]; label= Advanced, Row space: Vertical distance between images in a block in content elements of type "Image" or "Text w/Image".
+  rowSpace = 10
+    # cat=content/cImage/x; type=int[0-100]; label= Advanced, Margin to text: Horizontal distance between an imageblock and text in content elements of type "Image" or "Text w/Image".
+  textMargin = 10
+  linkWrap.width = 800m
+  linkWrap.height = 600m
+  linkWrap.effects = 
+    # cat=content/cImage/x; type=boolean; label= Advanced, New window: If set, every click-enlarged image will open in it's own popup window and not the current popup window (which may have a wrong size for the image to fit in)
+  linkWrap.newWindow = 0
+    # cat=content/cImage/c; type=boolean; label= Images, caption split: If this is checked, then the image caption will be split by each line and they will appear underneath the corresponding image in the imagelist.
+  captionSplit = 0
+}
+
+styles.content.uploads {
+  jumpurl_secure = 
+  jumpurl_secure_mimeTypes = pdf=application/pdf, doc=application/msword
+  jumpurl = 
+}
+
+styles.content.mailform {
+  target = {$PAGE_TARGET}
+    # cat=content/cMailform; type=; label= Message, Formmail OK: This is the message (if any) that is popped-up (JavaScript) when a user clicks "send" with an email-form
+  goodMess =
+    # cat=content/cMailform; type=; label= Message, Formmail Missing: This is the message that is popped-up when a user has NOT filled required fields in an email-form
+  badMess =
+}
+
+styles.content.loginform {
+  target = _top
+    # cat=content/cLogin; type=int+; label= PID of user archive: Enter the page-uid number (PID) of the sysFolder where you keep your fe_users that are supposed to login on this site. This setting is necessary, if login is going to work!
+  pid = 
+    # cat=content/cLogin; type=; label= Message, Login: This is the message (if any) that is popped-up when a user logs in as a front-end user
+  goodMess =
+}
+
+styles.content.searchform {
+    # cat=content/cSearch; type=; label= Message, Searchform: This is the message (if any) that is popped-up when a user performs a search
+  goodMess =
+}
+
+styles.content.searchresult {
+  resultTarget = {$PAGE_TARGET}
+  target = {$PAGE_TARGET}
+}
+
+  # cat=advanced/links; type=small; label= Target for internal links: Should match the name of the content PAGE-object in TypoScript when used with frames. Most cases: Set to "page" if you have frames in the template. If not, set to "" (empty)
+PAGE_TARGET = page
+
+
+
+
+
+
+
+
+# TYPO3 CVS ID: $Id$
+
diff --git a/typo3/sysext/css_styled_content/static/editorcfg.txt b/typo3/sysext/css_styled_content/static/editorcfg.txt
new file mode 100755 (executable)
index 0000000..f325706
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+# Setting up the CSS Editor
+CSS_editor = Template Styles
+CSS_editor.ch {
+  BODY = General
+  BODY.selector = BODY
+  BODY.attribs = font-family, background-color
+  BODY.example = Plan text outside of any tags written in the page-body.
+
+  A = Links
+  A.selector = A
+  A.attribs = LINKS,font-weight
+  A.example = This is <A href="#">a link to</A> the page top.
+  A.exampleStop=1
+  A.ch {
+       hover = Mouseover links
+       hover.selector = + :hover
+       hover.attribs = LINKS
+
+       active = Active links
+       active.selector = + :active
+       active.attribs = LINKS
+
+       visited = Visited links
+       visited.selector = + :visited
+       visited.attribs = LINKS
+  }
+  
+  content = < tt_content.CSS_editor
+}
+
+
+
+
+
+tt_content.CSS_editor = General content
+tt_content.CSS_editor {
+       title.dk = Generelt Indhold
+       ch {
+               P = Text
+               P.selector = P
+               P.attribs = BODYTEXT
+               P.example = <P>General text wrapped in &lt;P&gt;:<BR>In principio creavit Deus caelum et terram terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus...</P>
+               P.ch {
+                       caption = Caption
+                       caption.attribs = TEXT
+                       caption.selector = + .csc-caption
+                   caption.example = <P class="csc-caption">Caption text<BR>Dixit autem Deus fiant luminaria in firmamento caeli ut dividant diem ac noctem et sint...</P>
+                       
+                       menu_sitemap = Menu/Sitemap item
+                       menu_sitemap.attribs = TEXT
+                       menu_sitemap.selector = + .csc-menu
+                   menu_sitemap.example = <P class="csc-menu">Menu/Sitemap items</P><P class="csc-menu">Item number 2</P><P class="csc-menu">The third item here</P>
+                       
+                       section = Menu/Sitemap item: Section-title
+                       section.attribs = TEXT
+                       section.selector = + .csc-section
+                   section.example = <P class="csc-section">Menu/Sitemap item: Section-title</P>
+                       
+                       header_date = Header date
+                       header_date.attribs = TEXT
+                       header_date.selector = + .csc-header-date
+                       header_date.example = <P class="csc-header-date">Header date: 01/02 2002:</P>
+                       
+                       P = Page content
+                       P.selector = +.bodytext
+                       P.attribs = BODYTEXT
+                       P.example = <P class="bodytext">Page content, wrapped in &lt;P&gt;:<BR>In principio creavit Deus caelum et terram terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus...</P>
+                       P.exampleStop=1
+                       P.ch {
+                               firstline = First line
+                               firstline.selector = +:first-line
+                               firstline.attribs = TEXT,TEXT+
+                               firstline.example = <P class="bodytext">In principio creavit Deus caelum et terram terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus...</P>
+               
+                               firstletter = First letter
+                               firstletter.selector = +:first-letter
+                               firstletter.attribs = TEXT,TEXT+
+                               firstletter.example = <P class="bodytext">In principio creavit Deus caelum et terram terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus...</P>
+               
+                               P_plus = Page content, next paragraph
+                               P_plus.selector = ++ P
+                               P_plus.attribs = BODYTEXT,TEXT+
+                               P_plus.example (
+                                       <P class="bodytext"><strong>First paragraph</strong> of bodytext here. In principio creavit Deus caelum et terram terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus...</P>
+                                       <P class="bodytext"><strong>Second paragraph</strong> of bodytext here. In principio creavit Deus caelum et terram terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus...</P>
+                                       <P class="bodytext"><strong>Third paragraph</strong> of bodytext here. In principio creavit Deus caelum et terram terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus...</P>
+                               )
+
+                               links = < CSS_editor.ch.A
+                               links.example = <P class="bodytext">This is bodytext <A href="#">with a link</A> in it.</P>                     
+                       }
+                       links = < CSS_editor.ch.A
+                       links.example = <P>This is text <A href="#">with a link</A> in it.</P>
+               }
+               
+               H1 = Header 1
+               H1.selector = H1
+               H1.attribs = HEADER
+               H1.example = <H1>Header 1 example <A href="#"> with link</A></H1><P>Bodytext, Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</P>
+               H1.exampleStop=1
+               H1.ch.links = < CSS_editor.ch.A
+               H1.ch.links.example = 
+               
+               H2 = Header 2
+               H2.selector = H2
+               H2.attribs = HEADER
+               H2.example = <H2>Header 2 example <A href="#"> with link</A></H2><P>Bodytext, Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</P>
+               H2.exampleStop=1
+               H2.ch.links = < CSS_editor.ch.A
+               H2.ch.links.example = 
+               
+               H3 = Header 3
+               H3.selector = H3
+               H3.attribs = HEADER
+               H3.example = <H3>Header 3 example <A href="#"> with link</A></H3><P>Bodytext, Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</P>
+               H3.exampleStop=1
+               H3.ch.links = < CSS_editor.ch.A
+               H3.ch.links.example = 
+               
+               H4 = Header 4
+               H4.selector = H4
+               H4.attribs = HEADER
+               H4.example = <H4>Header 4 example <A href="#"> with link</A></H4><P>Bodytext, Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</P>
+               H4.exampleStop=1
+               H4.ch.links = < CSS_editor.ch.A
+               H4.ch.links.example = 
+               
+               H5 = Header 5
+               H5.selector = H5
+               H5.attribs = HEADER
+               H5.example = <H5>Header 5 example <A href="#"> with link</A></H5><P>Bodytext, Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</P>
+               H5.exampleStop=1
+               H5.ch.links = < CSS_editor.ch.A
+               H5.ch.links.example = 
+               
+               H6 = Header 6
+               H6.selector = H6
+               H6.attribs = HEADER
+               H6.example = <H6>Header 6 example <A href="#"> with link</A></H6><P>Bodytext, Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</P>
+               H6.exampleStop=1
+               H6.ch.links = < CSS_editor.ch.A
+               H6.ch.links.example = 
+               
+               PRE = Preformatted code
+               PRE.selector = PRE
+               PRE.attribs = TEXT,margin-top,margin-bottom
+               PRE.example (
+<PRE>This is &lt;PRE&gt; content!
+This is line number one
+  Line number two with two spacer indents.
+  Another line there
+       Tabulated line
+Normal line again.             </PRE>
+<PRE>Yet a &lt;PRE&gt; section here!</PRE>
+               )
+               
+               OL = Ordered bullet lists (numbers)
+               OL.selector = OL
+               OL.attribs = TEXT,BULLETS
+               OL.example = <P>Ordered bulletlist:</P><OL><LI>Bullet number 1</LI><LI>Bullet number 2, Dixitque Deus ecce dedi vobis omnem herbam adferentem semen super...</LI><LI>Bullet number 3, Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</LI></OL>
+               
+               UL = Unordered bullet lists
+               UL.selector = UL
+               UL.attribs = TEXT,BULLETS
+               UL.example = <P>Un-Ordered bulletlist:</P><UL><LI>Bullet number 1</LI><LI>Bullet number 2, Dixitque Deus ecce dedi vobis omnem herbam adferentem semen super...</LI><LI>Bullet number 3, Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</LI></UL>
+               
+               TABLE = Tables in content
+               TABLE.selector = TABLE.contenttable
+               TABLE.attribs = TABLE
+               TABLE.example ( 
+                       <table class="contenttable">
+                               <tr>
+                                       <td><P>Column/Row 1</P></td>
+                                       <td><P>Column number 2</P></td>
+                                       <td><P>Column number 3</P></td>
+                               </tr>
+                               <tr>
+                                       <td><P>Row 2</P></td>
+                                       <td><P>Dixitque Deus ecce dedi vobis omnem herbam adferentem semen super...</P></td>
+                                       <td><P>Et praeessent diei ac nocti et dividerent lucem ac tenebras et vidit Deus quod esset bonum et factum est...</P></td>
+                               </tr>
+                       </table>
+               )
+               TABLE.exampleStop=1
+               TABLE.ch {
+                       TD = Table cells
+                       TD.selector = TD
+                       TD.attribs = TD
+               }
+               TABLE.ch.P < .P.ch.P
+               TABLE.ch.P.selector = P
+
+               BLOCKQUOTE = Indented blocks
+               BLOCKQUOTE.selector = BLOCKQUOTE
+               BLOCKQUOTE.attribs = margin-left, margin-right
+               BLOCKQUOTE.example = <BLOCKQUOTE><P>This is bodytext in a block-quote.</P></BLOCKQUOTE>
+               
+#              tx_myextension = < plugin.tx_myextension.CSS_editor
+       }
+}
+
+
+*/
+
+// Commented out since it needs update - or a vision... ?
+
+# TYPO3 CVS ID: $Id$
diff --git a/typo3/sysext/css_styled_content/static/setup.txt b/typo3/sysext/css_styled_content/static/setup.txt
new file mode 100755 (executable)
index 0000000..86ef57a
--- /dev/null
@@ -0,0 +1,1118 @@
+# ***************************************************************************
+# Notice: "styles." (and "temp.") objects are UNSET after template parsing!
+# Use "lib." for persisting storage of objects.
+# ***************************************************************************
+
+# Clear out any constants in this reserved room!
+styles.content >
+
+# get content
+styles.content.get = CONTENT
+styles.content.get {
+       table = tt_content
+       select.orderBy = sorting
+       select.where = colPos=0
+       select.languageField = sys_language_uid
+}
+
+# get content, left
+styles.content.getLeft < styles.content.get
+styles.content.getLeft.select.where = colPos=1
+
+# get content, right
+styles.content.getRight < styles.content.get
+styles.content.getRight.select.where = colPos=2
+
+# get content, margin
+styles.content.getBorder < styles.content.get
+styles.content.getBorder.select.where = colPos=3
+
+# get news
+styles.content.getNews < styles.content.get
+styles.content.getNews.select.pidInList = {$styles.content.getNews.newsPid}
+
+# Edit page object:
+styles.content.editPanelPage = COA
+styles.content.editPanelPage {
+       10 = EDITPANEL
+       10 {
+               allow = toolbar,move,hide
+               label.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.page
+               label.wrap = |&nbsp;<b>%s</b>
+       }
+}
+
+
+
+
+
+
+
+
+
+
+
+# *********************************************************************
+# "lib." objects are preserved from unsetting after template parsing
+# *********************************************************************
+
+# Creates persistent ParseFunc setup for non-HTML content. This is recommended to use (as a reference!)
+lib.parseFunc {
+       makelinks = 1
+       makelinks.http.keep = {$styles.content.links.keep}
+       makelinks.http.extTarget = {$styles.content.links.extTarget}
+       makelinks.mailto.keep = path
+       tags {
+               link = TEXT
+               link {
+                       current = 1
+                       typolink.parameter.data = parameters : allParams
+                       typolink.extTarget = {$styles.content.links.extTarget}
+                       typolink.target = {$styles.content.links.target}
+                       parseFunc.constants =1
+               }
+       }
+       allowTags = {$styles.content.links.allowTags}
+       denyTags = *
+       sword = <span class="csc-sword">|</span>
+       constants = 1
+
+       nonTypoTagStdWrap.HTMLparser = 1
+       nonTypoTagStdWrap.HTMLparser {
+               keepNonMatchedTags = 1
+               htmlSpecialChars = 2
+       }
+}
+
+# good old parsefunc in "styles.content.parseFunc" is created for backwards compatibility. Don't use it, just ignore.
+styles.content.parseFunc < lib.parseFunc
+
+# Creates persistent ParseFunc setup for RTE content (which is mainly HTML) based on the "ts_css" transformation.
+lib.parseFunc_RTE < lib.parseFunc
+lib.parseFunc_RTE {
+       //  makelinks >
+       # Processing <table> and <blockquote> blocks separately
+       externalBlocks = table, blockquote, ol,ul
+       externalBlocks {
+               # The blockquote content is passed into parseFunc again...
+               blockquote.stripNL=1
+               blockquote.callRecursive=1
+               blockquote.callRecursive.tagStdWrap.HTMLparser = 1
+               blockquote.callRecursive.tagStdWrap.HTMLparser.tags.blockquote.overrideAttribs = style="margin-bottom:0;margin-top:0;"
+
+               ol.stripNL=1
+               ol.stdWrap.parseFunc = < lib.parseFunc
+
+               ul.stripNL=1
+               ul.stdWrap.parseFunc = < lib.parseFunc
+
+               table.stripNL=1
+               table.stdWrap.HTMLparser = 1
+               table.stdWrap.HTMLparser.tags.table.fixAttrib.class {
+                       default = contenttable
+                       always = 1
+                       list = contenttable
+               }
+               table.stdWrap.HTMLparser.keepNonMatchedTags = 1
+               table.HTMLtableCells=1
+               table.HTMLtableCells {
+                       default.callRecursive=1
+                       addChr10BetweenParagraphs=1
+               }
+       }
+       nonTypoTagStdWrap.encapsLines {
+               encapsTagList = div,p,pre,h1,h2,h3,h4,h5,h6
+               remapTag.DIV = P
+               nonWrappedTag = P
+               innerStdWrap_all.ifEmpty = &nbsp;
+               addAttributes.P.class = bodytext
+               addAttributes.P.class.setOnly=blank
+       }
+       nonTypoTagStdWrap.HTMLparser = 1
+       nonTypoTagStdWrap.HTMLparser {
+               keepNonMatchedTags = 1
+               htmlSpecialChars = 2
+       }
+}
+
+
+# Content header:
+lib.stdheader = COA
+lib.stdheader {
+
+       # Create align style-attribute for <Hx> tags
+       2 = LOAD_REGISTER
+       2.headerStyle.field = header_position
+       2.headerStyle.required = 1
+       2.headerStyle.noTrimWrap = | style="text-align:|;"|
+
+       # Create class="csc-firstHeader" attribute for <Hx> tags
+       3 = LOAD_REGISTER
+       3.headerClass = csc-firstHeader
+       3.headerClass.if.value=1
+       3.headerClass.if.equals.data = cObj:parentRecordNumber
+       3.headerClass.noTrimWrap = | class="|"|
+
+       # Date format:
+       5 = TEXT
+       5.field = date
+       5.if.isTrue.field = date
+       5.date = d/m Y
+       5.wrap = <p class="csc-header-date">|</p>
+       5.prefixComment = 2 | Header date:
+
+       # This CASE cObject renders the header content:
+       # currentValue is set to the header data, possibly wrapped in link-tags.
+       10 = CASE
+       10.setCurrent {
+               field = header
+               htmlSpecialChars = 1
+               typolink.parameter.field = header_link
+       }
+       10.key.field = header_layout
+       10.key.ifEmpty = {$content.defaultHeaderType}
+       10.key.ifEmpty.override.data = register: defaultHeaderType
+
+       10.1 = TEXT
+       10.1.current = 1
+       10.1.insertData = 1
+       10.1.fontTag = <h1{register:headerStyle}{register:headerClass}>|</h1>
+
+       10.2 < .10.1
+       10.2.fontTag = <h2{register:headerStyle}{register:headerClass}>|</h2>
+
+       10.3 < .10.1
+       10.3.fontTag = <h3{register:headerStyle}{register:headerClass}>|</h3>
+
+       10.4 < .10.1
+       10.4.fontTag = <h4{register:headerStyle}{register:headerClass}>|</h4>
+
+       10.5 < .10.1
+       10.5.fontTag = <h5{register:headerStyle}{register:headerClass}>|</h5>
+
+       # Post-processing:
+       stdWrap.fieldRequired = header
+       stdWrap.if {
+               equals.field = header_layout
+               value = 100
+               negate = 1
+       }
+
+       stdWrap.editIcons = tt_content : header, [header_layout | header_position], [header_link|date]
+       stdWrap.editIcons.beforeLastTag = 1
+       stdWrap.editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.header
+
+       stdWrap.dataWrap = <div class="csc-header csc-header-n{cObj:parentRecordNumber}">|</div>
+       stdWrap.prefixComment = 2 | Header:
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#******************************************************
+# Including library for processing of some elements:
+#******************************************************
+includeLibs.tx_cssstyledcontent_pi1 = EXT:css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php
+
+
+#**********************************
+# tt_content is started
+#**********************************
+tt_content >
+tt_content = CASE
+tt_content.key.field = CType
+tt_content.stdWrap {
+
+       spaceBefore.field = spaceBefore
+       spaceAfter.field = spaceAfter
+       space = {$content.space}
+
+       innerWrap.cObject = CASE
+       innerWrap.cObject {
+               key.field = section_frame
+
+               1 = TEXT
+               1.value = <div class="csc-frame csc-frame-invisible">|</div>
+
+               5 = TEXT
+               5.value = <div class="csc-frame csc-frame-rulerBefore"></div>|
+
+               6 = TEXT
+               6.value = |<div class="csc-frame csc-frame-rulerAfter"></div>
+
+               10 = TEXT
+               10.value = <div class="csc-frame csc-frame-indent">|</div>
+
+               11 = TEXT
+               11.value = <div class="csc-frame csc-frame-indent3366">|</div>
+
+               12 = TEXT
+               12.value = <div class="csc-frame csc-frame-indent6633">|</div>
+
+               20 = TEXT
+               20.value = <div class="csc-frame csc-frame-frame1">|</div>
+
+               21 = TEXT
+               21.value = <div class="csc-frame csc-frame-frame2">|</div>
+       }
+
+       innerWrap2 = | <p class="csc-linkToTop"><a href="#">{LLL:EXT:css_styled_content/pi1/locallang.php:label.toTop}</a></p>
+       innerWrap2.insertData = 1
+       innerWrap2.fieldRequired = linkToTop
+
+       dataWrap = <a name="{field:uid}"></a> |
+
+       editPanel = 1
+       editPanel {
+               allow = move,new,edit,hide,delete
+               line = 5
+               label = %s
+               onlyCurrentPid = 1
+               previewBorder = 4
+               edit.displayRecord = 1
+       }
+
+       prefixComment = 1 | CONTENT ELEMENT, uid:{field:uid}/{field:CType}
+}
+
+
+# *****************
+# CType: header
+# *****************
+# See Object path "lib.stdheader"
+tt_content.header = COA
+tt_content.header {
+       10 = < lib.stdheader
+
+       20 = TEXT
+       20 {
+               field = subheader
+               required = 1
+
+               dataWrap = <p class="csc-subheader csc-subheader-{field:layout}">|</p>
+               htmlSpecialChars = 1
+
+               editIcons = tt_content:subheader,layout
+               editIcons.beforeLastTag = 1
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.subheader
+
+               prefixComment = 2 | Subheader:
+       }
+}
+
+
+# *****************
+# CType: text
+# *****************
+tt_content.text = COA
+tt_content.text {
+       10 = < lib.stdheader
+
+       20 = TEXT
+       20 {
+               field = bodytext
+               required = 1
+
+               parseFunc = < lib.parseFunc_RTE
+
+               editIcons = tt_content:bodytext, rte_enabled
+               editIcons.beforeLastTag = 1
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.bodytext
+
+               prefixComment = 2 | Text:
+       }
+}
+
+
+# *****************
+# CType: image
+# *****************
+# (also used for rendering 'textpic' type):
+tt_content.image = COA
+tt_content.image.10 = < lib.stdheader
+tt_content.image.20 = IMGTEXT
+tt_content.image.20 {
+       imgList.field = image
+       textPos.field = imageorient
+       imgPath = uploads/pics/
+       imgObjNum = 1
+       1 {
+               file.import.current = 1
+               file.width.field = imagewidth
+               params = align="top"
+               imageLinkWrap = 1
+               imageLinkWrap {
+                       bodyTag = <body bgcolor="black">
+                       wrap = <a href="javascript:close();"> | </a>
+                       width = {$styles.content.imgtext.linkWrap.width}
+                       height = {$styles.content.imgtext.linkWrap.height}
+                       effects = {$styles.content.imgtext.linkWrap.effects}
+
+                       JSwindow = 1
+                       JSwindow.newWindow = {$styles.content.imgtext.linkWrap.newWindow}
+                       JSwindow.expand = 17,20
+
+                       enable.field = image_zoom
+                       enable.ifEmpty.field = image_link
+
+                       typolink.parameter.field = image_link
+                       typolink.parameter.listNum.stdWrap.data = register : IMAGE_NUM
+                       typolink.target = {$styles.content.links.target}
+                       typolink.extTarget = {$styles.content.links.extTarget}
+               }
+       }
+
+       maxW = {$styles.content.imgtext.maxW}
+       maxW.override.data = register:maxImageWidth
+       maxWInText = {$styles.content.imgtext.maxWInText}
+       maxWInText.override.data = register:maxImageWidthInText
+
+       equalH.field = imageheight
+       spaceBelowAbove = 6
+
+       image_compression.field = image_compression
+       image_effects.field = image_effects
+
+       noRows.field = image_noRows
+
+       cols.field = imagecols
+       border.field = imageborder
+       caption {
+               1 = TEXT
+               1 {
+                       if.isFalse = {$styles.content.imgtext.captionSplit}
+                       field = imagecaption
+                       required = 1
+                       parseFunc = < lib.parseFunc
+                       br = 1
+                       fontTag = <p class="csc-caption">|</p>
+                       wrapAlign.field = imagecaption_position
+               }
+       }
+       captionSplit = {$styles.content.imgtext.captionSplit}
+       captionSplit.cObject = TEXT
+       captionSplit.cObject.field = imagecaption
+       captionSplit.stdWrap < .caption.1
+       captionSplit.stdWrap {
+               field >
+               if >
+       }
+
+       borderCol = {$styles.content.imgtext.borderColor}
+       borderThick = {$styles.content.imgtext.borderThick}
+       colSpace = {$styles.content.imgtext.colSpace}
+       rowSpace = {$styles.content.imgtext.rowSpace}
+       textMargin = {$styles.content.imgtext.textMargin}
+
+       editIcons = tt_content : image [imageorient|imagewidth|imageheight], [imagecols|image_noRows|imageborder],[image_link|image_zoom],[image_compression|image_effects|image_frames],imagecaption[imagecaption_position]
+       editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.images
+
+       caption.editIcons = tt_content : imagecaption[imagecaption_position]
+       caption.editIcons.beforeLastTag=1
+       caption.editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.caption
+
+       stdWrap.prefixComment = 2 | Image block:
+}
+
+
+# *****************
+# CType: textpic
+# *****************
+tt_content.textpic = COA
+tt_content.textpic {
+       10 = COA
+       10.if.value = 25
+       10.if.isLessThan.field = imageorient
+       10.10 = < lib.stdheader
+
+       20  = < tt_content.image.20
+       20.text.10 = COA
+       20.text.10 {
+               if.value = 24
+               if.isGreaterThan.field = imageorient
+               10 = < lib.stdheader
+               10.stdWrap.dataWrap = <div class="csc-textpicHeader csc-textpicHeader-{field:imageorient}">|</div>
+       }
+       20.text.20 = < tt_content.text.20
+}
+
+
+# *****************
+# CType: bullet
+# *****************
+# Rendered by a PHP function specifically written to handle CE bullet lists. See css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php
+tt_content.bullets = COA
+tt_content.bullets {
+       10 = < lib.stdheader
+
+       20 = USER
+       20.userFunc = tx_cssstyledcontent_pi1->render_bullets
+
+       20.innerStdWrap.parseFunc = < lib.parseFunc
+
+       20.stdWrap {
+               editIcons = tt_content: bodytext, [layout]
+               editIcons.beforeLastTag = 1
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.bullets
+
+               prefixComment = 2 | Bullet list:
+       }
+}
+
+
+# *****************
+# CType: table
+# *****************
+# Rendered by a PHP function specifically written to handle CE tables. See css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php
+tt_content.table = COA
+tt_content.table {
+       10 = < lib.stdheader
+
+       20 = USER
+       20.userFunc = tx_cssstyledcontent_pi1->render_table
+
+       20.color {
+               default =
+               1 = #EDEBF1
+               2 = #F5FFAA
+       }
+       20.tableParams_0 {
+               border =
+               cellpadding =
+               cellspacing =
+       }
+       20.tableParams_1 {
+               border =
+               cellpadding =
+               cellspacing =
+       }
+       20.tableParams_2 {
+               border =
+               cellpadding =
+               cellspacing =
+       }
+       20.tableParams_3 {
+               border =
+               cellpadding =
+               cellspacing =
+       }
+
+       20.innerStdWrap.parseFunc = < lib.parseFunc
+
+       20.stdWrap {
+               editIcons = tt_content: cols, bodytext, [layout], [table_bgColor|table_border|table_cellspacing|table_cellpadding]
+               editIcons.beforeLastTag = 1
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.table
+
+               prefixComment = 2 | Table:
+       }
+}
+
+
+# *****************
+# CType: uploads
+# *****************
+# Rendered by a PHP function specifically written to handle CE filelists. See css_styled_content/pi1/class.tx_cssstyledcontent_pi1.php
+tt_content.uploads = COA
+tt_content.uploads {
+       10 = < lib.stdheader
+
+       20 = USER
+       20.userFunc = tx_cssstyledcontent_pi1->render_uploads
+
+       20.color {
+               default =
+               1 = #EDEBF1
+               2 = #F5FFAA
+       }
+       20.tableParams_0 {
+               border =
+               cellpadding =
+               cellspacing =
+       }
+       20.tableParams_1 {
+               border =
+               cellpadding =
+               cellspacing =
+       }
+       20.tableParams_2 {
+               border =
+               cellpadding =
+               cellspacing =
+       }
+       20.tableParams_3 {
+               border =
+               cellpadding =
+               cellspacing =
+       }
+
+       20.linkProc {
+               target = _blank
+               jumpurl = {$styles.content.uploads.jumpurl}
+               jumpurl.secure = {$styles.content.uploads.jumpurl_secure}
+               jumpurl.secure.mimeTypes = {$styles.content.uploads.jumpurl_secure_mimeTypes}
+               removePrependedNumbers = 1
+
+               iconCObject = IMAGE
+               iconCObject.file.import.data = register : ICON_REL_PATH
+               iconCObject.file.width = 150
+       }
+
+       20.stdWrap {
+               editIcons = tt_content: media, layout [table_bgColor|table_border|table_cellspacing|table_cellpadding], filelink_size, imagecaption
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.filelist
+
+               prefixComment = 2 | File list:
+       }
+}
+
+
+# ******************
+# CType: multimedia
+# ******************
+tt_content.multimedia = COA
+tt_content.multimedia {
+       10 = < lib.stdheader
+
+       20 = MULTIMEDIA
+       20.file.field = multimedia
+       20.file.wrap = uploads/media/
+       20.file.listNum = 0
+       20.params.field = bodytext
+
+       20.stdWrap {
+               editIcons = tt_content: multimedia, bodytext
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.multimedia
+
+               prefixComment = 2 | Multimedia element:
+       }
+}
+
+
+# ******************
+# CType: mailform
+# ******************
+tt_content.mailform = COA
+tt_content.mailform.10 = < lib.stdheader
+tt_content.mailform.20 = FORM
+tt_content.mailform.20 {
+       layout = <tr><td class="csc-form-labelcell">###LABEL###</td><td class="csc-form-fieldcell">###FIELD###</td></tr>
+       labelWrap.wrap = <p class="csc-form-label">|</p>
+       commentWrap.wrap = <p class="csc-form-comment">|</p>
+       radioWrap.wrap = <span class="csc-form-radio">|</span>
+       REQ = 1
+       REQ.labelWrap.wrap = <p class="csc-form-label-req">|</p>
+       COMMENT.layout = <tr><td colspan="2" class="csc-form-commentcell">###LABEL###</td></tr>
+       target = {$styles.content.mailform.target}
+       goodMess = {$styles.content.mailform.goodMess}
+       badMess = {$styles.content.mailform.badMess}
+       redirect.field = pages
+       redirect.listNum = 0
+       recipient.field = subheader
+       data.field = bodytext
+       locationData = 1
+
+       stdWrap.wrap = <table border="0" cellspacing="1" cellpadding="1" class="csc-mailform">  | </table>
+       stdWrap {
+               editIcons = tt_content: bodytext, pages, subheader
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.form
+
+               prefixComment = 2 | Mail form inserted:
+       }
+}
+
+
+# ******************
+# CType: search
+# ******************
+tt_content.search = COA
+tt_content.search.10 = < lib.stdheader
+# Result:
+tt_content.search.20 = SEARCHRESULT
+tt_content.search.20 {
+       allowedCols = pages.title-subtitle-keywords-description : tt_content.header-bodytext-imagecaption : tt_address.name-title-address-email-company-city-country : tt_links.title-note-note2-url : tt_board.subject-message-author-email : tt_calender.title-note : tt_products.title-note-itemnumber
+       languageField.tt_content = sys_language_uid
+       renderObj = COA
+       renderObj {
+
+               10 = TEXT
+               10.field = pages_title
+               10.htmlSpecialChars = 1
+               10.typolink {
+                       parameter.field = uid
+                       target = {$styles.content.searchresult.resultTarget}
+                       additionalParams.data = register:SWORD_PARAMS
+                       additionalParams.required = 1
+                       additionalParams.wrap = &no_cache=1
+               }
+               10.htmlSpecialChars = 1
+               10.wrap = <h3 class="csc-searchResultHeader">|</h3>
+
+               20 = COA
+               20 {
+                       10 = TEXT
+                       10.field = tt_content_bodytext
+                       10.stripHtml = 1
+                       10.htmlSpecialChars = 1
+               }
+               20.stdWrap.crop = 200 | ...
+               20.stdWrap.wrap = <p class="csc-searchResult">|</p>
+       }
+
+       layout = COA
+       layout {
+               wrap = <table border="0" cellspacing="0" cellpadding="2" class="csc-searchResultInfo"><tr> | </tr></table> ###RESULT###
+
+               10 = TEXT
+               10.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.resultRange
+               10.wrap = <td class="csc-searchResultRange"><p>|</p></td>
+
+               20 = TEXT
+               20.value = ###PREV###&nbsp;&nbsp;&nbsp;###NEXT###
+               20.wrap = <td class="csc-searchResultPrevNext"><p>|</p></td>
+       }
+
+       noResultObj = COA
+       noResultObj {
+               10 = TEXT
+               10.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.emptySearch
+               10.wrap = <h3 class="csc-noSearchResultMsg">|</h3>
+       }
+
+       next = TEXT
+       next.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.searchResultNext
+
+       prev = TEXT
+       prev.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.searchResultPrev
+
+       target = {$styles.content.searchresult.target}
+       range = 20
+
+       stdWrap.prefixComment = 2 | Search result:
+}
+
+# Form:
+tt_content.search.30 < tt_content.mailform.20
+tt_content.search.30 {
+       goodMess = {$styles.content.searchform.goodMess}
+       redirect >
+       recipient >
+       data >
+       dataArray {
+               10.label.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.searchWord
+               10.type = sword=input
+               20.label.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.searchIn
+               20.type = scols=select
+               20.valueArray {
+                       10.label.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.headersKeywords
+                       10.value = pages.title-subtitle-keywords-description:tt_content.header
+                       20.label.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.pageContent
+                       20.value = tt_content.header-bodytext-imagecaption
+               }
+               30.type = stype=hidden
+               30.value = L0
+               40.type = submit=submit
+               40.value.data = LLL:EXT:css_styled_content/pi1/locallang.php:search.searchButton
+       }
+       type.field = pages
+       type.listNum = 0
+       locationData = HTTP_POST_VARS
+       no_cache = 1
+
+       stdWrap.wrap = <table border="0" cellspacing="1" cellpadding="1" class="csc-searchform">  | </table>
+       stdWrap {
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.search
+
+               prefixComment = 2 | Search form inserted:
+       }
+}
+
+
+# ******************
+# CType: login
+# ******************
+tt_content.login < tt_content.mailform
+tt_content.login.10 = < lib.stdheader
+tt_content.login.20 {
+       goodMess = {$styles.content.loginform.goodMess}
+       redirect >
+       recipient >
+       data >
+       dataArray {
+               10.label.data = LLL:EXT:css_styled_content/pi1/locallang.php:login.username
+               10.type = *user=input
+               20.label.data = LLL:EXT:css_styled_content/pi1/locallang.php:login.password
+               20.type = *pass=password
+               30.type = logintype=hidden
+               30.value = login
+               40.type = submit=submit
+               40.value.data = LLL:EXT:css_styled_content/pi1/locallang.php:login.login
+       }
+       type.field = pages
+       type.listNum = 0
+       target = {$styles.content.loginform.target}
+       locationData = 0
+       hiddenFields.pid = TEXT
+       hiddenFields.pid {
+               value = {$styles.content.loginform.pid}
+               override.field = pages
+               override.listNum = 1
+       }
+
+       stdWrap.wrap = <table border="0" cellspacing="1" cellpadding="1" class="csc-loginform">  | </table>
+       stdWrap {
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.login
+
+               prefixComment = 2 | Login/Logout form:
+       }
+}
+[loginUser = *]
+tt_content.login.20 {
+       dataArray >
+       dataArray {
+               10.label.data = LLL:EXT:css_styled_content/pi1/locallang.php:login.username
+               10.label.wrap = |&nbsp;<!--###USERNAME###-->
+               30.type = logintype=hidden
+               30.value = logout
+               40.type = submit=submit
+               40.value.data = LLL:EXT:css_styled_content/pi1/locallang.php:login.logout
+       }
+}
+[global]
+
+
+# ******************
+# CType: splash
+# ******************
+# Depreciated element.
+# Still here for backwards compliance with plugins using the "text box" type.
+tt_content.splash = CASE
+tt_content.splash.key.field = splash_layout
+tt_content.splash.stdWrap {
+       prefixComment = 2 | Textbox inserted (Depreciated)
+}
+tt_content.splash.default = COA
+tt_content.splash.default {
+       20 = CTABLE
+       20 {
+               c.1 = < tt_content.text
+               lm.1 = IMAGE
+               lm.1.file {
+                       import = uploads/pics/
+                       import.field = image
+                       import.listNum = 0
+                       maxW.field = imagewidth
+                       maxW.ifEmpty = 200
+               }
+               cMargins = 30,0,0,0
+       }
+}
+tt_content.splash.1 < tt_content.splash.default
+tt_content.splash.1.20.lm.1.file >
+tt_content.splash.1.20.lm.1.file = GIFBUILDER
+tt_content.splash.1.20.lm.1.file {
+       XY = [10.w]+10,[10.h]+10
+       backColor = {$content.splash.bgCol}
+       backColor.override.data = register:pageColor
+       format = jpg
+       5 = BOX
+       5.dimensions = 3,3,[10.w],[10.h]
+       5.color = #333333
+       7 = EFFECT
+       7.value = blur=99|blur=99|blur=99|blur=99|blur=99|blur=99|blur=99
+       10 = IMAGE
+       10.file {
+               import = uploads/pics/
+               import.field = image
+               import.listNum = 0
+               maxW.field = imagewidth
+               maxW.ifEmpty = 200
+       }
+}
+// The image frames are not available unless TypoScript code from styles.content.imgFrames.x is provided manually:
+tt_content.splash.2 < tt_content.splash.default
+#tt_content.splash.2.20.lm.1.file.m < styles.content.imgFrames.1
+tt_content.splash.3 < tt_content.splash.default
+#tt_content.splash.3.20.lm.1.file.m < styles.content.imgFrames.2
+
+// From plugin.postit1, if included:
+tt_content.splash.20 = < plugin.postit1
+
+
+
+
+# ****************
+# CType: menu
+# ****************
+tt_content.menu = COA
+tt_content.menu {
+       10 = < lib.stdheader
+
+       20 = CASE
+       20 {
+               key.field = menu_type
+
+               # "Menu of these pages"
+               default = HMENU
+               default.wrap = <div class="csc-menu csc-menu-def">|</div>
+               default {
+                       special = list
+                       special.value.field = pages
+                       1 = TMENU
+                       1.NO.allWrap = <p>|</p>
+                       1.NO.stdWrap.htmlSpecialChars = 1
+                       1.target = {$content.pageFrameObj}
+               }
+
+               # "Menu of subpages to these pages"
+               1 < .default
+               1.special = directory
+               1.wrap = <div class="csc-menu csc-menu-1">|</div>
+
+               # "Sitemap"
+               2 = HMENU
+               2.wrap = <div class="csc-menu csc-menu-2">|</div>
+               2 {
+                       1 = TMENU
+                       1.NO.allWrap = <p class="csc-sitemap csc-sitemap-level1">|</p>
+                       1.NO.stdWrap.htmlSpecialChars = 1
+                       1.target = {$content.pageFrameObj}
+                       1.expAll = 1
+
+                       2 < .1
+                       2.NO.allWrap = <p class="csc-sitemap csc-sitemap-level2">|</p>
+
+                       3 < .1
+                       3.NO.allWrap = <p class="csc-sitemap csc-sitemap-level3">|</p>
+
+                       4 < .1
+                       4.NO.allWrap = <p class="csc-sitemap csc-sitemap-level4">|</p>
+                       4.expAll = 0
+               }
+
+               # "Section index (pagecontent w/Index checked)"
+               3 < styles.content.get
+               3.wrap = <div class="csc-menu csc-menu-3">|</div>
+               3.select.andWhere = sectionIndex!=0
+               3.select.pidInList.override.field = pages
+               3.renderObj = TEXT
+               3.renderObj {
+                       fieldRequired = header
+                       trim=1
+                       field = header
+                       htmlSpecialChars = 1
+                       wrap = <p class="csc-section">|</p>
+                       typolink.parameter.field = pid
+                       typolink.section.field = uid
+               }
+
+               # "Menu of subpages to these pages (with abstract)"
+               4 < .1
+               4.wrap = <div class="csc-menu csc-menu-4">|</div>
+               4.1.NO {
+                       allWrap = <p>|</p>
+                       after.required = 1
+                       after.data = field : abstract // field : description // field : subtitle
+                       after.htmlSpecialChars = 1
+                       after.wrap = </p><p class="csc-abstract">|
+               }
+
+               # "Recently updated pages"
+               5 < .default
+               5.wrap = <div class="csc-menu csc-menu-5">|</div>
+               5.special = updated
+               5.special {
+                       maxAge = 3600*24*7
+                       excludeNoSearchPages = 1
+               }
+
+               # "Related pages (based on keywords)"
+               6 < .default
+               6.wrap = <div class="csc-menu csc-menu-6">|</div>
+               6.special = keywords
+               6.special {
+                       excludeNoSearchPages = 1
+               }
+
+               # "Menu of subpages to these pages + sections"
+               7 < .1
+               7.wrap = <div class="csc-menu csc-menu-7">|</div>
+               7.1.expAll = 1
+               7.2 < .7.1
+               7.2.sectionIndex = 1
+               7.2.sectionIndex.type = header
+               7.2.NO.allWrap = <p class="csc-section">|</p>
+       }
+
+       20.stdWrap {
+               editIcons = tt_content: menu_type, pages
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.menuSitemap
+
+               prefixComment = 2 | Menu/Sitemap element:
+       }
+}
+
+
+# ****************
+# CType: shortcut
+# ****************
+# Should be a complete copy from the old static template "content (default)"
+tt_content.shortcut = COA
+tt_content.shortcut {
+       20 = CASE
+       20.key.field = layout
+       20.0= RECORDS
+       20.0 {
+               source.field = records
+               tables = {$content.shortcut.tables}
+               # THESE are OLD plugins. Modern plugins registers themselves automatically!
+               conf.tt_content = < tt_content
+               conf.tt_address = < tt_address
+               conf.tt_links = < tt_links
+               conf.tt_guest = < tt_guest
+               conf.tt_board = < tt_board
+               conf.tt_calender = < tt_calender
+               conf.tt_rating < tt_rating
+               conf.tt_products = < tt_products
+               conf.tt_news = < tt_news
+               conf.tt_poll = < plugin.tt_poll
+       }
+       20.1= RECORDS
+       20.1 {
+               source.field = records
+               tables = {$content.shortcut.tables}
+               conf.tt_poll = < plugin.tt_poll
+               conf.tt_poll.code = RESULT,SUBMITTEDVOTE
+       }
+
+       20.stdWrap {
+               editIcons = tt_content: records
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.recordList
+
+               prefixComment = 2 | Inclusion of other records (by reference):
+       }
+}
+
+
+# ****************
+# CType: list
+# ****************
+# Should be a complete copy from the old static template "content (default)" (except "lib.stdheader")
+tt_content.list = COA
+tt_content.list {
+       10 = < lib.stdheader
+
+       20 = CASE
+       20.key.field = list_type
+       20 {
+               # LIST element references (NOT copy of objects!)
+               # THESE are OLD plugins. Modern plugins registers themselves automatically!
+               3 = CASE
+               3.key.field = layout
+               3.0 = < plugin.tt_guest
+
+               4 = CASE
+               4.key.field = layout
+               4.0 = < plugin.tt_board_list
+               4.1 = < plugin.tt_board_tree
+
+               2 = CASE
+               2.key.field = layout
+               2.0 = < plugin.tt_board_tree
+
+               5 = CASE
+               5.key.field = layout
+               5.0 = < plugin.tt_products
+
+               7 = CASE
+               7.key.field = layout
+               7.0 = < plugin.tt_calender
+
+               8 = CASE
+               8.key.field = layout
+               8.0 = < plugin.tt_rating
+
+               9 = CASE
+               9.key.field = layout
+               9.0 = < plugin.tt_news
+
+               11 = CASE
+               11.key.field = layout
+               11.0 = < plugin.tipafriend
+
+               20 = CASE
+               20.key.field = layout
+               20.0 = < plugin.feadmin.fe_users
+
+               21 = CASE
+               21.key.field = layout
+               21.0 = < plugin.feadmin.dmailsubscription
+       }
+
+       20.stdWrap {
+               editIcons = tt_content: list_type, layout, select_key, pages [recursive]
+               editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.plugin
+
+               prefixComment = 2 | Plugin inserted:
+       }
+}
+
+
+# ****************
+# CType: script
+# ****************
+# OBSOLETE! Please make extensions instead. The "script" content element was meant for these custom purposes in the past. Today extensions will do the job better.
+tt_content.script = TEXT
+tt_content.script {
+       value =
+
+       prefixComment = 2 | Script element (Depreciated)
+}
+
+
+# ****************
+# CType: html
+# ****************
+# This truely IS a content object, launched from inside the PHP class of course.
+# Should be a complete copy from the old static template "content (default)"
+tt_content.html = TEXT
+tt_content.html {
+       field = bodytext
+
+       editIcons = tt_content: pages
+       editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.html
+
+       prefixComment = 2 | Raw HTML content:
+}
+
+
+# ****************
+# Default error msg:
+# ****************
+tt_content.default = TEXT
+tt_content.default {
+       field = CType
+       wrap = <p style="background-color: yellow;"><b>ERROR:</b> Content Element type "|" has no rendering definition!</p>
+
+       prefixComment = 2 | Unknown element message:
+}
+
+
+
+
+
+
+
+
+# TYPO3 CVS ID: $Id$
\ No newline at end of file
diff --git a/typo3/sysext/impexp/app/clear.gif b/typo3/sysext/impexp/app/clear.gif
new file mode 100755 (executable)
index 0000000..9ed1269
Binary files /dev/null and b/typo3/sysext/impexp/app/clear.gif differ
diff --git a/typo3/sysext/impexp/app/conf.php b/typo3/sysext/impexp/app/conf.php
new file mode 100755 (executable)
index 0000000..62a9d0d
--- /dev/null
@@ -0,0 +1,6 @@
+<?php
+define('TYPO3_MOD_PATH', 'sysext/impexp/app/');
+$BACK_PATH='../../../';
+
+$MCONF['name']='xMOD_tximpexp';        // xMOD_[modulename][optional: '_something']
+?>
diff --git a/typo3/sysext/impexp/app/index.php b/typo3/sysext/impexp/app/index.php
new file mode 100755 (executable)
index 0000000..9843976
--- /dev/null
@@ -0,0 +1,862 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 1999-2004 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  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!
+***************************************************************/
+/**
+ * Import / Export module
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ */
+/**
+ * [CLASS/FUNCTION INDEX of SCRIPT]
+ *
+ *
+ *
+ *   87: class localPageTree extends t3lib_browseTree
+ *   92:     function localPageTree()
+ *  103:     function wrapTitle($title,$v)
+ *  116:     function PM_ATagWrap($icon,$cmd,$bMark='')
+ *  127:     function wrapIcon($icon,$row)
+ *  136:     function permsC()
+ *  146:     function ext_tree($pid)
+ *
+ *
+ *  227: class SC_mod_tools_log_index extends t3lib_SCbase
+ *  233:     function main()
+ *  366:     function printContent()
+ *
+ *              SECTION: EXPORT FUNCTIONS
+ *  388:     function exportData($inData)
+ *  545:     function listQueryPid($table,$pid)
+ *  558:     function makeConfigurationForm($inData)
+ *
+ *              SECTION: IMPORT FUNCTIONS
+ *  651:     function importData($inData)
+ *  748:     function tableSelector($prefix,$value,$excludeList="")
+ *  781:     function renderSelectBox($prefix,$value,$optValues)
+ *
+ * TOTAL FUNCTIONS: 14
+ * (This index is automatically created/updated by the extension "extdeveval")
+ *
+ */
+
+unset($MCONF);
+require ('conf.php');
+require ($BACK_PATH.'init.php');
+require ($BACK_PATH.'template.php');
+$LANG->includeLLFile('EXT:impexp/app/locallang.php');
+require_once (PATH_t3lib.'class.t3lib_scbase.php');
+require_once (t3lib_extMgm::extPath('impexp').'class.tx_impexp.php');
+require_once (PATH_t3lib.'class.t3lib_browsetree.php');
+require_once (PATH_t3lib.'class.t3lib_pagetree.php');
+
+t3lib_extMgm::isLoaded('impexp',1);
+
+
+
+
+/**
+ * Main script class
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_impexp
+ */
+class localPageTree extends t3lib_browseTree {
+
+       /**
+        * @return      [type]          ...
+        */
+       function localPageTree() {
+               $this->init();
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @param       [type]          $title: ...
+        * @param       [type]          $v: ...
+        * @return      [type]          ...
+        */
+       function wrapTitle($title,$v)   {
+               $title= (!strcmp(trim($title),'')) ? '<em>['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title',1).']</em>' : htmlspecialchars($title);
+               return $title;
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @param       [type]          $icon: ...
+        * @param       [type]          $cmd: ...
+        * @param       [type]          $bMark: ...
+        * @return      [type]          ...
+        */
+       function PM_ATagWrap($icon,$cmd,$bMark='')      {
+               return $icon;
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @param       [type]          $icon: ...
+        * @param       [type]          $row: ...
+        * @return      [type]          ...
+        */
+       function wrapIcon($icon,$row)   {
+               return $icon;
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @return      [type]          ...
+        */
+       function permsC()       {
+               return $this->BE_USER->getPagePermsClause(1);
+       }
+
+       /**
+        * [Describe function...]
+        *
+        * @param       [type]          $pid: ...
+        * @return      [type]          ...
+        */
+       function ext_tree($pid) {
+               $this->init(' AND '.$this->permsC());
+
+                       // Get stored tree structure:
+               $this->stored = unserialize($this->BE_USER->uc['browseTrees']['browsePages']);
+
+                       // PM action:
+               $PM = t3lib_div::intExplode('_',t3lib_div::_GP('PM'));
+
+                       // traverse mounts:
+               $titleLen=intval($this->BE_USER->uc['titleLen']);
+               $treeArr=array();
+
+
+               $idx=0;
+#              $pid=1;
+
+                       // Set first:
+               $this->bank=$idx;
+               $isOpen = $this->stored[$idx][$pid] || $this->expandFirst;
+
+               $curIds = $this->ids;   // save ids
+               $this->reset();
+               $this->ids = $curIds;
+
+                       // Set PM icon:
+               $cmd=$this->bank.'_'.($isOpen?'0_':'1_').$pid;
+               $icon='<img src="'.$this->backPath.'t3lib/gfx/ol/'.($isOpen?'minus':'plus').'only.gif" width="18" height="16" align="top" border="0" alt="" /></a>';
+               $firstHtml= $this->PM_ATagWrap($icon,$cmd);
+
+               if ($pid>0)     {
+                       $rootRec=t3lib_befunc::getRecord('pages',$pid);
+                       $firstHtml.=$this->wrapIcon('<img src="'.$this->backPath.t3lib_iconWorks::getIcon('pages',$rootRec).'" width="18" height="16" align="top" alt="" />',$rootRec);
+               } else {
+                       $rootRec=array(
+                               'title'=>$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'],
+                               'uid'=>0
+                       );
+                       $firstHtml.=$this->wrapIcon('<img src="'.$this->backPath.'gfx/i/_icon_website.gif" width="18" height="16" align="top" alt="" />',$rootRec);
+               }
+               $this->tree[]=array('HTML'=>$firstHtml,'row'=>$rootRec);
+               if ($isOpen)    {
+                               // Set depth:
+                       $depthD='<img src="'.$this->backPath.'t3lib/gfx/ol/blank.gif" width="18" height="16" align="top" alt="" />';
+                       if ($this->addSelfId)   $this->ids[] = $pid;
+                       $this->getTree($pid,999,$depthD);
+
+                       $idH=array();
+                       $idH[$pid]['uid']=$pid;
+                       if (count($this->buffer_idH))   $idH[$pid]['subrow']=$this->buffer_idH;
+                       $this->buffer_idH=$idH;
+
+               }
+
+                       // Add tree:
+               $treeArr=array_merge($treeArr,$this->tree);
+
+               return $treeArr;
+       }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * Main script class for the Import / Export facility
+ *
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
+ * @package TYPO3
+ * @subpackage tx_impexp
+ */
+class SC_mod_tools_log_index extends t3lib_SCbase {
+
+       var $pageinfo;                  // array containing the current page.
+
+       /**
+        * @return      [type]          ...
+        */
+       function main() {
+               global $BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
+
+               $this->checkExtObj();
+
+               $this->doc = t3lib_div::makeInstance('mediumDoc');
+               $this->doc->backPath = $BACK_PATH;
+
+                               // JavaScript
+               $this->doc->JScode = $this->doc->wrapScriptTags('
+                       script_ended = 0;
+                       function jumpToUrl(URL) {       //
+                               document.location = URL;
+                       }
+               ');
+
+               $this->doc->postCode=$this->doc->wrapScriptTags('
+                       script_ended = 1;
+                       if (top.fsMod) top.fsMod.recentIds["web"] = '.intval($this->id).';
+               ');
+               $this->doc->form='<form action="index.php" method="post"><input type="hidden" name="id" value="'.$this->id.'" />';
+
+               $this->content.=$this->doc->startPage($LANG->getLL('title'));
+               $this->content.=$this->doc->header($LANG->getLL('title'));
+               $this->content.=$this->doc->spacer(5);
+
+
+               $inData = t3lib_div::_GP('tx_impexp');
+               switch((string)$inData['action'])       {
+                       case 'export':
+                               $this->exportData($inData);
+                       break;
+                       case 'import':
+                               $this->importData($inData);
+                       break;
+               }
+
+               /**
+               IMPORTING DATA:
+
+               Incoming array has syntax:
+                       GETvar 'id' = import page id (must be readable)
+
+                       file =  (pointing to filename relative to PATH_site)
+
+
+
+                       [all relation fields are clear, but not files]
+                       - page-tree is written first
+                       - then remaining pages (to the root of import)
+                       - then all other records are written either to related included pages or if not found to import-root (should be a sysFolder in most cases)
+                       - then all internal relations are set and non-existing relations removed, relations to static tables preserved.
+               **/
+
+               /**
+               EXPORTING DATA:
+
+               Incoming array has syntax:
+
+                               record[]=table:uid,,,,
+
+                               FUTURE: list[]=table,,,,:pid,,,
+
+                               pagetree[id] = (single id)
+                               pagetree[levels]=1,2,3, -1=currently unpacked tree.
+                               pagetree[tables][]=table/_ALL
+
+                               external_ref