Index: branches/5.1.x/core/kernel/nparser/nparser.php =================================================================== diff -u -r12453 -r12657 --- branches/5.1.x/core/kernel/nparser/nparser.php (.../nparser.php) (revision 12453) +++ branches/5.1.x/core/kernel/nparser/nparser.php (.../nparser.php) (revision 12657) @@ -1,6 +1,6 @@ _btnPhrases['design'] = $this->Application->Phrase('la_btn_EditDesign', false); + $this->_btnPhrases['block'] = $this->Application->Phrase('la_btn_EditBlock', false); + + } } function Compile($pre_parsed, $template_name = 'unknown') @@ -68,17 +80,7 @@ } // saving compiled version (only when compilation was successful) - if (defined('SAFE_MODE') && SAFE_MODE) { // store cache files in database since can't save on filesystem - if (!isset($conn)) $conn =& $this->Application->GetADODBConnection(); - $conn->Query('REPLACE INTO '.TABLE_PREFIX.'Cache (VarName, Data, Cached) VALUES ('.$conn->qstr($pre_parsed['fname']).','.$conn->qstr($this->Buffers[0]).','.adodb_mktime().')'); - } - else { - $compiled = fopen($pre_parsed['fname'], 'w'); - if (!fwrite($compiled, $this->Buffers[0])) { - trigger_error('Saving compiled template failed', E_USER_ERROR); - } - fclose($compiled); - } + $this->Application->TemplatesCache->saveTemplate($pre_parsed['fname'], $this->Buffers[0]); return true; } @@ -316,14 +318,18 @@ return $code; } - function CheckTemplate($t, $silent=null) + function CheckTemplate($t, $silent = null) { $pre_parsed = $this->Application->TemplatesCache->GetPreParsed($t); if (!$pre_parsed) { if (!$silent) { - if ($this->Application->isDebugMode()) $this->Application->Debugger->appendTrace(); + if ($this->Application->isDebugMode()) { + $this->Application->Debugger->appendTrace(); + } + trigger_error('Cannot include "' . $t . '" - file does not exist', E_USER_ERROR); } + return false; } @@ -336,39 +342,32 @@ $t = preg_replace('/^theme:.*?\//', '', $t); } - if (!$inc_parser->Compile($pre_parsed, $t)) return false; + if (!$inc_parser->Compile($pre_parsed, $t)) { + return false; + } } + return $pre_parsed; } - function Run($t, $silent=null) + function Run($t, $silent = null) { + if ((strpos($t, '../') !== false) || (trim($t) !== $t)) { + // when relative paths or special chars are found template names from url, then it's hacking attempt + return false; + } + $pre_parsed = $this->CheckTemplate($t, $silent); - if (!$pre_parsed) return false; + if (!$pre_parsed) { + return false; + } + $backup_template = $this->TemplateName; $backup_fullpath = $this->TempalteFullPath; $this->TemplateName = $t; $this->TempalteFullPath = $pre_parsed['tname']; - ob_start(); - $_parser =& $this; - if (defined('SAFE_MODE') && SAFE_MODE) { // read cache files from database since can't save on filesystem - $conn =& $this->Application->GetADODBConnection(); - $cached = $conn->GetRow('SELECT * FROM '.TABLE_PREFIX.'Cache WHERE VarName = "'.$pre_parsed['fname'].'"'); - if ($cached !== false && $cached['Cached'] > filemtime($pre_parsed['tname'])) { - eval('?'.'>'.$cached['Data']); - } - } - else { - if ($pre_parsed['mode'] == 'file') { - include($pre_parsed['fname']); - } - else { - eval('?'.'>'.$pre_parsed['content']); - } - } - $output = ob_get_contents(); - ob_end_clean(); + $output =& $this->Application->TemplatesCache->runTemplate($this, $pre_parsed); $this->TemplateName = $backup_template; $this->TempalteFullPath = $backup_fullpath; @@ -518,42 +517,22 @@ // $prepend = '[name: ' . $block_params['name'] . '] [params: ' . implode(', ', array_keys($block_params)) . ']'; $decorate = false; + $design = false; - if ($is_template) { - // content inside pair RenderElement tag -// $prepend = 'CONTENT_OF_DESIGN: ' . $prepend; + if (EDITING_MODE == EDITING_MODE_DESIGN) { + $decorate = true; - if (EDITING_MODE == EDITING_MODE_INSIDES) { - $decorate = true; + if ($is_template) { + // content inside pair RenderElement tag } - } - else { - if (strpos($block_params['name'], '__capture_') === 0) { - // capture tag (usually inside pair RenderElement) -// $prepend = 'CAPTURE: ' . $prepend; - - if (EDITING_MODE == EDITING_MODE_INSIDES) { - $decorate = true; - } - } - elseif (array_key_exists('content', $block_params)) { - // pair RenderElement (on template, were it's used) -// $prepend = 'PAIR_RENDER_ELEMENT: ' . $prepend; - - if (EDITING_MODE == EDITING_MODE_DESIGN) { - $decorate = true; - } - } else { - // non-pair RenderElement -// $prepend = 'SINGLE_RENDER_ELEMENT: ' . $prepend; - - if (EDITING_MODE == EDITING_MODE_INSIDES) { - $decorate = true; + if (strpos($block_params['name'], '__capture_') === 0) { + // capture tag (usually inside pair RenderElement) + $decorate = false; } - - if (array_key_exists('layout_view', $block_params) && $block_params['layout_view'] && (EDITING_MODE == EDITING_MODE_LAYOUT)) { - $decorate = true; + elseif (array_key_exists('content', $block_params)) { + // pair RenderElement (on template, were it's used) + $design = true; } } } @@ -568,6 +547,14 @@ $block_name = $block_params['name']; $function_name = $is_template ? $block_name : $this->Elements[$block_name]; + $block_title = ''; + if (array_key_exists($function_name, $this->Application->Parser->ElementLocations)) { + $element_location = $this->Application->Parser->ElementLocations[$function_name]; + + $block_title .= $element_location['template'] . '.tpl'; + $block_title .= ' (' . $element_location['start_pos'] . ' - ' . $element_location['end_pos'] . ')'; + } + // ensure unique id for every div (used from print lists) $container_num = 1; $container_id = 'parser_block[' . $function_name . ']'; @@ -581,14 +568,26 @@ // prepare parameter string $param_string = $block_name . ':' . $function_name; + if ($design) { + $btn_text = $this->_btnPhrases['design']; + $btn_class = 'cms-edit-design-btn'; + $btn_container_class = 'block-edit-design-btn-container'; + $btn_name = 'design'; + } + else { + $btn_text = $this->_btnPhrases['block']; + $btn_class = 'cms-edit-block-btn'; + $btn_container_class = 'block-edit-block-btn-container'; + $btn_name = 'content'; + } $block_editor = ' -
-
+
+
- +
-
Edit
+
' . $btn_text . '
%s