/**
  * @brief search file
  *
  * @param query query
  * @param limit the maximum number of rows to return
  * @param offset the offset of the first row to return
  * @param uid user ID
  * @return array of item id
  */
 function search($query, $limit, $offset, $uid)
 {
     $msg = false;
     $iids = false;
     $dummy = false;
     $search_cache_id = false;
     $_SESSION['XNPSID'] = session_id();
     $member_handler =& xoops_gethandler('member');
     if (empty($GLOBALS['xoopsUser'])) {
         $GLOBALS['xoopsUser'] = $member_handler->getUser($uid);
     }
     if (xnpSearchExec('quicksearch', $query, 'all', false, $dummy, $dummy, $dummy, $search_cache_id, false, 'file')) {
         // search_cache_id -> file_ids
         $criteria = new Criteria('search_cache_id', $search_cache_id);
         $criteria->setSort('item_id');
         $criteria->setStart($offset);
         if ($limit) {
             $criteria->setLimit($limit);
         }
         $join = new XooNIpsJoinCriteria('xoonips_search_cache_file', 'file_id', 'file_id', 'LEFT');
         $file_handler =& xoonips_getormhandler('xoonips', 'file');
         $files =& $file_handler->getObjects($criteria, false, 'item_id', true, $join);
         if (false === $files) {
             return false;
         }
         $item_ids = array();
         foreach ($files as $file) {
             $item_ids[] = $file->get('item_id');
         }
         return $item_ids;
     } else {
         return false;
     }
 }
 /**
  * search metadata and return array of identifiers
  * @access private
  * @param int $repository_id zero is no repository specified.
  * @param string $keyword search keyword string
  * @return search cache id or false
  */
 function searchMetadata($repository_id, $keyword, $order_by, $order_dir)
 {
     $metadata_handler =& xoonips_getormhandler('xoonips', 'oaipmh_metadata');
     $repository_handler =& xoonips_getormhandler('xoonips', 'oaipmh_repositories');
     $cache_handler =& xoonips_getormhandler('xoonips', 'search_cache');
     $cache_metadata_handler =& xoonips_getormhandler('xoonips', 'search_cache_metadata');
     if ($repository_id == 0 && strval($keyword) == '') {
         return $search_cache_id;
     }
     $result = array();
     if (strval($keyword) == '') {
         $metadata =& $metadata_handler->getObjects(new Criteria('repository_id', $repository_id));
         foreach ($metadata as $data) {
             $result[] = $data->get('identifier');
         }
     } else {
         if (!xnpSearchExec('quicksearch', $keyword, 'metadata', false, $errormessage, $item_ids, $search_var, $search_cache_id, 'metadata')) {
             return false;
         }
         if ($repository_id == 0) {
             return $search_cache_id;
         }
         global $xoopsDB;
         if (!$cache_handler->get($search_cache_id)) {
             return false;
         }
         $criteria = new CriteriaCompo();
         $criteria->add(new Criteria('search_cache_id', $search_cache_id));
         $criteria->add(new Criteria('repository_id', $repository_id));
         $join = new XooNIpsJoinCriteria('xoonips_oaipmh_metadata', 'identifier', 'identifier', 'INNER');
         $metadata_cache = $cache_metadata_handler->getObjects($criteria, false, '', false, $join);
         foreach ($metadata_cache as $cache) {
             $result[] = $cache->get('identifier');
         }
     }
     return $this->createCache($result);
 }
function xoonips_itemsubtype_search($keyword, $search_itemtype, $search_only_private, &$errorMessage, &$search_cache_id)
{
    global $xoopsUser;
    $iids = array();
    $search_var = array();
    //not used here
    $res = xnpSearchExec('itemsubtypesearch', $keyword, $search_itemtype, $search_only_private, $errorMessage, $iids, $search_var, $search_cache_id, 'item');
    // record events(advanced search)
    $item_type_handler =& xoonips_getormhandler('xoonips', 'item_type');
    $item_types =& $item_type_handler->getObjects();
    $search_target = array();
    foreach ($item_types as $item_type) {
        if (isset($_POST[$item_type->get('name')])) {
            $search_target[] = $item_type->get('name');
        }
    }
    $search_keywords = array();
    // characeter strings that brings search condition together
    $formdata =& xoonips_getutility('formdata');
    $mysearch_vars = $formdata->getValueArray('post', 'search_var', 's', false);
    if (!empty($mysearch_vars)) {
        foreach ($mysearch_vars as $var_name) {
            $ar = explode('_', $var_name);
            $var = $formdata->getValue('post', $var_name, 's', false);
            if (in_array($ar[0], $search_target) && !is_null($var)) {
                if (!is_array($var)) {
                    if (strlen($var) != 0) {
                        $search_keywords[] = urlencode($var_name) . '=' . urlencode($var);
                    }
                } else {
                    foreach ($var as $tmp_words) {
                        $search_keywords[] = urlencode($var_name) . '=' . urlencode($tmp_words);
                    }
                }
            }
        }
        $eventlog_handler =& xoonips_getormhandler('xoonips', 'event_log');
        $eventlog_handler->recordAdvancedSearchEvent($search_keywords);
    }
    return $iids;
}
 /**
  * @brief search item
  *
  * @param query query ( string or CriteriaElement )
  * @param limit the maximum number of rows to return(0 = no limit)
  * @param offset the offset of the first row to return(0 = from beginning)
  * @param uid user ID
  * @return array of item id
  */
 function search($query, $limit, $offset, $uid)
 {
     if (!$this->iteminfo) {
         return array();
     }
     $modulename = $this->iteminfo['ormcompo']['module'];
     $dummy = false;
     $search_cache_id = false;
     // save xoopsUser
     if (isset($GLOBALS['xoopsUser'])) {
         $old_xoopsUser = $GLOBALS['xoopsUser'];
     } else {
         $old_xoopsUser = null;
     }
     // prepare for xnpSearchExec
     $member_handler =& xoops_gethandler('member');
     $GLOBALS['xoopsUser'] = $member_handler->getUser($uid);
     // search
     $item_ids = array();
     if (xnpSearchExec('quicksearch', $query, $modulename, false, $dummy, $dummy, $dummy, $search_cache_id, false, 'item_metadata')) {
         $search_cache_item_handler =& xoonips_getormhandler('xoonips', 'search_cache_item');
         $criteria = new Criteria('search_cache_id', $search_cache_id);
         $criteria->setSort('item_id');
         $criteria->setStart($offset);
         if ($limit) {
             $criteria->setLimit($limit);
         }
         $search_cache_items =& $search_cache_item_handler->getObjects($criteria);
         foreach ($search_cache_items as $search_cache_item) {
             $item_ids[] = $search_cache_item->get('item_id');
         }
     }
     // restore xoopsUser
     $GLOBALS['xoopsUser'] = $old_xoopsUser;
     return $item_ids;
 }