public function __construct($tag = '', rex_form $table = null, array $attributes = []) { parent::__construct('', $table, $attributes); $this->labelField = ''; $this->whereCondition = ''; $this->primaryKey = 'id'; $this->firstOptionMsg = 'form_field_first_priority'; $this->optionMsg = 'form_field_after_priority'; $this->select->setSize(1); rex_extension::register('REX_FORM_SAVED', [$this, 'organizePriorities']); }
public function testRegister() { $EP = 'TEST_EP_LEVELS'; $callback = function ($str) { return function (rex_extension_point $ep) use($str) { return $ep->getSubject() . $str . ' '; }; }; rex_extension::register($EP, $callback('late1'), rex_extension::LATE); rex_extension::register($EP, $callback('normal1')); rex_extension::register($EP, $callback('early1'), rex_extension::EARLY); rex_extension::register($EP, $callback('late2'), rex_extension::LATE); rex_extension::register($EP, $callback('normal2'), rex_extension::NORMAL); rex_extension::register($EP, $callback('early2'), rex_extension::EARLY); $expected = 'early1 early2 normal1 normal2 late1 late2 '; $actual = rex_extension::registerPoint(new rex_extension_point($EP, '')); $this->assertEquals($expected, $actual); }
public function show_counter() { $counter = 0; $current_user = rex::getUser()->getId(); $sql_counter = rex_sql::factory(); //$sql_counter->setDebug(); $sql_counter->setQuery('SELECT counter FROM rex_aufgaben_user_settings WHERE user = '******'</i> Aufgaben <span class="label label-default">' . $counter . '</span></a>'; $counter = $sql_counter->getValue('counter'); if ($counter > 0) { $ersetzen = '</i> Aufgaben <span class="label label-danger">' . $counter . '</span></a>'; } else { $ersetzen = '</i> Aufgaben <span class="label label-default">' . $counter . '</span></a>'; } rex_extension::register('OUTPUT_FILTER', function (rex_extension_point $ep) use($ersetzen) { $suchmuster = '</i> Aufgaben'; $ersetzen = $ersetzen; $ep->setSubject(str_replace($suchmuster, $ersetzen, $ep->getSubject())); }); } }
* @author markus[dot]staab[at]redaxo[dot]de Markus Staab * * @package redaxo5 * * @var rex_addon $this */ $mypage = 'metainfo'; if (!defined('REX_METAINFO_FIELD_TEXT')) { // Feldtypen define('REX_METAINFO_FIELD_TEXT', 1); define('REX_METAINFO_FIELD_TEXTAREA', 2); define('REX_METAINFO_FIELD_SELECT', 3); define('REX_METAINFO_FIELD_RADIO', 4); define('REX_METAINFO_FIELD_CHECKBOX', 5); define('REX_METAINFO_FIELD_REX_MEDIA_WIDGET', 6); define('REX_METAINFO_FIELD_REX_MEDIALIST_WIDGET', 7); define('REX_METAINFO_FIELD_REX_LINK_WIDGET', 8); define('REX_METAINFO_FIELD_REX_LINKLIST_WIDGET', 9); define('REX_METAINFO_FIELD_DATE', 10); define('REX_METAINFO_FIELD_DATETIME', 11); define('REX_METAINFO_FIELD_LEGEND', 12); define('REX_METAINFO_FIELD_TIME', 13); define('REX_METAINFO_FIELD_COUNT', 13); } $this->setProperty('prefixes', ['art_', 'cat_', 'med_']); $this->setProperty('metaTables', ['art_' => rex::getTablePrefix() . 'article', 'cat_' => rex::getTablePrefix() . 'article', 'med_' => rex::getTablePrefix() . 'media']); if (rex::isBackend()) { $curDir = __DIR__; require_once $curDir . '/functions/function_metainfo.php'; rex_extension::register('PAGE_CHECKED', 'rex_metainfo_extensions_handler'); }
<?php if (rex::isBackend()) { rex_extension::register('MEDIA_ADDED', 'rex_focuspoint::set_media'); rex_extension::register('MEDIA_UPDATED', 'rex_focuspoint::set_media'); rex_extension::register('MEDIA_FORM_EDIT', 'rex_focuspoint::show_form_info'); } rex_media_manager::addEffect('rex_effect_focuspoint_resize');
{ $params = $ep->getParams(); if (isset($params['category'])) { $params['activeItem'] = $params['category']; // Hier die category_id setzen, damit beim klick auf den REX_LINK_BUTTON der Medienpool in der aktuellen Kategorie startet $params['activeItem']->setValue('category_id', $params['id']); } $result = ' <tr id="' . self::CONTAINER . '" class="collapse mark"> <td colspan="2"></td> <td colspan="5"> <div class="rex-collapse-content"> ' . parent::renderFormAndSave(self::PREFIX, $params) . ' </div> </td> </tr>'; // Bei CAT_ADDED und CAT_UPDATED nur speichern und kein Formular zurückgeben if ('CAT_UPDATED' == $ep->getName() || 'CAT_ADDED' == $ep->getName()) { return $ep->getSubject(); } else { return $ep->getSubject() . $result; } } } $catHandler = new rex_metainfo_category_handler(); rex_extension::register('CAT_FORM_ADD', [$catHandler, 'extendForm']); rex_extension::register('CAT_FORM_EDIT', [$catHandler, 'extendForm']); rex_extension::register('CAT_ADDED', [$catHandler, 'extendForm']); rex_extension::register('CAT_UPDATED', [$catHandler, 'extendForm']); rex_extension::register('CAT_FORM_BUTTONS', [$catHandler, 'renderToggleButton']);
public function testRegisterMultiple() { $EP1 = 'TEST_EP_MULTIPLE_1'; $EP2 = 'TEST_EP_MULTIPLE_2'; rex_extension::register([$EP1, $EP2], function () { return 'foo'; }); $this->assertSame('foo', rex_extension::registerPoint(new rex_extension_point($EP1))); $this->assertSame('foo', rex_extension::registerPoint(new rex_extension_point($EP2))); }
$compiler->setScssFile($this->getPath('scss/master.scss')); // Compile in backend assets dir $compiler->setCssFile($this->getPath('assets/css/styles.css')); $compiler->compile(); // Compiled file to copy in frontend assets dir rex_file::copy($this->getPath('assets/css/styles.css'), $this->getAssetsPath('css/styles.css')); }); } rex_view::addCssFile($this->getAssetsUrl('css/styles.css')); rex_view::addJsFile($this->getAssetsUrl('javascripts/redaxo.js')); rex_extension::register('PAGE_HEADER', function (rex_extension_point $ep) { $icons = []; foreach (['57', '60', '72', '76', '114', '120', '144', '152'] as $size) { $size = $size . 'x' . $size; $icons[] = '<link rel="apple-touch-icon-precomposed" sizes="' . $size . '" href="' . $this->getAssetsUrl('images/apple-touch-icon-' . $size . '.png') . '" />'; } foreach (['16', '32', '96', '128', '196'] as $size) { $size = $size . 'x' . $size; $icons[] = '<link rel="icon" type="image/png" href="' . $this->getAssetsUrl('images/favicon-' . $size . '.png') . '" sizes="' . $size . '" />'; } $icons[] = '<meta name="msapplication-TileColor" content="#FFFFFF" />'; $icons[] = '<meta name="msapplication-TileImage" content="' . $this->getAssetsUrl('images/mstile-144x144.png') . '" />'; foreach (['70', '150', '310'] as $size) { $size = $size . 'x' . $size; $icons[] = '<meta name="msapplication-square' . $size . 'logo" content="' . $this->getAssetsUrl('images/mstile-' . $size . '.png') . '" />'; } $icons[] = '<meta name="msapplication-wide310x150logo" content="' . $this->getAssetsUrl('images/mstile-310x150.png') . '" />'; $icons = implode("\n ", $icons); $ep->setSubject($icons . $ep->getSubject()); }); }
<?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(); } }); }
<?php rex_extension::register('PAGE_CONTENT_SIDEBAR', 'rex_metainfo_content_sidebar'); function rex_metainfo_content_sidebar($extionPointParams) { $params = $extionPointParams->getParams(); $article = rex_article::get($params['article_id'], $params['clang']); $articleStatusTypes = rex_article_service::statusTypes(); $panel = ''; $panel .= '<dl class="dl-horizontal">'; $panel .= '<dt>' . rex_i18n::msg('created_by') . '</dt>'; $panel .= '<dd>' . $article->getValue('createuser') . '</dd>'; $panel .= '<dt>' . rex_i18n::msg('created_on') . '</dt>'; $panel .= '<dd>' . rex_formatter::strftime($article->getValue('createdate'), 'date') . '</dd>'; $panel .= '<dt>' . rex_i18n::msg('updated_by') . '</dt>'; $panel .= '<dd>' . $article->getValue('updateuser') . '</dd>'; $panel .= '<dt>' . rex_i18n::msg('updated_on') . '</dt>'; $panel .= '<dd>' . rex_formatter::strftime($article->getValue('updatedate'), 'date') . '</dd>'; $panel .= '<dt>' . rex_i18n::msg('status') . '</dt>'; $panel .= '<dd class="' . $articleStatusTypes[$article->getValue('status')][1] . '">' . $articleStatusTypes[$article->getValue('status')][0] . '</dd>'; $panel .= '</dl>'; $fragment = new rex_fragment(); $fragment->setVar('title', rex_i18n::msg('metadata'), false); $fragment->setVar('body', $panel, false); $content = $fragment->parse('core/page/section.php'); return $content; }
<?php /** * MetaForm Addon. * * @author markus[dot]staab[at]redaxo[dot]de Markus Staab * * @package redaxo\metainfo */ rex_extension::register('BACKUP_BEFORE_DB_IMPORT', 'rex_metainfo_cleanup'); /** * Alle Metafelder löschen, nicht das nach einem Import in der Parameter Tabelle * noch Datensätze zu Feldern stehen, welche nicht als Spalten in der * rex_article angelegt wurden! */ function rex_metainfo_cleanup($epOrParams) { $params = $epOrParams instanceof rex_extension_point ? $epOrParams->getParams() : $epOrParams; // Cleanup nur durchführen, wenn auch die rex_article Tabelle neu angelegt wird if (isset($params['force']) && $params['force'] != true && strpos($params['content'], 'CREATE TABLE `' . rex::getTablePrefix() . 'article`') === false && strpos($params['content'], 'CREATE TABLE ' . rex::getTablePrefix() . 'article') === false) { return; } // check wheter tables exists $tables = rex_sql::showTables(); if (!isset($tables[rex::getTablePrefix() . 'metainfo_field'])) { return false; } // since this extension may be used also when the addon is not yet installed, // require needed classes manually require_once __DIR__ . '/../lib/table_manager.php'; $sql = rex_sql::factory();
rex_extension::register('PAGE_CONTENT_HEADER', function (rex_extension_point $ep) { $params = $ep->getParams(); $return = ''; $rex_version_article = rex::getProperty('login')->getSessionVar('rex_version_article'); if (!is_array($rex_version_article)) { $rex_version_article = []; } $working_version_empty = true; $gw = rex_sql::factory(); $gw->setQuery('select * from ' . rex::getTablePrefix() . 'article_slice where article_id=' . $params['article_id'] . ' and clang_id=' . $params['clang'] . ' and revision=1 LIMIT 1'); if ($gw->getRows() > 0) { $working_version_empty = false; } $revisions = []; $revisions[0] = rex_i18n::msg('version_liveversion'); $revisions[1] = rex_i18n::msg('version_workingversion'); $version_id = rex_request('rex_set_version', 'int', '-1'); if ($version_id === 0) { $rex_version_article[$params['article_id']] = 0; } elseif ($version_id == 1) { $rex_version_article[$params['article_id']] = 1; } elseif (!isset($rex_version_article[$params['article_id']])) { $rex_version_article[$params['article_id']] = 1; } $func = rex_request('rex_version_func', 'string'); switch ($func) { case 'copy_work_to_live': if ($working_version_empty) { $return .= rex_view::error(rex_i18n::msg('version_warning_working_version_to_live')); } elseif (rex::getUser()->hasPerm('version[live_version]')) { rex_article_revision::copyContent($params['article_id'], $params['clang'], rex_article_revision::WORK, rex_article_revision::LIVE); $return .= rex_view::success(rex_i18n::msg('version_info_working_version_to_live')); } break; case 'copy_live_to_work': rex_article_revision::copyContent($params['article_id'], $params['clang'], rex_article_revision::LIVE, rex_article_revision::WORK); $return .= rex_view::success(rex_i18n::msg('version_info_live_version_to_working')); break; } if (!rex::getUser()->hasPerm('version[live_version]')) { $rex_version_article[$params['article_id']] = 1; unset($revisions[0]); } rex::getProperty('login')->setSessionVar('rex_version_article', $rex_version_article); $context = new rex_context(['page' => $params['page'], 'article_id' => $params['article_id'], 'clang' => $params['clang'], 'ctype' => $params['ctype']]); $items = []; $brand = ''; foreach ($revisions as $version => $revision) { $item = []; $item['title'] = $revision; $item['href'] = $context->getUrl(['rex_set_version' => $version]); if ($rex_version_article[$params['article_id']] == $version) { $item['active'] = true; $brand = $revision; } $items[] = $item; } $toolbar = ''; $fragment = new rex_fragment(); $fragment->setVar('button_prefix', rex_i18n::msg('version')); $fragment->setVar('items', $items, false); $fragment->setVar('toolbar', true); if (!rex::getUser()->hasPerm('version[live_version]')) { $fragment->setVar('disabled', true); } $toolbar .= '<li class="dropdown">' . $fragment->parse('core/dropdowns/dropdown.php') . '</li>'; if (!rex::getUser()->hasPerm('version[live_version]')) { if ($rex_version_article[$params['article_id']] > 0) { $toolbar .= '<li><a href="' . $context->getUrl(['rex_version_func' => 'copy_live_to_work']) . '">' . rex_i18n::msg('version_copy_from_liveversion') . '</a></li>'; $toolbar .= '<li><a href="' . rex_getUrl($params['article_id'], $params['clang'], ['rex_version' => 1]) . '" target="_blank">' . rex_i18n::msg('version_preview') . '</a></li>'; } } else { if ($rex_version_article[$params['article_id']] > 0) { if (!$working_version_empty) { $toolbar .= '<li><a href="' . $context->getUrl(['rex_version_func' => 'copy_work_to_live']) . '">' . rex_i18n::msg('version_working_to_live') . '</a></li>'; } $toolbar .= '<li><a href="' . rex_getUrl($params['article_id'], $params['clang'], ['rex_version' => 1]) . '" target="_blank">' . rex_i18n::msg('version_preview') . '</a></li>'; } else { $toolbar .= '<li><a href="' . $context->getUrl(['rex_version_func' => 'copy_live_to_work']) . '" data-confirm="' . rex_i18n::msg('version_confirm_copy_live_to_workingversion') . '">' . rex_i18n::msg('version_copy_live_to_workingversion') . '</a></li>'; } } $inverse = $rex_version_article[$params['article_id']] == 1 ? true : false; $cssClass = $rex_version_article[$params['article_id']] == 1 ? 'rex-state-inprogress' : 'rex-state-live'; $return .= rex_view::toolbar('<ul class="nav navbar-nav">' . $toolbar . '</ul>', $brand, $cssClass, $inverse); $params['slice_revision'] = $rex_version_article[$params['article_id']]; return $return; });
<?php /** * media_manager Addon. * * @author markus.staab[at]redaxo[dot]de Markus Staab * @author jan.kristinus[at]redaxo[dot]de Jan Kristinus * * @package redaxo5 */ rex_extension::register('PACKAGES_INCLUDED', 'rex_media_manager::init', rex_extension::EARLY); if (rex::isBackend()) { // delete thumbnails on mediapool changes rex_extension::register('MEDIA_UPDATED', 'rex_media_manager::mediaUpdated'); rex_extension::register('MEDIA_DELETED', 'rex_media_manager::mediaUpdated'); }
<?php /** @var rex_addon $this */ rex_user::setRoleClass('rex_user_role'); rex_perm::register('users[]', rex_i18n::msg('user_management')); rex_extension::register('COMPLEX_PERM_REMOVE_ITEM', 'rex_user_role::removeOrReplaceItem'); rex_extension::register('COMPLEX_PERM_REPLACE_ITEM', 'rex_user_role::removeOrReplaceItem');
<?php rex_extension::register('BE_STYLE_LESS_FILES', function (rex_extension_point $ep) { $subject = $ep->getSubject(); array_unshift($subject, rex_plugin::get('slice_ui', 'slice_json_block')->getPath('less/styles.less|sourceMap|compress')); return $subject; }, rex_extension::EARLY); if (!rex_plugin::exists('be_style', 'lessphp')) { rex_view::addCssFile($this->getPath() . 'less/styles.min.css'); } rex_view::addJsFile($this->getAssetsUrl('slice_skin.js'));
if (rex_be_controller::getCurrentPagePart(1) == 'content') { rex_be_controller::getPageObject('structure')->setIsActive(true); } }); if (rex_be_controller::getCurrentPagePart(1) == 'system') { rex_system_setting::register(new rex_system_setting_default_template_id()); } rex_extension::register('CLANG_DELETED', function (rex_extension_point $ep) { $del = rex_sql::factory(); $del->setQuery('delete from ' . rex::getTablePrefix() . "article_slice where clang_id='" . $ep->getParam('clang')->getId() . "'"); }); } else { rex_extension::register('FE_OUTPUT', function (rex_extension_point $ep) { $content = $ep->getSubject(); $article = new rex_article_content(); $article->setCLang(rex_clang::getCurrentId()); if ($article->setArticleId(rex_article::getCurrentId())) { $content .= $article->getArticleTemplate(); } else { $content .= 'Kein Startartikel selektiert / No starting Article selected. Please click here to enter <a href="' . rex_url::backendController() . '">redaxo</a>'; rex_response::sendPage($content); exit; } $art_id = $article->getArticleId(); if ($art_id == rex_article::getNotfoundArticleId() && $art_id != rex_article::getSiteStartArticleId()) { rex_response::setStatus(rex_response::HTTP_NOT_FOUND); } // ----- inhalt ausgeben rex_response::sendPage($content, $article->getValue('updatedate')); }); }
<?php if (rex::isBackend()) { if ($this->getConfig('status') != 'deaktiviert') { rex_extension::register('OUTPUT_FILTER', function (rex_extension_point $ep) { $suchmuster = '<div id="rex-start-of-page" class="rex-page">'; $ersetzen = '<div style="font-size: 12px; background-color: ' . $this->getConfig('farbe') . '; color: #fff; width: 100%; font-weight: bold; text-align: center; padding: 8px 0 6px 0;">' . $this->getConfig('text') . '</div><div id="rex-start-of-page" class="rex-page">'; $ep->setSubject(str_replace($suchmuster, $ersetzen, $ep->getSubject())); }); } }
<?php rex_extension::register('STRUCTURE_CONTENT_SIDEBAR', function (rex_extension_point $ep) { $params = $ep->getParams(); $subject = $ep->getSubject(); $article = rex_article::get($params['article_id'], $params['clang']); $articleStatusTypes = rex_article_service::statusTypes(); $panel = ''; $panel .= '<dl class="dl-horizontal text-left">'; $panel .= '<dt>' . rex_i18n::msg('created_by') . '</dt>'; $panel .= '<dd>' . $article->getValue('createuser') . '</dd>'; $panel .= '<dt>' . rex_i18n::msg('created_on') . '</dt>'; $panel .= '<dd>' . rex_formatter::strftime($article->getValue('createdate'), 'date') . '</dd>'; $panel .= '<dt>' . rex_i18n::msg('updated_by') . '</dt>'; $panel .= '<dd>' . $article->getValue('updateuser') . '</dd>'; $panel .= '<dt>' . rex_i18n::msg('updated_on') . '</dt>'; $panel .= '<dd>' . rex_formatter::strftime($article->getValue('updatedate'), 'date') . '</dd>'; $panel .= '<dt>' . rex_i18n::msg('status') . '</dt>'; $panel .= '<dd class="' . $articleStatusTypes[$article->getValue('status')][1] . '">' . $articleStatusTypes[$article->getValue('status')][0] . '</dd>'; $panel .= '</dl>'; $fragment = new rex_fragment(); $fragment->setVar('title', '<i class="rex-icon rex-icon-info"></i> ' . rex_i18n::msg('metadata'), false); $fragment->setVar('body', $panel, false); $fragment->setVar('collapse', true); $fragment->setVar('collapsed', true); $content = $fragment->parse('core/page/section.php'); return $content . $subject; });
/** * Extends rex_extension::register() with FirePHP logging. */ public static function register($extensionPoint, callable $extension, $level = self::NORMAL, array $params = []) { $timer = new rex_timer(); parent::register($extensionPoint, $extension, $level, $params); self::$log[] = ['type' => 'EXT', 'ep' => $extensionPoint, 'callable' => $extension, 'level' => $level, 'params' => $params, 'timer' => $timer->getFormattedDelta()]; }
$fragment = new rex_fragment(); $fragment->setVar('title', rex_i18n::msg('media_manager_type_caption'), false); $fragment->setVar('content', $content, false); $content = $fragment->parse('core/page/section.php'); echo $content; } elseif ($func == 'add' || $func == 'edit' && $type_id > 0) { if ($func == 'edit') { $formLabel = rex_i18n::msg('media_manager_type_edit'); } elseif ($func == 'add') { $formLabel = rex_i18n::msg('media_manager_type_create'); } rex_extension::register('REX_FORM_CONTROL_FIELDS', function (rex_extension_point $ep) { $controlFields = $ep->getSubject(); $form = $ep->getParam('form'); $sql = $form->getSql(); // remove delete button on internal types (status == 1) if ($sql->getRows() > 0 && $sql->hasValue('status') && $sql->getValue('status') == 1) { $controlFields['delete'] = ''; } return $controlFields; }); $form = rex_form::factory(rex::getTablePrefix() . 'media_manager_type', '', 'id = ' . $type_id); $form->addParam('type_id', $type_id); if ($func == 'edit') { $form->setEditMode($func == 'edit'); } $form->addErrorMessage(REX_FORM_ERROR_VIOLATE_UNIQUE_KEY, rex_i18n::msg('media_manager_error_type_name_not_unique')); $field = $form->addTextField('name'); $field->setLabel(rex_i18n::msg('media_manager_type_name')); $field = $form->addTextareaField('description'); $field->setLabel(rex_i18n::msg('media_manager_type_description')); $content .= $form->get();
<?php if (rex_string::versionCompare(rex::getVersion(), '5.0.0-beta1', '<=')) { rex_extension::register('RESPONSE_SHUTDOWN', function () { rex_file::delete(rex_path::assets('jquery.min.js')); rex_file::delete(rex_path::assets('jquery.min.map')); rex_file::delete(rex_path::assets('jquery-pjax.min.js')); rex_file::delete(rex_path::assets('jquery-ui.custom.min.js')); rex_file::delete(rex_path::assets('jquery-ui.custom.txt')); rex_file::delete(rex_path::assets('redaxo-logo.svg')); rex_file::delete(rex_path::assets('sha1.js')); rex_file::delete(rex_path::assets('standard.js')); }); rex_dir::copy(__DIR__ . '/assets', rex_path::assets('core')); rex_dir::create(rex_path::data('core')); rename(rex_path::data('config.yml'), rex_path::data('core/config.yml')); }
} public function extendForm(rex_extension_point $ep) { $params = $ep->getParams(); if (isset($params['sql'])) { $params['activeItem'] = $params['sql']; } $result = ' <tr id="' . self::CONTAINER . '" class="collapse mark"> <td colspan="2"></td> <td colspan="6"> <div class="rex-collapse-content"> ' . parent::renderFormAndSave(self::PREFIX, $params) . ' </div> </td> </tr>'; // Bei CLANG_ADDED und CLANG_UPDATED nur speichern und kein Formular zurückgeben if ('CLANG_UPDATED' == $ep->getName() || 'CLANG_ADDED' == $ep->getName()) { return $ep->getSubject(); } else { return $ep->getSubject() . $result; } } } $clangHandler = new rex_metainfo_clang_handler(); rex_extension::register('CLANG_FORM_ADD', [$clangHandler, 'extendForm']); rex_extension::register('CLANG_FORM_EDIT', [$clangHandler, 'extendForm']); rex_extension::register('CLANG_ADDED', [$clangHandler, 'extendForm']); rex_extension::register('CLANG_UPDATED', [$clangHandler, 'extendForm']); rex_extension::register('CLANG_FORM_BUTTONS', [$clangHandler, 'renderToggleButton']);
return $field; } public function extendForm(rex_extension_point $ep) { $params = $ep->getParams(); // Nur beim EDIT gibts auch ein Medium zum bearbeiten if ($ep->getName() == 'MEDIA_FORM_EDIT') { $params['activeItem'] = $params['media']; unset($params['media']); // Hier die category_id setzen, damit keine Warnung entsteht (REX_LINK_BUTTON) // $params['activeItem']->setValue('category_id', 0); } elseif ($ep->getName() == 'MEDIA_ADDED') { $sql = rex_sql::factory(); $qry = 'SELECT id FROM ' . rex::getTablePrefix() . 'media WHERE filename="' . $params['filename'] . '"'; $sql->setQuery($qry); if ($sql->getRows() == 1) { $params['id'] = $sql->getValue('id'); } else { throw new rex_exception('Error occured during file upload!'); } } return parent::renderFormAndSave(self::PREFIX, $params); } } $mediaHandler = new rex_metainfo_media_handler(); rex_extension::register('MEDIA_FORM_EDIT', [$mediaHandler, 'extendForm']); rex_extension::register('MEDIA_FORM_ADD', [$mediaHandler, 'extendForm']); rex_extension::register('MEDIA_ADDED', [$mediaHandler, 'extendForm']); rex_extension::register('MEDIA_UPDATED', [$mediaHandler, 'extendForm']); rex_extension::register('MEDIA_IS_IN_USE', ['rex_metainfo_media_handler', 'isMediaInUse']);
if (!rex::isBackend()) { \rex_extension::register('OUTPUT_FILTER', '\\Sprog\\Extension::replaceWildcards'); } if (rex::isBackend() && rex::getUser()) { \rex_extension::register('CLANG_ADDED', '\\Sprog\\Extension::clangAdded'); \rex_extension::register('CLANG_DELETED', '\\Sprog\\Extension::clangDeleted'); rex_extension::register('PAGES_PREPARED', function () { if (rex::getUser()->isAdmin()) { if (\rex_be_controller::getCurrentPage() == 'sprog/settings') { $func = rex_request('func', 'string'); if ($func == 'update') { \rex_config::set('sprog', 'wildcard_clang_switch', rex_request('clang_switch', 'bool')); } } } if (rex::getUser()->isAdmin() || rex::getUser()->hasPerm('sprog[wildcard]')) { $page = \rex_be_controller::getPageObject('sprog/wildcard'); if (Wildcard::isClangSwitchMode()) { $clang_id = str_replace('clang', '', rex_be_controller::getCurrentPagePart(3)); $page->setSubPath(rex_path::addon('sprog', 'pages/wildcard.clang_switch.php')); foreach (\rex_clang::getAll() as $id => $clang) { if (rex::getUser()->getComplexPerm('clang')->hasPerm($id)) { $page->addSubpage((new rex_be_page('clang' . $id, $clang->getName()))->setSubPath(rex_path::addon('sprog', 'pages/wildcard.clang_switch.php'))->setIsActive($id == $clang_id)); } } } else { $page->setSubPath(rex_path::addon('sprog', 'pages/wildcard.clang_all.php')); } } }); }
<?php rex_extension::register('OUTPUT_FILTER', ['rex_sql_debug', 'doLog']); /** * Class to monitor sql queries. * * @author staabm * * @package redaxo\debug */ class rex_sql_debug extends rex_sql { private static $queries = []; private static $errors = 0; /** * {@inheritdoc}. */ public function setQuery($qry, array $params = []) { try { parent::setQuery($qry, $params); } catch (rex_exception $e) { $trace = debug_backtrace(); for ($i = 0; $trace && $i < count($trace); ++$i) { if (isset($trace[$i]['file']) && strpos($trace[$i]['file'], 'sql.php') === false) { $file = $trace[$i]['file']; $line = $trace[$i]['line']; break; } } $firephp = FirePHP::getInstance(true);
} $registerImplicitePagePermissions($page->getSubpages()); } }; $registerImplicitePagePermissions(rex_be_controller::getPages()); foreach ([rex_perm::GENERAL, rex_perm::OPTIONS, rex_perm::EXTRAS] as $permgroup) { $field = $fieldContainer->addGroupedField($group, 'select', $permgroup); $field->setLabel(rex_i18n::msg('user_' . $permgroup)); $select = $field->getSelect(); $select->setMultiple(true); $perms = rex_perm::getAll($permgroup); $select->setSize(min(10, max(3, count($perms)))); $select->addArrayOptions($perms); } rex_extension::register('REX_FORM_INPUT_CLASS', function (rex_extension_point $ep) { return $ep->getParam('inputType') == 'perm_select' ? 'rex_form_perm_select_element' : null; }); $fieldIds = []; foreach (rex_complex_perm::getAll() as $key => $class) { $params = $class::getFieldParams(); if (!empty($params)) { $field = $fieldContainer->addGroupedField($group, 'perm_select', $key); $field->setLabel($params['label']); $field->setCheckboxLabel($params['all_label']); $fieldIds[] = $field->getAttribute('id'); if (rex_request('default_value', 'boolean')) { $field->setValue(rex_complex_perm::ALL); } if (isset($params['select'])) { $field->setSelect($params['select']); }
$select .= '<option value="' . $version['history_date'] . '">' . $version['history_date'] . '</option>'; } $content1select = '<select id="content-history-select-date-1" class="content-history-select" data-iframe="content-history-iframe-1" style="">' . $select . '</select>'; $content1iframe = '<iframe id="content-history-iframe-1" class="history-iframe"></iframe>'; $content2select = '<select id="content-history-select-date-2" class="content-history-select" data-iframe="content-history-iframe-2">' . $select . '</select>'; $content2iframe = '<iframe id="content-history-iframe-2" class="history-iframe"></iframe>'; $button_restore = '<a class="btn btn-apply" href="javascript:rex_history_snapVersion(\'content-history-select-date-2\');">' . $this->i18n('snapshot_reactivate') . '</a>'; // fragment holen und ausgeben $fragment = new rex_fragment(); $fragment->setVar('title', $this->i18n('overview_versions')); $fragment->setVar('info', $info, false); $fragment->setVar('content1select', $content1select, false); $fragment->setVar('content1iframe', $content1iframe, false); $fragment->setVar('content2select', $content2select, false); $fragment->setVar('content2iframe', $content2iframe, false); $fragment->setVar('button_restore', $button_restore, false); echo $fragment->parse('history/layer.php'); exit; } rex_extension::register('STRUCTURE_CONTENT_HEADER', function (rex_extension_point $ep) { if ($ep->getParam('page') == 'content/edit') { echo '<script> var history_article_id = ' . rex_article::getCurrentId() . '; var history_clang_id = ' . rex_clang::getCurrentId() . '; var history_ctype_id = ' . rex_request('ctype', 'int', 0) . '; var history_revision = ' . rex_request('rex_set_version', 'int', 0) . '; var history_article_link = "' . rex_getUrl(rex_article::getCurrentId(), rex_clang::getCurrentId(), ['history_revision' => rex_request('rex_set_version', 'int', 0)], '&') . '"; </script>'; } }); }
* @author <a href="http://www.redaxo.org">www.redaxo.org</a> * * @package redaxo5 */ $mypage = 'be_style'; /* Addon Parameter */ if (rex::isBackend()) { require_once rex_path::addon($mypage, 'extensions/function_extensions.php'); rex_extension::register('PACKAGES_INCLUDED', 'rex_be_add_page'); $files = [$this->getPath('vendor/bootstrap/assets/javascripts/bootstrap.js') => $this->getAssetsPath('javascripts/bootstrap.js'), $this->getPath('vendor/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.eot') => $this->getAssetsPath('fonts/bootstrap/glyphicons-halflings-regular.eot'), $this->getPath('vendor/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.svg') => $this->getAssetsPath('fonts/bootstrap/glyphicons-halflings-regular.svg'), $this->getPath('vendor/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf') => $this->getAssetsPath('fonts/bootstrap/glyphicons-halflings-regular.ttf'), $this->getPath('vendor/bootstrap/assets/fonts/bootstrap/glyphicons-halflings-regular.woff') => $this->getAssetsPath('fonts/bootstrap/glyphicons-halflings-regular.woff'), $this->getPath('vendor/font-awesome/fonts/fontawesome-webfont.eot') => $this->getAssetsPath('fonts/fontawesome-webfont.eot'), $this->getPath('vendor/font-awesome/fonts/fontawesome-webfont.svg') => $this->getAssetsPath('fonts/fontawesome-webfont.svg'), $this->getPath('vendor/font-awesome/fonts/fontawesome-webfont.ttf') => $this->getAssetsPath('fonts/fontawesome-webfont.ttf'), $this->getPath('vendor/font-awesome/fonts/fontawesome-webfont.woff') => $this->getAssetsPath('fonts/fontawesome-webfont.woff'), $this->getPath('vendor/font-awesome/fonts/FontAwesome.otf') => $this->getAssetsPath('fonts/FontAwesome.otf')]; foreach ($files as $source => $destination) { if (!file_exists($destination)) { rex_file::copy($source, $destination); } } rex_extension::register('PACKAGES_INCLUDED', function () { if (rex::getUser() && $this->getProperty('compile')) { $compiler = new rex_scss_compiler(); $scss_files = rex_extension::registerPoint(new rex_extension_point('BE_STYLE_SCSS_FILES', [$this->getPath('scss/master.scss')])); $compiler->setScssFile($scss_files); //$compiler->setScssFile($this->getPath('scss/master.scss')); // Compile in backend assets dir $compiler->setCssFile($this->getPath('assets/css/styles.css')); $compiler->compile(); // Compiled file to copy in frontend assets dir rex_file::copy($this->getPath('assets/css/styles.css'), $this->getAssetsPath('css/styles.css')); } }); rex_view::addCssFile($this->getAssetsUrl('css/styles.css')); rex_view::addJsFile($this->getAssetsUrl('javascripts/bootstrap.js')); }
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); } $ep->setSubject($subject); } });
public function check() { $sql = rex_sql::factory(); // $sql->setDebug(); $sql->setQuery(' SELECT id, name, type, parameters, `interval`, execution_moment FROM ' . REX_CRONJOB_TABLE . ' WHERE status = 1 AND execution_start < ? AND environment LIKE ? AND nexttime <= ? ORDER BY nexttime ASC, execution_moment DESC, name ASC LIMIT 1 ', [rex_sql::datetime(time() - 2 * ini_get('max_execution_time')), '%|' . (int) rex::isBackend() . '|%', rex_sql::datetime()]); if ($sql->getRows() != 0) { ignore_user_abort(true); register_shutdown_function([$this, 'timeout'], $sql); $this->setExecutionStart($sql->getValue('id')); if ($sql->getValue('execution_moment') == 1) { $this->tryExecuteSql($sql, true, true); } else { rex_extension::register('RESPONSE_SHUTDOWN', function () use($sql) { $this->tryExecuteSql($sql, true, true); }); } } else { $this->saveNextTime(); } }