1: <?php
2: 3: 4: 5: 6: 7: 8: 9:
10:
11: if (!defined('XOOPS_ROOT_PATH')) exit();
12:
13: class Legacy_SearchModule extends XCube_Object
14: {
15: function getPropertyDefinition()
16: {
17: $ret = array(
18: S_PUBLIC_VAR("int mid"),
19: S_PUBLIC_VAR("string name")
20: );
21:
22: return $ret;
23: }
24: }
25:
26: class Legacy_SearchModuleArray extends XCube_ObjectArray
27: {
28: function getClassName()
29: {
30: return "Legacy_SearchModule";
31: }
32: }
33:
34:
35: class Legacy_SearchItem extends XCube_Object
36: {
37: function getPropertyDefinition()
38: {
39: $ret = array(
40: S_PUBLIC_VAR("string image"),
41: S_PUBLIC_VAR("string link"),
42: S_PUBLIC_VAR("string title"),
43: S_PUBLIC_VAR("int uid"),
44: S_PUBLIC_VAR("int time")
45: );
46:
47: return $ret;
48: }
49: }
50:
51: class Legacy_SearchItemArray extends XCube_ObjectArray
52: {
53: function getClassName()
54: {
55: return "Legacy_SearchItem";
56: }
57: }
58:
59: class Legacy_SearchModuleResult extends XCube_Object
60: {
61: function getPropertyDefinition()
62: {
63: $ret = array(
64: S_PUBLIC_VAR("int mid"),
65: S_PUBLIC_VAR("string name"),
66: S_PUBLIC_VAR("int has_more"),
67: S_PUBLIC_VAR("Legacy_SearchItemArray results"),
68: S_PUBLIC_VAR("string showall_link")
69: );
70:
71: return $ret;
72: }
73: }
74:
75: class Legacy_SearchModuleResultArray extends XCube_ObjectArray
76: {
77: function getClassName()
78: {
79: return "Legacy_SearchModuleResult";
80: }
81: }
82:
83: class Legacy_ArrayOfInt extends XCube_ObjectArray
84: {
85: function getClassName()
86: {
87: return "int";
88: }
89: }
90:
91: class Legacy_ArrayOfString extends XCube_ObjectArray
92: {
93: function getClassName()
94: {
95: return "string";
96: }
97: }
98:
99: 100: 101:
102: class Legacy_SearchService extends XCube_Service
103: {
104: var $mServiceName = "Legacy_SearchService";
105: var $mNameSpace = "Legacy";
106: var $mClassName = "Legacy_SearchService";
107:
108: function prepare()
109: {
110: $this->addType('Legacy_SearchModule');
111: $this->addType('Legacy_SearchModuleArray');
112: $this->addType('Legacy_SearchItem');
113: $this->addType('Legacy_SearchItemArray');
114: $this->addType('Legacy_SearchModuleResult');
115: $this->addType('Legacy_SearchModuleResultArray');
116: $this->addType('Legacy_ArrayOfInt');
117: $this->addType('Legacy_ArrayOfString');
118:
119: $this->addFunction(S_PUBLIC_FUNC('Legacy_SearchItemArray searchItems(int mid, Legacy_ArrayOfString queries, string andor, int maxhit, int start)'));
120: $this->addFunction(S_PUBLIC_FUNC('Legacy_SearchItemArray searchItemsOfUser(int mid, int uid, int maxhit, int start)'));
121: $this->addFunction(S_PUBLIC_FUNC('Legacy_SearchModuleArray getActiveModules()'));
122: }
123:
124: function getActiveModules()
125: {
126:
127:
128:
129: static $ret;
130: if (isset($ret)) return $ret;
131:
132: $handler =& xoops_gethandler('module');
133:
134: $criteria = new CriteriaCompo();
135: $criteria->add(new Criteria('isactive', 1));
136: $criteria->add(new Criteria('hassearch', 1));
137:
138:
139: $db = $handler->db;
140:
141: $sort = $criteria->getSort();
142: $sql = 'SELECT mid,name FROM '.$db->prefix('modules').' '.$criteria->renderWhere().
143: ($sort?' ORDER BY '.$sort.' '.$criteria->getOrder():' ORDER BY weight '.$criteria->getOrder().', mid ASC');
144:
145: $result = $db->query($sql);
146:
147: $handler =& xoops_gethandler('groupperm');
148: $groupArr = Legacy_SearchUtils::getUserGroups();
149:
150: $ret = array();
151: while (list($mid, $name) = $db->fetchRow($result)) {
152: if ($handler->checkRight('module_read', $mid, $groupArr)) {
153: $ret[] = array('mid' => $mid, 'name' => $name);
154: }
155: }
156:
157: return $ret;
158: }
159:
160: function searchItems()
161: {
162:
163:
164:
165: $root =& XCube_Root::getSingleton();
166: $request =& $root->mContext->mRequest;
167:
168: return $this->_searchItems((int)$request->getRequest('mid'), $request->getRequest('queries'), $request->getRequest('andor'), (int)$request->getRequest('maxhit'), (int)$request->getRequest('start'), 0);
169: }
170:
171: function searchItemsOfUser()
172: {
173:
174:
175:
176: $root =& XCube_Root::getSingleton();
177: $request =& $root->mContext->mRequest;
178:
179: return $this->_searchItems((int)$request->getRequest('mid'), null, 'and', (int)$request->getRequest('maxhit'), (int)$request->getRequest('start'), (int)$request->getRequest('uid'));
180: }
181:
182: 183: 184:
185: private function _searchItems($mid, $queries, $andor, $max_hit, $start, $uid)
186: {
187: $ret = array();
188:
189: static $moduleArr;
190: if (!isset($moduleArr)) {
191: $moduleArr = array();
192: foreach ($this->getActiveModules() as $mod) {
193: $moduleArr[$mod['mid']] = $mod['name'];
194: }
195: }
196:
197: if (!isset($moduleArr[$mid])) return $ret;
198:
199: static $timezone;
200: if (!isset($timezone)) {
201: $root =& XCube_Root::getSingleton();
202: $timezone = $root->mContext->getXoopsConfig('server_TZ') * 3600;
203: }
204:
205: $handler =& xoops_gethandler('module');
206: $xoopsModule =& $handler->get($mid);
207: if (!is_object($xoopsModule)) {
208: return $ret;
209: }
210:
211: if (!$xoopsModule->get('isactive') || !$xoopsModule->get('hassearch')) {
212: return $ret;
213: }
214:
215: $module =& Legacy_Utils::createModule($xoopsModule, false);
216: $results = $module->doLegacyGlobalSearch($queries, $andor, $max_hit, $start, $uid);
217:
218: if (is_array($results) && count($results) > 0) {
219: foreach (array_keys($results) as $key) {
220: $timeval =& $results[$key]['time'];
221:
222:
223:
224:
225: if ($timeval) $timeval -= $timezone;
226: }
227: }
228:
229: return $results;
230: }
231: }
232:
233: class Legacy_SearchUtils
234: {
235: function getUserGroups()
236: {
237: $root =& XCube_Root::getSingleton();
238: $user =& $root->mController->mRoot->mContext->mXoopsUser;
239: $groups = array();
240:
241: if (!is_object($user)) {
242: $groups = XOOPS_GROUP_ANONYMOUS;
243: }
244: else {
245: $groups = $user->getGroups();
246: }
247:
248: return $groups;
249: }
250: }
251:
252: ?>
253: