/** * Сatch Exception * * @param exception $exception */ public static function catchException(Exception $exception) { $params = ''; // Получение текста ошибки $code = $exception->getCode(); $file = $exception->getFile(); $line = $exception->getLine() . "\n\n"; $message = $exception->getMessage() . "\n\n"; $trace = $exception->getTraceAsString() . "\n\n"; //----------------------- // Получим строку ошибки $strMessage = 'EXCEPTION: ' . $code . '; FILE: ' . $file . '; LINE: ' . $line . 'MESSAGE: ' . $message; //Получим параметры запроса $front = Zend_Controller_Front::getInstance(); if ($front) { $request = $front->getRequest(); if ($request) { $params = var_export($request->getParams(), true); } } // Получим обьекты логеров $logMsg = Zend_Registry::get('Zend_Log'); $logEx = Zend_Registry::get('Zend_LogEx'); // Запомним ошибку в лог файле - Messages.log $logMsg->emerg($strMessage); $strMessage .= $trace . 'PARAMS: ' . $params; // Запомним ошибку в лог файле - Exceptions.log $logEx->emerg($strMessage); // Очистим кеш, что бы ошибка не запомнилась $pageCache = Default_Plugin_SysBox::getCache('page'); $pageCache->clean(Zend_Cache::CLEANING_MODE_ALL); $dbCache = Default_Plugin_SysBox::getCache('db'); $dbCache->clean(Zend_Cache::CLEANING_MODE_ALL); //Получим переменную окружения - (production, testing, development) $env = APPLICATION_ENV; // Если включен режим отладки отображаем сообщение о ошибке на экран echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>This site is in Maintenance</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h1>Application Error</h1>'; if ($env == 'development') { Zend_Debug::dump($strMessage); } else { // Иначе выводим сообщение об ошибке echo '<h2>System error! Please try again later.</h2>'; echo 'EXCEPTION: ' . $code . '; MESSAGE: ' . $message; } echo '</body></html>'; exit; }
/** * Get the URL for the resource * * @param string $url_res * @param string $type * @return string */ function smarty_modifier_urlres($url_res, $type = 'normalize') { $responseTime = 0; $result = ''; //----------------- if ($type == 'normalize') { $url = Default_Plugin_SysBox::getUrlRes($url_res); $result = $url; } elseif ($type == 'check') { $urlTool = new Default_Plugin_UrlTool(); $result = $urlTool->checkUrl($url_res, $responseTime); } else { $result = $url_res; } return $result; }
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); }
/** * add the base path to the URL of HTML Resources * * @param string $html * @return string */ protected function addBasePathUrl($html) { //$domHtml $str_begin = '<?xml version="1.0" encoding="utf-8"?>' . "\n" . '<body>'; $str_end = '</body>'; //--------------------------- $html = str_replace(' ', ' ', $html); $html = $str_begin . $html . $str_end; // Check for correct XML $domDoc = new DOMDocument('1.0', 'utf-8'); $success = $domDoc->loadXML($html); if (!$success) { return FALSE; } $domQuery = new Zend_Dom_Query(); $domQuery->setDocumentXml($html, "utf-8"); foreach (self::$tags as $tag => $attr) { $results = $domQuery->query($tag); if ($results->count()) { foreach ($results as $result) { // $result variable is of DOMElement type if ($result->hasAttribute($attr)) { $value = $result->getAttribute($attr); $st = new Default_Plugin_String($value); if ($st->beginsWith('/')) { $baseURL = Default_Plugin_SysBox::getUrlRes($value); $result->setAttribute($attr, $baseURL); } } } $domDoc = $results->getDocument(); $html = $domDoc->saveXml(); $domQuery->setDocumentXml($html, "utf-8"); } } $html = str_replace($str_begin, '', $html); $html = str_replace($str_end, '', $html); return $html; }
/** * 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; }
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini'); //Запомним время выполнения (index.php + new Zend_Application) $_startTime2 = microtime(1); $totalTime_StartApplication = $_startTime2 - $_startTime; // Obtain used memory at the beginning of the Application $memoryUsage_StartApplication = memory_get_usage(); $memoryUsage_StartApplication = round($memoryUsage_StartApplication / 1024, 3); $memoryUsage_StartApplication = number_format($memoryUsage_StartApplication, 3, '.', ' '); // Perform bootstrap $application->bootstrap(); //------------ An execution time Bootstrap ------------- // Get total time of bootstrap $_startTime3 = microtime(1); $totalTime_Bootstrap = $_startTime3 - $_startTime2; // Get used memory after bootstrap $memoryUsage_Bootstrap = Default_Plugin_SysBox::showMemoryUsage('kb'); // Save time performing different parts of the script in the register Zend_Registry::set("Duration_StartApplication", $totalTime_StartApplication); Zend_Registry::set("Duration_Bootstrap", $totalTime_Bootstrap); Zend_Registry::set("MemoryUsage_StartIndexPHP", $memoryUsage_StartIndexPHP); Zend_Registry::set("MemoryUsage_StartApplication", $memoryUsage_StartApplication); Zend_Registry::set("MemoryUsage_Bootstrap", $memoryUsage_Bootstrap); // Perform dispatch loop $application->run(); } catch (Zend_Exception $e) { // Intercept exceptions Default_Plugin_Error::catchException($e); } catch (Exception $e) { // Intercept exceptions Default_Plugin_Error::catchException($e); }
/** * Initialization form */ public function init() { parent::init(); //---------------- Форма ---------------- // Указываем action формы $urlAction = $this->getUrl('register', 'account'); $this->setAction($urlAction); // Указываем метод формы $this->setMethod('post'); // Задаем атрибут class для формы //$this->setAttrib('class', 'register'); $this->setAttrib('class', 'myfrm span5'); $this->setAttrib('id', 'registration-form'); //---------------- Username ---------------- // Text элемент "Имя входа пользователя". Проверяется на алфавитные символы и цифры, а также на длину // Валидатор Alnum использует установленную локаль для определения алфавита символов. $username = new Zend_Form_Element_Text('username', array('required' => true, 'label' => $this->Translate('Имя входа пользователя') . ' (Login)', 'maxlength' => '30', 'validators' => array(array('Alnum', true, array(true)), array('UserName'), array('NoDbRecordExists', true, array('users', 'username'))), 'filters' => array('StringTrim'))); $this->addElement($username); //---------------- Email ---------------- // Используемый собственный элемент App_Form_Element_Email $email = new Default_Form_Element_Email('email', array('required' => true)); // Добавление элемента в форму $this->addElement($email); //---------------- First name user ---------------- // Text элемент "Имя пользователя". Проверяется на алфавитные символы и цифры, а также на длину // Валидатор Alnum использует установленную локаль для определения алфавита символов. $first_name = new Zend_Form_Element_Text('first_name', array('label' => 'Имя пользователя', 'maxlength' => '150', 'size' => '60', 'validators' => array(array('Alnum', true, array(true)), array('StringLength', true, array(0, 150))), 'filters' => array('StringTrim'))); $this->addElement($first_name); //---------------- Last name user ---------------- // Text элемент "Фамилия пользователя". Проверяется на алфавитные символы и цифры, а также на длину // Валидатор Alnum использует установленную локаль для определения алфавита символов. $last_name = new Zend_Form_Element_Text('last_name', array('label' => 'Фамилия пользователя', 'maxlength' => '150', 'size' => '60', 'validators' => array(array('Alnum', true, array(true)), array('StringLength', true, array(0, 150))), 'filters' => array('StringTrim'))); $this->addElement($last_name); //---------------- Captcha ---------------- // Элемент CAPTCHA, защита от спама $urlBase = Default_Plugin_SysBox::getBaseURL(); $captcha = new Zend_Form_Element_Captcha('captcha', array('label' => 'Введите символы', 'captcha' => array('captcha' => 'Image', 'wordLen' => 4, 'width' => 260, 'timeout' => 120, 'expiration' => 300, 'font' => APPLICATION_PUBLIC . '/fonts/arial.ttf', 'imgDir' => APPLICATION_PUBLIC . '/images/captcha/', 'imgUrl' => $urlBase . '/images/captcha/', 'gcFreq' => 5))); $this->addElement($captcha); //---------------- Submit ---------------- // Кнопка Submit $submit = new Zend_Form_Element_Submit('send', array('label' => 'Зарегистрироваться')); $submit->setAttrib('class', 'btn btn-primary'); // Перезаписываем декораторы, что-бы //перезаписать стандартный набор декораторов для кнопки 'submit' $submit->setDecorators(array('ViewHelper')); $this->addElement($submit); //---------------- Reset ---------------- // Кнопка Reset, возвращает форму в начальное состояние $reset = new Zend_Form_Element_Reset('reset', array('label' => 'Очистить')); $reset->setAttrib('class', 'btn'); // Перезаписываем декораторы, что-бы выставить две кнопки в ряд $reset->setDecorators(array('ViewHelper')); $this->addElement($reset); //---------------- Группа Авторизационные данные ---------------- // Группируем элементы // Группа полей связанных с авторизационными данными $this->addDisplayGroup(array('username', 'email'), 'authDataGroup', array('legend' => 'Авторизационные данные')); //---------------- Группа Личная информация ---------------- // Группа полей связанных с личной информацией $this->addDisplayGroup(array('first_name', 'last_name'), 'privateDataGroup', array('legend' => 'Личная информация')); //---------------- Группа Защита от спама ---------------- // Защита от спама $this->addDisplayGroup(array('captcha'), 'captchaGroup', array('legend' => 'Защита от спама')); //---------------- Группа полей кнопок ---------------- $this->addDisplayGroup(array('send', 'reset'), 'buttonsGroup'); }
/** * Action - report * display table data in a report in HTML or PDF format * * Access to the action is possible in the following paths: * - /admin/user/report * * @return void */ public function reportAction() { try { $params = $this->getRequest()->getParams(); // Тип отчета $report_type = $params['type']; // Таблица для отчета $table = $params['table']; // Получим данные по отчету $reportData = $this->_getReportData($table); // Получим данные для отчета switch ($report_type) { case 'html': $templater = Default_Plugin_SysBox::createViewSmarty(); // Отображается в режиме отчета $templater->report = TRUE; //------ Установим параметры и переменные HTML ------ // ---- Титл ----- $templater->title_name = $reportData['html']['title_report']; $templater->title_logo = $reportData['html']['logo_report']; // ---- Заголовок ----- $templater->column_model = $reportData['html']['column_model']; $templater->is_group_head = isset($reportData['html']['is_group_head']) ? $reportData['html']['is_group_head'] : 0; // ---- Нижний колонтитул ----- $templater->rows_footer = $reportData['html']['rows_footer']; $templater->footer_colspan = $reportData['html']['footer_colspan']; // ---- Тело таблицы ----- $templater->rows_body = $reportData['html']['rows_body']; $templater->is_row_header = isset($reportData['html']['is_row_header']) ? $reportData['html']['is_row_header'] : 0; // Получим результат шаблона $html = $templater->render('reports/report-table.tpl'); $this->sendJson(array('result' => $this->Translate('Создан отчет в формате HTML'), 'html' => $html)); break; case 'pdf': // Проверим наличие файла mpdf.php // Если нет, то выдадим ошибку! $path = APPLICATION_BASE . '/library/mPDF/mpdf.php'; if (!is_file($path)) { throw new Exception($this->Translate('Не установлена библиотека mPDF', '/library/mPDF', 'http://www.mpdf1.com/mpdf/index.php?page=Download')); } // Создадим обьект шаблона if ($this->_isAjaxRequest) { $templater = Default_Plugin_SysBox::createViewSmarty(); } else { $templater = $this->view; } //------ Установим параметры и переменные HTML ------ // ---- Титл ----- $templater->title_name = $reportData['html']['title_report']; $templater->title_logo = $reportData['html']['logo_report']; // ---- Заголовок ----- $templater->column_model = $reportData['html']['column_model']; $templater->is_group_head = isset($reportData['html']['is_group_head']) ? $reportData['html']['is_group_head'] : 0; // ---- Нижний колонтитул ----- $templater->rows_footer = $reportData['html']['rows_footer']; $templater->footer_colspan = $reportData['html']['footer_colspan']; // ---- Тело таблицы ----- $templater->rows_body = $reportData['html']['rows_body']; $templater->is_row_header = isset($reportData['pdf']['is_row_header']) ? $reportData['pdf']['is_row_header'] : 0; // Получим результат шаблона $html = $templater->render('reports/table.tpl'); // Установим имя отчета PDF // в названии файла будет присутствовать хеш полученного HTML // это нужно для того, чтобы не создавать существующих файлов $md5Html = md5($html); $report = $table . '_' . $md5Html; // Установим параметры для отчета PDF $pdfParams['pdfReport'] = $report; $pdfParams['html'] = $html; $pdfParams['isCommonFont'] = FALSE; $pdfParams['pathStylesheet'] = 'css/report/blue-style.css'; //phpinfo blue-style $pdfParams['headerLeftMargin'] = $reportData['pdf']['title_report']; $pdfParams['headerCentreMargin'] = $reportData['pdf']['logo_report']; $pdfParams['pageFormat'] = $reportData['pdf']['pageFormat']; ob_start(); // Получим имя файла и проверим его наличие $filename = Default_Plugin_SysBox::getPath_For_FilePDF($report); if (file_exists($filename)) { // Файл уже существует sleep(1); // Получить URL PDF файла $urlFilePDF = Default_Plugin_SysBox::getFullUrl_For_FilePDF($report); $this->sendJson(array('result' => $this->Translate('Этот отчет уже существует'), 'url_file_pdf' => $urlFilePDF)); } else { // Создадим отчет... // Удалим ранее созданные отчеты // Получим директорию с файлами отчетов $patch_dir = Default_Plugin_SysBox::getPath_For_FilePDF(''); // Получим обьект построения дерева файлов $ft = new Default_Plugin_FileTree($patch_dir); // создадим дерево файлов $report_del = $table . '_*.pdf'; $ft->readTree(array('name' => $report_del)); // удалим файлы и директории $result = $ft->delFiles(); // Создать PDF файл из HTML $urlFilePDF = Default_Plugin_SysBox::mpdfGenerator_Html2PDF($pdfParams); $this->sendJson(array('result' => $this->Translate('Создан отчет в формате PDF'), 'url_file_pdf' => $urlFilePDF)); } break; case 'exel': break; default: break; } } catch (Exception $exc) { $jsons = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка формирования отчета') . '</em>', Default_Plugin_SysBox::getMessageError($exc))); $this->sendJson($jsons); } }
/** * Initialization Log, Search, KCFinder * * @return void */ protected function _initLog() { $params = array(); //------------------ $_startTime = microtime(1); //Получим конфигурацию $config = $this->_options; //----- Create Zend_Log object ----- $columnMapping = array('ts' => 'timestamp', 'msg' => 'message', 'pr' => 'priority', 'pr_name' => 'priorityName'); $countMsg = $config['logging']['log']['max_rows']; $countEx = $config['logging']['exeption']['max_rows']; $countStat = $config['logging']['statistics']['max_rows']; // Get DB $db = Zend_Registry::get('db'); // Set params $params['db'] = $db; $params['columnMap'] = $columnMapping; // Create writer for DB $params['table'] = 'log_msg'; $params['max_rows'] = $countMsg; $writerMsg = new Default_Model_Log($params); $params['table'] = 'log_error'; $params['max_rows'] = $countEx; $writerEx = new Default_Model_Log($params); $params['table'] = 'log_stat'; $params['max_rows'] = $countStat; $writerStat = new Default_Model_Log($params); // Create logers $logMsg = new Zend_Log($writerMsg); $logEx = new Zend_Log($writerEx); $logStat = new Zend_Log($writerStat); // Adding new priorities for the $logMsg $logMsg->addPriority('LOGIN_OK', 8); $logMsg->addPriority('LOGIN_ERR', 9); $logMsg->addPriority('LOGOUT', 10); $logMsg->addPriority('REG_OK', 11); $logMsg->addPriority('REG_ERR', 12); $logMsg->addPriority('DETAILS_OK', 13); $logMsg->addPriority('FETCHPASS_COMPLETE_OK', 14); $logMsg->addPriority('FETCHPASS_COMPLETE_ERR', 15); $logMsg->addPriority('FETCHPASS_CONFIRM_OK', 16); $logMsg->addPriority('FETCHPASS_CONFIRM_ERR', 17); $logMsg->addPriority('MAIL_OK', 18); $logMsg->addPriority('MAIL_ERR', 19); $logMsg->addPriority('DB_SAVE_ERR', 20); $logMsg->addPriority('DB_DELETE_ERR', 21); $logMsg->addPriority('POST_EDIT', 22); $logMsg->addPriority('POST_SET_STATUS', 23); $logMsg->addPriority('ADMIN_POST_EDIT', 24); $logMsg->addPriority('ADMIN_ROW_UPDATE', 25); $logMsg->addPriority('ADMIN_ROW_INSERT', 26); $logMsg->addPriority('ADMIN_ROW_DELETE', 27); $logMsg->addPriority('MY_MSG', 28); // Adding new priorities for the $logStat $logStat->addPriority('LOGIN_OK', 8); $logStat->addPriority('LOGIN_ERR', 9); $logStat->addPriority('MAIL_OK', 10); $logStat->addPriority('FETCHPASS_COMPLETE_OK', 11); $logStat->addPriority('FETCHPASS_COMPLETE_ERR', 12); $logStat->addPriority('FETCHPASS_CONFIRM_OK', 13); $logStat->addPriority('FETCHPASS_CONFIRM_ERR', 14); $logStat->addPriority('POST_OPEN', 15); $logStat->addPriority('VIDEO_PLAY', 16); $logStat->addPriority('AUDIO_PLAY', 17); $emailParams = $config['logging']['email']; if ($emailParams['send']) { $mail = Default_Plugin_SysBox::createMail($emailParams); $writer = new Zend_Log_Writer_Mail($mail); $my_request = Default_Plugin_SysBox::getUrlRequest(); if (!$emailParams['subject']) { $writer->setSubjectPrependText('Errors request - ' . $my_request); } $writer->addFilter(Zend_Log::EMERG); $writer->addFilter(Zend_Log::ALERT); $writer->addFilter(Zend_Log::CRIT); $writer->addFilter(Zend_Log::ERR); $logger->addWriter($writer); } // Save to Registry Zend_Registry::set("Zend_Log", $logMsg); Zend_Registry::set("Zend_LogEx", $logEx); Zend_Registry::set("Zend_LogStat", $logStat); // Remember in the session array of search results $Zend_Auth = Zend_Registry::get("Zend_Auth"); if (!$Zend_Auth->search) { $Zend_Auth->search = array(); } //------------ Configure default search ------------- // Establish a query analyzer in the coding Utf8 Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive()); //------ Initialization file manager ------------- Default_Plugin_SysBox::iniKCFinder(); //---- Defining script execution time ---- $infoProfiler = Default_Plugin_SysBox::Translate("Время выполнения") . " Bootstrap_initLog(): "; Default_Plugin_SysBox::profilerTime2Registry($_startTime, $infoProfiler); }
/** * Action - fetchpassword * fetch new password * * Access to the action is possible in the following paths: * - /account/fetchpassword * * @return void */ public function fetchpasswordAction() { //---------------------- // if a user's already logged in, send them to their account home page if (Zend_Auth::getInstance()->hasIdentity()) { $this->_redirect('/account'); } // Определим полный адрес активации нового пароля $ActivateURL = Default_Plugin_SysBox::getFullURL(array('controller' => 'account', 'action' => 'fetchpassword')); //Создадим обьект формы $fetchpasswordForm = new Default_Form_FetchPassword(); $action = $this->getRequest()->getQuery('action'); if ($this->getRequest()->isPost()) { $action = 'submit'; } switch ($action) { case 'submit': // Проверяем на валидность поля формы $params = $this->_getAllParams(); $result = $fetchpasswordForm->isValid($params); if ($result) { $username = trim($params['username']); $user = new Default_Model_DbTable_User($this->db); if ($user->load($username, 'username')) { if ($user->fetchPassword()) { // Запомним в логе сообщений $message = "For user=\"{$username}\" created a new password, and sended to email"; $this->_logMsg->fetchpass_complete_ok($message); // Запомним в логе статистики $serialized = $this->_serializer->serialize(array('user' => $username)); $this->_logStat->fetchpass_complete_ok($serialized); $url = '/account/fetchpassword?action=complete'; $this->_redirect($url); } else { // Запомним в логе сообщений $message = "Error fetch the password for user=\"{$username}\""; $this->_logMsg->fetchpass_complete_err($message); // Запомним в логе статистики $reason = "user->fetchPassword()->ERROR"; $serialized = $this->_serializer->serialize(array('user' => $username, 'reason' => $reason)); $this->_logStat->fetchpass_complete_err($serialized); } } else { // Запомним в логе сообщений $message = "User name - \"{$username}\" was not found"; $this->_logMsg->fetchpass_complete_err($message); // Запомним в логе статистики $serialized = $this->_serializer->serialize(array('user' => $username, 'reason' => $message)); $this->_logStat->fetchpass_complete_err($serialized); //Выведем сообщение - что пользователь с таким именем не найден! $this->view->class_message = 'warning'; $this->view->message = $this->Translate('Пользователь с таким именем не найден.'); } } break; case 'complete': //Выведем сообщение - что новый пароль пользователя был передан на e-mail! $this->view->class_message = 'message'; $this->view->message = $this->Translate('Ваш новый пароль был передан на Emaile'); break; case 'confirm': $id = $this->getRequest()->getQuery('id'); $key = $this->getRequest()->getQuery('key'); $user = new Default_Model_DbTable_User($this->db); if (!$user->load($id)) { // Запомним в логе сообщений $message = "User with this ID=\"{$id}\" is not found in the database"; $this->_logMsg->fetchpass_confirm_err($message); $serialized = $this->_serializer->serialize(array('user_id' => $id, 'reason' => 'User is not found in the database')); $this->_logStat->fetchpass_confirm_err($serialized); //Выведем сообщение - что пользователь с таким ID не найден в базе данных $this->view->class_message = 'warning'; $this->view->message = $this->Translate('Ошибка подтверждения нового пароля.'); break; } else { if (!$user->confirmNewPassword($key)) { // Запомним в логе сообщений $message = "A user=\"{$user->username}\" has not been tested to confirm the password function"; $this->_logMsg->fetchpass_confirm_err($message); $serialized = $this->_serializer->serialize(array('user' => $user->username, 'key' => $key, 'reason' => 'Error checking function to confirm the password')); $this->_logStat->fetchpass_confirm_err($serialized); //Выведем сообщение - что не прошла проверку ф-ия подтверждения пароля $this->view->class_message = 'warning'; $this->view->message = $this->Translate('Ошибка подтверждения нового пароля.'); break; } } // Запомним в логе сообщений $message = "User (\"{$user->username}\"), your new password has been successfully activated."; $this->_logMsg->fetchpass_confirm_ok($message); $serialized = $this->_serializer->serialize(array('user' => $user->username)); $this->_logStat->fetchpass_confirm_ok($serialized); //Выведем сообщение - что новый парoль пользователя был успешно активирован $this->view->class_message = 'message'; $this->view->message = $this->Translate('Ваш новый пароль был успешно активирован.'); break; } $this->view->ActivateURL = $ActivateURL; $this->view->action = $action; $this->view->fetchpasswordForm = $fetchpasswordForm; //Добавим путь к действию $this->_breadcrumbs->addStep($this->Translate('Вход'), $this->getUrl('login')); $this->_breadcrumbs->addStep($this->Translate('Получить пароль')); }
/** * Removes the base path of the URL to HTML resources * * @param string $html * @return string|bool If error, then output FALSE */ protected function deleteBasePathUrl($html) { //$domHtml $str_begin = '<?xml version="1.0" encoding="utf-8"?>' . "\n" . '<body>'; $str_end = '</body>'; //--------------------------- $filtrHtmlEntities = new Default_Form_Filter_HtmlEntities(); $html = $filtrHtmlEntities->filter($html); $html = $str_begin . $html . $str_end; // Check for correct XML $domDoc = new DOMDocument('1.0', 'utf-8'); $success = $domDoc->loadXML($html); if (!$success) { return FALSE; } // Correct code $domQuery = new Zend_Dom_Query(); $domQuery->setDocumentXml($html, "utf-8"); foreach (self::$tags as $tag => $attr) { $results = $domQuery->query($tag); if ($results->count()) { foreach ($results as $result) { // $result variable is of DOMElement type if ($result->hasAttribute($attr)) { $value = $result->getAttribute($attr); $st = new Default_Plugin_String($value); if ($st->beginsWith('/')) { // it was: /zf-myblog/public/pic/1.gif // it is: /pic/1.gif $baseURL = Default_Plugin_SysBox::getBaseURL(); $value = str_replace($baseURL, '', $value); $result->setAttribute($attr, $value); } else { // it was: https://mysite.com:8080/zf-myblog/public/pic/1.gif // it is: /pic/1.gif $hostPortBaseURL = Default_Plugin_SysBox::getHostPortBaseURL(); $value = str_replace($hostPortBaseURL, '', $value); $result->setAttribute($attr, $value); } } } $domDoc = $results->getDocument(); $html = $domDoc->saveXml(); $domQuery->setDocumentXml($html, "utf-8"); } } $html = str_replace($str_begin, '', $html); $html = str_replace($str_end, '', $html); return $html; }
/** * * Get report data * * @param string $table * * @return array */ protected function _getReportData($table) { $arrResultData = array(); $rows_footer = array(); $footer_colspan = 2; //------------------- // Получим данные для отчета $arrData = parent::_getReportData($table); // Установим параметры PDF по умолчанию $arrResultData['pdf']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/notice-info24x24.png'); $arrResultData['pdf']['title_report'] = $this->Translate('Список инф. помощи'); $arrResultData['pdf']['is_row_header'] = TRUE; $arrResultData['pdf']['pageFormat'] = 'A4'; // Установим параметры для HTML по умолчанию $arrResultData['html']['column_model'] = $arrData['column_model']; $arrResultData['html']['is_group_head'] = $arrData['is_group_head']; $arrResultData['html']['rows_body'] = isset($arrData['rows']) ? $arrData['rows'] : array(); $arrResultData['html']['is_row_header'] = true; $arrResultData['html']['footer_colspan'] = $footer_colspan; // Получим данные для отчета switch ($table) { case 'admin.blog_info': // Исключим в отчете некоторые поля $fieldsExcluded = array('actual'); $newModelColumns = parent::_excludeFieldsFromReport($fieldsExcluded, $arrData['column_model']); $arrResultData['html']['column_model'] = $newModelColumns; // Получим массив записей для нижнего колонтитула $footers[] = array('id' => $this->Translate('Всего записей') . ':', 'info_key' => 'count', 'title_info' => ' '); $rows_footer = parent::_footerForReport(array('footer_colspan' => $footer_colspan, 'rows' => $arrData['rows'], 'column_model' => $newModelColumns, 'footers' => $footers)); // Установим параметры для HTML $arrResultData['html']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/notice-info24x24.png'); $arrResultData['html']['title_report'] = $this->Translate('Список инф. помощи'); $arrResultData['html']['rows_footer'] = $rows_footer; $arrResultData['html']['is_row_header'] = TRUE; $arrResultData['html']['footer_colspan'] = 1; // Установим параметры PDF $arrResultData['pdf']['pageFormat'] = 'A4'; $arrResultData['pdf']['is_row_header'] = false; break; default: break; } return $arrResultData; }
/** * Get information about PHP * * @param Smarty $smarty * @return string */ function smarty_function_info_php($smarty) { return Default_Plugin_SysBox::getPHPInfo(); }
/** * Action - comments * actions for user comments * * Access to the action is possible in the following paths: * шаблон раутера - user/:username/post/:post_id/comments/* * * - /user/user1/post/27/comments * * @return void */ public function commentsAction() { $json = array(); $result = TRUE; //----------------------- // Получим обьект запроса $request = $this->getRequest(); $params = $request->getParams(); $type_action = $params['type_action']; $post_id = (int) $request->getUserParam('post_id'); $username = trim($request->getUserParam('username')); try { if ($type_action == 'delete') { // Удалим комментарий // Получим массив комментариев для удаления $comment_ids = $params["comment_ids"]; $comment_ids = Zend_Json::decode($comment_ids); $parent_comment_id = $comment_ids[0]; // Удалим комментарии из базы данных $comment = new Default_Model_DbTable_BlogPostComment($this->db); foreach ($comment_ids as $comment_id) { if ($comment->loadForPost($post_id, $comment_id)) { $comment->delete(); } else { $result = FALSE; break; } } if ($result) { $json = array('deleted' => true, 'result' => $this->Translate('Комментарий удален из сообщения блога'), 'comment_id' => $parent_comment_id); } else { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка при добавлении / удалении комментария в блог') . '</em>')); } } else { if ($type_action == 'add' || $type_action == 'reply' || $type_action == 'edit') { // Добавим/изменим комментарий на сообщение $allParams = $this->_getAllParams(); $reply_id = $params["reply_id"]; $formAddComment = new Default_Form_AddComment($username, $post_id); $result = $formAddComment->isValid($allParams); if ($result) { $comment = new Default_Model_DbTable_BlogPostComment($this->db); if ($type_action == 'edit') { if ($comment->loadForPost($post_id, $reply_id)) { $comment->comment = $formAddComment->getValue('ckeditor_comment'); } else { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка при сохранении данных') . '</em>')); } } else { $comment->user_id = $this->_identity->user_id; $comment->post_id = $post_id; $comment->reply_id = $reply_id; $comment->comment = $formAddComment->getValue('ckeditor_comment'); } if ($comment->save()) { if ($type_action == 'edit') { $html = $formAddComment->getValue('ckeditor_comment'); $result = $this->Translate('Комментарий изменен'); } else { // Получим параметр для шаблона $treeComments = Default_Model_DbTable_BlogPostComment::getTreeComments($this->db, $this->user->getId(), array('post_id' => $post_id, 'comment_id' => $comment->getId())); // Создадим обьект шаблона $templater = Default_Plugin_SysBox::createViewSmarty(); //Установим параметры шаблона $templater->treeComments = $treeComments; $templater->authenticated = true; $templater->isAdmin = $this->_isAdmin; $templater->identity = $this->_identity; // Получим результат шаблона $html = $templater->render('user/lib/comment-item.tpl'); $result = $this->Translate('Добавлен комментарий к сообщению блога'); } $json = array('added' => true, 'result' => $result, 'comment_id' => $comment->getId(), 'html' => $html); } else { // Ошибка записи в базу данных $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка при сохранении данных') . '</em>')); } } else { // неверно заполнены поля формы $json = array('class_message' => 'warning', 'messages' => $this->getFormMessages($formAddComment)); } } } } catch (Exception $e) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка при добавлении / удалении комментария в блог') . '</em>', Default_Plugin_SysBox::getMessageError($e))); } $this->sendJson($json); }
/** * The event is called after Zend_Controller_Front of its dispatch loop. * * @param Zend_Controller_Request_Abstract $request */ public function dispatchLoopShutdown() { // Сформируем суммарный отчет времени выполнения запроса Default_Plugin_SysBox::profilerTotalReport2Html($this->_startTimeProfiler, 'db'); }
/** * * Get report data * * @param string $table * * @return array */ protected function _getReportData($table) { $arrResultData = array(); $rows_footer = array(); $footer_colspan = 2; //------------------- // Получим данные для отчета $arrData = parent::_getReportData($table); // Установим параметры PDF $url_logo_report = Default_Plugin_SysBox::getFullURL_Res('/images/system/users48x48.png'); // echo $url_logo_report . '<br>'; $arrResultData['pdf']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/users48x48.png'); $arrResultData['pdf']['title_report'] = $this->Translate('Пользователи сайта'); $arrResultData['pdf']['pageFormat'] = 'A4'; // Установим параметры для HTML $arrResultData['html']['column_model'] = $arrData['column_model']; $arrResultData['html']['is_group_head'] = $arrData['is_group_head']; $arrResultData['html']['rows_body'] = isset($arrData['rows']) ? $arrData['rows'] : array(); $arrResultData['html']['is_row_header'] = false; $arrResultData['html']['footer_colspan'] = $footer_colspan; // Получим данные для отчета switch ($table) { case 'admin.users': // Исключим в отчете некоторые поля $fieldsExcluded = array('id', 'actual', 'password'); $newModelColumns = parent::_excludeFieldsFromReport($fieldsExcluded, $arrData['column_model']); $arrResultData['html']['column_model'] = $newModelColumns; // Получим массив записей для нижнего колонтитула $footers[] = array('username' => $this->Translate('Всего записей') . ':', 'email' => 'count'); $rows_footer = parent::_footerForReport(array('footer_colspan' => $footer_colspan, 'rows' => $arrData['rows'], 'column_model' => $newModelColumns, 'footers' => $footers)); // Установим параметры для HTML $arrResultData['html']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/users34x34.png'); $arrResultData['html']['title_report'] = $this->Translate('Список пользователей сайта'); $arrResultData['html']['rows_footer'] = $rows_footer; $arrResultData['html']['is_row_header'] = true; // $arrResultData['html']['footer_colspan'] = $footer_colspan; // Установим параметры PDF $arrResultData['pdf']['pageFormat'] = 'A4-L'; break; default: break; } return $arrResultData; }
/** * Action - video * upload/download/ordering video * * Access to the action is possible in the following paths: * - /blogmanager/video * * @return void */ public function videoAction() { $json = array(); $filterSanitize = new Default_Form_Filter_Sanitize(); //----------------------- // Получим обьект записи $request = $this->getRequest(); $params = $request->getParams(); $post_id = (int) $request->getPost('id'); if (!$post_id) { $post_id = (int) $request->getParam('id'); } $post = new Default_Model_DbTable_BlogPost($this->db); // Если конкретной записи нет, то перейдем к странице по умолчанию if (!$post->loadForUser($this->_identity->user_id, $post_id)) { $this->_redirect('/blogmanager'); } // Определим тип операции над видео: 'upload', 'reorder', 'delete' // Загрузка файла с помощью - FileUploader if (Default_Plugin_FileUploader::isFileUploader()) { // Получим вид загрузчика - Iframe или Xhr $fileUploader = Default_Plugin_FileUploader::isFileUploader(); // list of valid extensions, ex. array("jpeg", "xml", "bmp") $allowedExtensions = $params['allowedExtensions']; $allowedExtensions = str_replace(' ', '', $allowedExtensions); $arrAllowedExtensions = explode(';', $allowedExtensions); // max file size in bytes $sizeLimit = (int) $request->getParam('sizeLimit'); // Получим обьект загрузчика файлов try { $uploader = new Default_Plugin_FileUploader($arrAllowedExtensions, $sizeLimit); // Определим путь загрузки файлов $path = Default_Model_DbTable_BlogPostVideo::GetUploadPath(); $path .= '/'; //Загрузим файлы $result = $uploader->handleUpload($path); } catch (Exception $e) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка загрузки файла') . '</em>', Default_Plugin_SysBox::getMessageError($e))); if ($fileUploader == 'Iframe') { $this->sendJson_Html($json); } else { $this->sendJson($json); } return; } if (isset($result['success'])) { // Создадим обьект изображения try { $filename = $path . $uploader->file->getName(); $pathinfo = pathinfo($filename); $ext = $pathinfo['extension']; $video = new Default_Model_DbTable_BlogPostVideo($post->getDb()); $video->post_id = $post->getId(); $video->uploadFile($filename); $video->identifier = basename($filename); $video->type = 'file-' . $ext; if (!$video->save()) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка при сохранении данных') . '</em>')); if ($fileUploader == 'Iframe') { $this->sendJson_Html($json); } else { $this->sendJson($json); } return; } $json['success'] = $result['success']; $json['video_id'] = $video->getId(); $json['filename'] = $video->identifier; $json['post_id'] = $video->post_id; $json['form_action'] = $this->getUrl('video', 'blogmanager'); // Определим путь к изображению для видео $srcImage = 'images/media/thumbs/' . $video->type . '.png'; $json['url_image'] = $this->getUrlRes($srcImage) . '?id=' . $video->getId(); } catch (Exception $e) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка загрузки файла') . '</em>', Default_Plugin_SysBox::getMessageError($e))); if ($fileUploader == 'Iframe') { $this->sendJson_Html($json); } else { $this->sendJson($json); } return; } } else { // Error $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка загрузки файла') . '</em>', $result['error'])); if ($fileUploader == 'Iframe') { $this->sendJson_Html($json); } else { $this->sendJson($json); } return; } } else { if ($request->getPost('add_video_url')) { // Создадим обьект изображения try { $strInfoVideo = $request->getPost('info_video'); $strInfoVideo = stripslashes($strInfoVideo); $arrInfoVideo = Zend_Json::decode($strInfoVideo); $video = new Default_Model_DbTable_BlogPostVideo($post->getDb()); $video->post_id = $post->getId(); $video->identifier = $arrInfoVideo['url']; $video->type = $arrInfoVideo['type']; if (!$video->save()) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка при сохранении данных') . '</em>')); $this->sendJson($json); return; } // Определим путь к изображению для видео $srcImage = 'images/media/thumbs/' . $video->type . '.png'; $json['video_id'] = $video->getId(); $json['filename'] = $video->identifier; $json['post_id'] = $video->post_id; $json['url_image'] = $this->getUrlRes($srcImage) . '?id=' . $video->getId(); $json['form_action'] = $this->getUrl('video', 'blogmanager'); $json['result'] = $this->Translate('URL на ресурс добавлен'); } catch (Exception $e) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка загрузки файла') . '</em>', Default_Plugin_SysBox::getMessageError($e))); $this->sendJson($json); return; } } else { if ($request->getPost('reorder')) { $order = $request->getPost('preview-video'); $post->setVideoOrder($order); } else { if ($request->getPost('delete')) { $video_id = (int) $request->getPost('image'); $video = new Default_Model_DbTable_BlogPostVideo($this->db); if ($video->loadForPost($post->getId(), $video_id)) { $video->delete(); // Определим кол. оставшихся изображений $count_videos = count($post->video) - 1; $json = array('deleted' => true, 'image_id' => $video_id, 'count_images' => $count_videos); } } else { if ($request->getPost('comment_update')) { $video_id = (int) $request->getPost('image'); $video = new Default_Model_DbTable_BlogPostVideo($this->db); if ($video->loadForPost($post->getId(), $video_id)) { $comment = $request->getPost('comment'); // Отфильтруем ненужные теги в комментарии $comment = $filterSanitize->filter($comment); // Выделим название и комментарий $arrComment = explode('#', $comment); // Если тип видео -> 'url-godtv', то важно получить точное название видео // это название должно точно соответствовать пути к загрузочной странице этого видео // пр. http://god-tv.ru/%D0%A0%D0%B5%D1%88%D0%B0%D1%8E%D1%89%D0%B8%D0%B9-%D1%80%D1%8B%D0%B2%D0%BE%D0%BA-%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5%D1%82%D1%8C-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD // или так %D0%A0%D0%B5%D1%88%D0%B0%D1%8E%D1%89%D0%B8%D0%B9-%D1%80%D1%8B%D0%B2%D0%BE%D0%BA-%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%B5%D1%82%D1%8C-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD // или так "Решающий-рывок-смотреть-онлайн" if ($video->type == 'url-godtv') { $tmpName = urldecode($arrComment[0]); $tmpNames = explode('/', $tmpName); $tmpName = $tmpNames[count($tmpNames) - 1]; $arrComment[0] = $tmpName; } if (count($arrComment) > 1) { $video->name = $arrComment[0]; $video->comment = $arrComment[1]; } else { $video->name = $arrComment[0]; } // Сохраним в базе данных if (!$video->save()) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка при сохранении данных') . '</em>')); $this->sendJson($json); return; } $json = array('commented' => true, 'title' => $video->name, 'comment' => $video->comment); } } else { if ($request->getPost('download_images')) { // Загрузим изображения в виде HTML на страницу // Получим файлы видео для статьи $videos = Default_Model_DbTable_BlogPostVideo::GetVideo($this->db, array('post_id' => $post_id)); // Создадим обьект шаблона $templater = Default_Plugin_SysBox::createViewSmarty(); //Установим параметры шаблона $templater->videos = $videos; $templater->post_id = $post_id; // Получим результат шаблона $html = $templater->render('blogmanager/lib/download-video.tpl'); $json = array('downloaded' => true, 'html' => $html); } } } } } } if ($this->_isAjaxRequest) { $this->sendJson($json); } else { $this->sendJson_Html($json); } }
/** * 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; }
/** * Constructor * * @param array $params */ public function __construct($params) { $this->_schema = $params['schema'] ? $params['schema'] : ''; $this->_table = $params['table']; $this->_fieldKey1 = $params['fieldKey1']; $this->_fieldKey2 = $params['fieldKey2']; $this->_id = (int) $params['id'] ? $params['id'] : 0; if (isset($params['adapter'])) { $this->_adapter = $params['adapter']; } else { // Если адаптер не задан, пробуем подключить адаптер заданный по умолчанию для Zend_Db_Table $adapter = Zend_Db_Table::getDefaultAdapter(); // Если адаптер по умолчанию не задан выбрасываем исключение if ($adapter == null) { throw new Exception(Default_Plugin_SysBox::Translate('Адаптер базы данных, заданный по умолчанию не был найден')); } } }
/** * Get the full URL to the resource * * @return string */ public function getFullUrl_Res($username = '') { return Default_Plugin_SysBox::getFullURL_Res($this->getFullUrl($username)); }
/** * Action - clearcache * clear cache * * Access to the action is possible in the following paths: * - /admin/tools/clearcache * * @return void */ public function clearcacheAction() { $json = array(); //------------------ $dbCache = Default_Plugin_SysBox::getCache('db'); $paginatorCache = Default_Plugin_SysBox::getCache('paginator'); $pageCache = Default_Plugin_SysBox::getCache('page'); if ($dbCache) { $dbCache->clean(Zend_Cache::CLEANING_MODE_ALL); } if ($paginatorCache) { $paginatorCache->clean(Zend_Cache::CLEANING_MODE_ALL); } if ($pageCache) { $pageCache->clean(Zend_Cache::CLEANING_MODE_ALL); } if ($this->_isAjaxRequest) { $json = array('class_message' => 'information', 'messages' => array('<em>' . $this->Translate("Очистить кеш") . '!</em>', $this->Translate("Кеш очищен") . '.')); $this->sendJson($json); } else { $this->view->class_message = 'information'; $message = array('<em>' . $this->Translate("Очистить кеш") . '!</em>', $this->Translate("Кеш очищен") . '.'); $this->view->message = $message; } $this->_breadcrumbs->addStep($this->Translate('Очистить кеш')); }
function getSize() { if (isset($_SERVER["CONTENT_LENGTH"])) { return (int) $_SERVER["CONTENT_LENGTH"]; } else { throw new Exception(Default_Plugin_SysBox::Translate('Длина, полученного содержимого слишком большая.')); } }
/** * Get sorted and grouped values from table column * * @param Zend_Db_Adapter_Abstract $db * @param array $options * @return array */ public static function GetValuesForCol($db, $options) { $arrValues = FALSE; //---------------------- // инициализация параметров $defaults = array('offset' => 0, 'limit' => 0, 'group' => TRUE, 'order' => 'p.ts_created'); foreach ($defaults as $k => $v) { $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v; } $select = self::_GetBaseQuery($db, $options); // set the offset, limit, and ordering of results if ($options['limit'] > 0) { $select->limit($options['limit'], $options['offset']); } // Установим параметры сортировки для таблицы $select = self::GetSelectForSort($select, $options); // Добавим группировку и соответствующую колонку $aliasTable = Default_Model_DatabaseObject::getAliasForTable($select, $options['joinTableForSort']); if ($aliasTable) { $orderData = $select->getPart(Zend_Db_Select::ORDER); if ($options['group']) { $select->group($orderData[0][0]); } // Найдем алиас таблицы, запрашиваемого поля $arrAliasTable = explode('_', $aliasTable); $select->columns(array($arrAliasTable[0] . '.id', $orderData[0][0])); } else { if ($options['group']) { $select->group('p.' . $options['field']); } $select->columns(array('p.id', 'p.' . $options['field'])); } $strSelect = $select->__toString(); //------ Применить кеширование ------- $dbCache = Default_Plugin_SysBox::getCache('db'); if ($dbCache->getOption('caching')) { // Получим TAG для кеширования $arrItems = array($select, $options); $strSerialize = serialize($arrItems); $tagCache = md5($strSerialize); // Очистим кеш if (Default_Plugin_SysBox::isCleanCache()) { $dbCache->clean(Zend_Cache::CLEANING_MODE_ALL); } // Получим данные из кеша по тегу $tagCache $arrValues = $dbCache->load($tagCache); } // проверка, есть ли уже данные в кэше: if ($arrValues === FALSE) { $arrValues = $db->fetchPairs($select); // Если разрешено кеширование, то сохраним данные в кеше if ($dbCache->getOption('caching')) { $dbCache->save($arrValues, $tagCache); } } else { $result = $arrValues; } return $arrValues; }
static function mpdfGenerator_Html2PDF($params = array()) { $translate = Zend_Registry::get('Zend_Translate'); //----------------------------- if (!$params['pdfReport'] || !$params['html']) { throw new Exception($translate->_('ERR_CREATE_PDF_REPORT')); } $mode = ''; // Получим URLLogoReport $config = Zend_Registry::get('config'); $urlLogoReport = $config['user']['main']['logo_report']; $urlLogoReport = self::getFullURL_Res($urlLogoReport); //------------------------------------------------------ // Установим значения по умолчанию $defaults = array('pdfReport' => '', 'html' => '', 'isCommonFont' => FALSE, 'pathStylesheet' => 'css/report/mpdf-style.css', 'isHeaders' => TRUE, 'isFooters' => TRUE, 'mirrorMargins' => TRUE, 'headerLeftMargin' => '', 'headerCentreMargin' => $urlLogoReport, 'headerRightMargin' => '{PAGENO}/{nbpg}', 'footerLeftMargin' => '{DATE Y-m-j}', 'footerCentreMargin' => '', 'footerRightMargin' => '', 'pageFormat' => 'A4'); // Обьединим два массива $params = array_merge($defaults, $params); if (!$params['footerRightMargin']) { $params['footerRightMargin'] = self::getFullUrl_For_FilePDF($params['pdfReport']); } // Установим значения переменных из массива // extract($params, EXTR_OVERWRITE); try { // Изменим параметры PHP self::iniSetConfig_PHP(array("memory_limit" => "500M", "max_execution_time" => "300")); // require_once("mpdf_source.php"); require_once "mpdf.php"; if ($params['isCommonFont']) { $mode = 'c'; } $isHeaders = (bool) $params['isHeaders']; $isFooters = (bool) $params['isFooters']; if ($isHeaders || $isFooters) { $mpdf = new mPDF($mode, $params['pageFormat'], '', '', 15, 15, 32, 20, 10, 10); } else { $mpdf = new mPDF($mode, $params['pageFormat']); } // Установим параметры для оптимизации (уменьшим время испольнения и используемую память) $mpdf->useOnlyCoreFonts = true; $mpdf->useSubstitutions = false; $mpdf->simpleTables = true; // Уменьшает время выполнения $mpdf->packTableData = true; // Уменьшает используемую память $mpdf->use_kwt = true; //Keep-with-table Оставить заголовок таблицы вместе с маблицей на одной странице // $mpdf->shrink_tables_to_fit=0; // $mpdf->hyphenate = true; // $mpdf->SHYlang = 'ru'; // $mpdf->SHYleftmin = 3; // Определим заголовок страницы $header = " \n <table width=\"100%\" style=\"border-bottom: 1px solid #000000; vertical-align: bottom; font-weight: bold; font-size: 14pt; color: #000088;\"><tr>\n <td width=\"33%\"><span style=\"\">{$params['headerLeftMargin']}</span></td>\n <td width=\"33%\" align=\"center\"><img src=\"{$params['headerCentreMargin']}\" /></td>\n <td width=\"33%\" style=\"text-align: right;\"><span style=\"\">{$params['headerRightMargin']}</span></td>\n </tr></table>\n "; // Определим подвал страницы $footer = "\n <table width=\"100%\" style=\"vertical-align: bottom; font-size: 14pt; color: #000088; font-weight: bold; font-style: italic;\"><tr>\n <td width=\"33%\"><span style=\"\">{$params['footerLeftMargin']}</span></td>\n <td width=\"33%\" align=\"center\" style=\"\">{$params['footerCentreMargin']}</td>\n <td width=\"33%\" style=\"text-align: right; \">{$params['footerRightMargin']}</td>\n </tr></table>\n "; if ($mirrorMargins) { $headerE = "\n <table width=\"100%\" style=\"border-bottom: 1px solid #000000; vertical-align: bottom; font-weight: bold; font-size: 14pt; color: #000088;\"><tr>\n <td width=\"33%\"><span style=\"\"><span style=\"\">{$params['headerRightMargin']}</span></span></td>\n <td width=\"33%\" align=\"center\"><img src=\"{$params['headerCentreMargin']}\" /></td>\n <td width=\"33%\" style=\"text-align: right;\"><span style=\"\">{$params['headerLeftMargin']}</span></td>\n </tr></table>\n "; $footerE = "\n <table width=\"100%\" style=\"vertical-align: bottom; font-size: 14pt; color: #000088; font-weight: bold; font-style: italic;\"><tr>\n <td width=\"33%\"><span style=\"\">{$params['footerRightMargin']}</span></td>\n <td width=\"33%\" align=\"center\" style=\"\">{$params['footerCentreMargin']}</td>\n <td width=\"33%\" style=\"text-align: right; \">{$params['footerLeftMargin']}</td>\n </tr></table>\n "; if ($isHeaders) { $mpdf->mirrorMargins = TRUE; // Use different Odd/Even headers and footers and mirror margins $mpdf->SetHTMLHeader($headerE, 'E'); } if ($isFooters) { $mpdf->mirrorMargins = TRUE; // Use different Odd/Even headers and footers and mirror margins $mpdf->SetHTMLFooter($footerE, 'E'); } } if ($isHeaders) { $mpdf->SetHTMLHeader($header); } if ($isFooters) { $mpdf->SetHTMLFooter($footer); } $html = $params['html']; //$html = ''; //$params['pathStylesheet'] = ''; if ($params['pathStylesheet']) { $stylesheet = file_get_contents($params['pathStylesheet']); $mpdf->WriteHTML($stylesheet, 1); $mpdf->WriteHTML($html, 2); } else { $mpdf->WriteHTML($html); } // Получим директорию сохранения файлов $dirFilePDF = self::getPath_For_FilePDF($params['pdfReport']); // Сохраним файл на серверном ресурсе пользователя $mpdf->Output($dirFilePDF, 'F'); } catch (Exception $exc) { throw new Exception($exc->getMessage()); } // Возвратим URL путь, полученного файла PDF return Default_Plugin_SysBox::getFullUrl_For_FilePDF($params['pdfReport']); }
/** * * Get locale * * @param Smarty $smarty * @return string */ function smarty_function_getlang($smarty) { return Default_Plugin_SysBox::getTranslateLocale(); }
/** * 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 report data * * @param string $table * * @return array */ protected function _getReportData($table) { $arrResultData = array(); $rows_footer = array(); $footer_colspan = 2; //------------------- // Получим данные для отчета $arrData = parent::_getReportData($table); // Установим параметры PDF по умолчанию $arrResultData['pdf']['is_row_header'] = false; $arrResultData['pdf']['pageFormat'] = 'A4'; // Установим параметры для HTML по умолчанию $arrResultData['html']['column_model'] = $arrData['column_model']; $arrResultData['html']['is_group_head'] = $arrData['is_group_head']; $arrResultData['html']['rows_body'] = isset($arrData['rows']) ? $arrData['rows'] : array(); $arrResultData['html']['is_row_header'] = TRUE; $arrResultData['html']['footer_colspan'] = $footer_colspan; // Исключим в отчете некоторые поля $fieldsExcluded = array('pr'); $newModelColumns = parent::_excludeFieldsFromReport($fieldsExcluded, $arrData['column_model']); $arrResultData['html']['column_model'] = $newModelColumns; // Получим массив записей для нижнего колонтитула $footers[] = array('id' => $this->Translate('Всего записей') . ':', 'ts' => 'count', 'pr_name' => ' '); // Сформируем набор записей для нижнего колонтитула $rows_footer = parent::_footerForReport(array('footer_colspan' => $footer_colspan, 'rows' => isset($arrData['rows']) ? $arrData['rows'] : array(), 'column_model' => $newModelColumns, 'footers' => $footers)); $arrResultData['html']['rows_footer'] = $rows_footer; // Получим данные для отчета switch ($table) { case 'admin.log_msg': // Установим параметры PDF $arrResultData['pdf']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/update_log.gif'); $arrResultData['pdf']['title_report'] = $this->Translate('Лог сообщений'); // Установим параметры для HTML $arrResultData['html']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/update_log.gif'); $arrResultData['html']['title_report'] = $this->Translate('Лог сообщений'); break; case 'admin.log_stat': // Установим параметры PDF $arrResultData['pdf']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/logStat20x20.png'); $arrResultData['pdf']['title_report'] = $this->Translate('Лог статистики'); // Установим параметры для HTML $arrResultData['html']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/logStat20x20.png'); $arrResultData['html']['title_report'] = $this->Translate('Лог статистики'); break; case 'admin.log_error': // Установим параметры PDF $arrResultData['pdf']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/delete.gif'); $arrResultData['pdf']['title_report'] = $this->Translate('Лог ошибок'); // Установим параметры для HTML $arrResultData['html']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/delete.gif'); $arrResultData['html']['title_report'] = $this->Translate('Лог ошибок'); break; default: break; } return $arrResultData; }
/** * * Get report data * * @param string $table * * @return array */ protected function _getReportData($table) { $arrResultData = array(); $footers = array(); $rows_footer = array(); $footer_colspan = 2; //------------------- // Получим данные для отчета $arrData = parent::_getReportData($table); // Установим параметры PDF $arrResultData['pdf']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/index_doc48x48.png'); $arrResultData['pdf']['title_report'] = $this->Translate('Список сообщений'); $arrResultData['pdf']['is_row_header'] = TRUE; $arrResultData['pdf']['pageFormat'] = 'A4'; // Установим параметры для HTML $arrResultData['html']['column_model'] = $arrData['column_model']; $arrResultData['html']['rows_body'] = isset($arrData['rows']) ? $arrData['rows'] : array(); $arrResultData['html']['is_group_head'] = $arrData['is_group_head']; $arrResultData['html']['is_row_header'] = TRUE; $arrResultData['html']['footer_colspan'] = $footer_colspan; // Получим данные для отчета switch ($table) { case 'admin.blog_posts': $footer_colspan = 1; // Исключим в отчете некоторые поля $fieldsExcluded = array('id', 'actual'); $newModelColumns = parent::_excludeFieldsFromReport($fieldsExcluded, $arrData['column_model']); $arrResultData['html']['column_model'] = $newModelColumns; // Получим массив записей для нижнего колонтитула $footers[] = array('user_id' => $this->Translate('Всего записей') . ':', 'url' => 'count'); $footers[] = array('user_id' => $this->Translate('Минимальная дата') . ':', 'ts_created' => 'min'); $footers[] = array('user_id' => $this->Translate('Максимальная дата') . ':', 'ts_published' => 'max'); $rows_footer = parent::_footerForReport(array('footer_colspan' => $footer_colspan, 'rows' => $arrData['rows'], 'column_model' => $newModelColumns, 'footers' => $footers)); // Установим параметры для HTML $arrResultData['html']['logo_report'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/documents32x32.png'); $arrResultData['html']['title_report'] = $this->Translate('Список сообщений в блогах'); $arrResultData['html']['rows_footer'] = $rows_footer; $arrResultData['html']['footer_colspan'] = $footer_colspan; // Установим параметры для PDF $arrResultData['pdf']['is_row_header'] = false; break; default: break; } return $arrResultData; }
/** * 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'; } }