Вход Регистрация
Файл: InstantSocial/uploud/components/forum/frontend.php
Строк: 1303
<?php
/******************************************************************************/
//                                                                            //
//                             InstantCMS v1.9                                //
//                        http://www.instantcms.ru/                           //
//                                                                            //
//                   written by InstantCMS Team, 2007-2011                    //
//                produced by InstantSoft, (www.instantsoft.ru)               //
//                                                                            //
//                        LICENSED BY GNU/GPL v2                              //
//                                                                            //
/******************************************************************************/

if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }

function 
forumsList($selected=0){

    
$inCore = cmsCore::getInstance();
    
$inDB   = cmsDatabase::getInstance();

    
$html = '';
    
$html .= '<select name="goforum" id="goforum" style="width:220px; margin:0px" onchange="goForum()">';
    
    
$fsql = "SELECT id, parent_id, NSLevel, title, access_list
             FROM cms_forums 
             WHERE published = 1
             ORDER BY NSLeft"
;
    
$rs_rows = $inDB->query($fsql);
    
    while(
$cat = $inDB->fetch_assoc($rs_rows)){
        if (
$cat['parent_id']>0 && $inCore->checkContentAccess($cat['access_list'])){
            if (
$selected==$cat['id']){
                
$s = 'selected';
            } else {
                
$s = '';
            }        
            
$otstup = str_repeat('--', $cat['NSLevel']-2);
            
$html .= '<option value="'.$cat['id'].'" '.$s.'>'.$otstup.' '.$cat['title'].'</option>';
        }
    }
    
$html .= '</select>';
    return 
$html;
}

function 
createPoll($thread_id, $poll, $cfg){
    
$inCore = cmsCore::getInstance();
    
$inDB   = cmsDatabase::getInstance();
    global 
$_LANG;
    
    
$poll_error = '';
    
//title
    
$title = $inCore->strClear($poll['title']);
    
//description
    
$desc = $poll['desc'];
    if (
$desc) { $desc = $inCore->strClear($desc);    }
    
//days
    
$days = intval($poll['days']);
    if (
$days) { $days = abs(intval($days)); }
    
//options
    
$options = array();
    
$options['result'] = intval($poll['result']);
    
$options['change'] = intval($poll['change']);    
    
$str_options = serialize($options);

    
$answers_title = $poll['answers'];
    
$answers = array();
    foreach(
$answers_title as $key=>$value){
        if (
$value!='') { 
            
$value = urlencode($inCore->strClear($value));
            
$answers[$value] = 0; 
        }
    }
    if (
sizeof($answers)>1){
        
$str_answers = serialize($answers);
            
        
$sql = "INSERT INTO cms_forum_polls (thread_id, title, description, answers, options, enddate)
                VALUES (
$thread_id, '$title', '$desc', '$str_answers', '$str_options', (NOW() + INTERVAL $days DAY))";
        
$inDB->query($sql);
    } else { 
        
$poll_error = '<p><strong>'.$_LANG['ERR_POLL'].':</strong> '.$_LANG['ERR_POLL_VARIANT'].'</p>';
        
$poll_error .= '<p>'.$_LANG['ERR_POLL_ATTACH'].'</p>';
        
$poll_error .= '<p><a href="/forum/thread'.$thread_id.'.html">'.$_LANG['CONTINUE'].'</a> &rarr;</p>';
    }
    
    return 
$poll_error;    
}

function 
uploadFiles($post_id, $cfg){

    
$inCore = cmsCore::getInstance();
    
$inDB   = cmsDatabase::getInstance();

    if (!
$inCore->checkContentAccess($cfg['group_access'])){ return; }

    
$file_error = false;

    foreach (
$_FILES["fa"]["error"] as $key => $error) {

            if (
$error == UPLOAD_ERR_OK) {

                    
$tmp_name = $_FILES["fa"]["tmp_name"][$key];
                    
$file     = $_FILES["fa"]["name"][$key];
                    
$filesize = $inDB->escape_string($_FILES["fa"]["size"][$key]);

                    
$path_parts = pathinfo($file);
                    
$ext = strtolower($path_parts['extension']);
                    if(
strstr('php', $ext)) { return false; }
                    if(
strstr('htm', $ext)) { return false; }
                    if(
strstr('htaccess', $ext)) { return false; }
                    
//check file extension is allowed
                    
if (strstr(strtolower($cfg['fa_ext']), $ext)){

                        
$name = substr($file, 0, strrpos($file, '.'));
                        
$name = preg_replace ('/[^a-zA-Z0-9]/i', '', $name);
                        
$file = $inDB->escape_string($name . '_' . substr(session_id(), 0, 5) . '.' . $ext);

                        @
mkdir(PATH."/upload/forum/post".$post_id);
                        
$destination = PATH.'/upload/forum/post'.$post_id.'/'.$file;

                        if (
$inCore->moveUploadedFile($tmp_name, $destination, $error)) {

                            
$sql = "INSERT INTO cms_forum_files (post_id, filename, filesize, hits, pubdate)
                                    VALUES ('
$post_id', '$file', '$filesize', 0, NOW())";
                            
$inDB->query($sql);

                        } else {
                    
                            
$file_error = true;
                            
                        }

                    } else { 
$file_error = true; }

            } elseif (
$error == UPLOAD_ERR_FORM_SIZE) { $file_error = true; }
    }
    
    return 
$file_error;    
}

function 
forum(){

    
$inCore = cmsCore::getInstance();
    
$inPage = cmsPage::getInstance();
    
$inDB   = cmsDatabase::getInstance();
    
$inUser = cmsUser::getInstance();

    
$cfg = $inCore->loadComponentConfig('forum');
    
// Проверяем включени ли компонент
    
if(!$cfg['component_enabled']) { cmsCore::error404(); }

    
$inCore->loadModel('forum');
    
$model = new cms_model_forum();

    
define('IS_BILLING', $inCore->isComponentInstalled('billing'));
    if (
IS_BILLING) { $inCore->loadClass('billing'); }

    
$menutitle = $inCore->menuTitle();
    global 
$_LANG;

    
$inCore->includeFile("/components/users/includes/usercore.php");
    
$inCore->includeFile("/components/forum/includes/forumcore.php");
    
    
$id        = $inCore->request('id', 'int', 0);
    
$do        = $inCore->request('do', 'str', 'view');
    
$page    = $inCore->request('page', 'int', 1);

///////////////////////////// VIEW FORUMS LIST /////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='view'){

    echo 
'<div class="float_bar"><a href="/forum/latest_posts">'.$_LANG['LATEST_POSTS'].'</a> | <a href="/forum/latest_thread">'.$_LANG['NEW_THREADS'].'</a></div>';

    
$inPage->printHeading($_LANG['FORUMS']);
    
$inPage->setTitle($_LANG['FORUMS']);
    
$inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.$_LANG['FORUMS'].'" href="'.HOST.'/rss/forum/all/feed.rss">');

    
$groupsql = forumUserAuthSQL();
    
$sql = "SELECT *
            FROM cms_forum_cats
            WHERE published = 1 
$groupsql
            ORDER BY ordering"
;
    
$result = $inDB->query($sql) ;

    if (
$inDB->num_rows($result)){
        
$rootid = $inDB->get_field('cms_forums', 'parent_id=0', 'id');
        while (
$cat = $inDB->fetch_assoc($result)){
            echo 
'<table class="forums_table" width="100%" cellspacing="0" cellpadding="8" border="0" bordercolor="#999999" >';
            echo 
'<tr>
              <td colspan="2" width="" class="darkBlue-LightBlue"><a href="/forum/'
.$cat['seolink'].'">'.$cat['title'].'</a></td>
              <td width="120" class="darkBlue-LightBlue">'
.$_LANG['FORUM_ACT'].'</td>
              <td width="250" class="darkBlue-LightBlue">'
.$_LANG['LAST_POST'].'</td>
            </tr>'
;
            
//FORUMS LIST IN CATEGORY
            
$fsql = "SELECT *
                     FROM cms_forums
                     WHERE published = 1 AND category_id = '
{$cat['id']}' AND parent_id = '$rootid'
                     ORDER BY ordering"
;
            
$fresult = $inDB->query($fsql) ;
            if (
$inDB->num_rows($fresult)){
                
$row = 1;
                
//print forums list in category
                
while ($f = $inDB->fetch_assoc($fresult)){
                    if(!
$inCore->checkContentAccess($f['access_list'])) { continue; }
                    
//GET SUBFORUMS LIST
                    
$subforums = '';
                    
$sql = "SELECT id, title, access_list
                            FROM cms_forums
                            WHERE NSLeft > 
{$f['NSLeft']} AND NSRight < {$f['NSRight']} AND parent_id > 0
                            ORDER BY title"
;
                    
$rs = $inDB->query($sql);
                    
$sub = $inDB->num_rows($rs);
                    if (
$sub){
                        while (
$sf=$inDB->fetch_assoc($rs)){
                            if(!
$inCore->checkContentAccess($sf['access_list'])) { continue; }
                            
$subforums .= '<a href="/forum/'.$sf['id'].'">'.$sf['title'].'</a>, ';
                        }
                        
$subforums = rtrim($subforums, ', ');
                    } else {
                        
$subforums = '';
                    }
                    
//PRINT FORUM DATA
                    
if ($row % 2) { $class='row11'; } else { $class = 'row2'; }
                    
$icon = $f['icon'] ? '/upload/forum/cat_icons/'.$f['icon'] : '/components/forum/images/forum.gif';
                    echo 
'<tr>';
                        echo 
'<td width="32" class="'.$class.'" align="center" valign="top"><img src="'.$icon.'" border="0" /></td>';
                        echo 
'<td width="" class="'.$class.'" align="left" valign="top">';
                            
//FORUM TITLE
                            
echo '<div class="forum_link"><a href="/forum/'.$f['id'].'">'.$f['title'].'</a></div>';
                            
//FORUM DESCRIPTION
                            
echo '<div class="forum_desc">'.$f['description'].'</div>';
                            
//SUBFORUMS
                            
if ($sub){
                                echo 
'<div class="forum_subs"><span class="forum_subs_title">'.$_LANG['SUBFORUMS'].':</span> '.$subforums.'</div>';
                            }
                        echo 
'</td>';
                        echo 
'<td class="'.$class.'" style="font-size:11px" valign="top">'.$model->getForumMessages($f['NSLeft'], $f['NSRight']).'</td>';
                        echo 
'<td style="font-size:11px" class="'.$class.'" valign="top">'.forumLastMessage($f['id'], $cfg['pp_thread']).'</td>';
                    echo 
'</tr>';
                    
$row++;
                }
            } else {
                echo 
'<td colspan="4"><p>'.$_LANG['NOT_FORUMS_IN_CAT'].'</p></td>';
            }
            echo 
'</table>';
        }
    } else {
        echo 
'<p>'.$_LANG['NOT_CATS_OF_FORUM'].'</p>';
    }
        
}    
///////////////////////////// VIEW THREADS /////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='forum'){

    
$f = $model->getForum($id);
    if (!
$f){ cmsCore::error404(); }
    
