Project

General

Profile

Bug #22410 » 14050_cleaning_t3lib_modsettings.patch

Administrator Admin, 2010-11-24 13:16

View differences:

t3lib/class.t3lib_modsettings.php (revision )
<?php
/***************************************************************
* Copyright notice
*
* (c) 1999-2010 Kasper Sk?rh?j (kasperYYYY@typo3.com)
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the license
* from the author is found in LICENSE.txt distributed with these scripts.
*
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
* Copyright notice
*
* (c) 1999-2010 Kasper Sk?rh?j (kasperYYYY@typo3.com)
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the license
* from the author is found in LICENSE.txt distributed with these scripts.
*
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* Manage storing and restoring of $GLOBALS['SOBE']->MOD_SETTINGS settings.
* Provides a presets box for BE modules.
......
*
* 125: class t3lib_modSettings
*
* SECTION: Init / setup
* SECTION: Init / setup
* 181: function init($prefix='', $storeList='')
* 181: function init($prefix='', $storeList='')
* 197: function setSessionType($type='ses')
* 197: function setSessionType($type='ses')
*
* SECTION: Store list - which values should be stored
* SECTION: Store list - which values should be stored
* 218: function setStoreList($storeList)
* 218: function setStoreList($storeList)
* 231: function addToStoreList($storeList)
* 231: function addToStoreList($storeList)
* 245: function addToStoreListFromPrefix($prefix='')
* 245: function addToStoreListFromPrefix($prefix='')
*
* SECTION: Process storage array
* SECTION: Process storage array
* 279: function initStorage()
* 279: function initStorage()
* 294: function cleanupStorageArray($storedSettings)
* 294: function cleanupStorageArray($storedSettings)
* 316: function compileEntry($data)
* 316: function compileEntry($data)
* 343: function getStoredData($storeIndex, $writeArray=array())
* 343: function getStoredData($storeIndex, $writeArray=array())
* 360: function processStoreControl($mconfName='')
* 360: function processStoreControl($mconfName='')
* 442: function writeStoredSetting($writeArray=array(), $mconfName='')
* 442: function writeStoredSetting($writeArray=array(), $mconfName='')
*
* SECTION: GUI
* SECTION: GUI
* 474: function getStoreControl($showElements='load,remove,save', $useOwnForm=TRUE)
* 474: function getStoreControl($showElements='load,remove,save', $useOwnForm=TRUE)
*
* SECTION: Misc
* SECTION: Misc
* 576: function processEntry($storageArr)
* 576: function processEntry($storageArr)
*
* TOTAL FUNCTIONS: 13
* (This index is automatically created/updated by the extension "extdeveval")
......
*/
/**
* usage inside of scbase class
*
* ....
*
* $this->MOD_MENU = array(
* 'function' => array(
* 'function' => array(
* 'xxx ...
* 'xxx ...
* ),
* ),
* 'tx_dam_select_storedSettings' => '',
* 'tx_dam_select_storedSettings' => '',
*
* ....
*
* function main() {
* // reStore settings
* // reStore settings
* $store = t3lib_div::makeInstance('t3lib_modSettings');
* $store->init('tx_dam_select');
* $store->setStoreList('tx_dam_select');
* $store->processStoreControl();
*
* // show control panel
* // show control panel
* $this->content.= $this->doc->section('Settings',$store->getStoreControl(),0,1);
*
*
......
var $formName = 'storeControl';
var $writeDevLog = 0; // write messages into the devlog?
var $writeDevLog = 0; // write messages into the devlog?
/********************************
*
* Init / setup
......
********************************/
/**
* Initializes the object
*
......
* @param array additional names of keys of the MOD_SETTING array which should be stored (array or comma list)
* @return void
*/
function init($prefix='', $storeList='') {
function init($prefix = '', $storeList = '') {
$this->prefix = $prefix;
$this->setStoreList($storeList);
$this->type = 'perm';
// enable dev logging if set
if ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_modSettings.php']['writeDevLog']) $this->writeDevLog = TRUE;
if (TYPO3_DLOG) $this->writeDevLog = TRUE;
if ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_modSettings.php']['writeDevLog']) {
$this->writeDevLog = TRUE;
}
}
if (TYPO3_DLOG) {
$this->writeDevLog = TRUE;
}
}
/**
* Set session type to 'ses' which will store the settings data not permanently.
......
* @param string Default is 'ses'
* @return void
*/
function setSessionType($type='ses') {
function setSessionType($type = 'ses') {
$this->type = $type;
}
/********************************
*
* Store list - which values should be stored
......
********************************/
/**
* Set MOD_SETTINGS keys which should be stored
*
* @param mixed array or string (,) - set additional names of keys of the MOD_SETTING array which should be stored
* @return void
*/
function setStoreList($storeList) {
function setStoreList($storeList) {
$this->storeList = is_array($storeList) ? $storeList : t3lib_div::trimExplode(',',$storeList,1);
$this->storeList = is_array($storeList) ? $storeList : t3lib_div::trimExplode(',', $storeList, 1);
if ($this->writeDevLog) t3lib_div::devLog('Store list:'.implode(',',$this->storeList), 't3lib_modSettings', 0);
if ($this->writeDevLog) {
t3lib_div::devLog('Store list:' . implode(',', $this->storeList), 't3lib_modSettings', 0);
}
}
}
/**
......
* @param mixed array or string (,) - add names of keys of the MOD_SETTING array which should be stored
* @return void
*/
function addToStoreList($storeList) {
function addToStoreList($storeList) {
$storeList = is_array($storeList) ? $storeList : t3lib_div::trimExplode(',',$storeList,1);
$storeList = is_array($storeList) ? $storeList : t3lib_div::trimExplode(',', $storeList, 1);
$this->storeList = array_merge($this->storeList, $storeList);
if ($this->writeDevLog) t3lib_div::devLog('Store list:'.implode(',',$this->storeList), 't3lib_modSettings', 0);
if ($this->writeDevLog) {
t3lib_div::devLog('Store list:' . implode(',', $this->storeList), 't3lib_modSettings', 0);
}
}
}
/**
......
* @param string prefix of MOD_SETTING array keys that should be stored
* @return void
*/
function addToStoreListFromPrefix($prefix='') {
function addToStoreListFromPrefix($prefix = '') {
global $SOBE;
$prefix = $prefix ? $prefix : $this->prefix;
foreach ($SOBE->MOD_SETTINGS as $key => $value) {
if (preg_match('/^'.$prefix.'/',$key)) {
if (preg_match('/^' . $prefix . '/', $key)) {
$this->storeList[$key]=$key;
$this->storeList[$key] = $key;
}
}
unset($this->storeList[$this->prefix.'_storedSettings']);
unset($this->storeList[$this->prefix . '_storedSettings']);
if ($this->writeDevLog) t3lib_div::devLog('Store list:'.implode(',',$this->storeList), 't3lib_modSettings', 0);
if ($this->writeDevLog) {
t3lib_div::devLog('Store list:' . implode(',', $this->storeList), 't3lib_modSettings', 0);
}
}
}
/********************************
*
* Process storage array
......
********************************/
/**
* Get the stored settings from MOD_SETTINGS and set them in $this->storedSettings
*
* @return void
*/
function initStorage() {
function initStorage() {
global $SOBE;
$storedSettings = unserialize($SOBE->MOD_SETTINGS[$this->prefix.'_storedSettings']);
$storedSettings = unserialize($SOBE->MOD_SETTINGS[$this->prefix . '_storedSettings']);
$this->storedSettings = $this->cleanupStorageArray($storedSettings);
}
/**
* Remove corrupted data entries from the stored settings array
*
* @param array $storedSettings
* @return array $storedSettings
*/
function cleanupStorageArray($storedSettings) {
function cleanupStorageArray($storedSettings) {
$storedSettings = is_array($storedSettings) ? $storedSettings : array();
// clean up the array
foreach($storedSettings as $id => $sdArr) {
foreach ($storedSettings as $id => $sdArr) {
if (!is_array($sdArr)) unset($storedSettings[$id]);
if (!is_array($sdArr['data'])) unset($storedSettings[$id]);
if (!trim($sdArr['title'])) $storedSettings[$id]['title'] = '[no title]';
if (!is_array($sdArr)) {
unset($storedSettings[$id]);
}
}
if (!is_array($sdArr['data'])) {
unset($storedSettings[$id]);
}
if (!trim($sdArr['title'])) {
$storedSettings[$id]['title'] = '[no title]';
}
}
return $storedSettings;
}
......
* @param array Should work with data from _GP('storeControl'). This is ['title']: Title for the entry. ['desc']: A description text. Currently not used by this class
* @return array $storageArr: entry for the stored settings array
*/
function compileEntry($data) {
function compileEntry($data) {
global $SOBE;
$storageData = array();
foreach($this->storeList as $MS_key) {
foreach ($this->storeList as $MS_key) {
$storageData[$MS_key] = $SOBE->MOD_SETTINGS[$MS_key];
}
$storageArr = array (
$storageArr = array(
'title' => $data['title'],
'title' => $data['title'],
'desc' => (string)$data['desc'],
'desc' => (string) $data['desc'],
'data' => $storageData,
'user' => NULL,
'tstamp' => $GLOBALS['EXEC_TIME'],
);
'data' => $storageData,
'user' => NULL,
'tstamp' => $GLOBALS['EXEC_TIME'],
);
$storageArr = $this->processEntry($storageArr);
return $storageArr;
......
* @param array Preset data array. Will be overwritten by copied values.
* @return array Data array
*/
function getStoredData($storeIndex, $writeArray=array()) {
function getStoredData($storeIndex, $writeArray = array()) {
if ($this->storedSettings[$storeIndex]) {
if ($this->storedSettings[$storeIndex]) {
foreach($this->storeList as $k) {
foreach ($this->storeList as $k) {
$writeArray[$k] = $this->storedSettings[$storeIndex]['data'][$k];
}
}
......
}
/**
* Processing of the storage command LOAD, SAVE, REMOVE
*
* @param string Name of the module to store the settings for. Default: $GLOBALS['SOBE']->MCONF['name'] (current module)
* @return string Storage message. Also set in $this->msg
*/
function processStoreControl($mconfName='') {
function processStoreControl($mconfName = '') {
$this->initStorage();
......
if (is_array($storeControl)) {
if ($this->writeDevLog) {
t3lib_div::devLog('Store command: '.t3lib_div::arrayToLogString($storeControl), 't3lib_modSettings', 0);
t3lib_div::devLog('Store command: ' . t3lib_div::arrayToLogString($storeControl), 't3lib_modSettings', 0);
}
//
// processing LOAD
//
//
// processing LOAD
//
if ($storeControl['LOAD'] AND $storeIndex) {
if ($storeControl['LOAD'] AND $storeIndex) {
$writeArray = $this->getStoredData($storeIndex, $writeArray);
$saveSettings = TRUE;
$writeArray = $this->getStoredData($storeIndex, $writeArray);
$saveSettings = TRUE;
$msg = "'".$this->storedSettings[$storeIndex]['title']."' preset loaded!";
$msg = "'" . $this->storedSettings[$storeIndex]['title'] . "' preset loaded!";
//
// processing SAVE
//
//
// processing SAVE
//
} elseif ($storeControl['SAVE']) {
} elseif ($storeControl['SAVE']) {
if (trim($storeControl['title'])) {
// get the data to store
......
$this->storedSettings[$storeIndex] = $newEntry;
$saveSettings = TRUE;
$msg = "'".$newEntry['title']."' preset saved!";
$msg = "'" . $newEntry['title'] . "' preset saved!";
} else {
$msg = 'Please enter a name for the preset!';
}
//
// processing REMOVE
//
//
// processing REMOVE
//
} elseif ($storeControl['REMOVE'] AND $storeIndex) {
} elseif ($storeControl['REMOVE'] AND $storeIndex) {
// Removing entry
$msg = "'".$this->storedSettings[$storeIndex]['title']."' preset entry removed!";
$msg = "'" . $this->storedSettings[$storeIndex]['title'] . "' preset entry removed!";
unset($this->storedSettings[$storeIndex]);
$saveSettings = TRUE;
......
$this->msg = $msg;
if ($saveSettings) {
if ($saveSettings) {
$this->writeStoredSetting($writeArray, $mconfName);
}
......
* @param string Name of the module to store the settings for. Default: $GLOBALS['SOBE']->MCONF['name'] (current module)
* @return void
*/
function writeStoredSetting($writeArray=array(), $mconfName='') {
function writeStoredSetting($writeArray = array(), $mconfName = '') {
global $SOBE;
// for debugging: just removes all module data from user settings
# $GLOBALS['BE_USER']->pushModuleData($SOBE->MCONF['name'],array());
// $GLOBALS['BE_USER']->pushModuleData($SOBE->MCONF['name'],array());
unset($this->storedSettings[0]); // making sure, index 0 is not set!
unset($this->storedSettings[0]); // making sure, index 0 is not set!
$this->storedSettings = $this->cleanupStorageArray($this->storedSettings);
$writeArray[$this->prefix.'_storedSettings'] = serialize($this->storedSettings);
$writeArray[$this->prefix . '_storedSettings'] = serialize($this->storedSettings);
$SOBE->MOD_SETTINGS = t3lib_BEfunc::getModuleData($SOBE->MOD_MENU, $writeArray, ($mconfName?$mconfName:$SOBE->MCONF['name']), $this->type);
$SOBE->MOD_SETTINGS = t3lib_BEfunc::getModuleData($SOBE->MOD_MENU, $writeArray, ($mconfName ? $mconfName : $SOBE->MCONF['name']), $this->type);
if ($this->writeDevLog) t3lib_div::devLog('Settings stored:'.$this->msg, 't3lib_modSettings', 0);
if ($this->writeDevLog) {
t3lib_div::devLog('Settings stored:' . $this->msg, 't3lib_modSettings', 0);
}
}
}
/********************************
*
* GUI
......
********************************/
/**
* Returns the storage control box
*
......
* @param boolean If set the box is wrapped with own form tag
* @return string HTML code
*/
function getStoreControl($showElements='load,remove,save', $useOwnForm=TRUE) {
function getStoreControl($showElements = 'load,remove,save', $useOwnForm = TRUE) {
global $TYPO3_CONF_VARS;
$showElements = t3lib_div::trimExplode(',', $showElements, 1);
......
$this->initStorage();
// Preset selector
$opt=array();
$opt = array();
$opt[] = '<option value="0"> </option>';
foreach($this->storedSettings as $id => $v) {
foreach ($this->storedSettings as $id => $v) {
$opt[] = '<option value="'.$id.'">'.htmlspecialchars($v['title']).'</option>';
$opt[] = '<option value="' . $id . '">' . htmlspecialchars($v['title']) . '</option>';
}
$storedEntries = count($opt)>1;
$storedEntries = count($opt) > 1;
$codeTD = array();
// LOAD, REMOVE, but also show selector so you can overwrite an entry with SAVE
if($storedEntries AND (count($showElements))) {
if ($storedEntries AND (count($showElements))) {
// selector box
$onChange = 'document.forms[\''.$this->formName.'\'][\'storeControl[title]\'].value= this.options[this.selectedIndex].value!=0 ? this.options[this.selectedIndex].text : \'\';';
$onChange = 'document.forms[\'' . $this->formName . '\'][\'storeControl[title]\'].value= this.options[this.selectedIndex].value!=0 ? this.options[this.selectedIndex].text : \'\';';
$code = '
<select name="storeControl[STORE]" onChange="'.htmlspecialchars($onChange).'">
<select name="storeControl[STORE]" onChange="' . htmlspecialchars($onChange) . '">
'.implode('
' . implode('
', $opt).'
', $opt) . '
</select>';
// load button
if(in_array('load', $showElements)) {
if (in_array('load', $showElements)) {
$code.= '
$code .= '
<input type="submit" name="storeControl[LOAD]" value="Load" /> ';
}
// remove button
if(in_array('remove', $showElements)) {
if (in_array('remove', $showElements)) {
$code.= '
$code .= '
<input type="submit" name="storeControl[REMOVE]" value="Remove" /> ';
}
$codeTD[] = '<td width="1%">Preset:</td>';
$codeTD[] = '<td nowrap="nowrap">'.$code.'&nbsp;&nbsp;</td>';
$codeTD[] = '<td nowrap="nowrap">' . $code . '&nbsp;&nbsp;</td>';
}
// SAVE
if(in_array('save', $showElements)) {
if (in_array('save', $showElements)) {
$onClick = (!$storedEntries) ? '' : 'if (document.forms[\''.$this->formName.'\'][\'storeControl[STORE]\'].options[document.forms[\''.$this->formName.'\'][\'storeControl[STORE]\'].selectedIndex].value<0) return confirm(\'Are you sure you want to overwrite the existing entry?\');';
$onClick = (!$storedEntries) ? '' : 'if (document.forms[\'' . $this->formName . '\'][\'storeControl[STORE]\'].options[document.forms[\'' . $this->formName . '\'][\'storeControl[STORE]\'].selectedIndex].value<0) return confirm(\'Are you sure you want to overwrite the existing entry?\');';
$code = '<input name="storeControl[title]" value="" type="text" max="80" width="25"> ';
$code.= '<input type="submit" name="storeControl[SAVE]" value="Save" onClick="'.htmlspecialchars($onClick).'" />';
$code .= '<input type="submit" name="storeControl[SAVE]" value="Save" onClick="' . htmlspecialchars($onClick) . '" />';
$codeTD[] = '<td nowrap="nowrap">'.$code.'</td>';
$codeTD[] = '<td nowrap="nowrap">' . $code . '</td>';
}
$codeTD = implode ('
$codeTD = implode('
', $codeTD);
if (trim($code)) {
......
-->
<table border="0" cellpadding="3" cellspacing="0" width="100%">
<tr class="bgColor4">
'.$codeTD.'
' . $codeTD . '
</tr>
</table>
';
}
if ($this->msg) {
if ($this->msg) {
$code.= '
$code .= '
<div><strong>'.htmlspecialchars($this->msg).'</strong></div>';
<div><strong>' . htmlspecialchars($this->msg) . '</strong></div>';
}
#TODO need to add parameters
#TODO need to add parameters
if ($useOwnForm AND trim($code)) {
$code = '
<form action="' . t3lib_div::getIndpEnv('SCRIPT_NAME') . '" method="post" name="' . $this->formName . '" enctype="' . $TYPO3_CONF_VARS['SYS']['form_enctype'] . '">' . $code . '</form>';
......
}
/********************************
*
* Misc
......
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_modSettings.php']) {
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_modSettings.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_modSettings.php']);
}
(38-38/93)