Вход Регистрация
Файл: silawar.ru/protected/models/BattlesLocations.php
Строк: 269
<?php
class BattlesLocations extends CActiveRecord {

    public function 
tableName() {
        return 
'battles_locations';
    }

    public function 
rules() {
        return array(
            array(
'id_location, name_location, level_min, level_max, type_location, side_default, health_default, participation_default, side_now, health_now, participation_now''required'),
            array(
'type_location, side_default, side_now''numerical''integerOnly' => true),
            array(
'id_location, level_min, level_max, health_default, participation_default, health_now, participation_now''length''max' => 11),
            array(
'name_location''length''max' => 256),
            array(
'status''safe'),
            array(
'id_location, name_location, level_min, level_max, type_location, side_default, health_default, participation_default, side_now, health_now, participation_now''safe''on' => 'search'),
        );
    }

    public function 
relations() {
        return array(
            
'childNavigator' => array(self::HAS_MANY'BattlesNavigator''child_location'),
            
'idNavigator' => array(self::HAS_MANY'BattlesNavigator''id_location'),
            
'usersForBots' => array(self::HAS_MANY'Users''battle_id',
                            
'with'=>'idRole',
                            
'condition'=>'idRole.id_cat_role != 5 AND usersForBots.health_now > 0 AND usersForBots.battle_time_in < '.(time()-10).''),
            
'users' => array(self::HAS_MANY'Users''battle_id',
                            
'with'=>'idRole',
                            
'condition'=>'idRole.id_cat_role != 5'),
            
'bots' => array(self::HAS_MANY'Users''battle_id',
                            
'with'=>'idRole',
                            
'condition'=>'idRole.id_cat_role = 5'),
        );
    }

    public function 
attributeLabels() {
        return array(
            
'id_location' => '#',
            
'name_location' => 'Название',
            
'level_min' => 'Уровен',
            
'level_max' => 'Level Max',
            
'type_location' => 'Type Location',
            
'side_default' => 'Side Default',
            
'health_default' => 'Health Default',
            
'participation_default' => 'Participation Default',
            
'side_now' => 'Side Now',
            
'health_now' => 'Health Now',
            
'participation_now' => 'Participation Now',
        );
    }

    public function 
search() {
        
// @todo Please modify the following code to remove attributes that should not be searched.

        
$criteria = new CDbCriteria;

        
$criteria->compare('id_location'$this->id_locationtrue);
        
$criteria->compare('name_location'$this->name_locationtrue);
        
$criteria->compare('level_min'$this->level_mintrue);
        
$criteria->compare('level_max'$this->level_maxtrue);
        
$criteria->compare('type_location'$this->type_location);
        
$criteria->compare('side_default'$this->side_default);
        
$criteria->compare('health_default'$this->health_defaulttrue);
        
$criteria->compare('participation_default'$this->participation_defaulttrue);
        
$criteria->compare('side_now'$this->side_now);
        
$criteria->compare('health_now'$this->health_nowtrue);
        
$criteria->compare('participation_now'$this->participation_nowtrue);

        return new 
CActiveDataProvider($this, array(
            
'criteria' => $criteria,
            
'pagination' => array('pageSize'=>150)
        ));
    }

    public function 
getColumns() {
        
$columns = array(
            array(
                
'name' => 'id_location',
                
'header' => '#',
            ),
            
'name_location',
            array(
                
'name' => 'level',
                
'header' => 'Уровень',
                
'value' => function ($data) {
            return 
$data->level_min ' - ' $data->level_max;
        },
            ),
            array(
                
'name' => 'side_now',
                
'header' => 'Контроль',
                
'value' => function ($data) {
            if (
$data->side_now == 1)
                return 
'Краллы';
            elseif (
$data->side_now == 2)
                return 
'Элийцы';
            else
                return 
'Нейтральная';
        },
            ),
            array(
                
'name' => 'users',
                
'header' => 'Кол-во игроков',
                
'value' => 'Users::getUsersInLocation($data->id_location)',
            ),
            array(
                
'name' => 'bots',
                
'header' => 'Кол-во ботов',
                
'value' => 'Users::getBotsInLocation($data->id_location)',
            ),
            array(
                
'class' => 'CButtonColumn',
                
'template' => '{control}'//include the standard buttons plus the new status button
                
'buttons' => array(
                    
'control' => array(
                        
'url' => 'array("battles/update", "id"=>$data->id_location)',
                        
'label' => '<span class="glyphicon glyphicon-cog"></span>',
                        
'options' => array('title'=>'Управление ботами''style'=>'color: #000000;'),
                    )
                )
            )
        );

//        $columns = array(
//            'login',
//            array(
//                'name' => 'password',
//                'htmlOptions' => array('class' => 'password'),
//                'filterHtmlOptions' => array('class' => 'password'),
//                'headerHtmlOptions' => array('class' => 'password'),
//            ),
//            array(
//                'name' => 'id_role',
//                'type' => 'raw',
//                'value' => 'isset($data->id_role) ? $data->idRole->name_role_ru : ""',
//                'filter' => CHtml::dropDownList('Users[id_role]', $this->id_role, $roles_listdata, array('class' => 'chosen-select', 'empty' => 'Все', 'style' => 'width:100%;', 'data-placeholder' => ' ')),
//                'htmlOptions' => array('class' => 'role'),
//                'filterHtmlOptions' => array('class' => 'role'),
//                'headerHtmlOptions' => array('class' => 'role'),
//            ),
//            array(
//                'name' => 'email',
//                'htmlOptions' => array('class' => 'email'),
//                'filterHtmlOptions' => array('class' => 'email'),
//                'headerHtmlOptions' => array('class' => 'email'),
//            ),
//            array(
//                'name' => 'created',
//                'filter' => Yii::App()->controller->widget('zii.widgets.jui.CJuiDatePicker', array(
//                    'model' => $model,
//                    'attribute' => 'created',
//                    'language' => 'ru',
//                    'htmlOptions' => array(
//                        'id' => 'datepicker-created',
//                        'size' => '10',
//                    ),
//                    'defaultOptions' => array(// (#3)
//                        'showOn' => 'focus',
//                        'dateFormat' => 'd.m.Y',
//                        'showOtherMonths' => true,
//                        'selectOtherMonths' => true,
//                        'changeMonth' => true,
//                        'changeYear' => true,
//                        'showButtonPanel' => true,
//                    )
//                        ), true),
//                'htmlOptions' => array('class' => 'created'),
//                'filterHtmlOptions' => array('class' => 'created'),
//                'headerHtmlOptions' => array('class' => 'created'),
//            ),
//            array(
//                'name' => 'last_visit',
//                'filter' => Yii::App()->controller->widget('zii.widgets.jui.CJuiDatePicker', array(
//                    'model' => $model,
//                    'attribute' => 'last_visit',
//                    'language' => 'ru',
//                    'htmlOptions' => array(
//                        'id' => 'datepicker-last-visit',
//                        'size' => '10',
//                    ),
//                    'defaultOptions' => array(// (#3)
//                        'showOn' => 'focus',
//                        'dateFormat' => 'd.m.Y',
//                        'showOtherMonths' => true,
//                        'selectOtherMonths' => true,
//                        'changeMonth' => true,
//                        'changeYear' => true,
//                        'showButtonPanel' => true,
//                    )
//                        ), true),
//                'htmlOptions' => array('class' => 'last_visit'),
//                'filterHtmlOptions' => array('class' => 'last_visit'),
//                'headerHtmlOptions' => array('class' => 'last_visit'),
//            )
//        );
        
return $columns;
    }

    
/**
     * Returns the static model of the specified AR class.
     * Please note that you should have this exact method in all your CActiveRecord descendants!
     * @param string $className active record class name.
     * @return BattlesLocations the static model class
     */
    
public static function model($className __CLASS__) {
        return 
parent::model($className);
    }

    
/**
     * Возвращает название локации и ее сторону
     * @param int $id ид локации
     * @param boolean $arrow использовать указатель
     * @return string 
     */
    
public static function getNameWithIcon($id_location$arrow false) {
        
$location self::model()->findByPk($id_location);
        
$icon 'side_' $location->side_now;
        if (
$arrow) {
            
$icon .= '_' $arrow;
        }
        return 
'<img src="/images/icons/battles/' $icon '.png" alt="*" /> ' $location->name_location;
    }

    
/**
     * Подсчитывает доминацию в зависимости от стороны
     * @param type $side сторона
     * @return int
     */
    
public static function getDomination($side$level null) {
        
$criteria = new CDbCriteria();
        if (
$level 0) {
            if (
$level <= 18) {
                
$criteria->addCondition('level_max <= 18');
            }
            else {
                
$criteria->addCondition('level_max > 18');
            }
        }
        
$all self::model()->count();
        
$criteria->compare('side_now'$side);
        
$criteria->compare('status'1);
        
$count self::model()->count($criteria);
        
        
$result round($count 100 $all);
        if (
$result 70)
            
$result 70;
        elseif (
$result 30)
            
$result 30;

        return 
$result;
    }

    
/**
     * Выводит иконки в зависимости от доминации
     * @param type $side
     * @return int
     */
    
public static function getDominationIcon($side) {
        
$percent self::getDomination($side);
        if (
$percent >= 70)
            
$result 3;
        elseif (
$percent >= 50)
            
$result 2;
        else
            
$result 1;

        return 
$result;
    }

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