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

class GuildController extends Controller {

    public function 
accessRules() {
        return array(
            array(
'deny',
                
'roles' => array('banned'),
                
'deniedCallback' => array(Yii::app()->controller'redirectToHome'),
            ),
            array(
'allow',
                
'actions' => array('index''storage''buildings''buildingInfo''inviteAnswer''create''exit''invite''journal''kick''lower''online''swap''settings''upper''view'),
                
'users' => array('@'),
            ),
            array(
'deny',
                
'users' => array('*'),
                
'deniedCallback' => array(Yii::app()->controller'redirectToHome'),
            )
        );
    }

    public function 
actionIndex() {
        
$user Users::findUser();
        if (
$user->guild_id) {
            
$this->redirect(array('view''id' => $user->guild_id));
            
Yii::app()->end();
        }
        
$this->render('index');
    }

    public function 
actionCreate() {
        
$user Users::findUser();
        if (
$user->guild_id) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        } elseif (
$user->level 10) {
            
Yii::app()->user->setFlash('info''Создавать гильдию можно с 10 уровня.');
            
$this->redirect('/guild/index');
            
Yii::app()->end();
        }
        
$model = new Guilds;
        if (isset(
$_POST['Guilds'])) {
            
$model->attributes $_POST['Guilds'];
            
$model->money $user->money;
            if (
$model->validate()) {
                
$model->side $user->side;
                
$model->save();
                
$user->guild_invite null;
                
$user->guild_id $model->id_guild;
                
$user->guild_rank 5;
                
$user->money -= $model->price 100;
                
$user->guild_time time();
                if (!
$user->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
                }
                
$this->redirect(array('view''id' => $model->id_guild));
            }
        }
        
$this->render('create', array(
            
'model' => $model,
        ));
    }

    public function 
actionView($id) {
        
$model $this->loadModel($id);
        
$user Users::findUser();
        
$max BattleHelper::maxGuildXP($model->level);
        
$warriors $healers 0;
        foreach (
$model->users as $member) {
            if (
$member->class == && $member->last_visit > (time() - 60 60))
                
$warriors++;
            elseif (
$member->class == && $member->last_visit > (time() - 60 60))
                
$healers++;
        }
        if (isset(
$_POST['Guilds'])) {
            
$model->info $_POST['Guilds']['text'];
            if (
$model->validate()) {
                
$model->info_creator Yii::app()->user->id;
                
$model->info_time time();
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
                }
                
$this->redirect(array('view''id' => $model->id_guild));
            }
        }
        
$min BattleHelper::maxGuildXP($model->level 1);
        
$max BattleHelper::maxGuildXP($model->level);

        if (
$model->xp 0) {
            
$percent round(($model->xp $min) * 100 / ($max $min));
        } else
            
$percent 0;
        
$xp = array(
            
'percent' => $percent,
            
'max' => $max,
        );

        
$this->render('view', array(
            
'model' => $model,
            
'xp' => $xp,
            
'user' => $user,
            
'warriors' => $warriors,
            
'healers' => $healers,
        ));
    }
    
    public function 
actionStorage($id) {
        
$model $this->loadModel($id);
        
$user Users::findUser();
        
$types = array(500=>5001000=>10005000=>500010000=>10000);
        if (isset(
$_GET['type']) && in_array($_GET['type'], $types)) {
            
$value $_GET['type'];
            if (
$value $user->iron)
               
Yii::app()->user->setFlash('error''Недостаточно железа');
            else {
                
$user->iron -= $value;
                
$model->iron += $value;
                if (!
$user->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
                }
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
                }
                
$history = new GuildsHistory();
                
$history->id_guild $model->id_guild;
                
$history->type 2;
                
$history->subtype 1;
                
$history->info $value;
                
$history->id_user $user->id_user;
                if (!
$history->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
                }
                
Yii::app()->user->setFlash('info''Вы положили в Тайник <img src="/images/icons/iron.png" alt="*"> '.$value.' железа');
            }
            
$this->redirect(array('guild/storage''id' => $model->id_guild));
        }
        
        
