function smarty_function_wysiwyg($params = array(), $smarty) { $name = 'ckeditor_content'; $content = ''; $defaults = array(); //-------------------------- //------ инициализация опций ---------- // Установим инструментальную панель $defaults['type_toolbar'] = 'medium'; // Установим парметры подключения файлового менеджера $defaults['filebrowserBrowseUrl'] = Default_Plugin_SysBox::getUrlRes('/js/kcfinder/browse.php?type=files'); $defaults['filebrowserImageBrowseUrl'] = Default_Plugin_SysBox::getUrlRes('/js/kcfinder/browse.php?type=images'); $defaults['filebrowserFlashBrowseUrl'] = Default_Plugin_SysBox::getUrlRes('/js/kcfinder/browse.php?type=flash'); $defaults['filebrowserUploadUrl'] = Default_Plugin_SysBox::getUrlRes('/js/kcfinder/upload.php?type=files'); $defaults['filebrowserImageUploadUrl'] = Default_Plugin_SysBox::getUrlRes('/js/kcfinder/upload.php?type=images'); $defaults['filebrowserFlashUploadUrl'] = Default_Plugin_SysBox::getUrlRes('/js/kcfinder/upload.php?type=flash'); // Установим язык интерфейса $defaults['language'] = Default_Plugin_SysBox::getTranslateLocale(); // Установим высоту окна редактора $defaults['height'] = 300; foreach ($defaults as $k => $v) { $params[$k] = array_key_exists($k, $params) ? $params[$k] : $v; } $params['toolbar'] = getToolbar($params['type_toolbar']); if (isset($params['name'])) { $name = $params['name']; } if (isset($params['content'])) { $content = $params['content']; } $basePath = Default_Plugin_SysBox::getUrlRes('/js/ckeditor/') . '/'; //------------- создание редактора -------------- // При создании редактоа он скрывает textarea // но создает новый конпонент textarea с атрибутами в свойстве - textareaAttributes $ckeditor = new Default_Plugin_CkEditor($basePath); // Скроем вновь созданный элемент textarea $ckeditor->textareaAttributes = array("style" => "visibility: hidden; display: none;"); $ckeditor->editor($name, $content, $params); }
/** * Getting the code reference and the calendar image. Configure calendar. * * @return string */ private function _getCalendarLink() { $request = new Zend_Controller_Request_Http(); $basePath = $request->getBasePath(); $locale = Default_Plugin_SysBox::getTranslateLocale(); $dateFormat = $locale == 'en' ? '%m.%d.%Y' : '%d.%m.%Y'; //-------------------------- $calendarLink = ' <a href="#" id="' . $this->getElement()->getName() . '_calendar">' . '<img class="calendar-image" src = "' . Default_Plugin_SysBox::getUrlRes('/js/calendar/calendar.gif') . '"> </a> <script type="text/javascript"> Calendar.setup( { inputField : "' . $this->getElement()->getName() . '", ifFormat : "' . $dateFormat . '", button : "' . $this->getElement()->getName() . '_calendar", firstDay : 1 } ); </script> '; return $calendarLink; }
/** * Initialization form */ public function init() { parent::init(); //---------------- Форма ---------------- // Указываем action формы $urlAction = $this->getUrl('edit', 'blogmanager'); $urlAction .= '?id=' . $this->post->getId(); $this->setAction($urlAction); //Зададим метод передачи данных $this->setMethod('post'); // Задаем атрибут class для формы $this->setAttrib('class', 'myfrm'); $this->setAttrib('id', 'blogpost-form'); //------------ Добавим краткое название блога -------------- $elTitle = new Zend_Form_Element_Text('title', array('label' => 'Название', 'maxlength' => '255', 'size' => '60', 'required' => true, 'validators' => array(array('StringLength', true, array(0, 255))), 'filters' => array(array('StringTrim'), array('StripTags')))); //Установим название, если блог существует $this->addElement($elTitle); if ($this->post->profile->title) { $this->setDefault('title', $this->post->profile->title); } //---------------- Дата создания записи в блоге ---------------- // Элемент "Дата создания". Элемент содержит нестандартный декоратор - javascript календарь $elDatePost = new Zend_Form_Element_Text('ts_created', array('label' => 'Дата создания', 'maxlength' => '10', 'required' => true, 'validators' => array(array('Date', true, array('locale' => $this->_language))), 'filters' => array('StringTrim'))); // Удаляем все существующие декораторы, назначенные по умолчанию $elDatePost->clearDecorators(); // Назначаем новые, включая наш декоратор Calendar // Это необходимо для того что бы изображение календаря размещалось сразу за полем ввода $elDatePost->addDecorator('ViewHelper')->addDecorator('Calendar')->addDecorator('Errors')->addDecorator('HtmlTag', array('tag' => 'dd'))->addDecorator('Label', array('tag' => 'dt')); $this->addElement($elDatePost); //Установим дату по умолчанию // $tsCreated = $this->post->ts_created; $locale = Default_Plugin_SysBox::getTranslateLocale(); $format = Default_Plugin_SimpleDate::get_format_display_date($locale); $sd = new Default_Plugin_SimpleDate($this->post->ts_created); $this->setDefault('ts_created', $sd->to_display_date($format)); //---------- Добавим элемент описания сообщения в блоге ------------ //$this->addElement('textarea', 'content', array( $elDescription = new Zend_Form_Element_Textarea('ckeditor_description', array('label' => $this->Translate('Краткое описание сообщения') . ':', 'required' => false, 'validators' => array(), 'filters' => array('Sanitize'))); $this->addElement($elDescription); //Установим краткое описание сообщения, если оно существует if ($this->post->profile->description) { $this->setDefault('ckeditor_description', $this->post->profile->description); } //---------- Добавим элемент содержания блога ------------ //$this->addElement('textarea', 'content', array( $elContent = new Zend_Form_Element_Textarea('ckeditor_content', array('label' => $this->Translate('Ваше сообщение') . ':', 'required' => true, 'filters' => array('Sanitize'))); $this->addElement($elContent); //Установим содержания блога, если оно существует if ($this->post->profile->content) { $this->setDefault('ckeditor_content', $this->post->profile->content); } //-------- Добавим кнопки -------------- //Установим значение кнопки сохранить $this->addElement('submit', 'save', array('ignore' => true, 'label' => 'Сохранить')); $this->getElement('save')->setAttrib('class', 'btn btn-primary'); //Перезапишем стандартные декораторы, для размещения двух кнопок рядом $this->getElement('save')->setDecorators(array('ViewHelper')); //Установим значение кнопки закрыть $this->addElement('submit', 'close', array('ignore' => true, 'label' => 'Закрыть')); $this->getElement('close')->setAttrib('class', 'btn'); //Перезапишем стандартные декораторы, для размещения двух кнопок рядом $this->getElement('close')->setDecorators(array('ViewHelper')); //---------------- Группа данные блога ---------------- // Группируем элементы // Группа полей связанных с авторизационными данными $this->addDisplayGroup(array('title', 'ts_created', 'ckeditor_description', 'ckeditor_content', 'save', 'close'), 'blogDataGroup', array('legend' => 'Подробная информация')); }
/** * * Get locale * * @param Smarty $smarty * @return string */ function smarty_function_getlang($smarty) { return Default_Plugin_SysBox::getTranslateLocale(); }
/** * Action - edit * edit post * * * Access to the action is possible in the following paths: * - /blogmanager/edit * * @return void */ public function editAction() { $request = $this->getRequest(); $post_id = (int) $request->getQuery('id'); $username = $this->_identity->username; $formBlogPost = new Default_Form_BlogPost($this->db, $this->_identity->user_id, $post_id); // Проверим тип запроса, если POST значит пришли данные формы if ($this->_request->isPost()) { // Если выходим из редактора сообщения if ($this->_request->getPost('close')) { if ($formBlogPost->post->isSaved()) { //Перейдем на предварительный просмотр сообщения $url = '/blogmanager/preview' . '?id=' . $formBlogPost->post->getId(); $this->_redirect($url); } else { //Перейдем на управление блогом $url = '/blogmanager'; $this->_redirect($url); } } // Проверяем на валидность поля формы $result = $formBlogPost->isValid($this->_getAllParams()); if ($result) { // Get locale $locale = Default_Plugin_SysBox::getTranslateLocale(); // Get timestamp $post_created = $formBlogPost->getValue('ts_created'); $zDate = new Zend_Date($post_created, null, $locale); $timestamp = $zDate->get(Zend_date::TIMESTAMP); // Set post 'ts_created' to timestamp $formBlogPost->post->ts_created = $timestamp; //Получим заголовок сообщения $formBlogPost->post->profile->title = $formBlogPost->getValue('title'); //Получим краткое описание сообщения $formBlogPost->post->profile->description = $formBlogPost->getValue('ckeditor_description'); //Получим тело сообщение $content = $formBlogPost->getValue('ckeditor_content'); $formBlogPost->post->profile->content = $content; // Если нет предварительного просмотра, то // установи признак публикации статьи в блоге $title = $formBlogPost->getValue('title'); if ($formBlogPost->post->isSaved()) { if ($formBlogPost->post->isLive()) { $message = 'Сообщение отредактировано и опубликовано в блог.'; $message_log = "User-\"{$username}\" message-\"{$title}\" has been edited and published it in the blog"; } else { $message = 'Сообщение отредактировано но не опубликовано в блог.'; $message_log = "User-\"{$username}\" message-\"{$title}\" has been edited but not posted to the blog"; } } else { if ($formBlogPost->post->isLive()) { $message = 'Создано новое сообщение и опубликовано в блог.'; $message_log = "User-\"{$username}\" creates a new message-\"{$title}\" and posted to the blog"; } else { $message = 'Создано новое сообщение но не опубликовано в блог.'; $message_log = "User-\"{$username}\" creates a new message-\"{$title}\" but not published in the blog"; } } //Сохраним данные post if ($formBlogPost->post->save()) { // Запомним в логе сообщений $this->_logMsg->post_edit($message_log); //Добавим сообщение о создании сообщения $this->_flashMessenger->addMessage($this->Translate($message)); //Перейдем на предварительный просмотр сообщения $url = '/blogmanager/preview' . '?id=' . $formBlogPost->post->getId(); $this->_redirect($url); } else { // Ошибка в сообщении пользователя! Сообщение пользователя не соответствует стандарту XHTML. $this->view->class_message = 'warning'; $this->view->message = $this->Translate('Ошибка в сообщении пользователя! Сообщение пользователя не соответствует стандарту XHTML.'); } } else { // неверно заполнены поля формы $this->view->class_message = 'warning'; $this->view->message = $this->getFormMessages($formBlogPost); } } //Добавим путь к действию if ($formBlogPost->post->isSaved()) { $this->_breadcrumbs->addStep($this->Translate('Просмотр сообщения') . ': ' . $formBlogPost->post->profile->title, $this->getUrl('preview') . '?id=' . $formBlogPost->post->getId()); $this->_breadcrumbs->addStep($this->Translate('Редактировать сообщение в блоге')); } else { $this->_breadcrumbs->addStep($this->Translate('Создать новое сообщение в блоге')); } $this->view->formBlogPost = $formBlogPost; }
/** * Get text markdown markup file * file is selected according to the localization * * @param array $params Set params for [filename, content, type] * @return string */ public function getMarkdown($params) { $arBox = new Default_Plugin_ArrayBox(); $strBox = new Default_Plugin_String(); $filename = isset($params['filename']) ? $params['filename'] : ''; $strFile = isset($params['content']) ? $params['content'] : ''; $type = isset($params['type']) ? $params['type'] : 'github'; //Type of Markdown: traditional, github, extra $title = ''; $locale = Default_Plugin_SysBox::getTranslateLocale(); $locale = $locale == 'uk' ? 'ru' : $locale; $title = ""; $filename = trim($filename); $filename = str_replace('\\', '/', $filename); //------------------------------------------- if ($filename) { if (is_file($filename)) { $lastFilename = $arBox->set($filename, "/")->getLast(); // Set title $title = $lastFilename; // Check word in uppercase $upperFilename = $strBox->set($lastFilename)->toUpper()->get(); $isUpper = $arBox->set($lastFilename, ".")->get(0) == $arBox->set($upperFilename, ".")->get(0); if ($isUpper) { $locale = strtoupper($locale); } // Get the name of the file to a different locale $lastFilename = $arBox->set($lastFilename, ".")->get(0) . "-{$locale}.md"; $localeFilename = $arBox->set($filename, "/")->pop()->join('/') . "/{$lastFilename}"; // Get file content if (is_file($localeFilename)) { // Set title $title = $lastFilename; $strFile = file_get_contents($localeFilename); } else { $strFile = file_get_contents($filename); } } else { // Get file name $filename = APPLICATION_TEMPLATES . "/{$this->_params['controller']}/{$filename}"; if (!is_file($filename)) { throw new Exception("File '{$filename}' does not exist."); } $lastFilename = $arBox->set($filename, "/")->getLast(); // Set title $title = $lastFilename; // Check word in uppercase $upperFilename = $strBox->set($lastFilename)->toUpper()->get(); $isUpper = $arBox->set($lastFilename, ".")->get(0) == $arBox->set($upperFilename, ".")->get(0); if ($isUpper) { $locale = strtoupper($locale); } // Get the name of the file to a different locale $lastFilename = $arBox->set($lastFilename, ".")->get(0) . "-{$locale}.md"; $localeFilename = $arBox->set($filename, "/")->pop()->join('/') . "/{$lastFilename}"; // Get file content if (is_file($localeFilename)) { // Set title $title = $lastFilename; $strFile = file_get_contents($localeFilename); } else { $strFile = file_get_contents($filename); } } } switch ($type) { case 'traditional': $markdown = new \cebe\markdown\Markdown(); break; case 'github': $markdown = new \cebe\markdown\GithubMarkdown(); break; case 'extra': $markdown = new \cebe\markdown\MarkdownExtra(); break; default: break; } // Get markdown parser text $text = $markdown->parse($strFile); // Get content $content = array('title' => $title, 'text' => "<div class=\"markdown-body\">{$text}</div>"); return $content; }
/** * Initialization form * * return void */ public function init() { parent::init(); // Получим объект переводчика $translate = Zend_Registry::get('Zend_Translate'); // Задаем объект переводчика для формы $this->setTranslator($translate); /* Specifies the prefix for samopisnyh elements, validators, filters, and decorators. This Zend Form will know where to find our custom items */ $this->addElementPrefixPath('Default_Form_Validate', APPLICATION_PATH . '/forms/validate/', 'validate'); $this->addElementPrefixPath('Default_Form_Filter', APPLICATION_PATH . '/forms/filter/', 'filter'); $this->addElementPrefixPath('Default_Form_Decorator', APPLICATION_PATH . '/forms/decorator/', 'decorator'); $this->addPrefixPath('Default_Form_Element', APPLICATION_PATH . '/forms/element/', 'element'); // Получим язык сайта $this->_language = Default_Plugin_SysBox::getTranslateLocale(); // Set $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $identity = $auth->getIdentity(); $this->_user_type = $identity->user_type; } else { $this->_user_type = 'guest'; } }