/**
  * _setTextRequest
  * 
  * @param   string	$key
  * @param   string	$request
  * 
  * @return  void
  **/
 protected function _setTextRequest($key, $request)
 {
     $this->mNavi->addExtra($key, $request);
     //multiple keywords is requested by dividing space
     $reqArr = Xcck_SearchUtils::splitKeywords($request);
     if (count($reqArr) === 0) {
         return;
     }
     $cri = new CriteriaCompo();
     foreach ($reqArr as $value) {
         $cri->add(new Criteria($key, Xcck_SearchUtils::makeKeyword($value), 'LIKE'));
     }
     $this->_mCriteria->add($cri);
 }
 /**
  * fetch
  * 
  * @param   string	$dirname
  * 
  * @return  void
  **/
 public function fetch($dirname)
 {
     parent::fetch();
     $request = XCube_Root::getSingleton()->mContext->mRequest;
     if (($catId = $request->getRequest('category_id')) !== null) {
         $this->mNavi->addExtra('category_id', (int) $catId);
     }
     //show all term or show only from start to end date
     $show = $request->getRequest('show') === 'all' ? false : true;
     $status = $request->getRequest('status');
     $status = $show ? 10 : (isset($status) ? (int) $status : Lenum_Status::PUBLISHED);
     //get child category's data ?
     $child = false;
     if ($request->getRequest('child') === "all") {
         $child = true;
     } elseif ($request->getRequest('child') === "single") {
         $child = false;
     }
     $this->_mCriteria = Xcck_Utils::getListCriteria($dirname, (int) $catId, $child, $this->mSort, $status, $show);
     if (($value = $request->getRequest('page_id')) !== null) {
         $this->mNavi->addExtra('page_id', $value);
         $this->_mCriteria->add(new Criteria('page_id', $value));
     }
     if (($value = $request->getRequest('title')) !== null) {
         $this->_setTextRequest('title', $value);
     }
     if (($value = $request->getRequest('p_id')) !== null) {
         $this->mNavi->addExtra('p_id', $value);
         $this->_mCriteria->add(new Criteria('p_id', $value));
     }
     if (($value = $request->getRequest('descendant')) !== null) {
         $this->mNavi->addExtra('descendant', $value);
         $this->_mCriteria->add(new Criteria('descendant', $value));
     }
     if (($value = $request->getRequest('uid')) !== null) {
         $this->mNavi->addExtra('uid', $value);
         $this->_mCriteria->add(new Criteria('uid', $value));
     }
     if (($value = $request->getRequest('maintable_id')) !== null) {
         $this->mNavi->addExtra('maintable_id', $value);
         $this->_mCriteria->add(new Criteria('maintable_id', $value));
     }
     if (($value = $request->getRequest('status')) !== null) {
         $this->mNavi->addExtra('status', $value);
         //$this->_mCriteria->add(new Criteria('status', $value));
     }
     if (($value = $request->getRequest('posttime')) !== null) {
         $this->mNavi->addExtra('posttime', $value);
         $this->_mCriteria->add(new Criteria('posttime', $value));
     }
     if (($value = $request->getRequest('updatetime')) !== null) {
         $this->mNavi->addExtra('updatetime', $value);
         $this->_mCriteria->add(new Criteria('updatetime', $value));
     }
     //Search by keyword: search all string and text field
     if (($value = $request->getRequest('keyword')) !== null) {
         $this->mNavi->addExtra('keywords', $value);
         Xcck_SearchUtils::makeSearchCriteria($this->_mCriteria, $dirname, $value);
     }
     foreach ($this->mDefinitions as $definition) {
         $value = $request->getRequest($definition->get('field_name'));
         if (isset($value) && $value !== "") {
             if ($definition->get('field_type') == Xcck_FieldType::STRING || $definition->get('field_type') == Xcck_FieldType::TEXT) {
                 $this->_setTextRequest($definition->get('field_name'), $value);
             } else {
                 $this->mNavi->addExtra($definition->get('field_name'), $value);
                 $this->_mCriteria->add(new Criteria($definition->get('field_name'), $value));
             }
         }
     }
     if (($value = $request->getRequest('show')) !== null) {
         $this->mNavi->addExtra('show', $value);
     }
     if (($value = $request->getRequest('child')) !== null) {
         $this->mNavi->addExtra('child', $value);
     }
     if (($tags = $request->getRequest('tag')) !== null) {
         $this->_setTagRequest($tags, $dirname);
     }
     //$this->_mCriteria->addSort($this->getSort(), $this->getOrder());
 }
 /**
  * _setRequest
  * 
  * @param   Xcck_DefinitionObject    $definition
  * @param   mixed[]    $request
  * 
  * @return  void
  **/
 protected function _setRequest(Xcck_DefinitionObject $definition, $request)
 {
     if (!isset($request)) {
         return;
     }
     foreach (array_keys($request) as $key) {
         if (count($request[$key]) !== 2) {
             continue;
         }
         $value = $request[$key][0];
         $cond = (int) $request[$key][1];
         //Xcck_Cond search condition
         //set criteria
         switch ($definition->get('field_type')) {
             case Xcck_FieldType::STRING:
             case Xcck_FieldType::TEXT:
             case Xcck_FieldType::URI:
                 if ($cond === Xcck_Cond::LIKE || $cond === Xcck_Cond::NOTLIKE) {
                     $reqArr = Xcck_SearchUtils::splitKeywords($value);
                     if (count($reqArr) === 0) {
                         continue 2;
                     }
                     $cri = new CriteriaCompo();
                     foreach ($reqArr as $value) {
                         $cri->add(new Criteria($definition->get('field_name'), Xcck_SearchUtils::makeKeyword($value), Xcck_Cond::getString($cond)));
                     }
                     $this->_mCriteria->add($cri);
                 } else {
                     $this->_mCriteria->add(new Criteria($definition->get('field_name'), $value, Xcck_Cond::getString($cond)));
                 }
                 break;
             case Xcck_FieldType::DATE:
                 if ($cond === Xcck_Cond::LIKE) {
                     $this->_mCriteria->add(new Criteria($definition->get('field_name'), $this->_makeUnixtime($value, 'start'), Xcck_Cond::getString(Xcck_Cond::GE)));
                     $this->_mCriteria->add(new Criteria($definition->get('field_name'), $this->_makeUnixtime($value, 'end'), Xcck_Cond::getString(Xcck_Cond::LT)));
                 } elseif ($cond === Xcck_Cond::LE) {
                     $this->_mCriteria->add(new Criteria($definition->get('field_name'), $this->_makeUnixtime($value, 'end'), Xcck_Cond::getString(Xcck_Cond::LT)));
                 } else {
                     $this->_mCriteria->add(new Criteria($definition->get('field_name'), $this->_makeUnixtime($value, 'start'), Xcck_Cond::getString($cond)));
                 }
                 break;
             default:
                 $this->_mCriteria->add(new Criteria($definition->get('field_name'), $value, Xcck_Cond::getString($cond)));
                 break;
         }
         //set page navi
         $this->mNavi->addExtra($definition->get('field_name'), $request);
         //            $this->mNavi->addExtra(sprintf('%s[%d][%d]', $definition->get('field_name'), $key, 1), $request[$key][1]);
     }
 }