1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10:
11:
12: define('LEGACY_INSTALLINFO_STATUS_LOADED', "loaded");
13: define('LEGACY_INSTALLINFO_STATUS_UPDATED', "updated");
14: define('LEGACY_INSTALLINFO_STATUS_ORDER_UPDATED', "order_updated");
15: define('LEGACY_INSTALLINFO_STATUS_NEW', "new");
16: define('LEGACY_INSTALLINFO_STATUS_DELETED', "deleted");
17:
18: 19: 20: 21:
22: class Legacy_BlockInformation
23: {
24: var $mStatus = LEGACY_INSTALLINFO_STATUS_LOADED;
25:
26: var $mFuncNum = 0;
27:
28: var $mName = "";
29:
30: var $mOptions = "";
31:
32: var $mFuncFile = "";
33: var $mShowFunc = "";
34: var $mEditFunc = "";
35: var $mTemplate = "";
36:
37: function Legacy_BlockInformation($funcNum, $name, $funcFile, $showFunc, $editFunc, $template, $options = null)
38: {
39: $this->mFuncNum = intval($funcNum);
40: $this->mName = $name;
41: $this->mFuncFile = $funcFile;
42: $this->mShowFunc = $showFunc;
43: $this->mEditFunc = $editFunc;
44: $this->mTemplate = $template;
45: $this->mOptions = $options;
46: }
47:
48: 49: 50:
51: function isEqual(&$block)
52: {
53: if ($this->mFuncNum != $block->mFuncNum) {
54: return false;
55: }
56:
57: if ($this->mName != $block->mName) {
58: return false;
59: }
60:
61: if ($this->mFuncFile != $block->mFuncFile) {
62: return false;
63: }
64:
65: if ($this->mShowFunc != $block->mShowFunc) {
66: return false;
67: }
68:
69: if ($this->mEditFunc != $block->mEditFunc) {
70: return false;
71: }
72:
73: if ($this->mTemplate != $block->mTemplate) {
74: return false;
75: }
76:
77: return true;
78: }
79:
80: function update(&$block)
81: {
82: $this->mStatus = LEGACY_INSTALLINFO_STATUS_UPDATED;
83:
84: $this->mName = $block->mName;
85: $this->mFuncFile = $block->mFuncFile;
86: $this->mShowFunc = $block->mShowFunc;
87: $this->mEditFunc = $block->mEditFunc;
88: $this->mTemplate = $block->mTemplate;
89: }
90: }
91:
92: class Legacy_BlockInfoCollection
93: {
94: var $mBlocks = array();
95: var $mShowFuncs = array();
96: var $mFuncFiles = array();
97:
98: function add(&$info)
99: {
100: if (isset($this->mBlocks[$info->mFuncNum])) {
101: return false;
102: }
103:
104: $this->mBlocks[$info->mFuncNum] =& $info;
105: $this->mShowFuncs[] = $info->mShowFunc;
106: $this->mFuncFiles[] = $info->mFuncFile;
107:
108: ksort($this->mBlocks);
109:
110: return true;
111: }
112:
113: function &get($funcNum)
114: {
115: if (isset($this->mBlocks[$funcNum])) {
116: return $this->mBlocks[$funcNum];
117: }
118:
119: $ret = null;
120: return $ret;
121: }
122:
123: function funcExists($info) {
124: return (in_array($info->mShowFunc, $this->mShowFuncs) && in_array($info->mFuncFile, $this->mFuncFiles));
125: }
126:
127: 128: 129:
130: function update(&$collection)
131: {
132: foreach (array_keys($this->mBlocks) as $idx) {
133: $t_block =& $collection->get($this->mBlocks[$idx]->mFuncNum);
134: if ($t_block == null) {
135: if (!$collection->funcExists($this->mBlocks[$idx])) {
136: $this->mBlocks[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_DELETED;
137: } else {
138: $this->mBlocks[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_UPDATED;
139: }
140: }
141: elseif (!$this->mBlocks[$idx]->isEqual($t_block)) {
142: $this->mBlocks[$idx]->update($t_block);
143: }
144: }
145:
146: foreach (array_keys($collection->mBlocks) as $idx) {
147: $func_num = $collection->mBlocks[$idx]->mFuncNum;
148: if (!isset($this->mBlocks[$func_num])) {
149: $this->add($collection->mBlocks[$idx]);
150: $this->mBlocks[$func_num]->mStatus = LEGACY_INSTALLINFO_STATUS_NEW;
151: }
152: }
153: }
154:
155: function reset()
156: {
157: unset($this->mBlocks);
158: $this->mBlocks = array();
159: }
160: }
161:
162: 163: 164: 165:
166: class Legacy_PreferenceInformation
167: {
168: var $mStatus = LEGACY_INSTALLINFO_STATUS_LOADED;
169:
170: var $mOrder = 0;
171:
172: var $mName = "";
173:
174: var $mTitle = "";
175:
176: var $mDescription = "";
177:
178: var $mFormType = "";
179:
180: var $mValueType = "";
181:
182: var $mDefault = null;
183:
184: var $mOption = null;
185:
186: function Legacy_PreferenceInformation($name, $title, $description, $formType, $valueType, $default, $order = 0)
187: {
188: $this->mName = $name;
189: $this->mTitle = $title;
190: $this->mDescription = $description;
191: $this->mFormType = $formType;
192: $this->mValueType = $valueType;
193: $this->mDefault = $default;
194: $this->mOrder = intval($order);
195:
196: $this->mOption =new Legacy_PreferenceOptionInfoCollection();
197: }
198:
199: 200: 201:
202: function isEqual(&$preference)
203: {
204: if ($this->mName != $preference->mName) {
205: return false;
206: }
207:
208: if ($this->mTitle != $preference->mTitle) {
209: return false;
210: }
211:
212: if ($this->mDescription != $preference->mDescription) {
213: return false;
214: }
215:
216: if ($this->mFormType != $preference->mFormType) {
217: return false;
218: }
219:
220: if ($this->mValueType != $preference->mValueType) {
221: return false;
222: }
223:
224: if ($this->mOrder != $preference->mOrder) {
225: return false;
226: }
227:
228: if (!$this->mOption->isEqual($preference->mOption)) {
229: return false;
230: }
231:
232: return true;
233: }
234:
235: function update(&$preference)
236: {
237: $this->mStatus = LEGACY_INSTALLINFO_STATUS_UPDATED;
238:
239: $this->mName = $preference->mName;
240: $this->mTitle = $preference->mTitle;
241: $this->mDescription = $preference->mDescription;
242: $this->mFormType = $preference->mFormType;
243: $this->mValueType = $preference->mValueType;
244: $this->mDefault = $preference->mDefault;
245: $this->mOrder = $preference->mOrder;
246:
247: unset($this->mOption);
248: $this->mOption =& $preference->mOption;
249: }
250: }
251:
252: class Legacy_PreferenceInfoCollection
253: {
254: var $mPreferences = array();
255:
256: var $mComments = array();
257:
258: var $mNotifications = array();
259:
260: function Legacy_PreferenceInfoCollection()
261: {
262: }
263:
264: function add(&$preference)
265: {
266: if ($preference->mName == 'com_rule' || $preference->mName == 'com_anonpost') {
267: if (isset($this->mComments[$preference->mName])) {
268: return false;
269: }
270: $this->mComments[$preference->mName] =& $preference;
271: $this->_sort();
272: return true;
273: }
274:
275: if ($preference->mName == 'notification_enabled' || $preference->mName == 'notification_events') {
276: if (isset($this->mNotifications[$preference->mName])) {
277: return false;
278: }
279: $this->mNotifications[$preference->mName] =& $preference;
280: $this->_sort();
281: return true;
282: }
283:
284: if (isset($this->mPreferences[$preference->mName])) {
285: return false;
286: }
287:
288: $this->mPreferences[$preference->mName] =& $preference;
289: $this->_sort();
290:
291: return true;
292: }
293:
294: 295: 296: 297:
298: function _sort()
299: {
300: $currentOrder = 0;
301: foreach (array_keys($this->mPreferences) as $idx) {
302: if ($this->mPreferences[$idx]->mOrder != $currentOrder) {
303: $this->mPreferences[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_ORDER_UPDATED;
304: $this->mPreferences[$idx]->mOrder = $currentOrder;
305: }
306:
307: $currentOrder++;
308: }
309:
310: foreach (array_keys($this->mComments) as $idx) {
311: if ($this->mComments[$idx]->mOrder != $currentOrder) {
312: $this->mComments[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_ORDER_UPDATED;
313: $this->mComments[$idx]->mOrder = $currentOrder;
314: }
315:
316: $currentOrder++;
317: }
318:
319: foreach (array_keys($this->mNotifications) as $idx) {
320: if ($this->mNotifications[$idx]->mOrder != $currentOrder) {
321: $this->mNotifications[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_ORDER_UPDATED;
322: $this->mNotifications[$idx]->mOrder = $currentOrder;
323: }
324:
325: $currentOrder++;
326: }
327: }
328:
329: function &get($name)
330: {
331: $ret = null;
332:
333: if (isset($this->mPreferences[$name])) {
334: return $this->mPreferences[$name];
335: }
336:
337: return $ret;
338: }
339:
340: function &getNotify($name)
341: {
342: $ret = null;
343:
344: if (isset($this->mNotifications[$name])) {
345: return $this->mNotifications[$name];
346: }
347:
348: return $ret;
349: }
350:
351: 352: 353: 354: 355:
356: function update(&$collection)
357: {
358:
359:
360:
361: foreach (array_keys($this->mPreferences) as $idx) {
362: $t_preference =& $collection->get($this->mPreferences[$idx]->mName);
363: if ($t_preference == null) {
364: $this->mPreferences[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_DELETED;
365: }
366: elseif (!$this->mPreferences[$idx]->isEqual($t_preference)) {
367: $this->mPreferences[$idx]->update($t_preference);
368: }
369: }
370:
371: foreach (array_keys($collection->mPreferences) as $idx) {
372: $name = $collection->mPreferences[$idx]->mName;
373: if (!isset($this->mPreferences[$name])) {
374: $this->add($collection->mPreferences[$name]);
375: $this->mPreferences[$name]->mStatus = LEGACY_INSTALLINFO_STATUS_NEW;
376: }
377: }
378:
379:
380:
381:
382: if (count($this->mComments) > 0 && count($collection->mComments) == 0) {
383: foreach (array_keys($this->mComments) as $idx) {
384: $this->mComments[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_DELETED;
385: }
386: }
387: elseif (count($this->mComments) == 0 && count($collection->mComments) > 0) {
388: $this->mComments =& $collection->mComments;
389: foreach (array_keys($this->mComments) as $idx) {
390: $this->mComments[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_NEW;
391: }
392: }
393:
394:
395:
396:
397: foreach (array_keys($this->mNotifications) as $idx) {
398: $t_preference =& $collection->getNotify($this->mNotifications[$idx]->mName);
399: if ($t_preference == null) {
400: $this->mNotifications[$idx]->mStatus = LEGACY_INSTALLINFO_STATUS_DELETED;
401: }
402: elseif (!$this->mNotifications[$idx]->isEqual($t_preference)) {
403: $this->mNotifications[$idx]->update($t_preference);
404: }
405: }
406:
407: foreach (array_keys($collection->mNotifications) as $idx) {
408: $name = $collection->mNotifications[$idx]->mName;
409: if (!isset($this->mNotifications[$name])) {
410: $this->add($collection->mNotifications[$name]);
411: $this->mNotifications[$name]->mStatus = LEGACY_INSTALLINFO_STATUS_NEW;
412: }
413: }
414: }
415:
416: function reset()
417: {
418: unset($this->mPreferences);
419: $this->mPreferences = array();
420: }
421: }
422:
423: class Legacy_PreferenceOptionInformation
424: {
425: var $mName = "";
426: var $mValue = "";
427:
428: function Legacy_PreferenceOptionInformation($name, $value)
429: {
430: $this->mName = $name;
431: $this->mValue = $value;
432: }
433:
434: function isEqual($option)
435: {
436: return (($this->mName == $option->mName) && ($this->mValue == $option->mValue));
437: }
438: }
439:
440: class Legacy_PreferenceOptionInfoCollection
441: {
442: var $mOptions = array();
443:
444: function Legacy_PreferenceOptionInfoCollection()
445: {
446: }
447:
448: function add(&$option)
449: {
450: $this->mOptions[] =& $option;
451: return true;
452: }
453:
454: function isEqual(&$collection)
455: {
456: if (count($this->mOptions) != count($collection->mOptions)) {
457: return false;
458: }
459:
460: foreach (array_keys($this->mOptions) as $idx) {
461: if (!$this->mOptions[$idx]->isEqual($collection->mOptions[$idx])) {
462: return false;
463: }
464: }
465:
466: return true;
467: }
468:
469: function reset()
470: {
471: unset($this->mOptions);
472: $this->mOptions = array();
473: }
474: }
475:
476: class Legacy_AbstractModinfoReader
477: {
478: function Legacy_AbstractModinfoReader()
479: {
480: }
481:
482: 483: 484:
485: function &loadBlockInformations()
486: {
487: }
488:
489: 490: 491:
492: function &loadPreferenceInformations()
493: {
494: }
495: }
496:
497: 498: 499:
500: class Legacy_ModinfoX2FileReader extends Legacy_AbstractModinfoReader
501: {
502: 503: 504:
505: var $_mDirname = null;
506:
507: function Legacy_ModinfoX2FileReader($dirname)
508: {
509: $this->_mDirname = $dirname;
510: }
511:
512: 513: 514:
515: function &_createBlockInformation($funcNum, $arr)
516: {
517: $showFunc = "";
518: if (isset($arr['class'])) {
519: $showFunc = 'cl::' . $arr['class'];
520: }
521: else {
522: $showFunc = $arr['show_func'];
523: }
524:
525: $editFunc = isset($arr['edit_func']) ? $arr['edit_func'] : null;
526: $template = isset($arr['template']) ? $arr['template'] : null;
527: $options = isset($arr['options']) ? $arr['options'] : null;
528:
529: $info =new Legacy_BlockInformation($funcNum, $arr['name'], $arr['file'], $showFunc, $editFunc, $template, $options);
530:
531: return $info;
532: }
533:
534: 535: 536:
537: function &loadBlockInformations()
538: {
539: $collection =new Legacy_BlockInfoCollection();
540:
541: $t_filePath = XOOPS_ROOT_PATH . '/modules/' . $this->_mDirname . '/xoops_version.php';
542: if (!file_exists($t_filePath)) {
543: return $collection;
544: }
545:
546: include $t_filePath;
547:
548: if (!isset($modversion['blocks'])) {
549: return $collection;
550: }
551:
552: $blockArr = $modversion['blocks'];
553:
554:
555:
556:
557: $successFlag = true;
558: foreach ($blockArr as $idx => $block) {
559: if (isset($block['func_num'])) {
560: $info =& $this->_createBlockInformation($block['func_num'], $block);
561: $successFlag &= $collection->add($info);
562: unset($info);
563: }
564: else {
565: $successFlag = false;
566: break;
567: }
568: }
569:
570: if ($successFlag) {
571: return $collection;
572: }
573:
574:
575:
576:
577: $collection->reset();
578:
579: $successFlag = true;
580: foreach ($blockArr as $idx => $block) {
581: if (is_int($idx)) {
582: $info =& $this->_createBlockInformation($idx, $block);
583: $successFlag &= $collection->add($info);
584: unset($info);
585: }
586: else {
587: $successFlag = false;
588: break;
589: }
590: }
591:
592: if ($successFlag) {
593: return $collection;
594: }
595:
596:
597:
598:
599: $collection->reset();
600:
601: $idx = 1;
602: foreach ($blockArr as $block) {
603: $info =& $this->_createBlockInformation($idx++, $block);
604: $successFlag &= $collection->add($info);
605: unset($info);
606: }
607:
608: return $collection;
609: }
610:
611: function &_createPreferenceInformation($arr)
612: {
613: $arr['description'] = isset($arr['description']) ? $arr['description'] : null;
614: $info =new Legacy_PreferenceInformation($arr['name'], $arr['title'], $arr['description'], $arr['formtype'], $arr['valuetype'], $arr['default']);
615: if (isset($arr['options'])) {
616: foreach ($arr['options'] as $name => $value) {
617: $option =new Legacy_PreferenceOptionInformation($name, $value);
618: $info->mOption->add($option);
619: unset($option);
620: }
621: }
622:
623: return $info;
624: }
625:
626: function _loadCommentPreferenceInfomations(&$modversion, &$collection)
627: {
628: if (isset($modversion['hasComments']) && $modversion['hasComments'] == true) {
629: require_once XOOPS_ROOT_PATH . "/include/comment_constants.php";
630:
631: $comRule = array('name' => 'com_rule',
632: 'title' => '_CM_COMRULES',
633: 'description' => '',
634: 'formtype' => 'select',
635: 'valuetype' => 'int',
636: 'default' => 1,
637: 'options' => array('_CM_COMNOCOM' => XOOPS_COMMENT_APPROVENONE, '_CM_COMAPPROVEALL' => XOOPS_COMMENT_APPROVEALL, '_CM_COMAPPROVEUSER' => XOOPS_COMMENT_APPROVEUSER, '_CM_COMAPPROVEADMIN' => XOOPS_COMMENT_APPROVEADMIN)
638: );
639: $info =& $this->_createPreferenceInformation($comRule);
640: $collection->add($info);
641: unset($info);
642:
643: $comAnonpost = array('name' => 'com_anonpost',
644: 'title' => '_CM_COMANONPOST',
645: 'description' => '',
646: 'formtype' => 'yesno',
647: 'valuetype' => 'int',
648: 'default' => 0
649: );
650: $info =& $this->_createPreferenceInformation($comAnonpost);
651: $collection->add($info);
652: unset($info);
653: }
654: }
655:
656: function _loadNotificationPreferenceInfomations(&$modversion, &$collection)
657: {
658: if (isset($modversion['hasNotification']) && $modversion['hasNotification'] == true) {
659: require_once XOOPS_ROOT_PATH . '/include/notification_constants.php';
660: require_once XOOPS_ROOT_PATH . '/include/notification_functions.php';
661:
662: $t_options = array();
663: $t_options['_NOT_CONFIG_DISABLE'] = XOOPS_NOTIFICATION_DISABLE;
664: $t_options['_NOT_CONFIG_ENABLEBLOCK'] = XOOPS_NOTIFICATION_ENABLEBLOCK;
665: $t_options['_NOT_CONFIG_ENABLEINLINE'] = XOOPS_NOTIFICATION_ENABLEINLINE;
666: $t_options['_NOT_CONFIG_ENABLEBOTH'] = XOOPS_NOTIFICATION_ENABLEBOTH;
667:
668: $notifyEnable = array(
669: 'name' => 'notification_enabled',
670: 'title' => '_NOT_CONFIG_ENABLE',
671: 'description' => '_NOT_CONFIG_ENABLEDSC',
672: 'formtype' => 'select',
673: 'valuetype' => 'int',
674: 'default' => XOOPS_NOTIFICATION_ENABLEBOTH,
675: 'options' => $t_options
676: );
677: $info =& $this->_createPreferenceInformation($notifyEnable);
678: $collection->add($info);
679: unset($info);
680:
681:
682:
683:
684:
685:
686: unset ($t_options);
687:
688:
689:
690:
691: $handler =& xoops_gethandler('module');
692: $module =& $handler->getByDirname($this->_mDirname);
693:
694: $t_options = array();
695: $t_categoryArr =& notificationCategoryInfo('', $module->get('mid'));
696: foreach ($t_categoryArr as $t_category) {
697: $t_eventArr =& notificationEvents($t_category['name'], false, $module->get('mid'));
698: foreach ($t_eventArr as $t_event) {
699: if (!empty($t_event['invisible'])) {
700: continue;
701: }
702: $t_optionName = $t_category['title'] . ' : ' . $t_event['title'];
703: $t_options[$t_optionName] = $t_category['name'] . '-' . $t_event['name'];
704: }
705: }
706:
707: $notifyEvents = array(
708: 'name' => 'notification_events',
709: 'title' => '_NOT_CONFIG_EVENTS',
710: 'description' => '_NOT_CONFIG_EVENTSDSC',
711: 'formtype' => 'select_multi',
712: 'valuetype' => 'array',
713: 'default' => array_values($t_options),
714: 'options' => $t_options
715: );
716: $info =& $this->_createPreferenceInformation($notifyEvents);
717: $collection->add($info);
718: unset($info);
719: }
720: }
721:
722: 723: 724: 725: 726:
727: function &loadPreferenceInformations()
728: {
729: $collection =new Legacy_PreferenceInfoCollection();
730:
731: $t_filePath = XOOPS_ROOT_PATH . '/modules/' . $this->_mDirname . '/xoops_version.php';
732: if (!file_exists($t_filePath)) {
733: return $collection;
734: }
735:
736: include $t_filePath;
737:
738:
739:
740:
741: if (!isset($modversion['config'])) {
742: $this->_loadCommentPreferenceInfomations($modversion, $collection);
743: $this->_loadNotificationPreferenceInfomations($modversion, $collection);
744: return $collection;
745: }
746:
747: $preferenceArr = $modversion['config'];
748:
749:
750:
751:
752: $successFlag = true;
753: foreach ($preferenceArr as $idx => $preference) {
754: if (is_string($idx)) {
755: $preference['name'] = $idx;
756: $info =& $this->_createPreferenceInformation($preference);
757: $successFlag &= $collection->add($info);
758: unset($info);
759: }
760: else {
761: $successFlag = false;
762: break;
763: }
764: }
765:
766:
767:
768:
769: if (!$successFlag) {
770: $collection->reset();
771:
772: foreach ($preferenceArr as $preference) {
773: $info =& $this->_createPreferenceInformation($preference);
774: $collection->add($info);
775: unset($info);
776: }
777: }
778:
779:
780:
781:
782: $this->_loadCommentPreferenceInfomations($modversion, $collection);
783: $this->_loadNotificationPreferenceInfomations($modversion, $collection);
784:
785: return $collection;
786: }
787: }
788:
789: class Legacy_ModinfoX2DBReader extends Legacy_AbstractModinfoReader
790: {
791: 792: 793:
794: var $_mDirname = null;
795:
796: function Legacy_ModinfoX2DBReader($dirname)
797: {
798: $this->_mDirname = $dirname;
799: }
800:
801: function &_createBlockInformation(&$block)
802: {
803: $info =new Legacy_BlockInformation($block->get('func_num'), $block->get('name'), $block->get('func_file'), $block->get('show_func'), $block->get('edit_func'), $block->get('template'), $block->get('options'));
804: return $info;
805: }
806:
807: function &loadBlockInformations()
808: {
809: $collection =new Legacy_BlockInfoCollection();
810:
811: $handler =& xoops_getmodulehandler('newblocks', 'legacy');
812:
813: $criteria =new CriteriaCompo();
814: $criteria->add(new Criteria('dirname', $this->_mDirname));
815: $criteria->add(new Criteria('block_type', 'M'));
816:
817: $blockArr =& $handler->getObjects($criteria);
818:
819: foreach (array_keys($blockArr) as $idx) {
820: $info =& $this->_createBlockInformation($blockArr[$idx]);
821: while (!$collection->add($info)) {
822: $info->mFuncNum++;
823: }
824: }
825:
826: return $collection;
827: }
828:
829: function &_createPreferenceInformation(&$config)
830: {
831: $info =new Legacy_PreferenceInformation($config->get('conf_name'), $config->get('conf_title'), $config->get('conf_desc'), $config->get('conf_formtype'), $config->get('conf_valuetype'), $config->get('conf_value'));
832:
833: $configOptionArr =& $config->getOptionItems();
834:
835: foreach (array_keys($configOptionArr) as $idx) {
836: $option =new Legacy_PreferenceOptionInformation($configOptionArr[$idx]->get('confop_name'), $configOptionArr[$idx]->get('confop_value'));
837: $info->mOption->add($option);
838: unset($option);
839: }
840:
841: return $info;
842: }
843:
844: function &loadPreferenceInformations()
845: {
846: $collection =new Legacy_PreferenceInfoCollection();
847:
848: $handler =& xoops_gethandler('module');
849: $module =& $handler->getByDirname($this->_mDirname);
850:
851: $handler =& xoops_gethandler('config');
852: $criteria =new Criteria('conf_modid', $module->get('mid'));
853: $criteria->setOrder('conf_order');
854: $configArr =& $handler->getConfigs($criteria);
855:
856: foreach (array_keys($configArr) as $idx) {
857: $info =& $this->_createPreferenceInformation($configArr[$idx]);
858: $collection->add($info);
859: }
860:
861: return $collection;
862: }
863: }
864:
865: ?>
866: