/** * С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 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; }
/** * 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('Очистить кеш')); }