Скрипт форума на PHP своими руками. Часть 2
Ну что же, продолжим. Следующая функция, котоую мы рассмотрим - getForum(). Функция возвращает список тем форума. Уникальный идентификатор форума передается методом GET.
<?php
// Функция возвращает список тем форума; ID форума передается методом GET
function getForum( &$pageTitle )
{
// Если не передан ID форума - функция вызвана по ошибке
if ( !isset( $_GET['idForum'] ) ) {
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
// Получаем информацию о форуме
$query = "SELECT name FROM ".TABLE_FORUMS." WHERE id_forum=".$_GET['idForum'];
$res = mysql_query( $query );
if ( !$res ) {
$msg = 'Ошибка при получении списка тем форума';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true, '' );
}
$forum = mysql_result( $res, 0, 0 );
// Заголовок страницы (содержимое тега title)
$pageTitle = $pageTitle.' / '.$forum;
// Выводим название форума
$html = '<h1>'.$forum.'</h1>'."\n";
// Панель навигации
$html = $html.'<div class="navDiv">'."\n";
$html = $html.'<a class="navigation" href="'.$_SERVER['PHP_SELF'].'">Список форумов</a> >'."\n";
$html = $html.'<a class="navigation" href="'.$_SERVER['PHP_SELF'].'?action=showForum&idForum='.
$_GET['idForum'].'">'.$forum.'</a>'."\n";
$html = $html.'</div>'."\n";
// Ссылка "Начать новую тему" - только для зарегистрированных пользователей
if ( isset( $_SESSION['user'] ) ) {
$addTheme = '<a href="'.$_SERVER['PHP_SELF'].'?action=addThemeForm&idForum='.
$_GET['idForum'].'"><img src="./images/post.gif"
alt="Начать новую тему" /></a>'."\n";
}
// Выбираем из БД количество тем форума - это нужно для
// построения постраничной навигации
$query = "SELECT COUNT(*) FROM ".TABLE_THEMES." WHERE id_forum=".$_GET['idForum'];
$res = mysql_query( $query );
if ( !$res ) {
$msg = 'Ошибка при получении списка тем форума';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true, '' );
}
$total = mysql_result( $res, 0, 0 );
if ( $total == 0 ) {
if ( isset( $_SESSION['user'] ) )
return $html.$addTheme;
else
return $html.'<p>В этом форуме пока нет сообщений</p>'."\n";
}
// Число страниц списка тем форума (постраничная навигация)
$cntPages = ceil( $total / THEMES_PER_PAGE );
// Проверяем передан ли номер текущей страницы (постраничная навигация)
if ( isset($_GET['page']) ) {
$page = (int)$_GET['page'];
if ( $page < 1 ) $page = 1;
} else {
$page = 1;
}
if ( $page > $cntPages ) $page = $cntPages;
// Начальная позиция (постраничная навигация)
$start = ( $page - 1 ) * THEMES_PER_PAGE;
// Строим постраничную навигацию, если это необходимо
if ( $cntPages > 1 ) {
// Функция возвращает html меню для постраничной навигации
$pages = pageIterator( $page, $cntPages, $_SERVER['PHP_SELF'].'?action=showForum&idForum='.
$_GET['idForum'] );
}
// Постраничную навигацию и ссылку "Начать новую тему" объединяем в один блок,
// который выводится вверху и внизу страницы
if ( isset( $pages ) or isset( $addTheme ) ) {
$pagesAddTheme = '<table width="100%" cellpadding="0" cellspacing="0">'."\n";
$pagesAddTheme = $pagesAddTheme.'<tr valign="middle">'."\n";
if ( isset( $pages ) ) $pagesAddTheme = $pagesAddTheme.'<td>'.$pages.'</td>'."\n";
if ( isset( $addTheme ) ) $pagesAddTheme = $pagesAddTheme.'<td align="right">'.$addTheme.'</td>'."\n";
$pagesAddTheme = $pagesAddTheme.'</tr>'."\n";
$pagesAddTheme = $pagesAddTheme.'</table>'."\n";
}
// Постраничная навигация и ссылка "Начать новую тему"
if ( isset( $pagesAddTheme ) ) $html = $html.$pagesAddTheme;
// Получаем список тем форума, сортирируя их по последнему сообщению
$query = "SELECT a.id_theme, a.name, a.time, a.locked,
IFNULL(b.id_author, 0), IFNULL(b.name, '".NOT_REGISTERED_USER."'),
(COUNT(*)-1), IFNULL(MAX(c.time), '') AS last_post
FROM ".TABLE_THEMES." a LEFT JOIN ".TABLE_USERS." b
ON a.id_author=b.id_author
LEFT JOIN ".TABLE_POSTS." c
ON a.id_theme=c.id_theme
WHERE id_forum=".$_GET['idForum']."
GROUP BY a.id_theme, a.name, a.time,
IFNULL(b.id_author, 0), IFNULL(b.name, '".NOT_REGISTERED_USER."')
ORDER BY last_post DESC
LIMIT ".$start.", ".THEMES_PER_PAGE;
$res = mysql_query( $query );
if ( !$res ) {
$msg = 'Ошибка при получении списка тем форума';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true, '' );
}
if ( mysql_num_rows( $res ) > 0 ) {
$html = $html.'<table class="showTable">'."\n";
$html = $html.'<tr>'."\n";
$html = $html.'<th> </th>';
$html = $html.'<th width="50%">Темы</th>';
$html = $html.'<th>Автор</th>';
$html = $html.'<th>Добавлена</th>';
$html = $html.'<th>Ответов</th>';
$html = $html.'<th>Последнее сообщение</th>'."\n";
if ( isset( $_SESSION['user'] ) and $_SESSION['user']['status'] != 'user' ) {
$html = $html.'<th>Правка</th>'."\n";
$html = $html.'<th>Блк.</th>'."\n";
$html = $html.'<th>Удл.</th>'."\n";
}
$html = $html.'</tr>'."\n";
while ( $theme = mysql_fetch_row( $res ) ) {
$html = $html.'<tr>'."\n";
if ( isset( $_SESSION['user'] ) ) { // это для зарегистрированного пользователя
// Если есть новые сообщения (посты) - только для зарегистрированных пользователей
if ( isset( $_SESSION['newThemes'] ) and in_array( $theme[0], $_SESSION['newThemes'] ) ) {
if ( $theme[3] == 0 ) // тема открыта
$html = $html.'<td align="center" valign="middle"><img src="./images/folder_new.gif" width="19"
height="18" alt="Новые сообщения" title="Новые сообщения" /></td>';
else // тема закрыта
$html = $html.'<td align="center" valign="middle"><img src="./images/folder_lock_new.gif" width="19"
height="18" alt="Новые сообщения" title="Новые сообщения" /></td>';
} else {
if ( $theme[3] == 0 ) // тема открыта
$html = $html.'<td align="center" valign="middle"><img src="./images/folder.gif" width="19"
height="18" alt="Нет новых сообщений" title="Нет новых сообщений" /></td>';
else // тема закрыта
$html = $html.'<td align="center" valign="middle"><img src="./images/folder_lock.gif" width="19"
height="18" alt="Нет новых сообщений" title="Нет новых сообщений" /></td>';
}
} else { // это для не зарегистрированного пользователя
if ( $theme[3] == 0 ) // тема открыта
$html = $html.'<td align="center" valign="middle"><img src="./images/folder.gif" width="19"
height="18" alt="" /></td>';
else // тема закрыта
$html = $html.'<td align="center" valign="middle"><img src="./images/folder_lock.gif" width="19"
height="18" alt="" /></td>';
}
// Название темы
$html = $html.'<td>';
$html = $html.'<a class="topictitle" href="'.$_SERVER['PHP_SELF'].'?action=showTheme&idForum='.
$_GET['idForum'].'&id_theme='.$theme[0].'">'.$theme[1].'</a>';
$html = $html.'</td>';
$html = $html.'<td align="center">'."\n";
// Автор темы
if ( $theme[4] ) {
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=showUserInfo&idUser='.
$theme[4].'">'.$theme[5].'</a>';
} else {
$html = $html.$theme[5];
}
$html = $html.'</td>';
// Дата добавления темы
$html = $html.'<td align="center" nowrap="nowrap">';
$html = $html.$theme[2];
$html = $html.'</td>'."\n";
// Количество ответов
$html = $html.'<td align="center" nowrap="nowrap">';
$html = $html.$theme[6];
$html = $html.'</td>'."\n";
// Дата последнего обновления
$html = $html.'<td align="center" nowrap="nowrap">';
$html = $html.$theme[7];
$html = $html.'</td>'."\n";
// Ссылки "Редактировать", "Закрыть"/"Открыть" и "Удалить" -
// только для администратора и модератора
if ( isset( $_SESSION['user'] ) and $_SESSION['user']['status'] != 'user' ) {
$html = $html.'<td align="center" nowrap="nowrap">';
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=editThemeForm&idForum='.
$_GET['idForum'].'&id_theme='.$theme[0].'"><img src="./images/icon_edit.gif"
alt="Править" title="Править" /></a>';
$html = $html.'</td>'."\n";
$html = $html.'<td align="center" nowrap="nowrap">';
if ( $theme[3] == 0 ) { // заблокировать тему
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=lockTheme&idForum='.
$_GET['idForum'].'&id_theme='.$theme[0].'"><img src="./images/topic_lock.gif"
alt="Закрыть" title="Закрыть" /></a>';
} else { // разблокировать тему
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=unlockTheme&idForum='.
$_GET['idForum'].'&id_theme='.$theme[0].'"><img src="./images/topic_unlock.gif"
alt="Открыть" title="Открыть" /></a>';
}
$html = $html.'</td>'."\n";
$html = $html.'<td align="center" nowrap="nowrap">';
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=deleteTheme&idForum='.
$_GET['idForum'].'&id_theme='.$theme[0].'"><img src="./images/icon_delete.gif"
alt="Удалить" title="Удалить" /></a>';
$html = $html.'</td>'."\n";
}
$html = $html.'</tr>'."\n";
}
$html = $html.'</table>'."\n";
// Постраничная навигация и ссылка "Начать новую тему"
if ( isset( $pagesAddTheme ) ) $html = $html.$pagesAddTheme;
}
return $html;
}
?>
Собственно говоря, исходные коды подробно закомментированы, так что их чтение не должно вызвать затруднений. Как видите, ссылки "Редактировать тему", "Закрыть"/"Открыть" и "Удалить тему" доступны только для администратора и модератора. Интерес представляет лишь вызов функции pageIterator(), которая предназначена для построения постраничной навигации списка тем форума:
<?php
// Функция возвращает html меню для постраничной навигации
function pageIterator( $page, $cntPages, $url )
{
$html = '<div class="pagesDiv"> Страницы: ';
// Проверяем нужна ли стрелка "В начало"
if ( $page > 3 )
$startpage = '<a class="pages" href="'.$url.'&page=1"><<</a> ... ';
else
$startpage = '';
// Проверяем нужна ли стрелка "В конец"
if ( $page < ($cntPages - 2) )
$endpage = ' ... <a class="pages" href="'.$url.'&page='.$cntPages.'">>></a>';
else
$endpage = '';
// Находим две ближайшие станицы с обоих краев, если они есть
if ( $page - 2 > 0 )
$page2left = ' <a class="pages" href="'.$url.'&page='.($page - 2).'">'.($page - 2).'</a> | ';
else
$page2left = '';
if ( $page - 1 > 0 )
$page1left = ' <a class="pages" href="'.$url.'&page='.($page - 1).'">'.($page - 1).'</a> | ';
else
$page1left = '';
if ( $page + 2 <= $cntPages )
$page2right = ' | <a class="pages" href="'.$url.'&page='.($page + 2).'">'.($page + 2).'</a>';
else
$page2right = '';
if ( $page + 1 <= $cntPages )
$page1right = ' | <a class="pages" href="'.$url.'&page='.($page + 1).'">'.($page + 1).'</a>';
else
$page1right = '';
// Выводим меню
$html = $html.$startpage.$page2left.$page1left.'<strong>'.$page.'</strong>'.
$page1right.$page2right.$endpage."\n";
$html = $html.'</div>'."\n";
return $html;
}
?>
Разобрались? Тогда продолжим. Функция getTheme() возвращает список сообщений (постов) темы. Уникальный идентификатор темы передается методом GET. Функция getTheme() очень похожа на рассмотренную выше функцию getForum(). Различие лишь в том, что функция getForum() возвращает список тем форума, а функция getTheme() - список сообщений (постов) темы. Как видите, здесь также используется вызов функции pageIterator() для построения постраничной навигации.
<?php
// Функция возвращает список сообщений(постов) темы; ID темы передается методом GET
function getTheme( &$pageTitle )
{
// Если не передан ID форума - функция вызвана по ошибке
if ( !isset( $_GET['idForum'] ) ) {
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
// Если не передан ID темы - функция вызвана по ошибке
if ( !isset( $_GET['id_theme'] ) ) {
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
$id_theme = (int)$_GET['id_theme'];
if ( $id_theme < 1 ) {
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
// Получаем из БД информацию о теме
$query = "SELECT name, locked FROM ".TABLE_THEMES." WHERE id_theme=".$id_theme;
$res = mysql_query( $query );
if ( !$res ) {
$msg = 'Ошибка при получении списка сообщений темы';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true,
'action=showForum&idForum='.$_GET['idForum'] );
}
// Если запрошенной темы не существует - возвращаемся на форум
if ( mysql_num_rows( $res ) == 0 )
return showInfoMessage( 'Запрошенная тема не найдена', 'action=showForum&idForum='.$_GET['idForum'] );
list( $theme, $locked ) = mysql_fetch_row( $res );
// Заголовок страницы (содержимое тега title)
$pageTitle = $pageTitle.' / '.$theme;
// Название темы
$html = '<h1>'.$theme.'</h1>'."\n";
// Получаем информацию о форуме - это нужно для построения панели навигации
$query = "SELECT name FROM ".TABLE_FORUMS." WHERE id_forum=".$_GET['idForum'];
$res = mysql_query( $query );
if ( !$res ) {
$msg = 'Ошибка при получении списка сообщений темы';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true, 'action=showForum&idForum='.
$_GET['idForum'] );
}
// Панель навигации
$html = $html.'<div class="navDiv">'."\n";
$html = $html.'<a class="navigation" href="'.$_SERVER['PHP_SELF'].'">Список форумов</a> >'."\n";
$html = $html.'<a class="navigation" href="'.$_SERVER['PHP_SELF'].'?action=showForum&idForum='.
$_GET['idForum'].'">'.mysql_result( $res, 0, 0 ).'</a> >'."\n";
$html = $html.'<a class="navigation" href="'.$_SERVER['PHP_SELF'].'?action=showTheme&idForum='.
$_GET['idForum'].'&id_theme='.$id_theme.'">'.$theme.'</a>'."\n";
$html = $html.'</div>'."\n";
// Выбираем из БД количество сообщений - это нужно для
// построения постраничной навигации
$query = "SELECT COUNT(*) FROM ".TABLE_POSTS." WHERE id_theme=".$id_theme;
$res = mysql_query( $query );
if ( !$res ) {
$msg = 'Ошибка при получении списка сообщений темы';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true,
'action=showForum&idForum='.$_GET['idForum'] );
}
$total = mysql_result( $res, 0, 0 );
// Не может быть темы, в которой нет сообщений (постов) - надо ее удалить
if ( $total == 0 ) {
$q = "DELETE FROM ".TABLE_THEMES." WHERE id_theme=".$id_theme;
$r = mysql_query( $q );
if ( !$r ) {
$msg = 'Ошибка при получении списка сообщений темы';
$err = 'Ошибка при выполнении запроса: <br/>'.
$q.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true, 'action=showForum&idForum='.$_GET['idForum'] );
}
return showInfoMessage( 'Запрошенная тема не найдена', 'action=showForum&idForum='.$_GET['idForum'] );
}
// Число страниц списка сообщений (постов) темы (постраничная навигация)
$cntPages = ceil( $total / POSTS_PER_PAGE );
// Проверяем передан ли номер текущей страницы (постраничная навигация)
if ( isset($_GET['page']) ) {
$page = (int)$_GET['page'];
if ( $page < 1 ) $page = 1;
} else {
$page = $cntPages;
}
if ( $page > $cntPages ) $page = $cntPages;
// Начальная позиция (постраничная навигация)
$start = ( $page - 1 ) * POSTS_PER_PAGE;
// Строим постраничную навигацию, если это необходимо
if ( $cntPages > 1 ) {
// Функция возвращает html меню для постраничной навигации
$pages = pageIterator( $page, $cntPages, $_SERVER['PHP_SELF'].'?action=showTheme&idForum='.
$_GET['idForum'].'&id_theme='.$id_theme );
} else {
$pages = ' ';
}
// Получаем из БД список сообщений (постов) темы
$query = "SELECT a.id_post, a.name, a.id_author, a.time, a.putfile, a.locked, a.id_theme,
DATE_FORMAT(a.edittime, '%d.%m.%Y') AS edittime, a.id_editor,
IFNULL(b.name, '".NOT_REGISTERED_USER."') AS author, b.posts, b.url,
DATE_FORMAT(b.puttime, '%d.%m.%Y') AS regtime, b.status AS status,
IFNULL(c.name, '') AS editor, IFNULL(c.status, '') AS editor_status
FROM ".TABLE_POSTS." a LEFT JOIN ".TABLE_USERS." b
ON a.id_author=b.id_author
LEFT JOIN ".TABLE_USERS." c
ON a.id_editor=c.id_author
WHERE id_theme=".$id_theme." ORDER BY time ASC
LIMIT ".$start.", ".POSTS_PER_PAGE;
$res = mysql_query( $query );
if ( !$res ) {
$msg = 'Ошибка при получении списка сообщений темы';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true,
'action=showForum&idForum='.$_GET['idForum'] );
}
if ( mysql_num_rows( $res ) == 0 ) {
// Не может быть темы, в которой нет сообщений (постов) - надо ее удалить
$q = "DELETE FROM ".TABLE_THEMES." WHERE id_theme=".$id_theme;
$r = mysql_query( $q );
if ( !$r ) {
$msg = 'Ошибка при получении списка сообщений темы';
$err = 'Ошибка при выполнении запроса: <br/>'.
$q.'<br/>'.mysql_errno().': '.mysql_error().'<br/>'.
'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true, 'action=showForum&idForum='.$_GET['idForum'] );
}
return showInfoMessage( 'Запрошенная тема не найдена', 'action=showForum&idForum='.$_GET['idForum'] );
}
// Ссылка "Ответить" (если тема закрыта - выводим сообщение "Тема закрыта")
if ( $locked == 0 )
$addPost = '<a href="'.$_SERVER['PHP_SELF'].'?action=addPostForm&idForum='.$_GET['idForum'].
'&id_theme='.$id_theme.'"><img src="./images/reply.gif"
alt="Ответить" title="Ответить" /></a>'."\n";
else
$addPost = '<img src="./images/reply_locked.gif"
alt="Тема закрыта" title="Тема закрыта" />'."\n";
// Постраничную навигацию и ссылку "Ответить" объединяем в один блок,
// который выводится вверху и внизу страницы
$pagesAddPost = '<table width="100%" cellpadding="0" cellspacing="0">'."\n";
$pagesAddPost = $pagesAddPost.'<tr valign="middle">'."\n";
$pagesAddPost = $pagesAddPost.'<td>'.$pages.'</td>'."\n";
$pagesAddPost = $pagesAddPost.'<td align="right">'.$addPost.'</td>'."\n";
$pagesAddPost = $pagesAddPost.'</tr>'."\n";
$pagesAddPost = $pagesAddPost.'</table>'."\n";
$html = $html.$pagesAddPost;
// Сообщения (посты) темы; каждое сообщение - отдельная таблица
while ( $post = mysql_fetch_array( $res ) ) {
$html = $html.'<table class="postTable">'."\n";
$html = $html.'<tr class="postTop">'."\n";
$html = $html.'<td width="120"><span class="postAuthor" onClick="javascript:putName(\''.
$post['author'].'\')" onMouseOver="this.className=\'postAuthorOver\'"
onMouseOut="this.className=\'postAuthor\'">'.$post['author'].
'</span><br/><img src="./images/null.gif" alt="" width="120" height="1" /></td>'."\n";
$html = $html.'<td width="45%"><span class="details"> Добавлено '.$post['time'].'</span></td>'."\n";
$html = $html.'<td width="45%" align="right">';
// Если тема не заблокирована - выводим ссылку "Ответить с цитатой"
if ( $locked == 0 ) {
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=addPostForm&idForum='.$_GET['idForum'].
'&id_theme='.$id_theme.'"><img src="./images/icon_quote.gif"
alt="Ответить с цитатой" title="Ответить с цитатой" border="0" /></a> ';
}
// Определяем, нужно ли выводить ссылку "Редактировать"
if ( hasRightEditPost( $post ) ) {
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=editPostForm&idForum='.$_GET['idForum'].
'&id_theme='.$id_theme.'&id_post='.$post['id_post'].'"><img src="./images/icon_edit.gif"
alt="Править" title="Править" border="0" /></a> ';
}
// Определяем, нужно ли выводить ссылку "Удалить"
if ( hasRightDeletePost( $post ) ) {
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=deletePost&idForum='.$_GET['idForum'].
'&id_theme='.$id_theme.'&id_post='.$post['id_post'].'"><img src="./images/icon_delete.gif"
alt="Удалить" title="Удалить" border="0" /></a>';
}
$html = $html.'</td>'."\n";
$html = $html.'</tr>'."\n";
$html = $html.'<tr class="postMiddle">'."\n";
$html = $html.'<td>'."\n";
// Если автор сообщения (поста) - зарегистрированный пользователь
if ( $post['id_author'] ) {
// Аватар
if ( is_file( './photo/'.$post['id_author'] ) ) {
$html = $html.'<img src="./photo/'.$post['id_author'].'" alt="'.$post['author'].'"
title="'.$post['author'].'" /><br/>'."\n";
} else {
$html = $html.'<img src="./images/null.gif" alt="" width="100" height="100"
style="border:1px solid #CCCCCC" /><br/>'."\n";
}
// Статус пользователя
$status = array( 'user' => 'Пользователь',
'moderator' => 'Модератор',
'admin' => 'Администратор' );
if ( $post['status'] == 'admin' )
$html = $html.'<span class="adminStatus">'.$status[$post['status']].'</span><br/>'."\n";
if ( $post['status'] == 'moderator' )
$html = $html.'<span class="moderStatus">'.$status[$post['status']].'</span><br/>'."\n";
/*
if ( $post['status'] == 'user' )
$html = $html.'<span class="userStatus">'.$status[$post['status']].'</span><br/>'."\n";
*/
// Рейтинг пользователя (по количеству сообщений)
$stars = '';
$rating = $post['posts'];
while( $rating > 0 ) {
if ( $rating < 50 )
$img = 'stars0.gif';
else if ( $rating >= 50 and $rating < 100 )
$img = 'stars1.gif';
else if ( $rating >= 100 and $rating < 150 )
$img = 'stars2.gif';
else if ( $rating >= 150 and $rating < 200 )
$img = 'stars3.gif';
else if ( $rating >= 200 and $rating < 250 )
$img = 'stars4.gif';
else if ( $rating >= 250 and $rating < 300 )
$img = 'stars5.gif';
else if ( $rating >= 300 and $rating < 350 )
$img = 'stars6.gif';
else if ( $rating >= 350 and $rating < 400 )
$img = 'stars7.gif';
else if ( $rating >= 400 and $rating < 450 )
$img = 'stars8.gif';
else if ( $rating >= 450 and $rating < 500 )
$img = 'stars9.gif';
else
$img = 'stars10.gif';
$rating = $rating - 500;
$stars = $stars.'<img src="./images/'.$img.'" alt="" /><br/>';
}
$html = $html.$stars.'<br/>'."\n";
// Количество сообщений
$html = $html.'<span class="details">Сообщений: '.$post['posts'].'</span><br/>'."\n";
// Дата регистрации
$html = $html.'<span class="details">Зарегистрирован: '.$post['regtime'].'</span><br/>'."\n";
// Если автор сообщения сейчас "на сайте"
if ( isset( $_SESSION['usersOnLine'] ) ) {
if ( in_array( $post['id_author'], $_SESSION['usersOnLine'] ) )
$html = $html.'<span class="details">Просматривает форум</span><br/>'."\n";
else
$html = $html.'<span class="details">Покинул форум</span><br/>'."\n";
}
} else { // Если автор сообщения - незарегистрированный пользователь
$html = $html.'<img src="./images/null.gif" alt="" width="100" height="100"
style="border:1px solid #CCCCCC" /><br/>'."\n";
}
$html = $html.'<br/><span class="quoteAuthor" onClick=quoteSelection(\''.$post['author'].'\');
onMouseOver="catchSelection(); this.className=\'quoteAuthorOver\'"
onMouseOut="this.className=\'quoteAuthor\'">Цитировать</span>';
$html = $html.'</td>'."\n";
$html = $html.'<td colspan="2">'."\n";
$html = $html.print_page( $post['name'] )."\n";
// Если есть прикреплённый файл - формируем ссылку на него
if( !empty( $post['putfile'] ) and is_file( './files/'.$post['putfile'] ) ) {
$html = $html.'<div align="right"><img src="./images/file.gif" alt="Открыть файл"
title="Открыть файл" align="absmiddle" /> <a target="_blank"
href="./files/'.$post['putfile'].'">'.
( getFileSize( './files/'.$post['putfile'] ) ).' Кб</a></div>'."\n";
}
$html = $html.'</td>'."\n";
$html = $html.'</tr>'."\n";
$html = $html.'<tr class="postBottom">'."\n";
$html = $html.'<td><a class="navigation" href="#top">Наверх</a></td>'."\n";
// Если автор сообщения (поста) - зарегистрированный пользователь
if ( $post['id_author'] ) {
$html = $html.'<td>'."\n";
$html = $html.' <a href="'.$_SERVER['PHP_SELF'].'?action=showUserInfo&idUser='.
$post['id_author'].'"><img src="./images/icon_profile.gif"
alt="Посмотреть профиль" title="Посмотреть профиль" /></a>';
$html = $html.' '."\n";
if ( isset( $_SESSION['user'] ) ) {
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=sendMailForm&idUser='.
$post['id_author'].'"><img src="./images/icon_email.gif"
alt="Написать письмо" title="Написать письмо" /></a>';
$html = $html.' '."\n";
$html = $html.'<a href="'.$_SERVER['PHP_SELF'].'?action=sendMsgForm&idUser='.
$post['id_author'].'"><img src="./images/icon_pm.gif"
alt="Личное сообщение" title="Личное сообщение" /></a>';
$html = $html.' '."\n";
}
if ( !empty( $post['url'] ) ) {
$html = $html.'<a href="'.$post['url'].'"><img src="./images/icon_www.gif"
alt="Сайт автора" title="Сайт автора" target="_blank" /></a>';
}
$html = $html.'</td>'."\n";
} else {
$html = $html.'<td><span class="details"><img src="./images/null.gif" alt="" width="1"
height="20" align="absmiddle" />Незарегистрированный пользователь</span></td>'."\n";
}
// Если сообщение редактировалось...
if ( !empty( $post['editor'] ) ) {
$html = $html.'<td align="right">';
if ( $post['id_author'] == $post['id_editor'] ) {
$html = $html.'<span class="editedByUser">Отредактировано автором '.$post['edittime'].'</span>'."\n";
} else {
if ( $post['editor_status'] == 'admin' )
$html = $html.'<span class="editedByAdmin">Отредактировано администратором '.
$post['editor'].' '.$post['edittime'].'</span>'."\n";
if ( $post['editor_status'] == 'moderator' )
$html = $html.'<span class="editedByModer">Отредактировано модератором '.
$post['editor'].' '.$post['edittime'].'</span>'."\n";
if ( $post['editor_status'] == 'user' )
$html = $html.'<span class="editedByUser">Отредактировано '.
$post['editor'].' '.$post['edittime'].'</span>'."\n";
}
$html = $html.'</td>'."\n";
} else {
$html = $html.'<td> </td>'."\n";
}
$html = $html.'</tr>'."\n";
$html = $html.'</table>'."\n";
}
// Постраничная навигация и ссылка "Ответить"
$html = $html.$pagesAddPost;
// Если тема не закрыта - выводим форму для быстрого ответа
if ( $locked == 0 ) $html = $html.getQuickReplyForm( $id_theme );
// Если страницу темы запросил зарегистрированный пользователь, значит он ее просмотрит
if ( isset( $_SESSION['user'] ) and isset( $_SESSION['newThemes'] ) ) {
if ( count( $_SESSION['newThemes'] ) > 0 )
if ( in_array( $id_theme, $_SESSION['newThemes'] ) ) unset( $_SESSION['newThemes'][$id_theme] );
else
unset( $_SESSION['newThemes'] );
}
return $html;
}
?>
Продолжение следует...
|