Fixed bug #15580: Add calls to logDeprecatedFunction() for more deprecated functions...
[Packages/TYPO3.CMS.git] / typo3 / sysext / cms / tslib / class.tslib_fetce.php
1 <?php
2 /***************************************************************
3 * Copyright notice
4 *
5 * (c) 1999-2010 Kasper Skårhøj (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 * Form-data processing
29 * included from index_ts.php
30 *
31 * $Id$
32 * Revised for TYPO3 3.6 June/2003 by Kasper Skårhøj
33 *
34 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
35 */
36 /**
37 * [CLASS/FUNCTION INDEX of SCRIPT]
38 *
39 *
40 *
41 * 83: class tslib_feTCE
42 * 100: function start($data,$FEData)
43 * 187: function checkDoublePostExist($table,$doublePostField,$key)
44 * 200: function calcDoublePostKey($array)
45 * 212: function includeScripts()
46 * 232: function execNEWinsert($table, $dataArr)
47 * 258: function clear_cacheCmd($cacheCmd)
48 * 274: function getConf($table)
49 *
50 * TOTAL FUNCTIONS: 7
51 * (This index is automatically created/updated by the extension "extdeveval")
52 *
53 */
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 /**
74 * Form-data processing class.
75 * Used by the FE_DATA object found in TSref. Quite old fashioned and used only by a few extensions, like good old 'tt_guest' and 'tt_board'
76 *
77 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
78 * @package TYPO3
79 * @subpackage tslib
80 * @deprecated since TYPO3 3.6
81 * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=342&cHash=fdf55adb3b
82 */
83 class tslib_feTCE {
84
85 var $extScripts=array();
86 var $extScriptsConf=array();
87 var $newData=array();
88 var $extraList = 'pid';
89
90 /**
91 * Starting the processing of user input.
92 * Traverses the input data and fills in the array, $this->extScripts with references to files which are then included by includeScripts() (called AFTER start() in tslib_fe)
93 * These scripts will then put the content into the database.
94 *
95 * @param array Input data coming from typ. $_POST['data'] vars
96 * @param array TypoScript configuration for the FEDATA object, $this->config['FEData.']
97 * @return void
98 * @see tslib_fe::fe_tce(), includeScripts()
99 */
100 function start($data,$FEData) {
101 foreach ($data as $table => $id_arr) {
102 t3lib_div::loadTCA($table);
103 if (is_array($id_arr)) {
104 $sep=$FEData[$table.'.']['separator']?$FEData[$table.'.']['separator']:LF;
105 foreach ($id_arr as $id => $field_arr) {
106 $this->newData[$table][$id]=Array();
107 if (strstr($id,'NEW')) { // NEW
108 // Defaults:
109 if ($FEData[$table.'.']['default.']) {
110 $this->newData[$table][$id] = $FEData[$table.'.']['default.'];
111 }
112 if ($FEData[$table.'.']['autoInsertPID']) {
113 $this->newData[$table][$id]['pid'] = intval($GLOBALS['TSFE']->page['uid']);
114 }
115 // Insert external data:
116 if (is_array($field_arr)) {
117 foreach ($field_arr as $field => $value) {
118 if ($FEData[$table.'.']['allowNew.'][$field]) {
119 if (is_array($value)) {
120 $this->newData[$table][$id][$field] = implode($sep,$value);
121 } else {
122 $this->newData[$table][$id][$field] = $value;
123 }
124 }
125 }
126 }
127 // Double post check
128 $dPC_field = $FEData[$table.'.']['doublePostCheck'];
129 if (is_array($this->newData[$table][$id]) && $dPC_field) {
130 $doublePostCheckKey = $this->calcDoublePostKey($this->newData[$table][$id]);
131 if ($this->checkDoublePostExist($table,$dPC_field,$doublePostCheckKey)) {
132 unset($this->newData[$table][$id]); // Unsetting the whole thing, because it's not going to be saved.
133 $GLOBALS['TT']->setTSlogMessage('"FEData": Submitted record to table $table was doublePosted (key: $doublePostCheckKey). Nothing saved.',2);
134 } else {
135 $this->newData[$table][$id][$dPC_field] = $doublePostCheckKey; // Setting key value
136 $this->extraList.=','.$dPC_field;
137 }
138 }
139 } else { // EDIT
140 // Insert external data:
141 if (is_array($field_arr)) {
142 foreach ($field_arr as $field => $value) {
143 if ($FEData[$table.'.']['allowEdit.'][$field]) {
144 if (is_array($value)) {
145 $this->newData[$table][$id][$field] = implode($sep,$value);
146 } else {
147 $this->newData[$table][$id][$field] = $value;
148 }
149 }
150 }
151 }
152 // Internal Override
153 if (is_array($FEData[$table.'.']['overrideEdit.'])) {
154 foreach ($FEData[$table.'.']['overrideEdit.'] as $field => $value) {
155 $this->newData[$table][$id][$field] = $value;
156 }
157 }
158 }
159 if ($FEData[$table.'.']['userIdColumn']) {
160 $this->newData[$table][$id][$FEData[$table.'.']['userIdColumn']] = intval($GLOBALS['TSFE']->fe_user->user['uid']);
161 }
162 }
163 $incFile = $GLOBALS['TSFE']->tmpl->getFileName($FEData[$table.'.']['processScript']);
164 if ($incFile) {
165 $this->extScripts[$table]=$incFile;
166 $this->extScriptsConf[$table]=$FEData[$table.'.']['processScript.'];
167 }
168 }
169 }
170 }
171
172 /**
173 * Checking if a "double-post" exists already.
174 * "Double-posting" is if someone refreshes a page with a form for the message board or guestbook and thus submits the element twice. Checking for double-posting prevents the second submission from being stored. This is done by saving the first record with a MD5 hash of the content - if this hash exists already, the record cannot be saved.
175 *
176 * @param string The database table to check
177 * @param string The fieldname from the database table to search
178 * @param integer The hash value to search for.
179 * @return integer The number of found rows. If zero then no "double-post" was found and its all OK.
180 * @access private
181 */
182 function checkDoublePostExist($table,$doublePostField,$key) {
183 return $GLOBALS['TYPO3_DB']->exec_SELECTcountRows(
184 '*',
185 $table,
186 $doublePostField . '=' . intval($key)
187 );
188 }
189
190 /**
191 * Creates the double-post hash value from the input array
192 *
193 * @param array The array with key/values to hash
194 * @return integer And unsigned 32bit integer hash
195 * @access private
196 */
197 function calcDoublePostKey($array) {
198 ksort($array); // Sorting by key
199 $doublePostCheckKey = hexdec(substr(md5(serialize($array)),0,8)); // Making key
200 return $doublePostCheckKey;
201 }
202
203 /**
204 * Includes the submit scripts found in ->extScripts (filled in by the start() function)
205 *
206 * @return void
207 * @see tslib_fe::fe_tce(), includeScripts()
208 */
209 function includeScripts() {
210 foreach ($this->extScripts as $incFile_table => $incFile) {
211 if (@is_file($incFile) && $GLOBALS['TSFE']->checkFileInclude($incFile)) {
212 include($incFile); // Always start the incFiles with a check of the object fe_tce. is_object($this);
213 $GLOBALS['TT']->setTSlogMessage('Included '.$incFile,0);
214 } else $GLOBALS['TT']->setTSlogMessage('"'.$incFile.'" was not found!',2);
215 }
216 }
217
218 /**
219 * Method available to the submit scripts for creating insert queries.
220 * Automatically adds tstamp, crdate, cruser_id field/value pairs.
221 * Will allow only field names which are either found in $TCA[...][columns] OR in the $this->extraList
222 * Executes an insert query!
223 *
224 * @param string The table name for which to create the insert statement
225 * @param array Array with key/value pairs being field/values (already escaped)
226 * @return void
227 */
228 function execNEWinsert($table, $dataArr) {
229 $extraList=$this->extraList;
230 if ($GLOBALS['TCA'][$table]['ctrl']['tstamp']) {
231 $field = $GLOBALS['TCA'][$table]['ctrl']['tstamp'];
232 $dataArr[$field] = $GLOBALS['EXEC_TIME'];
233 $extraList .= ',' . $field;
234 }
235 if ($GLOBALS['TCA'][$table]['ctrl']['crdate']) {
236 $field = $GLOBALS['TCA'][$table]['ctrl']['crdate'];
237 $dataArr[$field] = $GLOBALS['EXEC_TIME'];
238 $extraList .= ',' . $field;
239 }
240 if ($GLOBALS['TCA'][$table]['ctrl']['cruser_id']) {$field=$GLOBALS['TCA'][$table]['ctrl']['cruser_id']; $dataArr[$field]=0; $extraList.=','.$field;}
241
242 unset($dataArr['uid']); // uid can never be set
243 $insertFields = array();
244
245 foreach($dataArr as $f => $v) {
246 if (t3lib_div::inList($extraList,$f) || isset($GLOBALS['TCA'][$table]['columns'][$f])) {
247 $insertFields[$f] = $v;
248 }
249 }
250
251 $GLOBALS['TYPO3_DB']->exec_INSERTquery($table, $insertFields);
252 }
253
254 /**
255 * Clear cache for page id.
256 * If the page id is the current page, then set_no_cache() is called (so page caching is disabled)
257 *
258 * @param integer The page id for which to clear the cache
259 * @return void
260 * @see tslib_fe::set_no_cache()
261 */
262 function clear_cacheCmd($cacheCmd) {
263 $cacheCmd = intval($cacheCmd);
264
265 if ($cacheCmd) {
266 if (TYPO3_UseCachingFramework) {
267 $pageCache = $GLOBALS['typo3CacheManager']->getCache('cache_pages');
268 $pageCache->flushByTag('pageId_' . $cacheCmd);
269 } else {
270 $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_pages', 'page_id = ' . $cacheCmd);
271 }
272
273 if ($cacheCmd == intval($GLOBALS['TSFE']->id)) {
274 // Setting no_cache true if the cleared-cache page is the current page!
275 $GLOBALS['TSFE']->set_no_cache();
276 }
277 }
278 }
279
280 /**
281 * Return TypoScript configuration for a table name
282 *
283 * @param string The table name for which to return TypoScript configuration (From TS: FEData.[table])
284 * @return array TypoScript properties from FEData.[table] - if exists.
285 */
286 function getConf($table) {
287 return $this->extScriptsConf[$table];
288 }
289 }
290
291
292
293 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_fetce.php']) {
294 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['tslib/class.tslib_fetce.php']);
295 }
296
297 ?>