PHP

Скрипт форума на 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; 
} 
?>

Продолжение следует...
Теги:
форум
Добавлено: 22 Сентября 2013 01:47:56 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...