/**
  * Aktualisiert einen Datensatz
  *
  * @param 	string 	$tablename
  * @param 	string 	$where
  * @param 	array 	$values
  * @param 	int 	$debug = 0 		Set to 1 to debug sql-String
  * @param 	mixed 	$noQuoteFields 	Array or commaseparated string with fieldnames
  * @param 	array 	$options
  * @return 	int 	number of rows affected
  */
 public static function doUpdate($tablename, $where, $values, $debug = 0, $noQuoteFields = false, array $options = array())
 {
     if ($options['eleminateNonTcaColumns']) {
         $values = tx_mklib_util_TCA::eleminateNonTcaColumnsByTable($tablename, $values);
     }
     $res = parent::doUpdate($tablename, $where, self::insertTimestamp($values, $tablename), $debug, $noQuoteFields);
     self::log('doUpdate', $tablename, $where, $values);
     return $res;
 }
 /**
  * Wrapper for actual deletion
  *
  * Delete records according to given ready-constructed "where" condition and deletion mode
  *
  * @param string	$table
  * @param string	$where		Ready-to-use where condition containing uid restriction
  * @param int		$mode		@see self::handleDelete()
  */
 protected function delete($table, $where, $mode)
 {
     global $GLOBALS;
     tx_rnbase::load('tx_rnbase_util_DB');
     switch ($mode) {
         // Hide model
         case self::DELETION_MODE_HIDE:
             // Set hidden field according to $TCA
             if (!isset($GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'])) {
                 throw new Exception("tx_rnbase_sv1_Base->delete(): Cannot hide records in table {$table} - no \$TCA entry found!");
             }
             //else
             $data = array($GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'] => 1);
             tx_rnbase_util_DB::doUpdate($table, $where, self::insertTimestamp($data, $table));
             break;
             // Soft-delete model
         // Soft-delete model
         case self::DELETION_MODE_SOFTDELETE:
             // Set deleted field according to $TCA
             if (!isset($GLOBALS['TCA'][$table]['ctrl']['delete'])) {
                 throw new Exception("tx_rnbase_sv1_Base->delete(): Cannot soft-delete records in table {$table} - no \$TCA entry found!");
             }
             //else
             $data = array($GLOBALS['TCA'][$table]['ctrl']['delete'] => 1);
             tx_rnbase_util_DB::doUpdate($table, $where, self::insertTimestamp($data, $table));
             break;
             // Really hard-delete model
         // Really hard-delete model
         case self::DELETION_MODE_REALLYDELETE:
             tx_rnbase_util_DB::doDelete($table, $where);
             break;
         default:
             throw new Exception("tx_rnbase_sv1_Base->delete(): Unknown deletion mode ({$mode})");
     }
 }
 /**
  * die Bildanzahl aktualisieren
  *
  */
 public static function updateImageCount($tableName, $fieldName, $itemId)
 {
     $values = array();
     $values[$fieldName] = self::getImageCount($tableName, $fieldName, $itemId);
     tx_rnbase_util_DB::doUpdate($tableName, 'uid=' . $itemId, $values, 0);
 }
 /**
  * Setzt einen Dam Record auf hidden
  * @todo nicht nur verstecken sondern auch löschen integrieren
  * @param array $aDamRecord sollte nur einen record in ['rows'] enthalten
  * @param int $iMode verstecken, auf deleted setzen oder ganz löschen
  * @param bool $bDeletePicture
  *
  * @return bool
  */
 public static function deleteDamRecord($aDamRecords, $iMode = 0, $bDeletePicture = false)
 {
     if (empty($aDamRecords['rows'])) {
         return false;
     }
     foreach ($aDamRecords['rows'] as $iDam => $row) {
         //wenn wir nur keine referenzen mehr haben dann können wir das bild und
         //den eigentlichen eintrag löschen
         if (!tx_mklib_util_DAM::damRecordHasReferences($iDam)) {
             //dam eintrag und bild löschen
             tx_rnbase::load('tx_rnbase_util_DB');
             switch ($iMode) {
                 case 0:
                     //verstecken
                 //verstecken
                 default:
                     tx_rnbase_util_DB::doUpdate('tx_dam', 'tx_dam.uid = ' . $iDam, array('hidden' => 1));
                     break;
                 case 1:
                     //löschen
                     tx_rnbase_util_DB::doUpdate('tx_dam', 'tx_dam.uid = ' . $iDam, array('deleted' => 1));
                     break;
                 case 2:
                     //hart löschen
                     tx_rnbase_util_DB::doDelete('tx_dam', 'tx_dam.uid = ' . $iDam);
                     break;
             }
             //und bild löschen?
             if ($bDeletePicture) {
                 unlink(PATH_site . '/' . $aDamRecords['files'][$iDam]);
             }
         }
     }
     return true;
 }
 /**
  * updates the lastrun time with the current time
  *
  * @return integer
  */
 protected function setLastRunTime()
 {
     try {
         $lastRun = new DateTime();
         $return = @tx_rnbase_util_DB::doUpdate('tx_scheduler_task', 'uid=' . (int) $this->getTaskUid(), array('tx_mklib_lastrun' => $lastRun->format('Y-m-d H:i:s')));
     } catch (Exception $e) {
         $return = 0;
     }
     return $return;
 }
 /**
  * @param int $taskId
  *
  * @return int number of rows affected
  */
 protected function updateLastRunTime($taskId)
 {
     $lastRun = new DateTime();
     return tx_rnbase_util_DB::doUpdate('tx_scheduler_task', 'uid=' . intval($taskId), array('tx_mklog_lastrun' => $lastRun->format('Y-m-d H:i:s')));
 }
 /**
  * alle die nicht laufen oder bei denen
  * eine errinnerung notwendig ist
  * @return void
  */
 protected function resetPossiblyFrozenTasks()
 {
     tx_rnbase_util_DB::doUpdate('tx_scheduler_task', 'LENGTH(serialized_executions) = 0 OR freezedetected < ' . ($GLOBALS['EXEC_TIME'] - $this->getOption('rememberAfter')), array('freezedetected' => 0));
 }
 /**
  * prüfen ob alles gelöscht wird, auch die bilder da sie keine
  * verwendung mehr haben
  * @group integration
  */
 public function testHandleDeleteWhenNoReference()
 {
     $this->importDataSet(tx_mklib_tests_Util::getFixturePath('db/wordlist.xml'));
     //wir müssen nachträglich noch die richtige pid in die dam datensätze einfügen damit
     //diese auch gefunden werden über tx_mklib_util_DAM::getRecords
     require_once PATH_txdam . 'lib/class.tx_dam_db.php';
     tx_rnbase_util_DB::doUpdate('tx_dam', '', array('pid' => tx_dam_db::getPidList()));
     $result = tx_mklib_util_DAM::handleDelete('tx_mklib_wordlist', 2, 'blacklisted', 1, true);
     //richtige Anzahl gelöscht?
     $this->assertEquals(0, $result['deletedReferences'], 'deletedReferences ist falsch!');
     $this->assertEquals(0, $result['deletedRecords'], 'deletedRecords ist falsch!');
     //bild nicht gelöscht?
     $this->assertFileExists($this->sAbsoluteImagePath, 'Das Bild der tempoäreren Anzeigen 4 und 20 wurde nicht gelöscht!');
     //eintrag in dam auf hidden gesetzt?
     $res = tx_rnbase_util_DB::doSelect('*', 'tx_dam', array('enablefieldsoff' => true));
     $this->assertEquals(1, count($res), 'Es wurde nicht die korrekte Anzahl von DAM Einträgen gefunden!');
     $this->assertEquals(1, $res[0]['uid'], 'Es wurde scheinbar eine falscher DAM Eintrag gelöscht!!');
     $this->assertEquals(0, $res[0]['hidden'], 'hidden falsch!');
     $this->assertEquals(0, $res[0]['deleted'], 'deleted falsch!');
 }