/** * Gibt eine Url zu einem Artikel zurück. * * @param string $_id * @param int|string $_clang SprachId des Artikels * @param array|string $_params Array von Parametern * @param bool $escape Flag whether the argument separator "&" should be escaped (&) * * @return string * * @package redaxo\structure */ function rex_getUrl($_id = '', $_clang = '', $_params = '', $escape = true) { $id = (int) $_id; $clang = (int) $_clang; // ----- get id if ($id == 0) { $id = rex::getProperty('article_id'); } // ----- get clang // Wenn eine rexExtension vorhanden ist, immer die clang mitgeben! // Die rexExtension muss selbst entscheiden was sie damit macht if ($_clang === '' && (rex_clang::count() > 1 || rex_extension::isRegistered('URL_REWRITE'))) { $clang = rex_clang::getCurrentId(); } // ----- get params $param_string = rex_param_string($_params, $escape ? '&' : '&'); $name = 'NoName'; if ($id != 0) { $ooa = rex_article::get($id, $clang); if ($ooa) { $name = rex_parse_article_name($ooa->getName()); } } // ----- EXTENSION POINT $url = rex_extension::registerPoint(new rex_extension_point('URL_REWRITE', '', ['id' => $id, 'name' => $name, 'clang' => $clang, 'params' => $param_string, 'escape' => $escape])); if ($url == '') { $_clang = ''; if (rex_clang::count() > 1) { $_clang .= ($escape ? '&' : '&') . 'clang=' . $clang; } $url = rex_url::frontendController() . '?article_id=' . $id . $_clang . $param_string; } return $url; }
public static function getForward($params) { // Url wurde von einer anderen Extension bereits gesetzt if (isset($params['subject']) && $params['subject'] != '') { return $params['subject']; } self::init(); $domain = $params['domain']; if ($domain == 'undefined') { $domain = ''; } $url = $params['url']; foreach (self::$paths as $p) { if ($p['domain'] == $domain && ($p['url'] == $url || $p['url'] . '/' == $url)) { $forward_url = ''; if ($p['type'] == 'article' && ($art = rex_article::get($p['article_id'], $p['clang']))) { $forward_url = rex_getUrl($p['article_id'], $p['clang']); } elseif ($p['type'] == 'media' && ($media = rex_media::get($p['media']))) { $forward_url = '/files/' . $p['media']; } elseif ($p['type'] == 'extern' && $p['extern'] != '') { $forward_url = $p['extern']; } if ($forward_url != '') { header('HTTP/1.1 ' . self::$movetypes[$p['movetype']]); header('Location: ' . $forward_url); exit; } } } return false; }
public static function getWidget($id, $name, $value, array $args = []) { $art_name = ''; $art = rex_article::get($value); $category = 0; // Falls ein Artikel vorausgewählt ist, dessen Namen anzeigen und beim öffnen der Linkmap dessen Kategorie anzeigen if ($art instanceof rex_article) { $art_name = $art->getName(); $category = $art->getCategoryId(); } $open_params = '&clang=' . rex_clang::getCurrentId(); if ($category || isset($args['category']) && ($category = (int) $args['category'])) { $open_params .= '&category_id=' . $category; } $class = ' rex-disabled'; $open_func = ''; $delete_func = ''; if (rex::getUser()->getComplexPerm('structure')->hasStructurePerm()) { $class = ''; $open_func = 'openLinkMap(\'REX_LINK_' . $id . '\', \'' . $open_params . '\');'; $delete_func = 'deleteREXLink(' . $id . ');'; } $e = []; $e['field'] = '<input class="form-control" type="text" name="REX_LINK_NAME[' . $id . ']" value="' . htmlspecialchars($art_name) . '" id="REX_LINK_' . $id . '_NAME" readonly="readonly" /><input type="hidden" name="' . $name . '" id="REX_LINK_' . $id . '" value="' . $value . '" />'; $e['functionButtons'] = ' <a href="#" class="btn btn-popup' . $class . '" onclick="' . $open_func . 'return false;" title="' . rex_i18n::msg('var_link_open') . '"><i class="rex-icon rex-icon-open-linkmap"></i></a> <a href="#" class="btn btn-popup' . $class . '" onclick="' . $delete_func . 'return false;" title="' . rex_i18n::msg('var_link_delete') . '"><i class="rex-icon rex-icon-delete-link"></i></a>'; $fragment = new rex_fragment(); $fragment->setVar('elements', [$e], false); $media = $fragment->parse('core/form/widget.php'); return $media; }
function enterObject() { $article = rex_article::get($this->getElement(1)); if ($article) { $this->params['form_output'][$this->getId()] = $this->parse('value.article.tpl.php', array('article' => $article)); } }
public static function getArticleValue($id, $field, $clang = null) { if ($clang === null) { $clang = rex_clang::getCurrentId(); } $article = rex_article::get($id, $clang); return htmlspecialchars($article->getValue($field)); }
public function getForm(array $params) { $OOArt = rex_article::get($params['id'], $params['clang']); $params['activeItem'] = $params['article']; // 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', $OOArt->getCategoryId()); return parent::renderFormAndSave(self::PREFIX, $params); }
public function isValid($value) { $article = rex_article::get($value); if (!$article instanceof rex_article) { return rex_i18n::msg('system_setting_' . $this->key . '_invalid'); } return true; }
public function hasValue($value) { // bc if ($this->viasql) { return parent::hasValue($value); } $value = $this->correctValue($value); return rex_article::get($this->article_id, $this->clang)->hasValue($value); }
public function setValue($value) { $value = (int) $value; $article = rex_article::get($value); if (!$article instanceof rex_article) { return rex_i18n::msg('system_setting_' . $this->key . '_invalid'); } rex_config::set('structure', $this->key, $value); return true; }
static function getListValue($params) { if (intval($params['value']) < 1) { return '-'; } if ($article = rex_article::get($params['value'])) { return $article->getValue('name'); } else { return 'article ' . $params['value'] . ' not found'; } }
public static function getWidget($id, $name, $value, array $args = []) { $open_params = '&clang=' . rex_clang::getCurrentId(); if (isset($args['category']) && ($category = (int) $args['category'])) { $open_params .= '&category_id=' . $category; } $options = ''; $linklistarray = explode(',', $value); if (is_array($linklistarray)) { foreach ($linklistarray as $link) { if ($link != '') { if ($article = rex_article::get($link)) { $options .= '<option value="' . $link . '">' . htmlspecialchars($article->getName()) . '</option>'; } } } } $disabled = ' disabled'; $open_func = ''; $delete_func = ''; if (rex::getUser()->getComplexPerm('structure')->hasStructurePerm()) { $disabled = ''; $open_func = 'openREXLinklist(' . $id . ', \'' . $open_params . '\');'; $delete_func = 'deleteREXLinklist(' . $id . ');'; } $e = []; $e['field'] = ' <select class="form-control" name="REX_LINKLIST_SELECT[' . $id . ']" id="REX_LINKLIST_SELECT_' . $id . '" size="10"> ' . $options . ' </select> <input type="hidden" name="' . $name . '" id="REX_LINKLIST_' . $id . '" value="' . $value . '" />'; $e['moveButtons'] = ' <a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $id . ',\'top\');return false;" title="' . rex_i18n::msg('var_linklist_move_top') . '"><i class="rex-icon rex-icon-top"></i></a> <a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $id . ',\'up\');return false;" title="' . rex_i18n::msg('var_linklist_move_up') . '"><i class="rex-icon rex-icon-up"></i></a> <a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $id . ',\'down\');return false;" title="' . rex_i18n::msg('var_linklist_move_down') . '"><i class="rex-icon rex-icon-down"></i></a> <a href="#" class="btn btn-popup" onclick="moveREXLinklist(' . $id . ',\'bottom\');return false;" title="' . rex_i18n::msg('var_linklist_move_bottom') . '"><i class="rex-icon rex-icon-bottom"></i></a>'; $e['functionButtons'] = ' <a href="#" class="btn btn-popup" onclick="' . $open_func . 'return false;" title="' . rex_i18n::msg('var_link_open') . '"' . $disabled . '><i class="rex-icon rex-icon-open-linkmap"></i></a> <a href="#" class="btn btn-popup" onclick="' . $delete_func . 'return false;" title="' . rex_i18n::msg('var_link_delete') . '"' . $disabled . '><i class="rex-icon rex-icon-delete-link"></i></a>'; $fragment = new rex_fragment(); $fragment->setVar('elements', [$e], false); $link = $fragment->parse('core/form/widget_list.php'); return $link; }
public function execute() { $article_id = rex_request('article_id', 'int'); $clang = rex_request('clang', 'int'); $slice_id = rex_request('slice_id', 'int'); $direction = rex_request('direction', 'string'); $ooArt = rex_article::get($article_id, $clang); if (!$ooArt instanceof rex_article) { throw new rex_api_exception('Unable to find article with id "' . $article_id . '" and clang "' . $clang . '"!'); } $category_id = $ooArt->getCategoryId(); /** * @var rex_user */ $user = rex::getUser(); // check permissions if (!$user->hasPerm('moveSlice[]')) { throw new rex_api_exception(rex_i18n::msg('no_rights_to_this_function')); } if (!$user->getComplexPerm('structure')->hasCategoryPerm($category_id)) { throw new rex_api_exception(rex_i18n::msg('no_rights_to_this_function')); } // modul und rechte vorhanden ? $CM = rex_sql::factory(); $CM->setQuery('select * from ' . rex::getTablePrefix() . 'article_slice left join ' . rex::getTablePrefix() . 'module on ' . rex::getTablePrefix() . 'article_slice.module_id=' . rex::getTablePrefix() . 'module.id where ' . rex::getTablePrefix() . "article_slice.id='{$slice_id}' and clang_id={$clang}"); if ($CM->getRows() != 1) { throw new rex_api_exception(rex_i18n::msg('module_not_found')); } else { $module_id = (int) $CM->getValue(rex::getTablePrefix() . 'article_slice.module_id'); // ----- RECHTE AM MODUL ? if ($user->getComplexPerm('modules')->hasPerm($module_id)) { $message = rex_content_service::moveSlice($slice_id, $clang, $direction); } else { throw new rex_api_exception(rex_i18n::msg('no_rights_to_this_function')); } } $result = new rex_api_result(true, $message); return $result; }
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; }
/** * Return the start article for this category. * * @return rex_article */ public function getStartArticle() { return rex_article::get($this->id, $this->clang_id); }
/** * @param $filename * * @return bool|string */ function rex_mediapool_mediaIsInUse($filename) { $sql = rex_sql::factory(); $filename = addslashes($filename); // FIXME move structure stuff into structure addon $values = []; for ($i = 1; $i < 21; ++$i) { $values[] = 'value' . $i . ' REGEXP "(^|[^[:alnum:]+_-])' . $filename . '"'; } $files = []; $filelists = []; for ($i = 1; $i < 11; ++$i) { $files[] = 'media' . $i . '="' . $filename . '"'; $filelists[] = 'FIND_IN_SET("' . $filename . '",medialist' . $i . ')'; } $where = ''; $where .= implode(' OR ', $files) . ' OR '; $where .= implode(' OR ', $filelists) . ' OR '; $where .= implode(' OR ', $values); $query = 'SELECT DISTINCT article_id, clang_id FROM ' . rex::getTablePrefix() . 'article_slice WHERE ' . $where; $warning = []; $res = $sql->getArray($query); if ($sql->getRows() > 0) { $warning[0] = rex_i18n::msg('pool_file_in_use_articles') . '<br /><ul>'; foreach ($res as $art_arr) { $aid = $art_arr['article_id']; $clang = $art_arr['clang_id']; $ooa = rex_article::get($aid, $clang); $name = $ooa->getName(); $warning[0] .= '<li><a href="javascript:openPage(\'' . rex_url::backendPage('content', ['article_id' => $aid, 'mode' => 'edit', 'clang' => $clang]) . '\')">' . $name . '</a></li>'; } $warning[0] .= '</ul>'; } // ----- EXTENSION POINT $warning = rex_extension::registerPoint(new rex_extension_point('MEDIA_IS_IN_USE', $warning, ['filename' => $filename])); if (!empty($warning)) { return implode('<br />', $warning); } return false; }
$zaehler = $zaehler + 1; $outback .= '<div class="bereichswrapper"><h2>Bereich ' . $zaehler . '</h2>' . PHP_EOL; /**** * * Link * ****/ $link = ''; $linkanfang = ''; $linkende = ''; $outback_link = ''; if ($value['link_intern'] or $value['link_extern'] != '') { $outback_link .= '<h3>Link</h3>' . PHP_EOL; if ($value['link_intern'] != 0) { $linkanfang = '<a href="' . rex_geturl($value['link_intern'], rex_clang::getCurrentId()) . '">'; $article = rex_article::get($value['link_intern']); $name = $article->getName(); $outback_link .= ' <div class="form-group"> <label class="col-sm-3 control-label">Link intern</label> <div class="col-sm-9"> <a href="index.php?page=content&article_id=' . $value['link_intern'] . '&mode=edit">' . $name . ' (ID = ' . $value['link_intern'] . ')</a> </div> </div>' . PHP_EOL; } if ($value['link_extern'] != '') { $linkanfang = '<a class="extern" href="' . $value['link_extern'] . '">'; $outback_link .= ' <div class="form-group"> <label class="col-sm-3 control-label">Link extern</label> <div class="col-sm-9">
} } // ---------------------------- FUNKTIONEN FUER MODULE if ($function == 'delete') { $del = rex_sql::factory(); $del->setQuery('SELECT ' . rex::getTablePrefix() . 'article_slice.article_id, ' . rex::getTablePrefix() . 'article_slice.clang_id, ' . rex::getTablePrefix() . 'article_slice.ctype_id, ' . rex::getTablePrefix() . 'module.name FROM ' . rex::getTablePrefix() . 'article_slice LEFT JOIN ' . rex::getTablePrefix() . 'module ON ' . rex::getTablePrefix() . 'article_slice.module_id=' . rex::getTablePrefix() . 'module.id WHERE ' . rex::getTablePrefix() . "article_slice.module_id='{$module_id}' GROUP BY " . rex::getTablePrefix() . 'article_slice.article_id'); if ($del->getRows() > 0) { $module_in_use_message = ''; $modulname = htmlspecialchars($del->getValue(rex::getTablePrefix() . 'module.name')); for ($i = 0; $i < $del->getRows(); ++$i) { $aid = $del->getValue(rex::getTablePrefix() . 'article_slice.article_id'); $clang_id = $del->getValue(rex::getTablePrefix() . 'article_slice.clang_id'); $ctype = $del->getValue(rex::getTablePrefix() . 'article_slice.ctype_id'); $OOArt = rex_article::get($aid, $clang_id); $label = $OOArt->getName() . ' [' . $aid . ']'; if (rex_clang::count() > 1) { $label = '(' . rex_i18n::translate(rex_clang::get($clang_id)->getName()) . ') ' . $label; } $module_in_use_message .= '<li><a href="' . rex_url::backendPage('content', ['article_id' => $aid, 'clang' => $clang_id, 'ctype' => $ctype]) . '">' . htmlspecialchars($label) . '</a></li>'; $del->next(); } $error = rex_i18n::msg('module_cannot_be_deleted', $modulname); if ($module_in_use_message != '') { $error .= '<ul>' . $module_in_use_message . '</ul>'; } } else { $del->setQuery('DELETE FROM ' . rex::getTablePrefix() . "module WHERE id='{$module_id}'"); if ($del->getRows() > 0) { $del->setQuery('DELETE FROM ' . rex::getTablePrefix() . "module_action WHERE module_id='{$module_id}'");
public static function generatePathFile($params) { $setDomain = function (rex_yrewrite_domain &$domain, &$path, rex_structure_element $element) { $id = $element->getId(); $clang = $element->getClang(); if (isset(rex_yrewrite::$domainsByMountId[$id][$clang])) { $domain = rex_yrewrite::$domainsByMountId[$id][$clang]; $path = rex_yrewrite::$scheme->getClang($clang, $domain); } }; $setPath = function (rex_yrewrite_domain $domain, $path, rex_article $art) use($setDomain) { $setDomain($domain, $path, $art); if (($redirection = rex_yrewrite::$scheme->getRedirection($art, $domain)) instanceof rex_structure_element) { rex_yrewrite::$paths['redirections'][$art->getId()][$art->getClang()] = ['id' => $redirection->getId(), 'clang' => $redirection->getClang()]; unset(rex_yrewrite::$paths['paths'][$domain->getName()][$art->getId()][$art->getClang()]); return; } unset(rex_yrewrite::$paths['redirections'][$art->getId()][$art->getClang()]); $url = rex_yrewrite::$scheme->getCustomUrl($art, $domain); if (!is_string($url)) { $url = rex_yrewrite::$scheme->appendArticle($path, $art, $domain); } rex_yrewrite::$paths['paths'][$domain->getName()][$art->getId()][$art->getClang()] = ltrim($url, '/'); }; $generatePaths = function (rex_yrewrite_domain $domain, $path, rex_category $cat) use(&$generatePaths, $setDomain, $setPath) { $path = rex_yrewrite::$scheme->appendCategory($path, $cat, $domain); $setDomain($domain, $path, $cat); foreach ($cat->getChildren() as $child) { $generatePaths($domain, $path, $child); } foreach ($cat->getArticles() as $art) { $setPath($domain, $path, $art); } }; $ep = isset($params['extension_point']) ? $params['extension_point'] : ''; switch ($ep) { // clang and id specific update case 'CAT_DELETED': case 'ART_DELETED': foreach (self::$paths['paths'] as $domain => $c) { unset(self::$paths['paths'][$domain][$params['id']]); } unset(self::$paths['redirections'][$params['id']]); if (0 == $params['re_id']) { break; } $params['id'] = $params['re_id']; // no break // no break case 'CAT_ADDED': case 'CAT_UPDATED': case 'CAT_STATUS': case 'ART_ADDED': case 'ART_UPDATED': case 'ART_STATUS': rex_article_cache::delete($params['id']); $domain = self::$domainsByMountId[0][$params['clang']]; $path = self::$scheme->getClang($params['clang'], $domain); $art = rex_article::get($params['id'], $params['clang']); $tree = $art->getParentTree(); if ($art->isStartArticle()) { $cat = array_pop($tree); } foreach ($tree as $parent) { $path = self::$scheme->appendCategory($path, $parent, $domain); $setDomain($domain, $path, $parent); $setPath($domain, $path, rex_article::get($parent->getId(), $parent->getClang())); } if ($art->isStartArticle()) { $generatePaths($domain, $path, $cat); } else { $setPath($domain, $path, $art); } break; // update all // update all case 'CLANG_DELETED': case 'CLANG_ADDED': case 'CLANG_UPDATED': //case 'ALL_GENERATED': //case 'ALL_GENERATED': default: self::$paths = ['paths' => [], 'redirections' => []]; foreach (rex_clang::getAllIds() as $clangId) { $domain = self::$domainsByMountId[0][$clangId]; $path = self::$scheme->getClang($clangId, $domain); foreach (rex_category::getRootCategories(false, $clangId) as $cat) { $generatePaths($domain, $path, $cat); } foreach (rex_article::getRootArticles(false, $clangId) as $art) { $setPath($domain, $path, $art); } } break; } rex_file::putCache(self::$pathfile, self::$paths); }
public function sendSitemap($domain = '') { if ($domain == '') { $domain = rex_yrewrite::getHost(); } $sitemap = []; if (isset(rex_yrewrite::$domainsByName[$domain])) { $domain = rex_yrewrite::$domainsByName[$domain]; $domain_article_id = $domain->getStartId(); $paths = 0; if ($dai = rex_article::get($domain_article_id)) { $paths = count($dai->getParentTree()); } foreach (rex_yrewrite::$paths['paths'][$domain->getName()] as $article_id => $path) { foreach ($domain->getClangs() as $clang_id) { if (($article = rex_article::get($article_id, $clang_id)) && self::checkArticlePerm($article) && ($article->getValue('yrewrite_index') == 1 || $article->isOnline() && $article->getValue('yrewrite_index') == 0)) { $changefreq = $article->getValue('yrewrite_changefreq'); if (!in_array($changefreq, self::$changefreq)) { $changefreq = self::$changefreq_default; } $priority = $article->getValue('yrewrite_priority'); if (!in_array($priority, self::$priority)) { $article_paths = count($article->getParentTree()); $prio = $article_paths - $paths - 1; if ($prio < 0) { $prio = 0; } if (isset(self::$priority[$prio])) { $priority = self::$priority[$prio]; } else { $priority = self::$priority_default; } } $sitemap[] = "\n" . '<url>' . "\n" . '<loc>' . rex_yrewrite::getFullPath($path[$clang_id]) . '</loc>' . "\n" . '<lastmod>' . date(DATE_W3C, $article->getValue('updatedate')) . '</lastmod>' . "\n" . '<changefreq>' . $changefreq . '</changefreq>' . "\n" . '<priority>' . $priority . '</priority>' . "\n" . '</url>'; } } } } header('Content-Type: application/xml'); $content = '<?xml version="1.0" encoding="UTF-8"?>'; $content .= "\n" . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; $content .= implode("\n", $sitemap); $content .= "\n" . '</urlset>'; echo $content; exit; }
* @package redaxo5 */ // basic request vars $category_id = rex_request('category_id', 'int'); $article_id = rex_request('article_id', 'int'); $clang = rex_request('clang', 'int'); $ctype = rex_request('ctype', 'int'); // additional request vars $artstart = rex_request('artstart', 'int'); $catstart = rex_request('catstart', 'int'); $edit_id = rex_request('edit_id', 'int'); $function = rex_request('function', 'string'); $info = ''; $warning = ''; $category_id = rex_category::get($category_id) ? $category_id : 0; $article_id = rex_article::get($article_id) ? $article_id : 0; $clang = rex_clang::exists($clang) ? $clang : rex_clang::getStartId(); // --------------------------------------------- Mountpoints $mountpoints = rex::getUser()->getComplexPerm('structure')->getMountpoints(); if (count($mountpoints) == 1 && $category_id == 0) { // Nur ein Mointpoint -> Sprung in die Kategory $category_id = current($mountpoints); } // --------------------------------------------- Rechte prüfen $KATPERM = rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($category_id); $stop = false; if (rex_clang::count() > 1) { if (!rex::getUser()->getComplexPerm('clang')->hasPerm($clang)) { $stop = true; foreach (rex_clang::getAllIds() as $key) { if (rex::getUser()->getComplexPerm('clang')->hasPerm($key)) {
/** * @return rex_article */ public function getArticle() { return rex_article::get($this->getArticleId()); }
if ($article->getRows() == 1) { // ----- ctype holen $template_attributes = $article->getArrayValue('template_attributes'); // Für Artikel ohne Template if (!is_array($template_attributes)) { $template_attributes = []; } $ctypes = isset($template_attributes['ctype']) ? $template_attributes['ctype'] : []; // ctypes - aus dem template $ctype = rex_request('ctype', 'int', 1); if (!array_key_exists($ctype, $ctypes)) { $ctype = 1; } // default = 1 // ----- Artikel wurde gefunden - Kategorie holen $OOArt = rex_article::get($article_id, $clang); $category_id = $OOArt->getCategoryId(); // ----- Request Parameter $subpage = rex_be_controller::getCurrentPagePart(2); $function = rex_request('function', 'string'); $warning = htmlspecialchars(rex_request('warning', 'string')); $info = htmlspecialchars(rex_request('info', 'string')); $context = new rex_context(['page' => rex_be_controller::getCurrentPage(), 'article_id' => $article_id, 'clang' => $clang, 'ctype' => $ctype]); // ----- Titel anzeigen echo rex_view::title(rex_i18n::msg('content'), ''); if (rex_be_controller::getCurrentPagePart(1) == 'content' && $article_id > 0) { $icon = $article->getValue('startarticle') == 1 ? 'rex-icon-startarticle' : 'rex-icon-article'; $term = $article->getValue('startarticle') == 1 ? rex_i18n::msg('start_article') : rex_i18n::msg('article'); //echo '<h2><i class="rex-icon ' . $icon . '" title="' . $term . '"></i> ' . $article->getValue('name') . ' <small>' . rex_i18n::msg('id') . '=' . $article->getValue('id') . ', ' . $term . '</small></h2>'; } // ----- Languages
/** * Bearbeitet einen Artikel. * * @param int $article_id Id des Artikels der verändert werden soll * @param int $clang Id der Sprache * @param array $data Array mit den Daten des Artikels * * @throws rex_api_exception * * @return string Eine Statusmeldung */ public static function editArticle($article_id, $clang, $data) { if (!is_array($data)) { throw new rex_api_exception('Expecting $data to be an array!'); } self::reqKey($data, 'name'); // Artikel mit alten Daten selektieren $thisArt = rex_sql::factory(); $thisArt->setQuery('select * from ' . rex::getTablePrefix() . 'article where id=' . $article_id . ' and clang_id=' . $clang); if ($thisArt->getRows() != 1) { throw new rex_api_exception('Unable to find article with id "' . $article_id . '" and clang "' . $clang . '"!'); } $ooArt = rex_article::get($article_id, $clang); $data['category_id'] = $ooArt->getCategoryId(); if (rex_plugin::get('structure', 'content')->isAvailable()) { $templates = rex_template::getTemplatesForCategory($data['category_id']); // Wenn Template nicht vorhanden, dann entweder erlaubtes nehmen // oder leer setzen. if (!isset($templates[$data['template_id']])) { $data['template_id'] = 0; if (count($templates) > 0) { $data['template_id'] = key($templates); } } } if (isset($data['priority'])) { if ($data['priority'] <= 0) { $data['priority'] = 1; } } // complete remaining optional aprams foreach (['path', 'priority'] as $optionalData) { if (!isset($data[$optionalData])) { $data[$optionalData] = $thisArt->getValue($optionalData); } } $EA = rex_sql::factory(); $EA->setTable(rex::getTablePrefix() . 'article'); $EA->setWhere(['id' => $article_id, 'clang_id' => $clang]); $EA->setValue('name', $data['name']); $EA->setValue('template_id', $data['template_id']); $EA->setValue('priority', $data['priority']); $EA->addGlobalUpdateFields(); try { $EA->update(); $message = rex_i18n::msg('article_updated'); // ----- PRIOR rex_sql::factory()->setTable(rex::getTable('article'))->setWhere('id = :id AND clang_id != :clang', ['id' => $article_id, 'clang' => $clang])->setValue('priority', $data['priority'])->addGlobalUpdateFields()->update(); foreach (rex_clang::getAllIds() as $clangId) { self::newArtPrio($data['category_id'], $clangId, $data['priority'], $thisArt->getValue('priority')); } rex_article_cache::delete($article_id); // ----- EXTENSION POINT $message = rex_extension::registerPoint(new rex_extension_point('ART_UPDATED', $message, ['id' => $article_id, 'article' => clone $EA, 'article_old' => clone $thisArt, 'status' => $thisArt->getValue('status'), 'name' => $data['name'], 'clang' => $clang, 'parent_id' => $data['category_id'], 'priority' => $data['priority'], 'path' => $data['path'], 'template_id' => $data['template_id'], 'data' => $data])); } catch (rex_sql_exception $e) { throw new rex_api_exception($e); } return $message; }
<?php $content = ''; if (rex_post('savemeta', 'boolean')) { $content = rex_view::success(rex_i18n::msg('minfo_metadata_saved')); } $panel = '<fieldset> <input type="hidden" name="save" value="1" /> <input type="hidden" name="ctype" value="' . $ctype . '" /> '; $metainfoHandler = new rex_metainfo_article_handler(); $form = $metainfoHandler->getForm(['id' => $article_id, 'clang' => $clang, 'article' => $article]); $n = []; $n['label'] = '<label for="rex-id-meta-article-name">' . rex_i18n::msg('header_article_name') . '</label>'; $n['field'] = '<input class="form-control" type="text" id="rex-id-meta-article-name" name="meta_article_name" value="' . htmlspecialchars(rex_article::get($article_id, $clang)->getValue('name')) . '" />'; $formElements = [$n]; $fragment = new rex_fragment(); $fragment->setVar('elements', $formElements, false); $panel .= $fragment->parse('core/form/form.php'); $panel .= $form . '</fieldset>'; $formElements = []; $n = []; $n['field'] = '<button class="btn btn-save rex-form-aligned" type="submit" name="savemeta"' . rex::getAccesskey(rex_i18n::msg('update_metadata'), 'save') . ' value="1">' . rex_i18n::msg('update_metadata') . '</button>'; $formElements[] = $n; $fragment = new rex_fragment(); $fragment->setVar('elements', $formElements, false); $buttons = $fragment->parse('core/form/submit.php'); $fragment = new rex_fragment(); $fragment->setVar('class', 'edit', false); $fragment->setVar('title', rex_i18n::msg('general'), false); $fragment->setVar('body', $panel, false);
private function _setActivePath() { $article_id = rex::getProperty('article_id'); if ($OOArt = rex_article::get($article_id)) { $path = trim($OOArt->getPath(), '|'); $this->path = []; if ($path != '') { $this->path = explode('|', $path); } $this->current_article_id = $article_id; $this->current_category_id = $OOArt->getCategoryId(); return true; } return false; }
public function execute() { $article_id = rex_request('article_id', 'int'); $ooArticle = rex_article::get($article_id); $category_id = $ooArticle->getCategoryId(); /** * @var rex_user */ $user = rex::getUser(); // article2category und category2article verwenden das gleiche Recht: article2category if ($user->hasPerm('article2startarticle[]') && rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($category_id)) { if (rex_article_service::article2startarticle($article_id)) { $result = new rex_api_result(true, rex_i18n::msg('content_tostartarticle_ok')); } else { $result = new rex_api_result(false, rex_i18n::msg('content_tostartarticle_failed')); } return $result; } else { throw new rex_api_exception('user has no permission for this article!'); } }
<?php /** * Regelt die Rechte an den einzelnen Kategorien und gibt den Pfad aus * Kategorien = Startartikel und Bezüge. * * @package redaxo5 */ $KATout = ''; // Variable definiert und vorbelegt wenn nicht existent $KAToutARR = []; // Variable definiert und vorbelegt wenn nicht existent $navigation = []; $object_id = $article_id > 0 ? $article_id : $category_id; $object = rex_article::get($object_id, $clang); if ($object) { $tree = $object->getParentTree(); if (!$object->isStartarticle()) { $tree[] = $object; } foreach ($tree as $parent) { $id = $parent->getId(); if (rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($id)) { $n = []; $n['title'] = str_replace(' ', ' ', htmlspecialchars($parent->getName())); if ($parent->isStartarticle()) { $n['href'] = rex_url::backendPage('structure', ['category_id' => $id, 'clang' => $clang]); } $navigation[] = $n; } }
<?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; });
}); $list->removeColumn('clang_start'); } $list->addColumn(rex_i18n::msg('function'), '<i class="rex-icon rex-icon-edit"></i> ' . rex_i18n::msg('edit')); $list->setColumnLayout(rex_i18n::msg('function'), ['<th class="rex-table-action" colspan="2">###VALUE###</th>', '<td class="rex-table-action">###VALUE###</td>']); $list->setColumnParams(rex_i18n::msg('function'), ['data_id' => '###id###', 'func' => 'edit', 'start' => rex_request('start', 'string')]); $list->addColumn(rex_i18n::msg('delete'), '<i class="rex-icon rex-icon-delete"></i> ' . rex_i18n::msg('delete')); $list->setColumnLayout(rex_i18n::msg('delete'), ['', '<td class="rex-table-action">###VALUE###</td>']); $list->setColumnParams(rex_i18n::msg('delete'), ['data_id' => '###id###', 'func' => 'delete']); $list->addLinkAttribute(rex_i18n::msg('delete'), 'onclick', 'return confirm(\' id=###id### ' . rex_i18n::msg('delete') . ' ?\')'); $showArticle = function ($params) { $id = $params['list']->getValue($params['field']); if ($id == 0) { return $this->i18n('root'); } else { if ($article = rex_article::get($id)) { if ($article->isStartArticle()) { $link = 'index.php?page=structure&category_id=' . $id . '&clang=1'; } else { $link = 'index.php?page=content&article_id=' . $id . '&mode=edit&clang=1'; } return $article->getName() . ' [<a href="' . $link . '">' . $id . '</a>]'; } } return '[' . $id . ']'; }; $list->setColumnFormat('mount_id', 'custom', $showArticle, []); $list->setColumnFormat('start_id', 'custom', $showArticle, []); $list->setColumnFormat('notfound_id', 'custom', $showArticle, []); $list->removeColumn('clang'); $list->removeColumn('alias_domain');
/** * @param rex_context $context * * @return string * * @package redaxo\structure */ function rex_structure_searchbar(rex_context $context) { $message = ''; $search_result = ''; // ------------ Parameter $clang = $context->getParam('clang', 1); $category_id = $context->getParam('category_id', 0); $article_id = $context->getParam('article_id', 0); $search_article_name = rex_request('search_article_name', 'string'); // ------------ Suche via ArtikelId if (preg_match('/^[0-9]+$/', $search_article_name, $matches)) { if ($OOArt = rex_article::get($matches[0], $clang)) { rex_response::sendRedirect($context->getUrl(['page' => 'content/edit', 'article_id' => $OOArt->getId()], false)); } } // Auswahl eines normalen Artikels => category holen if ($article_id != 0) { $OOArt = rex_article::get($article_id, $clang); // Falls Artikel gerade geloescht wird, gibts keinen rex_article if ($OOArt) { $category_id = $OOArt->getCategoryId(); } } // ------------ Suche via ArtikelName if (rex_request('search_start', 'bool')) { // replace LIKE wildcards $search_article_name_like = str_replace(['_', '%'], ['\\_', '\\%'], $search_article_name); $qry = ' SELECT id FROM ' . rex::getTablePrefix() . 'article WHERE clang_id = ' . $clang . ' AND ( name LIKE "%' . $search_article_name_like . '%" OR catname LIKE "%' . $search_article_name_like . '%" )'; if (rex_addon::get('structure')->getConfig('searchmode', 'local') != 'global') { // Suche auf aktuellen Kontext eingrenzen if ($category_id != 0) { $qry .= ' AND path LIKE "%|' . $category_id . '|%"'; } } $search = rex_sql::factory(); // $search->setDebug(); $search->setQuery($qry); $foundRows = $search->getRows(); // Suche ergab nur einen Treffer => Direkt auf den Treffer weiterleiten if ($foundRows == 1) { $OOArt = rex_article::get($search->getValue('id'), $clang); if (rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($OOArt->getCategoryId())) { rex_response::sendRedirect($context->getUrl(['page' => 'content/edit', 'article_id' => $search->getValue('id')], false)); } } elseif ($foundRows > 0) { $needle = htmlspecialchars($search_article_name); $search_result .= '<div class="list-group">'; for ($i = 0; $i < $foundRows; ++$i) { $breadcrumb = []; $OOArt = rex_article::get($search->getValue('id'), $clang); $label = $OOArt->getName(); if (rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($OOArt->getCategoryId())) { $label .= ' [' . $search->getValue('id') . ']'; $highlightHit = function ($string, $needle) { return preg_replace('/(.*)(' . preg_quote($needle, '/') . ')(.*)/i', '\\1<mark>\\2</mark>\\3', $string); }; foreach ($OOArt->getParentTree() as $treeItem) { $treeLabel = $treeItem->getName(); if (rex::getUser()->hasPerm('advancedMode[]')) { $treeLabel .= ' [' . $treeItem->getId() . ']'; } $treeLabel = htmlspecialchars($treeLabel); $treeLabel = $highlightHit($treeLabel, $needle); $e = []; $e['title'] = $treeLabel; $e['href'] = $context->getUrl(['page' => 'structure', 'category_id' => $treeItem->getId()]); $breadcrumb[] = $e; } $label = htmlspecialchars($label); $label = $highlightHit($label, $needle); $e = []; $e['title'] = $label; $e['href'] = $context->getUrl(['page' => 'content/edit', 'article_id' => $treeItem->getId()]); $breadcrumb[] = $e; $fragment = new rex_fragment(); $fragment->setVar('items', $breadcrumb, false); $search_result .= '<div class="list-group-item">' . $fragment->parse('core/navigations/breadcrumb.php') . '</div>'; } $search->next(); } $search_result .= '</div>'; $fragment = new rex_fragment(); $fragment->setVar('title', rex_i18n::msg('be_search_result'), false); $fragment->setVar('content', $search_result, false); $search_result = $fragment->parse('core/page/section.php'); } else { $message = rex_view::info(rex_i18n::msg('be_search_no_results')); } } $select_name = 'category_id'; $add_homepage = true; if (rex_be_controller::getCurrentPagePart(1) == 'content') { $select_name = 'article_id'; $add_homepage = false; } $category_select = new rex_category_select(false, false, true, $add_homepage); $category_select->setName($select_name); $category_select->setSize('1'); $category_select->setAttribute('onchange', 'this.form.submit();'); $category_select->setSelected($category_id); $select = $category_select->get(); $doc = new DOMDocument(); $doc->loadHTML('<?xml encoding="UTF-8">' . $select); $options = $doc->getElementsByTagName('option'); $droplistContext = new rex_context(['page' => 'structure', 'category_id' => 0]); $button_label = ''; $items = []; foreach ($options as $option) { $value = ''; $item = []; if ($option->hasAttributes()) { foreach ($option->attributes as $attribute) { if ($attribute->name == 'value') { $value = $attribute->value; $droplistContext->setParam('category_id', $value); if ($attribute->value == $category_id) { $button_label = str_replace(" ", '', $option->nodeValue); $item['active'] = true; } } } } $item['title'] = preg_replace('/\\[([0-9]+)\\]$/', '<small class="rex-primary-id">$1</small>', $option->nodeValue); $item['href'] = $droplistContext->getUrl(); $items[] = $item; } $fragment = new rex_fragment(); $fragment->setVar('button_prefix', rex_i18n::msg('be_search_quick_navi')); $fragment->setVar('button_label', $button_label); $fragment->setVar('items', $items, false); $droplist = '<div class="navbar-btn navbar-right">' . $fragment->parse('core/dropdowns/dropdown.php'); $formElements = []; $n = []; $n['field'] = '<input class="form-control" type="text" name="search_article_name" value="' . htmlspecialchars($search_article_name) . '" placeholder="' . htmlspecialchars(rex_i18n::msg('be_search_article_name') . '/' . rex_i18n::msg('be_search_article_id')) . '" />'; $n['right'] = '<button class="btn btn-search" type="submit" name="search_start" value="1">' . rex_i18n::msg('be_search_start') . '</button>'; $formElements[] = $n; $fragment = new rex_fragment(); $fragment->setVar('elements', $formElements, false); $toolbar = $fragment->parse('core/form/input_group.php'); $toolbar = ' <form action="' . rex_url::currentBackendPage() . '" method="post"> ' . $context->getHiddenInputFields() . ' <div class="navbar-form navbar-left"> <div class="form-group"> ' . $toolbar . ' </div> </div> </form>'; $toolbar = rex_view::toolbar($toolbar . $droplist, rex_i18n::msg('be_search_search')); return $toolbar . $search_result; }