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