/**
  * Gets the text from the data source
  * @param \ride\library\widget\WidgetProperties $widgetProperties Instance
  * of the widget properties
  * @param string $locale Code of the current locale
  * @return \ride\web\cms\text\Text Instance of the text
  */
 public function getText(WidgetProperties $widgetProperties, $locale)
 {
     $callToActions = array();
     $widgetProperties->getWidgetProperties(TextWidget::PROPERTY_CTA . '.' . $locale);
     foreach ($widgetProperties as $key => $value) {
         $keyTokens = explode('.', $key);
         if (count($keyTokens) < 3) {
             continue;
         }
         if (!isset($callToActions[$keyTokens[2]])) {
             $callToActions[$keyTokens[2]] = new GenericCallToAction();
         }
         $method = 'set' . ucfirst($keyTokens[3]);
         $callToActions[$keyTokens[2]]->{$method}($value);
     }
     $text = new GenericText();
     $text->setFormat($widgetProperties->getLocalizedWidgetProperty($locale, TextWidget::PROPERTY_FORMAT));
     $text->setTitle($widgetProperties->getLocalizedWidgetProperty($locale, TextWidget::PROPERTY_TITLE));
     $text->setSubtitle($widgetProperties->getLocalizedWidgetProperty($locale, TextWidget::PROPERTY_SUBTITLE));
     $text->setBody($widgetProperties->getLocalizedWidgetProperty($locale, TextWidget::PROPERTY_BODY));
     $text->setImage($widgetProperties->getLocalizedWidgetProperty($locale, str_replace('-', '.', TextWidget::PROPERTY_IMAGE)));
     $text->setImageAlignment($widgetProperties->getLocalizedWidgetProperty($locale, str_replace('-', '.', TextWidget::PROPERTY_IMAGE_ALIGNMENT)));
     $text->setCallToActions($callToActions);
     return $text;
 }
 /**
  * Read the properties of the content from the widget properties
  * @param \ride\library\widget\WidgetProperties $properties
  * @return null
  * @todo remove default value for condition
  */
 public function getFromWidgetProperties(WidgetProperties $properties, $locale)
 {
     $this->modelName = $properties->getWidgetProperty(self::PROPERTY_MODEL_NAME);
     $this->entryId = $properties->getWidgetProperty(self::PROPERTY_ENTRY);
     $this->recursiveDepth = $properties->getWidgetProperty(self::PROPERTY_RECURSIVE_DEPTH);
     $this->includeUnlocalized = $properties->getWidgetProperty(self::PROPERTY_INCLUDE_UNLOCALIZED);
     $this->isPaginationEnabled = $properties->getWidgetProperty(self::PROPERTY_PAGINATION_ENABLE);
     $this->paginationRows = $properties->getWidgetProperty(self::PROPERTY_PAGINATION_ROWS);
     $this->paginationOffset = $properties->getWidgetProperty(self::PROPERTY_PAGINATION_OFFSET);
     $this->hasSearch = $properties->getWidgetProperty(self::PROPERTY_SEARCH);
     $this->condition = $properties->getLocalizedWidgetProperty($locale, self::PROPERTY_CONDITION);
     $this->order = $properties->getWidgetProperty(self::PROPERTY_ORDER);
     $this->parameters = $properties->getWidgetProperty(self::PROPERTY_PARAMETERS);
     $this->parametersNone = $properties->getWidgetProperty(self::PROPERTY_PARAMETERS_NONE);
     $this->idField = $properties->getWidgetProperty(self::PROPERTY_ID_FIELD);
     $this->isPrimaryMapper = $properties->getWidgetProperty(self::PROPERTY_PRIMARY);
     $this->contentMapper = $properties->getWidgetProperty(self::PROPERTY_MAPPER);
     $this->template = $properties->getWidgetProperty(self::PROPERTY_TEMPLATE);
     $this->viewProcessor = $properties->getWidgetProperty(self::PROPERTY_VIEW_PROCESSOR);
     $this->contentTitleFormat = $properties->getWidgetProperty(self::PROPERTY_FORMAT_TITLE);
     $this->contentTeaserFormat = $properties->getWidgetProperty(self::PROPERTY_FORMAT_TEASER);
     $this->contentImageFormat = $properties->getWidgetProperty(self::PROPERTY_FORMAT_IMAGE);
     $this->contentDateFormat = $properties->getWidgetProperty(self::PROPERTY_FORMAT_DATE);
     $this->title = $properties->getLocalizedWidgetProperty($locale, self::PROPERTY_TITLE);
     $this->emptyResultView = $properties->getWidgetProperty(self::PROPERTY_EMPTY_RESULT_VIEW, true);
     $this->emptyResultMessage = $properties->getLocalizedWidgetProperty($locale, self::PROPERTY_EMPTY_RESULT_MESSAGE);
     $this->showPagination = $properties->getWidgetProperty(self::PROPERTY_PAGINATION_SHOW);
     $this->useAjaxForPagination = $properties->getWidgetProperty(self::PROPERTY_PAGINATION_AJAX);
     $this->showMore = $properties->getLocalizedWidgetProperty($locale, self::PROPERTY_MORE_SHOW);
     $this->moreLabel = $properties->getLocalizedWidgetProperty($locale, self::PROPERTY_MORE_LABEL);
     $this->moreNode = $properties->getLocalizedWidgetProperty($locale, self::PROPERTY_MORE_NODE);
     $this->metaOg = $properties->getWidgetProperty(self::PROPERTY_META_OG);
     $this->ogTitleFormat = $properties->getWidgetProperty(self::PROPERTY_FORMAT_TITLE_OG);
     $this->ogTeaserFormat = $properties->getWidgetProperty(self::PROPERTY_FORMAT_TEASER_OG);
     $this->ogImageFormat = $properties->getWidgetProperty(self::PROPERTY_FORMAT_IMAGE_OG);
     $this->breadcrumb = $properties->getWidgetProperty(self::PROPERTY_BREADCRUMB);
     if ($this->parameters && !is_numeric($this->parameters)) {
         $this->parameters = explode(self::SEPARATOR, $this->parameters);
     }
     $this->filters = array();
     $filters = $properties->getWidgetProperty(self::PROPERTY_FILTERS);
     if ($filters) {
         $filters = explode(self::SEPARATOR, $filters);
         foreach ($filters as $filter) {
             list($filterName, $filterType, $filterField) = explode(':', $filter);
             $this->filters[$filterName] = array('name' => $filterName, 'type' => $filterType, 'field' => $filterField);
         }
     }
     $fieldsString = $properties->getWidgetProperty(self::PROPERTY_MODEL_FIELDS);
     if (!$fieldsString) {
         $this->modelFields = null;
         return;
     }
     $this->modelFields = array();
     $tokens = explode(self::SEPARATOR, $fieldsString);
     foreach ($tokens as $token) {
         $fieldName = trim($token);
         $this->modelFields[$fieldName] = $fieldName;
     }
 }