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;
 }
예제 #5
0
 /**
  * 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;
 }
예제 #7
0
/**
 * @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);
}