Вход Регистрация
Файл: silawar.ru/protected/controllers/ForumController.php
Строк: 188
<?php

class ForumController extends Controller {

    public function 
accessRules() {
        return array(
            array(
'deny',
                
'roles' => array('banned'),
                
'deniedCallback' => array(Yii::app()->controller'redirectToHome'),
            ),
            array(
'allow',
                
'actions' => array('createCategory''updateCategory''editTheme''editMessage''deleteMessage'),
                
'roles' => array('moder'),
            ),
            array(
'allow',
                
'actions' => array('index''category''createTheme''theme''markAsRead'),
                
'users' => array('@'),
            ),
            array(
'deny',
                
'users' => array('*'),
                
'deniedCallback' => array(Yii::app()->controller'redirectToHome'),
            )
        );
    }

    public function 
actionIndex() {
        
$count ForumCategories::model()->count();
        
$pages = new CPagination($count);
        
// элементов на страницу
        
$pages->pageSize 10;
        
$pages->route '/forum/index/';

        
$models ForumCategories::model()->findAll();

        
$this->render('index', array(
            
'models' => $models,
            
'pages' => $pages,
        ));
    }

    public function 
actionCategory($id) {
        if (
$id == 1) {
            
$user Users::findUser();
            
$user->news_ntf 0;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
            }
        }
        
$criteria = new CDbCriteria();
        
$criteria->compare('id_category'$id);
        
$criteria->order '`vip` DESC, `time` DESC';
        
$count ForumThemes::model()->count($criteria);
        
$pages = new CPagination($count);
        
// элементов на страницу
        
$pages->pageSize 10;
        
$pages->route '/forum/category/';
        
$category ForumCategories::model()->findByPk($id);
        
$models ForumThemes::model()->findAll($criteria);

        
$this->render('category', array(
            
'models' => $models,
            
'category' => $category,
            
'pages' => $pages,
        ));
    }

    public function 
actionMarkAsRead($id) {
        
$this->loadModel($id);
        
$user Users::findUser();
        
$criteria = new CDbCriteria();
        
$criteria->compare('id_category'$id);
        
$themes ForumThemes::model()->findAll($criteria);
        
$ids CHtml::listData($themes'id_theme''id_theme');
        
$old_ids CHtml::listData($user->forum_themes'id_theme''id_theme');
        
$user->forum_themes array_merge($old_ids$ids);
        
$user->forum_themes array_unique($user->forum_themes);
        if (!
$user->save(false)) {
            throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя'));
        }
        
$this->redirect(array('forum/category''id' => $id));
        
Yii::app()->end();
    }

    public function 
actionCreateCategory() {
        
$model = new ForumCategories();
        
$this->performAjaxValidation($model);
        if (isset(
$_POST['ForumCategories'])) {
            
$model->attributes $_POST['ForumCategories'];
            if (
$model->validate()) {
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при создании категории!'));
                }
                echo 
CJSON::encode(array(
                    
'status' => 'success',
                    
'reload' => true,
                ));
                
Yii::app()->end();
            } else {
                
$error CActiveForm::validate($model);
                if (
$error != '[]')
                    echo 
$error;
                
Yii::app()->end();
            }
        }
        
$this->renderPartial('_category', array(
            
'model' => $model,
        ));
    }

    public function 
actionUpdateCategory($id) {
        if (
Yii::app()->user->level && Yii::app()->user->mute time()) {
            if (
Yii::app()->user->checkAccess('moder')) {
                
            } elseif (
$category->id_category 1) {
                
            }
        }
        
$model ForumCategories::model()->findByPk($id);
        
$this->performAjaxValidation($model);
        if (isset(
$_POST['ForumCategories'])) {
            
$model->attributes $_POST['ForumCategories'];
            if (
$model->validate()) {
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при редактировании категории!'));
                }
                echo 
CJSON::encode(array(
                    
'status' => 'success',
                    
'reload' => true,
                ));
                
Yii::app()->end();
            } else {
                
$error CActiveForm::validate($model);
                if (
$error != '[]')
                    echo 
$error;
                
Yii::app()->end();
            }
        }
        
$this->renderPartial('_category', array(
            
'model' => $model,
        ));
    }

    public function 
actionTheme($id) {
        
$theme $this->loadModel($id'ForumThemes');
        if (!
ForumThemesForUsers::checkRead($theme->id_theme)) {
            
$ids CHtml::listData($theme->users'id_user''id_user');
            
$ids[] = Yii::app()->user->id;
            
$theme->users $ids;
            if (!
$theme->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении темы!'));
            }
        }
        
$count ForumMessages::model()->countByAttributes(array('id_theme' => $id));
        
$model = new ForumMessages('search');
        
$comment = new ForumMessages('insert');
        if (
strstr(Yii::app()->request->getUrlReferrer(true), 'category')) {
            
$model->search($id)->pagination->setCurrentPage(99);
        }
        if (isset(
$_POST['ForumMessages'])) {
            
$comment->attributes $_POST['ForumMessages'];
            
$comment->id_theme $id;
            if (
$comment->validate()) {
                if (!
$comment->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при создани комментария!'));
                }
                
$theme->users Yii::app()->user->id;
                
$theme->time time();
                if (!
$theme->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении темы!'));
                }
                echo 
CJSON::encode(array(
                    
'status' => 'success',
                    
'updateList' => 'messages',
                ));
                
Yii::app()->end();
            }
        }

        
$this->render('theme', array(
            
'model' => $model,
            
'theme' => $theme,
            
'comment' => $comment,
            
'count' => $count
        
));
    }

    public function 
