See changelog (2004-08-21). Localization features, Tab menus, few bugs fixed.
[Packages/TYPO3.CMS.git] / typo3 / tce_db.php
1 <?php
2 /***************************************************************
3 * Copyright notice
4 *
5 * (c) 1999-2004 Kasper Skaarhoj (kasper@typo3.com)
6 * All rights reserved
7 *
8 * This script is part of the TYPO3 project. The TYPO3 project is
9 * free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * The GNU General Public License can be found at
15 * http://www.gnu.org/copyleft/gpl.html.
16 * A copy is found in the textfile GPL.txt and important notices to the license
17 * from the author is found in LICENSE.txt distributed with these scripts.
18 *
19 *
20 * This script is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * This copyright notice MUST APPEAR in all copies of the script!
26 ***************************************************************/
27 /**
28 * TCE gateway (TYPO3 Core Engine) for database handling
29 * This script is a gateway for POST forms to class.t3lib_TCEmain that manipulates all information in the database!!
30 * For syntax and API information, see the document 'TYPO3 Core APIs'
31 *
32 * $Id$
33 * Revised for TYPO3 3.6 July/2003 by Kasper Skaarhoj
34 *
35 * @author Kasper Skaarhoj <kasper@typo3.com>
36 */
37 /**
38 * [CLASS/FUNCTION INDEX of SCRIPT]
39 *
40 *
41 *
42 * 80: class SC_tce_db
43 * 107: function init()
44 * 161: function initClipboard()
45 * 181: function main()
46 * 217: function finish()
47 *
48 * TOTAL FUNCTIONS: 4
49 * (This index is automatically created/updated by the extension "extdeveval")
50 *
51 */
52
53
54 require ('init.php');
55 require ('template.php');
56 require_once (PATH_t3lib.'class.t3lib_tcemain.php');
57
58
59
60
61
62
63
64
65
66
67
68
69 /**
70 * Script Class, creating object of t3lib_TCEmain and sending the posted data to the object.
71 * Used by many smaller forms/links in TYPO3, including the QuickEdit module.
72 * Is not used by alt_doc.php though (main form rendering script) - that uses the same class (TCEmain) but makes its own initialization (to save the redirect request).
73 * For all other cases than alt_doc.php it is recommended to use this script for submitting your editing forms - but the best solution in any case would probably be to link your application to alt_doc.php, that will give you easy form-rendering as well.
74 *
75 * @author Kasper Skaarhoj <kasper@typo3.com>
76 * @package TYPO3
77 * @subpackage core
78 */
79 class SC_tce_db {
80
81 // Internal, static: GPvar
82 var $flags; // Array. Accepts options to be set in TCE object. Currently it supports "reverseOrder" (boolean).
83 var $data; // Data array on the form [tablename][uid][fieldname] = value
84 var $cmd; // Command array on the form [tablename][uid][command] = value. This array may get additional data set internally based on clipboard commands send in CB var!
85 var $mirror; // Array passed to ->setMirror.
86 var $cacheCmd; // Cache command sent to ->clear_cacheCmd
87 var $redirect; // Redirect URL. Script will redirect to this location after performing operations (unless errors has occured)
88 var $prErr; // Boolean. If set, errors will be printed on screen instead of redirection. Should always be used, otherwise you will see no errors if they happen.
89 # var $_disableRTE;
90 var $CB; // Clipboard command array. May trigger changes in "cmd"
91 var $vC; // Verification code
92 var $uPT; // Boolean. Update Page Tree Trigger. If set and the manipulated records are pages then the update page tree signal will be set.
93
94 // Internal, dynamic:
95 var $include_once=array(); // Files to include after init() function is called:
96 var $tce; // TCEmain object
97
98
99
100
101 /**
102 * Initialization of the class
103 *
104 * @return void
105 */
106 function init() {
107 global $BE_USER;
108
109 // GPvars:
110 $this->flags = t3lib_div::_GP('flags');
111 $this->data = t3lib_div::_GP('data');
112 $this->cmd = t3lib_div::_GP('cmd');
113 $this->mirror = t3lib_div::_GP('mirror');
114 $this->cacheCmd = t3lib_div::_GP('cacheCmd');
115 $this->redirect = t3lib_div::_GP('redirect');
116 $this->prErr = t3lib_div::_GP('prErr');
117 $this->_disableRTE = t3lib_div::_GP('_disableRTE');
118 $this->CB = t3lib_div::_GP('CB');
119 $this->vC = t3lib_div::_GP('vC');
120 $this->uPT = t3lib_div::_GP('uPT');
121
122 // Creating TCEmain object
123 $this->tce = t3lib_div::makeInstance('t3lib_TCEmain');
124 $this->tce->stripslashes_values=0;
125
126 // Configuring based on user prefs.
127 if ($BE_USER->uc['recursiveDelete']) {
128 $this->tce->deleteTree = 1; // True if the delete Recursive flag is set.
129 }
130 if ($BE_USER->uc['copyLevels']) {
131 $this->tce->copyTree = t3lib_div::intInRange($BE_USER->uc['copyLevels'],0,100); // Set to number of page-levels to copy.
132 }
133 if ($BE_USER->uc['neverHideAtCopy']) {
134 $this->tce->neverHideAtCopy = 1;
135 }
136
137 $TCAdefaultOverride = $BE_USER->getTSConfigProp('TCAdefaults');
138 if (is_array($TCAdefaultOverride)) {
139 $this->tce->setDefaultsFromUserTS($TCAdefaultOverride);
140 }
141
142 // Reverse order.
143 if ($this->flags['reverseOrder']) {
144 $this->tce->reverseOrder=1;
145 }
146
147 # $this->tce->disableRTE = $this->_disableRTE;
148
149 // Clipboard?
150 if (is_array($this->CB)) {
151 $this->include_once[]=PATH_t3lib.'class.t3lib_clipboard.php';
152 }
153 }
154
155 /**
156 * Clipboard pasting and deleting.
157 *
158 * @return void
159 */
160 function initClipboard() {
161 if (is_array($this->CB)) {
162 $clipObj = t3lib_div::makeInstance('t3lib_clipboard');
163 $clipObj->initializeClipboard();
164 if ($this->CB['paste']) {
165 $clipObj->setCurrentPad($this->CB['pad']);
166 $this->cmd = $clipObj->makePasteCmdArray($this->CB['paste'],$this->cmd);
167 }
168 if ($this->CB['delete']) {
169 $clipObj->setCurrentPad($this->CB['pad']);
170 $this->cmd = $clipObj->makeDeleteCmdArray($this->cmd);
171 }
172 }
173 }
174
175 /**
176 * Executing the posted actions ...
177 *
178 * @return void
179 */
180 function main() {
181 global $BE_USER,$TYPO3_CONF_VARS;
182
183 // LOAD TCEmain with data and cmd arrays:
184 $this->tce->start($this->data,$this->cmd);
185 if (is_array($this->mirror)) {$this->tce->setMirror($this->mirror);}
186
187 // Checking referer / executing
188 $refInfo=parse_url(t3lib_div::getIndpEnv('HTTP_REFERER'));
189 $httpHost = t3lib_div::getIndpEnv('TYPO3_HOST_ONLY');
190 if ($httpHost!=$refInfo['host'] && $this->vC!=$BE_USER->veriCode() && !$TYPO3_CONF_VARS['SYS']['doNotCheckReferer']) {
191 $this->tce->log('',0,0,0,1,'Referer host "%s" and server host "%s" did not match and veriCode was not valid either!',1,array($refInfo['host'],$httpHost));
192 } else {
193 // Register uploaded files
194 $this->tce->process_uploads($GLOBALS['HTTP_POST_FILES']);
195
196 // Execute actions:
197 $this->tce->process_datamap();
198 $this->tce->process_cmdmap();
199
200 // Clearing cache:
201 $this->tce->clear_cacheCmd($this->cacheCmd);
202
203 // Update page tree?
204 if ($this->uPT && (isset($this->data['pages'])||isset($this->cmd['pages']))) {
205 t3lib_BEfunc::getSetUpdateSignal('updatePageTree');
206 }
207 }
208 }
209
210 /**
211 * Redirecting the user after the processing has been done.
212 * Might also display error messages directly, if any.
213 *
214 * @return void
215 */
216 function finish() {
217 // Prints errors, if...
218 if ($this->prErr) {
219 $this->tce->printLogErrorMessages($this->redirect);
220 }
221
222 if ($this->redirect && !$this->tce->debug) {
223 Header('Location: '.t3lib_div::locationHeaderUrl($this->redirect));
224 }
225 }
226 }
227
228 // Include extension?
229 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/tce_db.php']) {
230 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/tce_db.php']);
231 }
232
233
234
235
236
237
238
239 // Make instance:
240 $SOBE = t3lib_div::makeInstance('SC_tce_db');
241 $SOBE->init();
242
243 // Include files?
244 foreach($SOBE->include_once as $INC_FILE) include_once($INC_FILE);
245
246 $SOBE->initClipboard();
247 $SOBE->main();
248 $SOBE->finish();
249 ?>