Ejemplo n.º 1
0
 public function indexAction()
 {
     if (!$this->getRequest()->isPost()) {
         return $this->page404();
     }
     $data = $this->getRequest()->getPost();
     $form = new Search($this->getServiceLocator());
     $form->setData($data);
     if ($form->isValid()) {
         $formSearchDetail = new SearchDetail($this->getServiceLocator());
         $dataSearch = $data['search'];
         $dataSearchs = preg_split('/[\\s,.-]+/', $dataSearch);
         /** @var \Subject\Model\SubjectMapper $subjectMapper */
         $subjectMapper = $this->getServiceLocator()->get('Subject/Model/SubjectMapper');
         $subjects = $subjectMapper->fetchSearch($dataSearchs);
         $subjectIds = [];
         foreach ($subjects as $subject) {
             $subjectIds[] = $subject->getId();
         }
         $expertsub = new Subject();
         $expertsub->addOption('subjectIds', $subjectIds);
         /** @var \Expert\Model\Expert\SubjectMapper $expertSubjectMapper */
         $expertSubjectMapper = $this->getServiceLocator()->get('Expert/Model/Expert/SubjectMapper');
         $mentors = $expertSubjectMapper->search($expertsub);
         $this->getViewModel()->setVariables(['expert' => $mentors]);
         $this->getViewModel()->setVariables(['searchContent' => $dataSearch]);
         $this->getViewModel()->setVariables(['subjects' => $subjects]);
         $this->getViewModel()->setVariables(['form' => $formSearchDetail]);
         return $this->getViewModel();
     }
 }
Ejemplo n.º 2
0
 /**
  * @author DuongNQ
  * @param \Expert\Model\Expert\Subject $expertsub
  */
 public function search($expertsub, $options)
 {
     $select = $this->getDbSql()->select(array('es' => self::TABLE_NAME));
     if ($expertsub->getSubjectId()) {
         $select->where(['es.subjectId' => $expertsub->getSubjectId()]);
     }
     if ($expertsub->getOption('subjectIds')) {
         $select->where(['es.subjectId' => $expertsub->getOption('subjectIds')]);
     }
     $select->order(['es.id' => 'DESC']);
     $select->group('es.expertId');
     //        vdump($this->getDbSql()->buildSqlString($select));die;
     $paginator = $this->preparePaginator($select, $options, new Subject());
     $userIds = array();
     $users = array();
     /** @var \Expert\Model\Expert\Subject $es */
     foreach ($paginator as $es) {
         $userIds[] = $es->getExpertId();
     }
     $subjects = $this->fetchAllSubject($expertsub->addOption('expertIds', $userIds));
     if ($userIds) {
         $select = $this->getDbSql()->select(['u' => UserMapper::TABLE_NAME]);
         $select->where(['u.id' => $userIds]);
         $query = $this->getDbSql()->buildSqlString($select);
         $result = $this->getDbAdapter()->query($query, Adapter::QUERY_MODE_EXECUTE);
         if (count($result)) {
             $resultArray = $result->toArray();
             foreach ($resultArray as $u) {
                 $user = new User();
                 $users[$u['id']] = $user->exchangeArray($u);
             }
         }
     }
     /** @var \Expert\Model\Expert\Subject $expertsub */
     foreach ($paginator->getCurrentModels() as $expertsub) {
         $userId = $expertsub->getExpertId();
         $expertsub->addOption('subject', isset($subjects[$userId]) ? $subjects[$userId] : null);
         $expertsub->addOption('user', isset($users[$userId]) ? $users[$userId] : null);
     }
     return $paginator;
 }