Example #1
0
 public function organizePriorities(rex_extension_point $ep)
 {
     if ($this->table->equals($ep->getParam('form'))) {
         $name = $this->getFieldName();
         rex_sql_util::organizePriorities($this->table->getTableName(), $name, $this->whereCondition, $name . ', updatedate desc');
     }
 }
Example #2
0
 /**
  * Löscht eine Clang.
  *
  * @param int $id Zu löschende ClangId
  *
  * @throws rex_exception
  */
 public static function deleteCLang($id)
 {
     $startClang = rex_clang::getStartId();
     if ($id == $startClang) {
         throw new rex_functional_exception(rex_i18n::msg('clang_error_startidcanotbedeleted', $startClang));
     }
     if (!rex_clang::exists($id)) {
         throw new rex_functional_exception(rex_i18n::msg('clang_error_idcanotbedeleted', $id));
     }
     $clang = rex_clang::get($id);
     $del = rex_sql::factory();
     $del->setQuery('delete from ' . rex::getTablePrefix() . 'clang where id=?', [$id]);
     rex_sql_util::organizePriorities(rex::getTable('clang'), 'priority', '', 'priority');
     rex_delete_cache();
     // ----- EXTENSION POINT
     rex_extension::registerPoint(new rex_extension_point('CLANG_DELETED', '', ['id' => $clang->getId(), 'name' => $clang->getName(), 'clang' => $clang]));
 }
Example #3
0
/**
 * Fügt ein MetaFeld hinzu und legt dafür eine Spalte in der MetaTable an.
 */
function rex_metainfo_add_field($title, $name, $priority, $attributes, $type, $default, $params = null, $validate = null, $restrictions = '')
{
    $prefix = rex_metainfo_meta_prefix($name);
    $metaTable = rex_metainfo_meta_table($prefix);
    // Prefix korrekt?
    if (!$metaTable) {
        return rex_i18n::msg('minfo_field_error_invalid_prefix');
    }
    // TypeId korrekt?
    $qry = 'SELECT * FROM ' . rex::getTablePrefix() . 'metainfo_type WHERE id=' . $type . ' LIMIT 2';
    $sql = rex_sql::factory();
    $typeInfos = $sql->getArray($qry);
    if ($sql->getRows() != 1) {
        return rex_i18n::msg('minfo_field_error_invalid_type');
    }
    $fieldDbType = $typeInfos[0]['dbtype'];
    $fieldDbLength = $typeInfos[0]['dblength'];
    // Spalte existiert schon?
    $sql->setQuery('SELECT * FROM ' . $metaTable . ' LIMIT 1');
    if (in_array($name, $sql->getFieldnames())) {
        return rex_i18n::msg('minfo_field_error_unique_name');
    }
    // Spalte extiert laut metainfo_field?
    $qry = 'SELECT * FROM ' . rex::getTablePrefix() . 'metainfo_field WHERE name=:name LIMIT 1';
    $sql = rex_sql::factory();
    $sql->setQuery($qry, [':name' => $name]);
    if ($sql->getRows() != 0) {
        return rex_i18n::msg('minfo_field_error_unique_name');
    }
    $sql->setTable(rex::getTablePrefix() . 'metainfo_field');
    $sql->setValue('title', $title);
    $sql->setValue('name', $name);
    $sql->setValue('priority', $priority);
    $sql->setValue('attributes', $attributes);
    $sql->setValue('type_id', $type);
    $sql->setValue('default', $default);
    $sql->setValue('params', $params);
    $sql->setValue('validate', $validate);
    $sql->setValue('restrictions', $restrictions);
    $sql->addGlobalUpdateFields();
    $sql->addGlobalCreateFields();
    $sql->insert();
    // replace LIKE wildcards
    $prefix = str_replace(['_', '%'], ['\\_', '\\%'], $prefix);
    rex_sql_util::organizePriorities(rex::getTablePrefix() . 'metainfo_field', 'priority', 'name LIKE "' . $prefix . '%"', 'priority, updatedate');
    $tableManager = new rex_metainfo_table_manager($metaTable);
    return $tableManager->addColumn($name, $fieldDbType, $fieldDbLength, $default);
}
Example #4
0
<?php

