1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
48: class AlphaView {
49: 50: 51: 52: 53: 54:
55: protected $BO;
56:
57: 58: 59: 60: 61: 62:
63: protected $provider;
64:
65: 66: 67: 68: 69: 70:
71: private static $logger = null;
72:
73: 74: 75: 76: 77: 78: 79:
80: protected function __construct($BO) {
81: self::$logger = new Logger('AlphaView');
82: self::$logger->debug('>>__construct(BO=['.var_export($BO, true).'])');
83:
84: global $config;
85:
86: if(AlphaDAO::checkClassDefExists(get_class($BO)))
87: $this->BO = $BO;
88: else
89: throw new IllegalArguementException('The BO provided ['.get_class($BO).'] is not defined anywhere!');
90:
91: $this->provider = AlphaRendererProviderFactory::getInstance($config->get('app.renderer.provider.name'), $this->BO);
92:
93: self::$logger->debug('<<__construct');
94: }
95:
96: 97: 98: 99: 100: 101: 102: 103: 104:
105: public static function getInstance($BO, $returnParent=false) {
106: if(self::$logger == null)
107: self::$logger = new Logger('AlphaView');
108: self::$logger->debug('>>getInstance(BO=['.var_export($BO, true).'], returnParent=['.$returnParent.'])');
109:
110: global $config;
111:
112: $filename = get_class($BO);
113:
114: $filename = str_replace('Object', '', $filename);
115:
116: $filename = str_replace('_', ' ', $filename);
117: $filename = ucwords($filename).'View';
118:
119: $filename = str_replace(' ', '', $filename);
120:
121:
122: if (!$returnParent) {
123: if (file_exists($config->get('app.root').'view/'.$filename.'.inc')) {
124: require_once $config->get('app.root').'view/'.$filename.'.inc';
125:
126: self::$logger->debug('<<getInstance [new '.$filename.'('.get_class($BO).')]');
127: return new $filename($BO);
128: }elseif (file_exists($config->get('app.root').'alpha/view/'.$filename.'.inc')) {
129: require_once $config->get('app.root').'alpha/view/'.$filename.'.inc';
130:
131: self::$logger->debug('<<getInstance [new '.$filename.'('.get_class($BO).')]');
132: return new $filename($BO);
133: }else{
134: self::$logger->debug('<<getInstance [new AlphaView('.get_class($BO).', true)]');
135: return new AlphaView($BO, true);
136: }
137: }else{
138: self::$logger->debug('<<getInstance [new AlphaView('.get_class($BO).', true)]');
139: return new AlphaView($BO, true);
140: }
141: }
142:
143: 144: 145: 146: 147: 148: 149:
150: public function setBO($BO) {
151: self::$logger->debug('>>setBO(BO=['.var_export($BO, true).'])');
152:
153: if(AlphaDAO::checkClassDefExists(get_class($BO)))
154: $this->BO = $BO;
155: else
156: throw new IllegalArguementException('The BO provided ['.get_class($BO).'] is not defined anywhere!');
157:
158: self::$logger->debug('<<setBO');
159: }
160:
161: 162: 163: 164: 165: 166:
167: public function getBO() {
168: return $this->BO;
169: }
170:
171: 172: 173: 174: 175: 176:
177: public function createView($fields=array()) {
178: self::$logger->debug('>>createView(fields=['.var_export($fields, true).'])');
179:
180: if(method_exists($this, 'before_createView_callback'))
181: $this->before_createView_callback();
182:
183: global $config;
184:
185: $body = $this->provider->createView($fields);
186:
187: echo $body;
188:
189: if(method_exists($this, 'after_createView_callback'))
190: $this->after_createView_callback();
191:
192: self::$logger->debug('<<createView');
193: }
194:
195: 196: 197: 198: 199: 200:
201: public function editView($fields=array()) {
202: self::$logger->debug('>>editView(fields=['.var_export($fields, true).'])');
203:
204: if(method_exists($this, 'before_editView_callback'))
205: $this->before_editView_callback();
206:
207: global $config;
208:
209: $body = $this->provider->editView($fields);
210:
211: echo $body;
212:
213: if(method_exists($this, 'after_editView_callback'))
214: $this->after_editView_callback();
215:
216: self::$logger->debug('<<editView');
217: }
218:
219: 220: 221: 222: 223: 224:
225: public function listView($fields=array()) {
226: self::$logger->debug('>>listView(fields=['.var_export($fields, true).'])');
227:
228: if(method_exists($this, 'before_listView_callback'))
229: $this->before_listView_callback();
230:
231: global $config;
232:
233: $body = $this->provider->listView($fields);
234:
235: echo $body;
236:
237: if(method_exists($this, 'after_listView_callback'))
238: $this->after_listView_callback();
239:
240: self::$logger->debug('<<listView');
241: }
242:
243: 244: 245: 246: 247: 248:
249: public function detailedView($fields=array()) {
250: self::$logger->debug('>>detailedView(fields=['.var_export($fields, true).'])');
251:
252: if(method_exists($this, 'before_detailedView_callback'))
253: $this->before_detailedView_callback();
254:
255: global $config;
256:
257: $body = $this->provider->detailedView($fields);
258:
259: echo $body;
260:
261: if(method_exists($this, 'after_detailedView_callback'))
262: $this->after_detailedView_callback();
263:
264: self::$logger->debug('<<detailedView');
265: }
266:
267: 268: 269: 270: 271: 272:
273: public function adminView($fields=array()) {
274: self::$logger->debug('>>adminView(fields=['.var_export($fields, true).'])');
275:
276: if(method_exists($this, 'before_adminView_callback'))
277: $this->before_adminView_callback();
278:
279: global $config;
280:
281: $body = $this->provider->adminView($fields);
282:
283: echo $body;
284:
285: if(method_exists($this, 'after_adminView_callback'))
286: $this->after_adminView_callback();
287:
288: self::$logger->debug('<<adminView');
289: }
290:
291: 292: 293: 294: 295: 296: 297: 298:
299: public static function displayPageHead($controller) {
300: if(self::$logger == null)
301: self::$logger = new Logger('AlphaView');
302: self::$logger->debug('>>displayPageHead(controller=['.var_export($controller, true).'])');
303:
304: if(method_exists($controller, 'before_displayPageHead_callback'))
305: $controller->before_displayPageHead_callback();
306:
307: global $config;
308:
309: $provider = AlphaRendererProviderFactory::getInstance($config->get('app.renderer.provider.name'), new PersonObject());
310: eval('$header = '.get_class($provider).'::displayPageHead($controller);');
311:
312: if(method_exists($controller, 'after_displayPageHead_callback'))
313: $header.= $controller->after_displayPageHead_callback();
314:
315: self::$logger->debug('<<displayPageHead ['.$header.']');
316: return $header;
317: }
318:
319: 320: 321: 322: 323: 324: 325:
326: public static function ($controller) {
327: if(self::$logger == null)
328: self::$logger = new Logger('AlphaView');
329:
330: self::$logger->debug('>>displayPageFoot(controller=['.get_class($controller).'])');
331:
332: global $config;
333:
334: $footer = '';
335:
336: if(method_exists($controller, 'before_displayPageFoot_callback'))
337: $footer .= $controller->before_displayPageFoot_callback();
338:
339: $provider = AlphaRendererProviderFactory::getInstance($config->get('app.renderer.provider.name'), new PersonObject());
340: eval('$footer .= '.get_class($provider).'::displayPageFoot($controller);');
341:
342: if(method_exists($controller, 'after_displayPageFoot_callback'))
343: $footer .= $controller->after_displayPageFoot_callback();
344:
345: self::$logger->debug('<<displayPageFoot ['.$footer.']');
346: return $footer;
347: }
348:
349: 350: 351: 352: 353: 354: 355:
356: public static function displayUpdateMessage($message) {
357: if(self::$logger == null)
358: self::$logger = new Logger('AlphaView');
359: self::$logger->debug('>>displayUpdateMessage(message=['.$message.'])');
360:
361: global $config;
362:
363: $provider = AlphaRendererProviderFactory::getInstance($config->get('app.renderer.provider.name'), new PersonObject());
364: eval('$message = '.get_class($provider).'::displayUpdateMessage($message);');
365:
366: self::$logger->debug('<<displayUpdateMessage ['.$message.']');
367: return $message;
368: }
369:
370: 371: 372: 373: 374: 375: 376:
377: public static function displayErrorMessage($message) {
378: if(self::$logger == null)
379: self::$logger = new Logger('AlphaView');
380: self::$logger->debug('>>displayErrorMessage(message=['.$message.'])');
381:
382: global $config;
383:
384: $provider = AlphaRendererProviderFactory::getInstance($config->get('app.renderer.provider.name'), new PersonObject());
385: eval('$message = '.get_class($provider).'::displayErrorMessage($message);');
386:
387: self::$logger->debug('<<displayErrorMessage ['.$message.']');
388: return $message;
389: }
390:
391: 392: 393: 394: 395: 396: 397: 398:
399: public static function renderErrorPage($code, $message) {
400: if(self::$logger == null)
401: self::$logger = new Logger('AlphaView');
402: self::$logger->debug('>>renderErrorPage(code=['.$code.'],message=['.$message.'])');
403:
404: global $config;
405:
406: $provider = AlphaRendererProviderFactory::getInstance($config->get('app.renderer.provider.name'), new PersonObject());
407: eval('$message = '.get_class($provider).'::renderErrorPage($code, $message);');
408:
409: self::$logger->debug('<<renderErrorPage ['.$message.']');
410: return $message;
411: }
412:
413: 414: 415: 416: 417: 418:
419: public static function renderDeleteForm() {
420: if(self::$logger == null)
421: self::$logger = new Logger('AlphaView');
422: self::$logger->debug('>>renderDeleteForm()');
423:
424: global $config;
425:
426: $provider = AlphaRendererProviderFactory::getInstance($config->get('app.renderer.provider.name'), new PersonObject());
427: eval('$html = '.get_class($provider).'::renderDeleteForm();');
428:
429: self::$logger->debug('<<renderDeleteForm ['.$html.']');
430: return $html;
431: }
432:
433: 434: 435: 436: 437: 438: 439: 440:
441: public static function renderSecurityFields() {
442: if(self::$logger == null)
443: self::$logger = new Logger('AlphaView');
444: self::$logger->debug('>>renderSecurityFields()');
445:
446: global $config;
447:
448: $provider = AlphaRendererProviderFactory::getInstance($config->get('app.renderer.provider.name'), new PersonObject());
449: eval('$html = '.get_class($provider).'::renderSecurityFields();');
450:
451: self::$logger->debug('<<renderSecurityFields ['.$html.']');
452: return $html;
453: }
454:
455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465:
466: public function renderIntegerField($name, $label, $mode, $value='', $tableTags=true) {
467: self::$logger->debug('>>renderIntegerField(name=['.$name.'], label=['.$label.'], mode=['.$mode.'], value=['.$value.'], tableTags=['.$tableTags.'])');
468:
469: global $config;
470:
471: $html = $this->provider->renderIntegerField($name, $label, $mode, $value, $tableTags);
472:
473: self::$logger->debug('<<renderIntegerField ['.$html.']');
474: return $html;
475: }
476:
477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487:
488: public function renderDoubleField($name, $label, $mode, $value='', $tableTags=true) {
489: self::$logger->debug('>>renderDoubleField(name=['.$name.'], label=['.$label.'], mode=['.$mode.'], value=['.$value.'], tableTags=['.$tableTags.'])');
490:
491: global $config;
492:
493: $html = $this->provider->renderDoubleField($name, $label, $mode, $value, $tableTags);
494:
495: self::$logger->debug('<<renderDoubleField ['.$html.']');
496: return $html;
497: }
498:
499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509:
510: public function renderBooleanField($name, $label, $mode, $value='', $tableTags=true) {
511: self::$logger->debug('>>renderBooleanField(name=['.$name.'], label=['.$label.'], mode=['.$mode.'], value=['.$value.'], tableTags=['.$tableTags.'])');
512:
513: global $config;
514:
515: $html = $this->provider->renderBooleanField($name, $label, $mode, $value, $tableTags);
516:
517: self::$logger->debug('<<renderBooleanField ['.$html.']');
518: return $html;
519: }
520:
521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532:
533: public function renderEnumField($name, $label, $mode, $options, $value='', $tableTags=true) {
534: self::$logger->debug('>>renderEnumField(name=['.$name.'], label=['.$label.'], mode=['.$mode.'], value=['.$value.'], tableTags=['.$tableTags.'])');
535:
536: global $config;
537:
538: $html = $this->provider->renderEnumField($name, $label, $mode, $options, $value, $tableTags);
539:
540: self::$logger->debug('<<renderEnumField ['.$html.']');
541: return $html;
542: }
543:
544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555:
556: public function renderDEnumField($name, $label, $mode, $options, $value='', $tableTags=true) {
557: self::$logger->debug('>>renderDEnumField(name=['.$name.'], label=['.$label.'], mode=['.$mode.'], value=['.$value.'], tableTags=['.$tableTags.'])');
558:
559: global $config;
560:
561: $html = $this->provider->renderDEnumField($name, $label, $mode, $options, $value, $tableTags);
562:
563: self::$logger->debug('<<renderDEnumField ['.$html.']');
564: return $html;
565: }
566:
567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577:
578: public function renderDefaultField($name, $label, $mode, $value='', $tableTags=true) {
579: self::$logger->debug('>>renderDefaultField(name=['.$name.'], label=['.$label.'], mode=['.$mode.'], value=['.$value.'], tableTags=['.$tableTags.'])');
580:
581: global $config;
582:
583: $html = $this->provider->renderDefaultField($name, $label, $mode, $value, $tableTags);
584:
585: self::$logger->debug('<<renderDefaultField ['.$html.']');
586: return $html;
587: }
588:
589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599:
600: public function renderTextField($name, $label, $mode, $value='', $tableTags=true) {
601: self::$logger->debug('>>renderTextField(name=['.$name.'], label=['.$label.'], mode=['.$mode.'], value=['.$value.'], tableTags=['.$tableTags.'])');
602:
603: global $config;
604:
605: $html = $this->provider->renderTextField($name, $label, $mode, $value, $tableTags);
606:
607: self::$logger->debug('<<renderTextField ['.$html.']');
608: return $html;
609: }
610:
611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623:
624: public function renderRelationField($name, $label, $mode, $value='', $tableTags=true, $expanded=false, $buttons=true) {
625: self::$logger->debug('>>renderRelationField(name=['.$name.'], label=['.$label.'], mode=['.$mode.'], value=['.$value.'], tableTags=['.$tableTags.'], expanded=['.$expanded.'], buttons=['.$buttons.'])');
626:
627: global $config;
628:
629: $html = $this->provider->renderRelationField($name, $label, $mode, $value, $tableTags, $expanded, $buttons);
630:
631: self::$logger->debug('<<renderRelationField ['.$html.']');
632: return $html;
633: }
634:
635: 636: 637: 638: 639: 640: 641: 642: 643:
644: public function renderAllFields($mode, $filterFields=array(), $readOnlyFields=array()) {
645: self::$logger->debug('>>renderAllFields(mode=['.$mode.'], filterFields=['.var_export($filterFields, true).'], readOnlyFields=['.var_export($readOnlyFields, true).'])');
646:
647: global $config;
648:
649: $html = $this->provider->renderAllFields($mode, $filterFields, $readOnlyFields);
650:
651: self::$logger->debug('<<renderAllFields ['.$html.']');
652: return $html;
653: }
654:
655: 656: 657: 658: 659: 660: 661: 662: 663: 664:
665: public static function loadTemplate($BO, $mode, $fields) {
666: self::$logger->debug('>>loadTemplate(BO=['.var_export($BO, true).'], mode=['.$mode.'], fields=['.var_export($fields, true).'])');
667:
668: global $config;
669:
670:
671: $reflection = new ReflectionClass(get_class($BO));
672: $properties = $reflection->getProperties();
673:
674: foreach($properties as $propObj) {
675: $propName = $propObj->name;
676:
677: if($propName != 'logger' && !$propObj->isPrivate()) {
678: $prop = $BO->getPropObject($propName);
679: if($prop instanceof DEnum) {
680: ${$propName} = $BO->getPropObject($propName)->getDisplayValue();
681: }else{
682: ${$propName} = $BO->get($propName);
683: }
684: }
685: }
686:
687:
688: foreach (array_keys($fields) as $fieldName)
689: ${$fieldName} = $fields[$fieldName];
690:
691: $filename = $mode.'.phtml';
692: $classTemplateDir = get_class($BO);
693:
694: $customPath = $config->get('app.root').'view/html/templates/'.$classTemplateDir.'/'.$filename;
695: $defaultPath1 = $config->get('app.root').'alpha/view/renderers/html/templates/'.$classTemplateDir.'/'.$filename;
696: $defaultPath2 = $config->get('app.root').'alpha/view/renderers/html/templates/'.$filename;
697:
698:
699: if (file_exists($customPath)) {
700: self::$logger->debug('Loading template ['.$customPath.']');
701: require $customPath;
702: }elseif (file_exists($defaultPath1)) {
703: self::$logger->debug('Loading template ['.$defaultPath1.']');
704: require $defaultPath1;
705: }elseif (file_exists($defaultPath2)) {
706: self::$logger->debug('Loading template ['.$defaultPath2.']');
707: require $defaultPath2;
708: }else{
709: throw new IllegalArguementException('No ['.$mode.'] HTML template found for class ['.get_class($BO).']');
710: }
711:
712: self::$logger->debug('<<loadTemplate');
713: }
714:
715: 716: 717: 718: 719: 720: 721: 722: 723:
724: public static function loadTemplateFragment($type, $fileName, $fields) {
725: if(self::$logger == null)
726: self::$logger = new Logger('AlphaView');
727: self::$logger->debug('>>loadTemplateFragment(type=['.$type.'], fileName=['.$fileName.'], fields=['.var_export($fields, true).'])');
728:
729: global $config;
730:
731:
732: foreach (array_keys($fields) as $fieldName)
733: ${$fieldName} = $fields[$fieldName];
734:
735: $customPath = $config->get('app.root').'view/'.$type.'/fragments/'.$fileName;
736: $defaultPath = $config->get('app.root').'alpha/view/renderers/'.$type.'/fragments/'.$fileName;
737:
738:
739: if (file_exists($customPath)) {
740: self::$logger->debug('Loading template ['.$customPath.']');
741: require $customPath;
742: }elseif (file_exists($defaultPath)) {
743: self::$logger->debug('Loading template ['.$defaultPath.']');
744: require $defaultPath;
745: }else{
746: throw new IllegalArguementException('Template fragment not found in ['.$customPath.'] or ['.$defaultPath.']!');
747: }
748:
749: self::$logger->debug('<<loadTemplateFragment');
750: }
751:
752: 753: 754: 755: 756: 757: 758: 759: 760:
761: public function setProvider($ProviderClassName) {
762: $this->provider = AlphaRendererProviderFactory::getInstance($ProviderClassName, $this->BO);
763: }
764: }
765:
766: ?>