// права доступа к форуму
    
if(!$inCore->checkContentAccess($f['access_list'])) {
        
$inPage->includeTemplateFile('special/accessdenied.php');
        return;
    }
        
    
$inPage->setTitle($f['title']);
    
$inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.htmlspecialchars($f['title']).'" href="'.HOST.'/rss/forum/'.$f['id'].'/feed.rss">');

    
//PATHWAY ENTRY
    
$left_key   = $f['NSLeft'];
    
$right_key  = $f['NSRight'];
    
$sql        = "SELECT id, title, NSLevel, access_list FROM cms_forums WHERE NSLeft <= $left_key AND NSRight >= $right_key AND parent_id > 0 ORDER BY NSLeft";
    
$rs_rows    = $inDB->query($sql);

    while(
$pcat = $inDB->fetch_assoc($rs_rows)){
        
// если в цепочке родителей форума встречаются
        // форумы с ограниченным доступом, запрещаем доступ
        
if(!$inCore->checkContentAccess($pcat['access_list'])) {
            
$inPage->includeTemplateFile('special/accessdenied.php');
            return;
        }
        
$inPage->addPathway($pcat['title'], '/forum/'.$pcat['id']);
    }

    
// --------- Список подфорумов ---------------
    
    
$subforums_sql      = "SELECT *
                           FROM cms_forums
                           WHERE published = 1 AND parent_id = '
$id'
                           ORDER BY ordering"
;

    
$subforums_result   = $inDB->query($subforums_sql);
    
$subforums_count    = $inDB->num_rows($subforums_result);

    
$subforums          = array();

    if (
$subforums_count){
        while (
$subforum = $inDB->fetch_assoc($subforums_result)){

            if(!
$inCore->checkContentAccess($subforum['access_list'])) { continue; }

            
$inner_forums = '';

            
$inner_sql    = "SELECT id, title, access_list FROM cms_forums WHERE parent_id = '{$subforum['id']}' ORDER BY title";
            
$inner_result = $inDB->query($inner_sql);
            
$inner_count  = $inDB->num_rows($inner_result);

            if (
$inner_count){
                while (
$sf=$inDB->fetch_assoc($inner_result)){
                    if(!
$inCore->checkContentAccess($sf['access_list'])) { continue; }
                    
$inner_forums .= '<a href="/forum/'.$sf['id'].'">'.$sf['title'].'</a>, ';
                }
                
$inner_forums = rtrim($inner_forums, ', ');
            }

            
$subforum['subforums']      = $inner_forums;
            
$subforum['messages']       = $model->getForumMessages($subforum['NSLeft'], $subforum['NSRight']);
            
$subforum['last_message']   = forumLastMessage($subforum['id'], $cfg['pp_thread']);
            
$subforums[]                = $subforum;

        }        
    }

    
// ------ Список тем форума -------

    
$perpage = $cfg['pp_forum'] ? $cfg['pp_forum'] : 25;

    
// считаем количество тем и делим на страницы
    
$threads_count          = $inDB->rows_count('cms_forum_threads', "forum_id = {$f['id']}");
    
$threads_page_select    = '';

    if (
$inUser->id){
        
$logdate = $_SESSION['user']['logdate'];
    } else {
        
$logdate = '9999-01-01 12:00:00';
    }

    
$tsql = "SELECT t.*, COUNT(p.id) as postsnum, IF(t.pubdate > '$logdate', 1, 0) as is_new, u.nickname, u.login
             FROM cms_forum_threads t
             INNER JOIN cms_forum_posts p ON p.thread_id = t.id
             LEFT JOIN cms_users u ON u.id = t.user_id
             WHERE t.forum_id = '
{$f['id']}'
             GROUP BY t.id
             ORDER BY t.pinned DESC, t.pubdate DESC
             LIMIT "
.(($page-1)*$perpage).", $perpage";

    
$tresult = $inDB->query($tsql) ;

    
$threads = array();

    if (
$inDB->num_rows($tresult)){

        while (
$thread = $inDB->fetch_assoc($tresult)){

            
$thread['author']       = array('nickname'=>$thread['nickname'], 'login'=>$thread['login']);
            
$thread['pages']        = ceil($thread['postsnum'] / $cfg['pp_thread']);
            
$thread['answers']      = $thread['postsnum']-1;
            
$thread['last_message'] = threadLastMessage($thread['id'], $thread['pages']);

            
$threads[]              = $thread;

        }

       
$pagination = cmsPage::getPagebar($threads_count, $page, $perpage, '/forum/%forum_id%-%page%', array('forum_id'=>$id));
        
    }

    
$smarty = $inCore->initSmarty('components', 'com_forum_view.tpl');
    
$smarty->assign('forum', $f);
    
$smarty->assign('cfg', $cfg);
    
$smarty->assign('threads_count', $threads_count);
    
$smarty->assign('threads', $threads);
    
$smarty->assign('page', $page);
    
$smarty->assign('perpage', $perpage);
    
$smarty->assign('pagination', $pagination);
    
$smarty->assign('user_id', $inUser->id);
    
$smarty->assign('subforums_count', $subforums_count);
    
$smarty->assign('subforums', $subforums);
    
$smarty->display('com_forum_view.tpl');

}
///////////////////////////// READ THREAD /////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='thread'){

    
$sql = "SELECT t.*, f.title as forum, f.id as fid, f.NSLeft as forum_left, f.NSRight as forum_right, f.access_list
            FROM cms_forum_threads t
            INNER JOIN cms_forums f ON f.id = t.forum_id
            WHERE t.id = '
$id' LIMIT 1";
    
$result = $inDB->query($sql);
    if (!
$inDB->num_rows($result)){ cmsCore::error404(); }

    
$t = $inDB->fetch_assoc($result);
    if(!
$inCore->checkContentAccess($t['access_list'])) {
        
$inPage->includeTemplateFile('special/accessdenied.php');
        return;
    }
    
$t = cmsCore::callEvent('GET_FORUM_THREAD', $t);

    
$mythread = ($inUser->id==$t['user_id']);
    
$is_admin = $inUser->is_admin;
    
$is_adm   = $inCore->userIsAdmin($inUser->id);
    
$is_moder = $inCore->isUserCan('forum/moderate');
    
    
$inDB->query("UPDATE cms_forum_threads SET hits = hits + 1 WHERE id = ".$t['id']) ;
    
    
$inPage->setTitle($t['title']);
    
$inPage->setDescription($t['title']);
    
$inPage->printHeading($t['title']);

    
$inPage->addHeadJS('components/forum/js/common.js');

    
//Calculate posts count
    
$csql = "SELECT id FROM cms_forum_posts WHERE thread_id = '{$t['id']}'";
    
$cres = $inDB->query($csql);            
    
$posts_count = $inDB->num_rows($cres);

    
$perpage=$cfg['pp_thread'];
    
    
$lastpage = ceil($posts_count / $perpage);

    if (
$inCore->request('go_last_post', 'int', 0)){
        
$inCore->redirect('/forum/thread'.$t['id'].'-'.$lastpage.'.html#new');
    }

    
//TOOLBAR TABLE        
    
