function delete() { $deleteSql = rex_sql::getInstance(); $deleteSql->debugsql =& $this->debug; $deleteSql->setTable($this->tableName); $deleteSql->setWhere($this->whereCondition); foreach ($this->getFieldsets() as $fieldsetName) { // POST-Werte ermitteln $fieldValues = $this->fieldsetPostValues($fieldsetName); foreach ($fieldValues as $fieldName => $fieldValue) { // Callback, um die Values vor dem Löschen noch beeinflussen zu können $fieldValue = $this->preDelete($fieldsetName, $fieldName, $fieldValue, $deleteSql); // Element heraussuchen $element =& $this->getElement($fieldsetName, $fieldName); // Den POST-Wert als Value in das Feld speichern // Da generell alles von REDAXO escaped wird, hier slashes entfernen $element->setValue(stripslashes($fieldValue)); } } return $deleteSql->delete(); }
/** * Medien: * * Übernimmt die gePOSTeten werte in ein rex_sql-Objekt und speichert diese */ function _rex_a62_metainfo_med_handleSave($params, $sqlFields) { if ($_SERVER['REQUEST_METHOD'] != 'POST' || !isset($params['file_id'])) { return $params; } global $REX; $media = rex_sql::getInstance(); // $media->debugsql = true; $media->setTable($REX['TABLE_PREFIX'] . 'file'); $media->setWhere('file_id=' . $params['file_id']); _rex_a62_metainfo_handleSave($params, $media, $sqlFields); $media->update(); return $params; }
function setQuery($qry) { $sql = rex_sql::getInstance($this->DBID); return $sql->setQuery($qry); }
function save() { global $I18N_META_INFOS; $fieldName = $this->getFieldValue('name'); if ($fieldName == '') { return $I18N_META_INFOS->msg('field_error_name'); } if (preg_match('/[^a-zA-Z0-9\\_]/', $fieldName)) { return $I18N_META_INFOS->msg('field_error_chars_name'); } // Prüfen ob schon eine Spalte mit dem Namen existiert (nur beim add nötig) if (!$this->isEditMode()) { $sql = new rex_sql(); $sql->setQuery('SELECT * FROM ' . $this->tableName . ' WHERE name="' . $this->addPrefix($fieldName) . '" LIMIT 1'); if ($sql->getRows() == 1) { return $I18N_META_INFOS->msg('field_error_unique_name'); } } // Den alten Wert aus der DB holen // Dies muss hier geschehen, da in parent::save() die Werte für die DB mit den // POST werten überschrieben werden! $fieldOldName = ''; $fieldOldPrior = 9999999999999; // dirty, damit die prio richtig läuft... $fieldOldDefault = ''; if ($this->sql->getRows() == 1) { $fieldOldName = $this->sql->getValue('name'); $fieldOldPrior = $this->sql->getValue('prior'); $fieldOldDefault = $this->sql->getValue('default'); } if (parent::save()) { global $REX, $I18N; $this->organizePriorities($this->getFieldValue('prior'), $fieldOldPrior); rex_generateAll(); $fieldName = $this->addPrefix($fieldName); $fieldType = $this->getFieldValue('type'); $fieldDefault = $this->getFieldValue('default'); $sql = rex_sql::getInstance(); $result = $sql->getArray('SELECT `dbtype`, `dblength` FROM `' . $REX['TABLE_PREFIX'] . '62_type` WHERE id=' . $fieldType); $fieldDbType = $result[0]['dbtype']; $fieldDbLength = $result[0]['dblength']; // TEXT Spalten dürfen in MySQL keine Defaultwerte haben if ($fieldDbType == 'text') { $fieldDefault = null; } if ($this->isEditMode()) { // Spalte in der Tabelle verändern $tmRes = $this->tableManager->editColumn($fieldOldName, $fieldName, $fieldDbType, $fieldDbLength, $fieldDefault); } else { // Spalte in der Tabelle anlegen $tmRes = $this->tableManager->addColumn($fieldName, $fieldDbType, $fieldDbLength, $fieldDefault); } if ($tmRes) { // DefaultWerte setzen if ($fieldDefault != $fieldOldDefault) { $qry = 'UPDATE `' . $this->tableManager->getTableName() . '` SET `' . $fieldName . '`="' . $fieldDefault . '" WHERE `' . $fieldName . '`="' . $fieldOldDefault . '"'; return $sql->setQuery($qry); } // Default werte haben schon zuvor gepasst, daher true zurückgeben return true; } } return false; }
/** * Schließt die Verbindung zum DB Server */ function disconnect($DBID = 1) { global $REX; // Alle Connections schließen if ($DBID === null) { foreach ($REX['DB'] as $DBID => $DBSettings) { rex_sql::disconnect($DBID); } return; } if (!$REX['DB'][$DBID]['PERSISTENT']) { $db = rex_sql::getInstance($DBID, false); if (rex_sql::isValid($db) && is_resource($db->identifier)) { mysql_close($db->identifier); } } }
/** * Gibt die Anzahl der Zeilen zurück, welche vom ursprüngliche SQL Statement betroffen werden * * @return int */ function getRows() { if (!$this->rows) { $sql = rex_sql::getInstance(); $sql->debugsql = $this->debug; $sql->setQuery($this->query); $this->rows = $sql->getRows(); } return $this->rows; }
/** * @author Jens Fuchs <fuchs at d-mind.de> * @project Redaxo-News-Addon * @date 16.11.2012 * @param int * @return * Setzt das archive_date eines Artikels neu und verschiebt ihn somit ins Archiv */ function setToArchive($id) { $sql = rex_sql::getInstance(); $sql->debugsql = false; $sql->setTable(TBL_NEWS); $sql->setWhere('id = ' . $id); $sql->setValue('archive_date', date('Y-m-d')); if ($sql->update()) { return true; } return false; }
/** * Speichert das Formular * * Gibt true zur�ck wenn alles ok war, false bei einem allgemeinen Fehler oder * einen String mit einer Fehlermeldung. */ function save() { global $REX; if (isset($this->languageDependent['id']) and isset($this->languageDependent['clang']) and $this->mode == 'add') { $sql = rex_sql::getInstance(); foreach ($REX['CLANG'] as $key => $val) { $sql->debugsql = $this->debug; $sql->setTable($this->tableName); if (!isset($id) or !$id) { $id = $sql->setNewId($this->languageDependent['id']); } else { $sql->setValue($this->languageDependent['id'], $id); } $sql->setValue($this->languageDependent['clang'], $key); foreach ($this->getFieldsets() as $fieldsetName) { // POST-Werte ermitteln $fieldValues = $this->fieldsetPostValues($fieldsetName); foreach ($fieldValues as $fieldName => $fieldValue) { // Callback, um die Values vor dem Speichern noch beeinflussen zu k�nnen $fieldValue = $this->preSave($fieldsetName, $fieldName, $fieldValue, $sql); if (is_array($fieldValue)) { $fieldValue = implode('|+|', $fieldValue); } // Element heraussuchen $element = $this->getElement($fieldsetName, $fieldName); // Den POST-Wert als Value in das Feld speichern // Da generell alles von REDAXO escaped wird, hier slashes entfernen $element->setValue(stripslashes($fieldValue)); // Den POST-Wert in die DB speichern (inkl. slahes) $sql->setValue($fieldName, $fieldValue); } } if ($sql->insert()) { $msg = true; } else { $msg = false; } } return $msg; } else { return parent::save(); } }
function a62_delete_field($fieldIdOrName) { global $REX, $I18N; // Löschen anhand der FieldId if (is_int($fieldIdOrName)) { $fieldQry = 'SELECT * FROM ' . $REX['TABLE_PREFIX'] . '62_params WHERE field_id=' . $fieldIdOrName . ' LIMIT 2'; $invalidField = $I18N->msg('minfo_field_error_invalid_fieldid'); } else { if (is_string($fieldIdOrName)) { $fieldQry = 'SELECT * FROM ' . $REX['TABLE_PREFIX'] . '62_params WHERE name="' . addslashes($fieldIdOrName) . '" LIMIT 2'; $invalidField = $I18N->msg('minfo_field_error_invalid_name'); } else { trigger_error('MetaInfos: Unexpected type for $fieldIdOrName!', E_USER_ERROR); } } // Feld existiert? $sql = rex_sql::getInstance(); $fieldInfos = $sql->getArray($fieldQry); if ($sql->getRows() != 1) { return $invalidField; } $name = $fieldInfos[0]['name']; $field_id = $fieldInfos[0]['field_id']; $prefix = a62_meta_prefix($name); $metaTable = a62_meta_table($prefix); // Spalte existiert? $sql = rex_sql::getInstance(); $sql->setQuery('SELECT * FROM ' . $metaTable . ' LIMIT 1'); if (!in_array($name, $sql->getFieldnames())) { return $I18N->msg('minfo_field_error_invalid_name'); } $sql = rex_sql::getInstance(); $sql->setTable($REX['TABLE_PREFIX'] . '62_params'); $sql->setWhere('field_id=' . $field_id); if (!$sql->delete()) { return $sql->getError(); } $tableManager = new rex_a62_tableManager($metaTable); return $tableManager->deleteColumn($name); }
function save() { $fieldName = $this->getFieldValue('name'); // Den alten Wert aus der DB holen // Dies muss hier geschehen, da in parent::save() die Werte für die DB mit den // POST werten überschrieben werden! $fieldOldName = ''; $fieldOldPrior = 9999999999999; // dirty, damit die prio richtig läuft... $fieldOldDefault = ''; if ($this->sql->getRows() == 1) { $fieldOldName = $this->sql->getValue('name'); $fieldOldPrior = $this->sql->getValue('prior'); $fieldOldDefault = $this->sql->getValue('default'); } if (parent::save()) { global $REX, $I18N; $this->organizePriorities($this->getFieldValue('prior'), $fieldOldPrior); rex_generateAll(); $fieldName = $this->addPrefix($fieldName); $fieldType = $this->getFieldValue('type'); $fieldDefault = $this->getFieldValue('default'); $sql = rex_sql::getInstance(); $result = $sql->getArray('SELECT `dbtype`, `dblength` FROM `' . $REX['TABLE_PREFIX'] . '62_type` WHERE id=' . $fieldType); $fieldDbType = $result[0]['dbtype']; $fieldDbLength = $result[0]['dblength']; // TEXT Spalten dürfen in MySQL keine Defaultwerte haben if ($fieldDbType == 'text') { $fieldDefault = null; } if ($this->isEditMode()) { // Spalte in der Tabelle verändern $tmRes = $this->tableManager->editColumn($fieldOldName, $fieldName, $fieldDbType, $fieldDbLength, $fieldDefault); } else { // Spalte in der Tabelle anlegen $tmRes = $this->tableManager->addColumn($fieldName, $fieldDbType, $fieldDbLength, $fieldDefault); } if ($tmRes) { // DefaultWerte setzen if ($fieldDefault != $fieldOldDefault) { $upd = new rex_sql(); $upd->setTable($this->tableManager->getTableName()); $upd->setWhere('`' . $fieldName . '`="' . addSlashes($fieldOldDefault) . '"'); $upd->setValue($fieldName, addSlashes($fieldDefault)); return $upd->update(); } // Default werte haben schon zuvor gepasst, daher true zurückgeben return true; } } return false; }
/** * Allgemeine funktion die eine Datenbankspalte fortlaufend durchnummeriert. * Dies ist z.B. nützlich beim Umgang mit einer Prioritäts-Spalte */ function rex_organize_priorities($tableName, $priorColumnName, $whereCondition = '', $orderBy = '', $startBy = 1) { // Datenbankvariable initialisieren $qry = 'SET @count=' . ($startBy - 1); $sql = rex_sql::getInstance(); $sql->setQuery($qry); // Spalte updaten $qry = 'UPDATE ' . $tableName . ' SET ' . $priorColumnName . ' = ( SELECT @count := @count +1 )'; if ($whereCondition != '') { $qry .= ' WHERE ' . $whereCondition; } if ($orderBy != '') { $qry .= ' ORDER BY ' . $orderBy; } $sql = rex_sql::getInstance(); $sql->setQuery($qry); }