*/ /** * [CLASS/FUNCTION INDEX of SCRIPT] * * * * 49: class tx_tstemplateinfo extends t3lib_extobjbase * 63: function tableRow($label, $data, $field) * 77: function procesResources($resources, $func=false) * 117: function resourceListForCopy($id, $template_uid) * 143: function initialize_editor($pageId, $template_uid=0) * 160: function main() * * TOTAL FUNCTIONS: 5 * (This index is automatically created/updated by the extension "extdeveval") * */ require_once(PATH_t3lib."class.t3lib_extobjbase.php"); class tx_tstemplateinfo extends t3lib_extobjbase { /* */ protected $tce_processed = false; // indicator for t3editor, whether data is stored /* */ /** * Creates a row for a HTML table * * @param string $label: The label to be shown (e.g. 'Title:', 'Sitetitle:') * @param string $data: The data/information to be shown (e.g. 'Template for my site') * @param string $field: The field/variable to be sent on clicking the edit icon (e.g. 'title', 'sitetitle') * @return string A row for a HTML table */ function tableRow($label, $data, $field) { $ret = ''; $ret.= ''; $ret.= ''.$label.'  '.$data.' '; return $ret; } /** * Renders HTML table with available template resources/files * * @param string $resources: List of resources/files to be shown (e.g. 'file_01.txt,file.txt') * @param boolean $func: Whether to render functions like 'to top' or 'delete' for each resource (default: false) * @return string HTML table with available template resources/files */ function procesResources($resources, $func=false) { $arr = t3lib_div::trimExplode(',', $resources.',,', 1); $out = ''; $bgcol = ($func ? ' class="bgColor4"' : ''); foreach ($arr as $k => $v) { $path = PATH_site.$GLOBALS['TCA']['sys_template']['columns']['resources']['config']['uploadfolder'].'/'.$v; $functions = ''; if ($func) { $functions = 'Delete: '; $functions.= 'To top: '; $functions.= ''; $fI = t3lib_div::split_fileref($v); if (t3lib_div::inList($this->pObj->textExtensions,$fI['fileext'])) { $functions.= ''; } $functions.= ''; } $thumb = t3lib_BEfunc::thumbCode(array('resources' => $v), 'sys_template', 'resources', $GLOBALS['BACK_PATH'], ''); $out.= ''.$v.'   '.t3lib_div::formatSize(@filesize($path)).' '.$functions.''.trim($thumb).''; } if ($out) { if ($func) { $out = ''.$out.'
'; $out = '
'.$out.'
'; } else { $out = ''.$out.'
'; } } return $out; } /** * Renders HTML table with all available template resources/files in the current rootline that could be copied * * @param integer $id: The uid of the current page * @param integer $template_uid: The uid of the template record to be rendered (only if more than one template on the current page) * @return string HTML table with all available template resources/files in the current rootline that could be copied */ function resourceListForCopy($id, $template_uid) { global $tmpl; $sys_page = t3lib_div::makeInstance('t3lib_pageSelect'); $rootLine = $sys_page->getRootLine($id); $tmpl->runThroughTemplates($rootLine, $template_uid); // This generates the constants/config + hierarchy info for the template. $theResources = t3lib_div::trimExplode(',', $tmpl->resources, 1); foreach ($theResources as $k => $v) { $fI = pathinfo($v); if (t3lib_div::inList($this->pObj->textExtensions,strtolower($fI['extension']))) { $path = PATH_site.$GLOBALS['TCA']['sys_template']['columns']['resources']['config']['uploadfolder'].'/'.$v; $thumb = t3lib_BEfunc::thumbCode(array('resources' => $v), 'sys_template', 'resources', $GLOBALS['BACK_PATH'], ''); $out.= ''.$v.'   '.t3lib_div::formatSize(@filesize($path)).' '.trim($thumb).''; } } $out = ($out ? ''.$out.'
' : ''); return $out; } /** * Create an instance of t3lib_tsparser_ext in $GLOBALS['tmpl'] and looks for the first (visible) template * record. If $template_uid was given and greater than zero, this record will be checked. * * @param integer $id: The uid of the current page * @param integer $template_uid: The uid of the template record to be rendered (only if more than one template on the current page) * @return boolean Returns true if a template record was found, otherwise false */ function initialize_editor($pageId, $template_uid=0) { // Initializes the module. Done in this function because we may need to re-initialize if data is submitted! global $tmpl,$tplRow,$theConstants; $tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext'); // Defined global here! $tmpl->tt_track = 0; // Do not log time-performance information $tmpl->init(); $tplRow = $tmpl->ext_getFirstTemplate($pageId, $template_uid); // Get the row of the first VISIBLE template of the page. whereclause like the frontend. return (is_array($tplRow) ? true : false); } /** * The main processing method if this class * * @return string Information of the template status or the taken actions as HTML string */ function main() { global $SOBE,$BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS; global $tmpl,$tplRow,$theConstants; $edit = $this->pObj->edit; $e = $this->pObj->e; t3lib_div::loadTCA('sys_template'); // ************************** // Create extension template // ************************** $this->pObj->createTemplate($this->pObj->id); // ************************** // Checking for more than one template an if, set a menu... // ************************** $manyTemplatesMenu = $this->pObj->templateMenu(); $template_uid = 0; if ($manyTemplatesMenu) { $template_uid = $this->pObj->MOD_SETTINGS['templatesOnPage']; } // ************************** // Initialize // ************************** $existTemplate = $this->initialize_editor($this->pObj->id, $template_uid); // initialize if ($existTemplate) { $saveId = ($tplRow['_ORIG_uid'] ? $tplRow['_ORIG_uid'] : $tplRow['uid']); // Update template ? $POST = t3lib_div::_POST(); if ($POST['submit']) { require_once(PATH_t3lib.'class.t3lib_tcemain.php'); // Set the data to be saved $recData = array(); $alternativeFileName = array(); $resList = $tplRow['resources']; $tmp_upload_name = ''; $tmp_newresource_name = ''; // Set this to blank if (is_array($POST['data'])) { foreach ($POST['data'] as $field => $val) { switch ($field) { case 'constants': case 'config': case 'title': case 'sitetitle': case 'description': $recData['sys_template'][$saveId][$field] = $val; break; case 'resources': $tmp_upload_name = t3lib_div::upload_to_tempfile($_FILES['resources']['tmp_name']); // If there is an uploaded file, move it for the sake of safe_mode. if ($tmp_upload_name) { if ($tmp_upload_name!='none' && $_FILES['resources']['name']) { $alternativeFileName[$tmp_upload_name] = trim($_FILES['resources']['name']); $resList = $tmp_upload_name.','.$resList; } } break; case 'new_resource': $newName = trim(t3lib_div::_GP('new_resource')); if ($newName) { $newName.= '.'.t3lib_div::_GP('new_resource_ext'); $tmp_newresource_name = t3lib_div::tempnam('new_resource_'); $alternativeFileName[$tmp_newresource_name] = $newName; $resList = $tmp_newresource_name.','.$resList; } break; case 'makecopy_resource': if (is_array($val)) { $resList = ','.$resList.','; foreach ($val as $k => $file) { $tmp_name = PATH_site.$TCA['sys_template']['columns']['resources']['config']['uploadfolder'].'/'.$file; $resList = $tmp_name.','.$resList; } } break; case 'remove_resource': if (is_array($val)) { $resList = ','.$resList.','; foreach ($val as $k => $file) { $resList = str_replace(','.$file.',', ',', $resList); } } break; case 'totop_resource': if (is_array($val)) { $resList = ','.$resList.','; foreach ($val as $k => $file) { $resList = str_replace(','.$file.',', ',', $resList); $resList = ','.$file.$resList; } } break; } } } $resList=implode(',', t3lib_div::trimExplode(',', $resList, 1)); if (strcmp($resList, $tplRow['resources'])) { $recData['sys_template'][$saveId]['resources'] = $resList; } if (count($recData)) { // Create new tce-object $tce = t3lib_div::makeInstance('t3lib_TCEmain'); $tce->stripslashes_values=0; $tce->alternativeFileName = $alternativeFileName; // Initialize $tce->start($recData, array()); // Saved the stuff $tce->process_datamap(); // Clear the cache (note: currently only admin-users can clear the cache in tce_main.php) $tce->clear_cacheCmd('all'); /* */ $this->tce_processed = true; /* */ // re-read the template ... $this->initialize_editor($this->pObj->id, $template_uid); } // Unlink any uploaded/new temp files there was: t3lib_div::unlink_tempfile($tmp_upload_name); t3lib_div::unlink_tempfile($tmp_newresource_name); // If files has been edited: if (is_array($edit)) { if ($edit['filename'] && $tplRow['resources'] && t3lib_div::inList($tplRow['resources'], $edit['filename'])) { // Check if there are resources, and that the file is in the resourcelist. $path = PATH_site.$TCA['sys_template']['columns']['resources']['config']['uploadfolder'].'/'.$edit['filename']; $fI = t3lib_div::split_fileref($edit['filename']); if (@is_file($path) && t3lib_div::getFileAbsFileName($path) && t3lib_div::inList($this->pObj->textExtensions, $fI['fileext'])) { // checks that have already been done.. Just to make sure // @TODO: Check if the hardcorded value already has a config member, otherwise create one if (filesize($path) < 30720) { // checks that have already been done.. Just to make sure t3lib_div::writeFile($path, $edit['file']); $theOutput.= $this->pObj->doc->spacer(10); $theOutput.= $this->pObj->doc->section('FILE CHANGED', "Resource '".$edit['filename']."' has been updated.", 0, 0, 0, 1); // Clear cache - the file has probably affected the template setup // @TODO: Check if the edited file really had something to do with cached data and prevent this clearing if possible! $tce = t3lib_div::makeInstance('t3lib_TCEmain'); $tce->stripslashes_values = 0; $tce->start(array(), array()); $tce->clear_cacheCmd('all'); } } } } } /* */ // if TSEditor is enabled and this POST request is an Ajax-Request if(is_object($GLOBALS['T3_VAR']['t3editorObj']) && $GLOBALS['T3_VAR']['t3editorObj']->isEnabled && t3lib_div::_POST('submitAjax')) { $GLOBALS['T3_VAR']['t3editorObj']->setBEUCdisableT3Editor(false); // abort request here and return message // @TODO: Json or other response here!? if ($this->tce_processed) { echo "OK"; } else { echo "ERROR"; } exit(); } /* */ $theOutput.= $this->pObj->doc->spacer(5); $theOutput.= $this->pObj->doc->section('Template information:', ''.htmlspecialchars($tplRow['title']).''.htmlspecialchars(trim($tplRow['sitetitle'])?' - ('.$tplRow['sitetitle'].')':''), 0, 1); if ($manyTemplatesMenu) { $theOutput.= $this->pObj->doc->section('', $manyTemplatesMenu); $theOutput.= $this->pObj->doc->divider(5); } #$numberOfRows= t3lib_div::intInRange($this->pObj->MOD_SETTINGS["ts_template_editor_TArows"],0,150); #if (!$numberOfRows) $numberOfRows = 35; // If abort pressed, nothing should be edited: if (t3lib_div::_POST('abort')) { unset($e); } if ($e['title']) { $outCode = 'pObj->doc->formWidth().'>'; $outCode.= ''; $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section('Title:', $outCode); } if ($e['sitetitle']) { $outCode = 'pObj->doc->formWidth().'>'; $outCode.= ''; $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section('Sitetitle:', $outCode); } if ($e['description']) { $outCode = ''; $outCode.= ''; $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section('Description:', $outCode); } if ($e['resources']) { // Upload $outCode = 'pObj->doc->formWidth().' size="50">'; $outCode.= ''; $outCode.= ''; $outCode.= '
Allowed extensions: '.$TCA['sys_template']['columns']['resources']['config']['allowed'].''; $outCode.= '
Max file size: '.t3lib_div::formatSize($TCA['sys_template']['columns']['resources']['config']['max_size']*1024).''; $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section('Upload resource:', $outCode); // New $opt = explode(',', $this->pObj->textExtensions); $optTags = ''; foreach ($opt as $extVal) { $optTags.= ''; } $outCode = 'pObj->doc->formWidth(20).'> '; $outCode.= ''; $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section('New text resource (enter name):', $outCode); // Make copy $rL = $this->resourceListForCopy($this->pObj->id, $template_uid); if ($rL) { $theOutput.= $this->pObj->doc->spacer(20); $theOutput.= $this->pObj->doc->section('Make a copy of resource:', $rL); } // Update resource list $rL = $this->procesResources($tplRow['resources'], 1); if ($rL) { $theOutput.= $this->pObj->doc->spacer(20); $theOutput.= $this->pObj->doc->section('Update resource list:', $rL); } } if ($e['constants']) { /* */ if(is_object($GLOBALS['T3_VAR']['t3editorObj']) && $GLOBALS['T3_VAR']['t3editorObj']->isEnabled) { $outCode = $GLOBALS['T3_VAR']['t3editorObj']->getCodeEditor( 'data[constants]', // name 'fixed-font enable-tab', // class t3lib_div::formatForTextarea($tplRow['constants']), // content 'rows="'.$numberOfRows.'" wrap="off" '.$this->pObj->doc->formWidthText(48, 'width:98%;height:60%', 'off'), 'Template: '.htmlspecialchars($tplRow['title']).': Constants' ); } else { $outCode = ''; } /* */ /* $outCode = ''; */ $outCode.= ''; $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section('Constants:', ''); $theOutput.= $this->pObj->doc->sectionEnd().$outCode; } if ($e['file']) { $path = PATH_site.$TCA['sys_template']['columns']['resources']['config']['uploadfolder'].'/'.$e[file]; $fI = t3lib_div::split_fileref($e[file]); if (@is_file($path) && t3lib_div::inList($this->pObj->textExtensions, $fI['fileext'])) { if (filesize($path) < $TCA['sys_template']['columns']['resources']['config']['max_size']*1024) { $fileContent = t3lib_div::getUrl($path); $outCode = 'File: '.$e[file].'
'; $outCode.= ''; $outCode.= ''; $outCode.= ''; $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section('Edit Resource:', ''); $theOutput.= $this->pObj->doc->sectionEnd().$outCode; } else { $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section( 'Filesize exceeded '.$TCA['sys_template']['columns']['resources']['config']['max_size'].' Kbytes', 'Files larger than '.$TCA['sys_template']['columns']['resources']['config']['max_size'].' KByes are not allowed to be edited.', 0, 0, 0, 1 ); } } } if ($e['config']) { /* */ if(is_object($GLOBALS['T3_VAR']['t3editorObj']) && $GLOBALS['T3_VAR']['t3editorObj']->isEnabled) { $outCode = $GLOBALS['T3_VAR']['t3editorObj']->getCodeEditor( 'data[config]', // name 'fixed-font enable-tab', // class t3lib_div::formatForTextarea($tplRow['config']), // content 'rows="'.$numberOfRows.'" wrap="off" '.$this->pObj->doc->formWidthText(48, 'width:98%;height:60%', 'off'), 'Template: '.htmlspecialchars($tplRow['title']).': Setup' ); } else { $outCode = ''; } /* */ /* $outCode=''; */ if (t3lib_extMgm::isLoaded('tsconfig_help')) { $url = $BACK_PATH.'wizard_tsconfig.php?mode=tsref'; $params = array( 'formName' => 'editForm', 'itemName' => 'data[config]', ); $outCode.= ''; } $outCode.= ''; $theOutput.= $this->pObj->doc->spacer(15); $theOutput.= $this->pObj->doc->section('Setup:', ''); $theOutput.= $this->pObj->doc->sectionEnd().$outCode; } // Processing: $outCode = ''; $outCode.= $this->tableRow('Title:', htmlspecialchars($tplRow['title']), 'title'); $outCode.= $this->tableRow('Sitetitle:', htmlspecialchars($tplRow['sitetitle']), 'sitetitle'); $outCode.= $this->tableRow('Description:', nl2br(htmlspecialchars($tplRow['description'])), 'description'); $outCode.= $this->tableRow('Resources:', $this->procesResources($tplRow['resources']), 'resources'); $outCode.= $this->tableRow('Constants:', '(edit to view, '.(trim($tplRow[constants]) ? count(explode(chr(10), $tplRow[constants])) : 0).' lines)', 'constants'); $outCode.= $this->tableRow('Setup:', '(edit to view, '.(trim($tplRow[config]) ? count(explode(chr(10), $tplRow[config])) : 0).' lines)', 'config'); $outCode = ''.$outCode.'
'; $outCode = '
'.$outCode.'
'; // Edit all icon: $outCode.= '
Click here to edit whole template record'; $theOutput.= $this->pObj->doc->spacer(25); $theOutput.= $this->pObj->doc->section('', $outCode); } else { $theOutput.= $this->pObj->noTemplate(1); } return $theOutput; } } if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tstemplate_info/class.tx_tstemplateinfo.php']) { include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tstemplate_info/class.tx_tstemplateinfo.php']); } ?>