/**
  * Logs DB changes
  *
  * @TODO: t3users log nutzen, wenn installiert! tx_t3users_util_ServiceRegistry::getLoggingService();
  *
  * @param 	string 	$msg
  * @param 	string 	$tablename
  * @param 	string 	$where
  * @param 	mixed 	$values
  */
 private static function log($msg, $tablename, $where = false, $values = false)
 {
     if (!self::isLog($tablename)) {
         return false;
     }
     // else
     // daten sammeln
     $data = array();
     $data['fe_user'] = isset($GLOBALS['TSFE']->fe_user->user['uid']) ? $GLOBALS['TSFE']->fe_user->user['uid'] : 'none';
     $data['be_user'] = array_key_exists('BE_USER', $GLOBALS) && is_object($GLOBALS['BE_USER']) ? $GLOBALS['BE_USER']->user['uid'] : 'none';
     $data['tablename'] = $tablename;
     if ($where) {
         $data['where'] = $where;
     }
     if ($values) {
         $data['values'] = $values;
     }
     // backtrace Konfigurierbar machen?
     tx_rnbase::load('tx_mklib_util_Logger');
     $data['debug_backtrace'] = tx_mklib_util_Logger::getDebugBacktrace();
     // wurde auf hidden gesetzt?
     $disabled = tx_mklib_util_TCA::getEnableColumn($tablename, 'disabled', 'hidden');
     if ($values && isset($values[$disabled]) && $values[$disabled]) {
         $msg .= '->disabled';
     }
     // wurde gelöscht?
     $delete = tx_mklib_util_TCA::getEnableColumn($tablename, 'delete', 'deleted');
     if ($values && isset($values[$delete]) && $values[$delete]) {
         $msg .= '->delete';
     }
     // tabellenname ergänzen
     $msg .= '(' . $tablename . ')';
     tx_rnbase_util_Logger::notice($msg, 'mklib', $data);
     return true;
 }
 /**
  * Save model with new data
  *
  * Overwrite this method to specify a specialised method signature,
  * and just call THIS method via parent::handleUpdate().
  * Additionally, the deriving implementation may perform further checks etc.
  *
  * @param tx_rnbase_model_base	$model			This model is being updated.
  * @param array					$data			New data
  * @param string				$where			Override default restriction by defining an explicite where clause
  * @return tx_rnbase_model_base Updated model
  */
 public function handleUpdate(tx_rnbase_model_base $model, array $data, $where = '')
 {
     $table = $model->getTableName();
     $uid = $model->getUid();
     if (!$where) {
         $where = '1=1 AND `' . $table . '`.`uid`=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($uid, $table);
     }
     // remove uid if exists
     if (array_key_exists('uid', $data)) {
         unset($data['uid']);
     }
     // Eleminate columns not in TCA
     tx_rnbase::load('tx_mklib_util_TCA');
     $data = tx_mklib_util_TCA::eleminateNonTcaColumns($model, $data);
     $data = $this->secureFromCrossSiteScripting($model, $data);
     tx_rnbase::load('tx_mklib_util_DB');
     tx_mklib_util_DB::doUpdate($table, $where, $data);
     $model->reset();
     return $model;
 }
 /**
  * @group unit
  */
 public function testGetWizardsReturnsWizardsWithCorrectScriptOrModuleKey()
 {
     $wizards = tx_mklib_util_TCA::getWizards('', array('add' => 1, 'edit' => 1, 'list' => 1, 'RTE' => 1));
     if (tx_rnbase_util_TYPO3::isTYPO60OrHigher()) {
         $this->assertArrayNotHasKey('script', $wizards['add']);
         $this->assertArrayNotHasKey('script', $wizards['edit']);
         $this->assertArrayNotHasKey('script', $wizards['list']);
         $this->assertArrayNotHasKey('script', $wizards['RTE']);
         $this->assertEquals('wizard_add', $wizards['add']['module']['name']);
         $this->assertEquals('wizard_edit', $wizards['edit']['module']['name']);
         $this->assertEquals('wizard_list', $wizards['list']['module']['name']);
         $this->assertEquals('wizard_rte', $wizards['RTE']['module']['name']);
     } else {
         $this->assertArrayNotHasKey('module', $wizards['add']);
         $this->assertArrayNotHasKey('module', $wizards['edit']);
         $this->assertArrayNotHasKey('module', $wizards['list']);
         $this->assertArrayNotHasKey('module', $wizards['RTE']);
         $this->assertEquals('wizard_add.php', $wizards['add']['script']);
         $this->assertEquals('wizard_edit.php', $wizards['edit']['script']);
         $this->assertEquals('wizard_list.php', $wizards['list']['script']);
         $this->assertEquals('wizard_rte.php', $wizards['RTE']['script']);
     }
 }
 /**
  * @TODO: weitere links integrieren!
  * $options = array('hide'=>'ausblenden,'edit'=>'bearbeiten,'remove'=>'löschen','history'='history','info'=>'info','move'=>'verschieben');
  *
  * @param 	tx_rnbase_model_base 	$item
  * @param 	array 					$options
  * @return 	string
  */
 protected function getActions(tx_rnbase_model_base $item, array $options)
 {
     $ret = '';
     $tableName = $item->getTableName();
     // we use the real uid, not the uid of the parent!
     $uid = $item->getProperty('uid');
     foreach ($options as $sLinkId => $bTitle) {
         switch ($sLinkId) {
             case 'edit':
                 $ret .= $this->getFormTool()->createEditLink($tableName, $uid, $bTitle);
                 break;
             case 'hide':
                 $sHiddenColumn = tx_mklib_util_TCA::getEnableColumn($tableName, 'disabled', 'hidden');
                 $ret .= $this->getFormTool()->createHideLink($tableName, $uid, $item->record[$sHiddenColumn]);
                 break;
             case 'remove':
                 //Es wird immer ein Bestätigungsdialog ausgegeben!!! Dieser steht
                 //in der BE-Modul locallang.xml der jeweiligen Extension im Schlüssel
                 //'confirmation_deletion'. (z.B. mkkvbb/mod1/locallang.xml) Soll kein
                 //Bestätigungsdialog ausgegeben werden, dann einfach 'confirmation_deletion' leer lassen
                 $ret .= $this->getFormTool()->createDeleteLink($tableName, $uid, $bTitle, array('confirm' => $GLOBALS['LANG']->getLL('confirmation_deletion')));
                 break;
             default:
                 break;
         }
     }
     return $ret;
 }