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