Project

General

Profile

Feature #19491 » 0009615v3.diff

Administrator Admin, 2008-10-22 00:06

View differences:

t3lib/config_default.php (working copy)
'requiredExt' => 'cms,version,lang,sv', // String list: List of extensions which are REQUIRED and cannot be unloaded by the Extension Manager!
'excludeForPackaging' => '(CVS|\..*|.*~|.*\.bak)', // String list: List of directories and files which will not be packaged into extensions nor taken into account otherwise by the Extension Manager. Perl regular expression syntax!
'extCache' => 1, // Int. 0,1,2,3: 0: ext-scripts (ext_localconf.php and ext_tables.php) are NOT cached, but included every time. 1: scripts cached to typo3conf/temp_CACHED_[sitePathHash]* (saves some milliseconds even with PHP accelerators), 2: scripts cached and prefix includes a hash based on the 'extList' string, 3: scripts cached to typo3conf/temp_CACHED_* (no hash included at all...)
'extList' => 'tsconfig_help,context_help,extra_page_cm_options,impexp,belog,aboutmodules,setup,opendocs,install,t3editor,felogin', // String list: List of extensions which are enabled for this install. Use the Extension Manager (EM) to manage this!
'extList' => 'tsconfig_help,context_help,extra_page_cm_options,impexp,belog,aboutmodules,setup,opendocs,install,t3editor,felogin,fe_edit', // String list: List of extensions which are enabled for this install. Use the Extension Manager (EM) to manage this!
'extConf' => array( // Config-options for extensions, stored as serialized arrays by extension-keys. Handled automatically by the EM.
// '--key--' => array()
),
t3lib/class.t3lib_frontendedit.php (revision 0)
<?php
/***************************************************************
* Copyright notice
*
* (c) 2008 Jeff Segars <jeff@webempoweredchurch.org>
* (c) 2008 David Slayback <dave@webempoweredchurch.org>
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the license
* from the author is found in LICENSE.txt distributed with these scripts.
*
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* Controller class for frontend editing.
*
* @author Jeff Segars <jeff@webempoweredchurch.org>
* @author David Slayback <dave@webempoweredchurch.org>
* @package TYPO3
* @subpackage core
*/
class t3lib_frontendedit {
/**
* TCEmain object.
*
* @var t3lib_tcemain
*/
protected $tce;
/**
* Force preview?
*
* @var boolean
*/
protected $ext_forcePreview = false;
/**
* Comma separated list of page UIDs to be published.
*
* @var string
*/
protected $extPublishList = '';
/**
* Creates and initializes the TCEmain object.
*
* @return void
*/
public function __construct() {
$this->tce = t3lib_div::makeInstance('t3lib_TCEmain');
$this->tce->stripslashes_values=0;
}
/**
* Initializes configuration options.
*
* @return void
*/
public function initConfigOptions() {
$this->saveConfigOptions();
$this->TSFE_EDIT = t3lib_div::_POST('TSFE_EDIT');
// Setting some values based on the admin panel
$GLOBALS['TSFE']->forceTemplateParsing = $this->extGetFeAdminValue('tsdebug', 'forceTemplateParsing');
$GLOBALS['TSFE']->displayEditIcons = $this->extGetFeAdminValue('edit', 'displayIcons');
$GLOBALS['TSFE']->displayFieldEditIcons = $this->extGetFeAdminValue('edit', 'displayFieldIcons');
if ($this->extGetFeAdminValue('tsdebug','displayQueries')) {
if ($GLOBALS['TYPO3_DB']->explainOutput == 0) { // do not override if the value is already set in t3lib_db
// Enable execution of EXPLAIN SELECT queries
$GLOBALS['TYPO3_DB']->explainOutput = 3;
}
}
if (t3lib_div::_GP('ADMCMD_editIcons')) {
$GLOBALS['TSFE']->displayFieldEditIcons=1;
$GLOBALS['BE_USER']->uc['TSFE_adminConfig']['edit_editNoPopup']=1;
}
if (t3lib_div::_GP('ADMCMD_simUser')) {
$GLOBALS['BE_USER']->uc['TSFE_adminConfig']['preview_simulateUserGroup']=intval(t3lib_div::_GP('ADMCMD_simUser'));
$this->ext_forcePreview = true;
}
if (t3lib_div::_GP('ADMCMD_simTime')) {
$GLOBALS['BE_USER']->uc['TSFE_adminConfig']['preview_simulateDate']=intval(t3lib_div::_GP('ADMCMD_simTime'));
$this->ext_forcePreview = true;
}
// Include classes for editing IF editing module in Admin Panel is open
if (($this->isAdminModuleEnabled('edit') && $this->isAdminModuleOpen('edit')) || $GLOBALS['TSFE']->displayEditIcons == 1) {
$GLOBALS['TSFE']->includeTCA();
if ($this->isEditAction()) {
require_once (PATH_t3lib.'class.t3lib_tcemain.php');
$this->editAction();
}
if ($this->isEditFormShown()) {
require_once(PATH_t3lib.'class.t3lib_tceforms.php');
require_once(PATH_t3lib.'class.t3lib_iconworks.php');
require_once(PATH_t3lib.'class.t3lib_loaddbgroup.php');
require_once(PATH_t3lib.'class.t3lib_transferdata.php');
}
}
if ($GLOBALS['TSFE']->forceTemplateParsing || $GLOBALS['TSFE']->displayEditIcons || $GLOBALS['TSFE']->displayFieldEditIcons) {
$GLOBALS['TSFE']->set_no_cache();
}
}
/**
* Delegates to the appropriate view and renders the admin panel content.
*
* @return string.
*/
public function displayAdmin() {
$content = '';
$adminClass = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/classes/class.frontendedit.php']['admin'];
if ($adminClass && !$GLOBALS['BE_USER']->extAdminConfig['hide']) {
$admin = &t3lib_div::getUserObj($adminClass);
if (is_object($admin)) {
$content = $admin->display();
}
}
return $content;
}
/**
* Generates the "edit panels" which can be shown for a page or records on a page when the Admin Panel is enabled for a backend users surfing the frontend.
* With the "edit panel" the user will see buttons with links to editing, moving, hiding, deleting the element
* This function is used for the cObject EDITPANEL and the stdWrap property ".editPanel"
*
* @param string A content string containing the content related to the edit panel. For cObject "EDITPANEL" this is empty but not so for the stdWrap property. The edit panel is appended to this string and returned.
* @param array TypoScript configuration properties for the editPanel
* @param string The "table:uid" of the record being shown. If empty string then $this->currentRecord is used. For new records (set by $conf['newRecordFromTable']) it's auto-generated to "[tablename]:NEW"
* @param array Alternative data array to use. Default is $this->data
* @return string The input content string with the editPanel appended. This function returns only an edit panel appended to the content string if a backend user is logged in (and has the correct permissions). Otherwise the content string is directly returned.
* @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=375&cHash=7d8915d508
*/
public function displayEditPanel($content, array $conf, $currentRecord, array $dataArray) {
if ($conf['newRecordFromTable']) {
$currentRecord = $conf['newRecordFromTable'].':NEW';
$conf['allow'] = 'new';
}
list($table,$uid) = explode(':', $currentRecord);
// Page ID for new records, 0 if not specified
$newRecordPid = intval($conf['newRecordInPid']);
if (!$conf['onlyCurrentPid'] || $dataArray['pid'] == $GLOBALS['TSFE']->id) {
if ($table=='pages') {
$newUid = $uid;
} else {
if ($conf['newRecordFromTable']) {
$newUid = $GLOBALS['TSFE']->id;
if ($newRecordPid) {
$newUid = $newRecordPid;
}
} else {
$newUid = -1 * $uid;
}
}
}
if ($GLOBALS['TSFE']->displayEditIcons && $table && $this->allowedToEdit($table, $dataArray, $conf) && $this->allowedToEditLanguage($table, $dataArray)) {
$editClass = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/classes/class.frontendedit.php']['edit'];
if ($editClass) {
$edit = &t3lib_div::getUserObj($editClass, false);
if (is_object($edit)) {
$allowedActions = $this->getAllowedEditActions($table, $conf, $dataArray['pid']);
$content = $edit->editPanel($content, $conf, $currentRecord, $dataArray, $table, $allowedActions, $newUid, $this->getHiddenFieldArray($dataArray));
}
}
}
return $content;
}
/**
* Gets the hidden fields (array key=field name, value=field value) to be used in the edit panel for a particular content element.
* In the normal case, no hidden fields are needed but special controllers such as TemplaVoila need to track flexform pointers, etc.
*
* @param array The data array for a specific content element.
* @return array
*/
public function getHiddenFieldArray(array $dataArray) {
// No special hidden fields needed.
return array();
}
/**
* Adds an edit icon to the content string. The edit icon links to alt_doc.php with proper parameters for editing the table/fields of the context.
* This implements TYPO3 context sensitive editing facilities. Only backend users will have access (if properly configured as well).
*
* @param string The content to which the edit icons should be appended
* @param string The parameters defining which table and fields to edit. Syntax is [tablename]:[fieldname],[fieldname],[fieldname],... OR [fieldname],[fieldname],[fieldname],... (basically "[tablename]:" is optional, default table is the one of the "current record" used in the function). The fieldlist is sent as "&columnsOnly=" parameter to alt_doc.php
* @param array TypoScript properties for configuring the edit icons.
* @param string The "table:uid" of the record being shown. If empty string then $this->currentRecord is used. For new records (set by $conf['newRecordFromTable']) it's auto-generated to "[tablename]:NEW"
* @param array Alternative data array to use. Default is $this->data
* @param string Additional URL parameters for the link pointing to alt_doc.php
* @return string The input content string, possibly with edit icons added (not necessarily in the end but just after the last string of normal content.
*/
public function displayEditIcons($content, $params, array $conf=array(), $currentRecord = '', array $dataArray = array(), $addUrlParamStr = '') {
// Check incoming params:
list($currentRecordTable, $currentRecordUID) = explode(':', $currentRecord);
list($fieldList, $table) = array_reverse(t3lib_div::trimExplode(':', $params, 1)); // Reverse the array because table is optional
if (!$table) {
$table = $currentRecordTable;
} elseif ($table != $currentRecordTable) {
return $content; // If the table is set as the first parameter, and does not match the table of the current record, then just return.
}
$editUid = $dataArray['_LOCALIZED_UID'] ? $dataArray['_LOCALIZED_UID'] : $currentRecordUID;
// Edit icons imply that the editing action is generally allowed, assuming page and content element permissions permit it.
if(!array_key_exists('allow', $conf)) {
$conf['allow'] = 'edit';
}
if ($GLOBALS['TSFE']->displayFieldEditIcons && $table && $this->allowedToEdit($table, $dataArray, $conf) && $fieldList && $this->allowedToEditLanguage($table, $dataArray)) {
$editClass = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/classes/class.frontendedit.php']['edit'];
if ($editClass) {
$edit = &t3lib_div::getUserObj($editClass);
if (is_object($edit)) {
$content = $edit->editIcons($content, $params, $conf, $currentRecord, $dataArray, $addURLParamStr, $table, $editUid, $fieldList);
}
}
}
return $content;
}
/**
* Checks if a Admin Panel section ("module") is available for the user. If so, true is returned.
*
* @param string The module key, eg. "edit", "preview", "info" etc.
* @return boolean
*/
public function isAdminModuleEnabled($key) {
// Returns true if the module checked is "preview" and the forcePreview flag is set.
if ($key=='preview' && $this->ext_forcePreview) {
return true;
}
// If key is not set, only "all" is checked
if ($GLOBALS['BE_USER']->extAdminConfig['enable.']['all']) {
return true;
}
if ($GLOBALS['BE_USER']->extAdminConfig['enable.'][$key]) {
return true;
}
}
/**
* Saves any change in settings made in the Admin Panel.
* Called from index_ts.php right after access check for the Admin Panel
*
* @return void
*/
public function saveConfigOptions() {
$input = t3lib_div::_GP('TSFE_ADMIN_PANEL');
if (is_array($input)) {
// Setting
$GLOBALS['BE_USER']->uc['TSFE_adminConfig'] = array_merge(!is_array($GLOBALS['BE_USER']->uc['TSFE_adminConfig']) ? array() : $GLOBALS['BE_USER']->uc['TSFE_adminConfig'], $input); // Candidate for t3lib_div::array_merge() if integer-keys will some day make trouble...
unset($GLOBALS['BE_USER']->uc['TSFE_adminConfig']['action']);
// Actions:
if ($input['action']['clearCache'] && $this->isAdminModuleEnabled('cache')) {
$GLOBALS['BE_USER']->extPageInTreeInfo=array();
$theStartId = intval($input['cache_clearCacheId']);
$GLOBALS['TSFE']->clearPageCacheContent_pidList($GLOBALS['BE_USER']->extGetTreeList($theStartId, $this->extGetFeAdminValue('cache','clearCacheLevels'),0,$GLOBALS['BE_USER']->getPagePermsClause(1)).$theStartId);
}
if ($input['action']['publish'] && $this->isAdminModuleEnabled('publish')) {
$theStartId = intval($input['publish_id']);
$this->extPublishList = $GLOBALS['BE_USER']->extGetTreeList($theStartId, $this->extGetFeAdminValue('publish','levels'),0,$GLOBALS['BE_USER']->getPagePermsClause(1)).$theStartId;
}
// Saving
$GLOBALS['BE_USER']->writeUC();
}
$GLOBALS['TT']->LR = $this->extGetFeAdminValue('tsdebug','LR');
if ($this->extGetFeAdminValue('cache','noCache')) {
$GLOBALS['TSFE']->set_no_cache();
}
// Hook for post processing the frontend admin configuration. Added with TYPO3 4.2, so naming is now incorrect but preserves compatibility.
// @deprecated since TYPO3 4.3
if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['extSaveFeAdminConfig-postProc'])) {
$_params = array('input' => &$input, 'pObj' => &$this);
foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['extSaveFeAdminConfig-postProc'] as $_funcRef) {
t3lib_div::callUserFunction($_funcRef,$_params,$this);
}
}
}
/**
* Returns the value for a Admin Panel setting. You must specify both the module-key and the internal setting key.
*
* @param string Module key
* @param string Setting key
* @return string The setting value
*/
public function extGetFeAdminValue($pre, $val='') {
if ($this->isAdminModuleEnabled($pre)) { // Check if module is enabled.
// Exceptions where the values can be overridden from backend:
// deprecated
if ($pre.'_'.$val == 'edit_displayIcons' && $GLOBALS['BE_USER']->extAdminConfig['module.']['edit.']['forceDisplayIcons']) {
return true;
}
if ($pre.'_'.$val == 'edit_displayFieldIcons' && $GLOBALS['BE_USER']->extAdminConfig['module.']['edit.']['forceDisplayFieldIcons']) {
return true;
}
// override all settings with user TSconfig
if ($GLOBALS['BE_USER']->extAdminConfig['override.'][$pre.'.'][$val] && $val) {
return $GLOBALS['BE_USER']->extAdminConfig['override.'][$pre.'.'][$val];
}
if ($GLOBALS['BE_USER']->extAdminConfig['override.'][$pre]) {
return $GLOBALS['BE_USER']->extAdminConfig['override.'][$pre];
}
$retVal = $val ? $GLOBALS['BE_USER']->uc['TSFE_adminConfig'][$pre.'_'.$val] : 1;
if ($pre=='preview' && $this->ext_forcePreview) {
if (!$val) {
return true;
} else {
return $retVal;
}
}
// regular check:
if ($this->isAdminModuleOpen($pre)) { // See if the menu is expanded!
return $retVal;
}
// Hook for post processing the frontend admin configuration. Added with TYPO3 4.2, so naming is now incorrect but preserves compatibility.
// @deprecated since TYPO3 4.3
if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['extEditAction-postProc'])) {
$_params = array('cmd' => &$cmd, 'tce' => &$this->tce, 'pObj' => &$this);
foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['extEditAction-postProc'] as $_funcRef) {
t3lib_div::callUserFunction($_funcRef,$_params,$this);
}
}
}
}
/**
* Returns the comma-separated list of page UIDs to be published.
*
* @return string
*/
public function getExtPublishList() {
return $this->extPublishList;
}
/**
* Returns true if admin panel module is open
*
* @param string Module key
* @return boolean True, if the admin panel is open for the specified admin panel module key.
*/
public function isAdminModuleOpen($pre) {
return $GLOBALS['BE_USER']->uc['TSFE_adminConfig']['display_top'] && $GLOBALS['BE_USER']->uc['TSFE_adminConfig']['display_'.$pre];
}
/*****************************************************
*
* Frontend Editing
*
****************************************************/
/**
* Returns true in an edit-action is sent from the Admin Panel
*
* @return boolean
* @see index_ts.php
*/
public function isEditAction() {
if (is_array($this->TSFE_EDIT)) {
if ($this->TSFE_EDIT['cancel']) {
unset($this->TSFE_EDIT['cmd']);
} else {
$cmd = (string)$this->TSFE_EDIT['cmd'];
if (($cmd!='edit' || (is_array($this->TSFE_EDIT['data']) && ($this->TSFE_EDIT['update'] || $this->TSFE_EDIT['update_close']))) && $cmd!='new') {
// $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.
return true;
}
}
}
return false;
}
/**
* Returns true if an edit form is shown on the page.
* Used from index_ts.php where a true return-value will result in classes etc. being included.
*
* @return boolean
* @see index_ts.php
*/
public function isEditFormShown() {
if (is_array($this->TSFE_EDIT)) {
$cmd = (string) $this->TSFE_EDIT['cmd'];
if ($cmd=='edit' || $cmd=='new') {
return true;
}
}
}
/**
* Management of the on-page frontend editing forms and edit panels.
* Basically taking in the data and commands and passes them on to the proper classes as they should be.
*
* @return void
* @see index_ts.php
*/
public function editAction() {
// Commands:
list($table, $uid) = explode(':', $this->TSFE_EDIT['record']);
$cmd = $this->TSFE_EDIT['cmd'];
if ($cmd && $table && $uid && isset($GLOBALS['TCA'][$table])) {
// Hook for defining custom editing actions. Naming is incorrect, but preserves compatibility.
if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['extEditAction'])) {
$_params = array();
foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['extEditAction'] as $_funcRef) {
t3lib_div::callUserFunction($_funcRef, $_params, $this);
}
}
// Perform the requested editing command.
if(is_callable(array($this, $cmd))) {
$this->$cmd($table, $uid);
}
}
// Data:
if (($this->TSFE_EDIT['doSave'] || $this->TSFE_EDIT['update'] || $this->TSFE_EDIT['update_close']) && is_array($this->TSFE_EDIT['data'])) {
$this->save($this->TSFE_EDIT['data']);
// pass this on if needed
if ($newuid = $this->tce->substNEWwithIDs['NEW']) {
$this->TSFE_EDIT['newUID'] = $newuid;
}
}
}
/**
* Hides a specific record.
*
* @param string The table name for the record to hide.
* @param integer The UID for the record to hide.
* @return void
*/
public function hide($table, $uid) {
$hideField = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'];
if ($hideField) {
$recData = array();
$recData[$table][$uid][$hideField] = 1;
$this->tce->start($recData, array());
$this->tce->process_datamap();
}
}
/**
* Unhides (shows) a specific record.
*
* @param string The table name for the record to unhide.
* @param integer The UID for the record to unhide.
* @return void
*/
public function unhide($table, $uid) {
$hideField = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'];
if ($hideField) {
$recData = array();
$recData[$table][$uid][$hideField] = 0;
$this->tce->start($recData, array());
$this->tce->process_datamap();
}
}
/**
* Moves a record up.
*
* @param string The table name for the record to move.
* @param integer The UID for the record to hide.
* @return void
*/
public function up($table, $uid) {
$this->move($table, $uid, 'up');
}
/**
* Moves a record down.
*
* @param string The table name for the record to move.
* @param integer The UID for the record to move.
* @return void
*/
public function down($table, $uid) {
$this->move($table, $uid, 'down');
}
/**
* Moves a record in the specified direction.
*
* @param string The table name for the record to move.
* @param integer The UID for the record to move.
* @param string The direction to move, either 'up' or 'down'.
* @return void
*/
protected function move($table, $uid, $direction) {
$cmdData = array();
if ($direction == 'up') {
$operator = '<';
$order = 'DESC';
} else {
$operator = '>';
$order = 'ASC';
}
$sortField = $GLOBALS['TCA'][$table]['ctrl']['sortby'];
if ($sortField) {
// Get self:
$fields = array_unique(t3lib_div::trimExplode(',', $GLOBALS['TCA'][$table]['ctrl']['copyAfterDuplFields'].',uid,pid,'.$sortField, 1));
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(implode(',',$fields), $table, 'uid='.$uid);
if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
// record before or after
$preview = $this->extGetFeAdminValue('preview');
$copyAfterFieldsQuery = '';
if ($preview) {
$ignore = array('starttime'=>1, 'endtime'=>1, 'disabled'=>1, 'fe_group'=>1);
}
if ($GLOBALS['TCA'][$table]['ctrl']['copyAfterDuplFields']) {
$cAFields = t3lib_div::trimExplode(',',$GLOBALS['TCA'][$table]['ctrl']['copyAfterDuplFields'],1);
foreach($cAFields as $fieldName) {
$copyAfterFieldsQuery .= ' AND ' . $fieldName . '="' . $row[$fieldName] . '"';
}
}
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'uid,pid',
$table,
'pid=' . intval($row['pid']) .
' AND ' . $sortField . $operator . intval($row[$sortField]) .
$copyAfterFieldsQuery .
$GLOBALS['TSFE']->sys_page->enableFields($table, '', $ignore),
'',
$sortField . ' ' . $order,
'2'
);
if ($row2 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
if ($direction == 'down') {
$cmdData[$table][$uid]['move'] = -$row2['uid'];
} elseif ($row3 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { // Must take the second record above...
$cmdData[$table][$uid]['move'] = -$row3['uid'];
} else { // ... and if that does not exist, use pid
$cmdData[$table][$uid]['move'] = $row['pid'];
}
} elseif ($direction == 'up') {
$cmdData[$table][$uid]['move'] = $row['pid'];
}
}
if (count($cmdData)) {
$this->tce->start(array(), $cmdData);
$this->tce->process_cmdmap();
}
}
}
/**
* Deletes a specific record.
*
* @param string The table name for the record to delete.
* @param integer The UID for the record to delete.
* @return void
*/
public function delete($table, $uid) {
$cmdData[$table][$uid]['delete'] = 1;
if (count($cmdData)) {
$this->tce->start(array(), $cmdData);
$this->tce->process_cmdmap();
}
}
/**
* Saves a record based on its data array.
*
* @param array Array of record data to be saved.
* @return void
*/
public function save(array $data) {
$this->tce->start($data, array());
$this->tce->process_uploads($_FILES);
$this->tce->process_datamap();
}
/**
* Checks whether the user has access to edit the language for the
* requested record.
*
* @param string The name of the table.
* @param array The record.
* @return boolean
*/
protected function allowedToEditLanguage($table, array $currentRecord) {
// If no access right to record languages, return immediately
if ($table === 'pages') {
$lang = $GLOBALS['TSFE']->sys_language_uid;
} elseif ($table === 'tt_content') {
$lang = $GLOBALS['TSFE']->sys_language_content;
} elseif ($GLOBALS['TCA'][$table]['ctrl']['languageField']) {
$lang = $currentRecord[$GLOBALS['TCA'][$table]['ctrl']['languageField']];
} else {
$lang = -1;
}
if ($GLOBALS['BE_USER']->checkLanguageAccess($lang)) {
$languageAccess = true;
} else {
$languageAccess = false;
}
return $languageAccess;
}
/**
* Checks whether the user is allowed to edit the requested table.
*
* @param string The name of the table.
* @param array The data array.
* @param array The configuration array for the edit panel.
* @return boolean
*/
protected function allowedToEdit($table, array $dataArray, array $conf) {
// Unless permissions specifically allow it, editing is not allowed.
$mayEdit = false;
if ($table=='pages') {
// 2 = permission to edit the page
if($GLOBALS['BE_USER']->isAdmin() || $GLOBALS['BE_USER']->doesUserHaveAccess($dataArray, 2)) {
$mayEdit = true;
}
} else {
// 16 = permission to edit content on the page
if ($GLOBALS['BE_USER']->isAdmin() || $GLOBALS['BE_USER']->doesUserHaveAccess(t3lib_BEfunc::getRecord('pages', $dataArray['pid']), 16)) {
$mayEdit = true;
}
}
if (!$conf['onlyCurrentPid'] || ($dataArray['pid'] == $GLOBALS['TSFE']->id)) {
// Permissions:
$types = t3lib_div::trimExplode(',', strtolower($conf['allow']),1);
$allow = array_flip($types);
$perms = $GLOBALS['BE_USER']->calcPerms($GLOBALS['TSFE']->page);
if ($table == 'pages') {
$allow = $this->getAllowedEditActions($table, $conf, $dataArray['pid'], $allow);
// Can only display editbox if there are options in the menu
if (count($allow)) {
$mayEdit = true;
}
} else {
$mayEdit = count($allow) && ($perms & 16);
}
}
return $mayEdit;
}
/**
* Takes an array of generally allowed actions and filters that list based on page and content permissions.
*
* @param string The name of the table.
* @param array The configuration array.
* @param integer The PID where editing will occur.
* @param string Comma-separated list of actions that are allowed in general.
* @return array
*/
protected function getAllowedEditActions($table, array $conf, $pid, $allow = '') {
if (!$allow) {
$types = t3lib_div::trimExplode(',', strtolower($conf['allow']),1);
$allow = array_flip($types);
}
if (!$conf['onlyCurrentPid'] || $pid == $GLOBALS['TSFE']->id) {
// Permissions:
$types = t3lib_div::trimExplode(',',strtolower($conf['allow']),1);
$allow = array_flip($types);
$perms = $GLOBALS['BE_USER']->calcPerms($GLOBALS['TSFE']->page);
if ($table=='pages') {
// rootpage!
if (count($GLOBALS['TSFE']->config['rootLine']) == 1) {
unset($allow['move']);
unset($allow['hide']);
unset($allow['delete']);
}
if (!($perms & 2)){
unset($allow['edit']);
unset($allow['move']);
unset($allow['hide']);
}
if (!($perms & 4)) {
unset($allow['delete']);
}
if (!($perms&8)) {
unset($allow['new']);
}
}
}
return $allow;
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_frontendedit.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_frontendedit.php']);
}
?>
t3lib/class.t3lib_tsfebeuserauth.php (working copy)
* @subpackage t3lib
*/
class t3lib_tsfeBeUserAuth extends t3lib_beUserAuth {
var $formfield_uname = ''; // formfield with login-name
var $formfield_uident = ''; // formfield with password
var $formfield_chalvalue = ''; // formfield with a unique value which is used to encrypt the password and username
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.
var $writeStdLog = 0; // Decides if the writelog() function is called at login and logout
var $writeAttemptLog = 0; // If the writelog() functions is called if a login-attempt has be tried without success
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.
var $extNeedUpdate=0;
var $extPublishList='';
var $extPageInTreeInfo=array();
var $ext_forcePreview=0;
var $langSplitIndex=0;
var $extAdmEnabled = 0; // General flag which is set if the adminpanel should be displayed at all..
/**
* Initialize the usage of Admin Panel.
* Called from index_ts.php if a backend users is correctly logged in.
* Sets $this->extAdminConfig to the "admPanel" config for the user and $this->extAdmEnabled = 1 IF access is enabled.
* Form field with login name.
*
* @return void
* @var string
*/
function extInitFeAdmin() {
$this->extAdminConfig = $this->getTSConfigProp('admPanel');
if (is_array($this->extAdminConfig['enable.'])) {
reset($this->extAdminConfig['enable.']);
while(list($k,$v)=each($this->extAdminConfig['enable.'])) {
if ($v) {
$this->extAdmEnabled=1; // Enable panel
break;
}
}
}
// Init TSFE_EDIT variables if either the admPanel is enabled or if forceDisplayIcons is set
if($this->extAdmEnabled || $this->extGetFeAdminValue('edit', 'displayIcons')) {
$this->TSFE_EDIT = t3lib_div::_POST('TSFE_EDIT');
}
}
public $formfield_uname = '';
/**
* Creates and returns the HTML code for the Admin Panel in the TSFE frontend.
* Called from index_ts.php - in the end of the script
* Form field with password.
*
* @return string HTML for the Admin Panel
* @see index_ts.php
* @var string
*/
function extPrintFeAdminDialog() {
$out='';
if ($this->uc['TSFE_adminConfig']['display_top']) {
if ($this->extAdmModuleEnabled('preview')) $out.= $this->extGetCategory_preview();
if ($this->extAdmModuleEnabled('cache')) $out.= $this->extGetCategory_cache();
if ($this->extAdmModuleEnabled('publish')) $out.= $this->extGetCategory_publish();
if ($this->extAdmModuleEnabled('edit')) $out.= $this->extGetCategory_edit();
if ($this->extAdmModuleEnabled('tsdebug')) $out.= $this->extGetCategory_tsdebug();
if ($this->extAdmModuleEnabled('info')) $out.= $this->extGetCategory_info();
}
$row = '<img src="'.TYPO3_mainDir.'gfx/ol/blank.gif" width="18" height="16" align="absmiddle" border="0" alt="" />';
$row.= '<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="" />';
$row.= '<strong>'.$this->extFw($this->extGetLL('adminOptions')).'</strong>';
$row.= $this->extFw(': '.$this->user['username']);
$header = '
<tr class="typo3-adminPanel-hRow" style="background-color:#9ba1a8;">
<td colspan="4" style="text-align:left; white-space:nowrap;">'.
$this->extItemLink('top',$row).'
<img src="clear.gif" width="40" height="1" alt="" />
<input type="hidden" name="TSFE_ADMIN_PANEL[display_top]" value="'.$this->uc['TSFE_adminConfig']['display_top'].'" />'.($this->extNeedUpdate?'<input type="submit" value="'.$this->extGetLL('update').'" />':'').'</td>
</tr>';
$query = !t3lib_div::_GET('id') ? ('<input type="hidden" name="id" value="'.$GLOBALS['TSFE']->id.'" />'.chr(10)) : '';
// the dummy field is needed for Firefox: to force a page reload on submit with must change the form value with JavaScript (see "onsubmit" attribute of the "form" element")
$query.= '<input type="hidden" name="TSFE_ADMIN_PANEL[DUMMY]" value="">';
foreach (t3lib_div::_GET() as $k => $v) {
if ($k != 'TSFE_ADMIN_PANEL') {
if (is_array($v)) {
$query.= $this->extPrintFeAdminDialogHiddenFields($k,$v);
} else {
$query.= '<input type="hidden" name="'.$k.'" value="'.htmlspecialchars($v).'">'.chr(10);
}
}
}
$out = '
<!--
ADMIN PANEL
-->
<a name="TSFE_ADMIN"></a>
<form name="TSFE_ADMIN_PANEL_FORM" action="'.htmlspecialchars(t3lib_div::getIndpEnv('SCRIPT_NAME')).'#TSFE_ADMIN" method="get" style="margin:0;" onsubmit="document.forms.TSFE_ADMIN_PANEL_FORM[\'TSFE_ADMIN_PANEL[DUMMY]\'].value=Math.random().toString().substring(2,8)">'.
$query.'
<table border="0" cellpadding="0" cellspacing="0" class="typo3-adminPanel" style="background-color:#f6f2e6; border: 1px solid black; z-index:0; position:absolute;" summary="">'.
$header.
$out.'
</table>
</form>';
if ($this->uc['TSFE_adminConfig']['display_top']) {
$out.= '<script type="text/javascript" src="t3lib/jsfunc.evalfield.js"></script>';
$out.= '
<script type="text/javascript">
/*<![CDATA[*/
var evalFunc = new evalFunc();
// TSFEtypo3FormFieldSet()
function TSFEtypo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue) { //
var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
var theValue = document.TSFE_ADMIN_PANEL_FORM[theField].value;
if (checkbox && theValue==checkboxValue) {
document.TSFE_ADMIN_PANEL_FORM[theField+"_hr"].value="";
document.TSFE_ADMIN_PANEL_FORM[theField+"_cb"].checked = "";
} else {
document.TSFE_ADMIN_PANEL_FORM[theField+"_hr"].value = evalFunc.outputObjValue(theFObj, theValue);
document.TSFE_ADMIN_PANEL_FORM[theField+"_cb"].checked = "on";
}
}
// TSFEtypo3FormFieldGet()
function TSFEtypo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off) { //
var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
if (checkbox_off) {
document.TSFE_ADMIN_PANEL_FORM[theField].value=checkboxValue;
}else{
document.TSFE_ADMIN_PANEL_FORM[theField].value = evalFunc.evalObjValue(theFObj, document.TSFE_ADMIN_PANEL_FORM[theField+"_hr"].value);
}
TSFEtypo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue);
}
/*]]>*/
</script>
<script language="javascript" type="text/javascript">'.$this->extJSCODE.'</script>';
}
return "\n\n\n\n".$out.'<br />';
}
public $formfield_uident = '';
/**
* Fetches recursively all GET parameters as hidden fields.
* Called from extPrintFeAdminDialog.
* Form field with a unique value which is used to encrypt the password and username.
*
* @param string current key
* @param mixed current value
* @return string hidden fields
* @see extPrintFeAdminDialog()
* @var string
*/
function extPrintFeAdminDialogHiddenFields($key,&$val) {
$out = '';
foreach($val as $k => $v) {
if (is_array($v)) {
$out.= $this->extPrintFeAdminDialogHiddenFields($key.'['.$k.']',$v);
} else {
$out.= '<input type="hidden" name="'.$key.'['.$k.']" value="'.htmlspecialchars($v).'">'.chr(10);
}
}
return $out;
}
/*****************************************************
*
* Creating sections of the Admin Panel
*
****************************************************/
public $formfield_chalvalue = '';
/**
* Creates the content for the "preview" section ("module") of the Admin Panel
* Sets the level of security. *'normal' = clear-text. 'challenged' = hashed password/username.
* from form in $formfield_uident. 'superchallenged' = hashed password hashed again with username.
*
* @param string Optional start-value; The generated content is added to this variable.
* @return string HTML content for the section. Consists of a string with table-rows with four columns.
* @see extPrintFeAdminDialog()
* @var string
*/
function extGetCategory_preview($out='') {
$out.= $this->extGetHead('preview');
if ($this->uc['TSFE_adminConfig']['display_preview']) {
$this->extNeedUpdate = 1;
$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"':'').' />');
$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"':'').' />');
// Simulate date
$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'].'" />');
$this->extJSCODE.= 'TSFEtypo3FormFieldSet("TSFE_ADMIN_PANEL[preview_simulateDate]", "datetime", "", 1,0);';
// Simulate fe_user:
$options = '<option value="0">&nbsp;</option>';
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'fe_groups.uid, fe_groups.title',
'fe_groups,pages',
'pages.uid=fe_groups.pid AND pages.deleted=0 '.t3lib_BEfunc::deleteClause('fe_groups').' AND '.$this->getPagePermsClause(1)
);
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$options.= '<option value="'.$row['uid'].'"'.($this->uc['TSFE_adminConfig']['preview_simulateUserGroup']==$row['uid']?' selected="selected"':'').'>'.htmlspecialchars('['.$row['uid'].'] '.$row['title']).'</option>';
}
$out.= $this->extGetItem('preview_simulateUserGroup', '<select name="TSFE_ADMIN_PANEL[preview_simulateUserGroup]">'.$options.'</select>');
}
return $out;
}
public $security_level = '';
/**
* Creates the content for the "cache" section ("module") of the Admin Panel
* Decides if the writelog() function is called at login and logout.
*
* @param string Optional start-value; The generated content is added to this variable.
* @return string HTML content for the section. Consists of a string with table-rows with four columns.
* @see extPrintFeAdminDialog()
* @var boolean
*/
function extGetCategory_cache($out='') {
$out.= $this->extGetHead('cache');
if ($this->uc['TSFE_adminConfig']['display_cache']) {
$this->extNeedUpdate = 1;
$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"':'').' />');
$options = '';
$options.= '<option value="0"'.($this->uc['TSFE_adminConfig']['cache_clearCacheLevels']==0?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_0').'</option>';
$options.= '<option value="1"'.($this->uc['TSFE_adminConfig']['cache_clearCacheLevels']==1?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_1').'</option>';
$options.= '<option value="2"'.($this->uc['TSFE_adminConfig']['cache_clearCacheLevels']==2?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_2').'</option>';
$out.= $this->extGetItem('cache_clearLevels', '<select name="TSFE_ADMIN_PANEL[cache_clearCacheLevels]">'.$options.'</select>'.
'<input type="hidden" name="TSFE_ADMIN_PANEL[cache_clearCacheId]" value="'.$GLOBALS['TSFE']->id.'" /><input type="submit" value="'.$this->extGetLL('update').'" />');
// Generating tree:
$depth = $this->extGetFeAdminValue('cache','clearCacheLevels');
$outTable = '';
$this->extPageInTreeInfo = array();
$this->extPageInTreeInfo[] = array($GLOBALS['TSFE']->page['uid'],htmlspecialchars($GLOBALS['TSFE']->page['title']),$depth+1);
$this->extGetTreeList($GLOBALS['TSFE']->id, $depth,0,$this->getPagePermsClause(1));
reset($this->extPageInTreeInfo);
while(list(,$row)=each($this->extPageInTreeInfo)) {
$outTable.= '
<tr>
<td style="white-space: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>';
}
$outTable = '<br /><table border="0" cellpadding="0" cellspacing="0" summary="">'.$outTable.'</table>';
$outTable.= '<input type="submit" name="TSFE_ADMIN_PANEL[action][clearCache]" value="'.$this->extGetLL('cache_doit').'" />';
$out.= $this->extGetItem('cache_cacheEntries', $outTable);
}
return $out;
}
public $writeStdLog = false;
/**
* Creates the content for the "publish" section ("module") of the Admin Panel
* If the writelog() functions is called if a login-attempt has be tried without success.
*
* @param string Optional start-value; The generated content is added to this variable.
* @return string HTML content for the section. Consists of a string with table-rows with four columns.
* @see extPrintFeAdminDialog()
* @var boolean
*/
function extGetCategory_publish($out='') {
$out.= $this->extGetHead('publish');
if ($this->uc['TSFE_adminConfig']['display_publish']) {
$this->extNeedUpdate = 1;
$options = '';
$options.= '<option value="0"'.($this->uc['TSFE_adminConfig']['publish_levels']==0?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_0').'</option>';
$options.= '<option value="1"'.($this->uc['TSFE_adminConfig']['publish_levels']==1?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_1').'</option>';
$options.= '<option value="2"'.($this->uc['TSFE_adminConfig']['publish_levels']==2?' selected="selected"':'').'>'.$this->extGetLL('div_Levels_2').'</option>';
$out.= $this->extGetItem('publish_levels', '<select name="TSFE_ADMIN_PANEL[publish_levels]">'.$options.'</select>'.
'<input type="hidden" name="TSFE_ADMIN_PANEL[publish_id]" value="'.$GLOBALS['TSFE']->id.'" />&nbsp;<input type="submit" value="'.$this->extGetLL('update').'" />');
// Generating tree:
$depth = $this->extGetFeAdminValue('publish','levels');
$outTable = '';
$this->extPageInTreeInfo = array();
$this->extPageInTreeInfo[] = array($GLOBALS['TSFE']->page['uid'],htmlspecialchars($GLOBALS['TSFE']->page['title']),$depth+1);
$this->extGetTreeList($GLOBALS['TSFE']->id, $depth,0,$this->getPagePermsClause(1));
reset($this->extPageInTreeInfo);
while(list(,$row)=each($this->extPageInTreeInfo)) {
$outTable.= '
<tr>
<td style="white-space: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>';
}
$outTable = '<br /><table border="0" cellpadding="0" cellspacing="0" summary="">'.$outTable.'</table>';
$outTable.= '<input type="submit" name="TSFE_ADMIN_PANEL[action][publish]" value="'.$this->extGetLL('publish_doit').'" />';
$out.= $this->extGetItem('publish_tree', $outTable);
}
return $out;
}
public $writeAttemptLog = false;
/**
* Creates the content for the "edit" section ("module") of the Admin Panel
* This is the name of the include-file containing the login form. If not set, login CAN be anonymous. If set login IS needed.
*
* @param string Optional start-value; The generated content is added to this variable.
* @return string HTML content for the section. Consists of a string with table-rows with four columns.
* @see extPrintFeAdminDialog()
* @var string
*/
function extGetCategory_edit($out='') {
$out.= $this->extGetHead('edit');
if ($this->uc['TSFE_adminConfig']['display_edit']) {
public $auth_include = '';
// If another page module was specified, replace the default Page module with the new one
$newPageModule = trim($GLOBALS['BE_USER']->getTSConfigVal('options.overridePageModule'));
$pageModule = t3lib_BEfunc::isModuleSetInTBE_MODULES($newPageModule) ? $newPageModule : 'web_layout';
$this->extNeedUpdate = 1;
$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"':'').' />');
$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"':'').' />');
$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"':'').' />');
$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"':'').' />');
$out.= $this->extGetItem('', $this->ext_makeToolBar());
if (!t3lib_div::_GP('ADMCMD_view')) {
$out.= $this->extGetItem('', '<a href="#" onclick="'.
htmlspecialchars('
if (parent.opener && parent.opener.top && parent.opener.top.TS) {
parent.opener.top.fsMod.recentIds["web"]='.intval($GLOBALS['TSFE']->page['uid']).';
if (parent.opener.top.content && parent.opener.top.content.nav_frame && parent.opener.top.content.nav_frame.refresh_nav) {
parent.opener.top.content.nav_frame.refresh_nav();
}
parent.opener.top.goToModule("'.$pageModule.'");
parent.opener.top.focus();
} else {
vHWin=window.open(\''.TYPO3_mainDir.t3lib_BEfunc::getBackendScript().'\',\''.md5('Typo3Backend-'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']).'\',\'status=1,menubar=1,scrollbars=1,resizable=1\');
vHWin.focus();
}
return false;
').
'">'.$this->extFw($this->extGetLL('edit_openAB')).'</a>');
}
}
return $out;
}
/**
* Creates the content for the "tsdebug" section ("module") of the Admin Panel
* Array of page related information (uid, title, depth).
*
* @param string Optional start-value; The generated content is added to this variable.
* @return string HTML content for the section. Consists of a string with table-rows with four columns.
* @see extPrintFeAdminDialog()
* @var array
*/
function extGetCategory_tsdebug($out='') {
$out.= $this->extGetHead('tsdebug');
if ($this->uc['TSFE_adminConfig']['display_tsdebug']) {
$this->extNeedUpdate = 1;
$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"':'').' />');
$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"':'').' />');
$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"':'').' />');
$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"':'').' />');
$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"':'').' />');
$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"':'').' />');
$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"':'').' />');
$GLOBALS['TT']->printConf['flag_tree'] = $this->extGetFeAdminValue('tsdebug','tree');
$GLOBALS['TT']->printConf['allTime'] = $this->extGetFeAdminValue('tsdebug','displayTimes');
$GLOBALS['TT']->printConf['flag_messages'] = $this->extGetFeAdminValue('tsdebug','displayMessages');
$GLOBALS['TT']->printConf['flag_content'] = $this->extGetFeAdminValue('tsdebug','displayContent');
$GLOBALS['TT']->printConf['flag_queries'] = $this->extGetFeAdminValue('tsdebug','displayQueries');
$out.= '
<tr>
<td><img src="clear.gif" width="50" height="1" alt="" /></td>
<td colspan="3">'.$GLOBALS['TT']->printTSlog().'</td>
</tr>';
}
return $out;
}
public $extPageInTreeInfo = array();
/**
* Creates the content for the "info" section ("module") of the Admin Panel
* General flag which is set if the adminpanel should be displayed at all.
*
* @param string Optional start-value; The generated content is added to this variable.
* @return string HTML content for the section. Consists of a string with table-rows with four columns.
* @see extPrintFeAdminDialog()
* @var boolean
*/
function extGetCategory_info($out='') {
$out.= $this->extGetHead('info');
if ($this->uc['TSFE_adminConfig']['display_info']) {
$tableArr = array();
if ($this->extGetFeAdminValue('cache','noCache')) {
$theBytes = 0;
$count = 0;
if (count($GLOBALS['TSFE']->imagesOnPage)) {
$tableArr[] = array('*Images on this page:*', '');
foreach ($GLOBALS['TSFE']->imagesOnPage as $file) {
$fs = @filesize($file);
$tableArr[] = array('&ndash; '.$file, t3lib_div::formatSize($fs));
$theBytes+= $fs;
$count++;
}
}
$tableArr[] = array('', ''); // Add an empty line
$tableArr[] = array('*Total number of images:*', $count);
$tableArr[] = array('*Total image file sizes:*', t3lib_div::formatSize($theBytes));
$tableArr[] = array('*Document size:*', t3lib_div::formatSize(strlen($GLOBALS['TSFE']->content)));
$tableArr[] = array('*Total page load:*', t3lib_div::formatSize(strlen($GLOBALS['TSFE']->content)+$theBytes));
$tableArr[] = array('', '');
}
$tableArr[] = array('id:', $GLOBALS['TSFE']->id);
$tableArr[] = array('type:', $GLOBALS['TSFE']->type);
$tableArr[] = array('gr_list:', $GLOBALS['TSFE']->gr_list);
$tableArr[] = array('no_cache:', $GLOBALS['TSFE']->no_cache);
$tableArr[] = array('fe_user, name:', $GLOBALS['TSFE']->fe_user->user['username']);
$tableArr[] = array('fe_user, uid:', $GLOBALS['TSFE']->fe_user->user['uid']);
$tableArr[] = array('', ''); // Add an empty line
// parsetime:
$tableArr[] = array('*Total parsetime:*', $GLOBALS['TSFE']->scriptParseTime.' ms');
$table = '';
foreach ($tableArr as $arr) {
if (strlen($arr[0])) { // Put text wrapped by "*" between <strong> tags
$value1 = preg_replace('/^\*(.*)\*$/', '$1', $arr[0], -1, $count);
$value1 = ($count?'<strong>':'') . $this->extFw($value1) . ($count?'</strong>':'');
} else {
$value1 = $this->extFw('&nbsp;');
}
$value2 = strlen($arr[1]) ? $arr[1] : '&nbsp;';
$value2 = $this->extFw($value2);
$table.= '
<tr>
<td style="text-align:left">'.$value1.'</td>
<td style="text-align:right">'.$value2.'</td>
</tr>';
}
$table = '<table border="0" cellpadding="0" cellspacing="0" summary="">'.$table.'</table>';
$out.= '
<tr>
<td><img src="clear.gif" width="50" height="1" alt="" /></td>
<td colspan="3">'.$table.'</td>
</tr>';
}
return $out;
}
/*****************************************************
*
* Admin Panel Layout Helper functions
*
****************************************************/
public $extAdmEnabled = false;
/**
* Returns a row (with colspan=4) which is a header for a section in the Admin Panel.
* 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
* See the functions extGetCategory_*
* Class for frontend editing.
*
* @param string The suffix to the display_ label. Also selects the label from the LOCAL_LANG array.
* @return string HTML table row.
* @access private
* @see extGetItem()
* @var t3lib_frontendedit
*/
function extGetHead($pre) {
$out = '<img src="'.TYPO3_mainDir.'gfx/ol/blank.gif" width="18" height="16" align="absmiddle" border="0" alt="" />';
$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="" />';
$out.= $this->extFw($this->extGetLL($pre));
public $frontendEdit = null;
$out = $this->extItemLink($pre,$out);
return '
<tr class="typo3-adminPanel-itemHRow" style="background-color:#abbbb4;">
<td colspan="4" style="text-align:left; border-top:dashed 1px #007a8c; white-space:nowrap;">'.$out.'<input type="hidden" name="TSFE_ADMIN_PANEL[display_'.$pre.']" value="'.$this->uc['TSFE_adminConfig']['display_'.$pre].'" /></td>
</tr>';
}
/**
* Wraps a string in a link which will open/close a certain part of the Admin Panel
*
* @param string The code for the display_ label/key
* @param string Input string
* @return string Linked input string
* @access private
* @see extGetHead()
*/
function extItemLink($pre,$str) {
return '<a href="#" style="text-decoration:none;" onclick="'.
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;').
'">'.$str.'</a>';
}
public function initializeFrontendEdit() {
$this->extAdminConfig = $this->getTSConfigProp('admPanel');
/**
* Returns a row (with 4 columns) for content in a section of the Admin Panel.
* It will take $pre as a key to a label to display and $element as the content to put into the forth cell.
*
* @param string Key to label
* @param string The HTML content for the forth table cell.
* @return string HTML table row.
* @access private
* @see extGetHead()
*/
function extGetItem($pre,$element) {
$out = '
<tr class="typo3-adminPanel-itemRow">
<td><img src="clear.gif" width="50" height="1" alt="" /></td>
<td style="text-align:left; white-space:nowrap;">'.($pre ? $this->extFw($this->extGetLL($pre)) : '&nbsp;').'</td>
<td><img src="clear.gif" width="30" height="1" alt="" /></td>
<td style="text-align:left; white-space:nowrap;">'.$element.'</td>
</tr>';
return $out;
}
/**
* Wraps a string in a span-tag with black verdana font
*
* @param string The string to wrap
* @return string
*/
function extFw($str) {
return '<span style="font-family:Verdana,Arial,Helvetica,sans-serif; font-size:10px; color:black;">'.$str.'</span>';
}
/**
* Creates the tool bar links for the "edit" section of the Admin Panel.
*
* @return string A string containing images wrapped in <a>-tags linking them to proper functions.
*/
function ext_makeToolBar() {
// If mod.web_list.newContentWiz.overrideWithExtension is set, use that extension's create new content wizard instead:
$tmpTSc = t3lib_BEfunc::getModTSconfig($this->pageinfo['uid'],'mod.web_list');
$tmpTSc = $tmpTSc ['properties']['newContentWiz.']['overrideWithExtension'];
$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');
$perms = $GLOBALS['BE_USER']->calcPerms($GLOBALS['TSFE']->page);
$langAllowed = $GLOBALS['BE_USER']->checkLanguageAccess($GLOBALS['TSFE']->sys_language_uid);
$toolBar = '';
$id = $GLOBALS['TSFE']->id;
$toolBar.= '<a href="'.htmlspecialchars(TYPO3_mainDir.'show_rechis.php?element='.rawurlencode('pages:'.$id).'&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'#latest">'.
'<img src="'.TYPO3_mainDir.'gfx/history2.gif" width="13" height="12" hspace="2" border="0" align="top" title="'.$this->extGetLL('edit_recordHistory').'" alt="" /></a>';
if ($perms&16 && $langAllowed) {
$params = '';
if ($GLOBALS['TSFE']->sys_language_uid) $params = '&sys_language_uid='.$GLOBALS['TSFE']->sys_language_uid;
$toolBar.= '<a href="'.htmlspecialchars($newContentWizScriptPath.'?id='.$id.$params.'&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
'<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>';
}
if ($perms&2) {
$toolBar.= '<a href="'.htmlspecialchars(TYPO3_mainDir.'move_el.php?table=pages&uid='.$id.'&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
'<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>';
}
if ($perms&8) {
$toolBar.= '<a href="'.htmlspecialchars(TYPO3_mainDir.'db_new.php?id='.$id.'&pagesOnly=1&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
'<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>';
}
if ($perms&2) {
$params = '&edit[pages]['.$id.']=edit';
$toolBar.= '<a href="'.htmlspecialchars(TYPO3_mainDir.'alt_doc.php?'.$params.'&noView=1&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
'<img src="'.TYPO3_mainDir.'gfx/edit2.gif" width="11" height="12" hspace="2" border="0" align="top" title="'.$this->extGetLL('edit_editPageProperties').'" alt="" /></a>';
if ($GLOBALS['TSFE']->sys_language_uid && $langAllowed) {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'uid,pid,t3ver_state', 'pages_language_overlay',
'pid='.intval($id).' AND sys_language_uid='.$GLOBALS['TSFE']->sys_language_uid.$GLOBALS['TSFE']->sys_page->enableFields('pages_language_overlay'),
'', '', '1');
$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
$GLOBALS['TSFE']->sys_page->versionOL('pages_language_overlay',$row);
if (is_array($row)) {
$params='&edit[pages_language_overlay]['.$row['uid'].']=edit';
$toolBar.= '<a href="'.htmlspecialchars(TYPO3_mainDir.'alt_doc.php?'.$params.'&noView=1&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
'<img src="'.TYPO3_mainDir.'gfx/edit3.gif" width="11" height="12" hspace="2" border="0" align="top" title="'.$this->extGetLL('edit_editPageOverlay').'" alt="" /></a>';
if (is_array($this->extAdminConfig['enable.'])) {
foreach($this->extAdminConfig['enable.'] as $key => $value) {
if ($value) {
// @todo Add support for controller switching (ie. TV controller)
require_once(PATH_t3lib . 'class.t3lib_frontendedit.php');
$classname = 't3lib_frontendedit';
$this->frontendEdit = t3lib_div::makeInstance($classname);
break;
}
}
}
if ($this->check('modules','web_list')) {
$toolBar.= '<a href="'.htmlspecialchars(TYPO3_mainDir.'db_list.php?id='.$id.'&returnUrl='.rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'))).'">'.
'<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>';
}
return $toolBar;
}
/*****************************************************
*
* TSFE BE user Access Functions
......
* Used in the frontend.
*
* @return boolean Returns true if access is OK
* @see typo3/init.php, t3lib_beuserauth::backendCheckLogin()
* @see typo3/init.php, t3lib_beuserauth::backendCheckLogin()
*/
function checkBackendAccessSettingsFromInitPhp() {
public function checkBackendAccessSettingsFromInitPhp() {
global $TYPO3_CONF_VARS;
// **********************
// Check Hardcoded lock on BE:
// **********************
if ($TYPO3_CONF_VARS['BE']['adminOnly'] < 0) {
return FALSE;
return false;
}
// **********************
......
// **********************
if (trim($TYPO3_CONF_VARS['BE']['IPmaskList'])) {
if (!t3lib_div::cmpIP(t3lib_div::getIndpEnv('REMOTE_ADDR'), $TYPO3_CONF_VARS['BE']['IPmaskList'])) {
return FALSE;
return false;
}
}
......
// **********************
if (intval($TYPO3_CONF_VARS['BE']['lockSSL']) && $TYPO3_CONF_VARS['BE']['lockSSL'] != 3) {
if (!t3lib_div::getIndpEnv('TYPO3_SSL')) {
return FALSE;
return false;
}
}
// Finally a check from t3lib_beuserauth::backendCheckLogin()
if (!$TYPO3_CONF_VARS['BE']['adminOnly'] || $this->isAdmin()) {
return TRUE;
} else return FALSE;
return true;
} else {
return false;
}
}
......
* @param array The page record to evaluate for
* @return boolean True if read access
*/
function extPageReadAccess($pageRec) {
return $this->isInWebMount($pageRec['uid']) && $this->doesUserHaveAccess($pageRec,1);
public function extPageReadAccess($pageRec) {
return $this->isInWebMount($pageRec['uid']) && $this->doesUserHaveAccess($pageRec, 1);
}
... This diff was truncated because it exceeds the maximum size that can be displayed.
(3-3/6)