rex_sql_util::importDump($this->getPath('_install.sql'));
/**
 * yform
 * @author jan.kristinus[at]redaxo[dot]org Jan Kristinus
 * @author <a href="http://www.yakamara.de">www.yakamara.de</a>
 */
$sql = rex_sql::factory();
$sql->setQuery('CREATE TABLE IF NOT EXISTS `' . rex::getTablePrefix() . 'yform_table` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `status` tinyint(1) NOT NULL,
    `table_name` varchar(100) NOT NULL,
    `name` varchar(100) NOT NULL,
    `description` text NOT NULL,
    `list_amount` tinyint(3) unsigned NOT NULL DEFAULT 50,
    `list_sortfield` VARCHAR(255) NOT NULL DEFAULT "id",
    `list_sortorder` ENUM("ASC","DESC") NOT NULL DEFAULT "ASC",
    `prio` int(11) NOT NULL,
    `search` tinyint(1) NOT NULL,
    `hidden` tinyint(1) NOT NULL,
    `export` tinyint(1) NOT NULL,
    `import` tinyint(1) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE(`table_name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;');
$sql->setQuery('CREATE TABLE IF NOT EXISTS `' . rex::getTablePrefix() . 'yform_field` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `table_name` varchar(100) NOT NULL,
    `prio` int(11) NOT NULL,
    `type_id` varchar(100) NOT NULL,
Example #5
0
 protected function organizePriorities($newPrio, $oldPrio)
 {
     if ($newPrio == $oldPrio) {
         return;
     }
     // replace LIKE wildcards
     $metaPrefix = str_replace(['_', '%'], ['\\_', '\\%'], $this->metaPrefix);
     rex_sql_util::organizePriorities($this->tableName, 'priority', 'name LIKE "' . $metaPrefix . '%"', 'priority, updatedate desc');
 }
Example #6
0
 /**
  * Uninstalls a package.
  *
  * @param bool $installDump When TRUE, the sql dump will be importet
  *
  * @throws rex_functional_exception
  *
  * @return bool TRUE on success, FALSE on error
  */
 public function uninstall($installDump = true)
 {
     $isActivated = $this->package->isAvailable();
     if ($isActivated && !$this->deactivate()) {
         return false;
     }
     try {
         $this->package->setProperty('install', false);
         // include uninstall.php
         if (is_readable($this->package->getPath(rex_package::FILE_UNINSTALL))) {
             if (!$isActivated) {
                 rex_i18n::addDirectory($this->package->getPath('lang'));
             }
             $this->package->includeFile(rex_package::FILE_UNINSTALL);
             if (($instmsg = $this->package->getProperty('installmsg', '')) != '') {
                 throw new rex_functional_exception($instmsg);
             }
             if ($this->package->isInstalled()) {
                 throw new rex_functional_exception($this->i18n('no_reason'));
             }
         }
         // import uninstall.sql
         $uninstallSql = $this->package->getPath(rex_package::FILE_UNINSTALL_SQL);
         if ($installDump === true && is_readable($uninstallSql)) {
             rex_sql_util::importDump($uninstallSql);
         }
         // delete assets
         $assets = $this->package->getAssetsPath();
         if (is_dir($assets) && !rex_dir::delete($assets)) {
             throw new rex_functional_exception($this->i18n('install_cant_delete_files'));
         }
         rex_config::removeNamespace($this->package->getPackageId());
         $this->saveConfig();
         $this->message = $this->i18n('uninstalled', $this->package->getName());
         return true;
     } catch (rex_functional_exception $e) {
         $this->message = $e->getMessage();
     } catch (rex_sql_exception $e) {
         $this->message = 'SQL error: ' . $e->getMessage();
     }
     $this->package->setProperty('install', true);
     if ($isActivated) {
         $this->package->setProperty('status', true);
     }
     $this->saveConfig();
     $this->message = $this->i18n('no_uninstall', $this->package->getName()) . '<br />' . $this->message;
     return false;
 }
Example #7
0
 /**
  * Importiert den SQL Dump $filename in die Datenbank.
  *
  * @param string $filename Pfad + Dateinamen zur SQL-Datei
  *
  * @return array Gibt ein Assoc. Array zurück.
  *               'state' => boolean (Status ob fehler aufgetreten sind)
  *               'message' => Evtl. Status/Fehlermeldung
  */
 public static function importDb($filename)
 {
     $return = [];
     $return['state'] = false;
     $return['message'] = '';
     $msg = '';
     $error = '';
     if ($filename == '' || substr($filename, -4, 4) != '.sql') {
         $return['message'] = rex_i18n::msg('backup_no_import_file_chosen_or_wrong_version') . '<br>';
         return $return;
     }
     $conts = rex_file::get($filename);
     // Versionsstempel prüfen
     // ## Redaxo Database Dump Version x.x
     $mainVersion = rex::getVersion('%s');
     $version = strpos($conts, '## Redaxo Database Dump Version ' . $mainVersion);
     if ($version === false) {
         $return['message'] = rex_i18n::msg('backup_no_valid_import_file') . '. [## Redaxo Database Dump Version ' . $mainVersion . '] is missing';
         return $return;
     }
     // Versionsstempel entfernen
     $conts = trim(str_replace('## Redaxo Database Dump Version ' . $mainVersion, '', $conts));
     // Prefix prüfen
     // ## Prefix xxx_
     if (preg_match('/^## Prefix ([a-zA-Z0-9\\_]*)/', $conts, $matches) && isset($matches[1])) {
         // prefix entfernen
         $prefix = $matches[1];
         $conts = trim(str_replace('## Prefix ' . $prefix, '', $conts));
     } else {
         // Prefix wurde nicht gefunden
         $return['message'] = rex_i18n::msg('backup_no_valid_import_file') . '. [## Prefix ' . rex::getTablePrefix() . '] is missing';
         return $return;
     }
     // Charset prüfen
     // ## charset xxx_
     if (preg_match('/^## charset ([a-zA-Z0-9\\_\\-]*)/', $conts, $matches) && isset($matches[1])) {
         // charset entfernen
         $charset = $matches[1];
         $conts = trim(str_replace('## charset ' . $charset, '', $conts));
         // $rexCharset = rex_i18n::msg('htmlcharset');
         $rexCharset = 'utf-8';
         if ($rexCharset != $charset) {
             $return['message'] = rex_i18n::msg('backup_no_valid_charset') . '. ' . $rexCharset . ' != ' . $charset;
             return $return;
         }
     }
     // Prefix im export mit dem der installation angleichen
     if (rex::getTablePrefix() != $prefix) {
         // Hier case-insensitiv ersetzen, damit alle möglich Schreibweisen (TABLE TablE, tAblE,..) ersetzt werden
         // Dies ist wichtig, da auch SQLs innerhalb von Ein/Ausgabe der Module vom rex-admin verwendet werden
         $conts = preg_replace('/(TABLES? `?)' . preg_quote($prefix, '/') . '/i', '$1' . rex::getTablePrefix(), $conts);
         $conts = preg_replace('/(INTO `?)' . preg_quote($prefix, '/') . '/i', '$1' . rex::getTablePrefix(), $conts);
         $conts = preg_replace('/(EXISTS `?)' . preg_quote($prefix, '/') . '/i', '$1' . rex::getTablePrefix(), $conts);
     }
     // ----- EXTENSION POINT
     $filesize = filesize($filename);
     $msg = rex_extension::registerPoint(new rex_extension_point('BACKUP_BEFORE_DB_IMPORT', $msg, ['content' => $conts, 'filename' => $filename, 'filesize' => $filesize]));
     // require import skript to do some userside-magic
     self::importScript(str_replace('.sql', '.php', $filename), self::IMPORT_DB, self::IMPORT_EVENT_PRE);
     // Datei aufteilen
     $lines = [];
     rex_sql_util::splitSqlFile($lines, $conts, 0);
     $sql = rex_sql::factory();
     foreach ($lines as $line) {
         try {
             $sql->setQuery($line['query']);
         } catch (rex_sql_exception $e) {
             $error .= "\n" . $e->getMessage();
         }
     }
     if ($error != '') {
         $return['message'] = trim($error);
         return $return;
     }
     $msg .= rex_i18n::msg('backup_database_imported') . '. ' . rex_i18n::msg('backup_entry_count', count($lines)) . '<br />';
     unset($lines);
     // prüfen, ob eine user tabelle angelegt wurde
     $tables = rex_sql::showTables();
     $user_table_found = in_array(rex::getTablePrefix() . 'user', $tables);
     if (!$user_table_found) {
         $create_user_table = '
          CREATE TABLE ' . rex::getTablePrefix() . 'user
          (
              id int(11) NOT NULL auto_increment,
              name varchar(255) NOT NULL,
              description text NOT NULL,
              login varchar(50) NOT NULL,
              psw varchar(50) NOT NULL,
              status varchar(5) NOT NULL,
              role int(11) NOT NULL,
              rights text NOT NULL,
              login_tries tinyint(4) NOT NULL DEFAULT 0,
              createuser varchar(255) NOT NULL,
              updateuser varchar(255) NOT NULL,
              createdate datetime NOT NULL,
              updatedate datetime NOT NULL,
              lasttrydate datetime NOT NULL,
              session_id varchar(255) NOT NULL,
              PRIMARY KEY(id)
          ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;';
         $db = rex_sql::factory();
         try {
             $db->setQuery($create_user_table);
         } catch (rex_sql_exception $e) {
             // evtl vorhergehende meldungen löschen, damit nur der fehler angezeigt wird
             $msg = '';
             $msg .= $e->getMessage();
         }
     }
     $user_role_table_found = in_array(rex::getTablePrefix() . 'user_role', $tables);
     if (!$user_role_table_found) {
         $create_user_role_table = '
          CREATE TABLE ' . rex::getTablePrefix() . 'user_role
          (
              id int(11) NOT NULL auto_increment,
              name varchar(255) NOT NULL,
              description text NOT NULL,
              rights text NOT NULL,
              createuser varchar(255) NOT NULL,
              updateuser varchar(255) NOT NULL,
              createdate datetime NOT NULL DEFAULT 0,
              updatedate datetime NOT NULL DEFAULT 0
              PRIMARY KEY(id)
          ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;';
         $db = rex_sql::factory();
         try {
             $db->setQuery($create_user_role_table);
         } catch (rex_sql_exception $e) {
             // evtl vorhergehende meldungen löschen, damit nur der fehler angezeigt wird
             $msg = '';
             $msg .= $e->getMessage();
         }
     }
     // generated neu erstellen, wenn kein Fehler aufgetreten ist
     if ($error == '') {
         // ----- EXTENSION POINT
         $msg = rex_extension::registerPoint(new rex_extension_point('BACKUP_AFTER_DB_IMPORT', $msg, ['content' => $conts, 'filename' => $filename, 'filesize' => $filesize]));
         // require import skript to do some userside-magic
         self::importScript(str_replace('.sql', '.php', $filename), self::IMPORT_DB, self::IMPORT_EVENT_POST);
         $msg .= rex_delete_cache();
         $return['state'] = true;
     }
     $return['message'] = $msg;
     return $return;
 }
Example #8
0
 /**
  * Berechnet die Prios der Kategorien in einer Kategorie neu.
  *
  * @param int $parent_id KategorieId der Kategorie, die erneuert werden soll
  * @param int $clang     ClangId der Kategorie, die erneuert werden soll
  * @param int $new_prio  Neue PrioNr der Kategorie
  * @param int $old_prio  Alte PrioNr der Kategorie
  */
 public static function newCatPrio($parent_id, $clang, $new_prio, $old_prio)
 {
     if ($new_prio != $old_prio) {
         if ($new_prio < $old_prio) {
             $addsql = 'desc';
         } else {
             $addsql = 'asc';
         }
         rex_sql_util::organizePriorities(rex::getTable('article'), 'catpriority', 'clang_id=' . $clang . ' AND parent_id=' . $parent_id . ' AND startarticle=1', 'catpriority,updatedate ' . $addsql);
         rex_article_cache::deleteLists($parent_id);
     }
 }
Example #9
0
 public static function addSlice()
 {
     $article_id = rex_request('article_id', 'int');
     $function = rex_request('page', 'string');
     $cut_slice_id = $slice_id = $_SESSION['slice_ui']['slice_id'];
     $module_id = $_SESSION['slice_ui']['module_id'];
     $clang = rex_get('clang');
     $ctype = rex_get('ctype');
     if (!self::checkPermissions(array('article_id' => $article_id, 'clang' => $clang, 'ctype' => $ctype, 'module_id' => $module_id))) {
         // Alle OBs schließen
         while (@ob_end_clean()) {
         }
         header("Location: " . rex_url::backendController() . '?article_id=' . $article_id . '&clang=' . $clang . '&page=content/edit&ctype=' . $ctype);
         exit;
     }
     $slice_revision = 0;
     $template_attributes = [];
     $newsql = rex_sql::factory();
     // $newsql->setDebug();
     $sliceTable = rex::getTablePrefix() . 'article_slice';
     $newsql->setTable($sliceTable);
     if (strpos($function, 'content/paste') !== false && !empty($_SESSION['slice_ui'])) {
         // determine priority value to get the new slice into the right order
         $priority = '0';
         // $prevSlice->setDebug();
         if ($function === 'content/paste') {
             $priority = 1;
         } else {
             $prevSlice = rex_sql::factory();
             $prevSlice->setQuery('SELECT * FROM ' . $sliceTable . ' WHERE id=' . rex_get('slice_id'));
             $priority = $prevSlice->getValue('priority') + 1;
         }
         $newsql->setValue('article_id', $article_id);
         $newsql->setValue('module_id', $module_id);
         $newsql->setValue('clang_id', $clang);
         $newsql->setValue('ctype_id', $ctype);
         $newsql->setValue('revision', $slice_revision);
         $newsql->setValue('priority', $priority);
         $newsql->addGlobalUpdateFields();
         $newsql->addGlobalCreateFields();
         try {
             $newsql->insert();
             $info = $action_message . rex_i18n::msg('block_added');
             $slice_id = $newsql->getLastId();
             if ($slice_id !== 0) {
                 $_SESSION['slice_ui']['slice_id'] = $slice_id;
             }
             rex_sql_util::organizePriorities(rex::getTable('article_slice'), 'priority', 'article_id=' . $article_id . ' AND clang_id=' . $clang . ' AND ctype_id=' . $ctype . ' AND revision=' . $slice_revision, 'priority, updatedate DESC');
             $function = '';
             // ----- EXTENSION POINT
             rex_extension::registerPoint(new rex_extension_point('SLICE_PASTED', '', ['article_id' => $article_id, 'clang' => $clang, 'function' => $function, 'slice_id' => $slice_id, 'page' => rex_be_controller::getCurrentPage(), 'ctype' => $ctype, 'category_id' => $category_id, 'module_id' => $module_id, 'article_revision' => &$article_revision, 'slice_revision' => &$slice_revision]));
             if ($_SESSION['slice_ui']['cut'] == 1) {
                 $curr = rex_sql::factory();
                 $curr->setDebug();
                 $curr->setTable($sliceTable);
                 $curr->setWhere(array('id' => $cut_slice_id));
                 $curr->delete();
                 rex_sql_util::organizePriorities(rex::getTable('article_slice'), 'priority', 'article_id=' . $_SESSION['slice_ui']['article_id'] . ' AND clang_id=' . $clang . ' AND ctype_id=' . $ctype . ' AND revision=' . $slice_revision, 'priority, updatedate DESC');
             }
         } catch (rex_sql_exception $e) {
             // echo rex_view::warning($e->getMessage());
         }
         // Alle OBs schließen
         while (@ob_end_clean()) {
         }
         header("Location: " . rex_url::backendController() . '?article_id=' . $article_id . '&clang=' . $clang . '&page=content/edit&ctype=' . $ctype);
         exit;
     }
 }
Example #10
0
 /**
  * Kopiert die Inhalte eines Artikels in einen anderen Artikel.
  *
  * @param int $from_id    ArtikelId des Artikels, aus dem kopiert werden (Quell ArtikelId)
  * @param int $to_id      ArtikelId des Artikel, in den kopiert werden sollen (Ziel ArtikelId)
  * @param int $from_clang ClangId des Artikels, aus dem kopiert werden soll (Quell ClangId)
  * @param int $to_clang   ClangId des Artikels, in den kopiert werden soll (Ziel ClangId)
  * @param int $revision
  *
  * @return bool TRUE bei Erfolg, sonst FALSE
  */
 public static function copyContent($from_id, $to_id, $from_clang = 1, $to_clang = 1, $revision = 0)
 {
     if ($from_id == $to_id && $from_clang == $to_clang) {
         return false;
     }
     $gc = rex_sql::factory();
     $gc->setQuery('select * from ' . rex::getTablePrefix() . "article_slice where article_id='{$from_id}' and clang_id='{$from_clang}' and revision='{$revision}'");
     if ($gc->getRows() > 0) {
         $ins = rex_sql::factory();
         //$ins->setDebug();
         $ctypes = [];
         $cols = rex_sql::factory();
         //$cols->setDebug();
         $cols->setquery('SHOW COLUMNS FROM ' . rex::getTablePrefix() . 'article_slice');
         foreach ($gc as $slice) {
             foreach ($cols as $col) {
                 $colname = $col->getValue('Field');
                 if ($colname == 'clang_id') {
                     $value = $to_clang;
                 } elseif ($colname == 'article_id') {
                     $value = $to_id;
                 } else {
                     $value = $slice->getValue($colname);
                 }
                 // collect all affected ctypes
                 if ($colname == 'ctype_id') {
                     $ctypes[$value] = $value;
                 }
                 if ($colname != 'id') {
                     $ins->setValue($colname, $value);
                 }
             }
             $ins->addGlobalUpdateFields();
             $ins->addGlobalCreateFields();
             $ins->setTable(rex::getTablePrefix() . 'article_slice');
             $ins->insert();
         }
         foreach ($ctypes as $ctype) {
             // reorg slices
             rex_sql_util::organizePriorities(rex::getTable('article_slice'), 'priority', 'article_id=' . $to_id . ' AND clang_id=' . $to_clang . ' AND ctype_id=' . $ctype . ' AND revision=' . $revision, 'priority, updatedate');
         }
         rex_article_cache::deleteContent($to_id, $to_clang);
         return true;
     }
     return false;
 }
Example #11
0
     if ($function == 'edit') {
         $newsql->addGlobalUpdateFields();
         try {
             $newsql->update();
             $info = $action_message . rex_i18n::msg('block_updated');
             // ----- EXTENSION POINT
             $info = rex_extension::registerPoint(new rex_extension_point('STRUCTURE_CONTENT_SLICE_UPDATED', $info, ['article_id' => $article_id, 'clang' => $clang, 'function' => $function, 'slice_id' => $slice_id, 'page' => rex_be_controller::getCurrentPage(), 'ctype' => $ctype, 'category_id' => $category_id, 'module_id' => $module_id, 'article_revision' => &$article_revision, 'slice_revision' => &$slice_revision]));
         } catch (rex_sql_exception $e) {
             $warning = $action_message . $e->getMessage();
         }
     } elseif ($function == 'add') {
         $newsql->addGlobalUpdateFields();
         $newsql->addGlobalCreateFields();
         try {
             $newsql->insert();
             rex_sql_util::organizePriorities(rex::getTable('article_slice'), 'priority', 'article_id=' . $article_id . ' AND clang_id=' . $clang . ' AND ctype_id=' . $ctype . ' AND revision=' . $slice_revision, 'priority, updatedate DESC');
             $info = $action_message . rex_i18n::msg('block_added');
             $slice_id = $newsql->getLastId();
             $function = '';
             // ----- EXTENSION POINT
             $info = rex_extension::registerPoint(new rex_extension_point('STRUCTURE_CONTENT_SLICE_ADDED', $info, ['article_id' => $article_id, 'clang' => $clang, 'function' => $function, 'slice_id' => $slice_id, 'page' => rex_be_controller::getCurrentPage(), 'ctype' => $ctype, 'category_id' => $category_id, 'module_id' => $module_id, 'article_revision' => &$article_revision, 'slice_revision' => &$slice_revision]));
         } catch (rex_sql_exception $e) {
             $warning = $action_message . $e->getMessage();
         }
     }
 } else {
     // make delete
     if (rex_content_service::deleteSlice($slice_id)) {
         $global_info = rex_i18n::msg('block_deleted');
         // ----- EXTENSION POINT
         $global_info = rex_extension::registerPoint(new rex_extension_point('STRUCTURE_CONTENT_SLICE_DELETED', $global_info, ['article_id' => $article_id, 'clang' => $clang, 'function' => $function, 'slice_id' => $slice_id, 'page' => rex_be_controller::getCurrentPage(), 'ctype' => $ctype, 'category_id' => $category_id, 'module_id' => $module_id, 'article_revision' => &$article_revision, 'slice_revision' => &$slice_revision]));
Example #12
0
 public static function addSlice()
 {
     $article_id = rex_request('article_id', 'int');
     $function = rex_request('page', 'string');
     $cut_slice_id = $slice_id = $_SESSION['slice_ui']['slice_id'];
     $module_id = $_SESSION['slice_ui']['module_id'];
     $clang = rex_get('clang');
     $ctype = rex_get('ctype');
     $category_id = rex_get('category_id');
     if (!self::checkPermissions(array('article_id' => $article_id, 'clang' => $clang, 'ctype' => $ctype, 'module_id' => $module_id))) {
         // Alle OBs schließen
         while (@ob_end_clean()) {
         }
         header("Location: " . rex_url::backendController() . '?article_id=' . $article_id . '&clang=' . $clang . '&page=content/edit&ctype=' . $ctype);
         exit;
     }
     $slice_revision = 0;
     $template_attributes = [];
     $newsql = rex_sql::factory();
     // $newsql->setDebug();
     $sliceTable = rex::getTablePrefix() . 'article_slice';
     $newsql->setTable($sliceTable);
     if (strpos($function, 'content/paste') !== false && !empty($_SESSION['slice_ui'])) {
         $priority = '0';
         // $prevSlice->setDebug();
         if ($function === 'content/paste') {
             $priority = 1;
         } else {
             $prevSlice = rex_sql::factory();
             $prevSlice->setTable($sliceTable);
             $prevSlice->setWhere(array('id' => rex_get('slice_id')));
             $prevSlice->select();
             $priority = $prevSlice->getValue('priority') + 1;
         }
         $copiedSlice = rex_sql::factory();
         $copiedSlice->setTable($sliceTable);
         $copiedSlice->setWhere(array('id' => $cut_slice_id));
         $copiedSlice->select();
         $exclude = array('id', 'createdate', 'updatedate', 'createuser', 'updateuser', 'priority');
         // print_r($copiedSlice->getRow());
         foreach ($copiedSlice->getRow() as $key => $value) {
             if (empty($value)) {
                 continue;
             }
             $field = end(explode('.', $key));
             if (in_array($field, $exclude)) {
                 continue;
             }
             $newsql->setValue($field, $value);
         }
         $newsql->setValue('article_id', $article_id);
         $newsql->setValue('module_id', $module_id);
         $newsql->setValue('clang_id', $clang);
         $newsql->setValue('ctype_id', $ctype);
         $newsql->setValue('revision', $slice_revision);
         $newsql->setValue('priority', $priority);
         $newsql->addGlobalUpdateFields();
         $newsql->addGlobalCreateFields();
         try {
             $newsql->insert();
             $slice_id = $newsql->getLastId();
             if ($slice_id !== 0) {
                 $_SESSION['slice_ui']['new_slice_id'] = $slice_id;
             }
             rex_sql_util::organizePriorities(rex::getTable('article_slice'), 'priority', 'article_id=' . $article_id . ' AND clang_id=' . $clang . ' AND ctype_id=' . $ctype . ' AND revision=' . $slice_revision, 'priority, updatedate DESC');
             $function = '';
             // ----- EXTENSION POINT
             rex_extension::registerPoint(new rex_extension_point('SLICE_PASTED', '', ['article_id' => $article_id, 'clang' => $clang, 'function' => $function, 'slice_id' => $slice_id, 'page' => rex_be_controller::getCurrentPage(), 'ctype' => $ctype, 'category_id' => $category_id, 'module_id' => $module_id, 'article_revision' => 0, 'slice_revision' => 0]));
             if ($_SESSION['slice_ui']['cut'] == 1) {
                 $curr = rex_sql::factory();
                 $curr->setDebug();
                 $curr->setTable($sliceTable);
                 $curr->setWhere(array('id' => $cut_slice_id));
                 $curr->delete();
                 rex_sql_util::organizePriorities(rex::getTable('article_slice'), 'priority', 'article_id=' . $_SESSION['slice_ui']['article_id'] . ' AND clang_id=' . $clang . ' AND ctype_id=' . $ctype . ' AND revision=' . $slice_revision, 'priority, updatedate DESC');
             }
         } catch (rex_sql_exception $e) {
             echo rex_view::warning($e->getMessage());
         }
         // die();
         // Alle OBs schließen
         while (@ob_end_clean()) {
         }
         header("Location: " . rex_url::backendController() . '?article_id=' . $article_id . '&clang=' . $clang . '&page=content/edit&ctype=' . $ctype);
         exit;
     }
 }