Файл: silawar.ru/protected/controllers/ShopController.php
Строк: 144
<?php
class ShopController extends Controller {
    public function accessRules() {
        return array(
            array('deny',
                'roles' => array('banned'),
                'deniedCallback' => array(Yii::app()->controller, 'redirectToHome'),
            ),
            array('allow',
                'actions' => array('index', 'list', 'avatars', 'ajaxGetItems', 'buy', 'view', 'buyAvatar', 'abilities', 'viewAbility'),
                'users' => array('@'),
            ),
            array('deny',
                'users' => array('*'),
                'deniedCallback' => array(Yii::app()->controller, 'redirectToHome'),
            )
        );
    }
    
    public function actionIndex() {
        $this->render('index');
    }
    
    
    public function actionAbilities() {
        $info = 'знаешь что поможет тебе победить врага? Хороший навык!';
        $model = new ShopAbilities('search');
        $this->render('abilities', ['model' => $model, 'info' => $info]);
    }
    
    public function actionViewAbility($id) {
        $model = $this->loadModel($id, 'ShopAbilities');
        $ability = UsersAbilities::model()->findByAttributes(['id_user' => Yii::app()->user->id, 'id_ability' => $id]);
        if (isset($_GET['type'])) {
            $shop = ShopAbilitiesTypes::model()->findByAttributes(['id_ability' => $id, 'id_type' => $_GET['type']]);
            $user = Users::findUser();
            if ($user->money >= $shop->money && (!empty($ability) && $ability->idType->type < $shop->type || empty($ability))) {
                if (empty($ability)) {
                    $ability = new UsersAbilities();
                    $ability->id_user = $user->id_user;
                    $ability->id_ability = $id;
                }
                $ability->id_type = $shop->id_type;
                $ability->save(false);
                Users::model()->updateByPk($user->id_user, ['money' => $user->money - $shop->money]);
                Yii::app()->user->setFlash('info', 'Вы успешно купили навык');
            }
            else {
                Yii::app()->user->setFlash('error', 'Недостаточно денег');
            }
            $this->redirect(['/shop/viewAbility', 'id' => $id]);
            Yii::app()->end();
        }
        $this->render('viewAbility', ['model' => $model, 'ability' => $ability]);
    }
    
    public function actionList($id = 4) {
        $ids = array(4);
        if (!in_array($id, $ids)) {
            $this->redirect('/shop/');
            Yii::app()->end();
        }
        $info = array(
            4 => 'Хищник - идеальный вариант для игроков, которые уже на 15 уровне хотят иметь приемущество!',
            6 => 'Сила - максимальная сила, слабая броня и средние здоровье и энергия',
            7 => 'Защитник - максимальная броня и здоровье, средняя сила, слабая энергия и регенерация',
            8 => 'Паладин - максимальная регенерация, остальные параметры средние',
            9 => '',
        );
        $this->render('list', array(
            'type' => $id,
            'info' => $info
        ));
    }
    
    public function actionView($item, $id_set, $type) {
        $ids = array(4);
        if (!in_array($id_set, $ids)) {
            $this->redirect('/shop/');
            Yii::app()->end();
        }
        $type = ((int)$type && (int)$type>2 && (int)$type<7 ? (int)$type : 3);
        $item = ShopItems::findItem($item);
        if (!$item) {
            $this->redirect('/shop/');
            Yii::app()->end();
        }
        $percents = array(3=>99, 140, 195, 275);
        $percent=$percents[$type]; 
        $item->img = $id_set.'/'.$type;
        $item->quality = $type;
        $item->sum = 0;
        foreach (FuncHelper::mainParams() as $param => $name){
            if ($item->$param) {
                $param_percent = $param.'_percent';
                $item->$param = round($item->$param + ($item->$param / 100) * $percent);
                $item->$param_percent = $percent;                
            }
        }
        /*
         * Выбираем аналогичную надетую шмотку у пользователя
         */
        $user_item = UserItems::findUserItem($item);
        if ($user_item)
            $compare = FuncHelper::compareStats($item, $user_item);
        else 
            $compare = FuncHelper::compareStats($item, $item);
        $this->render('view', array(
            'item' => $item, 
            'user_item' => $user_item, 
            'type' => $type, 
            'compare' => $compare, 
            'percent' => $percent
        ));
    }
    
    public function actionBuy($id, $id_set, $type) {
        $ids = array(4);
        if (!in_array($id_set, $ids)) {
            $this->redirect('/shop/');
            Yii::app()->end();
        }
        $type = ((int)$type && (int)$type>2 && (int)$type<7 ? (int)$type : 3);
        $percents = array(3=>99, 140, 195, 275);
        $prices = array(
            4=>array(3=>50, 100, 200, 300),
            6=>array(3=>100, 200, 400, 600),
            7=>array(3=>100, 200, 400, 600),
            8=>array(3=>100, 200, 400, 600),
            9=>array(3=>100, 200, 400, 600),
        );
        $percent=$percents[$type]; 
        $price=$prices[$id_set][$type];
        $all=$price*10;
        $user = Users::findUser();
        
    if ($id == 'all'){
            if ($all>$user->money)
               Yii::app()->user->setFlash('error', 'Недостаточно денег');
            else {
                $shop_items = ShopItems::model()->findAll('id_set=:id_set', array(':id_set'=>$id_set));
                if ($shop_items) {
                    foreach ($shop_items as $item) {
                        ShopItems::getNewItem($item->id_item, $type, Yii::app()->user->id);
                    }
                    $user->money -= $all;
                    if (!$user->save(false)) {
                        throw new CHttpException(500, Yii::t('layout', 'Ошибка при сохранении данных пользователя!'));
                    }
                    Yii::app()->user->setFlash('info', 'Покупка отправлена на почту');
                }
            }
    }
    else {
            $item = ShopItems::model()->findByPk($id);
            if (!$item || $item->id_set != $id_set) {
                $this->redirect('/shop/');
                Yii::app()->end();
            }
            if ($price>$user->money)
               Yii::app()->user->setFlash('error', 'Недостаточно денег');
            else {
                ShopItems::getNewItem($id, $type, Yii::app()->user->id);
                $user->money -= $price;
                if (!$user->save(false)) {
                    throw new CHttpException(500, Yii::t('layout', 'Ошибка при сохранении данных пользователя!'));
                }
                Yii::app()->user->setFlash('info', 'Покупка отправлена на почту');
            }
    }
        $this->redirect('/shop/');
        Yii::app()->end();
    }
        public function actionAjaxGetItems($id_set, $type) {
        $type = ((int)$type && (int)$type>2 && (int)$type<7 ? (int)$type : 3);
        $percents = array(3=>99, 140, 195, 275);
        $prices = array(
            4=>array(3=>50, 100, 200, 300),
            6=>array(3=>100, 200, 400, 600),
            7=>array(3=>100, 200, 400, 600),
            8=>array(3=>100, 200, 400, 600),
            9=>array(3=>100, 200, 400, 600),
        );
        $percent=$percents[$type]; 
        $price=$prices[$id_set][$type];
        $all=FuncHelper::Money($price*10);
        $sale=FuncHelper::Money($price*2);
        $criteria = new CDbCriteria;
        $criteria->compare('id_set', $id_set);
        $shop_items = ShopItems::model()->findAll($criteria);
        if ($shop_items) {
            foreach ($shop_items as $item) {
                $item->price = FuncHelper::Money($price);
                /*
                 * Выбираем аналогичную надетую шмотку у пользователя
                 */
                $item->sum = 0;
                foreach (FuncHelper::mainParams() as $param => $name){
                    if ($item->$param) {
                        $item->sum += ShopItems::calcParam($item->id_item, $param, $percents[$type]);
                    }
                }
                $user_item = UserItems::findUserItem($item);
                if ($user_item)
                    $item->better = ($item->sum > $user_item->sum ? $item->sum-$user_item->sum : false);
                else 
                    $item->better = $item->sum;
            }
        }
        else $shop_items = null;
        $this->renderPartial('_items', array(
            'items' => $shop_items, 
            'id_set' => $id_set, 
            'price' => $price,
            'all' => $all,
            'sale' => $sale, 
            'type' => $type
        ));
    }
    
    public function loadModel($id, $model = 'model') {
        $model = $model::model()->findByPk($id);
        if ($model === null)
            throw new CHttpException(404, Yii::t('admin_layout', 'Страница не найдена!'));
        return $model;
    }
}