Array ('subitem' => true), 'OnSaveBlock' => Array ('subitem' => true), 'OnSaveLayout' => Array ('subitem' => true), ); $this->permMapping = array_merge($this->permMapping, $permissions); } /** * Checks user permission to execute given $event * * @param kEvent $event * @return bool * @access public */ public function CheckPermission(kEvent $event) { if ( $event->Name == 'OnLoadBlock' || $event->Name == 'OnSaveBlock' ) { return $this->Application->isAdminUser; } return parent::CheckPermission($event); } /** * Loads template contents into virtual field * * @param kEvent $event * @return void * @access protected */ protected function OnAfterItemLoad(kEvent $event) { parent::OnAfterItemLoad($event); /** @var kDBItem $object */ $object = $event->getObject(); $filename = $this->_getTemplatePath($object); if ( file_exists($filename) ) { $object->SetDBField('FileContents', file_get_contents($filename)); } else { $object->SetError('FileContents', 'template_file_missing', 'la_error_TemplateFileMissing'); } } /** * Trim contents of edited template * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemUpdate(kEvent $event) { parent::OnBeforeItemUpdate($event); /** @var kDBItem $object */ $object = $event->getObject(); $file_data = $object->GetDBField('FileContents'); $file_data = str_replace("\r\n", "\n", $file_data); $file_data = str_replace("\r", "\n", $file_data); $object->SetDBField('FileContents', trim($file_data)); } /** * Saves updated content to template * * @param kEvent $event * @return void * @access protected */ protected function OnAfterItemUpdate(kEvent $event) { parent::OnAfterItemUpdate($event); /** @var kDBItem $object */ $object = $event->getObject(); $filename = $this->_getTemplatePath($object); if ( file_exists($filename) && is_writable($filename) ) { $fp = fopen($filename, 'w'); fwrite($fp, $object->GetDBField('FileContents')); fclose($fp); /** @var kThemesHelper $themes_helper */ $themes_helper = $this->Application->recallObject('ThemesHelper'); $meta_info = $themes_helper->parseTemplateMetaInfo($filename); $file_description = array_key_exists('desc', $meta_info) ? $meta_info['desc'] : ''; $object->SetDBField('Description', $file_description); $object->SetDBField('FileMetaInfo', serialize($meta_info)); $object->Update(); } } /** * Returns full path to template file * * @param kDBItem $object * @return string */ function _getTemplatePath(&$object) { /** @var kDBItem $theme */ $theme = $this->Application->recallObject('theme'); $path = FULL_PATH . '/themes/' . $theme->GetDBField('Name'); $path .= $object->GetDBField('FilePath') . '/' . $object->GetDBField('FileName'); return $path; } /** * Loads block data based on it's name in request * * @param kEvent $event */ function OnLoadBlock($event) { parent::OnNew($event); /** @var kDBItem $object */ $object = $event->getObject(); /** @var TemplateHelper $template_helper */ $template_helper = $this->Application->recallObject('TemplateHelper'); $template_helper->InitHelper($object); $object->SetDBField('FileName', $template_helper->blockInfo('template_file')); $object->SetDBField('BlockPosition', $template_helper->blockInfo('start_pos') . ' - ' . $template_helper->blockInfo('end_pos')); $object->SetDBField('FileContents', $template_helper->blockInfo('content')); } /** * Saves changed template block * * @param kEvent $event */ function OnSaveBlock($event) { /** @var kDBItem $object */ $object = $event->getObject( Array('skip_autoload' => true) ); $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); if ($items_info) { $id = key($items_info); $field_values = $items_info[$id]; $object->setID($id); $object->SetFieldsFromHash($field_values); $event->setEventParam('form_data', $field_values); } $status = $object->Validate(); /** @var TemplateHelper $template_helper */ $template_helper = $this->Application->recallObject('TemplateHelper'); $template_helper->InitHelper($object); $status = $status && $template_helper->saveBlock($object); if ($status) { $event->SetRedirectParam('opener', 'u'); } else { $event->status = kEvent::erFAIL; } } /** * Saves layout on given template * * @param kEvent $event */ function OnSaveLayout($event) { $event->status = kEvent::erSTOP; if (($this->Application->GetVar('ajax') != 'yes') || (EDITING_MODE != EDITING_MODE_DESIGN)) { return ; } $target_order = $this->Application->GetVar('target_order'); /** @var TemplateHelper $template_helper */ $template_helper = $this->Application->recallObject('TemplateHelper'); if ($template_helper->moveTemplateElements($target_order)) { echo 'OK'; return ; } echo 'FAILED'; } }