[TASK] Remove require statements for classes
[Packages/TYPO3.CMS.git] / typo3 / show_item.php
1 <?php
2 /***************************************************************
3 * Copyright notice
4 *
5 * (c) 1999-2011 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 * Shows information about a database or file item
29 *
30 * Revised for TYPO3 3.7 May/2004 by Kasper Skårhøj
31 *
32 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
33 */
34
35
36 $GLOBALS['BACK_PATH'] = '';
37 require_once('init.php');
38
39 /**
40 * Extension of transfer data class
41 *
42 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
43 * @package TYPO3
44 * @subpackage core
45 */
46 class transferData extends t3lib_transferData {
47
48 var $formname = 'loadform';
49 var $loading = 1;
50
51 // Extra for show_item.php:
52 var $theRecord = Array();
53
54 /**
55 * Register item function.
56 *
57 * @param string $table Table name
58 * @param integer $id Record uid
59 * @param string $field Field name
60 * @param string $content Content string.
61 * @return void
62 */
63 function regItem($table, $id, $field, $content) {
64 t3lib_div::loadTCA($table);
65 $config = $GLOBALS['TCA'][$table]['columns'][$field]['config'];
66 switch($config['type']) {
67 case 'input':
68 if (isset($config['checkbox']) && $content == $config['checkbox']) {
69 $content = '';
70 break;
71 }
72 if (t3lib_div::inList($config['eval'], 'date')) {
73 $content = Date($GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'], $content);
74 }
75 break;
76 case 'group':
77 break;
78 case 'select':
79 break;
80 }
81 $this->theRecord[$field]=$content;
82 }
83 }
84
85 /**
86 * Script Class for showing information about an item.
87 *
88 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
89 * @package TYPO3
90 * @subpackage core
91 */
92 class SC_show_item {
93
94 // GET vars:
95 // Record table (or filename)
96 var $table;
97 // Record uid (or '' when filename)
98 var $uid;
99
100 // Internal, static:
101 // Page select clause
102 var $perms_clause;
103 // If TRUE, access to element is granted
104 var $access;
105 // Which type of element: "file" or "db"
106 var $type;
107 // Document Template Object
108 var $doc;
109
110 // Internal, dynamic:
111 // Content Accumulation
112 var $content;
113 // For type "db": Set to page record of the parent page of the item set (if type="db")
114 var $pageinfo;
115 // For type "db": The database record row.
116 var $row;
117
118 /**
119 * The fileObject if present
120 *
121 * @var t3lib_file_AbstractFile
122 */
123 protected $fileObject;
124
125 /**
126 * The folder obejct if present
127 *
128 * @var t3lib_file_Folder
129 */
130 protected $folderObject;
131
132 /**
133 * Initialization of the class
134 * Will determine if table/uid GET vars are database record or a file and if the user has access to view information about the item.
135 *
136 * @return void
137 */
138 function init() {
139 // Setting input variables.
140 $this->table = t3lib_div::_GET('table');
141 $this->uid = t3lib_div::_GET('uid');
142
143 // Initialize:
144 $this->perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
145 // Set to TRUE if there is access to the record / file.
146 $this->access = FALSE;
147 // Sets the type, "db" or "file". If blank, nothing can be shown.
148 $this->type = '';
149
150 // Checking if the $table value is really a table and if the user has access to it.
151 if (isset($GLOBALS['TCA'][$this->table])) {
152 t3lib_div::loadTCA($this->table);
153 $this->type = 'db';
154 $this->uid = intval($this->uid);
155
156 // Check permissions and uid value:
157 if ($this->uid && $GLOBALS['BE_USER']->check('tables_select', $this->table)) {
158 if ((string)$this->table == 'pages') {
159 $this->pageinfo = t3lib_BEfunc::readPageAccess($this->uid, $this->perms_clause);
160 $this->access = is_array($this->pageinfo) ? 1 : 0;
161 $this->row = $this->pageinfo;
162 } else {
163 $this->row = t3lib_BEfunc::getRecordWSOL($this->table, $this->uid);
164 if ($this->row) {
165 $this->pageinfo = t3lib_BEfunc::readPageAccess($this->row['pid'], $this->perms_clause);
166 $this->access = is_array($this->pageinfo) ? 1 : 0;
167 }
168 }
169
170 $treatData = t3lib_div::makeInstance('t3lib_transferData');
171 $treatData->renderRecord($this->table, $this->uid, 0, $this->row);
172 $cRow = $treatData->theRecord;
173 }
174 } elseif ($this->table == '_FILE' || $this->table == '_FOLDER' || $this->table == 'sys_file') {
175 $fileOrFolderObject = t3lib_file_Factory::getInstance()->retrieveFileOrFolderObject($this->uid);
176
177 if ($fileOrFolderObject instanceof t3lib_file_Folder) {
178 $this->folderObject = $fileOrFolderObject;
179 $this->access = $this->folderObject->checkActionPermission('read');
180 $this->type = 'folder';
181 } else {
182 $this->fileObject = $fileOrFolderObject;
183 $this->access = $this->fileObject->checkActionPermission('read');
184 $this->type = 'file';
185 $this->table = 'sys_file';
186 t3lib_div::loadTCA($this->table);
187 try {
188 $this->row = t3lib_BEfunc::getRecordWSOL($this->table, $this->fileObject->getUid());
189 } catch (Exception $e) {
190 $this->row = array();
191 }
192
193
194 }
195 }
196
197 // Initialize document template object:
198 $this->doc = t3lib_div::makeInstance('template');
199 $this->doc->backPath = $GLOBALS['BACK_PATH'];
200
201 // Starting the page by creating page header stuff:
202 $this->content .= $this->doc->startPage($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.viewItem'));
203 $this->content .= '<h3 class="t3-row-header">' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.viewItem') . '</h3>';
204 $this->content .= $this->doc->spacer(5);
205 }
206
207 /**
208 * Main function. Will generate the information to display for the item set internally.
209 *
210 * @return void
211 */
212 function main() {
213
214 if ($this->access) {
215 $returnLink = t3lib_div::sanitizeLocalUrl(t3lib_div::_GP('returnUrl'));
216 $returnLinkTag = $returnLink ? '<a href="' . $returnLink . '" class="typo3-goBack">' : '<a href="#" onclick="window.close();">';
217 // render type by user func
218 $typeRendered = FALSE;
219 if (is_array ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/show_item.php']['typeRendering'])) {
220 foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/show_item.php']['typeRendering'] as $classRef) {
221 $typeRenderObj = t3lib_div::getUserObj($classRef);
222 if (is_object($typeRenderObj) && method_exists($typeRenderObj, 'isValid') && method_exists($typeRenderObj, 'render')) {
223 if ($typeRenderObj->isValid($this->type, $this)) {
224 $this->content .= $typeRenderObj->render($this->type, $this);
225 $typeRendered = TRUE;
226 break;
227 }
228 }
229 }
230 }
231
232 // If type was not rendered use default rendering functions
233 if (!$typeRendered) {
234 // Branch out based on type:
235 switch ($this->type) {
236 case 'db':
237 $this->renderDBInfo();
238 break;
239 case 'file':
240 $this->renderFileInfo($returnLinkTag);
241 break;
242 case 'folder':
243 // @todo: implement a info about a folder
244 break;
245 }
246 }
247
248 // If return Url is set, output link to go back:
249 if (t3lib_div::sanitizeLocalUrl(t3lib_div::_GP('returnUrl'))) {
250 $this->content = $this->doc->section('', $returnLinkTag.'<strong>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.goBack', 1).'</strong></a><br /><br />').$this->content;
251
252 $this->content .= $this->doc->section('', '<br />'.$returnLinkTag.'<strong>'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.goBack', 1).'</strong></a>');
253 }
254 }
255 }
256
257 /**
258 * Main function. Will generate the information to display for the item set internally.
259 *
260 * @return void
261 */
262 function renderDBInfo() {
263
264 // Print header, path etc:
265 $code = $this->doc->getHeader($this->table, $this->row, $this->pageinfo['_thePath'], 1).'<br />';
266 $this->content.= $this->doc->section('', $code);
267
268 // Initialize variables:
269 $tableRows = array();
270 $i = 0;
271
272 // Traverse the list of fields to display for the record:
273 $fieldList = t3lib_div::trimExplode(',', $GLOBALS['TCA'][$this->table]['interface']['showRecordFieldList'], 1);
274 foreach ($fieldList as $name) {
275 $name = trim($name);
276 if ($GLOBALS['TCA'][$this->table]['columns'][$name]) {
277 if (!$GLOBALS['TCA'][$this->table]['columns'][$name]['exclude'] || $GLOBALS['BE_USER']->check('non_exclude_fields', $this->table . ':' . $name)) {
278 $i++;
279 $tableRows[] = '
280 <tr>
281 <td class="t3-col-header">' . $GLOBALS['LANG']->sL(t3lib_BEfunc::getItemLabel($this->table, $name), 1) . '</td>
282 <td>' . htmlspecialchars(t3lib_BEfunc::getProcessedValue($this->table, $name, $this->row[$name], 0, 0, FALSE, $this->row['uid'])) . '</td>
283 </tr>';
284 }
285 }
286 }
287
288 // Create table from the information:
289 $tableCode = '
290 <table border="0" cellpadding="0" cellspacing="0" id="typo3-showitem" class="t3-table-info">
291 '.implode('', $tableRows).'
292 </table>';
293 $this->content .= $this->doc->section('', $tableCode);
294
295 // Add path and table information in the bottom:
296 $code = '';
297 $code .= $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.path') . ': ' . t3lib_div::fixed_lgd_cs($this->pageinfo['_thePath'], -48) . '<br />';
298 $code .= $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:labels.table') . ': ' . $GLOBALS['LANG']->sL($GLOBALS['TCA'][$this->table]['ctrl']['title']) . ' (' . $this->table . ') - UID: ' . $this->uid . '<br />';
299 $this->content .= $this->doc->section('', $code);
300
301 // References:
302 $this->content .= $this->doc->section($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesToThisItem'), $this->makeRef($this->table, $this->row['uid']));
303
304 // References:
305 $this->content .= $this->doc->section($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesFromThisItem'), $this->makeRefFrom($this->table, $this->row['uid']));
306 }
307
308 /**
309 * Main function. Will generate the information to display for the item set internally.
310 *
311 * @param string $returnLinkTag <a> tag closing/returning.
312 * @return void
313 */
314 function renderFileInfo($returnLinkTag) {
315 $fileExtension = $this->fileObject->getExtension();
316 // Setting header:
317 $code = '<div class="fileInfoContainer">'
318 . t3lib_iconWorks::getSpriteIconForFile($fileExtension) . '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.file', TRUE) . ':</strong> ' . $this->fileObject->getName()
319 . '&nbsp;&nbsp;'
320 . '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.filesize') . ':</strong> '
321 . t3lib_div::formatSize($this->fileObject->getSize())
322 . '</div>
323 ';
324 $this->content .= $this->doc->section('', $code);
325 $this->content .= $this->doc->divider(2);
326
327 // If the file was an image...
328 // @todo: add this check in the domain model in some kind of way, or in the processing folder
329 if (t3lib_div::inList($GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'], $fileExtension)) {
330 // @todo: find a way to make getimagesize part of the t3lib_file object
331 $imgInfo = @getimagesize($this->fileObject->getForLocalProcessing(FALSE));
332
333 $thumbUrl = $this->fileObject->process(
334 t3lib_file_ProcessedFile::CONTEXT_IMAGEPREVIEW,
335 array('width' => '150m', 'height' => '150m')
336 )->getPublicUrl(TRUE);
337 $code = '<div class="fileInfoContainer fileDimensions">'
338 . '<strong>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.dimensions')
339 . ':</strong> ' . $imgInfo[0] . 'x' . $imgInfo[1] . ' '
340 . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.pixels') . '</div>';
341 $code .= '<br />
342 <div align="center">' . $returnLinkTag . '<img src="' . $thumbUrl . '" alt="' . htmlspecialchars(trim($this->fileObject->getName())) . '" title="' . htmlspecialchars(trim($this->fileObject->getName())) . '" /></a></div>';
343 $this->content .= $this->doc->section('', $code);
344 } elseif ($fileExtension == 'ttf') {
345 $thumbUrl = $this->fileObject->process(
346 t3lib_file_ProcessedFile::CONTEXT_IMAGEPREVIEW,
347 array('width' => '530m', 'height' => '600m')
348 )->getPublicUrl(TRUE);
349 $thumb = '<br />
350 <div align="center">' . $returnLinkTag . '<img src="' . $thumbUrl . '" border="0" title="' . htmlspecialchars(trim($this->fileObject->getName())) . '" alt="" /></a></div>';
351 $this->content .= $this->doc->section('', $thumb);
352 }
353
354 // Initialize variables:
355 $tableRows = array();
356 $i = 0;
357
358 // Traverse the list of fields to display for the record:
359 $fieldList = t3lib_div::trimExplode(',', $GLOBALS['TCA'][$this->table]['interface']['showRecordFieldList'], TRUE);
360 foreach ($fieldList as $name) {
361 $name = trim($name);
362 if ($GLOBALS['TCA'][$this->table]['columns'][$name]) {
363 if (!$GLOBALS['TCA'][$this->table]['columns'][$name]['exclude'] || $GLOBALS['BE_USER']->check('non_exclude_fields', $this->table . ':' . $name)) {
364 $i++;
365 $tableRows[] = '
366 <tr>
367 <td class="t3-col-header">' . $GLOBALS['LANG']->sL(t3lib_BEfunc::getItemLabel($this->table, $name), 1) . '</td>
368 <td>' . htmlspecialchars(t3lib_BEfunc::getProcessedValue($this->table, $name, $this->row[$name], 0, 0, FALSE, $this->row['uid'])) . '</td>
369 </tr>';
370 }
371 }
372 }
373
374 // Create table from the information:
375 $tableCode = '
376 <table border="0" cellpadding="0" cellspacing="0" id="typo3-showitem" class="t3-table-info">
377 ' . implode('', $tableRows) . '
378 </table>';
379 $this->content .= $this->doc->section('', $tableCode);
380
381
382 if ($this->fileObject->isIndexed()) {
383 // References:
384 $this->content .= $this->doc->section($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.referencesToThisItem'), $this->makeRef('_FILE', $this->fileObject));
385 }
386 }
387
388 /**
389 * End page and print content
390 *
391 * @return void
392 */
393 function printContent() {
394 $this->content.= $this->doc->endPage();
395 $this->content = $this->doc->insertStylesAndJS($this->content);
396 echo $this->content;
397 }
398
399 /**
400 * Get table field name
401 *
402 * @param string $tableName Table name
403 * @param string $fieldName Field name
404 * @return string Field name
405 */
406 public function getFieldName($tableName, $fieldName) {
407 t3lib_div::loadTCA($tableName);
408 if ($GLOBALS['TCA'][$tableName]['columns'][$fieldName]['label'] !== NULL) {
409 $field = $GLOBALS['LANG']->sL($GLOBALS['TCA'][$tableName]['columns'][$fieldName]['label']);
410 if (trim($field) === '') {
411 $field = $fieldName;
412 }
413 } else {
414 $field = $fieldName;
415 }
416 return $field;
417 }
418
419 /**
420 * Make reference display
421 *
422 * @param string $table Table name
423 * @param string $ref Filename or uid
424 * @return string HTML
425 */
426 function makeRef($table, $ref) {
427
428 if ($table === '_FILE') {
429 // Look up the path:
430 $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
431 '*',
432 'sys_file_reference',
433 'uid_local=' . $ref->getUid()
434 );
435 } else {
436 // Look up the path:
437 $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
438 '*',
439 'sys_refindex',
440 'ref_table=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($table, 'sys_refindex') . ' AND ref_uid=' . intval($ref) .
441 ' AND deleted=0'
442 );
443 }
444 // Compile information for title tag:
445 $infoData = array();
446 if (count($rows)) {
447 $infoData[] = '<tr class="t3-row-header">' .
448 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.table') . '</td>' .
449 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.title') . '</td>' .
450 '<td>[uid]</td>' .
451 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.field') . '</td>' .
452 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.flexpointer') . '</td>' .
453 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.softrefKey') . '</td>' .
454 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.sorting') . '</td>' .
455 '</tr>';
456 }
457 foreach ($rows as $row) {
458 if($table === '_FILE') {
459 $row = $this->mapFileReferenceOnRefIndex($row);
460 }
461 $record = t3lib_BEfunc::getRecord($row['tablename'], $row['recuid']);
462 $infoData[] = '<tr class="bgColor4">' .
463 '<td>' . $GLOBALS['LANG']->sL($GLOBALS['TCA'][$row['tablename']]['ctrl']['title'], TRUE) . '</td>' .
464 '<td>' . t3lib_BEfunc::getRecordTitle($row['tablename'], $record, TRUE) . '</td>' .
465 '<td><span title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_common.xlf:page') . ': ' .
466 htmlspecialchars(t3lib_BEfunc::getRecordTitle('pages', t3lib_BEfunc::getRecord('pages', $record['pid']))) .
467 ' (uid=' . $record['pid'] . ')">' . $record['uid'] . '</span></td>' .
468 '<td>' . htmlspecialchars($this->getFieldName($row['tablename'], $row['field'])) . '</td>' .
469 '<td>' . htmlspecialchars($row['flexpointer']) . '</td>' .
470 '<td>' . htmlspecialchars($row['softref_key']) . '</td>' .
471 '<td>' . htmlspecialchars($row['sorting']) . '</td>' .
472 '</tr>';
473 }
474
475 return count($infoData)
476 ? '<table border="0" cellpadding="0" cellspacing="0" class="typo3-dblist">' . implode('', $infoData) . '</table>'
477 : '';
478 }
479
480 /**
481 * Maps results from the fal file reference table on the
482 * structure of the normal reference index table.
483 *
484 * @param array $fileReference
485 * @return array
486 */
487 protected function mapFileReferenceOnRefIndex(array $fileReference) {
488 return array(
489 'recuid' => $fileReference['uid_foreign'],
490 'tablename' => $fileReference['tablenames'],
491 'field' => $fileReference['fieldname'],
492 'flexpointer' => '',
493 'softref_key' => '',
494 'sorting' => $fileReference['sorting_foreign']
495 );
496 }
497
498 /**
499 * Make reference display (what this elements points to)
500 *
501 * @param string $table Table name
502 * @param string $ref Filename or uid
503 * @return string HTML
504 */
505 function makeRefFrom($table, $ref) {
506
507 // Look up the path:
508 $rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
509 '*',
510 'sys_refindex',
511 'tablename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($table, 'sys_refindex') .
512 ' AND recuid=' . intval($ref)
513 );
514
515 // Compile information for title tag:
516 $infoData = array();
517 if (count($rows)) {
518 $infoData[] = '<tr class="t3-row-header">' .
519 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.field') . '</td>' .
520 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.flexpointer') . '</td>' .
521 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.softrefKey') . '</td>' .
522 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.sorting') . '</td>' .
523 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.refTable') . '</td>' .
524 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.refUid') . '</td>' .
525 '<td>' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:show_item.php.refString') . '</td>' .
526 '</tr>';
527 }
528 foreach ($rows as $row) {
529 $infoData[] = '<tr class="bgColor4">' .
530 '<td>' . htmlspecialchars($this->getFieldName($table, $row['field'])) . '</td>' .
531 '<td>' . htmlspecialchars($row['flexpointer']) . '</td>' .
532 '<td>' . htmlspecialchars($row['softref_key']) . '</td>' .
533 '<td>' . htmlspecialchars($row['sorting']) . '</td>' .
534 '<td>' . $GLOBALS['LANG']->sL($GLOBALS['TCA'][$row['ref_table']]['ctrl']['title'], TRUE) . '</td>' .
535 '<td>' . htmlspecialchars($row['ref_uid']) . '</td>' .
536 '<td>' . htmlspecialchars($row['ref_string']) . '</td>' .
537 '</tr>';
538 }
539
540 return count($infoData)
541 ? '<table border="0" cellpadding="0" cellspacing="0" class="typo3-dblist">' . implode('', $infoData) . '</table>'
542 : '';
543 }
544 }
545
546 // Make instance:
547 $SOBE = t3lib_div::makeInstance('SC_show_item');
548 $SOBE->init();
549 $SOBE->main();
550 $SOBE->printContent();
551
552 ?>