View file modules/forum/post.php

File size: 20.11Kb
<?php

define('SHCMS_ENGINE',true);
include_once('../../engine/system/core.php');

switch($act):
    default:
    //Обработка полученного $_GET и фильтруем ее    
    $id = filter_input(INPUT_GET,'id',FILTER_SANITIZE_NUMBER_INT);
    //Проверка на нумерование    
    $id = intval($id);
    
    //Если произойдет неправильные действия то exit
    if (!isset($id) || !is_numeric($id)) {
        header('Location: index.php');
        exit;
    }
    //Выводим заголовок темы из базы
    $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;
	}
        
    //Обновляем счетчик просмотров    
    $db->query( "UPDATE `forum_topics` SET `views` = '".($posts['views']+1)."' WHERE `id` = '".$id."'" );
    //Обработка кнопки
    $submit = filter_input(INPUT_POST, 'submit');
        //Если пользователь авторизован
        if($id_user == true) {
            //Если нажата кнопка
            if(isset($submit)) {
	        //Обрабатывает описание
                $text = filter_input(INPUT_POST,'text',FILTER_SANITIZE_STRING);
                //Обработка checkbox 0/1
                $pfile = filter_input(INPUT_POST,'file',FILTER_SANITIZE_NUMBER_INT);
	        $file_post = intval( $pfile);
                
                    //Если текст пуст то получаем ошибку
	            if(engine::trim($text) == false) {
	                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 = false;
                                //даем простую переменную $id_post
		                $id_post = $user_post['id'];
		            }		
		        }	
                        
			//Проверяем если $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)."'"); // Начисление баллов
			
                        //Если получена данные о добавление файлов то переадресуем
                        if($file_post == 1) {
			    header('Location: post_file.php?id='.$id);
			}else {
                             //Автоматическое переадресация на тему
			    header('Location: post.php?id='.$id.'');
			}
                            //Переадресация на пред. старницу
			    echo engine::home(array('Назад','post.php?id='.$id.''));
			    exit;
		    }
	    }    
        }
        
    //Ник добавленного
    $nick_author = $user->users($posts['id_user'],array('nick'),false);
    //Если пользователь авторизован
    if(isset($id_user)) {
	//Мне нравится
	$like = $db->get_array($db->query("SELECT * FROM `like` WHERE `id_user` = '".$id_user."' AND `id_list` = '".$id."'"));
	//Выводим счетчик мне нравится
       	$row2 = $db->get_array($db->query("SELECT COUNT(*) FROM `like` WHERE `id_list` = '".$id."'"));
        
	//Если вы хотите удалить тему из закладок
	if($like['id_list'] == $id) {
	    $viewlike = '<img src="/engine/template/icons/delete.png">&nbsp;<a href="post.php?id='.$id.'&do=likeexit"><b>'.Lang::__('Мне не нравится').'</b></a>';
	    $viewlike .= '&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>';
	}else {
	    //Если вы хотите добавить тему мне нравится
	    $viewlike .= '<img src="/engine/template/icons/fave_on_alt.png">&nbsp;<a href="post.php?id='.$id.'&do=like"><b>'.Lang::__('Мне нравится').'</b></a>';
	    $viewlike .= '&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 class="titleBox">';
        //Название темы
        echo '<span style="font-size:15px;color: #323232;">'.engine::ucfirst($posts['name']).'</span>';
        //Кнопки Мне нравится  / Мне не нравится
        echo '<div class="time">'.$viewlike.'</div><br/>';
        //Автор темы
        echo '<span style="font-size:10px;">Автор:&nbsp;';
        echo '<a href="/modules/profile.php?id='.$posts['id_user'].'">'.$nick_author.'</a>';
        //Дата создания темы
        echo '&nbsp;,&nbsp;'.date::make_date($posts['time']).'</span></div>';
        
        //Если  пользователь является автором темы
	if($id_user == $posts['id_user'] or $users['group'] == 15) {
            //Настройка темы
            echo '<div style="text-align:right;margin-bottom:10px;">';
            echo '<a class="btn btn-info" href="setting.topic.php?id='.$id.'">';
            echo '<img src="/engine/template/icons/app.png">&nbsp;'.Lang::__('Опция темы').'</a>';
            echo '</div>';
        }
	//Если авторизован пользователь
	if(isset($id_user)) {
	    switch($do):
		//Обработка функции мне нравится
		case 'like':
		    if(isset($id) and is_numeric($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($id) and is_numeric($id)) {
			//Удаляем из базы функция мне нравится
			$db->query('DELETE FROM `like` WHERE `id_list` = "'.$id.'" AND `id_user` = "'.$id_user.'"');
			header('Location: post.php?id='.$id.'');
		    } 				    	
		break;
	    endswitch;
	}					
	//Определение категорий пользователей
 	//Выводим счетчик тем
        $row = $db->get_array($db->query("SELECT COUNT(*) FROM `forum_post` WHERE `id_top` = '".$id."'"));
        //Объявляем навигацию
        $newlist = new Navigation($row[0],15,true);
        
            //Если счетчик на 0 выведит
	    if($row[0] == false) {
		echo engine::error(Lang::__('В данной теме нет постов!'));
		exit;
	    }       
            //Вытаскиваем все посты
	    $messag = $db->query("SELECT * FROM `forum_post` WHERE `id_top` = '".$posts['id']."' ". $newlist->limit()."");
		//Проверяем есть ли посты
		if($db->num_rows($messag) > 0) {
		    //Выводим все посты
                    echo '<div class="mainpost">';
                    echo '<ul class="List_withminiphoto Pad_list">';
		    while($message = $db->get_array($messag)) { 
                        
			//Ник добавленного
    			$nick = $user->users($message['id_user'],array('nick'),false);
			//ID добавленного
			$id_users = $user->users($message['id_user'],array('id'));
                        //Данные о пользователе
                        $profile = $db->get_array($db->query("SELECT * FROM `users` WHERE `id` = '{$message['id_user']}'"));
			//Сам пост
			if($posts['id_user'] == $message['id_user']) {
			    $notify = '<img src="/engine/template/icons/author.png">&nbsp;'.Lang::__('Автор темы');
			}
                            //Количество лайков
			    $like = $db->get_array($db->query(" SELECT COUNT(*) FROM `forum_like` WHERE `id_topic` = '".$id."' AND `id_post` = '".$message['id']."' AND `like` = 'plus'"));
			    //Количество дис-лайков
                            $dislike = $db->get_array($db->query(" SELECT COUNT(*) FROM `forum_like` WHERE `id_topic` = '".$id."' AND `id_post` = '".$message['id']."' AND `like` = 'minus'"));
			    //Количество постов
                            $countm = $db->get_array($db->query( "SELECT COUNT(*) FROM `forum_post` WHERE `id_top` = '".$posts['id']."'" ));
			    
                            //Если авторизован пользователь увидет лайки
                            if($id_user == true) {
				$isset = '<a style="color:green;" href="post.php?id='.$id.'&id_post='.$message['id'].'&act=like">'.$like[0].'</a>';
				$disisset = '<a style="color:red;" href="post.php?id='.$id.'&id_post='.$message['id'].'&act=dislike">'.$dislike[0].'</a>';
			    }else {
				$isset = '<font color="green">'.$like[0].'</font>';
				$disisset = '<font color="red">'.$dislike[0].'</font>';
			    }	
                            
                        //По порядку выводим посты     
                        echo '<li class="clearfix row3">';
                        
                            //Путь к аватарам
                            $avatar = '/upload/avatar/' . $profile['avatar'];
                                //Если нет аватара выводим аватар по умолчанию
                                if ($profile['avatar'] == false and file_exists($avatar) == false) {
                                    echo '<a href="/engine/template/icons/default_large.png" class="UserPhotoLink left">';
                                    echo '<img src="/engine/template/icons/default_large.png" class="UserPhoto UserPhoto_mini"></a>';
                                } else {
                                    echo '<a href="' . $avatar . '" title="Просмотр профиля" class="UserPhotoLink left">';
                                    echo '<img src="' . $avatar . '" class="UserPhoto UserPhoto_mini"></a>';
                                }    
                                
                        echo '<div class="list_content">';        
                        //Автор поста
			echo '<a href="'.MODULE.'profile.php?act=view&id='.$id_users.'"><b>'.$nick.'</b></a>';
                        //Понравилось не понравился пост
                        echo '<span class="time"><img src="/engine/template/icons/like.png">'.$isset.'';
                        //Не понравился пост
			echo '&nbsp;&nbsp;<img src="/engine/template/icons/dislike.png">'.$disisset.'</span>';	
                        //Дополнительные параметры
			echo '<div class="details">';
                        //Группа пользователя
			echo '<span><img src="/engine/template/icons/group.png">&nbsp;<font color="green">'.user::group($message['id_user']).'</font></span>';
			//Дата добавления поста
                        echo '<span><img src="/engine/template/icons/date.png">&nbsp;'.date::make_date($message['time']).'</span>';
			echo '</div>';
                
                            //Файлы пользователя в теме
		            $file_theme = $db->query("SELECT * FROM `forum_file` WHERE `id_them` = '".intval($id)."' and `id_post` = '".intval($message['id'])."'");
			    //Если больше 0 то выводим файлы
                            if($db->num_rows($file_theme) > 0) {
                                //Выводим все файлы в пост
                                
				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 class="row2">'.engine::input_text($message['text']).'</div>';
			echo '</div>';
                        echo '</li>';
                
					
		    }
                    echo '</ul>';
                    echo '</div>';
                if($row[0] > 15){
		    //Вывод навигации
		    echo $newlist->pagination('id='.$id.'');
                }   
		}else {
   		    echo engine::error(Lang::__('В теме отсутствуют посты'));
		}
                
	//Если close 1 то темы закрыта
	if($posts['close'] == 1) {
            //Если авторизован пользователь
	    if($id_user == true) {
		//Форма HTML
		echo '<div class="mainname">'.Lang::__('Сообщение').'</div>';
                echo '<div class="mainpost">';
		    $form = new form('?id='.$id.'');
		    $form->textarea(false,'text');
		    $form->text('<label>');
		    $form->input2(false,'file','checkbox','1',false,Lang::__('Прикрепить файл'));
		    $form->text('</label>');
		    $form->submit(Lang::__('Отправить'),'submit',true,'btn btn-success');
		    $form->display();
		echo '</div>';
	    }
	}else {
	    echo engine::error('Тема закрыта для обсуждений');
	}                
    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;
    
    //Мне нравится тема
    case 'like':
	$templates->template('Форум'); //Название страницы
            //Сама тема
	    $id_topic = intval($_GET['id']);
            //Пост
	    $id_post= intval($_GET['id_post']);
            //Вытаскиваем данные
	    $likes =  $db->super_query("SELECT * FROM `forum_like` WHERE `id_post` = '".$id_post."' AND `id_topic` = '".$id_topic."' AND `id_user` = '".$id_user."'");
                //Добавлем еще один хороший отзыв
                if($likes['id_user'] != $id_user) {
		    $db->query("INSERT INTO `forum_like` (`id_post`,`id_topic`,`id_user`,`like`) VALUES ('".$id_post."','".$id_topic."','".$id_user."','plus')");
		    header("Location: post.php?id={$id_topic}");
		}else{
		     header("Location: post.php?id={$id_topic}");
		}			 
    break;
	
    //Мне не нравится тема            
    case 'dislike':
	$templates->template('Форум'); //Название страницы
            //Сама тема
	    $id_topic = intval($_GET['id']);
            //Пост
	    $id_post = intval($_GET['id_post']);
            //Вытаскиваем данные
	    $likes = $db->super_query("SELECT * FROM `forum_like` WHERE `id_post` = '".$id_post."' AND `id_topic` = '".$id_topic."' AND `id_user` = '".$id_user."'");
                //Добавляем не хороший отзыв
                if($likes['id_user'] != $id_user) {
		    $db->query("INSERT INTO `forum_like` (`id_post`,`id_topic`,`id_user`,`like`) VALUES ('".$id_post."','".$id_topic."','".$id_user."','minus')");
		    header("Location: post.php?id={$id_topic}");
		}else{
		    header("Location: post.php?id={$id_topic}");
		}			 
	
    break;	
endswitch;	

//Переадресация
echo engine::home(array('Назад','section.php?id='.$posts['id_sec'].''));