Ejemplo n.º 1
0
 /**
  * Get arguments for label
  *
  * @param InterfaceGeneralModel $objModelRow
  * @return array
  */
 protected function getListViewLabelArguments($objModelRow)
 {
     if ($this->getDC()->arrDCA['list']['sorting']['mode'] == 6) {
         $this->loadDataContainer($objDC->getParentTable());
         $objTmpDC = new DC_General($objDC->getParentTable());
         $arrCurrentDCA = $objTmpDC->getDCA();
     } else {
         $arrCurrentDCA = $this->getDC()->arrDCA;
     }
     $args = array();
     $showFields = $arrCurrentDCA['list']['label']['fields'];
     // Label
     foreach ($showFields as $k => $v) {
         if (strpos($v, ':') !== false) {
             $args[$k] = $objModelRow->getMeta(DCGE::MODEL_LABEL_ARGS);
         } elseif (in_array($this->getDC()->arrDCA['fields'][$v]['flag'], array(5, 6, 7, 8, 9, 10))) {
             if ($this->getDC()->arrDCA['fields'][$v]['eval']['rgxp'] == 'date') {
                 $args[$k] = $this->parseDate($GLOBALS['TL_CONFIG']['dateFormat'], $objModelRow->getProperty($v));
             } elseif ($this->getDC()->arrDCA['fields'][$v]['eval']['rgxp'] == 'time') {
                 $args[$k] = $this->parseDate($GLOBALS['TL_CONFIG']['timeFormat'], $objModelRow->getProperty($v));
             } else {
                 $args[$k] = $this->parseDate($GLOBALS['TL_CONFIG']['datimFormat'], $objModelRow->getProperty($v));
             }
         } elseif ($this->getDC()->arrDCA['fields'][$v]['inputType'] == 'checkbox' && !$this->getDC()->arrDCA['fields'][$v]['eval']['multiple']) {
             $args[$k] = strlen($objModelRow->getProperty($v)) ? $arrCurrentDCA['fields'][$v]['label'][0] : '';
         } else {
             $row = deserialize($objModelRow->getProperty($v));
             if (is_array($row)) {
                 $args_k = array();
                 foreach ($row as $option) {
                     $args_k[] = strlen($arrCurrentDCA['fields'][$v]['reference'][$option]) ? $arrCurrentDCA['fields'][$v]['reference'][$option] : $option;
                 }
                 $args[$k] = implode(', ', $args_k);
             } elseif (isset($arrCurrentDCA['fields'][$v]['reference'][$objModelRow->getProperty($v)])) {
                 $args[$k] = is_array($arrCurrentDCA['fields'][$v]['reference'][$objModelRow->getProperty($v)]) ? $arrCurrentDCA['fields'][$v]['reference'][$objModelRow->getProperty($v)][0] : $arrCurrentDCA['fields'][$v]['reference'][$objModelRow->getProperty($v)];
             } elseif (($arrCurrentDCA['fields'][$v]['eval']['isAssociative'] || array_is_assoc($arrCurrentDCA['fields'][$v]['options'])) && isset($arrCurrentDCA['fields'][$v]['options'][$objModelRow->getProperty($v)])) {
                 $args[$k] = $arrCurrentDCA['fields'][$v]['options'][$objModelRow->getProperty($v)];
             } else {
                 $args[$k] = $objModelRow->getProperty($v);
             }
         }
     }
     return $args;
 }
Ejemplo n.º 2
0
 /**
  * Check if two models have the same values in all properties.
  *
  * @param InterfaceGeneralModel $objModel1 The first model to compare.
  *
  * @param InterfaceGeneralModel $objModel2 The second model to compare.
  *
  * @return boolean True - If both models are same, false if not.
  */
 public function sameModels($objModel1, $objModel2)
 {
     foreach ($objModel1 as $key => $value) {
         if ($key == "id") {
             continue;
         }
         if (is_array($value)) {
             if (!is_array($objModel2->getProperty($key))) {
                 return false;
             }
             if (serialize($value) != serialize($objModel2->getProperty($key))) {
                 return false;
             }
         } else {
             if ($value != $objModel2->getProperty($key)) {
                 return false;
             }
         }
     }
     return true;
 }
 public function sortCollection(InterfaceGeneralModel $a, InterfaceGeneralModel $b)
 {
     if ($a->getProperty($this->arrColSort['field']) == $b->getProperty($this->arrColSort['field'])) {
         return 0;
     }
     if (!$this->arrColSort['reverse']) {
         return $a->getProperty($this->arrColSort['field']) < $b->getProperty($this->arrColSort['field']) ? -1 : 1;
     } else {
         return $a->getProperty($this->arrColSort['field']) < $b->getProperty($this->arrColSort['field']) ? 1 : -1;
     }
 }
Ejemplo n.º 4
0
 /**
  * Get for a field the readable value
  *
  * @param string $strFieldName
  * @param mixed $mixValue
  * @return mixed [string|int]
  */
 public function getReadableFieldValue($strFieldName, $mixValue)
 {
     if (!key_exists($strFieldName, $this->arrDCA['fields'])) {
         return $mixValue;
     }
     // Load the config for current field
     $arrFieldConfig = $this->arrDCA['fields'][$strFieldName];
     $mixModelField = $this->objCurrentModel->getProperty($strFieldName);
     /*
      * @todo Maybe the controlle should handle this ?
      */
     if (isset($arrFieldConfig['foreignKey'])) {
         $temp = array();
         $chunks = explode('.', $arrFieldConfig['foreignKey'], 2);
         foreach ((array) $value as $v) {
             //                    $objKey = $this->Database->prepare("SELECT " . $chunks[1] . " AS value FROM " . $chunks[0] . " WHERE id=?")
             //                            ->limit(1)
             //                            ->execute($v);
             //
             //                    if ($objKey->numRows)
             //                    {
             //                        $temp[] = $objKey->value;
             //                    }
         }
         //                $row[$i] = implode(', ', $temp);
     } else {
         if (is_array($mixValue)) {
             foreach ($mixValue as $kk => $vv) {
                 if (is_array($vv)) {
                     $vals = array_values($vv);
                     $mixValue[$kk] = $vals[0] . ' (' . $vals[1] . ')';
                 }
             }
             return implode(', ', $mixValue);
         } else {
             if ($arrFieldConfig['eval']['rgxp'] == 'date') {
                 return $this->parseDate($GLOBALS['TL_CONFIG']['dateFormat'], $mixValue);
             } else {
                 if ($arrFieldConfig['eval']['rgxp'] == 'time') {
                     return $this->parseDate($GLOBALS['TL_CONFIG']['timeFormat'], $mixValue);
                 } else {
                     if ($arrFieldConfig['eval']['rgxp'] == 'datim' || in_array($arrFieldConfig['flag'], array(5, 6, 7, 8, 9, 10)) || $strFieldName == 'tstamp') {
                         return $this->parseDate($GLOBALS['TL_CONFIG']['datimFormat'], $mixValue);
                     } else {
                         if ($arrFieldConfig['inputType'] == 'checkbox' && !$arrFieldConfig['eval']['multiple']) {
                             return strlen($mixValue) ? $GLOBALS['TL_LANG']['MSC']['yes'] : $GLOBALS['TL_LANG']['MSC']['no'];
                         } else {
                             if ($arrFieldConfig['inputType'] == 'textarea' && ($arrFieldConfig['eval']['allowHtml'] || $arrFieldConfig['eval']['preserveTags'])) {
                                 return nl2br_html5(specialchars($mixValue));
                             } else {
                                 if (is_array($arrFieldConfig['reference'])) {
                                     return isset($arrFieldConfig['reference'][$mixModelField]) ? is_array($arrFieldConfig['reference'][$mixModelField]) ? $arrFieldConfig['reference'][$mixModelField][0] : $arrFieldConfig['reference'][$mixModelField] : $mixModelField;
                                 } else {
                                     if (array_is_assoc($arrFieldConfig['options'])) {
                                         return $arrFieldConfig['options'][$mixModelField];
                                     } else {
                                         return $mixValue;
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
 /**
  * Retrieve the current values of the model and create the title widget information.
  *
  * @param InterfaceGeneralModel $objModel the current Model active in the DC.
  *
  * @param DC_General            $objDC    the Datacontainer calling us.
  */
 public function onModelUpdatedCallback($objModel, $objDC)
 {
     // do nothing if not in edit mode.
     if (!($this->Input->get('act') == 'create' || $this->Input->get('act') == 'edit')) {
         return;
     }
     $this->objectsFromUrl($objDC);
     $GLOBALS['TL_DCA']['tl_metamodel_dcasetting']['fields']['legendtitle'] = array_replace_recursive(parent::makeMultiColumnName($this->objMetaModel, $GLOBALS['TL_LANG']['tl_metamodel_dcasetting']['name_langcode'], $GLOBALS['TL_LANG']['tl_metamodel_dcasetting']['name_value'], false, $objModel->getProperty('legendtitle')), $GLOBALS['TL_DCA']['tl_metamodel_dcasetting']['fields']['legendtitle']);
 }
 /**
  * Save a model to the database.
  *
  * In general, this method fetches the solely property "rows" from the model and updates the local table against
  * these contents.
  *
  * The parent id (id of the model) will get checked and reflected also for new items.
  *
  * When rows with duplicate ids are encountered (like from MCW for example), the dupes are inserted as new rows.
  *
  * @param InterfaceGeneralModel $objItem   The model to save.
  *
  * @param bool                  $recursive Ignored as not relevant in this data provider.
  *
  * @return InterfaceGeneralModel The passed Model.
  *
  * @throws Exception When the passed model does not contain a property named "rows", an Exception is thrown.
  */
 public function save(InterfaceGeneralModel $objItem, $recursive = false)
 {
     $arrData = $objItem->getProperty('rows');
     if (!($objItem->getID() && $arrData)) {
         throw new Exception('invalid input data in model.', 1);
     }
     $arrKeep = array();
     foreach ($arrData as $i => $arrRow) {
         // TODO: add an option to restrict this to some allowed fields?
         $arrSQL = $arrRow;
         // update all.
         $intId = intval($arrRow['id']);
         // Work around the fact that multicolumnwizard does not clear any hidden fields when copying a dataset.
         // therefore we do consider any dupe as new dataset and save it accordingly.
         if (in_array($intId, $arrKeep)) {
             $intId = 0;
             unset($arrSQL['id']);
         }
         if ($intId > 0) {
             $this->objDatabase->prepare(sprintf('UPDATE tl_metamodel_dca_combine %%s WHERE id=? AND %s=?', $this->strGroupCol))->set($arrSQL)->execute($intId, $objItem->getId());
             $arrKeep[] = $intId;
         } else {
             // force group col value:
             $arrSQL[$this->strGroupCol] = $objItem->getId();
             $arrKeep[] = $this->objDatabase->prepare('INSERT INTO tl_metamodel_dca_combine %s')->set($arrSQL)->execute()->insertId;
         }
     }
     // house keeping, kill the rest.
     $this->objDatabase->prepare(sprintf('DELETE FROM  tl_metamodel_dca_combine WHERE %s=? AND id NOT IN (%s)', $this->strGroupCol, implode(',', $arrKeep)))->execute($objItem->getId());
     return $objItem;
 }