1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13: namespace DcGeneral\Contao\Event;
14:
15: use DcGeneral\Contao\BackendBindings;
16: use DcGeneral\DataDefinition\Definition\View\ListingConfigInterface;
17: use DcGeneral\View\Event\RenderReadablePropertyValueEvent;
18: use DcGeneral\Contao\View\Contao2BackendView\Event\ResolveWidgetErrorMessageEvent;
19: use Symfony\Component\EventDispatcher\EventSubscriberInterface;
20:
21: 22: 23: 24: 25:
26: class Subscriber
27: implements EventSubscriberInterface
28: {
29: 30: 31:
32: public static function getSubscribedEvents()
33: {
34: return array
35: (
36: ResolveWidgetErrorMessageEvent::NAME => array('resolveWidgetErrorMessage', -1),
37:
38: RenderReadablePropertyValueEvent::NAME => 'renderReadablePropertyValue',
39: );
40: }
41:
42: 43: 44: 45: 46: 47: 48:
49: public function resolveWidgetErrorMessage(ResolveWidgetErrorMessageEvent $event)
50: {
51: $error = $event->getError();
52:
53: if ($error instanceof \Exception)
54: {
55: $event->setError($error->getMessage());
56: }
57: elseif (is_object($error))
58: {
59: if (method_exists($error, '__toString'))
60: {
61: $event->setError((string)$error);
62: }
63: else
64: {
65: $event->setError(sprintf('[%s]', get_class($error)));
66: }
67: }
68: elseif (!is_string($error))
69: {
70: $event->setError(sprintf('[%s]', gettype($error)));
71: }
72: }
73:
74: 75: 76: 77: 78: 79: 80:
81: public function renderReadablePropertyValue(RenderReadablePropertyValueEvent $event)
82: {
83: if ($event->getRendered() !== null)
84: {
85: return;
86: }
87:
88: $property = $event->getProperty();
89: $value = $event->getValue();
90:
91: $extra = $property->getExtra();
92:
93:
94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117:
118: if (is_array($value))
119: {
120: foreach ($value as $kk => $vv)
121: {
122: if (is_array($vv))
123: {
124: $vals = array_values($vv);
125: $value[$kk] = $vals[0] . ' (' . $vals[1] . ')';
126: }
127: }
128:
129: $event->setRendered(implode(', ', $value));
130: }
131:
132: elseif ($extra['rgxp'] == 'date')
133: {
134: $event->setRendered(BackendBindings::parseDate($GLOBALS['TL_CONFIG']['dateFormat'], $value));
135: }
136:
137: elseif ($extra['rgxp'] == 'time')
138: {
139: $event->setRendered(BackendBindings::parseDate($GLOBALS['TL_CONFIG']['timeFormat'], $value));
140: }
141:
142: elseif ($extra['rgxp'] == 'datim' ||
143: in_array(
144: $property->getGroupingMode(),
145: array(
146: ListingConfigInterface::GROUP_DAY,
147: ListingConfigInterface::GROUP_MONTH,
148: ListingConfigInterface::GROUP_YEAR)
149: ) ||
150: $property->getName() == 'tstamp'
151: ) {
152: $event->setRendered(BackendBindings::parseDate($GLOBALS['TL_CONFIG']['datimFormat'], $value));
153: }
154: elseif ($property->getWidgetType() == 'checkbox' && !$extra['multiple'])
155: {
156: $event->setRendered(strlen($value) ? $GLOBALS['TL_LANG']['MSC']['yes'] : $GLOBALS['TL_LANG']['MSC']['no']);
157: }
158: elseif ($property->getWidgetType() == 'textarea' && ($extra['allowHtml'] || $extra['preserveTags']))
159: {
160: $event->setRendered(nl2br_html5(specialchars($value)));
161: }
162:
163: 164: 165: 166: 167: 168: 169: 170: 171: 172:
173: elseif (array_is_assoc($property->getOptions()))
174: {
175: $options = $property->getOptions();
176: $event->setRendered($options[$value]);
177: }
178: elseif ($value instanceof \DateTime)
179: {
180: $event->setRendered(BackendBindings::parseDate($GLOBALS['TL_CONFIG']['datimFormat'], $value->getTimestamp()));
181: }
182: }
183: }
184: