1: <?php
  2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18: 
 19: defined('XOOPS_ROOT_PATH') || exit('Restricted access');
 20: 
 21: include_once XOOPS_ROOT_PATH . '/class/xml/saxparser.php';
 22: include_once XOOPS_ROOT_PATH . '/class/xml/xmltaghandler.php';
 23: 
 24:  25:  26: 
 27: class XoopsThemeSetParser extends SaxParser
 28: {
 29:     public $tempArr       = array();
 30:     public $themeSetData  = array();
 31:     public $imagesData    = array();
 32:     public $templatesData = array();
 33: 
 34:      35:  36: 
 37:     public function __construct(&$input)
 38:     {
 39:         parent::__construct($input);
 40:         $this->addTagHandler(new ThemeSetThemeNameHandler());
 41:         $this->addTagHandler(new ThemeSetDateCreatedHandler());
 42:         $this->addTagHandler(new ThemeSetAuthorHandler());
 43:         $this->addTagHandler(new ThemeSetDescriptionHandler());
 44:         $this->addTagHandler(new ThemeSetGeneratorHandler());
 45:         $this->addTagHandler(new ThemeSetNameHandler());
 46:         $this->addTagHandler(new ThemeSetEmailHandler());
 47:         $this->addTagHandler(new ThemeSetLinkHandler());
 48:         $this->addTagHandler(new ThemeSetTemplateHandler());
 49:         $this->addTagHandler(new ThemeSetImageHandler());
 50:         $this->addTagHandler(new ThemeSetModuleHandler());
 51:         $this->addTagHandler(new ThemeSetFileTypeHandler());
 52:         $this->addTagHandler(new ThemeSetTagHandler());
 53:     }
 54: 
 55:      56:  57:  58: 
 59:     public function setThemeSetData($name, &$value)
 60:     {
 61:         $this->themeSetData[$name] = &$value;
 62:     }
 63: 
 64:      65:  66:  67:  68: 
 69:     public function &getThemeSetData($name = null)
 70:     {
 71:         if (isset($name)) {
 72:             if (isset($this->themeSetData[$name])) {
 73:                 return $this->themeSetData[$name];
 74:             }
 75: 
 76:             return false;
 77:         }
 78: 
 79:         return $this->themeSetData;
 80:     }
 81: 
 82:      83:  84: 
 85:     public function setImagesData(&$imagearr)
 86:     {
 87:         $this->imagesData[] = &$imagearr;
 88:     }
 89: 
 90:      91:  92: 
 93:     public function &getImagesData()
 94:     {
 95:         return $this->imagesData;
 96:     }
 97: 
 98:      99: 100: 
101:     public function setTemplatesData(&$tplarr)
102:     {
103:         $this->templatesData[] = &$tplarr;
104:     }
105: 
106:     107: 108: 
109:     public function &getTemplatesData()
110:     {
111:         return $this->templatesData;
112:     }
113: 
114:     115: 116: 117: 118: 
119:     public function setTempArr($name, &$value, $delim = '')
120:     {
121:         if (!isset($this->tempArr[$name])) {
122:             $this->tempArr[$name] = &$value;
123:         } else {
124:             $this->tempArr[$name] .= $delim . $value;
125:         }
126:     }
127: 
128:     129: 130: 
131:     public function getTempArr()
132:     {
133:         return $this->tempArr;
134:     }
135: 
136:     public function resetTempArr()
137:     {
138:         unset($this->tempArr);
139:         $this->tempArr = array();
140:     }
141: }
142: 
143: 144: 145: 
146: class ThemeSetDateCreatedHandler extends XmlTagHandler
147: {
148:     149: 150: 
151:     public function __construct()
152:     {
153:     }
154: 
155:     156: 157: 
158:     public function getName()
159:     {
160:         return 'dateCreated';
161:     }
162: 
163:     164: 165: 166: 
167:     public function handleCharacterData($parser, &$data)
168:     {
169:         switch ($parser->getParentTag()) {
170:             case 'themeset':
171:                 $parser->setThemeSetData('date', $data);
172:                 break;
173:             default:
174:                 break;
175:         }
176:     }
177: }
178: 
179: 180: 181: 
182: class ThemeSetAuthorHandler extends XmlTagHandler
183: {
184:     185: 186: 
187:     public function __construct()
188:     {
189:     }
190: 
191:     192: 193: 
194:     public function getName()
195:     {
196:         return 'author';
197:     }
198: 
199:     200: 201: 202: 
203:     public function handleBeginElement($parser, &$attributes)
204:     {
205:         $parser->resetTempArr();
206:     }
207: 
208:     209: 210: 
211:     public function handleEndElement($parser)
212:     {
213:         $parser->setCreditsData($parser->getTempArr());
214:     }
215: }
216: 
217: 218: 219: 
220: class ThemeSetDescriptionHandler extends XmlTagHandler
221: {
222:     223: 224: 
225:     public function __construct()
226:     {
227:     }
228: 
229:     230: 231: 
232:     public function getName()
233:     {
234:         return 'description';
235:     }
236: 
237:     238: 239: 240: 
241:     public function handleCharacterData($parser, &$data)
242:     {
243:         switch ($parser->getParentTag()) {
244:             case 'template':
245:                 $parser->setTempArr('description', $data);
246:                 break;
247:             case 'image':
248:                 $parser->setTempArr('description', $data);
249:                 break;
250:             default:
251:                 break;
252:         }
253:     }
254: }
255: 
256: 257: 258: 
259: class ThemeSetGeneratorHandler extends XmlTagHandler
260: {
261:     262: 263: 
264:     public function __construct()
265:     {
266:     }
267: 
268:     269: 270: 
271:     public function getName()
272:     {
273:         return 'generator';
274:     }
275: 
276:     277: 278: 279: 
280:     public function handleCharacterData($parser, &$data)
281:     {
282:         switch ($parser->getParentTag()) {
283:             case 'themeset':
284:                 $parser->setThemeSetData('generator', $data);
285:                 break;
286:             default:
287:                 break;
288:         }
289:     }
290: }
291: 
292: 293: 294: 
295: class ThemeSetNameHandler extends XmlTagHandler
296: {
297:     298: 299: 
300:     public function __construct()
301:     {
302:     }
303: 
304:     305: 306: 
307:     public function getName()
308:     {
309:         return 'name';
310:     }
311: 
312:     313: 314: 315: 
316:     public function handleCharacterData($parser, &$data)
317:     {
318:         switch ($parser->getParentTag()) {
319:             case 'themeset':
320:                 $parser->setThemeSetData('name', $data);
321:                 break;
322:             case 'author':
323:                 $parser->setTempArr('name', $data);
324:                 break;
325:             default:
326:                 break;
327:         }
328:     }
329: }
330: 
331: 332: 333: 
334: class ThemeSetEmailHandler extends XmlTagHandler
335: {
336:     337: 338: 
339:     public function __construct()
340:     {
341:     }
342: 
343:     344: 345: 
346:     public function getName()
347:     {
348:         return 'email';
349:     }
350: 
351:     352: 353: 354: 
355:     public function handleCharacterData($parser, &$data)
356:     {
357:         switch ($parser->getParentTag()) {
358:             case 'author':
359:                 $parser->setTempArr('email', $data);
360:                 break;
361:             default:
362:                 break;
363:         }
364:     }
365: }
366: 
367: 368: 369: 
370: class ThemeSetLinkHandler extends XmlTagHandler
371: {
372:     373: 374: 
375:     public function __construct()
376:     {
377:     }
378: 
379:     380: 381: 
382:     public function getName()
383:     {
384:         return 'link';
385:     }
386: 
387:     388: 389: 390: 
391:     public function handleCharacterData($parser, &$data)
392:     {
393:         switch ($parser->getParentTag()) {
394:             case 'author':
395:                 $parser->setTempArr('link', $data);
396:                 break;
397:             default:
398:                 break;
399:         }
400:     }
401: }
402: 
403: 404: 405: 
406: class ThemeSetTemplateHandler extends XmlTagHandler
407: {
408:     409: 410: 
411:     public function __construct()
412:     {
413:     }
414: 
415:     416: 417: 
418:     public function getName()
419:     {
420:         return 'template';
421:     }
422: 
423:     424: 425: 426: 
427:     public function handleBeginElement($parser, &$attributes)
428:     {
429:         $parser->resetTempArr();
430:         $parser->setTempArr('name', $attributes['name']);
431:     }
432: 
433:     434: 435: 
436:     public function handleEndElement($parser)
437:     {
438:         $parser->setTemplatesData($parser->getTempArr());
439:     }
440: }
441: 
442: 443: 444: 
445: class ThemeSetImageHandler extends XmlTagHandler
446: {
447:     448: 449: 
450:     public function __construct()
451:     {
452:     }
453: 
454:     455: 456: 
457:     public function getName()
458:     {
459:         return 'image';
460:     }
461: 
462:     463: 464: 465: 
466:     public function handleBeginElement($parser, &$attributes)
467:     {
468:         $parser->resetTempArr();
469:         $parser->setTempArr('name', $attributes[0]);
470:     }
471: 
472:     473: 474: 
475:     public function handleEndElement($parser)
476:     {
477:         $parser->setImagesData($parser->getTempArr());
478:     }
479: }
480: 
481: 482: 483: 
484: class ThemeSetModuleHandler extends XmlTagHandler
485: {
486:     487: 488: 
489:     public function __construct()
490:     {
491:     }
492: 
493:     494: 495: 
496:     public function getName()
497:     {
498:         return 'module';
499:     }
500: 
501:     502: 503: 504: 
505:     public function handleCharacterData($parser, &$data)
506:     {
507:         switch ($parser->getParentTag()) {
508:             case 'template':
509:             case 'image':
510:                 $parser->setTempArr('module', $data);
511:                 break;
512:             default:
513:                 break;
514:         }
515:     }
516: }
517: 
518: 519: 520: 
521: class ThemeSetFileTypeHandler extends XmlTagHandler
522: {
523:     524: 525: 
526:     public function __construct()
527:     {
528:     }
529: 
530:     531: 532: 
533:     public function getName()
534:     {
535:         return 'fileType';
536:     }
537: 
538:     539: 540: 541: 
542:     public function handleCharacterData($parser, &$data)
543:     {
544:         switch ($parser->getParentTag()) {
545:             case 'template':
546:                 $parser->setTempArr('type', $data);
547:                 break;
548:             default:
549:                 break;
550:         }
551:     }
552: }
553: 
554: 555: 556: 
557: class ThemeSetTagHandler extends XmlTagHandler
558: {
559:     560: 561: 
562:     public function __construct()
563:     {
564:     }
565: 
566:     567: 568: 
569:     public function getName()
570:     {
571:         return 'tag';
572:     }
573: 
574:     575: 576: 577: 
578:     public function handleCharacterData($parser, &$data)
579:     {
580:         switch ($parser->getParentTag()) {
581:             case 'image':
582:                 $parser->setTempArr('tag', $data);
583:                 break;
584:             default:
585:                 break;
586:         }
587:     }
588: }
589: