<div class="col-lg-12"> <?php $form = $this->beginWidget('ActiveForm', array('htmlOptions' => array('role' => 'form', 'class' => 'form-inline'), 'method' => 'get', 'action' => array('/competition/index'))); ?> <?php echo Html::formGroup($model, 'year', array(), $form->labelEx($model, 'year'), CHtml::dropDownList('year', $model->year, Competition::getYears(), array('class' => 'form-control', 'prompt' => Yii::t('common', 'All')))); ?> <?php echo Html::formGroup($model, 'type', array(), $form->labelEx($model, 'type'), CHtml::dropDownList('type', $model->type, Competition::getTypes(), array('class' => 'form-control', 'prompt' => Yii::t('common', 'All')))); ?> <?php echo Html::formGroup($model, 'province', array(), $form->labelEx($model, 'province'), CHtml::dropDownList('province', $model->province, Region::getProvinces(false), array('class' => 'form-control', 'prompt' => Yii::t('common', 'All')))); ?> <?php echo Html::formGroup($model, 'event', array(), $form->labelEx($model, 'event'), CHtml::dropDownList('event', $model->event, Events::getNormalTranslatedEvents(), array('class' => 'form-control', 'prompt' => Yii::t('common', 'All')))); ?> <button type="submit" class="btn btn-theme"><?php echo Yii::t('common', 'Submit'); ?> </button> <?php $this->endWidget(); ?> <?php $this->widget('GridView', array('dataProvider' => $model->search(), 'template' => '{summary}{items}{pager}', 'enableSorting' => false, 'front' => true, 'emptyText' => Yii::t('Competition', 'No competitions now.'), 'rowCssClassExpression' => '$data->isInProgress() ? "success" : ($data->isEnded() ? "active" : "info")', 'columns' => array(array('name' => 'date', 'type' => 'raw', 'value' => '$data->getDisplayDate()'), array('name' => 'name', 'type' => 'raw', 'value' => '$data->getCompetitionLink()'), array('name' => 'province_id', 'type' => 'raw', 'value' => '$data->getLocationInfo("province")'), array('name' => 'city_id', 'type' => 'raw', 'value' => '$data->getLocationInfo("city")'), array('name' => 'venue', 'type' => 'raw', 'value' => '$data->getLocationInfo("venue")')))); ?> </div>
public static function build($statistic, $page = 1, $recursive = true) { $limit = self::$limit; $command = Yii::app()->wcaDb->createCommand()->select(array('sum(CASE WHEN value1>0 THEN 1 ELSE 0 END) +sum(CASE WHEN value2>0 THEN 1 ELSE 0 END) +sum(CASE WHEN value3>0 THEN 1 ELSE 0 END) +sum(CASE WHEN value4>0 THEN 1 ELSE 0 END) +sum(CASE WHEN value5>0 THEN 1 ELSE 0 END) AS solve', 'sum(CASE WHEN value1>-2 AND value1!=0 THEN 1 ELSE 0 END) +sum(CASE WHEN value2>-2 AND value2!=0 THEN 1 ELSE 0 END) +sum(CASE WHEN value3>-2 AND value3!=0 THEN 1 ELSE 0 END) +sum(CASE WHEN value4>-2 AND value4!=0 THEN 1 ELSE 0 END) +sum(CASE WHEN value5>-2 AND value5!=0 THEN 1 ELSE 0 END) AS attempt', 'competitionId', 'personId', 'personName', 'cellName', 'cityName', 'p.countryId', 'country.iso2'))->from('Results rs')->leftJoin('Persons p', 'rs.personId=p.id AND p.subid=1')->leftJoin('Countries country', 'p.countryId=country.id')->leftJoin('Competitions c', 'rs.competitionId=c.id'); if (isset($statistic['region'])) { ActiveRecord::applyRegionCondition($command, $statistic['region'], 'p.countryId'); } else { $command->where('p.countryId="China"'); } if (!empty($statistic['eventIds'])) { $command->andWhere(array('in', 'eventId', $statistic['eventIds'])); } if (isset($statistic['gender'])) { switch ($statistic['gender']) { case 'female': $command->andWhere('p.gender="f"'); break; case 'male': $command->andWhere('p.gender="m"'); break; } } $cmd = clone $command; $command->group('personId')->order('solve DESC, attempt ASC')->limit($limit)->offset(($page - 1) * $limit); $columns = array(array('header' => 'Yii::t("statistics", "Person")', 'value' => 'Persons::getLinkByNameNId($data["personName"], $data["personId"])', 'type' => 'raw'), array('header' => 'Yii::t("statistics", "Solves/Attempts")', 'value' => '$data["solve"] . "/" . $data["attempt"]')); if (isset($statistic['region'])) { $columns[] = array('header' => 'Yii::t("common", "Region")', 'value' => 'Region::getIconName($data["countryId"], $data["iso2"])', 'type' => 'raw'); } switch ($statistic['type']) { case 'competition': $columns[0] = array('header' => 'Yii::t("common", "Competition")', 'value' => 'CHtml::link(ActiveRecord::getModelAttributeValue($data, "name"), $data["url"])', 'type' => 'raw'); $rows = $command->where('c.countryId="China"')->group('competitionId')->queryAll(); $rows = array_map(function ($row) { return self::getCompetition($row); }, $rows); return self::makeStatisticsData($statistic, $columns, $rows); case 'person': $rows = $command->group('competitionId, personId')->limit($limit + 50)->queryAll(); $temp = array(); foreach ($rows as $row) { if (!isset($temp[$row['personId']])) { $temp[$row['personId']] = $row; } if (count($temp) == $limit) { break; } } $rows = array_map(function ($row) { return self::getCompetition($row); }, array_values($temp)); $columns[] = array('header' => 'Yii::t("common", "Competition")', 'value' => 'CHtml::link(ActiveRecord::getModelAttributeValue($data, "name"), $data["url"])', 'type' => 'raw'); return self::makeStatisticsData($statistic, $columns, $rows); case 'all': $rows = array(); foreach ($command->queryAll() as $row) { $row['rank'] = $row['solve'] . '_' . $row['attempt']; $rows[] = $row; } $statistic['count'] = $cmd->select('count(DISTINCT personId) AS count')->queryScalar(); $statistic['rank'] = ($page - 1) * $limit; $statistic['rankKey'] = 'rank'; if ($page > 1 && $rows !== array() && $recursive) { $stat = self::build($statistic, $page - 1, false); foreach (array_reverse($stat['rows']) as $row) { if ($row['rank'] === $rows[0]['rank']) { $statistic['rank']--; } else { break; } } } return self::makeStatisticsData($statistic, $columns, $rows); case 'year': $years = Competition::getYears(); $years = array_slice($years, 1); $solves = array(); foreach ($years as $key => $year) { $cmd = clone $command; $rows = $cmd->andWhere("year={$year}")->queryAll(); if (count($rows) < $limit) { unset($years[$key]); continue; } $solves[$year] = self::makeStatisticsData($statistic, $columns, $rows); } return self::makeStatisticsData($statistic, array('statistic' => $solves, 'select' => array_combine($years, $years))); } }