Esempio n. 1
0
 /**
  * Редактирование расширенного профиля слушателя.
  */
 public function action_profile_extended_by_student()
 {
     /* Подгружаем менеджер ссылок */
     $links = Resources::getInstance()->links;
     /* Создаём экземпляры необходимых моделей */
     $user = Model_User::create();
     $region = Model_Region::create();
     $locality = Model_Locality::create();
     /* Получаем данные пользователя */
     $udata = (object) $user->getAuth();
     /* Создаём объект формы расширенного профиля */
     $action = $links->get('student.extended-profile');
     $form = Form_Profile_Student_Extended::create($action);
     $this->set('form', $form);
     $request = $this->getRequest();
     $method = $form->method();
     /* Если данных формы нет в запросе, */
     if (empty($request->{$method})) {
         /* и профиль слушателя уже заполнен, */
         if ($user->isExtendedProfileSet($udata->user_id)) {
             /* то загружаем данные базового профиля */
             $info = $user->getUserInfo($udata->user_id);
             /* И выводим их в форме */
             $form->setValue('surname', $info['surname']);
             $form->setValue('name', $info['name']);
             $form->setValue('patronymic', $info['patronymic']);
             /* Загружаем расширенный профиль */
             $profile = $user->getExtendedProfile($udata->user_id);
             /* И наполняем форму данными из него */
             $profile->passport->toForm($form);
             $profile->edu_doc->toForm($form);
             $profile->phones->toForm($form);
             /* Получаем по идентификаторам название региона и города */
             $r_name = $region->getName($profile->passport->regionId);
             $l_name = $locality->getFullName($profile->passport->cityId);
             /* Передаём их в форму */
             $form->setValue('region', $r_name);
             $form->setValue('city', $l_name);
         }
         /* Отображаем страничку с формой */
         $this->render();
     }
     /* Если же в запросе содержатся заполненные поля формы, */
     if (!$form->validate($request, $region, $locality)) {
         /* проверяем их и выводим ошибки */
         $this->render();
     }
     /* Если данные прошли проверку, заполняем ими контейнеры */
     $snp = (object) array('surname' => $form->surname->value, 'name' => $form->name->value, 'patronymic' => $form->patronymic->value);
     $passport = Model_User_Passport::create()->fromForm($form);
     $edu_doc = Model_User_EduDoc::create()->fromForm($form);
     $phones = Model_User_Phones::create()->fromForm($form);
     /* Обновляем фамилию-имя-отчество */
     $user->updateSNP($udata->user_id, $snp);
     /* Сохраняем паспортные данные */
     if (!$user->savePassport($udata->user_id, $passport)) {
         $msg = 'Ошибка при сохранении паспортных данных';
         $alias = 'student.extended-profile';
         $this->flash($msg, $links->get($alias), false);
     }
     /* Если в форме нет данных о документе об образовании, */
     if (empty($edu_doc->type)) {
         /* то удаляем возможные записи, если раньше они были внесены */
         $user->deleteEduDoc($udata->user_id);
     } elseif (!$user->saveEduDoc($udata->user_id, $edu_doc)) {
         $msg = 'Ошибка при сохранении данных документа об образовании';
         $alias = 'student.extended-profile';
         $this->flash($msg, $links->get($alias), false);
     }
     /* Если в форме нет данных о телефонах */
     if (empty($phones->mobile) && empty($phones->stationary)) {
         /* удаляем возможные записи из базы */
         $user->deletePhones($udata->user_id);
     } elseif (!$user->savePhones($udata->user_id, $phones)) {
         $msg = 'Ошибка при сохранении телефонов';
         $alias = 'student.extended-profile';
         $this->flash($msg, $links->get($alias), false);
     }
     /* Выводим сообщение об успешном редактировании профиля */
     $this->flash('Ваш профиль успешно обновлён', $links->get('student.apply'), false);
 }
Esempio n. 2
0
    /**
     * Получение данных расширенной анкеты слушателя.
     *
     * @param  int $user_id Идентификатор пользователя.
     * @return stdClass Данные расширенного профиля слушателя.
     */
    public function getExtendedProfile($user_id)
    {
        $aliasing = array('passport' => array('p', array('series', 'number', 'birthday', 'given_by', 'given_date', 'region_id', 'city_id', 'street', 'house', 'flat')), 'edu_doc' => array('ed', array('type', 'custom_type', 'number', 'exit_year', 'speciality', 'qualification')), 'phone' => array('ph', array('stationary', 'mobile')));
        $columns = array();
        foreach ($aliasing as $column_prefix => $tbl) {
            foreach ($tbl[1] as $column) {
                $columns[] = sprintf('%s.%s AS %s_%s', $tbl[0], $column, $column_prefix, $column);
            }
        }
        $sql = '
                SELECT ' . implode(', ' . CRLF, $columns) . '
                FROM ' . $this->_tables['users'] . ' u

                LEFT JOIN ' . $this->_tables['passports'] . ' p
                ON p.user_id = u.user_id

                LEFT JOIN ' . $this->_tables['edu_docs'] . ' ed
                ON ed.user_id = u.user_id

                LEFT JOIN ' . $this->_tables['phones'] . ' ph
                ON ph.user_id = u.user_id

                WHERE u.user_id = :uid AND
                      u.role = :role
            ';
        $values = array(':uid' => $user_id, ':role' => self::ROLE_STUDENT);
        $stmt = $this->prepare($sql);
        $stmt->execute($values);
        $profile = $stmt->fetch(Db_PdO::FETCH_ASSOC);
        $passport = Model_User_Passport::create()->fromRow($profile);
        $edu_doc = Model_User_EduDoc::create()->fromRow($profile);
        $phones = Model_User_Phones::create()->fromRow($profile);
        return (object) array('passport' => $passport, 'edu_doc' => $edu_doc, 'phones' => $phones);
    }