Вход Регистрация
Файл: silawar.ru/protected/controllers/UserController.php
Строк: 347
<?php
class UserController extends Controller {
    public function 
accessRules() {
        return array(
            array(
'deny',
                
'roles' => array('banned'),
                
'deniedCallback' => array(Yii::app()->controller'redirectToHome'),
            ),
            array(
'allow',
                
'actions' => array('index''backpack''body''destroy''options''premium''stats''store''abilities'),
                
'users' => array('@'),
            ),
            array(
'allow',
                
'actions' => array('setBan''unBan'),
                
'roles' => array('moder'),
            ),
            array(
'allow',
                
'actions' => array('save'),
                
'roles' => array('demo'),
            ),
            array(
'deny',
                
'users' => array('*'),
                
'deniedCallback' => array(Yii::app()->controller'redirectToHome'),
            )
        );
    }
    
    public function 
actionIndex($id null) {
        if (!
$id$id Yii::app()->user->id;
        
$model Users::findUser($id);
        
//Счетчики вещей
        
$count['body'] = UserItems::model()->countByAttributes(array(
            
'id_user' => $model->id_user,
            
'status' => ITEM_ON_BODY,
        ));
        if (
$model->id_user == Yii::app()->user->id) {
            
$count['backpack'] = UserItems::model()->countByAttributes(array(
                
'id_user' => Yii::app()->user->id,
                
'status' => ITEM_IN_BACKPACK,
            ));
            
$count['store'] = UserItems::model()->countByAttributes(array(
                
'id_user' => Yii::app()->user->id,
                
'status' => ITEM_IN_STORE,
            ));
        }
        
$model->login Users::getFullLogin($id);
        
$model->money FuncHelper::Money($model->money);
        
$min BattleHelper::maxXP($model->level-1);
        
$max BattleHelper::maxXP($model->level);
        if (
$model->xp 0) {
            
$percent round(($model->xp-$min)*100/($max-$min));
        }
        else
            
$percent 0;
        
$xp = array(
            
'percent' => $percent,
            
'max' => $max,
        );

        
//Если админ, показываем форму для бана
        
if (Yii::app()->user->roleCat == 3) {
            
$block = new UserBan();
        } else
            
$block null;

        
$user Users::findUser();
        
$this->render('index', array(
            
'model' => $model,
            
'count' => $count,
            
'xp' => $xp,
            
'block' => $block,
            
'user' => $user
        
));
    }
    
    public function 
actionStats($id null) {
        if (!
$id$id Yii::app()->user->id;
        
$model Users::findUser($id);
        if (!
$model$model Users::findUser();
        
$stats UserStatistic::model()->findByPk($id);
        if (!
$stats$stats = array();
        
$this->render('stats', array(
            
'model' => $model,
            
'stats' => $stats
        
));
    }   
    
    public function 
actionAbilities($id null) {
        if (!
$id$id Yii::app()->user->id;
        
$model Users::findUser($id);
        
$id_ability = (int)$_GET['ability'];
        if (!empty(
$id_ability) && UsersAbilities::model()->countByAttributes(['id_user' => Yii::app()->user->id'id' => $id_ability]) > 0) {
            
$abilities UsersAbilities::model()->findAllByAttributes(['id_user' => Yii::app()->user->id], ['condition' => '`id` <> '.$id_ability.'  AND chosen > 0''order' => 'chosen DESC']);
            
$chosen 2;
            foreach (
$abilities as $ability) {
                
UsersAbilities::model()->updateByPk($ability->id, ['chosen' => $chosen]);
                
$chosen--;
            }
            
UsersAbilities::model()->updateByPk($id_ability, ['chosen' => 3]);
            
$this->redirect(['/user/abilities''id' => $id]);
            
Yii::app()->end();
        }
        
$abilities UsersAbilities::model()->findAllByAttributes(['id_user' => Yii::app()->user->id], ['order' => 'chosen DESC']);
        
$this->render('abilities', ['model' => $model'abilities' => $abilities]);
    }

    public function 
actionBody($id null) {
        if (!
$id$id Yii::app()->user->id;
        
$model Users::findUser($id);
        
$count = array();

        
//Счетчик рюкзака
        
if ($model->id_user == Yii::app()->user->id) {
            
$count['backpack'] = UserItems::model()->countByAttributes(array(
                
'id_user' => Yii::app()->user->id,
                
'status' => ITEM_IN_BACKPACK,
            ));
        }

        for (
$i 1$i 13$i++) {
            
$criteria = new CDbCriteria;
            
$criteria->select = array('id_item''name''type''level''img''status''id_user''(strength+energy+regeneration+health+armor+enchant_strength+enchant_energy+enchant_regeneration+enchant_health+enchant_armor) as sum');
            
$criteria->compare('id_user'$id);
            
$criteria->compare('type'$i);
            
$criteria->compare('status'ITEM_ON_BODY);
            
$user_item UserItems::model()->find($criteria);
            if (
$user_item) {
                
$items[$i]['id'] = $user_item->id_item;
                
$items[$i]['name'] = UserItems::itemName($user_item->id_item);
                
$items[$i]['level'] = $user_item->level;
                
$items[$i]['status'] = $user_item->status;
                
$items[$i]['id_user'] = $user_item->id_user;
                
$items[$i]['img'] = $user_item->img;
                if (
$id != Yii::app()->user->id) {
                    
$compare_item UserItems::findUserItem($user_item);
                    if (
$compare_item)
                        
$items[$i]['better'] = ($user_item->sum $compare_item->sum $user_item->sum $compare_item->sum false);
                    else
                        
$items[$i]['better'] = $user_item->sum
                }
                else 
                    
$items[$i]['better'] = 0;
            } else {
                
$items[$i]['id'] = 0;
                
$items[$i]['img'] = 0;
                
$items[$i]['better'] = 0;
            }
            
$items[$i]['type'] = FuncHelper::getType($i);
        }

        
$this->render('body', array(
            
'model' => $model,
            
'items' => $items,
            
'count' => $count
        
));
    }

    public function 
actionBackpack() {
        
$model Users::model()->findByPk(Yii::app()->user->id);
        
//Счетчики
        
$count['store'] = UserItems::model()->countByAttributes(array(
            
'id_user' => Yii::app()->user->id,
            
'status' => ITEM_IN_STORE,
        ));
        
$count['backpack'] = UserItems::model()->countByAttributes(array(
            
'id_user' => Yii::app()->user->id,
            
'status' => ITEM_IN_BACKPACK,
        ));

        
$criteria = new CDbCriteria;
        
$criteria->select = array('id_item''level''type''img''personal''status''(strength+energy+regeneration+health+armor+enchant_strength+enchant_energy+enchant_regeneration+enchant_health+enchant_armor) as sum');
        
$criteria->compare('id_user'Yii::app()->user->id);
        
$criteria->compare('status'ITEM_IN_BACKPACK);
        
$user_items UserItems::model()->findAll($criteria);
        
        
$this->render('backpack', array(
            
'model' => $model
            
'items' => $user_items
            
'count' => $count
        
));
    }

    public function 
actionStore() {
        
$model Users::model()->findByPk(Yii::app()->user->id);
        
//Счетчик рюкзака
        
$count['store'] = UserItems::model()->countByAttributes(array(
            
'id_user' => Yii::app()->user->id,
            
'status' => ITEM_IN_STORE,
        ));
        
$count['backpack'] = UserItems::model()->countByAttributes(array(
            
'id_user' => Yii::app()->user->id,
            
'status' => ITEM_IN_BACKPACK,
        ));

        
$criteria = new CDbCriteria;
        
$criteria->select = array('id_item''level''type''img''personal''status''(strength+energy+regeneration+health+armor+enchant_strength+enchant_energy+enchant_regeneration+enchant_health+enchant_armor) as sum');
        
$criteria->compare('id_user'Yii::app()->user->id);
        
$criteria->compare('status'ITEM_IN_STORE);
        
$user_items UserItems::model()->findAll($criteria);
        
$this->render('store', array('model' => $model'items' => $user_items'count' => $count));
    }

    public function 
actionOptions() {
        
$change Yii::app()->getRequest()->getParam('change''changePassword');
        
$model Users::findUser();
        
$options = new OptionsForm();
        if (
$change == 'login')
            
$options->setScenario('changeLogin');
        elseif (
$change == 'diplomat') {
            if (
$model->money 5000) {
                
Yii::app()->user->setFlash('error''У вас недостаточно денег.');
                
$this->redirect(Yii::app()->request->urlReferrer);
                
Yii::app()->end();
            } else {
                
$model->money -= 5000;
                
$model->diplomat 1;
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
                }
                
Yii::app()->user->setFlash('info''Вы выучили навык Дипломатия');
            }
        } elseif (
$change == 'class') {
            if (
$model->money 1000) {
                
Yii::app()->user->setFlash('error''У вас недостаточно денег.');
                
$this->redirect(Yii::app()->request->urlReferrer);
                
Yii::app()->end();
            } else {
                
$model->money -= 1000;
                
$model->class = ($model->class 1);
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
                }
                
Yii::app()->user->setFlash('info''Вы сменили свой класс');
            }
        } elseif (
$change == 'side') {
            if (
$model->money 5000) {
                
Yii::app()->user->setFlash('error''У вас недостаточно денег.');
                
$this->redirect(Yii::app()->request->urlReferrer);
                
Yii::app()->end();
            }
            elseif (
$model->guild_id) {
                
Yii::app()->user->setFlash('error''Вы не сможете сменить сторону пока не выйдите из гильдии.');
                
$this->redirect(Yii::app()->request->urlReferrer);
                
Yii::app()->end();
            } else {
                
$model->money -= 5000;
                
$model->side = ($model->side 1);
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
                }
                
Yii::app()->user->setFlash('info''Вы сменили свою сторону');
            }
        } elseif (
$change == 'sex') {
            if (
$model->money 500) {
                
Yii::app()->user->setFlash('error''У вас недостаточно денег.');
                
$this->redirect(Yii::app()->request->urlReferrer);
                
Yii::app()->end();
            } else {
                
$model->money -= 500;
                
$model->sex = ($model->sex 0);
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
                }
                
Yii::app()->user->setFlash('info''Вы сменили свой пол');
            }
        } else {
            
$options->setScenario('changePassword');
            if (isset(
$_POST['OptionsForm'])) {
                
$options->attributes $_POST['OptionsForm'];
                if (
$options->validate()) {
                    
//Забираем у пользователя то, что он отправил
                    
if ($options->password_new) {
                        
$model->password md5(md5($options->password_new));
                    } elseif (
$options->login) {
                        if (
$model->money 5000) {
                            
Yii::app()->user->setFlash('error''У вас недостаточно денег.');
                            
$this->redirect(Yii::app()->request->urlReferrer);
                            
Yii::app()->end();
                        }
                        
$model->money -= 5000;
                    }

                    if (!
$model->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
                    }
                    if (isset(
$_GET['change']) && $_GET['change'] == 'login')
                        
Yii::app()->user->setFlash('info''Ваш ник изменен');
                    else
                        
Yii::app()->user->setFlash('info''Ваш пароль изменен');
                    
$this->redirect('/user/options/');
                    
Yii::app()->end();
                }
            }
        }

        
$this->render('options', array('model' => $model'options' => $options));
    }
    
    public function 
actionSave() {
        
$user Users::findUser();
        if (
$user->id_role == 8) {
            
$save = new SaveForm();
            
$save->login $user->login;
            if (isset(
$_POST['SaveForm'])) {
                
$save->attributes $_POST['SaveForm'];
                
$save->login trim($save->login);
                if (
$save->validate()) {
                    
$user->attributes $save->attributes;
                    
$user->id_role 1;
                    if (!isset(
$_SERVER['HTTP_X_HOST'])) {
                        
$user->password md5(md5($save->password));
                    }
                    else {
                        
$user->password md5(md5(md5('pumpit'.$_SESSION['pumpit_id'])));
                    }
                    if (
$user->sex == 0$user->avatar 1;
                    else 
$user->avatar 2;
                    if (!
$user->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
                    }
                    
Yii::app()->user->setFlash('info''Вы успешно сохранили персонажа. Приятной игры!');
                    
$this->redirect('/user/');
                    
Yii::app()->end();
                }
            }
            
$this->render('save', array('user' => $user'save' => $save));  
        }
        else {
            
$this->redirect('/user/');
            
Yii::app()->end();
        }
    }

    public function 
actionPremium($type null) {
        
$model Users::findUser();
        if (
$type && intval($type) > && intval($type) < 6) {
            
$price FuncHelper::premiumPrices($type);
            if (!
$price || $model->money $price) {
                
Yii::app()->user->setFlash('error''У вас недостаточно денег.');
                
$this->redirect(Yii::app()->request->urlReferrer);
                
Yii::app()->end();
            }
            
$model->money -= $price;
            if (
$model->premium_time time())
                
$model->premium_time += FuncHelper::premiumTimes($type);
            else
                
$model->premium_time = (time() + FuncHelper::premiumTimes($type));
            if (!
$model->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
            }
            
Yii::app()->user->setFlash('info''Премиум активирован');
            
$this->redirect('/user/premium/');
            
Yii::app()->end();
        }
        
$this->render('premium', array(
            
'model' => $model,
        ));
    }

    public function 
actionDestroy() {
        
$user Users::model()->findByPk(Yii::app()->user->id);
        
$type Yii::app()->request->getParam('type');
        if (
$type) {
            if (
$type 4
                
$user->backpack_destroy 0;
            else 
                
$user->backpack_destroy $type;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
            }
            
Yii::app()->user->setFlash('info''Изменения сохранены');
            
$this->redirect('/user/destroy/');
        }
        
$this->render('destroy', array(
            
'user' => $user,
        ));
    }
    
    public function 
actionSetBan($id) {
        
$model = new AdminForm('banUser');
        
$user Users::model()->findByPk($id);
        if (isset(
$_POST['AdminForm'])) {
            
$model->attributes $_POST['AdminForm'];
            if (
$model->validate()) {
                
$ban = new UserBan();
                
$ban->attributes $model->attributes;
                
$ban->id_user $id;
                if (
$model->type == 2) {
                    
$ban->time time() + 3600 24 $model->number;
                }
                elseif (
$model->type == 1) {
                    
$ban->time time() + 3600 $model->number;
                } 
                else 
                    
$ban->time 0;
                if (!
$ban->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при выдаче бана'));
                }
                
$user->id_role 7;
                
$user->id_ban $ban->id_ban;
                if (!
$user->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при выдаче бана'));
                }
                
//do anything here
                
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('ban', array(
            
'model'=>$model,
        ));
    }
    public function 
actionUnBan($id) {
        
$user Users::model()->findByPk($id);
        
$user->id_ban null;
        if (!
$user->save(false)) {
            throw new 
CHttpException(500Yii::t('layout''Ошибка при снятии бана'));
        }
        echo 
"true";
        
Yii::app()->end();
    }

}
Онлайн: 1
Реклама