actionCreateTheme($id) {
        
$category $this->loadModel($id);
        if (
Yii::app()->user->level && Yii::app()->user->mute time() && (Yii::app()->user->checkAccess('moder') || $id 1)) {
            
$model = new ForumThemes();
            if (isset(
$_POST['ForumThemes'])) {
                
$model->id_category $id;
                
$model->attributes $_POST['ForumThemes'];
                if (
$model->validate()) {
                    if (!
$model->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при создании темы!'));
                    }
                    if (
$id == 1) {
                        
Yii::app()->db->createCommand()->update('users', array('news_ntf' => '1'), '`id_role`!=5 AND `id_role`!=6 AND `news_ntf`=0');
                    }
                    
$this->redirect(array('/forum/theme''id' => $model->id_theme));
                    
Yii::app()->end();
                }
            }
            
$this->render('createTheme', array(
                
'model' => $model,
            ));
        }
        else {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
    }

    public function 
actionEditTheme($id) {
        
$model $this->loadModel($id'ForumThemes');
        if (isset(
$_POST['ForumThemes'])) {
            
$model->attributes $_POST['ForumThemes'];
            if (
$model->is_delete) {
                
$id_category $model->id_category;
                
$model->delete();
                
$this->redirect(array('/forum/category''id' => $id_category));
                
Yii::app()->end();
            }
            if (
$model->validate()) {
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при редактировании темы!'));
                }
                
$this->redirect(array('/forum/theme''id' => $id));
                
Yii::app()->end();
            }
        }
        
$this->render('editTheme', array(
            
'model' => $model,
        ));
    }

    public function 
actionEditMessage($id) {
        
$message $this->loadModel($id'ForumMessages');
        
$model = new AdminForm('messageEdit');
        
$model->message $message->message;
        if (isset(
$_POST['AdminForm'])) {
            
$model->attributes $_POST['AdminForm'];
            if (
$model->validate()) {
                if (
$model->message != $message->message) {
                    
$message->id_moder Yii::app()->user->id;
                    
$message->message $model->message;
                    
$message->answer 'отредактировано';
                    if (!
$message->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при работе с сообщением!'));
                    }
                }
                elseif (
$model->answer) {
                    
$message->id_moder Yii::app()->user->id;
                    
$message->answer $model->answer;
                    
$message->answer_type 2;
                    if (!
$message->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при работе с сообщением!'));
                    }
                }
                elseif (
$model->mute) {
                    
$message->id_moder Yii::app()->user->id;
                    
$message->answer '';
                    if (
$model->reason)
                        
$message->answer .= $model->reason.'. ';
                    
$message->answer .= 'Молчание на '.$model->mute.' ч.';
                    
$message->answer_type 3;
                    if (!
$message->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при работе с сообщением!'));
                    }
                    
$user Users::model()->findByPk($message->id_user);
                    
$user->mute_time time()+$model->mute*60*60;
                    if (!
$user->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при работе с пользователем!'));
                    }
                    
                    
$id_dialog Users::checkDialog($message->id_user100);
                    
$mail = new UsersMessages();
                    
$mail->id_dialog $id_dialog;
                    
$mail->id_user 100;
                    
$mail->users $message->id_user;
                    
$mail->message 'Вы получили наказание "Молчание на '.$model->mute.' ч."';
                    if (!
$mail->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при отправке почты!'));
                    }
                }
                echo 
CJSON::encode(array(
                     
'status'=>'success',
                     
'updateList'=>'messages',
                ));
                
Yii::app()->end();
             }
             else{
                
$error CActiveForm::validate($model);
                if(
$error!='[]')
                    echo 
$error;
                
Yii::app()->end();
             }
        }
        
$this->renderPartial('edit', array(
            
'model'=>$model,
            
'message'=>$message,
        ));
    }
    
    public function 
actionDeleteMessage($id) {
        if (
Yii::app()->getRequest()->getIsPostRequest()) {
            
$this->loadModel($id'ForumMessages')->delete();
            echo 
"true";
            
Yii::app()->end();
        } else {
            throw new 
CHttpException(400Yii::t('layout''Неверный запрос'));
        }
    }

    protected function 
performAjaxValidation($model) {
        if (isset(
$_POST['ajax']) && $_POST['ajax'] === 'forum-form') {
            echo 
CActiveForm::validate($model);
            
Yii::app()->end();
        }
    }

    public function 
loadModel($id$name 'ForumCategories') {
        
$model $name::model()->findByPk($id);
        if (
$model === null)
            throw new 
CHttpException(404Yii::t('admin_layout''Страница не найдена!'));
        return 
$model;
    }
}
Онлайн: 2
Реклама