Overview

Namespaces

  • DcGeneral
    • Clipboard
    • Contao
      • Callback
      • Compatibility
      • DataDefinition
        • Definition
      • Dca
        • Builder
          • Legacy
        • Definition
        • Palette
        • Populator
      • Event
      • View
        • Contao2BackendView
          • Event
    • Controller
    • Data
    • DataDefinition
      • Builder
      • Definition
        • Properties
        • View
          • Panel
      • ModelRelationship
      • Palette
        • Builder
          • Event
        • Condition
          • Palette
          • Property
    • EnvironmentPopulator
    • Event
    • Exception
    • Factory
      • Event
    • Panel
    • View
      • Event

Classes

  • Subscriber
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  • Todo
  1: <?php
  2: /**
  3:  * PHP version 5
  4:  * @package    generalDriver
  5:  * @author     Christian Schiffler <c.schiffler@cyberspectrum.de>
  6:  * @author     Stefan Heimes <stefan_heimes@hotmail.com>
  7:  * @author     Tristan Lins <tristan.lins@bit3.de>
  8:  * @copyright  The MetaModels team.
  9:  * @license    LGPL.
 10:  * @filesource
 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:  * Class Subscriber - gateway to the legacy Contao HOOK style callbacks.
 23:  *
 24:  * @package DcGeneral\Event
 25:  */
 26: class Subscriber
 27:     implements EventSubscriberInterface
 28: {
 29:     /**
 30:      * {@inheritDoc}
 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:      * Resolve a widget error message.
 44:      *
 45:      * @param ResolveWidgetErrorMessageEvent $event The event being processed.
 46:      *
 47:      * @return void
 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:      * Render a property value to readable text.
 76:      *
 77:      * @param RenderReadablePropertyValueEvent $event The event being processed.
 78:      *
 79:      * @return void
 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:         // TODO: refactor - foreign key handling is not yet supported.
 94:         /*
 95:         if (isset($arrFieldConfig['foreignKey']))
 96:         {
 97:             $temp = array();
 98:             $chunks = explode('.', $arrFieldConfig['foreignKey'], 2);
 99: 
100: 
101:             foreach ((array) $value as $v)
102:             {
103: //                    $objKey = $this->Database->prepare("SELECT " . $chunks[1] . " AS value FROM " . $chunks[0] . " WHERE id=?")
104: //                            ->limit(1)
105: //                            ->execute($v);
106: //
107: //                    if ($objKey->numRows)
108: //                    {
109: //                        $temp[] = $objKey->value;
110: //                    }
111:             }
112: 
113: //                $row[$i] = implode(', ', $temp);
114:         }
115:         // Decode array
116:         else
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:         // Date format.
132:         elseif ($extra['rgxp'] == 'date')
133:         {
134:             $event->setRendered(BackendBindings::parseDate($GLOBALS['TL_CONFIG']['dateFormat'], $value));
135:         }
136:         // Time format.
137:         elseif ($extra['rgxp'] == 'time')
138:         {
139:             $event->setRendered(BackendBindings::parseDate($GLOBALS['TL_CONFIG']['timeFormat'], $value));
140:         }
141:         // Date and time format.
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:         // TODO: refactor - reference handling is not yet supported.
163:         /**
164:         else if (is_array($arrFieldConfig['reference']))
165:         {
166:             return isset($arrFieldConfig['reference'][$mixModelField]) ?
167:                 ((is_array($arrFieldConfig['reference'][$mixModelField])) ?
168:                     $arrFieldConfig['reference'][$mixModelField][0] :
169:                     $arrFieldConfig['reference'][$mixModelField]) :
170:                 $mixModelField;
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: 
contao-community-alliance/dc-general API documentation generated by ApiGen 2.8.0