mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-10-31 05:36:39 +00:00 
			
		
		
		
	Fix cache
This commit is contained in:
		| @@ -732,8 +732,8 @@ | ||||
| 				$main_content | ||||
| 			); | ||||
|  | ||||
| 			$main_content = str_replace('[tag:docdate]', pretty_date(strftime(DATE_FORMAT, $this->curentdoc->document_published)), $main_content); | ||||
| 			$main_content = str_replace('[tag:doctime]', pretty_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content); | ||||
| 			$main_content = str_replace('[tag:docdate]', translate_date(strftime(DATE_FORMAT, $this->curentdoc->document_published)), $main_content); | ||||
| 			$main_content = str_replace('[tag:doctime]', translate_date(strftime(TIME_FORMAT, $this->curentdoc->document_published)), $main_content); | ||||
| 			$main_content = str_replace('[tag:humandate]', human_date($this->curentdoc->document_published), $main_content); | ||||
| 			$main_content = str_replace('[tag:docauthorid]', $this->curentdoc->document_author_id, $main_content); | ||||
|  | ||||
| @@ -758,7 +758,7 @@ | ||||
| 		 * | ||||
| 		 * @return string | ||||
| 		 */ | ||||
| 		function _get_cache_hash() | ||||
| 		function _get_cache_hash () | ||||
| 		{ | ||||
| 			$hash  = 'g-' . UGROUP; // Группа пользователей | ||||
| 			$hash .= 'r-' . RUB_ID; // ID Рубрики | ||||
| @@ -774,7 +774,7 @@ | ||||
| 		 * | ||||
| 		 * @return array|bool | ||||
| 		 */ | ||||
| 		function _get_cache_id() | ||||
| 		function _get_cache_id () | ||||
| 		{ | ||||
| 			$cache = array(); | ||||
|  | ||||
| @@ -1593,6 +1593,10 @@ | ||||
| 		{ | ||||
| 			global $AVE_DB; | ||||
|  | ||||
| 			$document_id = null; | ||||
|  | ||||
| 			$cache_time = 0; | ||||
|  | ||||
| 			//-- Если нужны параметры GET, можно отключить | ||||
| 			$get_url = (strpos($get_url, ABS_PATH . '?') === 0 | ||||
| 				? '' | ||||
| @@ -1640,7 +1644,8 @@ | ||||
| 				preg_replace_callback('/(page|apage|artpage)-(\d+)/i', | ||||
| 					function ($matches) | ||||
| 					{ | ||||
| 						$_GET[$matches[1]] = $matches[2]; $_REQUEST[$matches[1]] = $matches[2];; | ||||
| 						$_GET[$matches[1]] = $matches[2]; | ||||
| 						$_REQUEST[$matches[1]] = $matches[2]; | ||||
| 					}, | ||||
| 					$pages); | ||||
| 			} | ||||
| @@ -1649,7 +1654,7 @@ | ||||
| 				{ | ||||
| 					$get_url = implode('/', $get_url); | ||||
| 				} | ||||
|  | ||||
| 			var_dump($get_url); | ||||
| 			//-- Страница тегов | ||||
| 			preg_match('/^tags(|(\/.*))+$/is', $get_url, $match); | ||||
|  | ||||
| @@ -1695,10 +1700,13 @@ | ||||
| 			//-- Экранируем поступающий URL | ||||
| 			$get_url = $AVE_DB->ClearUrl($get_url); | ||||
|  | ||||
| 			//-- Заглушка для главной страницы | ||||
| 			if ($get_url == '') | ||||
| 				$get_url = '/'; | ||||
|  | ||||
| 			//-- Проверяем есть ли данный URL в таблице алиасов модулей | ||||
| 			$sql = " | ||||
| 				SELECT | ||||
| 					# MODULE LINK | ||||
| 					document_id, | ||||
| 					module_name, | ||||
| 					module_action, | ||||
| @@ -1707,10 +1715,12 @@ | ||||
| 					" . PREFIX . "_modules_aliases | ||||
| 				WHERE | ||||
| 					module_url = '" . str_ireplace("'", "\'", $get_url) . "' | ||||
| 				# MODULE LINK | ||||
| 			"; | ||||
|  | ||||
| 			$module = $AVE_DB->Query($sql)->FetchAssocArray(); | ||||
|  | ||||
| 			//-- Если модуль есть, переназначаем URL и переменные | ||||
| 			if ($module) | ||||
| 			{ | ||||
| 				//-- Передаем глобальные перемененные | ||||
| @@ -1721,64 +1731,63 @@ | ||||
|  | ||||
| 				//-- Если есть document_id, назначем его | ||||
| 				if ($module['document_id']) | ||||
| 					$_REQUEST['id'] = (int)$module['document_id']; | ||||
| 					$document_id = $_REQUEST['id'] = (int)$module['document_id']; | ||||
| 				else | ||||
| 					$document_id = $_REQUEST['id'] = 1; | ||||
| 			} | ||||
|  | ||||
| 			//-- УБираем лишнее | ||||
| 			unset ($sql, $module); | ||||
|  | ||||
| 			//-- Проверка на наличие id в запросе | ||||
| 			if (! empty($_REQUEST['id'])) | ||||
| 			//-- Если пришел $_REQUEST['id'] документа, получаем URL для проверки | ||||
| 			if (! empty($_REQUEST['id']) && is_numeric($_REQUEST['id'])) | ||||
| 			{ | ||||
| 				$get_url = $AVE_DB->Query(" | ||||
| 				$sql = " | ||||
| 					SELECT | ||||
| 						document_alias | ||||
| 					FROM | ||||
| 						" . PREFIX . "_documents | ||||
| 					WHERE | ||||
| 						Id = '" . (int)$_REQUEST['id'] . "' | ||||
| 				")->GetCell(); | ||||
| 						Id = '" . intval($_REQUEST['id']) . "' | ||||
| 					# FIND DOCID | ||||
| 				"; | ||||
|  | ||||
| 				$document_id = intval($_REQUEST['id']); | ||||
|  | ||||
| 				$get_url = $AVE_DB->Query($sql)->GetCell(); | ||||
| 			} | ||||
| 			// Иначе пробуем получить ID по URL | ||||
| 			else | ||||
| 			{ | ||||
| 				$sql = " | ||||
| 					SELECT | ||||
| 						Id | ||||
| 					FROM | ||||
| 						" . PREFIX . "_documents | ||||
| 					WHERE | ||||
| 						document_alias = '" . str_ireplace("'", "\'", $get_url) . "' | ||||
| 					# FIND DOCURL | ||||
| 				"; | ||||
|  | ||||
| 				$document_id = intval($AVE_DB->Query($sql)->GetCell()); | ||||
| 			} | ||||
|  | ||||
| 			// Выполняем запрос к БД на получение всей необходимой | ||||
| 			// информации о документе | ||||
| 			//-- УБираем лишнее | ||||
| 			unset ($sql); | ||||
|  | ||||
| 			$document_id = (! empty($_REQUEST['id']) | ||||
| 				? intval($_REQUEST['id']) | ||||
| 				: 1); | ||||
|  | ||||
| 			//-- Забираем нужные данные | ||||
| 			$sql = " | ||||
| 				SELECT | ||||
| 					# URL FETCH = $get_url | ||||
| 					* | ||||
| 				FROM | ||||
| 					" . PREFIX . "_documents | ||||
| 				WHERE | ||||
| 					" . (! empty ($get_url) && ! isset($_REQUEST['module']) | ||||
| 							? "document_alias = '" . str_ireplace("'", "\'", $get_url) . "'" | ||||
| 							: (! empty($_REQUEST['id']) | ||||
| 								? "Id =" . intval($_REQUEST['id']) | ||||
| 								: "Id = 1")) . " | ||||
| 				LIMIT 1 | ||||
| 			"; | ||||
|  | ||||
| 			$hash_url = md5($get_url); | ||||
|  | ||||
| 			$cache_time = 0; | ||||
| 			//-- Выполняем запрос к БД на получение всей необходимой | ||||
| 			//-- информации о документе | ||||
| 			$this->curentdoc = getDocument($document_id); | ||||
|  | ||||
| 			if (defined('CACHE_DOC_FILE') && CACHE_DOC_FILE) | ||||
| 				$cache_time = -1; | ||||
| 			else | ||||
| 				$AVE_DB->clearCacheUrl('url_' . $hash_url); | ||||
|  | ||||
| 			$this->curentdoc = $AVE_DB->Query($sql, $cache_time, 'url_' . $hash_url, true, '.url')->FetchRow(); | ||||
|  | ||||
| 			// Если данные документа получены | ||||
| 			if ($this->curentdoc) | ||||
| 			{ | ||||
| 				// Получить шаблон рубрики | ||||
| 				$sql = " | ||||
| 					SELECT STRAIGHT_JOIN | ||||
| 						# FETCH RUB = " . $this->curentdoc->rubric_id . " | ||||
| 						prm.rubric_permission, | ||||
| 						rub.rubric_template, | ||||
| 						rub.rubric_meta_gen, | ||||
| @@ -1801,6 +1810,7 @@ | ||||
| 						prm.user_group_id = '" . UGROUP . "' | ||||
| 						AND | ||||
| 						rub.Id = '" . $this->curentdoc->rubric_id . "' | ||||
| 					# FETCH RUB = " . $this->curentdoc->rubric_id . " | ||||
| 				"; | ||||
|  | ||||
| 				$query = $AVE_DB->Query($sql, $cache_time, 'rub_' . $this->curentdoc->rubric_id, true, '.rubric')->FetchRow(); | ||||
| @@ -1816,7 +1826,7 @@ | ||||
| 					unset ($this->curentdoc->template); | ||||
| 				} | ||||
|  | ||||
| 				//-- Глобальные переменные | ||||
| 				//-- Переназначем глобальные переменные | ||||
| 				$_GET['id']  = $_REQUEST['id']  = $this->curentdoc->Id; | ||||
| 				$_GET['doc'] = $_REQUEST['doc'] = $this->curentdoc->document_alias; | ||||
|  | ||||
| @@ -1850,18 +1860,17 @@ | ||||
| 						header('Location:' . ABS_PATH); | ||||
| 					else | ||||
| 						header('Location:' . ABS_PATH . $get_url . URL_SUFF); | ||||
|  | ||||
| 					exit(); | ||||
| 					exit; | ||||
| 				} | ||||
| 			} | ||||
| 			// Иначе ищем URL в редиректах | ||||
| 			else | ||||
| 				{ | ||||
| 					$AVE_DB->clearCacheUrl('url_' . $hash_url); | ||||
|  | ||||
| 					$sql = " | ||||
| 						SELECT | ||||
| 							# REDIRECT = $get_url | ||||
| 							a.document_alias | ||||
| 							a.document_alias, | ||||
| 							h.document_alias_header | ||||
| 						FROM | ||||
| 							".PREFIX."_document_alias_history AS h, | ||||
| 							".PREFIX."_documents AS a | ||||
| @@ -1871,16 +1880,15 @@ | ||||
| 							h.document_alias = '" . $get_url . "' | ||||
| 					"; | ||||
|  | ||||
| 					$redirect_alias = $AVE_DB->Query($sql)->GetCell(); | ||||
| 					$redirect_alias = $AVE_DB->Query($sql)->FetchRow(); | ||||
|  | ||||
| 					if ($redirect_alias && ! empty($redirect_alias)) | ||||
| 					if ($redirect_alias->document_alias && ! empty($redirect_alias->document_alias)) | ||||
| 					{ | ||||
| 						$redirect_alias = ABS_PATH . $redirect_alias . URL_SUFF; | ||||
| 						$redirect_alias = ABS_PATH . $redirect_alias->document_alias . URL_SUFF; | ||||
| 						$redirect_alias = str_replace('//', '/', $redirect_alias); | ||||
|  | ||||
| 						header('HTTP/1.1 301 Moved Permanently'); | ||||
| 						header('Location:' . $redirect_alias); | ||||
| 						exit(); | ||||
| 						header('Location:' . $redirect_alias, true, $redirect_alias->document_alias_header); | ||||
| 						exit; | ||||
| 					} | ||||
|  | ||||
| 					if (! (! empty($_REQUEST['sysblock']) || ! empty($_REQUEST['module']) || ! empty($_REQUEST['request']))) | ||||
|   | ||||
| @@ -820,13 +820,6 @@ | ||||
| 				return $cache_id = 'documents/' . (floor($cache_id / 1000)) . '/' . $cache_id; | ||||
| 			} | ||||
|  | ||||
| 			//-- Сборка страницы | ||||
| 			if (substr($cache_id, 0, 3) == 'url') | ||||
| 			{ | ||||
| 				$cache_id = str_replace('url_', '', $cache_id); | ||||
| 				return $cache_id = 'documents/urls/' . substr($cache_id, 0, 3); | ||||
| 			} | ||||
|  | ||||
| 			//-- Если это хлебные крошки, то меняем расположение | ||||
| 			if (substr($cache_id, 0, 3) == 'brd') | ||||
| 			{ | ||||
| @@ -895,7 +888,7 @@ | ||||
| 			if (defined(SQL_QUERY_SANITIZE) && SQL_QUERY_SANITIZE) | ||||
| 				$query = filter_var($query, FILTER_SANITIZE_STRING); | ||||
|  | ||||
| 			$result = array(); | ||||
| 			$result = []; | ||||
|  | ||||
| 			// Если это SELECT - то отслеживаем кеширование | ||||
| 			$TTL = strtoupper(substr(trim($query), 0, 6)) == 'SELECT' | ||||
| @@ -917,14 +910,18 @@ | ||||
| 				if (! file_exists($cache_dir)) | ||||
| 					mkdir($cache_dir, 0766, true); | ||||
|  | ||||
| 				if (! (file_exists($cache_dir . $cache_file) && ($TTL == -1 ? true : time() - filemtime($cache_dir . $cache_file) < $TTL))) | ||||
| 				$TTL = ($TTL == -1) | ||||
| 					? true | ||||
| 					: time() - filemtime($cache_dir . $cache_file) < $TTL; | ||||
|  | ||||
| 				if (! (file_exists($cache_dir . $cache_file) && $TTL)) | ||||
| 				{ | ||||
| 					$res = $this->Real_Query($query, $log); | ||||
|  | ||||
| 					while ($mfa = $res->FetchAssocArray()) | ||||
| 						$result[] = $mfa; | ||||
|  | ||||
| 					file_put_contents($cache_dir . $cache_file, serialize($result)); | ||||
| 					file_put_contents($cache_dir . $cache_file, _base64_encode(serialize($result))); | ||||
| 				} | ||||
| 				else | ||||
| 					{ | ||||
| @@ -933,15 +930,15 @@ | ||||
| 						{ | ||||
| 							$_caller = $this->getCaller(); | ||||
|  | ||||
| 							$this->_query_list[] = array( | ||||
| 							$this->_query_list[] = [ | ||||
| 								'caller'	=> $_caller, | ||||
| 								'query'		=> $query, | ||||
| 								'ttl'		=> $TTL, | ||||
| 								'cache'		=> $cache_dir . $cache_file | ||||
| 							); | ||||
| 							]; | ||||
| 						} | ||||
|  | ||||
| 						$result = unserialize(file_get_contents($cache_dir . $cache_file)); | ||||
| 						$result = unserialize(_base64_decode(file_get_contents($cache_dir . $cache_file))); | ||||
| 					} | ||||
|  | ||||
| 				return new AVE_DB_Result($result); | ||||
| @@ -1551,16 +1548,13 @@ | ||||
| 		 * @param $doc_id | ||||
| 		 * @param $hash | ||||
| 		 */ | ||||
| 		public function clearDocument($doc_id, $hash = null) | ||||
| 		public function clearDocument($doc_id) | ||||
| 		{ | ||||
| 			$this->clearCache('doc_' . $doc_id); // Прочее | ||||
| 			$this->clearCache('fld_' . $doc_id); // Поля | ||||
| 			$this->clearCache('cmd_' . $doc_id); // Компиляция | ||||
| 			$this->clearCache('brd_' . $doc_id); // Хлебные крошки | ||||
| 			$this->clearCache('rqe_' . $doc_id); // Элемент запроса | ||||
|  | ||||
| 			if ($hash) | ||||
| 				$this->clearCacheUrl('url_' . $hash); // ЮРЛ | ||||
| 		} | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1829,13 +1829,9 @@ | ||||
| 			if ($rubric_code) | ||||
| 				eval (' ?'.'>' . $_rubric->rubric_code_end . '<?'.'php '); | ||||
|  | ||||
| 			if ($document_id == 1) | ||||
| 				$hash_url = md5(''); | ||||
| 			else | ||||
| 				$hash_url = md5($data['document_alias']); | ||||
|  | ||||
| 			// Чистим кеш | ||||
| 			$AVE_DB->clearDocument($document_id, $hash_url); | ||||
| 			$AVE_DB->clearDocument($document_id); | ||||
|  | ||||
| 			unset ($_rubric, $fields); | ||||
|  | ||||
| @@ -2818,10 +2814,8 @@ | ||||
| 							Id = '" . $document_id . "' | ||||
| 					"); | ||||
|  | ||||
| 					$hash_url = md5($row->document_alias); | ||||
|  | ||||
| 					// Чистим кеш | ||||
| 					$AVE_DB->clearDocument($document_id, $hash_url); | ||||
| 					$AVE_DB->clearDocument($document_id); | ||||
|  | ||||
| 					// Сохраняем системное сообщение в журнал | ||||
| 					reportLog('Положил документ в корзину (' . $document_id . ')'); | ||||
| @@ -2862,10 +2856,8 @@ | ||||
| 			// Сохраняем системное сообщение в журнал | ||||
| 			reportLog('Восстановил удаленный документ (' . $document_id . ')'); | ||||
|  | ||||
| 			$hash_url = md5($row->document_alias); | ||||
|  | ||||
| 			// Чистим кеш | ||||
| 			$AVE_DB->clearDocument($document_id, $hash_url); | ||||
| 			$AVE_DB->clearDocument($document_id); | ||||
|  | ||||
| 			// Выполняем обновление страницы | ||||
| 			header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); | ||||
| @@ -2914,10 +2906,8 @@ | ||||
| 						f2.document_id = f1.document_id | ||||
| 				"); | ||||
|  | ||||
| 				$hash_url = md5($row->document_alias); | ||||
|  | ||||
| 				// Чистим кеш | ||||
| 				$AVE_DB->clearDocument($document_id, $hash_url); | ||||
| 				$AVE_DB->clearDocument($document_id); | ||||
|  | ||||
| 				// Сохраняем системное сообщение в журнал | ||||
| 				reportLog('Удалил документ <strong>'. $row->document_title . ' (ID: ' . $document_id . ')</strong>'); | ||||
| @@ -3029,10 +3019,8 @@ | ||||
| 								Id = '" . $document_id . "' | ||||
| 						"); | ||||
|  | ||||
| 						$hash_url = md5($document->document_alias); | ||||
|  | ||||
| 						// Чистим кеш | ||||
| 						$AVE_DB->clearDocument($document_id, $hash_url); | ||||
| 						$AVE_DB->clearDocument($document_id); | ||||
|  | ||||
| 						// Сохраняем системное сообщение в журнал | ||||
| 						reportLog($_SESSION['user_name'] . ' - ' . (($openclose==1) ? $AVE_Template->get_config_vars('DOC_DOCUMENT_ACT') : $AVE_Template->get_config_vars('DOC_DOCUMENT_DISACT')) . ' ' . $AVE_Template->get_config_vars('DOC_DOCUMENT_DOC') . ' (' . $document_id . ')', 2, 2); | ||||
| @@ -3063,20 +3051,16 @@ | ||||
|  | ||||
| 						} | ||||
|  | ||||
| 						$hash_url = md5($document->document_alias); | ||||
|  | ||||
| 						// Чистим кеш | ||||
| 						$AVE_DB->clearDocument($document_id, $hash_url); | ||||
| 						$AVE_DB->clearDocument($document_id); | ||||
|  | ||||
| 					exit; | ||||
|  | ||||
| 				} | ||||
| 				else | ||||
| 					{ | ||||
| 						$hash_url = md5($document->document_alias); | ||||
|  | ||||
| 						// Чистим кеш | ||||
| 						$AVE_DB->clearDocument($document_id, $hash_url); | ||||
| 						$AVE_DB->clearDocument($document_id); | ||||
|  | ||||
| 						// Выполняем обновление страницы | ||||
| 						header('Location:index.php?do=docs'.(empty($_REQUEST['rubric_id']) ? '' : '&rubric_id='.$_REQUEST['rubric_id']).'&cp=' . SESSION); | ||||
|   | ||||
| @@ -1267,4 +1267,27 @@ | ||||
| 		if ($exit) | ||||
| 			exit; | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	/** | ||||
| 	 * _base64_encode() | ||||
| 	 * | ||||
| 	 * @param string $input | ||||
| 	 * @return | ||||
| 	 */ | ||||
| 	function _base64_encode($input) | ||||
| 	{ | ||||
| 		return strtr(base64_encode($input), '+/=', '-_,'); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * _base64_decode() | ||||
| 	 * | ||||
| 	 * @param string $input | ||||
| 	 * @return | ||||
| 	 */ | ||||
| 	function _base64_decode($input) | ||||
| 	{ | ||||
| 		return base64_decode(strtr($input, '-_,', '+/=')); | ||||
| 	} | ||||
| ?> | ||||
| @@ -99,7 +99,7 @@ | ||||
| 			$get_documents_data[$doc_id] = object2array($get_documents_data[$doc_id]); | ||||
|  | ||||
| 			$get_documents_data[$doc_id]['doc_title'] = $get_documents_data[$doc_id]['document_title']; | ||||
| 			$get_documents_data[$doc_id]['feld'] = array(); | ||||
| 			$get_documents_data[$doc_id]['feld'] = []; | ||||
| 		} | ||||
|  | ||||
| 		if (isset($key) && $key != '') | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
| 	 */ | ||||
|  | ||||
| 	@define('APP_NAME', 'AVE.cms'); | ||||
| 	@define('APP_VERSION', '3.25'); | ||||
| 	@define('APP_VERSION', '3.26'); | ||||
| 	@define('APP_INFO', '<a target="_blank" href="https://www.ave-cms.ru/">Ave-Cms.Ru</a> '.'© 2007-' . date('Y')); | ||||
|  | ||||
| 	$themes = array(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user