/** * Показатели, переданные в форме * * @return CArrayList */ public function getIndexes() { if (is_null($this->_indexes)) { $this->_indexes = new CArrayList(); foreach ($this->getItems()->getItems() as $key => $item) { if (strpos($key, "indexes") !== false) { foreach ($item as $value) { $indexValue = CRatingManager::getRatingIndexValue($value); if (!is_null($indexValue)) { $this->_indexes->add($indexValue->getId(), $indexValue); } } } } } return $this->_indexes; }
public function actionDeleteValue() { $value = CRatingManager::getRatingIndexValue(CRequest::getInt("id")); if (!is_null($value)) { $index = $value->parentIndex->id; $value->remove(); $this->redirect("?action=edit&id=" . $index); return true; } $this->redirect("?action=index"); }
public function actionGetDataForChart() { $data = array(); if (array_key_exists("data", $_POST)) { $data = $_POST["data"]; } // определяем, в каких годах искать $years = new CArrayList(); if (array_key_exists("years", $data)) { foreach ($data['years'] as $item) { $year = CTaxonomyManager::getYear($item); if (!is_null($year)) { $years->add($year->getId(), $year); } } } else { $years->add(CUtils::getCurrentYear()->getId(), CUtils::getCurrentYear()); } // по каким показателям показывать $indexes = new CArrayList(); if (array_key_exists("indexes", $data)) { foreach ($data["indexes"] as $item) { foreach (CRatingManager::getRatingIndexesByName($item)->getItems() as $index) { if ($years->hasElement($index->year_id)) { $indexes->add($index->getId(), $index); } } } } else { foreach ($years->getItems() as $year) { foreach (CRatingManager::getRatingIndexesByYear($year)->getItems() as $index) { $indexes->add($index->getId(), $index); } } } // по каким людям показывать $persons = new CArrayList(); if (array_key_exists("persons", $data)) { foreach ($data["persons"] as $item) { $person = CStaffManager::getPerson($item); if (!is_null($person)) { $persons->add($person->getId(), $person); } } } else { // показывать по всем, у кого показатели есть в указанных годах foreach (CStaffManager::getAllPersons()->getItems() as $person) { foreach ($years->getItems() as $year) { foreach ($person->getRatingIndexesByYear($year)->getItems() as $index) { if ($indexes->hasElement($index->getId())) { $persons->add($person->getId(), $person); } } } } } $res = array(); // начинаем собирать инфу по людям // подписи к осям $axis = array(); $i = 0; foreach ($persons->getItems() as $person) { $i++; $axis[] = $person->getName(); //$axis[] = $i; } // все показатели, которые есть у выбранных людей (id всех показателей) // за все годы $resIndexes = array(); foreach ($persons->getItems() as $person) { foreach ($years->getItems() as $year) { foreach ($person->getRatingIndexesByYear($year)->getItems() as $index) { if ($indexes->hasElement($index->getId())) { $resIndexes[$index->title] = $index->title; } } } } $indicators = array(); // данные по годам // данные должны возвращаться в том же порядке, в котором у нас идут люди foreach ($resIndexes as $key => $value) { foreach ($years->getItems() as $year) { $data = array(); // собираем данные по каждому человеку foreach ($persons->getItems() as $person) { $indexValue = 0; foreach ($person->getRatingIndexesByYear($year)->getItems() as $index) { if ($index->title == $key) { $indexValue = $index->getIndexValue(); } } $data[] = $indexValue; } $indicator = array("name" => $value . " (" . $year->name . ")", "data" => $data, "stack" => $year->name); $indicators[] = $indicator; } } $res["axis"] = $axis; $res["series"] = $indicators; echo json_encode($res); }
/** * @static * @return CArrayList */ public static function getAllRatingIndexes() { if (!self::$_cacheIndexesInit) { self::$_cacheIndexesInit = true; foreach (CActiveRecordProvider::getAllFromTable(TABLE_RATING_INDEXES)->getItems() as $item) { $obj = new CRatingIndex($item); self::getCacheIndexes()->add($obj->getId(), $obj); } } return self::getCacheIndexes(); }
public function actionFillIndexes() { $form = new CPersonRatingAutofillForm(); $form->setAttributes(CRequest::getArray($form::getClassName())); $year = CTaxonomyManager::getYear($form->year_id); // берем показатели указанного года foreach (CRatingManager::getRatingIndexesByYear($year)->getItems() as $index) { foreach ($form->persons as $personId) { $person = CStaffManager::getPerson($personId); if (!is_null($person)) { // удаляем старые показатели foreach (CActiveRecordProvider::getWithCondition(TABLE_PERSON_RATINGS, "person_id = " . $person->getId() . " and year_id = " . $year->getId())->getItems() as $item) { $item->remove(); } // если поле не многозначное, то способ вычисления лежит в показателе if (!$index->isMultivalue()) { if ($index->person_method != "") { $v = null; eval('$v = $person->' . $index->person_method . ';'); if (!is_null($v)) { if (strtoupper(get_class($v)) == "CTERM") { if ($index->getIndexValues()->hasElement($v->getId())) { $personValue = new CPersonRatingIndex(); $personValue->person_id = $person->getId(); $personValue->year_id = $year->getId(); $personValue->index_id = $index->getIndexValues()->getItem($v->getId())->getId(); $personValue->save(); } } } } } else { /** * Это многозначный показатель, вычисляется отдельно каждое значение */ foreach ($index->getIndexValues()->getItems() as $indexValue) { if ($indexValue->evaluate_code != "") { if ($indexValue->evaluate_method == "1") { // это sql-запрос $query = $indexValue->evaluate_code; $query = str_replace("%person%", $person->getId(), $query); $query = str_replace("%year%", $year->getId(), $query); $res = mysql_query($query); if (mysql_errno() == 0) { while ($row = mysql_fetch_assoc($res)) { if (array_key_exists("res", $row)) { if ($row['res'] == "1") { $personValue = new CPersonRatingIndex(); $personValue->person_id = $person->getId(); $personValue->year_id = $year->getId(); $personValue->index_id = $indexValue->getId(); $personValue->save(); } } break; } } } elseif ($indexValue->evaluate_method == "2") { // это php код $v = null; $code = $indexValue->evaluate_code; $code = str_replace("%person%", $person->getId(), $code); $code = str_replace("%year%", $year->getId(), $code); eval('$v = ' . $code . ';'); if ($v === true) { $personValue = new CPersonRatingIndex(); $personValue->person_id = $person->getId(); $personValue->year_id = $year->getId(); $personValue->index_id = $indexValue->getId(); $personValue->save(); } } } } } } } } $this->redirect("persons.php?action=index"); }