/** * Запускаем отрисовку виджета * * @return void */ public function run() { // Авторизован ли пользователь if (Yii::app()->user->isAuthenticated() === false) { return; } if (($user = Yii::app()->user->getProfile()) === null) { return; } // Загрузка таблицы для блока $table = Table::model()->with(array('markup'))->findByPK((int) $this->model_id); if ($table === null) { return; } // Генерируем уникальный код таблицы $tableCode = $this->block_id !== null ? $this->block_id . '-' : ''; $tableCode .= $table->id . '-' . mt_rand(100000, 999999); // Устанавливаем источники данных $personForm = new PersonForm(); $eventForm = new EventForm(); $beforeDescription = ''; $afterDescription = ''; $useAltTable = false; // Если Персона не установлена if ($this->person === null) { // Если источник данных - данные пользователя, // то берем все данные из профиля пользователя if ($table->source_destiny_table == Table::SOURCE_USER) { $this->person = new Person(); $this->person->setAttributes(array('name' => $user->profile->name, 'gender' => $user->profile->gender, 'date' => $user->profile->birth_date, 'time' => $user->profile->birth_time, 'city_id' => $user->profile->city_id)); } elseif ($table->source_destiny_table == Table::SOURCE_ADMIN) { $this->person = $table->person; } } // Если Событие не установлено if ($this->event === null) { // Если источник данных - данные от администратора, // то берем данные из БД if ($table->source_event_table == Table::SOURCE_ADMIN) { $this->event = $table->event; } } // Проверка данных if ($this->person !== null) { $validateResult = $this->person->validate(); $validateResult = $validateResult && ($this->event !== null ? $this->event->validate() : true); } // Если данные корректны if ($validateResult) { // Создаем калькулятор $calculator = new Calculator($this->person, $this->event); // Определяем активный столп if ($table->active_luck_pillar > 0) { $calculator->numCurrentLuckColumn = (int) $table->active_luck_pillar; } // Запуск расчета $calculator->run(); // Если задана разметка, запускаем анализаторы if (!empty($table->markup)) { // Анализатор $analyzer = new Analyzer($calculator); // Запуск анализа $analyzer->run(); $markupAnalyzer = new MarkupAnalyzer($table, $analyzer); $markupAnalyzer->run(); //var_dump($markupAnalyzer->getFoundedMarkupItems()); //exit(); // Найденные элементы разметки $foundedMarkupItems = $markupAnalyzer->getFoundedMarkupItems(); $useIndividualDescription = false; // Если не найден ни один элемент разметки if (empty($foundedMarkupItems)) { // Если используется альтернативная таблица if ($table->source_destiny_table == Table::SOURCE_USER && $table->use_alt_table) { // Используем альтернативную таблицу // Создаем калькулятор $calculator = new Calculator($table->altTable, $this->event); // Определяем активный столп if ($table->active_luck_pillar > 0) { $calculator->numCurrentLuckColumn = (int) $table->active_luck_pillar; } // Запуск расчета $calculator->run(); // Анализатор $analyzer = new Analyzer($calculator); $analyzer->run(); $markupAnalyzer = new MarkupAnalyzer($table, $analyzer); $markupAnalyzer->run(); // Альтернативное описание if ($table->description_place == Table::DESCRIPTION_PLACE_BEFORE) { $beforeDescription = $table->alt_description; } elseif ($table->description_place == Table::DESCRIPTION_PLACE_AFTER) { $afterDescription = $table->alt_description; } $useAltTable = true; } else { // В противном случае выводим основное описание if ($table->description_place == Table::DESCRIPTION_PLACE_BEFORE) { $beforeDescription = $table->description; } elseif ($table->description_place == Table::DESCRIPTION_PLACE_AFTER) { $afterDescription = $table->description; } } } else { $useIndividualDescription = true; } if ($useIndividualDescription) { // Формируем описания до таблиц и после для каждой найденной разметки foreach ($foundedMarkupItems as $markupItem) { if ($markupItem->description_place == TableMarkup::DESCRIPTION_PLACE_BEFORE) { // Общее описание $beforeDescription .= $markupItem->description; // Описание для женщины $beforeDescription .= $this->person->gender == Person::GENDER_FEMALE && $markupItem->description_f != '' ? $markupItem->description_f : ''; // Описание для мужчины $beforeDescription .= $this->person->gender == Person::GENDER_MALE && $markupItem->description_m != '' ? $markupItem->description_m : ''; } elseif ($markupItem->description_place == TableMarkup::DESCRIPTION_PLACE_AFTER) { // Общее описание $afterDescription .= $markupItem->description; // Описание для женщины $afterDescription .= $this->person->gender == Person::GENDER_FEMALE && $markupItem->description_f != '' ? $markupItem->description_f : ''; // Описание для мужчины $afterDescription .= $this->person->gender == Person::GENDER_MALE && $markupItem->description_m != '' ? $markupItem->description_m : ''; } } } } } else { // Формируем список ошибок $errors = array(); if ($this->person !== null) { foreach ($this->person->getErrors() as $key => $error) { $errors['Person'][$key] = $error; } } if ($this->event !== null) { foreach ($this->event->getErrors() as $key => $error) { $errors['Event'][$key] = $error; } } } //var_dump($beforeDescription); // Вывод в шаблон if (Yii::app()->request->isAjaxRequest) { // Если аякс-запрос, то перерисовываем только чарт $this->controller->renderPartial('//bazi/widgets/TableWidget/_chart', array('model' => $table, 'tableCode' => $tableCode, 'calculator' => $calculator, 'beforeDescription' => $beforeDescription, 'afterDescription' => $afterDescription, 'useAltTable' => $useAltTable, 'markupCells' => isset($markupAnalyzer) ? $markupAnalyzer->getMarkupCells() : array(), 'markupRelations' => isset($markupAnalyzer) ? $markupAnalyzer->getMarkupRelations() : array())); } else { $this->render($this->view, array('model' => $table, 'tableCode' => $tableCode, 'calculator' => $calculator, 'beforeDescription' => $beforeDescription, 'afterDescription' => $afterDescription, 'useAltTable' => $useAltTable, 'personForm' => $personForm, 'eventForm' => $eventForm, 'errors' => $errors, 'markupCells' => isset($markupAnalyzer) ? $markupAnalyzer->getMarkupCells() : array(), 'markupRelations' => isset($markupAnalyzer) ? $markupAnalyzer->getMarkupRelations() : array())); } }