1: | <?php
|
2: | |
3: | |
4: | |
5: | |
6: | |
7: | |
8: | |
9: | |
10: | |
11: | |
12: | |
13: | |
14: | |
15: | |
16: |
|
17: | defined('XOOPS_ROOT_PATH') || exit('Restricted access');
|
18: |
|
19: | |
20: | |
21: | |
22: | |
23: | |
24: |
|
25: | class XoopsModule extends XoopsObject
|
26: | {
|
27: | |
28: | |
29: | |
30: |
|
31: | public $modinfo;
|
32: | |
33: | |
34: | |
35: |
|
36: | public $adminmenu;
|
37: | |
38: | |
39: | |
40: |
|
41: | public $_msg;
|
42: |
|
43: |
|
44: | public $mid;
|
45: | public $name;
|
46: | public $version;
|
47: | public $last_update;
|
48: | public $weight;
|
49: | public $isactive;
|
50: | public $dirname;
|
51: | public $hasmain;
|
52: | public $hasadmin;
|
53: | public $hassearch;
|
54: | public $hasconfig;
|
55: | public $hascomments;
|
56: |
|
57: | public $hasnotification;
|
58: |
|
59: | |
60: | |
61: |
|
62: | public function __construct()
|
63: | {
|
64: | parent::__construct();
|
65: | $this->initVar('mid', XOBJ_DTYPE_INT, null, false);
|
66: | $this->initVar('name', XOBJ_DTYPE_TXTBOX, null, true, 150);
|
67: | $this->initVar('version', XOBJ_DTYPE_TXTBOX, null, false);
|
68: | $this->initVar('last_update', XOBJ_DTYPE_INT, null, false);
|
69: | $this->initVar('weight', XOBJ_DTYPE_INT, 0, false);
|
70: | $this->initVar('isactive', XOBJ_DTYPE_INT, 1, false);
|
71: | $this->initVar('dirname', XOBJ_DTYPE_OTHER, null, true);
|
72: | $this->initVar('hasmain', XOBJ_DTYPE_INT, 0, false);
|
73: | $this->initVar('hasadmin', XOBJ_DTYPE_INT, 0, false);
|
74: | $this->initVar('hassearch', XOBJ_DTYPE_INT, 0, false);
|
75: | $this->initVar('hasconfig', XOBJ_DTYPE_INT, 0, false);
|
76: | $this->initVar('hascomments', XOBJ_DTYPE_INT, 0, false);
|
77: |
|
78: | $this->initVar('hasnotification', XOBJ_DTYPE_INT, 0, false);
|
79: | }
|
80: |
|
81: | |
82: | |
83: | |
84: | |
85: | |
86: |
|
87: | public function loadInfoAsVar($dirname, $verbose = true)
|
88: | {
|
89: | $dirname = basename($dirname);
|
90: | if (!isset($this->modinfo)) {
|
91: | $this->loadInfo($dirname, $verbose);
|
92: | }
|
93: | $this->setVar('name', $this->modinfo['name'], true);
|
94: | $this->setVar('version', $this->modinfo['version'], true);
|
95: | $this->setVar('dirname', $this->modinfo['dirname'], true);
|
96: | $hasmain = (isset($this->modinfo['hasMain']) && $this->modinfo['hasMain'] == 1) ? 1 : 0;
|
97: | $hasadmin = (isset($this->modinfo['hasAdmin']) && $this->modinfo['hasAdmin'] == 1) ? 1 : 0;
|
98: | $hassearch = (isset($this->modinfo['hasSearch']) && $this->modinfo['hasSearch'] == 1) ? 1 : 0;
|
99: | $hasconfig = ((isset($this->modinfo['config']) && \is_array($this->modinfo['config'])) || !empty($this->modinfo['hasComments'])) ? 1 : 0;
|
100: | $hascomments = (isset($this->modinfo['hasComments']) && $this->modinfo['hasComments'] == 1) ? 1 : 0;
|
101: |
|
102: | $hasnotification = (isset($this->modinfo['hasNotification']) && $this->modinfo['hasNotification'] == 1) ? 1 : 0;
|
103: | $this->setVar('hasmain', $hasmain);
|
104: | $this->setVar('hasadmin', $hasadmin);
|
105: | $this->setVar('hassearch', $hassearch);
|
106: | $this->setVar('hasconfig', $hasconfig);
|
107: | $this->setVar('hascomments', $hascomments);
|
108: |
|
109: | $this->setVar('hasnotification', $hasnotification);
|
110: | }
|
111: |
|
112: | |
113: | |
114: | |
115: | |
116: | |
117: |
|
118: | public function setMessage($str)
|
119: | {
|
120: | $this->_msg[] = trim($str);
|
121: | }
|
122: |
|
123: | |
124: | |
125: | |
126: | |
127: | |
128: |
|
129: | public function getMessages()
|
130: | {
|
131: | return $this->_msg;
|
132: | }
|
133: |
|
134: | |
135: | |
136: | |
137: | |
138: | |
139: | |
140: |
|
141: | public function setInfo($name, $value)
|
142: | {
|
143: | if (empty($name)) {
|
144: | $this->modinfo = $value;
|
145: | } else {
|
146: | $this->modinfo[$name] = $value;
|
147: | }
|
148: |
|
149: | return true;
|
150: | }
|
151: |
|
152: | |
153: | |
154: | |
155: | |
156: | |
157: | |
158: |
|
159: | public function &getInfo($name = null)
|
160: | {
|
161: | if (!isset($this->modinfo)) {
|
162: | $this->loadInfo($this->getVar('dirname'));
|
163: | }
|
164: | if (isset($name)) {
|
165: | if (isset($this->modinfo[$name])) {
|
166: | return $this->modinfo[$name];
|
167: | }
|
168: | $return = false;
|
169: |
|
170: | return $return;
|
171: | }
|
172: |
|
173: | return $this->modinfo;
|
174: | }
|
175: |
|
176: | |
177: | |
178: | |
179: | |
180: |
|
181: | public function getStatus()
|
182: | {
|
183: | return substr(strrchr($this->getVar('version'), '-'), 1);
|
184: | }
|
185: |
|
186: | |
187: | |
188: | |
189: | |
190: | |
191: | |
192: | |
193: |
|
194: | public function versionCompare($version1 = '',$version2 = '', $operator = '<')
|
195: | {
|
196: | $version1 = strtolower($version1);
|
197: | $version2 = strtolower($version2);
|
198: | if (false !== strpos($version2, '-stable')){
|
199: | $version2 = substr($version2, 0, strpos($version2, '-stable'));
|
200: | }
|
201: | if (false !== strpos($version1, '-stable')){
|
202: | $version1 = substr($version1, 0, strpos($version1, '-stable'));
|
203: | }
|
204: | return version_compare($version1, $version2, $operator);
|
205: | }
|
206: |
|
207: | |
208: | |
209: | |
210: | |
211: |
|
212: | public function mainLink()
|
213: | {
|
214: | if ($this->getVar('hasmain') == 1) {
|
215: | $ret = '<a href="' . XOOPS_URL . '/modules/' . $this->getVar('dirname') . '/">' . $this->getVar('name') . '</a>';
|
216: |
|
217: | return $ret;
|
218: | }
|
219: |
|
220: | return false;
|
221: | }
|
222: |
|
223: | |
224: | |
225: | |
226: | |
227: |
|
228: | public function subLink()
|
229: | {
|
230: | $ret = array();
|
231: | if ($this->getInfo('sub') && \is_array($this->getInfo('sub'))) {
|
232: | foreach ($this->getInfo('sub') as $submenu) {
|
233: | $ret[] = array(
|
234: | 'name' => $submenu['name'],
|
235: | 'url' => $submenu['url']);
|
236: | }
|
237: | }
|
238: |
|
239: | return $ret;
|
240: | }
|
241: |
|
242: | |
243: | |
244: |
|
245: | public function loadAdminMenu()
|
246: | {
|
247: | $adminmenu = array();
|
248: | if ($this->getInfo('adminmenu') && $this->getInfo('adminmenu') != '' && file_exists(XOOPS_ROOT_PATH . '/modules/' . $this->getVar('dirname') . '/' . $this->getInfo('adminmenu'))) {
|
249: | include XOOPS_ROOT_PATH . '/modules/' . $this->getVar('dirname') . '/' . $this->getInfo('adminmenu');
|
250: | }
|
251: | $this->adminmenu =& $adminmenu;
|
252: | }
|
253: |
|
254: | |
255: | |
256: | |
257: | |
258: |
|
259: | public function &getAdminMenu()
|
260: | {
|
261: | if (!isset($this->adminmenu)) {
|
262: | $this->loadAdminMenu();
|
263: | }
|
264: |
|
265: | return $this->adminmenu;
|
266: | }
|
267: |
|
268: | |
269: | |
270: | |
271: | |
272: | |
273: | |
274: | |
275: |
|
276: | public function loadInfo($dirname, $verbose = true)
|
277: | {
|
278: | static $modVersions;
|
279: | $dirname = basename($dirname);
|
280: | if (isset($modVersions[$dirname])) {
|
281: | $this->modinfo = $modVersions[$dirname];
|
282: |
|
283: | return true;
|
284: | }
|
285: | global $xoopsConfig;
|
286: | if (file_exists($file = $GLOBALS['xoops']->path('modules/' . $dirname . '/language/' . $xoopsConfig['language'] . '/modinfo.php'))) {
|
287: | include_once $file;
|
288: | } elseif (file_exists($file = $GLOBALS['xoops']->path('modules/' . $dirname . '/language/english/modinfo.php'))) {
|
289: | include_once $file;
|
290: | }
|
291: |
|
292: | if (!file_exists($file = $GLOBALS['xoops']->path('modules/' . $dirname . '/xoops_version.php'))) {
|
293: | if (false !== (bool)$verbose) {
|
294: | echo "Module File for $dirname Not Found!";
|
295: | }
|
296: |
|
297: | return false;
|
298: | }
|
299: | include $file;
|
300: | $modVersions[$dirname] = $modversion;
|
301: | $this->modinfo = $modVersions[$dirname];
|
302: |
|
303: | return true;
|
304: | }
|
305: |
|
306: | |
307: | |
308: | |
309: | |
310: | |
311: | |
312: | |
313: | |
314: | |
315: |
|
316: | public function search($term = '', $andor = 'AND', $limit = 0, $offset = 0, $userid = 0)
|
317: | {
|
318: | if ($this->getVar('hassearch') != 1) {
|
319: | return false;
|
320: | }
|
321: | $search =& $this->getInfo('search');
|
322: | if ($this->getVar('hassearch') != 1 || !isset($search['file']) || !isset($search['func']) || $search['func'] == '' || $search['file'] == '') {
|
323: | return false;
|
324: | }
|
325: | if (file_exists($file = $GLOBALS['xoops']->path('modules/' . $this->getVar('dirname') . '/' . $search['file']))) {
|
326: | include_once $file;
|
327: | } else {
|
328: | return false;
|
329: | }
|
330: | if (function_exists($search['func'])) {
|
331: | $func = $search['func'];
|
332: |
|
333: | return $func($term, $andor, $limit, $offset, $userid);
|
334: | }
|
335: |
|
336: | return false;
|
337: | }
|
338: |
|
339: | |
340: | |
341: | |
342: | |
343: |
|
344: | public function id($format = 'N')
|
345: | {
|
346: | return $this->getVar('mid', $format);
|
347: | }
|
348: |
|
349: | |
350: | |
351: | |
352: | |
353: |
|
354: | public function mid($format = '')
|
355: | {
|
356: | return $this->getVar('mid', $format);
|
357: | }
|
358: |
|
359: | |
360: | |
361: | |
362: | |
363: |
|
364: | public function name($format = '')
|
365: | {
|
366: | return $this->getVar('name', $format);
|
367: | }
|
368: |
|
369: | |
370: | |
371: | |
372: | |
373: |
|
374: | public function version($format = '')
|
375: | {
|
376: | return $this->getVar('version', $format);
|
377: | }
|
378: |
|
379: | |
380: | |
381: | |
382: | |
383: |
|
384: | public function last_update($format = '')
|
385: | {
|
386: | return $this->getVar('last_update', $format);
|
387: | }
|
388: |
|
389: | |
390: | |
391: | |
392: | |
393: |
|
394: | public function weight($format = '')
|
395: | {
|
396: | return $this->getVar('weight', $format);
|
397: | }
|
398: |
|
399: | |
400: | |
401: | |
402: | |
403: |
|
404: | public function isactive($format = '')
|
405: | {
|
406: | return $this->getVar('isactive', $format);
|
407: | }
|
408: |
|
409: | |
410: | |
411: | |
412: | |
413: |
|
414: | public function dirname($format = '')
|
415: | {
|
416: | return $this->getVar('dirname', $format);
|
417: | }
|
418: |
|
419: | |
420: | |
421: | |
422: | |
423: |
|
424: | public function hasmain($format = '')
|
425: | {
|
426: | return $this->getVar('hasmain', $format);
|
427: | }
|
428: |
|
429: | |
430: | |
431: | |
432: | |
433: |
|
434: | public function hasadmin($format = '')
|
435: | {
|
436: | return $this->getVar('hasadmin', $format);
|
437: | }
|
438: |
|
439: | |
440: | |
441: | |
442: | |
443: |
|
444: | public function hassearch($format = '')
|
445: | {
|
446: | return $this->getVar('hassearch', $format);
|
447: | }
|
448: |
|
449: | |
450: | |
451: | |
452: | |
453: |
|
454: | public function hasconfig($format = '')
|
455: | {
|
456: | return $this->getVar('hasconfig', $format);
|
457: | }
|
458: |
|
459: | |
460: | |
461: | |
462: | |
463: |
|
464: | public function hascomments($format = '')
|
465: | {
|
466: | return $this->getVar('hascomments', $format);
|
467: | }
|
468: |
|
469: | |
470: | |
471: | |
472: | |
473: |
|
474: | public function hasnotification($format = '')
|
475: | {
|
476: | return $this->getVar('hasnotification', $format);
|
477: | }
|
478: |
|
479: | |
480: | |
481: | |
482: | |
483: |
|
484: | public static function getByDirname($dirname)
|
485: | {
|
486: |
|
487: | $modhandler = xoops_getHandler('module');
|
488: | $inst = $modhandler->getByDirname($dirname);
|
489: |
|
490: | return $inst;
|
491: | }
|
492: |
|
493: |
|
494: |
|
495: | |
496: | |
497: |
|
498: | public function checkAccess()
|
499: | {
|
500: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
501: |
|
502: | return false;
|
503: | }
|
504: |
|
505: | |
506: | |
507: | |
508: | |
509: |
|
510: | public function loadLanguage($type = 'main')
|
511: | {
|
512: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
513: |
|
514: | return false;
|
515: | }
|
516: |
|
517: | |
518: | |
519: |
|
520: | public function loadErrorMessages()
|
521: | {
|
522: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
523: |
|
524: | return false;
|
525: | }
|
526: |
|
527: | |
528: | |
529: |
|
530: | public function getCurrentPage()
|
531: | {
|
532: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
533: |
|
534: | return false;
|
535: | }
|
536: |
|
537: | |
538: | |
539: | |
540: | |
541: | |
542: |
|
543: | public function install($admingroups = array(), $accessgroups = array())
|
544: | {
|
545: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
546: |
|
547: | return false;
|
548: | }
|
549: |
|
550: | |
551: | |
552: |
|
553: | public function update()
|
554: | {
|
555: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
556: |
|
557: | return false;
|
558: | }
|
559: |
|
560: | |
561: | |
562: |
|
563: | public function insert()
|
564: | {
|
565: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
566: |
|
567: | return false;
|
568: | }
|
569: |
|
570: | |
571: | |
572: |
|
573: | public function executeSQL()
|
574: | {
|
575: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
576: |
|
577: | return false;
|
578: | }
|
579: |
|
580: | |
581: | |
582: |
|
583: | public function insertTemplates()
|
584: | {
|
585: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
586: |
|
587: | return false;
|
588: | }
|
589: |
|
590: | |
591: | |
592: | |
593: | |
594: | |
595: |
|
596: | public function gettemplate($template, $block = false)
|
597: | {
|
598: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
599: |
|
600: | return false;
|
601: | }
|
602: |
|
603: | |
604: | |
605: |
|
606: | public function insertBlocks()
|
607: | {
|
608: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
609: |
|
610: | return false;
|
611: | }
|
612: |
|
613: | |
614: | |
615: |
|
616: | public function insertConfigCategories()
|
617: | {
|
618: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
619: |
|
620: | return false;
|
621: | }
|
622: |
|
623: | |
624: | |
625: |
|
626: | public function insertConfig()
|
627: | {
|
628: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
629: |
|
630: | return false;
|
631: | }
|
632: |
|
633: | |
634: | |
635: |
|
636: | public function insertProfileFields()
|
637: | {
|
638: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
639: |
|
640: | return false;
|
641: | }
|
642: |
|
643: | |
644: | |
645: | |
646: | |
647: | |
648: |
|
649: | public function executeScript($type, $state = 2)
|
650: | {
|
651: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
652: |
|
653: | return false;
|
654: | }
|
655: |
|
656: | |
657: | |
658: | |
659: | |
660: | |
661: |
|
662: | public function insertGroupPermissions($groups, $type)
|
663: | {
|
664: | $GLOBALS['xoopsLogger']->addDeprecated(__METHOD__ . ' is deprecated');
|
665: |
|
666: | return false;
|
667: | }
|
668: |
|
669: | }
|
670: |
|
671: | |
672: | |
673: | |
674: | |
675: | |
676: | |
677: | |
678: | |
679: | |
680: | |
681: | |
682: |
|
683: | class XoopsModuleHandler extends XoopsObjectHandler
|
684: | {
|
685: | |
686: | |
687: | |
688: | |
689: | |
690: |
|
691: | public $_cachedModule_mid = array();
|
692: |
|
693: | |
694: | |
695: | |
696: | |
697: | |
698: |
|
699: | public $_cachedModule_dirname = array();
|
700: |
|
701: | |
702: | |
703: | |
704: | |
705: | |
706: |
|
707: | public function create($isNew = true)
|
708: | {
|
709: | $module = new XoopsModule();
|
710: | if ($isNew) {
|
711: | $module->setNew();
|
712: | }
|
713: |
|
714: | return $module;
|
715: | }
|
716: |
|
717: | |
718: | |
719: | |
720: | |
721: | |
722: |
|
723: | public function get($id)
|
724: | {
|
725: | static $_cachedModule_dirname;
|
726: | static $_cachedModule_mid;
|
727: | $id = (int)$id;
|
728: | $module = false;
|
729: | if ($id > 0) {
|
730: | if (!empty($_cachedModule_mid[$id])) {
|
731: | return $_cachedModule_mid[$id];
|
732: | } else {
|
733: | $sql = 'SELECT * FROM ' . $this->db->prefix('modules') . ' WHERE mid = ' . $id;
|
734: | $result = $this->db->query($sql);
|
735: | if (!$this->db->isResultSet($result)) {
|
736: | return $module;
|
737: | }
|
738: | $numrows = $this->db->getRowsNum($result);
|
739: | if ($numrows == 1) {
|
740: | $module = new XoopsModule();
|
741: | $myrow = $this->db->fetchArray($result);
|
742: | $module->assignVars($myrow);
|
743: | $_cachedModule_mid[$id] = &$module;
|
744: | $_cachedModule_dirname[$module->getVar('dirname')] = &$module;
|
745: |
|
746: | return $module;
|
747: | }
|
748: | }
|
749: | }
|
750: |
|
751: | return $module;
|
752: | }
|
753: |
|
754: | |
755: | |
756: | |
757: | |
758: | |
759: |
|
760: | public function getByDirname($dirname)
|
761: | {
|
762: | $dirname = basename($dirname);
|
763: |
|
764: | if (strpos(strtolower($dirname), ' union ')) {
|
765: | return false;
|
766: | }
|
767: | static $_cachedModule_mid;
|
768: | static $_cachedModule_dirname;
|
769: | if (!empty($_cachedModule_dirname[$dirname])) {
|
770: | return $_cachedModule_dirname[$dirname];
|
771: | } else {
|
772: | $module = false;
|
773: | $sql = 'SELECT * FROM ' . $this->db->prefix('modules') . " WHERE dirname = '" . trim($dirname) . "'";
|
774: | $result = $this->db->query($sql);
|
775: | if (!$this->db->isResultSet($result)) {
|
776: | return $module;
|
777: | }
|
778: | $numrows = $this->db->getRowsNum($result);
|
779: | if ($numrows == 1) {
|
780: | $module = new XoopsModule();
|
781: | $myrow = $this->db->fetchArray($result);
|
782: | $module->assignVars($myrow);
|
783: | $_cachedModule_dirname[$dirname] =& $module;
|
784: | $_cachedModule_mid[$module->getVar('mid')] =& $module;
|
785: | }
|
786: |
|
787: | return $module;
|
788: | }
|
789: | }
|
790: |
|
791: | |
792: | |
793: | |
794: | |
795: | |
796: | |
797: |
|
798: | public function insert(XoopsObject $module)
|
799: | {
|
800: | $className = 'XoopsModule';
|
801: | if (!($module instanceof $className)) {
|
802: | return false;
|
803: | }
|
804: | if (!$module->isDirty()) {
|
805: | return true;
|
806: | }
|
807: | if (!$module->cleanVars()) {
|
808: | return false;
|
809: | }
|
810: | foreach ($module->cleanVars as $k => $v) {
|
811: | ${$k} = $v;
|
812: | }
|
813: | if ($module->isNew()) {
|
814: | $mid = $this->db->genId('modules_mid_seq');
|
815: | $sql = sprintf('INSERT INTO %s (mid, name, version, last_update, weight, isactive, dirname, hasmain, hasadmin, hassearch, hasconfig, hascomments, hasnotification) VALUES (%u, %s, %s, %u, %u, %u, %s, %u, %u, %u, %u, %u, %u)', $this->db->prefix('modules'), $mid, $this->db->quoteString($name), $this->db->quoteString($version), time(), $weight, 1, $this->db->quoteString($dirname), $hasmain, $hasadmin, $hassearch, $hasconfig, $hascomments, $hasnotification);
|
816: | } else {
|
817: | $sql = sprintf('UPDATE %s SET name = %s, dirname = %s, version = %s, last_update = %u, weight = %u, isactive = %u, hasmain = %u, hasadmin = %u, hassearch = %u, hasconfig = %u, hascomments = %u, hasnotification = %u WHERE mid = %u', $this->db->prefix('modules'), $this->db->quoteString($name), $this->db->quoteString($dirname), $this->db->quoteString($version), time(), $weight, $isactive, $hasmain, $hasadmin, $hassearch, $hasconfig, $hascomments, $hasnotification, $mid);
|
818: | }
|
819: | if (!$result = $this->db->query($sql)) {
|
820: | return false;
|
821: | }
|
822: | if (empty($mid)) {
|
823: | $mid = $this->db->getInsertId();
|
824: | }
|
825: | $module->assignVar('mid', $mid);
|
826: | if (!empty($this->_cachedModule_dirname[$dirname])) {
|
827: | unset($this->_cachedModule_dirname[$dirname]);
|
828: | }
|
829: | if (!empty($this->_cachedModule_mid[$mid])) {
|
830: | unset($this->_cachedModule_mid[$mid]);
|
831: | }
|
832: |
|
833: | return true;
|
834: | }
|
835: |
|
836: | |
837: | |
838: | |
839: | |
840: | |
841: | |
842: |
|
843: | public function delete(XoopsObject $module)
|
844: | {
|
845: | $className = 'XoopsModule';
|
846: | if (!($module instanceof $className)) {
|
847: | return false;
|
848: | }
|
849: | $sql = sprintf('DELETE FROM %s WHERE mid = %u', $this->db->prefix('modules'), $module->getVar('mid'));
|
850: | if (!$result = $this->db->query($sql)) {
|
851: | return false;
|
852: | }
|
853: |
|
854: | $sql = sprintf("DELETE FROM %s WHERE gperm_name = 'module_admin' AND gperm_itemid = %u", $this->db->prefix('group_permission'), $module->getVar('mid'));
|
855: | $this->db->query($sql);
|
856: |
|
857: | $sql = sprintf("DELETE FROM %s WHERE gperm_name = 'module_read' AND gperm_itemid = %u", $this->db->prefix('group_permission'), $module->getVar('mid'));
|
858: | $this->db->query($sql);
|
859: |
|
860: | $sql = sprintf('SELECT block_id FROM %s WHERE module_id = %u', $this->db->prefix('block_module_link'), $module->getVar('mid'));
|
861: | $result = $this->db->query($sql);
|
862: | if ($this->db->isResultSet($result)) {
|
863: | $block_id_arr = array();
|
864: |
|
865: | while (false !== ($myrow = $this->db->fetchArray($result))) {
|
866: | $block_id_arr[] = $myrow['block_id'];
|
867: | }
|
868: | }
|
869: |
|
870: | if (isset($block_id_arr)) {
|
871: | foreach ($block_id_arr as $i) {
|
872: | $sql = sprintf('SELECT block_id FROM %s WHERE module_id != %u AND block_id = %u', $this->db->prefix('block_module_link'), $module->getVar('mid'), $i);
|
873: | $result2 = $this->db->query($sql);
|
874: | if ($this->db->isResultSet($result2)) {
|
875: | if (0 < $this->db->getRowsNum($result2)) {
|
876: |
|
877: | $sql = sprintf('DELETE FROM %s WHERE (module_id = %u) AND (block_id = %u)', $this->db->prefix('block_module_link'), $module->getVar('mid'), $i);
|
878: | $this->db->query($sql);
|
879: | } else {
|
880: |
|
881: | $sql = sprintf('UPDATE %s SET visible = 0 WHERE bid = %u', $this->db->prefix('newblocks'), $i);
|
882: | $this->db->query($sql);
|
883: | $sql = sprintf('UPDATE %s SET module_id = -1 WHERE module_id = %u', $this->db->prefix('block_module_link'), $module->getVar('mid'));
|
884: | $this->db->query($sql);
|
885: | }
|
886: | }
|
887: | }
|
888: | }
|
889: |
|
890: | $dirname = (string) $module->getVar('dirname');
|
891: | $mid = (int) $module->getVar('mid');
|
892: |
|
893: | if (!empty($this->_cachedModule_dirname[$dirname])) {
|
894: | unset($this->_cachedModule_dirname[$dirname]);
|
895: | }
|
896: | if (!empty($this->_cachedModule_mid[$mid])) {
|
897: | unset($this->_cachedModule_mid[$mid]);
|
898: | }
|
899: |
|
900: | return true;
|
901: | }
|
902: |
|
903: | |
904: | |
905: | |
906: | |
907: | |
908: | |
909: |
|
910: | public function getObjects(CriteriaElement $criteria = null, $id_as_key = false)
|
911: | {
|
912: | $ret = array();
|
913: | $limit = $start = 0;
|
914: | $sql = 'SELECT * FROM ' . $this->db->prefix('modules');
|
915: | if (isset($criteria) && \method_exists($criteria, 'renderWhere')) {
|
916: | $sql .= ' ' . $criteria->renderWhere();
|
917: | $sql .= ' ORDER BY weight ' . $criteria->getOrder() . ', mid ASC';
|
918: | $limit = $criteria->getLimit();
|
919: | $start = $criteria->getStart();
|
920: | }
|
921: | $result = $this->db->query($sql, $limit, $start);
|
922: | if (!$this->db->isResultSet($result)) {
|
923: | return $ret;
|
924: | }
|
925: |
|
926: | while (false !== ($myrow = $this->db->fetchArray($result))) {
|
927: | $module = new XoopsModule();
|
928: | $module->assignVars($myrow);
|
929: | if (!$id_as_key) {
|
930: | $ret[] =& $module;
|
931: | } else {
|
932: | $ret[$myrow['mid']] =& $module;
|
933: | }
|
934: | unset($module);
|
935: | }
|
936: |
|
937: | return $ret;
|
938: | }
|
939: |
|
940: | |
941: | |
942: | |
943: | |
944: | |
945: |
|
946: | public function getCount(CriteriaElement $criteria = null)
|
947: | {
|
948: | $sql = 'SELECT COUNT(*) FROM ' . $this->db->prefix('modules');
|
949: | if (isset($criteria) && \method_exists($criteria, 'renderWhere')) {
|
950: | $sql .= ' ' . $criteria->renderWhere();
|
951: | }
|
952: | $result = $this->db->query($sql);
|
953: | if (!$this->db->isResultSet($result)) {
|
954: | return 0;
|
955: | }
|
956: | list($count) = $this->db->fetchRow($result);
|
957: |
|
958: | return (int)$count;
|
959: | }
|
960: |
|
961: | |
962: | |
963: | |
964: | |
965: | |
966: | |
967: | |
968: |
|
969: | public function getList(CriteriaElement $criteria = null, $dirname_as_key = false)
|
970: | {
|
971: | $ret = array();
|
972: | $modules = $this->getObjects($criteria, true);
|
973: | foreach (array_keys($modules) as $i) {
|
974: | if (!$dirname_as_key) {
|
975: | $ret[$i] = $modules[$i]->getVar('name');
|
976: | } else {
|
977: | $ret[$modules[$i]->getVar('dirname')] = $modules[$i]->getVar('name');
|
978: | }
|
979: | }
|
980: |
|
981: | return $ret;
|
982: | }
|
983: | }
|
984: | |