$REX['ADDON']['seo42']['settings'] = array('rewriter' => true, 'url_ending' => '.html', 'hide_langslug' => 0, 'homeurl' => 2, 'homelang' => 0, 'no_double_content_redirects' => SEO42_NO_DOUBLE_CONTENT_REDIRECT_ONE_DOMAIN_ONLY, 'no_double_content_redirects_availability' => SEO42_NO_DOUBLE_CONTENT_REDIRECT_AVAILABILITY_FRONTEND, 'auto_redirects' => SEO42_AUTO_REDIRECT_NONE, 'smart_redirects' => true, 'sync_redirects' => false, 'sync_redirects_only_online' => false, 'redirects_allow_regex' => false, 'redirects_max_age' => 0, 'css_dir' => '/resources/css/', 'js_dir' => '/resources/js/', 'images_dir' => '/resources/images/', 'icons_dir' => '/resources/icons/', 'seo_friendly_image_manager_urls' => true, 'full_urls' => false, 'allow_article_id' => false, 'ignore_root_cats' => false, 'url_whitespace_replace' => '-', 'url_start' => '/', 'url_start_subdir' => './', 'remove_root_cats_for_categories' => array(), 'no_url_for_categories' => array(), 'include_query_params' => true, 'ignore_query_params' => array(), 'force_download_for_filetypes' => array(), 'send_header_x_ua_compatible' => true, 'fix_image_manager_cache_control_header' => false, 'static_sitemap_priority' => true, 'no_robots_txt_auto_disallow' => true, 'robots' => '', 'google_site_verification_filename' => '', 'robots_follow_flag' => 'follow', 'robots_archive_flag' => 'noarchive', 'title_delimiter' => '-', 'seopage' => true, 'title_preview' => true, 'no_prefix_checkbox' => false, 'custom_canonical_url' => false, 'noindex_checkbox' => false, 'urlpage' => true, 'all_url_types' => true, 'pagerank_checker' => true, 'redirects' => true, 'redirects_compact_view' => false, 'one_page_mode' => false, 'pagerank_checker_unlock' => false, 'global_special_chars' => '', 'global_special_chars_rewrite' => '', 'urlencode_whitespace_replace' => '_', 'urlencode_lowercase' => false, 'lang' => array(0 => array('code' => 'de', 'original_name' => 'deutsch', 'rewrite_mode' => SEO42_REWRITEMODE_SPECIAL_CHARS, 'special_chars' => 'Ä|ä|Ö|ö|Ü|ü|ß|&', 'special_chars_rewrite' => 'Ae|ae|Oe|oe|Ue|ue|ss|und', 'inherit_from_clang' => 0))); // overwrite default settings with user settings seo42_utils::includeSettingsFile(); // include cached redirects seo42_utils::includeRedirectsFile(); // pre init seo42 vars seo42::init(); // fix for iis webserver: set request uri manually if not available seo42_utils::requestUriFix(); // do redirects seo42_utils::noDoubleContentRedirect(); if (!$REX['REDAXO']) { seo42_utils::redirect(); } // check for expired redirects if (seo42_utils::redirectsDoExpire()) { seo42_utils::checkExpiredRedirects(); } // init if (!$REX['SETUP']) { // auto mod rewrite, but not for redaxo system page if ($REX['REDAXO'] && rex_request('page') == 'specials') { // don't touch mod rewrite var } else { if ($REX['ADDON']['seo42']['settings']['rewriter']) { $REX['MOD_REWRITE'] = true; } else { $REX['MOD_REWRITE'] = false; } } // init seo42
if ($func == 'edit') { $formLabel = $I18N->msg('seo42_redirect_redirect_edit'); } elseif ($func == 'add') { $formLabel = $I18N->msg('seo42_redirect_redirect_add'); } $form = rex_form::factory($REX['TABLE_PREFIX'] . 'redirects', $formLabel, 'id=' . $redirect_id); $form->addErrorMessage(REX_FORM_ERROR_VIOLATE_UNIQUE_KEY, $I18N->msg('seo42_redirect_redirect_exists')); // source url $field =& $form->addTextField('source_url'); $field->setLabel($I18N->msg('seo42_redirect_source_url')); $field->setAttribute('id', 'source-url'); // target url $field =& $form->addTextField('target_url'); $field->setLabel($I18N->msg('seo42_redirect_target_url')); $field->setAttribute('id', 'target-url'); if (seo42_utils::redirectsDoExpire() && $func == 'edit') { $field =& $form->addReadOnlyField('create_date'); $field->setLabel($I18N->msg('seo42_redirect_create_date')); $field =& $form->addTextField('expire_date'); $field->setLabel($I18N->msg('seo42_redirect_expire_date')); } if ($func == 'edit') { $form->addParam('redirect_id', $redirect_id); } elseif ($func == 'add') { // do nothing } // sort params to keep sort settings of user in list mode if (rex_request('sort') != '') { $form->addParam('sort', rex_request('sort')); } if (rex_request('sorttype') != '') {
public static function syncRedirects() { global $REX, $SEO42_IDS, $SEO42_IDS_CLONE, $SEO42_URLS, $SEO42_URLS_CLONE; $newRedirects = array(); seo42_generate_pathlist(array()); // normal urls with existing article_id foreach ($SEO42_IDS as $id => $value) { if (isset($SEO42_IDS_CLONE[$id])) { foreach ($REX['CLANG'] as $clangId => $clangName) { $oldUrl = '/' . $SEO42_IDS_CLONE[$id][$clangId]['url']; $newUrl = '/' . $SEO42_IDS[$id][$clangId]['url']; if ($oldUrl !== $newUrl) { if ($oldUrl == '/' || $oldUrl == '' || $newUrl == '' || $oldUrl == $newUrl) { // do nothing } else { $article = OOArticle::getArticleById($id, $clangId); if (is_object($article)) { $onlyOnline = $REX['ADDON']['seo42']['settings']['sync_redirects_only_online']; if (!$onlyOnline || $onlyOnline && $article->isOnline()) { $newRedirects[$oldUrl] = $newUrl; } } } } } } } // userdef urls $userDefOldUrls = self::getUserDefUrls($SEO42_URLS_CLONE); if (isset($userDefOldUrls) && is_array($userDefOldUrls) && count($userDefOldUrls) > 0) { // include pathlist manually because at this point userdef urls are missing in $SEO42_URLS array if (file_exists(SEO42_PATHLIST)) { unset($SEO42_URLS); unset($SEO42_IDS); include SEO42_PATHLIST; } $userDefNewUrls = self::getUserDefUrls($SEO42_URLS); foreach ($userDefNewUrls as $id => $data) { if (isset($userDefOldUrls[$id])) { $oldUrl = '/' . $userDefOldUrls[$id]['url']; $newUrl = '/' . $userDefNewUrls[$id]['url']; if ($oldUrl !== $newUrl) { if ($oldUrl == '/' || $oldUrl == '' || $newUrl == '' || $oldUrl == $newUrl) { // do nothing } else { $article = OOArticle::getArticleById($data['article_id'], $data['clang']); if (is_object($article)) { $onlyOnline = $REX['ADDON']['seo42']['settings']['sync_redirects_only_online']; if (!isset($newRedirects[$oldUrl])) { if (!$onlyOnline || $onlyOnline && $article->isOnline()) { $newRedirects[$oldUrl] = $newUrl; } } } } } } } } if (count($newRedirects) > 0) { foreach ($newRedirects as $oldUrl => $newUrl) { // check for redirects loop $sql = rex_sql::factory(); $sql->setDebug(false); $sql->setQuery("SELECT * FROM `" . $REX['TABLE_PREFIX'] . "redirects` WHERE source_url LIKE '" . self::sqlLike($newUrl) . "' ESCAPE '|'"); if ($sql->getRows() > 0) { // delete existing redirect to avoid loop $sql2 = rex_sql::factory(); $sql2->setDebug(false); $sql2->setQuery("DELETE FROM `" . $REX['TABLE_PREFIX'] . "redirects` WHERE source_url LIKE '" . self::sqlLike($newUrl) . "' ESCAPE '|'"); } else { $maxAge = intval($REX['ADDON']['seo42']['settings']['redirects_max_age']); $createDate = self::getDate(); $expireDate = self::getDate($maxAge); if (!seo42_utils::redirectsDoExpire()) { $expireDate = 0; } // check if redirect already exists $sql2 = rex_sql::factory(); $sql2->setDebug(false); $sql2->setQuery("SELECT * FROM `" . $REX['TABLE_PREFIX'] . "redirects` WHERE source_url LIKE '" . self::sqlLike($oldUrl) . "' ESCAPE '|'"); if ($sql2->getRows() > 0) { // update existing redirect $sql3 = rex_sql::factory(); $sql3->setDebug(false); $sql3->setQuery('UPDATE `' . $REX['TABLE_PREFIX'] . 'redirects` SET source_url = "' . $oldUrl . '", target_url = "' . $newUrl . '", create_date = "' . $createDate . '", expire_date = "' . $expireDate . '" WHERE id = ' . $sql2->getValue('id')); } else { // add new redirect $sql3 = rex_sql::factory(); $sql3->setDebug(false); $sql3->setQuery('INSERT INTO `' . $REX['TABLE_PREFIX'] . 'redirects` (source_url, target_url, create_date, expire_date) VALUES ("' . $oldUrl . '", "' . $newUrl . '", "' . $createDate . '", "' . $expireDate . '")'); } } } // update cached redirects self::updateRedirectsFile(false); } }