/** * 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!'); }