/**
  *
  * @param array $entries
  * @param array $columns
  * @param tx_rnbase_util_FormTool $formTool
  * @param Tx_Rnbase_Domain_Model_DataInterface $options
  * @return array 0 are data and 1 layout
  */
 public static function prepareTable($entries, $columns, $formTool, $options)
 {
     $options = tx_rnbase_model_data::getInstance($options);
     $tableLayout = $formTool->getDoc()->tableLayout;
     $tableData = array(self::getHeadline($columns, $options, $formTool));
     $rowCount = 1;
     $isRowOdd = FALSE;
     foreach ($entries as $entry) {
         $tableData[$rowCount] = self::prepareRow($entry, $columns, $formTool, $options);
         $rowCount++;
         // now add the language overlays!
         // sample css for mod template:
         // table.typo3-dblist tr.localization { opacity: 0.5; font-size: 0.92em; }
         // table.typo3-dblist tr.localization td:nth-child(1), table.typo3-dblist tr.localization td:nth-child(2) { padding-left: 24px; }
         if ($entry instanceof Tx_Rnbase_Domain_Model_RecordInterface && $options->getAddI18Overlays() && $entry->getUid() == $entry->getProperty('uid') && !$entry->getSysLanguageUid()) {
             // set the layout for the original (last) row
             $defName = $isRowOdd ? 'defRowOdd' : 'defRowEven';
             $tableLayout[$rowCount - 1] = is_array($tableLayout[$defName]) ? $tableLayout[$defName] : $tableLayout['defRow'];
             // the spacial layout for the overlay rows
             $layout = $tableLayout[$rowCount - 1];
             $layout['tr'][0] = '<tr class="' . ($isRowOdd ? 'db_list_normal' : 'db_list_alt') . ' localization">';
             $isRowOdd = !$isRowOdd;
             // render the overlays with the special layout
             foreach (self::getLangOverlayEntries($entry) as $overlay) {
                 $overlay->setProperty('_MOD_OVERLAY', TRUE);
                 $tableData[$rowCount] = self::prepareRow($overlay, $columns, $formTool, $options);
                 $overlay->unsProperty('_MOD_OVERLAY');
                 $tableLayout[$rowCount] = $layout;
                 $rowCount++;
             }
         }
     }
     return array($tableData, $tableLayout);
 }
 /**
  * @test
  */
 public function testRecursiveInstance()
 {
     $data = array('gender' => 'm', 'name' => array('first' => 'John', 'last' => 'Doe', 'test' => array()));
     $model = tx_rnbase_model_data::getInstance($data);
     $this->assertSame('m', $model->getGender());
     $this->assertInstanceOf('tx_rnbase_model_data', $model->getName());
     $this->assertSame('John', $model->getName()->getFirst());
     $this->assertSame('Doe', $model->getName()->getLast());
     $this->assertInstanceOf('tx_rnbase_model_data', $model->getName()->getTest());
 }
 /**
  *
  * @param tx_rnbase_model_base $model
  * @param array|tx_rnbase_model_data $options
  * @return string
  */
 protected function makeLink($model = NULL, $options = NULL)
 {
     if (!$model instanceof tx_rnbase_model_base) {
         $item = $this->getModel(array('uid' => 14))->setTableName('pages');
     }
     if (!$options instanceof tx_rnbase_model_data) {
         $options = tx_rnbase_model_data::getInstance($options);
     }
     /* @var $linker tx_rnbase_mod_linker_ShowDetails */
     $linker = tx_rnbase::makeInstance('tx_rnbase_mod_linker_ShowDetails');
     self::assertInstanceOf('tx_rnbase_mod_linker_LinkerInterface', $linker);
     return $linker->makeLink($item, tx_rnbase::makeInstance('tx_rnbase_util_FormTool'), 0, $options);
 }
 /**
  * returns the sprite icon for the given sys language record.
  *
  * @param array|int $recordOrUid
  * @return Ambigous <string, multitype:>
  */
 public static function getLangSpriteIcon($recordOrUid, $options = NULL)
 {
     tx_rnbase::load('tx_rnbase_model_data');
     $options = tx_rnbase_model_data::getInstance($options);
     if (!is_array($recordOrUid)) {
         $langUid = (int) $recordOrUid;
         $record = self::getLangRecord($recordOrUid);
     } else {
         $langUid = (int) $recordOrUid['uid'];
         $record = $recordOrUid;
     }
     $spriteIconName = 'flags-multiple';
     if (!empty($record)) {
         $spriteIconName = t3lib_iconWorks::mapRecordTypeToSpriteIconName('sys_language', $record);
     }
     $out = tx_rnbase_mod_Util::getSpriteIcon($spriteIconName);
     // add title per default (typo3 equivalent)!
     if ($options->getShowTitle() !== FALSE) {
         $langTitle = 'N/A';
         if ($langUid === -1) {
             $langTitle = 'LLL:EXT:lang/locallang_general.xml:LGL.allLanguages';
         } elseif ($langUid === 0) {
             $langTitle = 'LLL:EXT:lang/locallang_general.xml:LGL.default_value';
         } elseif (!empty($record['title'])) {
             $langTitle = $record['title'];
         }
         $out .= '&nbsp;' . htmlspecialchars($GLOBALS['LANG']->sL($langTitle));
     }
     return $out;
 }
 /**
  *
  * @param string $tableName
  * @param array $options
  *     only_record_fields: validates only fields included in the record
  * @return array
  */
 public static function getTcaColumns($tableName, $options = NULL)
 {
     self::loadTCA($tableName);
     $options = tx_rnbase_model_data::getInstance($options);
     $columns = empty($GLOBALS['TCA'][$tableName]['columns']) ? array() : $GLOBALS['TCA'][$tableName]['columns'];
     $tcaOverrides = $options->getTcaOverrides();
     if (!empty($tcaOverrides['columns'])) {
         tx_rnbase::load('tx_rnbase_util_Arrays');
         $columns = tx_rnbase_util_Arrays::mergeRecursiveWithOverrule($columns, $tcaOverrides['columns']);
     }
     return $columns;
 }