getSerialized('sefurl_regex_out')) { $query = 'select * from `tiki_sefurl_regex_out` where `silent` != ? order by `order` asc'; $result = $tikilib->query($query, ['y']); $sefurl_regex_out = []; if (! empty($result)) { while ($res = $result->fetchRow()) { if (empty($res['feature']) || $prefs[$res['feature']] == 'y') { $sefurl_regex_out[] = $res; } } } $cachelib->cacheItem('sefurl_regex_out', serialize($sefurl_regex_out)); } } if ($type == 'article' && empty($with_next) && $with_title == 'y') { if ($prefs['feature_sefurl_title_article'] == 'y') { $artlib = TikiLib::lib('art'); if (preg_match('/articleId=([0-9]+)/', $tpl_output, $matches) || preg_match('/article([0-9]+)/', $tpl_output, $matches)) { if (empty($title)) { $title = $artlib->get_title($matches[1]); } $title = preg_replace(PATTERN_TO_CLEAN_TEXT, CLEAN_CHAR, $tikilib->take_away_accent($title)); $title = preg_replace('/' . CLEAN_CHAR . CLEAN_CHAR . '+/', '-', $title); $title = preg_replace('/' . CLEAN_CHAR . '+$/', '', $title); } } else { $title = ''; } } if ($type == 'blog' && empty($with_next) && $with_title == 'y') { if ($prefs['feature_sefurl_title_blog'] == 'y') { $bloglib = TikiLib::lib('blog'); if (preg_match('/blogId=([0-9]+)/', $tpl_output, $matches) || preg_match('/blog([0-9]+)/', $tpl_output, $matches)) { if (empty($title)) { $title = $bloglib->get_title($matches[1]); } $title = preg_replace(PATTERN_TO_CLEAN_TEXT, CLEAN_CHAR, $tikilib->take_away_accent($title)); $title = preg_replace('/' . CLEAN_CHAR . CLEAN_CHAR . '+/', '-', $title); $title = preg_replace('/' . CLEAN_CHAR . '+$/', '', $title); } } else { $title = ''; } } if ($type == 'blogpost' && empty($with_next) && $with_title == 'y') { if ($prefs['feature_sefurl_title_blog'] == 'y') { $bloglib = TikiLib::lib('blog'); if (preg_match('/postId=([0-9]+)/', $tpl_output, $matches) || preg_match('/blogpost([0-9]+)/', $tpl_output, $matches)) { if (empty($title)) { if ($post_info = $bloglib->get_post($matches[1])) { $title = $post_info['title']; } } $title = preg_replace(PATTERN_TO_CLEAN_TEXT, CLEAN_CHAR, $tikilib->take_away_accent($title)); $title = preg_replace('/' . CLEAN_CHAR . CLEAN_CHAR . '+/', '-', $title); $title = preg_replace('/' . CLEAN_CHAR . '+$/', '', $title); } } else { $title = ''; } } if ($type == 'tracker item' || $type == 'trackeritem') { if (preg_match('/itemId=([0-9]+)/', $tpl_output, $matches)) { $trklib = TikiLib::lib('trk'); if ($prefs['feature_sefurl_title_trackeritem'] == 'y') { $title = $trklib->get_title_sefurl($matches[1]); } if ( $prefs['feature_sefurl_tracker_prefixalias'] == 'y' && $prefs['tracker_prefixalias_on_links'] == 'y' && $pagealias = $trklib->get_trackeritem_pagealias($matches[1]) ) { $title = ''; $tpl_output = "./tiki-index.php?page=" . $pagealias; } } } if ($type == 'category' && ! empty($title) && $with_title == 'y') { $title = preg_replace(PATTERN_TO_CLEAN_TEXT, CLEAN_CHAR, $tikilib->take_away_accent($title)); $title = preg_replace('/' . CLEAN_CHAR . CLEAN_CHAR . '+/', '-', $title); $title = preg_replace('/' . CLEAN_CHAR . '+$/', '', $title); } if (($type == 'forumthread' || $type == 'forum post') && empty($with_next) && $with_title == 'y') { if ($prefs['feature_sefurl_title_forumthread'] == 'y') { $commentslib = TikiLib::lib('comments'); if (preg_match('/comments_parentId=([0-9]+)/', $tpl_output, $matches) || preg_match('/forumthread([0-9]+)/', $tpl_output, $matches)) { if (empty($title)) { $commentInfo = $commentslib->get_comment($matches[1]); $title = ! empty($commentInfo["title"]) ? $commentInfo["title"] : ''; } $title = preg_replace(PATTERN_TO_CLEAN_TEXT, CLEAN_CHAR, $tikilib->take_away_accent($title)); $title = preg_replace('/' . CLEAN_CHAR . CLEAN_CHAR . '+/', '-', $title); $title = preg_replace('/' . CLEAN_CHAR . '+$/', '', $title); if (! empty($prefs['feature_sefurl_title_max_size'])) { if (strlen($title) > $prefs['feature_sefurl_title_max_size']) { $title = substr($title, 0, ($prefs['feature_sefurl_title_max_size'] + 1)); $titleMaxLength = strrpos($title, CLEAN_CHAR); if ($titleMaxLength > 0) { $title = substr($title, 0, $titleMaxLength); } } } } } else { $title = ''; } } foreach ($sefurl_regex_out as $regex) { if ( (empty($type) || $type == $regex['type']) && preg_match('/tiki-index\.php\?page=[^&]*%2F/', $tpl_output) === 0 ) { // slash (%2F here) in sefurl page name causes error 404 // if a question mark in pattern, deal with possible additional terms // The '?&' isn't pretty but seems to work. //if ( strpos($regex['left'],'?') !== FALSE ) { // $tpl_output = preg_replace( '/'.$regex['left'].'&/', $regex['right'].'?&', $tpl_output ); //} $tpl_output = preg_replace('/' . $regex['left'] . '/', $regex['right'], $tpl_output); } } if (! empty($title) && $with_title == 'y') { $tpl_output .= TITLE_SEPARATOR . $title; } if (is_array($prefs['feature_sefurl_paths'])) { foreach ($prefs['feature_sefurl_paths'] as $path) { if (isset($_REQUEST[$path])) { $tpl_output = urlencode($_REQUEST[$path]) . "/$tpl_output"; } } } if (strpos($tpl_output, '?') === false) { // historically tiki has coped with malformed short urls with no ? $amppos = strpos($tpl_output, '&'); // route.php requires that we no longer do that $eqpos = strpos($tpl_output, '='); if ($amppos !== false && ($eqpos === false || $eqpos > $amppos)) { if (substr($tpl_output, $amppos, 5) !== '&') { $tpl_output[$amppos] = '?'; } else { $tpl_output = substr($tpl_output, 0, $amppos) . '?' . substr($tpl_output, $amppos + 5); } } } if ($with_next) { if (strpos($tpl_output, '?') === false) { $tpl_output .= '?'; } else { $tpl_output .= '&'; } } return $tpl_output; }