106 public $mServiceName =
'Legacy_SearchService';
107 public $mNameSpace =
'Legacy';
108 public $mClassName =
'Legacy_SearchService';
110 public function prepare()
112 $this->addType(
'Legacy_SearchModule');
113 $this->addType(
'Legacy_SearchModuleArray');
114 $this->addType(
'Legacy_SearchItem');
115 $this->addType(
'Legacy_SearchItemArray');
116 $this->addType(
'Legacy_SearchModuleResult');
117 $this->addType(
'Legacy_SearchModuleResultArray');
118 $this->addType(
'Legacy_ArrayOfInt');
119 $this->addType(
'Legacy_ArrayOfString');
121 $this->addFunction(S_PUBLIC_FUNC(
'Legacy_SearchItemArray searchItems(int mid, Legacy_ArrayOfString queries, string andor, int maxhit, int start)'));
122 $this->addFunction(S_PUBLIC_FUNC(
'Legacy_SearchItemArray searchItemsOfUser(int mid, int uid, int maxhit, int start)'));
123 $this->addFunction(S_PUBLIC_FUNC(
'Legacy_SearchModuleArray getActiveModules()'));
126 public function getActiveModules()
136 $handler =& xoops_gethandler(
'module');
139 $criteria->add(
new Criteria(
'isactive', 1));
140 $criteria->add(
new Criteria(
'hassearch', 1));
145 $sort = $criteria->getSort();
146 $sql =
'SELECT mid,name FROM '.$db->prefix(
'modules').
' '.$criteria->renderWhere().
147 ($sort?
' ORDER BY '.$sort.
' '.$criteria->getOrder():
' ORDER BY weight '.$criteria->getOrder().
', mid ASC');
149 $result = $db->query($sql);
151 $handler =& xoops_gethandler(
'groupperm');
152 $groupArr = Legacy_SearchUtils::getUserGroups();
155 while ([$mid, $name] = $db->fetchRow($result)) {
156 if ($handler->checkRight(
'module_read', $mid, $groupArr)) {
157 $ret[] = [
'mid' => $mid,
'name' => $name];
164 public function searchItems()
169 $root =& XCube_Root::getSingleton();
170 $request =& $root->mContext->mRequest;
172 return $this->_searchItems((
int)$request->getRequest(
'mid'), $request->getRequest(
'queries'), $request->getRequest(
'andor'), (
int)$request->getRequest(
'maxhit'), (
int)$request->getRequest(
'start'), 0);
175 public function searchItemsOfUser()
180 $root =& XCube_Root::getSingleton();
181 $request =& $root->mContext->mRequest;
183 return $this->_searchItems((
int)$request->getRequest(
'mid'),
null,
'and', (
int)$request->getRequest(
'maxhit'), (
int)$request->getRequest(
'start'), (
int)$request->getRequest(
'uid'));
196 private function _searchItems($mid, $queries, $andor, $max_hit, $start, $uid)
201 if (!isset($moduleArr)) {
203 foreach ($this->getActiveModules() as $mod) {
204 $moduleArr[$mod[
'mid']] = $mod[
'name'];
208 if (!isset($moduleArr[$mid])) {
213 if (!isset($timezone)) {
214 $root =& XCube_Root::getSingleton();
215 $timezone = $root->mContext->getXoopsConfig(
'server_TZ') * 3600;
218 $handler =& xoops_gethandler(
'module');
219 $xoopsModule =& $handler->get($mid);
220 if (!is_object($xoopsModule)) {
224 if (!$xoopsModule->get(
'isactive') || !$xoopsModule->get(
'hassearch')) {
228 $module =& Legacy_Utils::createModule($xoopsModule,
false);
229 $results = $module->doLegacyGlobalSearch($queries, $andor, $max_hit, $start, $uid);
231 if (is_array($results) && count($results) > 0) {
232 foreach (array_keys($results) as $key) {
233 $timeval =& $results[$key][
'time'];
239 $timeval -= $timezone;