$this->render('storage', ['model' => $model'types' => $types]);
    }
    
    public function 
actionBuildings($id) {
        
$model $this->loadModel($id);
        
$buildings Buildings::model()->findAll();
        
$user Users::findUser();
        
$this->render('buildings', ['model' => $model'buildings' => $buildings'user' => $user]);
    }
    
    public function 
actionBuildingInfo($id$build) {
        
$model $this->loadModel($id);
        
$info $this->loadModel($build'Buildings');
        
$user Users::findUser();
        
$building GuildsBuildings::model()->findByPk(array('id_guild'=>$id'id_building'=>$build));
        
$types = array(500=>5001000=>10005000=>500010000=>10000);
        
$progress = array();
        if (!empty(
$building)) {
            
$progress['need'] = DataHelper::guildMainPrices($building->level);
            
$progress['percent'] = round($building->iron*100/$progress['need']);
        }
        else {
            
$building = new GuildsBuildings();
            
$building->id_guild $id;
            
$building->id_building $build;
            
$building->save(false);
            
$progress['need'] = DataHelper::guildMainPrices(0);
            
$progress['percent'] = 0;
        }
        if (isset(
$_GET['type']) && in_array($_GET['type'], $types) && $building->level $model->level) {
            
$value $_GET['type'];
            if (
$value $model->iron)
               
Yii::app()->user->setFlash('error''Недостаточно железа');
            else {
                
$model->iron -= $value;
                
$building->iron += $value;
                if (
$building->iron >= $progress['need']) {
                    
$building->iron -= $progress['need'];
                    
$building->level++;
                }
                if (!
$building->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
                }
                if (!
$model->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
                }
                
$history = new GuildsHistory();
                
$history->id_guild $model->id_guild;
                
$history->type 2;
                
$history->subtype 2;
                
$history->info $value;
                
$history->id_user $user->id_user;
                if (!
$history->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
                }
                
Yii::app()->user->setFlash('info''Вы добавили <img src="/images/icons/iron.png" alt="*"> '.$value.' железа');
            }
            
$this->redirect(array('guild/buildingInfo''id'=>$id'build'=>$build));
        }
        if (isset(
$_GET['do'])) {
            
$value $building->level*100;
            
$bonus $building->level*0.5;
            if (
$value $user->iron)
               
Yii::app()->user->setFlash('error''Недостаточно железа');
            else {
                
$user->iron -= $value;
                
$user->guild_buff $bonus;
                
$user->guild_buff_time time() + 2*60*60;
                if (!
$user->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
                }
                
Yii::app()->user->setFlash('info''Вы активировали  Камень ярости на 2 часа');
            }
            
$this->redirect(array('guild/buildingInfo''id'=>$id'build'=>$build));
        }
        
$this->render('building', ['model' => $model'building' => $building'info' => $info'progress' => $progress'types' => $types'user' => $user]);
    }
    
    public function 
actionOnline($id) {
        
$model $this->loadModel($id);
        
$criteria = new CDbCriteria();
        
$criteria->condition 't.last_visit > ' . (time() - 60 60);
        
$criteria->compare('t.guild_id'$id);
        
$criteria->order 't.guild_rank DESC';
        
$count Users::model()->count($criteria);
        
$pages = new CPagination($count);
        
// элементов на страницу
        
$pages->pageSize 10;
        
$pages->route '/guild/online';
        
$pages->params = array('id' => $id);
        
$pages->applyLimit($criteria);

        
$models Users::model()->findAll($criteria);
        
$this->render('online', array('models' => $models'pages' => $pages));
    }

    public function 
actionInvite($id) {
        
$user Users::findUser();
        
$member Users::findUser($id);
        
$model $this->loadModel($user->guild_id);
        if (!
$member->guild_id && $user->guild_id && $user->guild_rank >= $model->rank_invite && $member->side == $user->side && count($model->users) < 10) {
            
$member->guild_invite $model->id_guild;
            
$member->guild_rank 1;
            if (!
$member->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
Yii::app()->user->setFlash('info'Users::getFullLogin($id) . ' отправлено приглашение');
        }
        
$this->redirect(array('/user/index/''id' => $id));
        
Yii::app()->end();
    }

    public function 
actionInviteAnswer($type) {
        
$user Users::findUser();
        
$model $this->loadModel($user->guild_invite);
        if (
$user->guild_invite && !$user->guild_id && $model->side == $user->side && $type == 'accept' && count($model->users) < 10) {
            
$user->guild_id $model->id_guild;
            if (
$model->level 2) {
                
$user->guild_rank 1;
            } else {
                
$user->guild_rank 0;
            }
            
$history = new GuildsHistory();
            
$history->id_guild $model->id_guild;
            
$history->type 1;
            
$history->subtype 1;
            
$history->id_target $user->id_user;
            if (!
$history->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
$user->guild_time time();
            
$user->guild_invite null;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
$this->redirect(array('/guild/view''id' => $model->id_guild));
            
Yii::app()->end();
        } elseif (
$type == 'cancel') {
            
$user->guild_invite null;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
$this->redirect(array('/user/index'));
            
Yii::app()->end();
        } else {
            
Yii::app()->user->setFlash('info''Вы не можете вступить в гильдию, достигнут лимит участников.');
            
$user->guild_invite null;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
$this->redirect(array('/site/index'));
        }
        
Yii::app()->end();
    }

    public function 
actionExit() {
        
$user Users::findUser();
        
$model $this->loadModel($user->guild_id);
        if (
$user->guild_rank && $user->guild_id == $model->id_guild) {
            
$user->guild_id null;
            
$user->guild_rank null;
            
$user->guild_xp null;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
$history = new GuildsHistory();
            
$history->id_guild $model->id_guild;
            
$history->type 1;
            
$history->subtype 2;
            
$history->id_target $user->id_user;
            if (!
$history->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
Yii::app()->user->setFlash('info''Вы вышли из гильдии');
        }
        
$this->redirect(Yii::app()->user->returnUrl);
        
Yii::app()->end();
    }

    public function 
actionKick($id) {
        
$user Users::findUser();
        
$member Users::findUser($id);
        
$model $this->loadModel($user->guild_id);
        if (
$user->guild_rank >= $model->rank_kick && $user->guild_id == $member->guild_id && $member->guild_rank $user->guild_rank) {
            
$member->guild_id null;
            
$member->guild_rank null;
            
$member->guild_xp null;
            if (!
$member->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
$history = new GuildsHistory();
            
$history->id_guild $user->guild_id;
            
$history->type 1;
            
$history->subtype 5;
            
$history->id_target $member->id_user;
            if (!
$history->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
Yii::app()->user->setFlash('info'Users::getFullLogin($id) . ' исключен из гильдии');
        }
        
$this->redirect(array('/guild/view/''id' => $model->id_guild'action' => 'moderate'));
        
Yii::app()->end();
    }

    public function 
actionUpper($id) {
        
$user Users::findUser();
        
$member Users::findUser($id);
        
$model $this->loadModel($user->guild_id);
        if (
$user->guild_rank >= && $member->guild_rank $user->guild_rank && $member->guild_rank 4) {
            if (
$model->level && $member->guild_rank == 3) {
                
$this->redirect(array('/guild/view/''id' => $model->id_guild'action' => 'moderate'));
                
Yii::app()->end();
            } elseif (
$model->level && $member->guild_rank == 4) {
                
$this->redirect(array('/guild/view/''id' => $model->id_guild'action' => 'moderate'));
                
Yii::app()->end();
            } elseif (
$model->level && $member->guild_rank == 1) {
                
$member->guild_rank 3;
            } else {
                
$member->guild_rank += 1;
            }
            if (!
$member->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''ПРоизошла ошибка при работе с БД!'));
            }
            
$history = new GuildsHistory();
            
$history->id_guild $user->guild_id;
            
$history->type 1;
            
$history->subtype 3;
            
$history->info $member->guild_rank;
            
$history->id_target $member->id_user;
            if (!
$history->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
Yii::app()->user->setFlash('info'Users::getFullLogin($id) . ' повышен');
        }
        
$this->redirect(array('/guild/view/''id' => $model->id_guild'action' => 'moderate'));
        
Yii::app()->end();
    }

    public function 
actionLower($id) {
        
$user Users::findUser();
        
$member Users::findUser($id);
        
$model $this->loadModel($user->guild_id);
        if (
$user->guild_rank >= && $member->guild_rank && $member->guild_rank $user->guild_rank) {
            if (
$model->level && $member->guild_rank == 3) {
                
$member->guild_rank 1;
            } else {
                
$member->guild_rank -= 1;
            }
            if (!
$member->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''ПРоизошла ошибка при работе с БД!'));
            }
            
$history = new GuildsHistory();
            
$history->id_guild $user->guild_id;
            
$history->type 1;
            
$history->subtype 4;
            
$history->info $member->guild_rank;
            
$history->id_target $member->id_user;
            if (!
$history->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
Yii::app()->user->setFlash('info'Users::getFullLogin($id) . ' понижен');
        }
        
$this->redirect(array('/guild/view/''id' => $model->id_guild'action' => 'moderate'));
        
Yii::app()->end();
    }

    public function 
actionSwap($id) {
        
$user Users::findUser();
        
$member Users::findUser($id);
        
$model $this->loadModel($user->guild_id);
        if (
$user->guild_rank == && ($model->level && $member->guild_rank || $model->level && $member->guild_rank 3)) {
            
$user->guild_rank $member->guild_rank;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''ПРоизошла ошибка при работе с БД!'));
            }
            
$member->guild_rank 5;
            if (!
$member->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''ПРоизошла ошибка при работе с БД!'));
            }

            
$history = new GuildsHistory();
            
$history->id_guild $user->guild_id;
            
$history->type 1;
            
$history->subtype 6;
            
$history->info $member->guild_rank;
            
$history->id_target $member->id_user;
            if (!
$history->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Произошла ошибка при работе с БД!'));
            }
            
Yii::app()->user->setFlash('info'Users::getFullLogin($id) . ' новый лидер гильдии');
        }
        
$this->redirect(array('/guild/view/''id' => $model->id_guild'action' => 'moderate'));
        
Yii::app()->end();
    }

    public function 
actionSettings($id) {
        
$model $this->loadModel($id);
        
$user Users::findUser();
        if (
$model->id_guild != $user->guild_id || $user->guild_rank 5) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$model->level 4) {
            
$ranks = array(
                
=> 'капитан',
                
=> 'предводитель'
            
);
        } else {
            
$ranks = array(
                
=> 'капитан',
                
=> 'командующий',
                
=> 'предводитель'
            
);
        }

        if (isset(
$_POST['Guilds'])) {
            
$model->rank_invite $_POST['Guilds']['rank_invite'];
            
$model->rank_kick $_POST['Guilds']['rank_kick'];
            if (
$model->save())
                
$this->redirect(array('view''id' => $model->id_guild));
        }

        
$this->render('settings', array(
            
'model' => $model,
            
'ranks' => $ranks
        
));
    }

    public function 
actionJournal($id) {
        
$model $this->loadModel($id);
        
$user Users::findUser();
        if (
$model->id_guild != $user->guild_id) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        
$history = new GuildsHistory('search');
        
$history->id_guild $user->guild_id;
        
$history->type Yii::app()->request->getParam('type');
        
$this->render('journal', array(
            
'model' => $model,
            
'history' => $history
        
));
    }

    public function 
loadModel($id$model 'Guilds') {
        
$model $model::model()->findByPk($id);
        if (
$model === null)
            throw new 
CHttpException(404'Запрашиваемая страница не существует');
        return 
$model;
    }

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