/** * @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; }