public function __get($name)
 {
     if (strpos($name, '[')) {
         $basePropertyName = substr($name, 0, strpos($name, '['));
         $index = substr($name, strpos($name, '[') + 1);
         if (property_exists($this, $basePropertyName)) {
             return ArrayUtil::getNestedValue($this->{$basePropertyName}, $index);
         }
     }
     return parent::__get($name);
 }
 protected function renderControlContentNonEditable()
 {
     $src = $this->resolveDividerImageUrl();
     $alt = static::resolveLabel();
     $imageOptions = array();
     $imageHeight = ArrayUtil::getNestedValue($this->properties, "frontend['inlineStyles']['border-top-width']");
     if (isset($imageHeight)) {
         // get rid of px as for border-top-width we have to save it with px(it appears in style property).
         $imageHeight = substr($imageHeight, 0, -2);
         $imageOptions = array('height' => $imageHeight);
     }
     $content = ZurmoHtml::image($src, $alt, $imageOptions);
     return $content;
 }
 protected function resolveColumnCssClassesByRowConfiguration()
 {
     $configuration = ArrayUtil::getNestedValue($this->properties, "backend['configuration']");
     if (!isset($configuration)) {
         return array();
     }
     $columnCssClasses = null;
     $columnKeysAndCssClasses = null;
     $columnKeys = array_keys($this->content);
     if (strpos($configuration, ':') == false) {
         $columnCount = intval($configuration);
         $columnWidth = NumberToWordsUtil::convert(static::MAX_COLUMN_WIDTH / $columnCount);
         $columnCssClasses = array(BuilderColumnElement::TABLE_CSS_CLASSES_PARAM_KEY => $columnWidth);
         $columnCssClasses = array_fill(0, count($columnKeys), $columnCssClasses);
     } else {
         $ratios = explode(':', $configuration);
         $total = array_sum($ratios);
         $unitRatioWidth = static::MAX_COLUMN_WIDTH / $total;
         foreach ($ratios as $ratio) {
             $width = NumberToWordsUtil::convert($ratio * $unitRatioWidth);
             $columnCssClasses[] = array(BuilderColumnElement::TABLE_CSS_CLASSES_PARAM_KEY => $width);
         }
     }
     $columnKeysAndCssClasses = array_combine($columnKeys, $columnCssClasses);
     return $columnKeysAndCssClasses;
 }
 protected function resolveNonEditableWrapperHtmlOptions()
 {
     $htmlOptions = parent::resolveNonEditableWrapperHtmlOptions();
     $htmlOptions['class'] .= ' ' . $this->properties['backend']['sizeClass'];
     $htmlOptions['align'] = ArrayUtil::getArrayValue($this->properties['backend'], 'align');
     $width = ArrayUtil::getNestedValue($this->properties, "backend['width']");
     if ($width) {
         $htmlOptions['width'] = $width;
     }
     return $htmlOptions;
 }
 protected function resolveInlineStylesForBorderDirectionNegationFromBackendPropertiesNonEditable(array &$mergedProperties)
 {
     $borderNegationStyles = ArrayUtil::getNestedValue($this->properties, 'backend[border-negation]');
     if (!empty($borderNegationStyles)) {
         $borderNegationKeys = array_keys($borderNegationStyles, 'none');
         foreach ($borderNegationKeys as $borderNegationKey) {
             $mergedProperties['style'] .= "{$borderNegationKey}:none;";
         }
     }
 }