Initial revision
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_tsfebeuserauth.php
1 <?php
2 /***************************************************************
3 * Copyright notice
4 *
5 * (c) 1999-2003 Kasper Skårhøj (kasper@typo3.com)
6 * All rights reserved
7 *
8 * This script is part of the TYPO3 project. The TYPO3 project is
9 * free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * The GNU General Public License can be found at
15 * http://www.gnu.org/copyleft/gpl.html.
16 * A copy is found in the textfile GPL.txt and important notices to the license
17 * from the author is found in LICENSE.txt distributed with these scripts.
18 *
19 *
20 * This script is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * This copyright notice MUST APPEAR in all copies of the script!
26 ***************************************************************/
27 /**
28 * Class for TYPO3 backend user authentication in the TSFE frontend
29 *
30 * Revised for TYPO3 3.6 July/2003 by Kasper Skårhøj
31 * XHTML compliant
32 */
33 /**
34 * [CLASS/FUNCTION INDEX of SCRIPT]
35 *
36 *
37 *
38 * 100: class t3lib_tsfeBeUserAuth extends t3lib_beUserAuth
39 * 130: function extInitFeAdmin()
40 * 150: function extPrintFeAdminDialog()
41 * 174: function TSFEtypo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue)
42 * 186: function TSFEtypo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off)
43 *
44 * SECTION: Creating sections of the Admin Panel
45 * 230: function extGetCategory_preview($out='')
46 * 261: function extGetCategory_cache($out='')
47 * 299: function extGetCategory_publish($out='')
48 * 334: function extGetCategory_edit($out='')
49 * 360: function extGetCategory_tsdebug($out='')
50 * 390: function extGetCategory_info($out='')
51 *
52 * SECTION: Admin Panel Layout Helper functions
53 * 463: function extGetHead($pre)
54 * 480: function extItemLink($pre,$str)
55 * 496: function extGetItem($pre,$element)
56 * 512: function extFw($str)
57 * 521: function ext_makeToolBar()
58 *
59 * SECTION: TSFE BE user Access Functions
60 * 576: function extPageReadAccess($pageRec)
61 * 587: function extAdmModuleEnabled($key)
62 * 603: function extSaveFeAdminConfig()
63 * 635: function extGetFeAdminValue($pre,$val='')
64 *
65 * SECTION: TSFE BE user Access Functions
66 * 693: function extGetTreeList($id,$depth,$begin=0,$perms_clause)
67 * 722: function extGetNumberOfCachedPages($page_id)
68 *
69 * SECTION: Localization handling
70 * 761: function extGetLL($key)
71 *
72 * SECTION: Frontend Editing
73 * 794: function extIsEditAction()
74 * 817: function extIsFormShown()
75 * 834: function extEditAction()
76 *
77 * TOTAL FUNCTIONS: 25
78 * (This index is automatically created/updated by the extension "extdeveval")
79 *
80 */
81
82
83
84
85
86
87
88
89
90
91
92 /**
93 * TYPO3 backend user authentication in the TSFE frontend.
94 * This includes mainly functions related to the Admin Panel
95 *
96 * @author Kasper Skårhøj <kasper@typo3.com>
97 * @package TYPO3
98 * @subpackage t3lib
99 */
100 class t3lib_tsfeBeUserAuth extends t3lib_beUserAuth {
101 var $formfield_uname = ''; // formfield with login-name
102 var $formfield_uident = ''; // formfield with password
103 var $formfield_chalvalue = ''; // formfield with a unique value which is used to encrypt the password and username
104 var $security_level = ''; // sets the level of security. *'normal' = clear-text. 'challenged' = hashed password/username from form in $formfield_uident. 'superchallenged' = hashed password hashed again with username.
105 var $writeStdLog = 0; // Decides if the writelog() function is called at login and logout
106 var $writeAttemptLog = 0; // If the writelog() functions is called if a login-attempt has be tried without success
107 var $auth_include = ''; // this is the name of the include-file containing the login form. If not set, login CAN be anonymous. If set login IS needed.
108
109 var $extNeedUpdate=0;
110 var $extPublishList='';
111 var $extPageInTreeInfo=array();
112 var $ext_forcePreview=0;
113 var $langSplitIndex=0;
114 var $extAdmEnabled = 0; // General flag which is set if the adminpanel should be displayed at all..
115
116
117
118
119 /**
120 * Initialize the usage of Admin Panel.
121 * Called from index_ts.php if a backend users is correctly logged in.
122 * Sets $this->extAdminConfig to the "admPanel" config for the user and $this->extAdmEnabled = 1 IF access is enabled.
123 *
124 * @return void
125 */
126 function extInitFeAdmin() {
127 $this->extAdminConfig = $this->getTSConfigProp('admPanel');
128 if (is_array($this->extAdminConfig['enable.'])) {
129 reset($this->extAdminConfig['enable.']);
130 while(list($k,$v)=each($this->extAdminConfig['enable.'])) {
131 if ($v) {
132 $this->extAdmEnabled=1;
133 break;
134 }
135 }
136 }
137 }
138
139 /**
140 * Creates and returns the HTML code for the Admin Panel in the TSFE frontend.
141 * Called from index_ts.php - in the end of the script
142 *
143 * @return string HTML for the Admin Panel
144 * @see index_ts.php
145 */
146 function extPrintFeAdminDialog() {
147 if ($this->uc['TSFE_adminConfig']['display_top']) {
148 if ($this->extAdmModuleEnabled('preview')) $out.= $this->extGetCategory_preview();
149 if ($this->extAdmModuleEnabled('cache')) $out.= $this->extGetCategory_cache();
150 if ($this->extAdmModuleEnabled('publish')) $out.= $this->extGetCategory_publish();
151 if ($this->extAdmModuleEnabled('edit')) $out.= $this->extGetCategory_edit();
152 if ($this->extAdmModuleEnabled('tsdebug')) $out.= $this->extGetCategory_tsdebug();
153 if ($this->extAdmModuleEnabled('info')) $out.= $this->extGetCategory_info();
154 }
155
156 $header.='<tr><td bgcolor="#9BA1A8" colspan="2" nowrap="nowrap">';
157 $header.=$this->extItemLink('top','<img src="t3lib/gfx/ol/'.($this->uc['TSFE_adminConfig']['display_top']?'minus':'plus').'bullet.gif" width="18" height="16" align="absmiddle" border="0" alt="" />'.
158 $this->extFw('<strong>'.$this->extGetLL('adminOptions').'</strong>')).$this->extFw(': '.$this->user['username']).
159 '</td><td bgcolor="#9BA1A8"><img src="clear.gif" width="10" height="1" alt="" /></td><td bgcolor="#9BA1A8"><input type="hidden" name="TSFE_ADMIN_PANEL[display_top]" value="'.$this->uc['TSFE_adminConfig']['display_top'].'" />'.($this->extNeedUpdate?'<input type="submit" value="'.$this->extGetLL('update').'" />':'').'</td></tr>';
160
161 $out='<form name="TSFE_ADMIN_PANEL_FORM" action="'.htmlspecialchars(t3lib_div::getIndpEnv('REQUEST_URI')).'#TSFE_ADMIN" method="post" style="margin: 0 0 0 0;"><table border="0" cellpadding="0" cellspacing="0" bgcolor="#F6F2E6">'.$header.$out.'</table></form>';
162 $out='<a name="TSFE_ADMIN"></a><table border="0" cellpadding="1" cellspacing="0" bgcolor="black"><tr><td>'.$out.'</td></tr></table>';
163 if ($this->uc['TSFE_adminConfig']['display_top']) {
164 $out.='<script type="text/javascript" src="t3lib/jsfunc.evalfield.js"></script>';
165 $out.='
166 <script type="text/javascript">
167 /*<![CDATA[*/
168 var evalFunc = new evalFunc();
169 // TSFEtypo3FormFieldSet()
170 function TSFEtypo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue) {
171 var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
172 var theValue = document.TSFE_ADMIN_PANEL_FORM[theField].value;
173 if (checkbox && theValue==checkboxValue) {
174 document.TSFE_ADMIN_PANEL_FORM[theField+"_hr"].value="";
175 document.TSFE_ADMIN_PANEL_FORM[theField+"_cb"].checked = "";
176 } else {
177 document.TSFE_ADMIN_PANEL_FORM[theField+"_hr"].value = evalFunc.outputObjValue(theFObj, theValue);
178 document.TSFE_ADMIN_PANEL_FORM[theField+"_cb"].checked = "on";
179 }
180 }
181 // TSFEtypo3FormFieldGet()
182 function TSFEtypo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off) {
183 var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
184 if (checkbox_off) {
185 document.TSFE_ADMIN_PANEL_FORM[theField].value=checkboxValue;
186 }else{
187 document.TSFE_ADMIN_PANEL_FORM[theField].value = evalFunc.evalObjValue(theFObj, document.TSFE_ADMIN_PANEL_FORM[theField+"_hr"].value);
188 }
189 TSFEtypo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue);
190 }
191 /*]]>*/
192 </script>
193 <script language="javascript" type="text/javascript">'.$this->extJSCODE.'</script>';
194 }
195 return "\n\n\n\n".$out.'<br />';
196 }
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213 /*****************************************************
214 *
215 * Creating sections of the Admin Panel
216 *
217 ****************************************************/
218
219 /**
220 * Creates the content for the "preview" section ("module") of the Admin Panel
221 *
222 * @param string Optional start-value; The generated content is added to this variable.
223 * @return string HTML content for the section. Consists of a string with table-rows with four columns.
224 * @see extPrintFeAdminDialog()
225 */
226 function extGetCategory_preview($out='') {
227 $out.=$this->extGetHead('preview');
228 if ($this->uc['TSFE_adminConfig']['display_preview']) {
229 $this->extNeedUpdate=1;
230 $out.=$this->extGetItem('preview_showHiddenPages', '<input type="hidden" name="TSFE_ADMIN_PANEL[preview_showHiddenPages]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[preview_showHiddenPages]" value="1"'.($this->uc['TSFE_adminConfig']['preview_showHiddenPages']?' checked="checked"':'').' />');
231 $out.=$this->extGetItem('preview_showHiddenRecords', '<input type="hidden" name="TSFE_ADMIN_PANEL[preview_showHiddenRecords]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[preview_showHiddenRecords]" value="1"'.($this->uc['TSFE_adminConfig']['preview_showHiddenRecords']?' checked="checked"':'').' />');
232
233 // Simulate data
234 $out.=$this->extGetItem('preview_simulateDate', '<input type="checkbox" name="TSFE_ADMIN_PANEL[preview_simulateDate]_cb" onclick="TSFEtypo3FormFieldGet(\'TSFE_ADMIN_PANEL[preview_simulateDate]\', \'datetime\', \'\',1,0,1);" /><input type="text" name="TSFE_ADMIN_PANEL[preview_simulateDate]_hr" onchange="TSFEtypo3FormFieldGet(\'TSFE_ADMIN_PANEL[preview_simulateDate]\', \'datetime\', \'\', 1,0);" /><input type="hidden" name="TSFE_ADMIN_PANEL[preview_simulateDate]" value="'.$this->uc['TSFE_adminConfig']['preview_simulateDate'].'" />');
235 $this->extJSCODE.='TSFEtypo3FormFieldSet("TSFE_ADMIN_PANEL[preview_simulateDate]", "datetime", "", 1,0);';
236
237 // Simulate fe_user:
238 $query = 'SELECT fe_groups.uid, fe_groups.title FROM fe_groups,pages WHERE pages.uid=fe_groups.pid AND NOT pages.deleted '.t3lib_BEfunc::deleteClause('fe_groups').' AND '.$this->getPagePermsClause(1);
239 $res = mysql(TYPO3_db, $query);
240 echo mysql_error();
241 $options='<option value="0"></option>';
242 while($row=mysql_fetch_assoc($res)) {
243 $options.='<option value="'.$row['uid'].'"'.($this->uc['TSFE_adminConfig']['preview_simulateUserGroup']==$row['uid']?' selected="selected"':'').'>'.htmlspecialchars('['.$row['uid'].'] '.$row['title']).'</option>';
244 }
245 $out.=$this->extGetItem('preview_simulateUserGroup', '<select name="TSFE_ADMIN_PANEL[preview_simulateUserGroup]">'.$options.'</select>');
246 }
247 return $out;
248 }
249
250 /**
251 * Creates the content for the "cache" section ("module") of the Admin Panel
252 *
253 * @param string Optional start-value; The generated content is added to this variable.
254 * @return string HTML content for the section. Consists of a string with table-rows with four columns.
255 * @see extPrintFeAdminDialog()
256 */
257 function extGetCategory_cache($out='') {
258 $out.=$this->extGetHead('cache');
259 if ($this->uc['TSFE_adminConfig']['display_cache']) {
260 $this->extNeedUpdate=1;
261 $out.=$this->extGetItem('cache_noCache', '<input type="hidden" name="TSFE_ADMIN_PANEL[cache_noCache]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[cache_noCache]" value="1"'.($this->uc['TSFE_adminConfig']['cache_noCache']?' checked="checked"':'').' />');
262
263 $options='';
264 $options.='<option value="0"'.($this->uc['TSFE_adminConfig']['cache_clearCacheLevels']==0?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_0').'</option>';
265 $options.='<option value="1"'.($this->uc['TSFE_adminConfig']['cache_clearCacheLevels']==1?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_1').'</option>';
266 $options.='<option value="2"'.($this->uc['TSFE_adminConfig']['cache_clearCacheLevels']==2?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_2').'</option>';
267 $out.=$this->extGetItem('cache_clearLevels', '<select name="TSFE_ADMIN_PANEL[cache_clearCacheLevels]">'.$options.'</select>'.
268 '<input type="hidden" name="TSFE_ADMIN_PANEL[cache_clearCacheId]" value="'.$GLOBALS['TSFE']->id.'" /><input type="submit" value="'.$this->extGetLL('update').'" />');
269
270 // Generating tree:
271 $depth=$this->extGetFeAdminValue('cache','clearCacheLevels');
272 $outTable='';
273 $this->extPageInTreeInfo=array();
274 $this->extPageInTreeInfo[]=array($GLOBALS['TSFE']->page['uid'],$GLOBALS['TSFE']->page['title'],$depth+1);
275 $this->extGetTreeList($GLOBALS['TSFE']->id, $depth,0,$this->getPagePermsClause(1));
276 reset($this->extPageInTreeInfo);
277 while(list(,$row)=each($this->extPageInTreeInfo)) {
278 $outTable.='<tr><td nowrap="nowrap"><img src="clear.gif" width="'.(($depth+1-$row[2])*18).'" height="1" alt="" /><img src="t3lib/gfx/i/pages.gif" width="18" height="16" align="absmiddle" border="0" alt="" />'.$this->extFw($row[1]).'</td><td><img src="clear.gif" width="10" height="1" alt="" /></td><td>'.$this->extFw($this->extGetNumberOfCachedPages($row[0])).'</td></tr>';
279 }
280 $outTable='<br /><table border="0" cellpadding="0" cellspacing="0">'.$outTable.'</table>';
281 $outTable.='<input type="submit" name="TSFE_ADMIN_PANEL[action][clearCache]" value="'.$this->extGetLL('cache_doit').'" />';
282 $out.=$this->extGetItem('cache_cacheEntries', $outTable);
283
284 }
285 return $out;
286 }
287
288 /**
289 * Creates the content for the "publish" section ("module") of the Admin Panel
290 *
291 * @param string Optional start-value; The generated content is added to this variable.
292 * @return string HTML content for the section. Consists of a string with table-rows with four columns.
293 * @see extPrintFeAdminDialog()
294 */
295 function extGetCategory_publish($out='') {
296 $out.=$this->extGetHead('publish');
297 if ($this->uc['TSFE_adminConfig']['display_publish']) {
298 $this->extNeedUpdate=1;
299 $options='';
300 $options.='<option value="0"'.($this->uc['TSFE_adminConfig']['publish_levels']==0?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_0').'</option>';
301 $options.='<option value="1"'.($this->uc['TSFE_adminConfig']['publish_levels']==1?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_1').'</option>';
302 $options.='<option value="2"'.($this->uc['TSFE_adminConfig']['publish_levels']==2?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_2').'</option>';
303 $out.=$this->extGetItem('publish_levels', '<select name="TSFE_ADMIN_PANEL[publish_levels]">'.$options.'</select>'.
304 '<input type="hidden" name="TSFE_ADMIN_PANEL[publish_id]" value="'.$GLOBALS['TSFE']->id.'" /><input type="submit" value="'.$this->extGetLL('update').'" />');
305
306 // Generating tree:
307 $depth=$this->extGetFeAdminValue('publish','levels');
308 $outTable='';
309 $this->extPageInTreeInfo=array();
310 $this->extPageInTreeInfo[]=array($GLOBALS['TSFE']->page['uid'],$GLOBALS['TSFE']->page['title'],$depth+1);
311 $this->extGetTreeList($GLOBALS['TSFE']->id, $depth,0,$this->getPagePermsClause(1));
312 reset($this->extPageInTreeInfo);
313 while(list(,$row)=each($this->extPageInTreeInfo)) {
314 $outTable.='<tr><td nowrap="nowrap"><img src="clear.gif" width="'.(($depth+1-$row[2])*18).'" height="1" alt="" /><img src="t3lib/gfx/i/pages.gif" width="18" height="16" align="absmiddle" border="0" alt="" />'.$this->extFw($row[1]).'</td><td><img src="clear.gif" width="10" height="1" alt="" /></td><td>'.$this->extFw('...').'</td></tr>';
315 }
316 $outTable='<br /><table border="0" cellpadding="0" cellspacing="0">'.$outTable.'</table>';
317 $outTable.='<input type="submit" name="TSFE_ADMIN_PANEL[action][publish]" value="'.$this->extGetLL('publish_doit').'" />';
318 $out.=$this->extGetItem('publish_tree', $outTable);
319 }
320 return $out;
321 }
322
323 /**
324 * Creates the content for the "edit" section ("module") of the Admin Panel
325 *
326 * @param string Optional start-value; The generated content is added to this variable.
327 * @return string HTML content for the section. Consists of a string with table-rows with four columns.
328 * @see extPrintFeAdminDialog()
329 */
330 function extGetCategory_edit($out='') {
331 $out.=$this->extGetHead('edit');
332 if ($this->uc['TSFE_adminConfig']['display_edit']) {
333 $this->extNeedUpdate=1;
334 $out.=$this->extGetItem('edit_displayFieldIcons', '<input type="hidden" name="TSFE_ADMIN_PANEL[edit_displayFieldIcons]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[edit_displayFieldIcons]" value="1"'.($this->uc['TSFE_adminConfig']['edit_displayFieldIcons']?' checked="checked"':'').' />');
335 $out.=$this->extGetItem('edit_displayIcons', '<input type="hidden" name="TSFE_ADMIN_PANEL[edit_displayIcons]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[edit_displayIcons]" value="1"'.($this->uc['TSFE_adminConfig']['edit_displayIcons']?' checked="checked"':'').' />');
336 $out.=$this->extGetItem('edit_editFormsOnPage', '<input type="hidden" name="TSFE_ADMIN_PANEL[edit_editFormsOnPage]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[edit_editFormsOnPage]" value="1"'.($this->uc['TSFE_adminConfig']['edit_editFormsOnPage']?' checked="checked"':'').' />');
337 $out.=$this->extGetItem('edit_editNoPopup', '<input type="hidden" name="TSFE_ADMIN_PANEL[edit_editNoPopup]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[edit_editNoPopup]" value="1"'.($this->uc['TSFE_adminConfig']['edit_editNoPopup']?' checked="checked"':'').' />');
338
339 $out.=$this->extGetItem('', $this->ext_makeToolBar());
340 if (!t3lib_div::GPvar('ADMCMD_view')) {
341 $out.=$this->extGetItem('', '<a href="#" onclick="'.
342 htmlspecialchars('vHWin=window.open(\''.TYPO3_mainDir.'alt_main.php\',\''.md5('Typo3Backend-'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']).'\',\'status=1,menubar=1,scrollbars=1,resizable=1\');vHWin.focus();return false;').
343 '">'.$this->extFw($this->extGetLL('edit_openAB')).'</a>');
344 }
345 }
346 return $out;
347 }
348
349 /**
350 * Creates the content for the "tsdebug" section ("module") of the Admin Panel
351 *
352 * @param string Optional start-value; The generated content is added to this variable.
353 * @return string HTML content for the section. Consists of a string with table-rows with four columns.
354 * @see extPrintFeAdminDialog()
355 */
356 function extGetCategory_tsdebug($out='') {
357 $out.=$this->extGetHead('tsdebug');
358 if ($this->uc['TSFE_adminConfig']['display_tsdebug']) {
359 $this->extNeedUpdate=1;
360 $out.=$this->extGetItem('tsdebug_tree', '<input type="hidden" name="TSFE_ADMIN_PANEL[tsdebug_tree]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[tsdebug_tree]" value="1"'.($this->uc['TSFE_adminConfig']['tsdebug_tree']?' checked="checked"':'').' />');
361 $out.=$this->extGetItem('tsdebug_displayTimes', '<input type="hidden" name="TSFE_ADMIN_PANEL[tsdebug_displayTimes]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[tsdebug_displayTimes]" value="1"'.($this->uc['TSFE_adminConfig']['tsdebug_displayTimes']?' checked="checked"':'').' />');
362 $out.=$this->extGetItem('tsdebug_displayMessages', '<input type="hidden" name="TSFE_ADMIN_PANEL[tsdebug_displayMessages]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[tsdebug_displayMessages]" value="1"'.($this->uc['TSFE_adminConfig']['tsdebug_displayMessages']?' checked="checked"':'').' />');
363 $out.=$this->extGetItem('tsdebug_LR', '<input type="hidden" name="TSFE_ADMIN_PANEL[tsdebug_LR]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[tsdebug_LR]" value="1"'.($this->uc['TSFE_adminConfig']['tsdebug_LR']?' checked="checked"':'').' />');
364 $out.=$this->extGetItem('tsdebug_displayContent', '<input type="hidden" name="TSFE_ADMIN_PANEL[tsdebug_displayContent]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[tsdebug_displayContent]" value="1"'.($this->uc['TSFE_adminConfig']['tsdebug_displayContent']?' checked="checked"':'').' />');
365 $out.=$this->extGetItem('tsdebug_displayQueries', '<input type="hidden" name="TSFE_ADMIN_PANEL[tsdebug_displayQueries]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[tsdebug_displayQueries]" value="1"'.($this->uc['TSFE_adminConfig']['tsdebug_displayQueries']?' checked="checked"':'').' />');
366
367 $out.=$this->extGetItem('tsdebug_forceTemplateParsing', '<input type="hidden" name="TSFE_ADMIN_PANEL[tsdebug_forceTemplateParsing]" value="0" /><input type="checkbox" name="TSFE_ADMIN_PANEL[tsdebug_forceTemplateParsing]" value="1"'.($this->uc['TSFE_adminConfig']['tsdebug_forceTemplateParsing']?' checked="checked"':'').' />');
368
369 $GLOBALS['TT']->printConf['flag_tree'] = $this->extGetFeAdminValue('tsdebug','tree');
370 $GLOBALS['TT']->printConf['allTime'] = $this->extGetFeAdminValue('tsdebug','displayTimes');
371 $GLOBALS['TT']->printConf['flag_messages'] = $this->extGetFeAdminValue('tsdebug','displayMessages');
372 $GLOBALS['TT']->printConf['flag_content'] = $this->extGetFeAdminValue('tsdebug','displayContent');
373 $GLOBALS['TT']->printConf['flag_queries'] = $this->extGetFeAdminValue('tsdebug','displayQueries');
374 $out.='<tr><td><img src="clear.gif" width="50" height="1" alt="" /></td><td colspan="3">'.$GLOBALS['TT']->printTSlog().'</td></tr>';
375 }
376 return $out;
377 }
378
379 /**
380 * Creates the content for the "info" section ("module") of the Admin Panel
381 *
382 * @param string Optional start-value; The generated content is added to this variable.
383 * @return string HTML content for the section. Consists of a string with table-rows with four columns.
384 * @see extPrintFeAdminDialog()
385 */
386 function extGetCategory_info($out='') {
387 $out.=$this->extGetHead('info');
388 if ($this->uc['TSFE_adminConfig']['display_info']) {
389
390 if (is_array($GLOBALS['TSFE']->imagesOnPage) && $this->extGetFeAdminValue('cache','noCache')) {
391 reset($GLOBALS['TSFE']->imagesOnPage);
392 $theBytes=0;
393 $count=0;
394 $fileTable='';
395 while(list(,$file)=each($GLOBALS['TSFE']->imagesOnPage)) {
396 $fs=@filesize($file);
397 $fileTable.='<tr><td>'.$this->extFw($file).'</td><td align="right">'.$this->extFw(t3lib_div::formatSize($fs)).'</td></tr>';
398 $theBytes+=$fs;
399 $count++;
400 }
401 $fileTable.='<tr><td><strong>'.$this->extFw('Total number of images:').'</strong></td><td>'.$this->extFw($count).'</td></tr>';
402 $fileTable.='<tr><td><strong>'.$this->extFw('Total image file sizes:').'</strong></td><td align="right">'.$this->extFw(t3lib_div::formatSize($theBytes)).'</td></tr>';
403 $fileTable.='<tr><td><strong>'.$this->extFw('Document size:').'</strong></td><td align="right">'.$this->extFw(t3lib_div::formatSize(strlen($GLOBALS['TSFE']->content))).'</td></tr>';
404 $fileTable.='<tr><td><strong>'.$this->extFw('Total page load:').'</strong></td><td align="right">'.$this->extFw(t3lib_div::formatSize(strlen($GLOBALS['TSFE']->content)+$theBytes)).'</td></tr>';
405 $fileTable.='<tr><td>&nbsp;</td></tr>';
406 }
407
408 $fileTable.='<tr><td>'.$this->extFw('id:').'</td><td>'.$this->extFw($GLOBALS['TSFE']->id).'</td></tr>';
409 $fileTable.='<tr><td>'.$this->extFw('type:').'</td><td>'.$this->extFw($GLOBALS['TSFE']->type).'</td></tr>';
410 $fileTable.='<tr><td>'.$this->extFw('gr_list:').'</td><td>'.$this->extFw($GLOBALS['TSFE']->gr_list).'</td></tr>';
411 $fileTable.='<tr><td>'.$this->extFw('no_cache:').'</td><td>'.$this->extFw($GLOBALS['TSFE']->no_cache).'</td></tr>';
412 $fileTable.='<tr><td>'.$this->extFw('fe_user, name:').'</td><td>'.$this->extFw($GLOBALS['TSFE']->fe_user->user['username']).'</td></tr>';
413 $fileTable.='<tr><td>'.$this->extFw('fe_user, uid:').'</td><td>'.$this->extFw($GLOBALS['TSFE']->fe_user->user['uid']).'</td></tr>';
414 $fileTable.='<tr><td>&nbsp;</td></tr>';
415
416 // parsetime:
417 $fileTable.='<tr><td>'.$this->extFw('Total parsetime:').'</td><td>'.$this->extFw($GLOBALS['TSFE']->scriptParseTime.' ms').'</td></tr>';
418
419 $fileTable='<table border="0" cellpadding="0" cellspacing="0">'.$fileTable.'</table>';
420
421 $out.='<tr><td><img src="clear.gif" width="50" height="1" alt="" /></td><td colspan="3">'.$fileTable.'</td></tr>';
422 }
423 return $out;
424 }
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443 /*****************************************************
444 *
445 * Admin Panel Layout Helper functions
446 *
447 ****************************************************/
448
449 /**
450 * Returns a row (with colspan=4) which is a header for a section in the Admin Panel.
451 * It will have a plus/minus icon and a label which is linked so that it submits the form which surrounds the whole Admin Panel when clicked, alterting the TSFE_ADMIN_PANEL[display_'.$pre.'] value
452 * See the functions extGetCategory_*
453 *
454 * @param string The suffix to the display_ label. Also selects the label from the LOCAL_LANG array.
455 * @return string HTML table row.
456 * @access private
457 * @see extGetItem()
458 */
459 function extGetHead($pre) {
460 $out.='<img src="t3lib/gfx/ol/blank.gif" width="18" height="16" align="absmiddle" border="0" alt="" />';
461 $out.='<img src="t3lib/gfx/ol/'.($this->uc['TSFE_adminConfig']['display_'.$pre]?'minus':'plus').'bullet.gif" width="18" height="16" align="absmiddle" border="0" alt="" />';
462 $out.=$this->extFw($this->extGetLL($pre));
463 $out=$this->extItemLink($pre,$out);
464 return '<tr><td bgcolor="#ABBBB4" colspan="4" nowrap="nowrap">'.$out.'<input type="hidden" name="TSFE_ADMIN_PANEL[display_'.$pre.']" value="'.$this->uc['TSFE_adminConfig']['display_'.$pre].'" /></td></tr>';
465 }
466
467 /**
468 * Wraps a string in a link which will open/close a certain part of the Admin Panel
469 *
470 * @param string The code for the display_ label/key
471 * @param string Input string
472 * @return string Linked input string
473 * @access private
474 * @see extGetHead()
475 */
476 function extItemLink($pre,$str) {
477 return '<a href="#" onclick="'.
478 htmlspecialchars('document.TSFE_ADMIN_PANEL_FORM[\'TSFE_ADMIN_PANEL[display_'.$pre.']\'].value='.($this->uc['TSFE_adminConfig']['display_'.$pre]?'0':'1').'; document.TSFE_ADMIN_PANEL_FORM.submit(); return false;').
479 '">'.$str.'</a>';
480 }
481
482 /**
483 * Returns a row (with 4 columns) for content in a section of the Admin Panel.
484 * It will take $pre as a key to a label to display and $element as the content to put into the forth cell.
485 *
486 * @param string Key to label
487 * @param string The HTML content for the forth table cell.
488 * @return string HTML table row.
489 * @access private
490 * @see extGetHead()
491 */
492 function extGetItem($pre,$element) {
493 return '<tr>
494 <td><img src="clear.gif" width="50" height="1" alt="" /></td>
495 <td nowrap="nowrap">'.($pre ? $this->extFw($this->extGetLL($pre)) : '&nbsp;').'</td>
496 <td><img src="clear.gif" width="10" height="1" alt="" /></td>
497 <td>'.$element.'</td>
498 </tr>';
499
500 }
501
502 /**
503 * Wraps a string in a font-tag with verdana, size 1 and black
504 *
505 * @param string The string to wrap
506 * @return string
507 */
508 function extFw($str) {
509 return '<font face="Verdana" size="1" color="black"'.($GLOBALS['CLIENT']['FORMSTYLE']?' style="color:black;"':'').'>'.$str.'</font>';
510 }
511
512 /**
513 * Creates the tool bar links for the "edit" section of the Admin Panel.
514 *
515 * @return string A string containing images wrapped in <a>-tags linking them to proper functions.
516 */
517 function ext_makeToolBar() {
518 $toolBar='';
519 $id = $GLOBALS['TSFE']->id;
520 $toolBar.='<a href="'.htmlspecialchars(TYPO3_mainDir.'show_rechis.php?element='.rawurlencode('pages:'.$id).'&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'#latest">'.
521 '<img src="t3lib/gfx/history2.gif" width="13" height="12" hspace="2" border="0" align="top"'.t3lib_BEfunc::titleAttrib($this->extGetLL('edit_recordHistory'),1).' alt="" /></a>';
522 $toolBar.='<a href="'.htmlspecialchars(TYPO3_mainDir.'db_new_content_el.php?id='.$id.'&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
523 '<img src="t3lib/gfx/new_record.gif" width="16" height="12" hspace="1" border="0" align="top"'.t3lib_BEfunc::titleAttrib($this->extGetLL('edit_newContentElement'),1).' alt="" /></a>';
524 $toolBar.='<a href="'.htmlspecialchars(TYPO3_mainDir.'move_el.php?table=pages&uid='.$id.'&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
525 '<img src="t3lib/gfx/move_page.gif" width="11" height="12" hspace="2" border="0" align="top"'.t3lib_BEfunc::titleAttrib($this->extGetLL('edit_move_page'),1).' alt="" /></a>';
526 $toolBar.='<a href="'.htmlspecialchars(TYPO3_mainDir.'db_new.php?id='.$id.'&pagesOnly=1&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
527 '<img src="t3lib/gfx/new_page.gif" width="13" height="12" hspace="0" border="0" align="top"'.t3lib_BEfunc::titleAttrib($this->extGetLL('edit_newPage'),1).' alt="" /></a>';
528
529 $params='&edit[pages]['.$id.']=edit';
530 $toolBar.='<a href="'.htmlspecialchars(TYPO3_mainDir.'alt_doc.php?'.$params.'&noView=1&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
531 '<img src="t3lib/gfx/edit2.gif" width="11" height="12" hspace="2" border="0" align="top"'.t3lib_BEfunc::titleAttrib($this->extGetLL('edit_editPageHeader'),1).' alt="" /></a>';
532 if ($this->check('modules','web_list')) {
533 $toolBar.='<a href="'.htmlspecialchars(TYPO3_mainDir.'db_list.php?id='.$id.'&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
534 '<img src="t3lib/gfx/list.gif" width="11" height="11" hspace="2" border="0" align="top"'.t3lib_BEfunc::titleAttrib($this->extGetLL('edit_db_list'),1).' alt="" /></a>';
535 }
536 return $toolBar;
537 }
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557 /*****************************************************
558 *
559 * TSFE BE user Access Functions
560 *
561 ****************************************************/
562
563 /**
564 * Evaluates if the Backend User has read access to the input page record.
565 * The evaluation is based on both read-permission and whether the page is found in one of the users webmounts. Only if both conditions are true will the function return true.
566 * Read access means that previewing is allowed etc.
567 * Used in index_ts.php
568 *
569 * @param array The page record to evaluate for
570 * @return boolean True if read access
571 */
572 function extPageReadAccess($pageRec) {
573 return $this->isInWebMount($pageRec['uid']) && $this->doesUserHaveAccess($pageRec,1);
574 }
575
576 /**
577 * Checks if a Admin Panel section ("module") is available for the user. If so, true is returned.
578 *
579 * @param string The module key, eg. "edit", "preview", "info" etc.
580 * @return boolean
581 * @see extPrintFeAdminDialog()
582 */
583 function extAdmModuleEnabled($key) {
584 // Returns true if the module checked is "preview" and the forcePreview flag is set.
585 if ($key=="preview" && $this->ext_forcePreview) return true;
586 // If key is not set, only "all" is checked
587 if ($this->extAdminConfig['enable.']['all']) return true;
588 if ($this->extAdminConfig['enable.'][$key]) {
589 return true;
590 }
591 }
592
593 /**
594 * Saves any change in settings made in the Admin Panel.
595 * Called from index_ts.php right after access check for the Admin Panel
596 *
597 * @return void
598 */
599 function extSaveFeAdminConfig() {
600 if (is_array($GLOBALS['HTTP_POST_VARS']['TSFE_ADMIN_PANEL'])) {
601 // Setting
602 $input = $GLOBALS['HTTP_POST_VARS']['TSFE_ADMIN_PANEL'];
603 $this->uc['TSFE_adminConfig'] = array_merge(!is_array($this->uc['TSFE_adminConfig'])?array():$this->uc['TSFE_adminConfig'], $input); // Candidate for t3lib_div::array_merge() if integer-keys will some day make trouble...
604 unset($this->uc['TSFE_adminConfig']['action']);
605
606 // Actions:
607 if ($input['action']['clearCache'] && $this->extAdmModuleEnabled('cache')) {
608 $this->extPageInTreeInfo=array();
609 $theStartId = intval($input['cache_clearCacheId']);
610 $GLOBALS['TSFE']->clearPageCacheContent_pidList($this->extGetTreeList($theStartId, $this->extGetFeAdminValue('cache','clearCacheLevels'),0,$this->getPagePermsClause(1)).$theStartId);
611 }
612 if ($input['action']['publish'] && $this->extAdmModuleEnabled('publish')) {
613 $theStartId = intval($input['publish_id']);
614 $this->extPublishList = $this->extGetTreeList($theStartId, $this->extGetFeAdminValue('publish','levels'),0,$this->getPagePermsClause(1)).$theStartId;
615 }
616
617 // Saving
618 $this->writeUC();
619 }
620 $GLOBALS['TT']->LR = $this->extGetFeAdminValue('tsdebug','LR');
621 if ($this->extGetFeAdminValue('cache','noCache')) {$GLOBALS['TSFE']->set_no_cache();}
622 }
623
624 /**
625 * Returns the value for a Admin Panel setting. You must specify both the module-key and the internal setting key.
626 *
627 * @param string Module key
628 * @param string Setting key
629 * @return string The setting value
630 */
631 function extGetFeAdminValue($pre,$val='') {
632 if ($this->extAdmModuleEnabled($pre)) { // Check if module is enabled.
633 // Exceptions where the values can be overridden from backend:
634 if ($pre.'_'.$val == 'edit_displayIcons' && $this->extAdminConfig['module.']['edit.']['forceDisplayIcons']) {
635 return true;
636 }
637 if ($pre.'_'.$val == 'edit_displayFieldIcons' && $this->extAdminConfig['module.']['edit.']['forceDisplayFieldIcons']) {
638 return true;
639 }
640
641 $retVal = $val ? $this->uc['TSFE_adminConfig'][$pre.'_'.$val] : 1;
642
643 if ($pre=='preview' && $this->ext_forcePreview) {
644 if (!$val) {
645 return true;
646 } else {
647 return $retVal;
648 }
649 }
650
651 // regular check:
652 if ($this->uc['TSFE_adminConfig']['display_top'] && $this->uc['TSFE_adminConfig']['display_'.$pre]) { // See if the menu is expanded!
653 return $retVal;
654 }
655 }
656 }
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673 /*****************************************************
674 *
675 * TSFE BE user Access Functions
676 *
677 ****************************************************/
678
679 /**
680 * Generates a list of Page-uid's from $id. List does not include $id itself
681 * The only pages excluded from the list are deleted pages.
682 *
683 * @param integer Start page id
684 * @param integer Depth
685 * @param integer $begin is an optional integer that determines at which level in the tree to start collecting uid's. Zero means 'start right away', 1 = 'next level and out'
686 * @param string Perms clause
687 * @return string Returns the list with a comma in the end (if any pages selected!)
688 */
689 function extGetTreeList($id,$depth,$begin=0,$perms_clause) {
690 $depth=intval($depth);
691 $begin=intval($begin);
692 $id=intval($id);
693 $theList='';
694
695 if ($id && $depth>0) {
696 $query = 'SELECT uid,title FROM pages WHERE pid='.$id.' AND doktype IN ('.$GLOBALS['TYPO3_CONF_VARS']['FE']['content_doktypes'].') AND NOT deleted AND '.$perms_clause;
697 $res = mysql(TYPO3_db, $query);
698 echo mysql_error();
699 while ($row = mysql_fetch_assoc($res)) {
700 if ($begin<=0) {
701 $theList.=$row['uid'].',';
702 $this->extPageInTreeInfo[]=array($row['uid'],$row['title'],$depth);
703 }
704 if ($depth>1) {
705 $theList.=$this->extGetTreeList($row['uid'], $depth-1,$begin-1,$perms_clause);
706 }
707 }
708 }
709 return $theList;
710 }
711
712 /**
713 * Returns the number of cached pages for a page id.
714 *
715 * @param integer The page id.
716 * @return integer The number of pages for this page in the table "cache_pages"
717 */
718 function extGetNumberOfCachedPages($page_id) {
719 $res = mysql (TYPO3_db, 'SELECT count(*) FROM cache_pages WHERE page_id='.intval($page_id));
720 list($num) = mysql_fetch_row($res);
721 return $num;
722 }
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744 /*****************************************************
745 *
746 * Localization handling
747 *
748 ****************************************************/
749
750 /**
751 * Returns the label for key, $key. If a translation for the language set in $this->uc['lang'] is found that is returned, otherwise the default value.
752 * IF the global variable $LOCAL_LANG is NOT an array (yet) then this function loads the global $LOCAL_LANG array with the content of "sysext/lang/locallang_tsfe.php" so that the values therein can be used for labels in the Admin Panel
753 *
754 * @param string Key for a label in the $LOCAL_LANG array of "sysext/lang/locallang_tsfe.php"
755 * @return string The value for the $key
756 */
757 function extGetLL($key) {
758 global $LOCAL_LANG;
759 if (!is_array($LOCAL_LANG)) {
760 include('./'.TYPO3_mainDir.'sysext/lang/locallang_tsfe.php');
761 if (!is_array($LOCAL_LANG)) $LOCAL_LANG=array();
762 }
763
764 $labelStr = htmlspecialchars($GLOBALS['LANG']->getLL($key)); // Label string in the default backend output charset.
765
766 // Convert to utf-8, then to entities:
767 if ($GLOBALS['LANG']->charSet!='utf-8') {
768 $labelStr = $GLOBALS['LANG']->csConvObj->utf8_encode($labelStr,$GLOBALS['LANG']->charSet);
769 }
770 $labelStr = $GLOBALS['LANG']->csConvObj->utf8_to_entities($labelStr);
771
772 // Return the result:
773 return $labelStr;
774 }
775
776
777
778
779
780
781
782
783
784
785
786
787
788 /*****************************************************
789 *
790 * Frontend Editing
791 *
792 ****************************************************/
793
794 /**
795 * Returns true in an edit-action is sent from the Admin Panel
796 *
797 * @return boolean
798 * @see index_ts.php
799 */
800 function extIsEditAction() {
801 $TSFE_EDIT = $GLOBALS['HTTP_POST_VARS']['TSFE_EDIT'];
802 if (is_array($TSFE_EDIT)) {
803 /* $cmd=(string)$TSFE_EDIT['cmd'];
804 if ($cmd!="edit" && $cmd!='new') {
805 return true;
806 }*/
807 if ($TSFE_EDIT['cancel']) {
808 unset($TSFE_EDIT['cmd']);
809 } elseif (($cmd!='edit' || (is_array($TSFE_EDIT['data']) && ($TSFE_EDIT['update'] || $TSFE_EDIT['update_close']))) && $cmd!='new') {
810 // $cmd can be a command like "hide" or "move". If $cmd is "edit" or "new" it's an indication to show the formfields. But if data is sent with update-flag then $cmd = edit is accepted because edit may be sendt because of .keepGoing flag.
811 return true;
812 }
813 }
814 }
815
816 /**
817 * Returns true if an edit form is shown on the page.
818 * Used from index_ts.php where a true return-value will result in classes etc. being included.
819 *
820 * @return boolean
821 * @see index_ts.php
822 */
823 function extIsFormShown() {
824 $TSFE_EDIT = $GLOBALS['HTTP_POST_VARS']['TSFE_EDIT'];
825 if (is_array($TSFE_EDIT)) {
826 $cmd=(string)$TSFE_EDIT['cmd'];
827 if ($cmd=='edit' || $cmd=='new') {
828 return true;
829 }
830 }
831 }
832
833 /**
834 * Management of the on-page frontend editing forms and edit panels.
835 * Basically taking in the data and commands and passes them on to the proper classes as they should be.
836 *
837 * @return void
838 * @see index_ts.php
839 */
840 function extEditAction() {
841 global $TCA;
842 // Commands:
843 $TSFE_EDIT = $GLOBALS['HTTP_POST_VARS']['TSFE_EDIT'];
844
845 list($table,$uid) = explode(':',$TSFE_EDIT['record']);
846 if ($TSFE_EDIT['cmd'] && $table && $uid && isset($TCA[$table])) {
847 $tce = t3lib_div::makeInstance('t3lib_TCEmain');
848 $recData=array();
849 $cmdData=array();
850 $cmd=$TSFE_EDIT['cmd'];
851 switch($cmd) {
852 case 'hide':
853 case 'unhide':
854 $hideField = $TCA[$table]['ctrl']['enablecolumns']['disabled'];
855 if ($hideField) {
856 $recData[$table][$uid][$hideField]=($cmd=='hide'?1:0);
857 $tce->start($recData,Array());
858 $tce->process_datamap();
859 }
860 break;
861 case 'up':
862 case 'down':
863 $sortField = $TCA[$table]['ctrl']['sortby'];
864 if ($sortField) {
865 if ($cmd=='up') {
866 $op= '<';
867 $desc=' DESC';
868 } else {
869 $op= '>';
870 $desc='';
871 }
872 // Get self:
873 $fields = array_unique(t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['copyAfterDuplFields'].',uid,pid,'.$sortField,1));
874 $query='SELECT '.implode(',',$fields).' FROM '.$table.' WHERE uid='.$uid;
875 $res = mysql(TYPO3_db,$query);
876 if ($row=mysql_fetch_assoc($res)) {
877 // record before or after
878 $preview = $this->extGetFeAdminValue('preview');
879 $copyAfterFieldsQuery = '';
880 if ($preview) {$ignore = array('starttime'=>1, 'endtime'=>1, 'disabled'=>1, 'fe_group'=>1);}
881 if ($TCA[$table]['ctrl']['copyAfterDuplFields']) {
882 $cAFields = t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['copyAfterDuplFields'],1);
883 while(list(,$fN)=each($cAFields)) {
884 $copyAfterFieldsQuery.=' AND '.$fN.'="'.$row[$fN].'"';
885 }
886 }
887
888 $query='SELECT uid,pid FROM '.$table.' WHERE pid='.$row['pid'].
889 ' AND '.$sortField.$op.intval($row[$sortField]).
890 $copyAfterFieldsQuery.
891 t3lib_pageSelect::enableFields($table,'',$ignore).
892 ' ORDER BY '.$sortField.$desc.
893 ' LIMIT 2';
894
895 $res = mysql(TYPO3_db,$query);
896 if ($row2=mysql_fetch_assoc($res)) {
897 if($cmd=='down') {
898 $cmdData[$table][$uid]['move']= -$row2['uid'];
899 } elseif ($row3=mysql_fetch_assoc($res)) { // Must take the second record above...
900 $cmdData[$table][$uid]['move']= -$row3['uid'];
901 } else { // ... and if that does not exist, use pid
902 $cmdData[$table][$uid]['move']= $row['pid'];
903 }
904 } elseif ($cmd=='up') {
905 $cmdData[$table][$uid]['move']= $row['pid'];
906 }
907 }
908 if (count($cmdData)) {
909 $tce->start(Array(),$cmdData);
910 $tce->process_cmdmap();
911 }
912 }
913 break;
914 case 'delete':
915 $cmdData[$table][$uid]['delete']= 1;
916 if (count($cmdData)) {
917 $tce->start(Array(),$cmdData);
918 $tce->process_cmdmap();
919 }
920 break;
921 }
922 }
923 // Data:
924 if (($TSFE_EDIT['doSave'] || $TSFE_EDIT['update'] || $TSFE_EDIT['update_close']) && is_array($TSFE_EDIT['data'])) {
925 $tce = t3lib_div::makeInstance('t3lib_TCEmain');
926 # $tce->stripslashes_values=0; // This line is NOT needed because $TSFE_EDIT['data'] is already slashed and needs slashes stripped.
927 $tce->start($TSFE_EDIT['data'],Array());
928 $tce->process_uploads($GLOBALS['HTTP_POST_FILES']);
929 $tce->process_datamap();
930 }
931 }
932 }
933
934
935 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tsfebeuserauth.php']) {
936 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tsfebeuserauth.php']);
937 }
938 ?>