Вход Регистрация
Файл: mc-master/modules/blog/controllers/blog.php
Строк: 223
<?php
/**
 * MobileCMS
 *
 * Open source content management system for mobile sites
 *
 * @author MobileCMS Team <support@mobilecms.ru>
 * @copyright Copyright (c) 2011, MobileCMS Team
 * @link http://mobilecms.ru Official site
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 */

class Blog_Controller extends Controller {
    
/**
    * Метод по умолчанию
    */
    
public function action_index() {
        
// Для пользователей их блог
        
if (USER_ID != -1) {
            
$this->action_my();
        }
        
// Для гостей список всех блогов
        
else {
            
$this->action_list();    
        }
    }
    
    
/**
     * Пользовательская страница
     */
    
public function action_my() {
        
// Запрет доступа гостям
        
if ( ! is_user()) {
            
redirect('user/login');
        }
        
        switch(
$_GET['action']) {
            case 
'say':
                if (
$_POST) {
                    if ( ! 
$this->error) {
                        
a_antiflud();
                        
                        
$this->db->query("INSERT INTO #__blog SET
                            user_id = '"
USER_ID ."',
                            title = '"
a_safe($_POST['title']) ."',
                            message = '"
a_safe($_POST['message']) ."',
                            time = UNIX_TIMESTAMP(),
                            rating = 0
                        "
);
                        
                        
user::rating_update('5');
                        
                        
a_notice('Ваша запись опубликована.'a_url('blog'));
                    }
                } else {
                    
a_error('Вы не ввели запись.'a_url('blog'));
                }
            break;
        
            case 
'edit':
                
$action 'edit';
                
$title 'Изменение записи';
                
                
// Проверка существования записи
                
if ( ! $post $this->db->get_row("SELECT *, (SELECT status FROM #__users WHERE user_id = cp.user_id) AS user_status FROM #__blog AS cp WHERE id = '" intval($_GET['post_id']) . "'")) a_error('Запись не найдена.'a_url('blog/my'));
                
                
// Проверка прав на удаление
                
if ( ! a_check_rights($post['user_id'], $post['user_status'])) a_error('У Вас нет прав для изменения этой записи.'a_url('blog'));
                
                if (
$_POST) {
                    if ( ! 
$this->error) {
                        
a_antiflud();
                        
                        
$this->db->query("UPDATE #__blog SET
                            title = '"
a_safe($_POST['title']) ."',
                            message = '"
a_safe($_POST['message']) ."'
                            WHERE id = '
$post[id]'
                        "
);
                        
                        
a_notice('Ваша запись изменена.'a_url('blog'));
                    }
                }
                
                
$this->tpl->assign(array(
                    
'error' => $this->error,
                    
'config' => $this->config['blog'],
                    
'action' => $action,
                    
'title' => $title,
                    
'post' => $post,
                ));
                
                
$this->tpl->display('my_edit');
            break;
        
            case 
'delete':
                
$action 'delete';
                
$title 'Удаление записи';
                
                
// Проверка существования записи
                
if ( ! $post $this->db->get_row("SELECT *, (SELECT status FROM #__users WHERE user_id = cp.user_id) AS user_status FROM #__blog AS cp WHERE id = '" intval($_GET['post_id']) . "'")) a_error('Запись не найдена.'a_url('blog'));
                
                
// Проверка прав на удаление
                
if ( ! a_check_rights($post['user_id'], $post['user_status'])) a_error('У Вас нет прав для удаления этой записи.'a_url('blog'));
                
                if (
$_GET['confirm']) {
                    
// Удаление записи
                    
$this->db->query("DELETE FROM #__blog WHERE id = '" intval($_GET['post_id']) . "'");
                    
                    
// Удаление рейтинга за запись
                    
user::rating_update(-5$post['user_id']);
                    
                    
a_notice('Запись успешно удалена.'a_url('blog'));
                } else {
                    
a_confirm('Вы подтверждаете удаление этой записи?'a_url('blog/my''action=delete&amp;post_id='$post['id'] .'&amp;confirm=ok'), a_url('blog'));
                }
            break;
            
            default:
                
$action 'default';
                
$title 'Ваш блог';
                
                
// Листинг записей
                
$sql "SELECT SQL_CALC_FOUND_ROWS b.*,
                    (SELECT COUNT(*) FROM #__comments_posts WHERE module = 'blog' AND item_id = b.id) comments
                    FROM #__blog AS b
                    WHERE user_id = '"
USER_ID ."'
                ORDER BY time DESC LIMIT 
$this->start$this->per_page";
                
                
$result $this->db->query($sql);

                if ( ! 
class_exists('smiles')) a_import('modules/smiles/helpers/smiles');
                
                
$posts = array();
        
                while (
$post $this->db->fetch_array($result)) {
                    
// Проверка длины main::limit_words(strip_tags($last_news['text']), 15)
                    
if (main::strlen($post['message']) > 500) {
                        
$post['message'] = main::limit_words($post['message'], 100);
                        
$post['message'] .= '..';
                        
$post['long'] = TRUE;
                    }
                    
                    
// Проверка доступности голосования пользователем
                    
if ($this->db->get_one("SELECT id FROM a_rating_logs WHERE ip = '"a_safe($_SERVER['REMOTE_ADDR']) ."' AND module = 'blog' AND item_id = '"$post['id'] ."'")) $post['rated'] = TRUE;
                    else 
$post['rated'] = FALSE;
            
                    
// Получение звезд
                    
$post['rating_stars'] = file_get_contents(URL .'main/rating?rate='$post['rating']);
                    
                    
// Форматирование
                    
$post['message'] = smiles::smiles_replace($post['message']);
                    
$post['message'] = main::bbcode($post['message']);
                    
$post['message'] = nl2br($post['message']);
                    
                    
$posts[] = $post;
                }
                
                
$total $this->db->get_one("SELECT FOUND_ROWS()");
        
                
// Пагинация
                
$pg_conf['base_url'] = a_url('blog/my''start=');
                
$pg_conf['total_rows'] = $total;
                
$pg_conf['per_page'] = $this->per_page;
        
                
a_import('libraries/pagination');
                
$pg = new CI_Pagination($pg_conf);
                
                
$this->tpl->assign(array(
                    
'error' => $this->error,
                    
'config' => $this->config['blog'],
                    
'action' => $action,
                    
'title' => $title,
                    
'posts' => $posts,
                    
'total' => $total,
                    
'pagination' => $pg->create_links(),
                ));
                
                
$this->tpl->display('my_default');
            break;
        }
    }
    
    
/**
     * Читать далее
     */
    
public function action_read_more() {
        
// Проверка существования записи
        
if ( ! $post $this->db->get_row("SELECT *,
            (SELECT status FROM #__users WHERE user_id = b.user_id) AS user_status, 
            (SELECT username FROM #__users WHERE user_id = b.user_id) AS username,
            (SELECT COUNT(*) FROM #__comments_posts WHERE module = 'blog' AND item_id = b.id) comments
            FROM #__blog AS b WHERE id = '" 
intval($_GET['post_id']) . "'")) a_error('Запись не найдена.'a_url('blog'));
        
        if ( ! 
class_exists('smiles')) a_import('modules/smiles/helpers/smiles');
        
        
// Проверка доступности голосования пользователем
        
if ($this->db->get_one("SELECT id FROM a_rating_logs WHERE ip = '"a_safe($_SERVER['REMOTE_ADDR']) ."' AND module = 'blog' AND item_id = '"$post['id'] ."'")) $post['rated'] = TRUE;
        else 
$post['rated'] = FALSE;
            
        
// Получение звезд
        
$post['rating_stars'] = file_get_contents(URL .'main/rating?rate='$post['rating']);
        
        
// Форматирование
        
$post['message'] = smiles::smiles_replace($post['message']);
        
$post['message'] = main::bbcode($post['message']);
        
$post['message'] = nl2br($post['message']);
        
        
$this->tpl->assign(array(
            
'error' => $this->error,
            
'config' => $this->config['blog'],
            
'post' => $post,
        ));
                
        
$this->tpl->display('read_more');
    }
    
    
/**
     * Просмотр блога
     */
    
public function action_view() {
        
$user $this->db->get_row("SELECT * FROM #__users WHERE username = '"a_safe($_GET['username']) ."'");
        
        if (
$user['user_id'] == || $user['user_id'] == -1a_error('Пользователь не найден. Проверьте правильность адреса.');
                
        
// Листинг записей
        
$sql "SELECT SQL_CALC_FOUND_ROWS b.*,
            (SELECT COUNT(*) FROM #__comments_posts WHERE module = 'blog' AND item_id = b.id) comments,
            (SELECT status FROM #__users WHERE user_id = b.user_id) AS user_status,
            (SELECT username FROM #__users WHERE user_id = b.user_id) AS username
            FROM #__blog AS b
            WHERE user_id = '"
$user['user_id'] ."'
        ORDER BY time DESC LIMIT 
$this->start$this->per_page";
                
        
$result $this->db->query($sql);

        if ( ! 
class_exists('smiles')) a_import('modules/smiles/helpers/smiles');
                
        
$posts = array();
        
        while (
$post $this->db->fetch_array($result)) {
            
// Проверка длины main::limit_words(strip_tags($last_news['text']), 15)
            
if (main::strlen($post['message']) > 500) {
                
$post['message'] = main::limit_words($post['message'], 100);
                
$post['message'] .= '..';
                
$post['long'] = TRUE;
            }
            
            
// Проверка доступности голосования пользователем
            
if ($this->db->get_one("SELECT id FROM a_rating_logs WHERE ip = '"a_safe($_SERVER['REMOTE_ADDR']) ."' AND module = 'blog' AND item_id = '"$post['id'] ."'")) $post['rated'] = TRUE;
            else 
$post['rated'] = FALSE;
            
            
// Получение звезд
            
$post['rating_stars'] = file_get_contents(URL .'main/rating?rate='$post['rating']);
                    
            
// Форматирование
            
$post['message'] = smiles::smiles_replace($post['message']);
            
$post['message'] = main::bbcode($post['message']);
            
$post['message'] = nl2br($post['message']);
                    
            
$posts[] = $post;
        }
                
        
$total $this->db->get_one("SELECT FOUND_ROWS()");
        
        
// Пагинация
        
$pg_conf['base_url'] = a_url('blog/view''username='$user['username'] .'&amp;start=');
        
$pg_conf['total_rows'] = $total;
        
$pg_conf['per_page'] = $this->per_page;
        
        
a_import('libraries/pagination');
        
$pg = new CI_Pagination($pg_conf);
                
        
$this->tpl->assign(array(
            
'error' => $this->error,
            
'config' => $this->config['blog'],
            
'posts' => $posts,
            
'total' => $total,
            
'pagination' => $pg->create_links(),
            
'profile' => $user,
        ));
                
        
$this->tpl->display('view');
    }
    
    
/**
     * Листинг блогов
     */
    
public function action_list() {
        switch(
$_GET['action']) {
            
/**
             * Лучшие записи
             */
            
case 'best_posts':
                
$action 'best_posts';
                
$title 'Лучшие записи';
                
                
// Листинг записей
                
$sql "SELECT SQL_CALC_FOUND_ROWS b.*,
                    (SELECT COUNT(*) FROM #__comments_posts WHERE module = 'blog' AND item_id = b.id) comments,
                    (SELECT username FROM #__users WHERE user_id = b.user_id) username,
                    (SELECT status FROM #__users WHERE user_id = b.user_id) AS user_status
                    FROM #__blog AS b
                ORDER BY rating DESC LIMIT 
$this->start$this->per_page";
            break;
        
            
/**
             * Новые записи
             */
            
case 'new_posts':
                
$action 'new_posts';
                
$title 'Новые записи';
                
                
// Листинг записей
                
$sql "SELECT SQL_CALC_FOUND_ROWS b.*,
                    (SELECT COUNT(*) FROM #__comments_posts WHERE module = 'blog' AND item_id = b.id) comments,
                    (SELECT username FROM #__users WHERE user_id = b.user_id) username,
                    (SELECT status FROM #__users WHERE user_id = b.user_id) AS user_status
                    FROM #__blog AS b
                    WHERE time > UNIX_TIMESTAMP() - 86400
                ORDER BY time DESC LIMIT 
$this->start$this->per_page";
            break;
        
            
/**
             * Все записи
             */
            
case 'all_posts':
            default:
                
$action 'all_posts';
                
$title 'Все записи';
                
                
// Листинг записей
                
$sql "SELECT SQL_CALC_FOUND_ROWS b.*,
                    (SELECT COUNT(*) FROM #__comments_posts WHERE module = 'blog' AND item_id = b.id) comments,
                    (SELECT username FROM #__users WHERE user_id = b.user_id) username,
                    (SELECT status FROM #__users WHERE user_id = b.user_id) AS user_status
                    FROM #__blog AS b
                ORDER BY time DESC LIMIT 
$this->start$this->per_page";
            break;
        }
        
        
$result $this->db->query($sql);
        
        
$total $this->db->get_one("SELECT FOUND_ROWS()");

        if ( ! 
class_exists('smiles')) a_import('modules/smiles/helpers/smiles');
                
        
$posts = array();
        
        while (
$post $this->db->fetch_array($result)) {
            
// Проверка длины
            
if (main::strlen($post['message']) > 500) {
                
$post['message'] = main::limit_words($post['message'], 100);
                
$post['message'] .= '..';
                
$post['long'] = TRUE;
            }
            
            
// Проверка доступности голосования пользователем
            
if ($this->db->get_one("SELECT id FROM a_rating_logs WHERE ip = '"a_safe($_SERVER['REMOTE_ADDR']) ."' AND module = 'blog' AND item_id = '"$post['id'] ."'")) $post['rated'] = TRUE;
            else 
$post['rated'] = FALSE;
            
            
// Получение звезд
            
$post['rating_stars'] = file_get_contents(URL .'main/rating?rate='$post['rating']);
                    
            
// Форматирование
            
$post['message'] = smiles::smiles_replace($post['message']);
            
$post['message'] = main::bbcode($post['message']);
            
$post['message'] = nl2br($post['message']);
                    
            
$posts[] = $post;
        }
        
        
// Пагинация
        
$pg_conf['base_url'] = a_url('blog/list''action='$action .'&amp;start=');
        
$pg_conf['total_rows'] = $total;
        
$pg_conf['per_page'] = $this->per_page;
        
        
a_import('libraries/pagination');
        
$pg = new CI_Pagination($pg_conf);
                
        
$this->tpl->assign(array(
            
'error' => $this->error,
            
'config' => $this->config['blog'],
            
'action' => $action,
            
'title' => $title,
            
'posts' => $posts,
            
'total' => $total,
            
'pagination' => $pg->create_links(),
        ));
                
        
$this->tpl->display('list');
    }
    
    
/**
     * Изменение рейтинга
     */
    
public function action_rating_change() {
        
// Проверка существования записи
        
if ( ! $post $this->db->get_row("SELECT * FROM #__blog WHERE id = '" intval($_GET['post_id']) . "'")) a_error('Запись не найдена.'a_url('blog'));
        
        if (
$this->db->get_one("SELECT id FROM a_rating_logs WHERE module = 'blog' AND ip = '"a_safe($_SERVER['REMOTE_ADDR']) ."' AND item_id = '"$post['id'] ."'")) a_error('Вы уже голосовали за эту запись!'a_url('blog'));
        
        if (
$post['user_id'] == USER_IDa_error('Нельяз голосовать за свою запись!'a_url('blog'));

        
$rate intval($_POST['rate']);
        if ( ! 
in_array($rate, array('1''2''3''4''5'))) a_eror('Ваша оценка не определена!'a_url('blog'));

        
// Увеличиваем количество голосов
        
$this->db->query("UPDATE a_blog SET
            rating = (rating * rating_voices + 
$rate) / (rating_voices + 1),
            rating_voices = rating_voices + 1
            WHERE id = '
$post[id]'
        "
);

        
// Добавляем голос в логи
        
$this->db->query("INSERT INTO a_rating_logs SET
            module = 'blog',
            ip = '"
a_safe($_SERVER['REMOTE_ADDR']) ."',
            item_id = '"
$post['id'] ."',
            time = UNIX_TIMESTAMP()
        "
);

        
a_notice('Ваша оценка принята!'a_url('blog'));
    }
}

?>
Онлайн: 1
Реклама