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

Размер файла: 16.66Kb
<?
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($id_user == true) {
    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; //Закрываем
			}
	}    
}	            					//Ник добавленного
    				$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."'"));
				
 				    //Выводим счетчик мне нравится
       				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) {
					$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="mainpost">
<span style="font-size:15px;color: #323232;">'.$posts['name'].'</span><div class="time">'.$viewlike.'</div><br/>
<span style="font-size:10px;">Автор:&nbsp;<a href="/modules/profile.php?id='.$posts['id_user'].'">'.$nick_author.'</a>&nbsp;,&nbsp;'.date::make_date($posts['time']).'</span>
</div>';
                //Если  пользователь является автором темы то он может выполнять нужные ему действие
	            if($id_user == $posts['id_user'] or $users['group'] == 15) {
				    echo '<div class="mainname">'.Lang::__('Действие над темой').'</div>';
				    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) {
					    if($id_user == true) {
						//Форма
						echo '<div class="mainname">'.Lang::__('Добавить комментрий').'</div><div class="mainpost">';
							$form = new form('?id='.$id.'');
							$form->textarea(Lang::__('Текст комментария'),'text');
							$form->text('<label>');
							$form->input2(false,'file','checkbox','1',false,Lang::__('Прикрепить файл'));
							$form->text('</label>');
							$form->submit(Lang::__('Отправить'),'submit');
							$form->display();
						echo '</div>';
						}else {
						    echo engine::error('<center>Сообщение могут оставлять авторизованные</center>');
						}
						
					}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;
			}					
			    $client = array(NULL => 'Гости',1 => 'Клиент',15 =>'Админ');
 		//Выводим счетчик тем
        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'));
					
					//Группы
					$group_list = $user->users($message['id_user'],array('group'));
			            
						//Сам пост
					            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'"));
						
						        if(isset($id_user)) {
								    $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">'.$like[0].'</font>';
								}
						
						echo '<div class="mainpost"><b style="font-size:14px;">
							<a style="color:#1E90FF;" href="'.MODULE.'profile.php?act=view&id='.$id_users.'">'.$nick.'</a></b>';
						
                        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">'.$client[$group_list].'</font></span>';
									echo '<span><img src="/engine/template/icons/date.png">&nbsp;'.date::make_date($message['time']).'</span>';
								    echo '<span>'.$notify.'</span>';
								echo '</div>';
		
		
		
					$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="row">'.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;
	
	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'].''));	
?>