ob_start();
    if(
$t['description']){
        echo 
'<div class="forum_toolbar" style="padding:5px;">'.$t['description'].'</div>';
    }
    echo 
'<table width="100%" cellspacing="0" cellpadding="5"  class="forum_toolbar"><tr>';

    if (
$posts_count){
        echo 
'<td width="5">&nbsp;</td>';
    } else {
        echo 
'<td width=="">&nbsp;</td>';
    }
    
$toolbar_pages = ob_get_clean();

    
ob_start();
    if(
$inUser->id){
        echo 
'<td class="forum_toollinks">';
        echo 
'<table cellspacing="2" cellpadding="2" align="right"><tr>';
        if (!
$t['closed']){
            echo 
'<td width="16"><img src="/components/forum/images/toolbar/newpost.gif"/></td>
                  <td><a href="/forum/reply'
.$t['id'].'.html"><strong>'.$_LANG['NEW_MESSAGE'].'</strong></a></td>';
        } else {
            echo 
'<td><strong>'.$_LANG['THREAD_CLOSE'].'</td>';
        }
        
        if(
$is_admin || $is_moder) { 
            if (!
$t['closed']){
                echo 
'<td width="16"><img src="/components/forum/images/toolbar/closethread.gif"/></td>
                      <td><a href="/forum/closethread'
.$t['id'].'.html">'.$_LANG['CLOSE'].'</a></td>';
            } else {
                echo 
'<td width="16"><img src="/components/forum/images/toolbar/openthread.gif"/></td>
                      <td><a href="/forum/openthread'
.$t['id'].'.html">'.$_LANG['OPEN'].'</a></td>';
            }
        }
        if(
usrCheckAuth()) {
            if (!
cmsUser::isSubscribed($inUser->id, 'forum', $t['id'])){
                    echo 
'<td width="16"><img src="/components/forum/images/toolbar/subscribe.gif"/></td>
                          <td><a href="/forum/subscribe'
.$t['id'].'.html">'.$_LANG['SUBSCRIBE_THEME'].'</a></td>';
            } else {
                echo 
'<td width="16"><img src="/components/forum/images/toolbar/unsubscribe.gif"/></td>
                      <td><a href="/forum/unsubscribe'
.$t['id'].'.html">'.$_LANG['UNSUBSCRIBE'].'</a></td>';
            }
            if (
$is_admin || $is_moder){                    
                if (!
$t['pinned']){
                    echo 
'<td width="16"><img src="/components/forum/images/toolbar/pinthread.gif"/></td>
                          <td><a href="/forum/pinthread'
.$t['id'].'.html">'.$_LANG['PIN'].'</a></td>';
                } else {
                    echo 
'<td width="16"><img src="/components/forum/images/toolbar/unpinthread.gif"/></td>
                          <td><a href="/forum/unpinthread'
.$t['id'].'.html">'.$_LANG['UNPIN'].'</a></td>';
                }
                echo 
'<td width="16"><img src="/components/forum/images/toolbar/movethread.gif"/></td>
                      <td><a href="/forum/movethread'
.$t['id'].'.html">'.$_LANG['MOVE'].'</a></td>';
                echo 
'<td width="16"><img src="/components/forum/images/toolbar/edit.gif"/></td>
                      <td><a href="/forum/renamethread'
.$t['id'].'.html">'.$_LANG['RENAME'].'</a></td>';
            }
            if (
$is_adm || $mythread){
                echo 
'<td width="16"><img src="/components/forum/images/toolbar/delete.gif"/></td>
                      <td><a href="javascript:deleteThread('
/forum/deletethread'.$t['id'].'.html')">'.$_LANG['DELETE'].'</a></td>';
            }
        }
        echo 
'<td width="16"><img src="/components/forum/images/toolbar/back.gif"/></td>
              <td><a href="/forum/'
.$t['fid'].'">'.$_LANG['BACKB'].'</a></td>';
        echo 
'</tr></table>';
        echo 
'</td>';
    } else { echo 
'<td>&nbsp;</td>'; }
    
    echo 
'</tr></table>';
    
$toolbar = ob_get_clean();

    
//BUILD PAGE
    //PATHWAY ENTRY
    
$left_key = $t['forum_left'];
    
$right_key = $t['forum_right'];
    
$sql = "SELECT id, title, NSLevel, access_list FROM cms_forums WHERE NSLeft <= $left_key AND NSRight >= $right_key AND parent_id > 0 ORDER BY NSLeft";
    
$rs_rows = $inDB->query($sql);
    while(
$pcat=$inDB->fetch_assoc($rs_rows)){
        
// если в цепочке родителей форума встречаются
        // форумы с ограниченным доступом, запрещаем доступ
        
if(!$inCore->checkContentAccess($pcat['access_list'])) {
            
$inPage->includeTemplateFile('special/accessdenied.php');
            return;
        }
        
$inPage->addPathway($pcat['title'], '/forum/'.$pcat['id']);
    }            
    
$inPage->addPathway($t['title'], '/forum/thread'.$t['id'].'.html');
    
    
$psql = "SELECT p.*, u.id as uid, u.nickname author, u.login author_login, u.is_deleted deleted, up.imageurl imageurl, up.signature signature
             FROM cms_forum_posts p
             LEFT JOIN cms_users u ON u.id = p.user_id
             LEFT JOIN cms_user_profiles up ON up.user_id = u.id
             WHERE p.thread_id = '
$id'
             ORDER BY p.pubdate ASC
             LIMIT "
