public static function isActive(rex_extension_point $ep) { $sql = rex_sql::factory(); $sql->setTable(rex::getTablePrefix() . 'article_slice'); $sql->setWhere(array('id' => $ep->getParam('slice_id'))); $sql->select(); if ($sql->getValue('active') == 1 || rex::isBackend()) { return $ep->content; } return ''; }
private function log($success, $message) { $name = $this->name; if (!$name) { if ($this->cronjob instanceof rex_cronjob) { $name = rex::isBackend() ? $this->cronjob->getTypeName() : $this->cronjob->getType(); } else { $name = '[no name]'; } } $log = new rex_log_file(rex_path::addonData('cronjob', 'cronjob.log'), 2000000); $data = [$success ? 'SUCCESS' : 'ERROR', $this->id ?: '--', $name, strip_tags($message)]; $log->add($data); }
/** * Handles the given Exception. * * @param Throwable|Exception $exception The Exception to handle * @param bool $showTrace */ public static function handleException($exception, $showTrace = true) { rex_logger::logException($exception); while (ob_get_level()) { ob_end_clean(); } $status = rex_response::HTTP_INTERNAL_ERROR; if ($exception instanceof rex_http_exception && $exception->getHttpCode()) { $status = $exception->getHttpCode(); } rex_response::setStatus($status); if (rex::isSetup() || rex::isDebugMode() || ($user = rex_backend_login::createUser()) && $user->isAdmin()) { // TODO add a beautiful error page with usefull debugging info $buf = ''; $buf .= '<pre>'; $buf .= '"' . get_class($exception) . '" thrown in ' . $exception->getFile() . ' on line ' . $exception->getLine() . "\n"; if ($exception->getMessage()) { $buf .= '<b>' . ($exception instanceof ErrorException ? self::getErrorType($exception->getSeverity()) . ': ' : '') . $exception->getMessage() . "</b>\n"; } $cause = $exception->getPrevious(); while ($cause) { $buf .= "\n"; $buf .= 'caused by ' . get_class($cause) . ' in ' . $cause->getFile() . ' on line ' . $cause->getLine() . "\n"; if ($cause->getMessage()) { $buf .= '<b>' . ($cause instanceof ErrorException ? self::getErrorType($cause->getSeverity()) . ': ' : '') . $cause->getMessage() . "</b>\n"; } $cause = $cause->getPrevious(); } if ($showTrace) { $buf .= "\n"; $buf .= $exception->getTraceAsString(); } if (!rex::isSetup() && rex::isBackend() && !rex::isSafeMode()) { $buf .= "\n\n"; $buf .= '<a href="' . rex_url::backendPage('packages', ['safemode' => 1]) . '">activate safe mode</a>'; } $buf .= '</pre>'; } else { // TODO small error page, without debug infos $buf = 'Oooops, an internal error occured!'; } rex_response::sendContent($buf); exit; }
public static function init() { if (null === self::$scheme) { self::setScheme(new rex_yrewrite_scheme()); } self::$domainsByMountId = []; self::$domainsByName = []; self::$aliasDomains = []; self::$paths = []; $path = dirname($_SERVER['SCRIPT_NAME']); if (rex::isBackend()) { $path = dirname($path); } $path = rtrim($path, '/') . '/'; self::addDomain(new rex_yrewrite_domain('default', null, $path, 0, rex_article::getSiteStartArticleId(), rex_article::getNotfoundArticleId())); self::$pathfile = rex_path::addonCache('yrewrite', 'pathlist.php'); self::$configfile = rex_path::addonCache('yrewrite', 'config.php'); self::readConfig(); self::readPathFile(); }
<?php /** * REDAXO customizer. * * Codemirror by : http://codemirror.net/ * Marijn Haverbeke <*****@*****.**> */ if (rex::isBackend() && rex::getUser()) { $config = $this->getConfig(); rex_view::addCssFile($this->getAssetsUrl('css/styles.css')); if ($config['codemirror']) { rex_view::addCssFile($this->getAssetsUrl('vendor/codemirror/codemirror.css')); rex_view::addCssFile($this->getAssetsUrl('vendor/codemirror/theme/' . $config['codemirror_theme'] . '.css')); if ($config['codemirror_theme'] != '') { rex_view::setJsProperty('customizer_codemirror_defaulttheme', $config['codemirror_theme']); } rex_view::addJsFile($this->getAssetsUrl('vendor/codemirror/codemirror-compressed.js')); } if ($config['labelcolor'] != '') { rex_view::setJsProperty('customizer_labelcolor', $config['labelcolor']); } if ($config['showlink']) { rex_view::setJsProperty('customizer_showlink', '<h1 class="be-style-customizer-title"><a href="' . rex::getServer() . '" target="_blank">' . rex::getServerName() . '</a><i class="fa fa-external-link"></i></h1>'); } rex_view::addJsFile($this->getAssetsUrl('js/main.js')); }
/** * Sends content to the client. * * @param string $content Content * @param string $contentType Content type * @param int $lastModified HTTP Last-Modified Timestamp * @param string $etag HTTP Cachekey to identify the cache */ public static function sendContent($content, $contentType = null, $lastModified = null, $etag = null) { if (!self::$sentContentType) { self::sendContentType($contentType); } if (!self::$sentCacheControl) { self::sendCacheControl(); } $environment = rex::isBackend() ? 'backend' : 'frontend'; if (self::$httpStatus == self::HTTP_OK && (false === strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') || false !== strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome'))) { // ----- Last-Modified if (!self::$sentLastModified && (rex::getProperty('use_last_modified') === true || rex::getProperty('use_last_modified') === $environment)) { self::sendLastModified($lastModified); } // ----- ETAG if (!self::$sentEtag && (rex::getProperty('use_etag') === true || rex::getProperty('use_etag') === $environment)) { self::sendEtag($etag ?: self::md5($content)); } } // ----- GZIP if (rex::getProperty('use_gzip') === true || rex::getProperty('use_gzip') === $environment) { $content = self::sendGzip($content); } self::cleanOutputBuffers(); header('HTTP/1.1 ' . self::$httpStatus); // content length schicken, damit der browser einen ladebalken anzeigen kann header('Content-Length: ' . rex_string::size($content)); echo $content; if (function_exists('fastcgi_finish_request')) { fastcgi_finish_request(); } }
public function testIsBackend() { $this->assertTrue(rex::isBackend(), 'test run in the backend'); // TODO find more appropriate tests }
function enterObject() { $error = array(); $rfile = 'file_' . md5($this->getFieldName('file')); $err_msgs = $this->getElement('messages'); // min_err,max_err,type_err,empty_err if (!is_array($err_msgs)) { $err_msgs = explode(',', $err_msgs); } $err_msgs['min_error'] = $err_msgs[0]; $err_msgs['max_error'] = isset($err_msgs[1]) ? rex_i18n::translate($err_msgs[1]) : 'max_error'; $err_msgs['type_error'] = isset($err_msgs[2]) ? rex_i18n::translate($err_msgs[2]) : 'type_error'; $err_msgs['empty_error'] = isset($err_msgs[3]) ? rex_i18n::translate($err_msgs[3]) : 'empty_error'; $err_msgs['delete_file'] = isset($err_msgs[4]) ? rex_i18n::translate($err_msgs[4]) : 'delete '; $this->tmp_messages = $err_msgs; $value = $this->getValue(); if ($value == "") { $value = $this->getElement('default_file'); } $this->setValue(''); $value_email = ''; $value_sql = ''; if (!is_string($value) && $value["delete"] == 1) { $value = ''; } // SIZE CHECK $sizes = explode(',', $this->getElement('max_size')); $minsize = count($sizes) > 1 ? (int) ($sizes[0] * 1024) : 0; $maxsize = count($sizes) > 1 ? (int) ($sizes[1] * 1024) : (int) ($sizes[0] * 1024); if ($this->params['send'] && isset($_FILES[$rfile]) && $_FILES[$rfile]['name'] != '' && ($_FILES[$rfile]['size'] > $maxsize || $_FILES[$rfile]['size'] < $minsize)) { if ($_FILES[$rfile]['size'] < $minsize) { $error[] = $err_msgs['min_error']; } if ($_FILES[$rfile]['size'] > $maxsize) { $error[] = $err_msgs['max_error']; } unset($_FILES[$rfile]); } $database_filename_field = $this->getElement('database_filename_field'); if ($database_filename_field != "") { $value = $this->params['value_pool']['sql'][$database_filename_field]; } $prefix = md5(mt_rand() . microtime(true)) . '_'; if ($this->getElement('file_prefix')) { $prefix .= $this->getElement('file_prefix') . '_'; } $upload_folder = $this->getElement('upload_folder'); if ($upload_folder == "") { $upload_folder = rex_path::addonData('yform', 'uploads'); rex_dir::create($upload_folder); } if ($value != "") { if (rex::isBackend()) { $value = explode("_", $value, 2); $value = $value[0]; } $search_path = $upload_folder . '/' . $value . '_' . $this->getElement('file_prefix'); $files = glob(preg_replace('/(\\*|\\?|\\[)/', '[$1]', $search_path) . '*'); if (count($files) == 1) { $value = basename($files[0]); if (rex_request("rex_upload_downloadfile") == $value) { $file = $upload_folder . '/' . $value; if (file_exists($file)) { ob_end_clean(); $filename = explode("_", basename($file), 2); $filename = $filename[1]; header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $filename); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file); exit; } } } else { $value = ""; } } if ($this->params['send']) { if (isset($_FILES[$rfile]) && $_FILES[$rfile]['name'] != '') { $FILE['size'] = $_FILES[$rfile]['size']; $FILE['name'] = $_FILES[$rfile]['name']; $FILE['type'] = $_FILES[$rfile]['type']; $FILE['tmp_name'] = $_FILES[$rfile]['tmp_name']; $FILE['error'] = $_FILES[$rfile]['error']; $FILE['name_normed'] = strtolower(preg_replace('/[^a-zA-Z0-9.\\-\\$\\+]/', '_', $FILE['name'])); $extensions_array = explode(',', $this->getElement('types')); $ext = '.' . pathinfo($FILE['name'], PATHINFO_EXTENSION); if (!in_array(strtolower($ext), $extensions_array) && !in_array(strtoupper($ext), $extensions_array)) { $error[] = $err_msgs['type_error']; $value = ''; } else { $file_normed = $FILE['name_normed']; $file_normed_new = $prefix . $file_normed; if (file_exists($upload_folder . '/' . $file_normed_new)) { for ($cf = 1; $cf < 1000; $cf++) { $file_normed_new = $prefix . $cf . '_' . $file_normed; if (!file_exists($upload_folder . '/' . $file_normed_new)) { break; } } } $value = $file_normed_new; if (!@move_uploaded_file($FILE['tmp_name'], $upload_folder . '/' . $file_normed_new)) { if (!@copy($FILE['tmp_name'], $upload_folder . '/' . $file_normed_new)) { $error[] = 'upload failed: destination folder problem'; $value = ''; } else { @chmod($upload_folder . '/' . $file_normed_new, rex::getDirPerm()); } } else { @chmod($upload_folder . '/' . $file_normed_new, rex::getDirPerm()); } } } } if (count($error) == 0) { switch ($this->getElement('modus')) { case 'database': if ($database_filename_field != "") { $this->params['value_pool']['email'][$database_filename_field] = $value; // $FILE['name_normed']; $this->params['value_pool']['sql'][$database_filename_field] = $value; // $FILE['name_normed']; } $value_email = file_get_contents($upload_folder . '/' . $value); $value_sql = $value_email; break; case 'upload': default: $value_email = $value; $value_sql = $value_email; break; } } $this->setValue($value); $this->params['value_pool']['email'][$this->getName()] = $value_email; $this->params['value_pool']['sql'][$this->getName()] = $value_sql; ## check for required file if ($this->params['send'] && $this->getElement('required') == 1 && $this->getValue() == '') { $error[] = $err_msgs['empty_error']; } ## setting up error Message if ($this->params['send'] && count($error) > 0) { $this->params['warning'][$this->getId()] = $this->params['error_class']; $this->params['warning_messages'][$this->getId()] = implode(', ', $error); } $this->params['form_output'][$this->getId()] = $this->parse('value.upload.tpl.php'); }
/** * Gibt eine Formular-Url zurück. * * @param array $params * @param bool $escape * * @return string */ public function getUrl(array $params = [], $escape = true) { $params = array_merge($this->getParams(), $params); $params['form'] = $this->getName(); $url = rex::isBackend() ? rex_url::backendController($params, $escape) : rex_url::frontendController($params, $escape); return $url; }
$escapeSql = rex_sql::factory(); $sliceDate = ' AND ' . rex::getTablePrefix() . 'article_slice.history_date = ' . $escapeSql->escape($history_date); return 'SELECT ' . rex::getTablePrefix() . 'module.id, ' . rex::getTablePrefix() . 'module.name, ' . rex::getTablePrefix() . 'module.output, ' . rex::getTablePrefix() . 'module.input, ' . rex::getTablePrefix() . 'article_slice.*, ' . rex::getTablePrefix() . 'article.parent_id FROM ' . rex_article_slice_history::getTable() . ' as ' . rex::getTablePrefix() . 'article_slice LEFT JOIN ' . rex::getTablePrefix() . 'module ON ' . rex::getTablePrefix() . 'article_slice.module_id=' . rex::getTablePrefix() . 'module.id LEFT JOIN ' . rex::getTablePrefix() . 'article ON ' . rex::getTablePrefix() . 'article_slice.article_id=' . rex::getTablePrefix() . 'article.id WHERE ' . rex::getTablePrefix() . "article_slice.clang_id='" . $article->getClang() . "' AND\n " . rex::getTablePrefix() . "article.clang_id='" . $article->getClang() . "' AND\n " . rex::getTablePrefix() . "article_slice.revision='" . $history_revision . "'\n " . $articleLimit . ' ' . $sliceLimit . ' ' . $sliceDate . ' ORDER BY ' . rex::getTablePrefix() . 'article_slice.priority'; } }); } if (rex::isBackend() && rex::getUser() && rex::getUser()->hasPerm('history[article_rollback]')) { rex_extension::register(['ART_SLICES_COPY', 'SLICE_ADD', 'SLICE_UPDATE', 'SLICE_MOVE', 'SLICE_DELETE'], function (rex_extension_point $ep) { switch ($ep->getName()) { case 'ART_SLICES_COPY': $type = 'slices_copy'; break; case 'SLICE_MOVE': $type = 'slice_' . $ep->getParam('direction'); break; default: $type = strtolower($ep->getName()); } $article_id = $ep->getParam('article_id'); $clang_id = $ep->getParam('clang_id'); $slice_revision = $ep->getParam('slice_revision'); rex_article_slice_history::makeSnapshot($article_id, $clang_id, $type, $slice_revision);
public static function isActive(rex_extension_point $ep) { $sql = rex_sql::factory(); $sql->setTable(rex::getTablePrefix() . 'article_slice'); $sql->setWhere(array('id' => $ep->getParam('slice_id'))); $sql->select(); $online_from = $sql->getValue('online_from'); $online_to = $sql->getValue('online_to'); if (rex::isBackend() || $sql->getValue('active') == 1 && (empty($online_from) || !empty($online_from) && $online_from < time()) && (empty($online_to) || !empty($online_to) && $online_to >= time())) { $Subject = $ep->getSubject(); if ($sql->getValue('active') != 1 || !empty($online_from) && $online_from > time() || !empty($online_to) && $online_to <= time()) { $Subject = str_replace('rex-slice-output', 'rex-slice-output inactive', $Subject); } if ($_SESSION['slice_ui']['slice_id'] == $ep->getParam('slice_id')) { $Subject = str_replace('rex-slice-output', 'rex-slice-output copied', $Subject); } return $Subject; } return ''; }
/** * Returns an Array containing article field names. * * @return string[] */ public static function getClassVars() { if (empty(self::$classVars)) { self::$classVars = []; $startId = rex::getProperty('start_article_id'); $file = rex_path::addonCache('structure', $startId . '.1.article'); if (!rex::isBackend() && file_exists($file)) { // da getClassVars() eine statische Methode ist, können wir hier nicht mit $this->getId() arbeiten! $genVars = rex_file::getCache($file); unset($genVars['last_update_stamp']); foreach ($genVars as $name => $value) { self::$classVars[] = $name; } } else { // Im Backend die Spalten aus der DB auslesen / via EP holen $sql = rex_sql::factory(); $sql->setQuery('SELECT * FROM ' . rex::getTablePrefix() . 'article LIMIT 0'); foreach ($sql->getFieldnames() as $field) { self::$classVars[] = $field; } } } return self::$classVars; }
/** * Verschieben eines Artikels von einer Kategorie in eine Andere. * * @param int $id ArtikelId des zu verschiebenden Artikels * @param int $from_cat_id KategorieId des Artikels, der Verschoben wird * @param int $to_cat_id KategorieId in die der Artikel verschoben werden soll * * @return bool TRUE bei Erfolg, sonst FALSE */ public static function moveArticle($id, $from_cat_id, $to_cat_id) { $id = (int) $id; $to_cat_id = (int) $to_cat_id; $from_cat_id = (int) $from_cat_id; if ($from_cat_id == $to_cat_id) { return false; } // Artikel in jeder Sprache verschieben foreach (rex_clang::getAllIds() as $clang) { // validierung der id & from_cat_id $from_sql = rex_sql::factory(); $from_sql->setQuery('select * from ' . rex::getTablePrefix() . 'article where clang_id="' . $clang . '" and startarticle<>1 and id="' . $id . '" and parent_id="' . $from_cat_id . '"'); if ($from_sql->getRows() == 1) { // validierung der to_cat_id $to_sql = rex_sql::factory(); $to_sql->setQuery('select * from ' . rex::getTablePrefix() . 'article where clang_id="' . $clang . '" and startarticle=1 and id="' . $to_cat_id . '"'); if ($to_sql->getRows() == 1 || $to_cat_id == 0) { if ($to_sql->getRows() == 1) { $parent_id = $to_sql->getValue('id'); $path = $to_sql->getValue('path') . $to_sql->getValue('id') . '|'; $catname = $to_sql->getValue('catname'); } else { // In RootEbene $parent_id = 0; $path = '|'; $catname = $from_sql->getValue('name'); } $art_sql = rex_sql::factory(); //$art_sql->setDebug(); $art_sql->setTable(rex::getTablePrefix() . 'article'); $art_sql->setValue('parent_id', $parent_id); $art_sql->setValue('path', $path); $art_sql->setValue('catname', $catname); // Artikel als letzten Artikel in die neue Kat einfügen $art_sql->setValue('priority', '99999'); // Kopierter Artikel offline setzen $art_sql->setValue('status', $from_sql->getValue('status')); $art_sql->addGlobalUpdateFields(rex::isBackend() ? null : 'frontend'); $art_sql->setWhere('clang_id="' . $clang . '" and startarticle<>1 and id="' . $id . '" and parent_id="' . $from_cat_id . '"'); $art_sql->update(); // Prios neu berechnen self::newArtPrio($to_cat_id, $clang, 1, 0); self::newArtPrio($from_cat_id, $clang, 1, 0); } else { return false; } } else { return false; } } // Caches des Artikels löschen, in allen Sprachen rex_article_cache::delete($id); // Caches der Kategorien löschen, da sich derin befindliche Artikel geändert haben rex_article_cache::delete($from_cat_id); rex_article_cache::delete($to_cat_id); return true; }
/** * Loads the properties of package.yml. */ public function loadProperties() { static $cache = null; if (is_null($cache)) { $cache = rex_file::getCache(rex_path::coreCache('packages.cache')); } $id = $this->getPackageId(); $file = $this->getPath(self::FILE_PACKAGE); if (!file_exists($file)) { $this->propertiesLoaded = true; return; } if (isset($cache[$id]) && (!rex::isBackend() || !($user = rex::getUser()) || !$user->isAdmin() || $cache[$id]['timestamp'] >= filemtime($file))) { $properties = $cache[$id]['data']; } else { try { $properties = rex_file::getConfig($file); $cache[$id]['timestamp'] = filemtime($file); $cache[$id]['data'] = $properties; static $registeredShutdown = false; if (!$registeredShutdown) { $registeredShutdown = true; register_shutdown_function(function () use(&$cache) { foreach ($cache as $package => $_) { if (!rex_package::exists($package)) { unset($cache[$package]); } } rex_file::putCache(rex_path::coreCache('packages.cache'), $cache); }); } } catch (rex_yaml_parse_exception $exception) { if ($this->isInstalled()) { throw $exception; } $properties = []; } } $this->properties = array_intersect_key($this->properties, ['install' => null, 'status' => null]); if ($properties) { foreach ($properties as $key => $value) { if (isset($this->properties[$key])) { continue; } if ('supportpage' !== $key) { $value = rex_i18n::translateArray($value, false, [$this, 'i18n']); } elseif (!preg_match('@^https?://@i', $value)) { $value = 'http://' . $value; } $this->properties[$key] = $value; } } $this->propertiesLoaded = true; }
public function tryExecute($id, $log = true) { $sql = rex_sql::factory(); $sql->setQuery(' SELECT id, name, type, parameters, `interval` FROM ' . REX_CRONJOB_TABLE . ' WHERE id = ? AND environment LIKE ? LIMIT 1 ', [$id, '%|' . (int) rex::isBackend() . '|%']); if ($sql->getRows() != 1) { $this->getManager()->setMessage('Cronjob not found in database'); $this->saveNextTime(); return false; } return $this->tryExecuteSql($sql, $log); }
/** * {@inheritdoc} */ public function getUrl(array $params = [], $escape = true) { // combine global params with local $_params = array_merge($this->globalParams, $params); return rex::isBackend() ? rex_url::backendController($_params, $escape) : rex_url::frontendController($_params, $escape); }
<?php if (rex::isBackend() && is_object(rex::getUser())) { rex_perm::register('copy[]'); rex_perm::register('slice_ui[]', null, rex_perm::OPTIONS); rex_perm::register('slice_ui[settings]', null, rex_perm::OPTIONS); } if (strpos(rex_request('page'), 'content/emptyclipboard') !== false) { slice_ui::emptyClipboard(); } rex_view::addCssFile($this->getAssetsUrl('slice_ui.css')); if (strpos(rex_request('page'), 'content/paste') !== false) { slice_ui::addSlice(); } if (strpos(rex_request('page'), 'content/toggleSlice') !== false) { slice_ui::toggleSlice(); } if (is_object(rex::getUser()) && (!rex::getUser()->hasPerm('editContentOnly[]') && rex::getUser()->hasPerm('slice_ui[]') || rex::getUser()->isAdmin())) { rex_extension::register('ART_SLICE_MENU', 'slice_ui::modifySliceEditMenu'); } if (is_object(rex::getUser()) && (rex_request('page', 'string') === 'content/copy' || rex_request('page', 'string') === 'content/cut')) { slice_ui::copySlice(); } rex_extension::register('SLICE_SHOW', 'slice_ui::isActive'); /* Slice-Menü überschreiben */ if (!empty($_SESSION['slice_ui'])) { $Content = rex_plugin::get('structure', 'content'); $ContentPages = $Content->getProperty('pages'); $ContentPages['content']['subpages']['paste'] = array('title' => 'Einfügen', 'icon' => 'rex-icon rex-icon-paste'); $ContentPages['content']['subpages']['emptyclipboard'] = array('title' => 'Clipboard löschen', 'icon' => 'rex-icon rex-icon-emptyclipboard'); $Content->setProperty('pages', $ContentPages);
/** * Ändert den Status der Kategorie. * * @param int $category_id Id der Kategorie die gelöscht werden soll * @param int $clang Id der Sprache * @param int|null $status Status auf den die Kategorie gesetzt werden soll, oder NULL wenn zum nächsten Status weitergeschaltet werden soll * * @throws rex_api_exception * * @return int Der neue Status der Kategorie */ public static function categoryStatus($category_id, $clang, $status = null) { $KAT = rex_sql::factory(); $KAT->setQuery('select * from ' . rex::getTablePrefix() . "article where id='{$category_id}' and clang_id={$clang} and startarticle=1"); if ($KAT->getRows() == 1) { // Status wurde nicht von außen vorgegeben, // => zyklisch auf den nächsten Weiterschalten if (!$status) { $newstatus = self::nextStatus($KAT->getValue('status')); } else { $newstatus = $status; } $EKAT = rex_sql::factory(); $EKAT->setTable(rex::getTablePrefix() . 'article'); $EKAT->setWhere(['id' => $category_id, 'clang_id' => $clang, 'startarticle' => 1]); $EKAT->setValue('status', $newstatus); $EKAT->addGlobalCreateFields(rex::isBackend() ? null : 'frontend'); try { $EKAT->update(); rex_article_cache::delete($category_id, $clang); // ----- EXTENSION POINT rex_extension::registerPoint(new rex_extension_point('CAT_STATUS', null, ['id' => $category_id, 'clang' => $clang, 'status' => $newstatus])); } catch (rex_sql_exception $e) { throw new rex_api_exception($e); } } else { throw new rex_api_exception(rex_i18n::msg('no_such_category')); } return $newstatus; }
<?php /** * Cronjob Addon. * * @author gharlan[at]web[dot]de Gregor Harlan * * @package redaxo5 * * @var rex_addon $this */ define('REX_CRONJOB_LOG_FOLDER', $this->getDataPath()); define('REX_CRONJOB_TABLE', rex::getTable('cronjob')); rex_extension::register('PACKAGES_INCLUDED', function () { foreach ($this->getAvailablePlugins() as $plugin) { if (($type = $plugin->getProperty('cronjob_type')) != '') { rex_cronjob_manager::registerType($type); } } }); $nexttime = $this->getConfig('nexttime', 0); if ($nexttime != 0 && time() >= $nexttime) { $EP = rex::isBackend() ? 'PAGE_CHECKED' : 'PACKAGES_INCLUDED'; rex_extension::register($EP, function () { if (!rex::isBackend() || !in_array(rex_be_controller::getCurrentPagePart(1), ['setup', 'login', 'cronjob'])) { rex_cronjob_manager_sql::factory()->check(); } }); }
/** * Loads the properties of package.yml. */ private function loadProperties() { static $cache = null; if (is_null($cache)) { $cache = rex_file::getCache(rex_path::cache('packages.cache')); } $id = $this->getPackageId(); $file = $this->getPath(self::FILE_PACKAGE); if (!file_exists($file)) { $this->propertiesLoaded = true; return; } if (isset($cache[$id]) && (!rex::isBackend() || !($user = rex::getUser()) || !$user->isAdmin() || $cache[$id]['timestamp'] >= filemtime($file))) { $properties = $cache[$id]['data']; } else { $properties = rex_file::getConfig($file); $cache[$id]['timestamp'] = filemtime($file); $cache[$id]['data'] = $properties; static $registeredShutdown = false; if (!$registeredShutdown) { $registeredShutdown = true; register_shutdown_function(function () use(&$cache) { foreach ($cache as $package => $_) { if (!rex_package::exists($package)) { unset($cache[$package]); } } rex_file::putCache(rex_path::cache('packages.cache'), $cache); }); } } foreach ($properties as $key => $value) { if (!isset($this->properties[$key])) { $this->properties[$key] = rex_i18n::translateArray($value, false, [$this, 'i18n']); } } $this->propertiesLoaded = true; }
public static function getCurrentEnvironment() { if (defined('REX_CRONJOB_SCRIPT') && REX_CRONJOB_SCRIPT) { return 'script'; } return rex::isBackend() ? 'backend' : 'frontend'; }
/** * Gibt eine Url zurück, die die Parameter $params enthält * Dieser Url werden die Standard rexList Variablen zugefügt. * * Innerhalb dieser Url werden variablen ersetzt * * @see #replaceVariable, #replaceVariables * * @param array $params * @param bool $escape Flag whether the argument separator "&" should be escaped (&) * * @return string */ public function getParsedUrl($params = [], $escape = true) { $params = array_merge($this->getParams(), $params); $params['list'] = $this->getName(); if (!isset($params['sort'])) { $sortColumn = $this->getSortColumn(); if ($sortColumn != null) { $params['sort'] = $sortColumn; $params['sorttype'] = $this->getSortType(); } } $_params = []; foreach ($params as $name => $value) { if (is_array($value)) { foreach ($value as $v) { $_params[$name] = $this->replaceVariables($v); } } else { $_params[$name] = $this->replaceVariables($value); } } return rex::isBackend() ? rex_url::backendController($_params, $escape) : rex_url::frontendController($_params, $escape); }
/** * REDAXO Default-Theme. * * @author Design * @author ralph.zumkeller[at]yakamara[dot]de Ralph Zumkeller * @author <a href="http://www.yakamara.de">www.yakamara.de</a> * @author Umsetzung * @author thomas[dot]blum[at]redaxo[dot]org Thomas Blum * * @package redaxo5 * * @var rex_plugin $this */ $mypage = 'redaxo'; if (rex::isBackend()) { rex_extension::register('BE_STYLE_SCSS_FILES', function (rex_extension_point $ep) use($mypage) { $subject = $ep->getSubject(); $file = rex_plugin::get('be_style', $mypage)->getPath('scss/default.scss'); array_unshift($subject, $file); return $subject; }, rex_extension::EARLY); if (rex::getUser() && $this->getProperty('compile')) { rex_addon::get('be_style')->setProperty('compile', true); rex_extension::register('PACKAGES_INCLUDED', function () { $compiler = new rex_scss_compiler(); $compiler->setRootDir($this->getPath('scss/')); $compiler->setScssFile($this->getPath('scss/master.scss')); // Compile in backend assets dir $compiler->setCssFile($this->getPath('assets/css/styles.css')); $compiler->compile();
/** * 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) { rex_extension::registerPoint(new rex_extension_point('ART_SLICES_COPY', '', ['article_id' => $to_id, 'clang_id' => $to_clang, 'slice_revision' => $revision])); $ins = rex_sql::factory(); //$ins->setDebug(); $ctypes = []; $cols = rex_sql::factory(); //$cols->setDebug(); $cols->setquery('SHOW COLUMNS FROM ' . rex::getTablePrefix() . 'article_slice'); $user = rex::isBackend() ? null : 'frontend'; 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($user); $ins->addGlobalCreateFields($user); $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; }
/** * checks whether an api function is bound to the current requests. If so, so the api function will be executed. */ public static function handleCall() { if (static::hasFactoryClass()) { return static::callFactoryClass(__FUNCTION__, func_get_args()); } $apiFunc = self::factory(); if ($apiFunc != null) { if ($apiFunc->published !== true) { if (rex::isBackend() !== true) { throw new rex_http_exception(new rex_api_exception('the api function ' . get_class($apiFunc) . ' is not published, therefore can only be called from the backend!'), rex_response::HTTP_FORBIDDEN); } if (!rex::getUser()) { throw new rex_http_exception(new rex_api_exception('missing backend session to call api function ' . get_class($apiFunc) . '!'), rex_response::HTTP_UNAUTHORIZED); } } $urlResult = rex_get(self::REQ_RESULT_PARAM, 'string'); if ($urlResult) { // take over result from url and do not execute the apiFunc $result = rex_api_result::fromJSON($urlResult); $apiFunc->result = $result; } else { try { $result = $apiFunc->execute(); if (!$result instanceof rex_api_result) { throw new rex_exception('Illegal result returned from api-function ' . rex_get(self::REQ_CALL_PARAM) . '. Expected a instance of rex_api_result but got "' . (is_object($result) ? get_class($result) : gettype($result)) . '".'); } $apiFunc->result = $result; if ($result->requiresReboot()) { $context = rex_context::fromGet(); // add api call result to url $context->setParam(self::REQ_RESULT_PARAM, $result->toJSON()); // and redirect to SELF for reboot rex_response::sendRedirect($context->getUrl([], false)); } } catch (rex_api_exception $e) { $message = $e->getMessage(); $result = new rex_api_result(false, $message); $apiFunc->result = $result; } } } }
require_once rex_path::core('functions/function_rex_other.php'); // ----------------- VERSION rex::setProperty('version', '5.0.0-alpha7'); $cacheFile = rex_path::cache('config.yml.cache'); $configFile = rex_path::data('config.yml'); if (file_exists($cacheFile) && file_exists($configFile) && filemtime($cacheFile) >= filemtime($configFile)) { $config = rex_file::getCache($cacheFile); } else { $config = array_merge(rex_file::getConfig(rex_path::core('default.config.yml')), rex_file::getConfig($configFile)); rex_file::putCache($cacheFile, $config); } foreach ($config as $key => $value) { if (in_array($key, ['fileperm', 'dirperm'])) { $value = octdec($value); } rex::setProperty($key, $value); } date_default_timezone_set(rex::getProperty('timezone', 'Europe/Berlin')); if (!rex::isSetup()) { rex_error_handler::register(); } // ----------------- REX PERMS rex_complex_perm::register('clang', 'rex_clang_perm'); // ----- SET CLANG if (!rex::isSetup()) { rex_clang::setCurrentId(rex_request('clang', 'int', rex_clang::getStartId())); } if (isset($REX['LOAD_PAGE']) && $REX['LOAD_PAGE']) { unset($REX); require rex_path::core(rex::isBackend() ? 'backend.php' : 'frontend.php'); }
<?php if (!rex::isBackend()) { rex_extension::register('OUTPUT_FILTER', function (rex_extension_point $ep) { // Bereite Ausnahmen vor: Templates und Artikel // Dort werden E-Mailadressen nicht verschlüsselt $whitelistTemplates = rex_addon::get('emailobfuscator')->getConfig('templates', []); $whitelistArticles = rex_addon::get('emailobfuscator')->getConfig('articles', ''); if ($whitelistArticles != '') { $whitelistArticles = explode(',', $whitelistArticles); } else { $whitelistArticles = []; } if (!is_null(rex_article::getCurrent()) && !in_array(rex_article::getCurrent()->getTemplateId(), $whitelistTemplates) && !in_array(rex_article::getCurrentId(), $whitelistArticles)) { $subject = $ep->getSubject(); // Ersetze mailto-Links (zuerst!) // Anmerkung: Attributwerte (hier: href) benötigen nicht zwingend Anführungsstriche drumrum, // deshalb prüfen wir zusätzlich noch auf '>' am Ende . $subject = preg_replace_callback('/mailto:(.*?)(?=[\'|"|\\>])/', 'emailobfuscator::encodeEmailLinks', $subject); // Ersetze E-Mailadressen $subject = preg_replace_callback('/([\\w\\-\\+\\.]+)@([\\w\\-\\.]+\\.[\\w]{2,})/', 'emailobfuscator::encodeEmail', $subject); // Injiziere CSS vors schließende </head> im Seitenkopf if ($this->getConfig('autoload_css')) { $cssFile = '<link rel="stylesheet" href="' . $this->getAssetsUrl('emailobfuscator.css?v=' . $this->getVersion()) . '">'; $subject = str_replace('</head>', $cssFile . '</head>', $subject); } // Injiziere JavaScript vors schließende </body> der Seite if ($this->getConfig('autoload_js')) { $jsFile = '<script src="' . $this->getAssetsUrl('emailobfuscator.js?v=' . $this->getVersion()) . '"></script>'; $subject = str_replace('</body>', $jsFile . '</body>', $subject); }
function form_checkElements($mustHave, $elements, $formelement) { global $REX; // Diese Information ist nur im Backend zu sehen if (rex::isBackend()) { // $formelement darf nicht leer sein if ($formelement == '') { return 'Der Formelementename wurde nicht erkannt. Siehe Funktion "form_checkElements"<br />'; } // $mustHave muss mind. 2 sein if ((int) $mustHave < 2) { return $formelement . ': Die Vorgabezahl darf nicht kleiner als 2 sein!<br />'; } // $elements muss ein Array sein if (!is_array($elements)) { return $formelement . ': Das ubergebene Element ist kein Array.<br />'; } $anzahlElemente = count($elements); if ($mustHave > count($elements)) { $fehlermeldung = 'Es wurden nicht genuegend Argumente fuer das Formualarfeld "' . $formelement . '" angegeben.<br />'; $fehlermeldung .= 'Angegeben wurden ' . $anzahlElemente . ' Argumente, benoetigt werden aber mind. ' . $mustHave . ' Argumente!<br />' . "\n"; return $fehlermeldung; } else { return ''; } } else { return ''; } }