예제 #1
0
파일: slice_ui.php 프로젝트: eaCe/slice_ui
 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 '';
 }
예제 #2
0
파일: manager.php 프로젝트: staabm/redaxo
 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);
 }
예제 #3
0
 /**
  * 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;
 }
예제 #4
0
 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();
 }
예제 #5
0
파일: boot.php 프로젝트: staabm/redaxo
<?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'));
}
예제 #6
0
파일: response.php 프로젝트: DECAF/redaxo
 /**
  * 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();
     }
 }
예제 #7
0
파일: rex_test.php 프로젝트: staabm/redaxo
 public function testIsBackend()
 {
     $this->assertTrue(rex::isBackend(), 'test run in the backend');
     // TODO find more appropriate tests
 }
예제 #8
0
 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');
 }
예제 #9
0
파일: form.php 프로젝트: skerbis/redaxo
 /**
  * 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;
 }
예제 #10
0
파일: boot.php 프로젝트: redaxo/redaxo
            $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);
예제 #11
0
 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 '';
 }
예제 #12
0
 /**
  * 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;
 }
예제 #13
0
 /**
  * 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;
 }
예제 #14
0
파일: package.php 프로젝트: DECAF/redaxo
 /**
  * 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;
 }
예제 #15
0
 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);
 }
예제 #16
0
파일: context.php 프로젝트: DECAF/redaxo
 /**
  * {@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);
 }
예제 #17
0
파일: boot.php 프로젝트: eaCe/slice_ui
<?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);
예제 #18
0
 /**
  * Ä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;
 }
예제 #19
0
파일: boot.php 프로젝트: staabm/redaxo
<?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();
        }
    });
}
예제 #20
0
파일: package.php 프로젝트: staabm/redaxo
 /**
  * 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;
 }
예제 #21
0
파일: manager.php 프로젝트: DECAF/redaxo
 public static function getCurrentEnvironment()
 {
     if (defined('REX_CRONJOB_SCRIPT') && REX_CRONJOB_SCRIPT) {
         return 'script';
     }
     return rex::isBackend() ? 'backend' : 'frontend';
 }
예제 #22
0
파일: list.php 프로젝트: skerbis/redaxo
 /**
  * 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 (&amp;)
  *
  * @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);
 }
예제 #23
0
파일: boot.php 프로젝트: DECAF/redaxo
/**
 * 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();
예제 #24
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) {
         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;
 }
예제 #25
0
 /**
  * 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;
             }
         }
     }
 }
예제 #26
0
파일: boot.php 프로젝트: skerbis/redaxo
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');
}
예제 #27
0
<?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);
            }
예제 #28
0
파일: output.php 프로젝트: skerbis/do-form
 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 '';
     }
 }