.(($page-1)*$perpage).", $perpage";
             
    
$presult = $inDB->query($psql);
    if (
$inDB->num_rows($presult)){

        
$num = (($page-1)*$perpage)+1;

        
$posts = array();

        while (
$p = $inDB->fetch_assoc($presult)){
            
$p['content'] = $inCore->parseSmiles($p['content'], true);
            
$p['content'] = str_replace("&amp;", '&', $p['content']);
            
$posts[] = $p;
        }

        
$posts = cmsCore::callEvent('GET_FORUM_POSTS', $posts);

        
//print posts in thread
        
echo $toolbar_pages . $toolbar;

        
//ATTACHED POLL
        
echo forumAttachedPoll($id, $t);

        
//THREAD MESSAGES LIST
        
echo '<table class="posts_table" width="100%" cellspacing="2" cellpadding="5" border="0" bordercolor="#999999">';

        foreach (
$posts as $p){
            
$mypost = $inUser->id ? ($inUser->id==$p['user_id'] || $is_adm) : false;
            
$user_messages = $model->getUserPostsCount($p['uid']);
            echo 
'<tr class="posts_table_tr">';
                
//user column
                
echo '<td class="post_usercell" width="140" align="center" valign="top" height="150">';
                    echo 
'<div><a class="post_userlink" href="javascript:addNickname(''.$p['author'].'');" title="'.$_LANG['ADD_NICKNAME'].'"/>'.$p['author'].'</a></div>';
                                                
                    echo 
'<div class="post_userrank">'.$model->getForumUserRank($p['uid'], $user_messages, $cfg['ranks'], $cfg['modrank']).'</div>';
                
                    echo 
'<div class="post_userimg">';
                        echo 
'<a href="'.cmsUser::getProfileURL($p['author_login']).'" title="'.$_LANG['GOTO_PROFILE'].'">'.usrImageNOdb($p['uid'], 'small', $p['imageurl'], $p['is_deleted']).'</a>';
                        
                        
$awards = $model->getUserAwardsList($p['uid']);
                        if (
$awards){
                            echo 
'<div class="post_userawards">'; 
                                foreach(
$awards as $uid=>$title){
                                    echo 
'<img src="/images/icons/award.gif" border="0" alt="'.htmlspecialchars($title).'" title="'.htmlspecialchars($title).'"/>';
                                }
                            echo 
'</div>';
                        }
                    echo 
'</div>';
                    
                    echo 
'<div class="post_usermsgcnt">'.$_LANG['MESSAGES'].': '.$user_messages.'</div>';
                    if(
$inUser->isOnline($p['uid'])){
                        echo 
'<span class="online" style="font-size:10px;">'.$_LANG['ONLINE'].'</span>';
                    }
                                                
                echo 
'</td>';
                
//message column
                
echo '<td width="" class="post_msgcell" align="left" valign="top">';
                    echo 
'<a name="'.$p['id'].'"></a>';
                    
//date & actions
                    
echo '<table width="100%" class="post_date"><tr>';                                
                    echo 
'<td><strong>#'.$num.'</strong> - '.$inCore->dateFormat($p['pubdate'], true, true).'</td>';
                    echo 
'<td align="right">';
                    if (
usrCheckAuth() && !$t['closed']){ 
                        echo 
'<table cellpadding="1" cellspacing="2" border="0" class="msg_links">
                                <tr>'
;

                                echo 
'<td width="15"><img src="/components/forum/images/toolbar/post-quote.gif"/></td>
                                      <td><a href="javascript:addQuoteText(''.$p['
author'].'')" title="'.$_LANG['ADD_SELECTED_QUOTE'].'">'.$_LANG['ADD_QUOTE_TEXT'].'</a></td>';
                                echo 
'<td width="15"><img style="margin-left:5px" src="/components/forum/images/toolbar/post-reply.gif"/></td>';
                                echo 
'<td><a href="/forum/thread'.$t['id'].'-quote'.$p['id'].'.html" title="'.$_LANG['REPLY_FULL_QUOTE'].'">'.$_LANG['REPLY'].'</a></td>';

$end_min = $model->checkEditTime($p['pubdate'], $cfg['edit_minutes']);

if ((
$is_moder && !$model->abstract_array['is_admin'][$p['uid']]) || $inUser->is_admin || ($mypost && ($end_min>0 && $cfg['edit_minutes']>0)) || ($mypost && !$cfg['edit_minutes'])){
    echo 
'<td width="15"><img style="margin-left:5px" src="/components/forum/images/toolbar/post-edit.gif"/></td>
          <td><a href="/forum/editpost'
.$p['id'].'.html">'.$_LANG['EDIT'].'</a></td>';
    if (
$num > 1){
        echo 
'<td width="15"><img style="margin-left:5px" src="/components/forum/images/toolbar/post-delete.gif"/></td>
              <td><a href="/forum/deletepost'
.$p['id'].'.html">'.$_LANG['DELETE'].'</a></td>';
    }
}
                        echo 
'</tr></table>';
                    }
                    
                    echo 
'</td></tr></table>';
                    
                    echo 
'<div class="post_content">'.$p['content'].'</div>';
                                            
                    if (
$cfg['fa_on']){
                        echo 
$model->getPostAttachedFiles($p['id'], $mypost, @$cfg['showimg']);
                    }
                    
//edit details
                    
if ($p['edittimes']){
                        echo 
'<div class="post_editdate">'.$_LANG['EDITED'].': '.$p['edittimes'].' '.$_LANG['COUNT'].' ('.$_LANG['LAST_EDIT'].': '.$inCore->dateFormat($p['editdate'], true, true).')</div>';
                    }
                    
//user signature
                    
if ($p['signature']){
                        echo 
'<div class="post_signature">'.$inCore->parseSmiles($p['signature'], true).'</div>';
                    }
                echo 
'</td>';
            echo 
'</tr>';
            
$num++;
        }
        
$model->resetAbstractArray();
        echo 
'</table>';
        
        
//BOTTOM TOOLBAR
        
if ($page == $lastpage) { echo '<a name="new"></a>'; }
        echo 
'<table width="100%" cellspacing="0" cellpadding="5"  class="forum_toolbar"><tr><td><a href="#">'.$_LANG['GOTO_BEGIN_PAGE'].'</a></td>'. $toolbar;
        
        
//NAV BAR
        
$previd = $inDB->get_fields('cms_forum_threads', 'id<'.$t['id'].' AND forum_id = '.$t['forum_id'], 'id, title', 'id DESC');
        
$nextid = $inDB->get_fields('cms_forum_threads', 'id>'.$t['id'].' AND forum_id = '.$t['forum_id'], 'id, title', 'id ASC');            
        
        echo 
'<div class="forum_navbar">';
            echo 
'<table width="100%"><tr>';
                echo 
'<td align="left">';
                    echo 
'<table cellpadding="5" cellspacing="0" border="0" align="center" style="margin-left:auto;margin-right:auto"><tr>';
                        if (
$previd){
                            echo 
'<td align="right" width="">';
                                echo 
'<div>&larr; <a href="/forum/thread'.$previd['id'].'.html">'.$_LANG['PREVIOUS_THREAD'].'</a></div>';
                            echo 
'</td>';
                        }
                        if (
$previd && $nextid) { echo '<td>|</td>'; }
                        if (
$nextid){
                            echo 
'<td align="left" width="">';
                                echo 
'<div><a href="/forum/thread'.$nextid['id'].'.html">'.$_LANG['NEXT_THREAD'].'</a> &rarr;</div>';
                            echo 
'</td>';
                        }            
                    echo 
'</tr></table>';                
                echo 
'</td>';
                echo 
'<td width="150" align="right">'.$_LANG['GOTO_FORUM'].': </td>';
                echo 
'<td width="220" align="right">';            
                    echo 
forumsList($t['forum_id']);
                echo 
'</td>';
            echo 
'</tr></table>';                                            
        echo 
'</div>';
        
        
//PAGINATION
        
$total = $inDB->rows_count('cms_forum_posts', 'thread_id='.$id);

        echo 
cmsPage::getPagebar($total, $page, $perpage, '/forum/thread'.$id.'-%page%.html');
        
        
//FAST ANSWER FORM
        
if (!isset($cfg['fast_on'])) { $cfg['fast_on'] = 1; }                
        if (!isset(
$cfg['fast_bb'])) { $cfg['fast_bb'] = 1; }                
        if (
$cfg['fast_on'] && !$t['closed']){
            echo 
'<div class="forum_fast">';
                echo 
'<div class="forum_fast_header">'.$_LANG['FAST_ANSWER'].'</div>';
                if (
$inUser->id){
                    if (
$cfg['fast_bb']){
                        
$inPage->addHeadJS('core/js/smiles.js');
                        echo 
'<div class="usr_msg_bbcodebox">';
                            echo 
cmsPage::getBBCodeToolbar('message', true);
                        echo 
'</div>';
                        echo 
cmsPage::getSmilesPanel('message');
                    }
                    echo 
'<div class="forum_fast_form">';
                        echo 
'<form action="/forum/reply'.$id.'.html" method="post">';
                            echo 
'<textarea id="message" name="message" rows="5"></textarea>';
                            echo 
'<div class="forum_fast_submit" style="float:right;padding:5px;"><input type="submit" name="gosend" value="'.$_LANG['SEND'].'"/></div>';
                            if (
$mythread || $is_admin){
                                echo 
'<div style="float:right;padding:8px;">
                                        <label><input type="checkbox" name="fixed" value="1" /> '
.$_LANG['TOPIC_FIXED_LABEL'].'</label>
                                      </div>'
;
                            }
                        echo 
'</form>';
                    echo 
'</div>';
                } else {
                    echo 
'<div style="padding:5px">'.$_LANG['FOR_WRITE_ON_FORUM'].', <a href="/registration">'.$_LANG['REGISTER'].'</a> '.$_LANG['OR_LOGIN'].'.</div>';
                }
            echo 
'</div>';
        }
        echo 
'<script type="text/javascript" language="JavaScript">
                $(document).ready(function(){
                    $('
.posts_table_tr .msg_links').css({opacity:0.4, filter:'alpha(opacity=40)'});
                    $('
.posts_table_tr').hover(
                        function() {
                            $(this).find('
.msg_links').css({opacity:1.0, filter:'alpha(opacity=100)'});
                        },
                        function() {
                            $(this).find('
.msg_links').css({opacity:0.4, filter:'alpha(opacity=40)'});
                        }
                    );
                });
        </script>'
;
    } else {
        echo 
'<p>'.$_LANG['NO_MESS_IN_THREAD'].'</p>';
    }                    
}
///////////////////////////// NEW THREAD / POST /////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='newthread' || $do=='newpost' || $do=='editpost'){

    if (!
$inUser->id){ cmsUser::goToLogin(); }

    
$inPage->addHeadJS('core/js/smiles.js');
    
    
// новая тема
    
if ($do == 'newthread') {

        
$forum = $model->getForum($id);
        if(!
$forum) { cmsCore::error404(); }
        
// права доступа к форуму
        
if(!$inCore->checkContentAccess($forum['access_list'])) {
            
$inPage->includeTemplateFile('special/accessdenied.php');
            return;
        }

        if (
IS_BILLING && $forum['topic_cost']){
            
cmsBilling::checkBalance('forum', 'add_thread', false, $forum['topic_cost']);
        }

        
$inPage->setTitle($_LANG['NEW_THREAD']);
        
$inPage->addPathway($forum['title'], '/forum/'.$forum['id']);
        
$inPage->addPathway($_LANG['NEW_THREAD']);
        echo 
'<div class="con_heading">'.$_LANG['NEW_THREAD'].'</div>';

    }
    
// новый пост
    
if ($do == 'newpost'){

        
// Получаем тему
        
$t = $model->getThread($id);
        if(!
$t) { cmsCore::error404(); }
        if(
$t['closed'] == 1) { cmsCore::error404(); }

        
// Получаем форум
        
$forum = $model->getForum($t['forum_id']);
        
// права доступа к форуму
        
if(!$inCore->checkContentAccess($forum['access_list'])) {
            
$inPage->includeTemplateFile('special/accessdenied.php');
            return;
        }

        
$inPage->setTitle($_LANG['NEW_POST']);
        
$inPage->addPathway($forum['title'], '/forum/'.$forum['id']);
        
$inPage->addPathway($t['title'], '/forum/thread'.$t['id'].'.html');
        
$inPage->addPathway($_LANG['NEW_POST']);

        echo 
'<div class="con_heading">'.$_LANG['NEW_POST'].'</div>';
        echo 
'<div style="margin-bottom:10px">
                <strong>'
.$_LANG['THREAD'].': </strong><a href="/forum/thread'.$t['id'].'.html">'.$t['title'].'</a>
              </div>'
;
        
$is_topic_starter = ($t['user_id'] == $inUser->id);

    }
    
// редактирование поста
    
if ($do == 'editpost'){    

        
$msg = $model->getPost($id);
        if(!
$msg) { cmsCore::error404(); }
        if(!
$inUser->is_admin && !$inCore->isUserCan('forum/moderate') && $inUser->id != $msg['user_id']) { cmsCore::error404(); }

        
// Получаем тему
        
$t = $model->getThread($msg['thread_id']);
        if(!
$t) { cmsCore::error404(); }
        if(
$t['closed'] == 1) { cmsCore::error404(); }

        if(!
$inUser->is_admin && !$inCore->isUserCan('forum/moderate') && $cfg['edit_minutes']){

            
$end_min  = $model->checkEditTime($msg['pubdate'], $cfg['edit_minutes']);

            if(
$cfg['edit_minutes'] == -1 || $end_min <= 0){
                
cmsCore::addSessionMessage($_LANG['EDIT_IS_DISABLE'], 'error');
                
$inCore->redirectBack();
            } else {
                
$msg_minute = str_replace('{min}', cmsCore::spellCount($end_min, $_LANG['MINUTE1'], $_LANG['MINUTE2'], $_LANG['MINUTE10']), $_LANG['EDIT_INFO']);
                
cmsCore::addSessionMessage($msg_minute, 'info');
            }
        }
        
$inPage->setTitle($_LANG['EDIT_POST']);
        
$inPage->addPathway($_LANG['EDIT_POST']);
        echo 
'<div class="con_heading">'.$_LANG['EDIT_POST'].'</div>';
        
$oldmsg = $msg['content'];    

    }
        
    
$replyid = $inCore->request('replyid', 'int', 0);

    if(!isset(
$_POST['gosend'])){
                
        
$inDB->query("DELETE FROM cms_upload_images WHERE session_id='".session_id()."'");
    
        if (
$replyid){
            
$sql = "SELECT p.*, u.*, DATE_FORMAT(p.pubdate, '%d-%m-%Y в %H:%i') senddate
                    FROM cms_forum_posts p, cms_users u
                    WHERE p.id = '
$replyid' AND p.user_id = u.id";
            
$result = $inDB->query($sql) ;
            if (
$inDB->num_rows($result)>0){
                
$msg = $inDB->fetch_assoc($result);
                
$oldmsg = '[quote='.$msg['nickname'].']'."rn".
                            
strip_tags(str_replace('<br/>', "n", $msg['content']))."rn".
                          
'[/quote]'."rnrn";
            }
        }
        
        echo 
'<form action="'.$_SERVER['REQUEST_URI'].'" method="POST" name="msgform" id="msgform" enctype="multipart/form-data">';
        echo 
'<table width="100%" cellpadding="0" cellspacing="0"><tr><td>';

        if (
$do == 'newthread') {
            echo 
'<input type="hidden" name="forum_id" value="'.$id.'" />'; 
            echo 
'<div class="forum_postinfo"><table width="100%">';
                echo 
'<tr>';
                    echo 
'<td width="150">'.$_LANG['THREAD_TITLE'].':</td>';
                    echo 
'<td width=""><input type="text" name="title" size="30"/></td>';                                
                echo 
'</tr>';
                echo 
'<tr>';
                    echo 
'<td width="">'.$_LANG['THREAD_DESCRIPTION'].':</td>';
                    echo 
'<td width=""><input type="text" name="description" size="50"/></td>';                                
                echo 
'</tr>';
            echo 
'</table></div>';
        }        

        echo 
'<div class="usr_msg_bbcodebox">';
            if (!isset(
$cfg['img_on'])) { $cfg['img_on'] = 1; }
            echo 
cmsPage::getBBCodeToolbar('message', $cfg['img_on'], 'forum');
        echo 
'</div>';

        echo 
cmsPage::getSmilesPanel('message');
        
        
$inCore->initAutoGrowText('#message');
        echo 
'<div><textarea class="ajax_autogrowarea" name="message" id="message">'.(@$oldmsg).'</textarea></div>';                        

        if ((
$do=='newpost' || $do=='newthread') && $cfg['fa_on']) { //File attach form
            
echo forumAttachForm($cfg);
        }

        if (
$do=='newthread') { //Polls attach form
            
echo forumPollForm($cfg);
        }

        if ((
$do=='newpost' && !cmsUser::isSubscribed($inUser->id, 'forum', @$id)) || ($do=='newthread')){
            echo 
'<div style="margin-top:16px;"><label><input name="subscribe" type="checkbox" value="1" /> '.$_LANG['SUBSCRIBE_THREAD'].'</label></div>';
        }

        if (
$do=='newpost' && ($inUser->is_admin || $is_topic_starter)){
            echo 
'<div style="margin-top:3px;margin-bottom:15px"><label><input name="fixed" type="checkbox" value="1" /> '.$_LANG['TOPIC_FIXED_LABEL'].'</label></div>';
        }
        
        echo 
'<div style="margin-top:6px;"><input type="submit" name="gosend" value="'.$_LANG['SEND'].'" style="font-size:18px"/> ';
        echo 
'<input type="button" name="gosend" value="'.$_LANG['CANCEL'].'" style="font-size:18px" onclick="window.history.go(-1)"/></div>';
        echo 
'</td>';    
                        
        echo 
'</tr></table>';
        

        echo 
'</form>';
        
    } else {

        
$message_post = $inCore->request('message', 'html');
        
$message      = $inCore->badTagClear($message_post);
        
$message      = $inDB->escape_string($message_post);                
        if (!
$message) { echo '<p>'.$_LANG['NEED_TEXT_POST'].'</p>'; return; }

        if(
$do=='newpost'){                                                
            
//NEW POST
            //insert new post
            
$lastid = $model->addPost(array(
                    
'thread_id' => $id,
                    
'user_id' => $inUser->id,
                    
'message' => $message
                
));

            
$is_topic_starter = ($t['user_id'] == $inUser->id);

            
$is_fixed = $inCore->request('fixed', 'int', 0);

            if (
$is_fixed && ($inUser->is_admin || $is_topic_starter)){
                
$inDB->query("UPDATE cms_forum_threads SET title = CONCAT('{$_LANG['TOPIC_FIXED_PREFIX']} ', title), closed=1 WHERE id = '$id'");
            }

            
cmsUser::checkAwards($inUser->id);

            
$inCore->registerUploadImages(session_id(), $lastid, 'forum');
                                        
            
//refresh forum thread
            
$sql = "UPDATE cms_forum_threads SET pubdate = NOW() WHERE id = '$id'";
            
$inDB->query($sql);
            
//upload attached files
            
$file_error = false;
            if (
$cfg['fa_on'] && $_FILES['fa']) {                    
                
$file_error = uploadFiles($lastid, $cfg);        
            }
            
//subscribe thread
            
if ($_POST['subscribe']){
                
cmsUser::subscribe($inUser->id, 'forum', $id);
            }
            
cmsUser::sendUpdateNotify('forum', $id);

            if (
$file_error){
                
$err_msg = $_LANG['ERR_UPLOAD_FILE'].'<div><strong>'.$_LANG['UPLOAD_MAXSIZE'].':</strong> '.$cfg['fa_size'].' '.$_LANG['KBITE'].'.</div><div><strong>'.$_LANG['UPLOAD_FILETYPE'].':</strong> .'.strtolower(str_replace(' ', ' .', $cfg['fa_ext'])).'</div><p>'.$_LANG['NOT_ALL_FILE_ATTACH'].'</p>';
                
cmsCore::addSessionMessage($err_msg, 'error');
            }

            
$posts_in_thread = $inDB->rows_count('cms_forum_posts', 'thread_id='.$id);
            
$pages = ceil($posts_in_thread / $cfg['pp_thread']);
            if (!
$t['is_hidden']){
                
//регистрируем событие
                
$message_post = $inCore->parseSmiles($message_post, true);
                
$message_post = strip_tags($message_post);
                
cmsActions::log('add_fpost', array(
                    
'object' => 'пост',
                    
'object_url' => '/forum/thread'.$id.'-'.$pages.'.html#'.$lastid,
                    
'object_id' => $lastid,
                    
'target' => $t['title'],
                    
'target_url' => '/forum/thread'.$id.'.html',
                    
'target_id' => $id,
                    
'description' => ( strlen($message_post)>100 ? substr($message_post, 0, 100) : $message_post )
                ));
            }
            
$inCore->redirect('/forum/thread'.$id.'-'.$pages.'.html#'.$lastid);

        } else {

            if (
$do=='newthread'){
                
//NEW THREAD
                
$title          = $inCore->request('title', 'str');
                
$description    = $inCore->request('description', 'str');

                if(
$title && $message){

                    
$access_list = $inCore->yamlToArray($forum['access_list']);
                    
$is_hidden = $access_list ? 1 : 0;
                    
                    
$threadlastid = $model->addThread(array(
                            
'forum_id' => $id,
                            
'user_id' => $inUser->id,
                            
'title' => $title,
                            
'description' => $description,
                            
'is_hidden' => $is_hidden
                        
));
                    
                    
$lastid = $model->addPost(array(
                            
'thread_id' => $threadlastid,
                            
'user_id' => $inUser->id,
                            
'message' => $message
                        
));
                    
                    
cmsUser::checkAwards($inUser->id);

                    
$inCore->registerUploadImages(session_id(), $lastid, 'forum');
                    
                    
//subscribe thread
                    
if ($_POST['subscribe']){
                        
cmsUser::subscribe($inUser->id, 'forum', $threadlastid);
                    }
                                
                    
//create attached poll
                    
$poll_error = false;
                    if (@
$_POST['poll']['title']){
                        
$poll_error = createPoll($threadlastid, $_POST['poll'], $cfg);
                        if (
$poll_error) { echo $poll_error; }
                    }
                    
                    
//if poll created without errors
                    //upload attached files
                    
$file_error = false;
                    if (
$cfg['fa_on'] && sizeof($_FILES['fa'])) {
                        
//upload
                        
$file_error = uploadFiles($lastid, $cfg);
                    }

                    if (
$file_error){
                        
$err_msg = $_LANG['ERR_UPLOAD_FILE'].'<div><strong>'.$_LANG['UPLOAD_MAXSIZE'].':</strong> '.$cfg['fa_size'].' '.$_LANG['KBITE'].'.</div><div><strong>'.$_LANG['UPLOAD_FILETYPE'].':</strong> .'.strtolower(str_replace(' ', ' .', $cfg['fa_ext'])).'</div><p>'.$_LANG['NOT_ALL_FILE_ATTACH'].'</p>';
                        
cmsCore::addSessionMessage($err_msg, 'error');
                    }

                    if (
IS_BILLING && $forum['topic_cost']){
                        
cmsBilling::process('forum', 'add_thread', $forum['topic_cost']);
                    }

                    if (!
$is_hidden) {
                        
$message = $inCore->parseSmiles($message, true);
                        
$message = strip_tags($message);
                        
//регистрируем событие
                        
cmsActions::log('add_thread', array(
                            
'object' => $title,
                            
'object_url' => '/forum/thread'.$threadlastid.'.html',
                            
'object_id' => $threadlastid,
                            
'target' => $forum['title'],
                            
'target_url' => '/forum/'.$forum['id'],
                            
'target_id' => $forum['id'], 
                            
'description' => ( strlen($message)>100 ? substr($message, 0, 100) : $message )
                        ));    
                    }
                    
$inCore->redirect('/forum/thread'.$threadlastid.'.html#'.$lastid);

                } else {
                    echo 
'<p>'.$_LANG['NEED_TITLE_THREAD_YOUR_POST'].'</p>';
                }
            } else { 
//edit post
                
if($message){
                    
$posts_in_thread = $inDB->rows_count('cms_forum_posts', 'thread_id='.$msg['thread_id']);
                    
$pages = ceil($posts_in_thread / $cfg['pp_thread']);
                    
$sql = "UPDATE cms_forum_posts 
                            SET content = '
$message',
                                editdate = NOW(),
                                edittimes = edittimes + 1
                            WHERE id = '
$id'";
                    
$inDB->query($sql) ;
                    
$inCore->registerUploadImages(session_id(), $id, 'forum');
                    
$message = $inCore->parseSmiles($message, true);
                    
$message = substr(strip_tags($message), 0, 100);
                    
cmsActions::updateLog('add_fpost', array('description' => $message), $id);
                    if (
$pages==1){
                        
$inCore->redirect('/forum/thread'.$msg['thread_id'].'.html#'.$id);
                    } else {
                        
$inCore->redirect('/forum/thread'.$msg['thread_id'].'-'.$pages.'.html#'.$id);
                    }                    
                } else { echo 
'<p>'.$_LANG['NEED_TEXT_POST'].'</p>'; }
            }
        }
    }
    
}
///////////////////////////// DELETE POST /////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='deletepost'){

    if (!
$inUser->id){ cmsUser::goToLogin(); }

    
$msg = $model->getPost($id);
    if(!
$msg) { cmsCore::error404(); }
    if(!
$inUser->is_admin && !$inCore->isUserCan('forum/moderate') && $inUser->id != $msg['user_id']) { cmsCore::error404(); }

    if(!
$inUser->is_admin && !$inCore->isUserCan('forum/moderate') && $cfg['edit_minutes']){

        
$end_min  = $model->checkEditTime($msg['pubdate'], $cfg['edit_minutes']);
        if(
$cfg['edit_minutes'] == -1 || $end_min <= 0){
            
cmsCore::error404();
        }

    }

    
cmsCore::addSessionMessage($_LANG['MSG_IS_DELETED'], 'info');
    
$model->deletePost($id, $inUser->id);

    
$inCore->redirectBack();

}
///////////////////////////// MOVE THREAD /////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='movethread'){

    if (!
$inUser->id){ cmsUser::goToLogin(); }

    if (!
$inUser->is_admin && !$inCore->isUserCan('forum/moderate')){ cmsCore::error404(); }

    
$t = $model->getThread($id);
    if(!
$t) { cmsCore::error404(); }

    if (!isset(
$_POST['gomove'])){ //SHOW MOVE FORM
                
        
$inPage->setTitle($_LANG['MOVE_THREAD']);
        
$inPage->addPathway($_LANG['MOVE_THREAD']);

        echo 
'<div class="con_heading">'.$_LANG['MOVE_THREAD'].'</div>';
    
        echo 
'<div style="margin-top:10px"><strong>'.$_LANG['THREAD'].':</strong> <a href="/forum/thread'.$t['id'].'.html">'.$t['title'].'</a></div>';
        echo 
'<div><form action="" method="POST">';
        echo 
'<table border="0" cellpadding="10" style="background-color:#EBEBEB"><tr><td valign="top">'.$_LANG['MOVE_THREAD_IN_FORUM'].':</td>';
        echo 
'<td valign="top"><select name="forum_id">';

        
$fsql = "SELECT * FROM cms_forums";
        
$fresult = $inDB->query($fsql) ;
        if (
$inDB->num_rows($fresult)){
            while (
$f = $inDB->fetch_assoc($fresult)){
                echo 
'<option value="'.$f['id'].'" ';
                if (
$t['forum_id'] == $f['id']) { echo 'selected'; }
                echo 
'>'.$f['category_id'].' --- '.$f['title'].'</option>';
            }
        }
        
        echo 
'</select></td>';
        echo 
'<td valign="top"><input type="submit" name="gomove" value="'.$_LANG['MOVE'].'"/></td></tr></table>';
        echo 
'</form></div>';                
            
    } else { 
//DO MOVE

        
$fid = $inCore->request('forum_id', 'int', 0);

        
$f = $model->getForum($fid);
        if(!
$f) { cmsCore::error404(); }

        
$access_list = $inCore->yamlToArray($f['access_list']);
        
$is_hidden = $access_list ? 1 : 0;

        
$inDB->query("UPDATE cms_forum_threads SET forum_id = '$fid', is_hidden = '{$is_hidden}' WHERE id = '$id'") ;

        
cmsActions::updateLog('add_thread', array('target' => $f['title'], 'target_url' => '/forum/'.$f['id'], 'target_id' => $f['id']), $id);

        
$inCore->redirect('/forum/'.$fid);            
    }

}
///////////////////////////// RENAME THREAD /////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='renamethread'){

    if (!
$inUser->id){ cmsUser::goToLogin(); }

    if (!
$inUser->is_admin && !$inCore->isUserCan('forum/moderate')){ cmsCore::error404(); }

    
$t = $model->getThread($id);
    if(!
$t) { cmsCore::error404(); }

    if (!isset(
$_POST['gorename'])){ //SHOW MOVE FORM
                
        
$inPage->setTitle($_LANG['RENAME_THREAD']);
        
$inPage->addPathway($_LANG['RENAME_THREAD']);

        echo 
'<div class="con_heading">'.$_LANG['RENAME_THREAD'].'</div>';

        echo 
'<div style="margin-top:10px"><strong>'.$_LANG['THREAD'].':</strong> <a href="/forum/thread'.$t['id'].'.html">'.$t['title'].'</a></div>';
        
        echo 
'<div style="margin-top:5px"><form action="" method="POST">';
        
        echo 
'<table border="0" cellpadding="5" style="background-color:#EBEBEB">
              <tr><td valign="top">'
.$_LANG['THREAD_TITLE'].':</td>';
        
            echo 
'<td valign="top">
                    <input type="hidden" name="tid" value="'
.$t['id'].'"/>
                    <input type="text" size="45" value="'
.htmlspecialchars($t['title']).'" name="title" id="title"/>
                 </td>'
;

        echo 
'</tr><tr><td valign="top">'.$_LANG['DESCRIPTION'].':</td>';
        
            echo 
'<td valign="top">
                    <input type="text" size="45" value="'
.htmlspecialchars($t['description']).'" name="description" id="title"/>
                 </td>'
;
            
        echo 
'</tr></table>';
        
        echo 
'<div style="margin-top:5px"><input type="submit" name="gorename" value="'.$_LANG['SAVE'].'"/> <input type="button" onclick="window.history.go(-1);" name="cancel" value="'.$_LANG['CANCEL'].'"/></div></form></div>';
            
    } else { 
//DO RENAME
    
        
if (@$_POST['title']){                
            
$title       = $inCore->request('title', 'str');
            
$description = $inCore->request('description', 'str');

            
$inDB->query("UPDATE cms_forum_threads SET title = '$title', description = '$description' WHERE id = '$id'");
            
cmsActions::updateLog('add_fpost', array('target' => $title), 0, $id);
            
cmsActions::updateLog('add_thread', array('object' => $title), $id);

        }
        
$inCore->redirect('/forum/thread'.$id.'.html');            
    }

}
///////////////////////////// DELETE THREAD /////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='deletethread'){
    
$thread_user_id = $inDB->get_field('cms_forum_threads', "id = '$id'", 'user_id');
    if (
usrCheckAuth() && ($inCore->userIsAdmin($inUser->id) || $inCore->isUserCan('forum/moderate') || $inUser->id == $thread_user_id)){
        
$forum_id = $inDB->get_field('cms_forum_threads', 'id='.$id, 'forum_id');
        
$model->deleteThread($id, $inUser->id);
    }    
    
$inCore->redirect('/forum/'.$forum_id);
}
///////////////////////////// PIN/UNPIN THREAD ////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='pin'){

    
$pinned = $inCore->request('pinned', 'int', 0);
    
    if (!
$inUser->id){ cmsUser::goToLogin(); }

    
$msg = $model->getThread($id);
    if(!
$msg) { cmsCore::error404(); }

    if (
$msg['user_id']==$inUser->id || $inCore->userIsAdmin($inUser->id) || $inCore->isUserCan('forum/moderate')){
        
$inDB->query("UPDATE cms_forum_threads SET pinned = '$pinned' WHERE id = '$id'") ;
    }

    
$inCore->redirectBack();
}
///////////////////////////// CLOSE/OPEN THREAD ////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='close'){
    
$closed = $inCore->request('closed', 'int', 0);
    
    if (!
$inUser->id){ cmsUser::goToLogin(); }

    
$msg = $model->getThread($id);
    if(!
$msg) { cmsCore::error404(); }

    if (
$msg['user_id']==$inUser->id || $inCore->userIsAdmin($inUser->id) || $inCore->isUserCan('forum/moderate')){
        
$inDB->query("UPDATE cms_forum_threads SET closed = '$closed' WHERE id = '$id'");
        if(!
$closed) {
            
$title = str_ireplace($_LANG['TOPIC_FIXED_PREFIX'], '', $msg['title']);
            
$inDB->query("UPDATE cms_forum_threads SET title = '{$inDB->escape_string($title)}' WHERE id = '$id'");
        }
    }

    
$inCore->redirectBack();
}
///////////////////////////// ATTACHED FILE DOWNLOAD ///////////////////////////////////////////////////////////////////////////////////////
if ($do=='download'){

    
$sql = "SELECT * FROM cms_forum_files WHERE id = '$id'";
    
$result = $inDB->query($sql) ;
    
    if (
$inDB->num_rows($result)){
        
$file = $inDB->fetch_assoc($result);    
        
$filename = $file['filename'];
        
$filesize = $file['filesize'];
        
$location = '/upload/forum/post'.$file['post_id'].'/'.$filename;
        
        
$inDB->query("UPDATE cms_forum_files SET hits = hits + 1 WHERE id = $id") ;
        
        
header('Content-Disposition: attachment; filename='.$filename . "n");
        
header('Content-Type: application/x-force-download; name="'.$filename.'"' . "n");
        
header('Location:'.$location);                        
    }

}
///////////////////////////// ATTACHED FILE DELETE /////////////////////////////////////////////////////////////////////////////////////////
if ($do=='delfile'){

    
$file = uploadDelete($id);
    
$inCore->redirect('/forum/thread'.$file['tid'].'.html#'.$file['post_id']);

}
///////////////////////////// ATTACHED FILE RELOADING /////////////////////////////////////////////////////////////////////////////////////////
if ($do=='reloadfile'){

    if (!
$inUser->id){ cmsUser::goToLogin(); }

    
//get current file data    
    
$sql = "SELECT f.*, p.thread_id as tid, u.id as uid, DATE_FORMAT(f.pubdate, '%d-%m-%Y в %H:%i') as fpubdate
            FROM cms_forum_files f, cms_users u, cms_forum_posts p
            WHERE f.id = '
$id' AND f.post_id = p.id AND p.user_id = u.id";
    
$result = $inDB->query($sql) ;
    
    if (
$inDB->num_rows($result)){
    
//if file found        

        
$inPage->addPathway($_LANG['RELOAD_FILE']);
        echo 
'<div class="con_heading">'.$_LANG['RELOAD_FILE'].'</div>';
            
        
$file = $inDB->fetch_assoc($result);            
        if (
$file['uid'] == @$inUser->id || @$inCore->userIsAdmin(@$inUser->id) || $inCore->isUserCan('forum/moderate')){        
        
//if user is file owner
        
            
$post_id = $file['post_id'];
        
            if (isset(
$_POST['goreload'])){
            
//reload file
                
if ($_FILES["newfile"]["error"] == UPLOAD_ERR_OK) {
                    
$tmp_name = $_FILES["newfile"]["tmp_name"];
                    
$filename = $_FILES["newfile"]["name"];
                    
$filesize = $_FILES["newfile"]["size"];                                                                    
                    
$path_parts = pathinfo($filename);
                    
$ext = $path_parts['extension'];    
                    if(
strstr('php', $ext)) { echo usrAccessDenied(); }
                    if(
strstr('htm', $ext)) { echo usrAccessDenied(); }
                    if(
strstr('htaccess', $ext)) { echo usrAccessDenied(); }
                    
//check file size
                    
if ($filesize <= $cfg['fa_size']*1024){
                            
                        
//check file extension is allowed                                    
                        
if ( (!$cfg['fa_ext_not'] && strstr($cfg['fa_ext'], $ext)) || ($cfg['fa_ext_not'] && !strstr($cfg['fa_ext'], $ext))){                                    
                            
$name = basename($filename, '.' . $path_parts['extension']);
                                    
                            
$filename = $name . '_' . substr(session_id(), 0, 5) . '.' . $ext;
                            
$destination = PATH."/upload/forum/post".$post_id."/".$filename;
                            
                            @
unlink(PATH."/upload/forum/post".$post_id."/".$file['filename']);
                            
                            
move_uploaded_file($tmp_name, $destination);
                            
                            
$sql = "UPDATE cms_forum_files SET filename = '$filename', filesize = '$filesize', pubdate=NOW(), hits=0 WHERE id = $id";                                    
                            
$inDB->query($sql) ;
                            
                            
$inCore->redirect('/forum/thread'.$file['tid'].'.html#'.$file['post_id']);
                        } else {
                            echo 
'<p style="color:red"><strong>'.$_LANG['ERROR'].':</strong> '.$_LANG['ERR_FILE_TYPE'].'</p>';
                            echo 
'<p><strong>'.$_LANG['MUST_FILE_TYPE'].':</strong> .'.strtolower(str_replace(' ', ' .', $cfg['fa_ext'])).'</p>';
                        }
                    
                    } else { echo 
'<p style="color:red"><strong>'.$_LANG['ERROR'].':</strong> '.$_LANG['ERR_FILE_SIZE'].' ('.$cfg['fa_size'].' '.$_LANG['KBITE'].').</p>'; }
                }  else { 
                            echo 
'<p style="color:red"><strong>'.$_LANG['ERROR'].':</strong> '.$_LANG['CHECK_SIZE_TYPE_FILE'].'</p>';
                            echo 
'<p><strong>'.$_LANG['MAX_SIZE'].':</strong> '.$cfg['fa_size'].' '.$_LANG['KBITE'].'.</p>';
                            echo 
'<p><strong>'.$_LANG['MUST_FILE_TYPE'].':</strong> .'.strtolower(str_replace(' ', ' .', $cfg['fa_ext'])).'</p>';
                        }
            } else {
                
//show reload form                                                    
                
echo '<div><strong>'.$_LANG['FILE'].':</strong> <a href="/upload/forum/post'.$file['post_id'].'/'.$file['filename'].'">'.$file['filename'].'</a> ('.round(($file['filesize']/1024),2).' '.$_LANG['KBITE'].').</div>';
                echo 
'<div><strong>'.$_LANG['DATE_UPLOAD'].':</strong> '.$file['fpubdate'].'.</div>';

                echo 
'<div><form enctype="multipart/form-data" action="" method="POST">' . "n";    
                    echo 
'<p>'.$_LANG['SELECT_NEW_FILE_UPLOAD'].': </p>' . "n";
                    echo 
'<input name="MAX_FILE_SIZE" type="hidden" value="'.($cfg['fa_size']*1024).'"/>'. "n";
                    echo 
'<input name="newfile" type="file" id="newfile" size="45" />'. "n";
                    echo 
'<p>'.$_LANG['MAX_SIZE'].': '.$cfg['fa_size'].' '.$_LANG['KBITE'].'.</p>'. "n";
                    echo 
'<p><input type="submit" name="goreload" value="'.$_LANG['UPLOAD'].'"> <input type="button" onclick="window.history.go(-1);" value="'.$_LANG['CANCEL'].'"/></p>'. "n";
                echo 
'</form></div>'. "n";                
            }
        
        } else     { echo 
usrAccessDenied(); }
    } else { echo 
'<p>'.$_LANG['FILE_NOT_FOUND'].'!</p>'; }
    
}
///////////////////////////// последние сообщения //////////////////////////////////////////////////////////////////////////////////////////
if ($do=='latest_posts'){

    
$page = $inCore->request('page', 'int', 1);

    
$inActions = cmsActions::getInstance();

    echo 
'<div class="float_bar"><a href="/forum/latest_thread">'.$_LANG['NEW_THREADS'].'</a> | <a href="/forum">'.$_LANG['FORUMS'].'</a></div>';

    
$inPage->printHeading($_LANG['LATEST_POSTS_ON_FORUM']);

    
$inPage->setTitle($_LANG['LATEST_POSTS_ON_FORUM']);
    
$inPage->addPathway($_LANG['FORUMS'], '/forum');
    
$inPage->addPathway($_LANG['LATEST_POSTS_ON_FORUM']);

    
$inActions->showTargets(true);

    
$action = $inActions->getAction('add_fpost');

    
$inActions->onlySelectedTypes(array($action['id']));

    
$total = $inActions->getCountActions();

    
$inActions->limitPage($page, 15);

    
$actions = $inActions->getActionsLog();

    
$smarty = $inCore->initSmarty('components', 'com_actions_view.tpl');
    
$smarty->assign('actions', $actions);
    
$smarty->assign('total', $total);
    
$smarty->assign('pagebar', cmsPage::getPagebar($total, $page, 15, '/forum/latest_posts/page-%page%'));
    
$smarty->display('com_actions_view.tpl');

}
///////////////////////////// последние темы ///////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='latest_thread'){

    
$page = $inCore->request('page', 'int', 1);

    
$inActions = cmsActions::getInstance();

    echo 
'<div class="float_bar"><a href="/forum/latest_posts">'.$_LANG['LATEST_POSTS'].'</a> | <a href="/forum">'.$_LANG['FORUMS'].'</a></div>';

    
$inPage->printHeading($_LANG['NEW_THREADS_ON_FORUM']);

    
$inPage->setTitle($_LANG['NEW_THREADS_ON_FORUM']);
    
$inPage->addPathway($_LANG['FORUMS'], '/forum');
    
$inPage->addPathway($_LANG['NEW_THREADS_ON_FORUM']);

    
$inActions->showTargets(true);

    
$action = $inActions->getAction('add_thread');

    
$inActions->onlySelectedTypes(array($action['id']));

    
$total = $inActions->getCountActions();

    
$inActions->limitPage($page, 15);

    
$actions = $inActions->getActionsLog();

    
$smarty = $inCore->initSmarty('components', 'com_actions_view.tpl');
    
$smarty->assign('actions', $actions);
    
$smarty->assign('total', $total);
    
$smarty->assign('pagebar', cmsPage::getPagebar($total, $page, 15, '/forum/latest_thread/page-%page%'));
    
$smarty->display('com_actions_view.tpl');

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ($do=='view_cat'){

    
$seolink = $inCore->request('seolink', 'str', '');

    
$groupsql = forumUserAuthSQL();
    
$sql = "SELECT *
            FROM cms_forum_cats
            WHERE seolink = '
{$seolink}' AND published = 1 $groupsql
            LIMIT 1"
;
    
$result = $inDB->query($sql) ;
    if (!
$inDB->num_rows($result)) { cmsCore::error404(); }
    
$cat = $inDB->fetch_assoc($result);

    
$inPage->printHeading($cat['title']);
    
$inPage->addPathway($_LANG['FORUMS'], '/forum');
    
$inPage->addPathway($cat['title']);

    
$rootid = $inDB->get_field('cms_forums', 'parent_id=0', 'id');

    echo 
'<table class="forums_table" width="100%" cellspacing="0" cellpadding="8" border="0" bordercolor="#999999" >';
    echo 
'<tr>
      <td colspan="2" width="" class="darkBlue-LightBlue">'
.$_LANG['FORUMS'].'</td>
      <td width="120" class="darkBlue-LightBlue">'
.$_LANG['FORUM_ACT'].'</td>
      <td width="250" class="darkBlue-LightBlue">'
.$_LANG['LAST_POST'].'</td>
    </tr>'
;
    
//FORUMS LIST IN CATEGORY
    
$fsql = "SELECT *
             FROM cms_forums
             WHERE published = 1 AND category_id = '
{$cat['id']}' AND parent_id = '$rootid'
             ORDER BY ordering"
;
    
$fresult = $inDB->query($fsql) ;
    if (
$inDB->num_rows($fresult)){
        
$row = 1;
        
//print forums list in category
        
while ($f = $inDB->fetch_assoc($fresult)){
            if(!
$inCore->checkContentAccess($f['access_list'])) { continue; }
            
//GET SUBFORUMS LIST
            
$subforums = '';
            
$sql = "SELECT id, title, access_list
                    FROM cms_forums
                    WHERE parent_id = '
{$f['id']}'
                    ORDER BY title"
;
            
$rs = $inDB->query($sql);
            
$sub = $inDB->num_rows($rs);
            if (
$sub){
                while (
$sf=$inDB->fetch_assoc($rs)){
                    if(!
$inCore->checkContentAccess($sf['access_list'])) { continue; }
                    
$subforums .= '<a href="/forum/'.$sf['id'].'">'.$sf['title'].'</a>, ';
                }
                
$subforums = rtrim($subforums, ', ');
            } else {
                
$subforums = '';
            }
            
//PRINT FORUM DATA
            
if ($row % 2) { $class='row11'; } else { $class = 'row2'; }
            
$icon = $f['icon'] ? '/upload/forum/cat_icons/'.$f['icon'] : '/components/forum/images/forum.gif';
            echo 
'<tr>';
                echo 
'<td width="32" class="'.$class.'" align="center" valign="top"><img src="'.$icon.'" border="0" /></td>';
                echo 
'<td width="" class="'.$class.'" align="left" valign="top">';
                    
//FORUM TITLE
                    
echo '<div class="forum_link"><a href="/forum/'.$f['id'].'">'.$f['title'].'</a></div>';
                    
//FORUM DESCRIPTION
                    
echo '<div class="forum_desc">'.$f['description'].'</div>';
                    
//SUBFORUMS
                    
if ($sub){
                        echo 
'<div class="forum_subs"><span class="forum_subs_title">'.$_LANG['SUBFORUMS'].':</span> '.$subforums.'</div>';
                    }
                echo 
'</td>';
                echo 
'<td class="'.$class.'" style="font-size:11px" valign="top">'.$model->getForumMessages($f['NSLeft'], $f['NSRight']).'</td>';
                echo 
'<td style="font-size:11px" class="'.$class.'" valign="top">'.forumLastMessage($f['id'], $cfg['pp_thread']).'</td>';
            echo 
'</tr>';
            
$row++;
        }
    } else {
        echo 
'<td colspan="4"><p>'.$_LANG['NOT_FORUMS_IN_CAT'].'</p></td>';
    }
    echo 
'</table>';

    if (
$inUser->id){
        
$logdate = $_SESSION['user']['logdate'];
    } else {
        
$logdate = '9999-01-01 12:00:00';
    }

    
$tsql = "SELECT t.*, COUNT(p.id) as postsnum, IF(t.pubdate > '$logdate', 1, 0) as is_new, u.nickname, u.login
             FROM cms_forum_threads t
             INNER JOIN cms_forums f ON f.id = t.forum_id
             INNER JOIN cms_forum_cats cat ON cat.id = f.category_id AND cat.id = '
{$cat['id']}'
             INNER JOIN cms_forum_posts p ON p.thread_id = t.id
             LEFT JOIN cms_users u ON u.id = t.user_id
             WHERE t.is_hidden = 0 AND t.closed = 0
             GROUP BY t.id
             ORDER BY t.pubdate DESC, t.hits DESC
             LIMIT 15"
;

    
$tresult = $inDB->query($tsql) ;

    
$threads = array();

    if (
$inDB->num_rows($tresult)){

        while (
$thread = $inDB->fetch_assoc($tresult)){

            
$thread['author']       = array('nickname'=>$thread['nickname'], 'login'=>$thread['login']);
            
$thread['pages']        = ceil($thread['postsnum'] / $cfg['pp_thread']);
            
$thread['answers']      = $thread['postsnum']-1;
            
$thread['last_message'] = threadLastMessage($thread['id'], $thread['pages']);

            
$threads[]              = $thread;

        }
        
    }

    
$smarty = $inCore->initSmarty('components', 'com_forum_view_act.tpl');
    
$smarty->assign('cfg', $cfg);
    
$smarty->assign('threads', $threads);
    
$smarty->display('com_forum_view_act.tpl');

}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$inCore->executePluginRoute($do);
} 
//function
?>
Онлайн: 2
Реклама