developer/stuff/cms/page_page.php
2016-06-05 11:27:10 +02:00

372 lines
15 KiB
PHP

<?php
/**
* File: page_page.php.
* Author: Ulrich Block
* Contact: <ulrich.block@easy-wi.com>
*
* This file is part of Easy-WI.
*
* Easy-WI is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Easy-WI is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Easy-WI. If not, see <http://www.gnu.org/licenses/>.
*
* Diese Datei ist Teil von Easy-WI.
*
* Easy-WI ist Freie Software: Sie koennen es unter den Bedingungen
* der GNU General Public License, wie von der Free Software Foundation,
* Version 3 der Lizenz oder (nach Ihrer Wahl) jeder spaeteren
* veroeffentlichten Version, weiterverbreiten und/oder modifizieren.
*
* Easy-WI wird in der Hoffnung, dass es nuetzlich sein wird, aber
* OHNE JEDE GEWAEHELEISTUNG, bereitgestellt; sogar ohne die implizite
* Gewaehrleistung der MARKTFAEHIGKEIT oder EIGNUNG FUER EINEN BESTIMMTEN ZWECK.
* Siehe die GNU General Public License fuer weitere Details.
*
* Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
* Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.
*/
if (!isset($page_include)) {
header('Location: index.php');
die;
}
if (isset($default_page_id)) {
$page_id = $default_page_id;
} else if (isset($page_category,$page_data->pages_array['pages']) and in_array($page_category,$page_data->pages_array['pages'])) {
$page_id = array_search($page_category,$page_data->pages_array['pages']);
} else {
$page_id = $ui->id('id',19, 'get');
}
if (isset($page_id) and is_numeric($page_id)) {
function pre_replace($m) {
return str_replace($m[1], htmlentities($m[1]), $m[0]);
}
// Get the current pages data
$query = $sql->prepare("SELECT t.`title`,t.`text`,t.`id`,p.`subpage` FROM `page_pages` p INNER JOIN `page_pages_text` t ON p.`id`=t.`pageid` WHERE p.`id`=? AND `type`='page' AND t.`language`=? AND p.`released`='1' AND p.`resellerid`='0' LIMIT 1");
$query->execute(array($page_id ,$user_language));
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$page_keywords = array();
$tag_tags = array();
$page_data->title = $row['title'];
$page_title = $row['title'];
$subPageId = $row['subpage'];
$breadcrumbID = $row['subpage'];
$breadcrumbPageID = $page_id;
$page_text = str_replace('%url%', $page_data->pageurl, $row['text']);
$page_text = preg_replace_callback('/<pre.*?>(.*?)<\/pre>/imsu', 'pre_replace', $page_text);
$query2 = $sql->prepare("SELECT t.`name` FROM `page_terms_used` u LEFT JOIN `page_terms` t ON u.`term_id`=t.`id` WHERE u.`language_id`=? AND u.`resellerid`='0' ORDER BY t.`name` DESC");
$query2->execute(array($row['id']));
while ($row2 = $query2->fetch(PDO::FETCH_ASSOC)) {
$page_data->AddData('keywords', $row2['name']);
$tag_tags[] = ($seo == 'Y') ? '<a href=' . $page_url. '/' . $user_language. '/' . $page_sprache->tag . '/' . strtolower(szrp($row2['name'])) . '/>' . $row2['name'] . '</a>' : '<a href=' . $page_url . '/index.php?site=tag&amp;tag=' . strtolower(szrp($row2['name'])) . '/>' . $row2['name'] . '</a>';
}
}
// Get the breadcrumps that lead to this page
$breadcrumbs = array();
$query = $sql->prepare("SELECT p.`id`,p.`subpage`,t.`title` FROM `page_pages` p LEFT JOIN `page_pages_text` t ON p.`id`=t.`pageid` WHERE p.`id`=? AND t.`language`=? AND `type`='page' AND p.`released`='1' AND p.`resellerid`='0' LIMIT 1");
while (isset($breadcrumbID) and isid($breadcrumbID, 19) and $breadcrumbID != $breadcrumbPageID) {
$query->execute(array($breadcrumbID, $user_language));
unset($breadcrumbID);
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$link = (isset($seo) and $seo == 'Y') ? $page_data->pageurl . '/' . $user_language . '/' . szrp($row['title']) . '/' : $page_data->pageurl . '?s=page&amp;l=' . $user_language . '&amp;id=' . $row['id'];
$breadcrumbs[] = array('href' => '<a href="' . $link . '">' . $row['title'] . '</a>', 'link' => $link);
$breadcrumbID = $row['subpage'];
$breadcrumbPageID = $row['id'];
}
}
$breadcrumbs = array_reverse($breadcrumbs);
if (!isset($subPageId)) {
$subPageId = $page_id;
}
$relatedPages = array();
// Get the IDs and titles of related (sub) pages. So we can automatically build a menu
$query = $sql->prepare("SELECT p.`id`,t.`title`,CASE WHEN p.`id`=p.`subpage` THEN 0 WHEN `sort` IS NULL THEN 9999 ELSE `sort` END AS `order` FROM `page_pages` p LEFT JOIN `page_pages_text` t ON p.`id`=t.`pageid` WHERE p.`subpage`=? AND t.`language`=? AND `type`='page' AND p.`released`='1' AND p.`resellerid`='0' ORDER BY `order`,p.`id`");
$query->execute(array($subPageId, $user_language));
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$link = (isset($seo) and $seo == 'Y') ? $page_data->pageurl . '/' . $user_language . '/' . szrp($row['title']) . '/' : $page_data->pageurl . '?s=page&amp;l=' . $user_language . '&amp;id=' . $row['id'];
$relatedPages[$row['id']] = array('href' => '<a href="' . $link . '">' . $row['title'] . '</a>', 'link' => $link, 'title' => $row['title']);
}
if (isset($page_title)) {
$page_data->setCanonicalUrl('page', $page_id);
$template_file = 'page_page.tpl';
} else {
$template_file = 'page_404.tpl';
}
} else if ($s == 'about') {
$page_keywords = array();
$tag_tags = array();
$query = $sql->prepare("SELECT t.`text` FROM `page_pages` p LEFT JOIN `page_pages_text` t ON p.`id`=t.`pageid` WHERE `type`='about' AND t.`language`=? AND p.`resellerid`='0' LIMIT 1");
$query->execute(array($user_language));
$page_text = nl2br($query->fetchColumn());
$page_title = $page_sprache->about;
$page_data->title = $page_sprache->about;
$page_data->setCanonicalUrl($s);
$template_file = 'page_page.tpl';
} else if ($s == 'search') {
$searchStringValue = htmlentities($ui->escaped('search', 'post'), ENT_QUOTES, 'UTF-8');
if ($ui->escaped('search', 'post')) {
$results = array();
$searchFor = array('general' => array(),'exact' => array());
$searchString = preg_replace("/\s+/",' ', $ui->escaped('search', 'post'));
$searchFor['exact'][]=strtolower($searchString);
if (strpos($searchString,'"') === false) {
foreach (preg_split('/\s+/', $searchString, -1, PREG_SPLIT_NO_EMPTY) as $v) {
$searchFor['general'][] = strtolower($v);
}
} else {
$checkForEnd = false;
$split = explode('"', $searchString);
foreach ($split as $v) {
if ($v != '' and $checkForEnd == false) {
foreach (preg_split('/\s+/', $v, -1, PREG_SPLIT_NO_EMPTY) as $v2) {
$searchFor['general'][]=strtolower($v2);
}
$checkForEnd = true;
} else if ($v != '' and $checkForEnd == true) {
$searchFor['exact'][] = strtolower($v);
$checkForEnd = false;
} else if ($v== '' and $checkForEnd == false) {
$checkForEnd = true;
}
}
}
$searchFor['exact'] = array_unique($searchFor['exact']);
$searchFor['general'] = array_unique($searchFor['general']);
function returnRating ($value, $exact = false) {
global $sql, $newssidebar_textlength, $page_data, $results, $seo;
$query = $sql->prepare("SELECT t.`id`,p.`id` AS `pageID`,p.`type`,t.`shortlink`,t.`title`,t.`text`,t.`language` FROM `page_pages` p LEFT JOIN `page_pages_text` t ON p.`id`=t.`pageid` WHERE p.`released`=1 AND p.`resellerid`=0 AND (LOWER(t.`shortlink`) LIKE :search OR LOWER(t.`title`) LIKE :search OR LOWER(t.`text`) LIKE :search)");
$query->execute(array(':search' => '%' . $value . '%'));
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
if (!isset($titleLanguages[$row['language']])) {
$titleLanguages[$row['language']] = array('page' => getlanguagefile('page', $row['language'], 0), 'general' => getlanguagefile('general', $row['language'], 0));
}
$text = (strlen($row['text']) <= $newssidebar_textlength) ? $row['text'] : substr($row['text'], 0, $newssidebar_textlength) . ' ...';
$title = $row['title'];
if ($row['type'] == 'news' and isset($seo) and $seo == 'Y') {
$type = (string) $titleLanguages[$row['language']]['general']->news;
$link = $page_data->pageurl . '/' . $row['language'] . '/' . szrp($titleLanguages[$row['language']]['general']->news) . '/' . szrp($row['title']) . '/';
} else if ($row['type'] == 'news') {
$type = (string) $titleLanguages[$row['language']]['general']->news;
$link = $page_data->pageurl . '?s=news&amp;l=' . $row['language'] . '&amp;id=' . $row['pageID'];
} else if ($row['type'] == 'page' and isset($seo) and $seo == 'Y') {
$type = (string) $titleLanguages[$row['language']]['general']->page;
$link = $page_data->pageurl . '/' . $row['language'] . '/' . szrp($row['title']) . '/';
} else if ($row['type'] == 'page') {
$type = (string) $titleLanguages[$row['language']]['general']->page;
$link = $page_data->pageurl . '?s=page&amp;l=' . $row['language'] . '&amp;id=' . $row['pageID'];
} else if ($row['type'] == 'about' and isset($seo) and $seo == 'Y') {
$type = (string) $titleLanguages[$row['language']]['page']->about;
$title = (string) $titleLanguages[$row['language']]['page']->about;
$link = $page_data->pageurl . '/' . $row['language'] . '/' . szrp($titleLanguages[$row['language']]['page']->about) . '/';
} else if ($row['type'] == 'about') {
$type = (string) $titleLanguages[$row['language']]['page']->about;
$title = (string) $titleLanguages[$row['language']]['page']->about;
$link = $page_data->pageurl . '/?s=news&amp;l=' . $row['language'];
}
if (!isset($link)) {
$link='#';
}
if ($exact == true) {
$worth = substr_count(strtolower($row['title']), strtolower($value)) * 16;
$worth += substr_count(strtolower($row['text']), strtolower($value)) * 2;
} else {
$worth = substr_count(strtolower($row['title']), strtolower($value)) * 12;
$worth += substr_count(strtolower($row['text']), strtolower($value));
}
$href = '<a href="' . $link.'" title="' . $title.'">' . $title.'</a>';
if (isset($results[$row['id']])) {
$oldWorth = $results[$row['id']]['worth'];
$hits = $results[$row['id']]['hits'];
$hits[] = $value;
$hits = array_unique($hits);
$worth += $oldWorth;
unset($results[$row['id']]);
} else {
$hits=array($value);
}
$results[$row['id']] = array('textID' => $row['id'], 'pageID' => $row['pageID'], 'language' => $row['language'], 'type' => $type, 'worth' => $worth, 'href' => $href, 'title' => $title, 'link' => $link, 'text' => str_replace('%url%', $page_data->pageurl, $text), 'hits' => $hits);
}
return $results;
}
$resultsArray = array();
foreach ($searchFor['general'] as $v) {
foreach (returnRating($v) as $key => $val) {
$results[$key] = $val;
}
}
foreach ($searchFor['exact'] as $v) {
foreach (returnRating($v) as $key => $val) {
$results[$key] = $val;
}
}
foreach ($results as $k => $v) {
unset($results[$k]);
$resultsArray[$v['worth']][$v['textID']] = $v;
}
krsort($resultsArray);
$results = array();
$exists = array();
foreach ($resultsArray as $key => $val) {
foreach ($val as $k => $v) {
if (!in_array($key, $exists)) {
unset($resultsArray[$key][$k]);
$results[] = $v;
$exists[] = $key;
}
}
}
unset($resultsArray, $searchFor, $searchString, $exists);
}
$page_data->setCanonicalUrl($s);
$page_data->title = $page_sprache->search;
$template_file = 'page_search.tpl';
} else if ($s == 'home') {
$page_data->setCanonicalUrl();
$template_file = 'page_home.tpl';
} else if ($s == 'sitemap') {
$page_data->setCanonicalUrl($s);
$page_data->title = $page_sprache->sitemap;
$template_file = 'page_sitemap.tpl';
} else if ($s == 'gallery') {
$page_data->setCanonicalUrl($s);
$page_data->title = $page_sprache->gallery;
$template_file = 'page_gallery.tpl';
} else if (isset($admin_id) and $ui->smallletters('preview', 4, 'get') == 'true') {
$page_keywords = array();
$tag_tags = array();
if (is_array($ui->escaped('text', 'post')) or is_object($ui->escaped('text', 'post'))) {
foreach ($ui->escaped('text', 'post') as $key => $value) {
$page_title = $ui->htmlcode('title', 'post', $key);
$page_data->title = $ui->htmlcode('title', 'post', $key);
$page_text=str_replace('%url%', $page_data->pageurl, $value);
}
} else {
$page_title = $ui->escaped('title', 'post');
$page_data->title = $ui->escaped('title', 'post');
$page_text=str_replace('%url%', $page_data->pageurl, $ui->escaped('text', 'post'));
}
$template_file = (isset($page_title)) ? 'page_page.tpl' : 'page_404.tpl';
}
// https://github.com/easy-wi/developer/issues/62
$langLinks = array();
if (isset($s) and $s == 'page') {
$query = $sql->prepare("SELECT `title`,`language` FROM `page_pages_text` WHERE `pageid`=?");
$query->execute(array($page_id));
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$langLinks[$row['language']] = ($page_data->seo == 'Y') ? szrp($row['title']) : '?s=page&amp;id=' . $page_id;
}
} else if (isset($s)) {
foreach ($languages as $l) {
$tempLanguage = getlanguagefile('page', $l, 0);
$langLinks[$l] = ($page_data->seo== 'Y') ? szrp($tempLanguage->$s) : '?s=' . $s;
}
}
$page_data->langLinks($langLinks);