Просмотр файла modules/forum/post.php

Размер файла: 12.6Kb
<?
define('SHCMS_ENGINE',true);
include_once('../../engine/system/core.php');
switch($act):
default:
//Если вместо id num попытаются вставить текст то выводит ошибку
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
     $templates->template(Lang::__('Форум - Ошибка')); //Название страницы
    engine::error(Lang::__('Ошибка при выводе сообщений из темы')); //При ошибке
    header('Refresh: 1; url=index.php');
    exit;
}
    //Из $_GET в обычную 
    $id = (int) $_GET['id'];

	//Вытаскиваем из таблицы `forum_topics` все данные
    $posts = $db->get_array($db->query('SELECT * FROM `forum_topics` WHERE `id` = '.$id.''));
	
	$templates->template(''.$posts['name'].' - '.Lang::__('Форум')); //Название страницы

    //Отключения форума
	//Вывод определенных данных
    $off_forum = $db->get_array($db->query("SELECT * FROM `off_modules`"));
	if($off_forum['off_forum'] == 1) {
	    echo engine::error(Lang::__('Форум приостановлен с ').date::make_date($off_forum['time_forum']),$off_forum['text_forum']); //Ошибка об отключении и дополнительный текст
	    echo engine::home(array('Назад','/index.php'));	 
	    exit;
	}	
    //Если уже нажата кнопка Отправить и введена текст сообщения выполняет функицию которая ниже
    if(isset($_POST['submit']) and isset($_POST['text'])) {
	    //Обрабатывает описание
        $text = $_POST['text'];
	     	
	        $file_post = intval($_POST['file']);
            //Если не введена текст сообщения выводит эту ошибку
	        if(!$text) {
	            echo engine::error(Lang::__('Введите текст сообщения'));
	        }else {
	            $update = false; //Отключаем эту переменную временно
				//Вытаскиваем те посты которые находится в теме $posts[id]
		        $query = $db->query('SELECT * FROM `forum_post` WHERE `id_top` = '.$posts['id'].' ORDER BY `id` DESC LIMIT 1');
	                //Проверям если ли посты в теме
                    if($db->num_rows($query)) {
					    //Через $user_post вытакиваем данные
		                $user_post = $db->get_array($query);
                            //Смотрим кто написал последний пост и время публикования
                            if($user_post['id_user'] == $id_user && $user_post['time'] > time - 7200) {
		                        $update = true; //Включаем переменную для обновления поста последнего пользователя
		                        $id_post = $user_post['id']; //даем простую переменную $id_post
		                    }		
		            }		
				//Проверяем если $update есть какая нибудь данная она ее выполняет
				if($update == true) {	
					//Это функция обновляет последний пост пользователя и добавляет еще текст туда
					$text = $user_post['text'] . "\n\n[small]".Lang::__('Пост обновлен:')." ".date::make_date($posts['last_time'] + time).":[/small]\n".$text;
					//Идет обновление поста ...
					$db->query("UPDATE `forum_post` SET `text` = '".$db->safesql($text)."' WHERE `id_top` = '".intval($posts['id'])."' AND `id_user` = '".$id_user."' ORDER BY `id` DESC LIMIT 1");
				}else {
				//Иначе добавляем в новый столбик новые данные
					$db->query("INSERT INTO `forum_post` (`id_cat`,`id_sec`,`id_top`,`id_user`,`text`,`time`) VALUES ('".intval($posts['id_cat'])."','".intval($posts['id_sec'])."',".intval($posts['id']).",'".intval($id_user)."','".$db->safesql($text)."','".time()."')");
					$id_post = $db->insert_id();
				}
		        //Обновляем время добавления последнего поста
				$db->query('UPDATE `forum_topics` SET `last_time` = '.time().' WHERE `id` = '.$posts['id'].'');
				$db->query("UPDATE `users` SET `points` = '".($users['points']+1)."' WHERE `id` = '".intval($id_user)."'"); // Начисление баллов
				echo engine::success(Lang::__('Сообщение успешно добавлено')); // Успешно
				    if($file_post == 1) {
					    header('Location: post_file.php?id='.$id);
					}else {
					    header('Refresh: 1; url=post.php?id='.$id.''); //Автоматическое переадресация
					}
				echo engine::home(array('Назад','post.php?id='.$id.'')); //Переадресация на пред. старницу
				exit; //Закрываем
			}
	}           //Если  пользователь является автором темы то он может выполнять нужные ему действие
	            if($id_user == $posts['id_user']) {
				    echo '<div class="mainpost"><img src="/engine/template/icons/app.png">&nbsp;<a href="setting.topic.php?id='.$id.'">'.Lang::__('Опции темы').'</a></div>';
				}
				    //Если сработало закрытие темы то она закроется
					if($posts['close'] == 1) {
						//Форма
						echo '<div class="mainpost">';
							$form = new form('?id='.$id.'');
							$form->textarea(Lang::__('Текст комментария'),'text');
							$form->input2(false,'file','checkbox','1',false,Lang::__('Прикрепить файл'));
							$form->submit(Lang::__('Отправить'),'submit');
							$form->display();
						echo '</div>';
						
					}else {
					    echo engine::error('Тема закрыта для обсуждений');
					}
			//Функция мне нравится для авторизованных действует	
			if(isset($id_user)) {
				
				switch($do):
				//Обработка функции мне нравится
				case 'like':
				    if(isset($_GET['id']) and is_numeric($_GET['id'])) {
					
						$id = (int) $_GET['id'];
						//Добавим в базу мне нравится
						$db->query('INSERT INTO `like` (`id_list`,`id_user`,`action`,`text`) VALUES ("'.$id.'","'.$id_user.'","2","'.Lang::__('Вам понравилась тема из форума').'")');
					    header('Location: post.php?id='.$id.'');
					} 
				break;
				
				//Если вам понравилось то это функция выполняет отмену мне нравится
				case 'likeexit':
				    if(isset($_GET['id']) and is_numeric($_GET['id'])) {
					
						$id = (int) $_GET['id'];
						//Удаляем из базы функция мне нравится
						$db->query('DELETE FROM `like` WHERE `id_list` = "'.$id.'" AND `id_user` = "'.$id_user.'"');
					    header('Location: post.php?id='.$id.'');
					} 				    	
				break;
				
				endswitch;
				//Мне нравится
				$like = $db->get_array($db->query("SELECT * FROM `like` WHERE `id_user` = '".$id_user."' AND `id_list` = '".$id."'"));
				
 				    //Выводим счетчик мне нравится
       				if ($result2 = $db->query("SELECT COUNT(*) FROM `like` WHERE `id_list` = '".$id."'")) {
        				    /* Переход к строке №400 */
         				   $result2->data_seek(399);
         				   /* Получение строки */
          				  $row2 = $result2->fetch_row();
       				}				
				//Если вы хотите снять  тему из вашего мне нравится то выполните действие ниже
				if($like['id_list'] == $id) {
					echo '<div class="mainpost"><img src="/engine/template/icons/delete.png">&nbsp;<a href="post.php?id='.$id.'&do=likeexit"><b>'.Lang::__('Мне не нравится тема').'</b></a>';
					echo '&nbsp;&nbsp;<img title="'.Lang::__('Тема понравилась').'&nbsp;'.$row2[0].'"  src="/engine/template/icons/icon_users.png">&nbsp;<span style="font-size:11px;color: #5c5c5c;">'.$row2[0].'</span>';
					echo '</div>';
				}else {
				//Если вы хотите добавить тему мне нравится то выполните действие ниже
					echo '<div class="mainpost"><img src="/engine/template/icons/fave_on_alt.png">&nbsp;<a href="post.php?id='.$id.'&do=like"><b>'.Lang::__('Мне нравится тема').'</b></a>';
					echo '&nbsp;&nbsp;<img title="'.Lang::__('Тема понравилась').'&nbsp;'.$row2[0].'" src="/engine/template/icons/icon_users.png">&nbsp;<span style="font-size:11px;color: #5c5c5c;">'.$row2[0].'</span>';
					echo '</div>';				
				}
			}					
 		//Выводим счетчик тем
        if ($result = $db->query("SELECT COUNT(*) FROM `forum_post` WHERE `id_top` = '".$id."'")) {
            /* Переход к строке №400 */
            $result->data_seek(399);
            /* Получение строки */
            $row = $result->fetch_row();
        }
            $newlist = new Navigation($row[0],10,true);
            //Если счетчик на 0 выведит
	        if($row[0] == false) {
				echo engine::error(Lang::__('В данной теме нет постов!'));
				exit;
			}       
        //Вытаскиваем все посты
		$messag = $db->query("SELECT * FROM `forum_post` WHERE `id_top` = '".$posts['id']."' ORDER BY `id` DESC ". $newlist->limit()."");
		    //Проверяем есть ли посты
			if($db->num_rows($messag) > 0) {
			    //Выводим все
				
				while($message = $db->get_array($messag)) { 
				    //Ник добавленного
    				$nick = $user->users($message['id_user'],array('nick'),true);
				    //ID добавленного
					$id_users = $user->users($message['id_user'],array('id'));
					//Пусть к анкете и время
    				echo '<div class="mainname"><a href="'.MODULE.'profile.php?act=view&id='.$id_users.'">'.$nick.'</a><span class="time">'.date::make_date($message['time']).'</span></div>';
					//Сам пост
   					echo '<div class="mainpost">';
					$file_theme = $db->query("SELECT * FROM `forum_file` WHERE `id_them` = '".intval($id)."' and `id_post` = '".intval($message['id'])."'");
					        if($db->num_rows($file_theme) > 0) {
							echo '<div class="mainname">'.Lang::__('Прикрепленные файлы').'</div>';
							echo '<div class="mainpost">';
							while($file_them = $db->get_array($file_theme)) {
							    echo '<div class="_sharedMediaBbcode"><b>'.$file_them['text'].'</b>';
								echo '<div class="desc">'.Lang::__('Размер файла').' '.engine::filesize($file_them['size']).'<br/>';
								echo date::make_date($file_them['time']);
								echo '</div></div>';
							}
							echo '</div>';
							}
					echo '<div class="mainpost">'.engine::input_text($message['text']).'</div>';
					
					echo '</div>';
					
				}
				//Вывод навигации
				echo $newlist->pagination('id='.$id.'');
			}else {
   				 echo engine::error(Lang::__('В теме отсутствуют посты'));
			}
	break; 
	case 'download':
	
$file = htmlspecialchars($_GET['file']);
$file = str_replace('../','',$file);
$file = str_replace('./','',$file);
$filename = H.'upload/forum/files/'.$file.'';

if($file == '.htaccess' || $file == 'index.php'){ 
    echo engine::error(Lang::__('Ошибка! Файл входит в состав запрещеных!'));
}else{
        if (file_exists($filename)) { 
            $list = $filename;
            $name = explode("/",$list);
            $name = $name[count($name)-1];
            header('Content-type: text/plain');
            header("Content-disposition: attachment; filename=$name");
            header('Content-Description: File Transfer');
            header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header('Content-Length: ' . filesize($list));
            ob_clean();
            flush();
            readfile($list);
        } else { 
		    echo engine::error(Lang::__('Файл не существует!'));
		}
    }

	break;
endswitch;	
		echo engine::home(array('Назад','section.php?id='.$posts['id_sec'].''));	
?>