0byt3m1n1-V2
Path:
/
home
/
magalijoj
/
www
/
blog
/
inc
/
public
/
[
Home
]
File: lib.urlhandlers.php
<?php # ***** BEGIN LICENSE BLOCK ***** # This file is part of DotClear. # Copyright (c) 2005 Olivier Meunier. All rights # reserved. # # DotClear 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 2 of the License, or # (at your option) any later version. # # DotClear 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 DotClear; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ***** END LICENSE BLOCK ***** class dcUrlHandlers { protected static function p404() { header('Content-Type: text/html; charset=UTF-8'); http::head(404,'Not Found'); $GLOBALS['core']->url->type = '404'; echo $GLOBALS['core']->tpl->getData('404.html'); exit; } protected static function getPageNumber(&$args) { if (preg_match('#(^|/)page/([0-9]+)$#',$args,$m)) { $n = (integer) $m[2]; if ($n > 0) { $args = preg_replace('#(^|/)page/([0-9]+)$#','',$args); return $n; } } return false; } protected static function serveDocument($tpl,$content_type='text/html',$http_cache=true,$http_etag=true) { $_ctx =& $GLOBALS['_ctx']; $core =& $GLOBALS['core']; if ($_ctx->nb_entry_per_page === null) { $_ctx->nb_entry_per_page = $core->blog->settings->nb_post_per_page; } $tpl_file = $core->tpl->getFilePath($tpl); if (!$tpl_file) { header('Content-Type: text/plain; charset=UTF-8'); echo 'Unable to find template'; exit; } if ($http_cache) { $GLOBALS['mod_files'][] = $tpl_file; http::cache($GLOBALS['mod_files'],$GLOBALS['mod_ts']); } header('Content-Type: '.$content_type.'; charset=UTF-8'); $out = $core->tpl->getData($tpl); if ($http_cache && $http_etag) { http::etag($out,http::getSelfURI()); } echo $out; } public static function home($args) { $n = self::getPageNumber($args); if ($args && !$n) { self::p404(); } else { $core =& $GLOBALS['core']; if ($n) { $GLOBALS['_page_number'] = $n; $core->url->type = $n > 1 ? 'defaut-page' : 'default'; } if (empty($_GET['q'])) { self::serveDocument('home.html'); $core->blog->publishScheduledEntries(); exit; } else { self::search(); } } } public static function search() { $GLOBALS['_search'] = !empty($_GET['q']) ? rawurldecode($_GET['q']) : ''; self::serveDocument('search.html'); } public static function lang($args) { $_ctx =& $GLOBALS['_ctx']; $core =& $GLOBALS['core']; $n = self::getPageNumber($args); $params['lang'] = $args; $_ctx->langs = $core->blog->getLangs($params); if ($_ctx->langs->isEmpty()) { self::p404(); } else { if ($n) { $GLOBALS['_page_number'] = $n; } $_ctx->cur_lang = $args; self::home(null); } } public static function category($args) { $_ctx =& $GLOBALS['_ctx']; $core =& $GLOBALS['core']; $n = self::getPageNumber($args); if ($args == '' && !$n) { self::p404(); } $params['cat_url'] = $args; $_ctx->categories = $core->blog->getCategories($params); if ($_ctx->categories->isEmpty()) { self::p404(); } else { if ($n) { $GLOBALS['_page_number'] = $n; } self::serveDocument('category.html'); exit; } } public static function archive($args) { $_ctx =& $GLOBALS['_ctx']; $core =& $GLOBALS['core']; $year = $month = $cat_url = null; # Nothing or year and month if ($args == '') { self::serveDocument('archive.html'); exit; } elseif (preg_match('|^/([0-9]{4})/([0-9]{2})$|',$args,$m)) { $params['year'] = $m[1]; $params['month'] = $m[2]; $params['type'] = 'month'; $_ctx->archives = $core->blog->getDates($params); if ($_ctx->archives->isEmpty()) { self::p404(); } self::serveDocument('archive_month.html'); exit; } self::p404(); } public static function post($args) { if ($args == '') { self::p404(); } $_ctx =& $GLOBALS['_ctx']; $core =& $GLOBALS['core']; $core->blog->withoutPassword(false); $params = new ArrayObject(); $params['post_url'] = $args; $_ctx->posts = $core->blog->getPosts($params); $_ctx->comment_preview = new ArrayObject(); $_ctx->comment_preview['content'] = ''; $_ctx->comment_preview['rawcontent'] = ''; $_ctx->comment_preview['name'] = ''; $_ctx->comment_preview['mail'] = ''; $_ctx->comment_preview['site'] = ''; $_ctx->comment_preview['preview'] = false; $_ctx->comment_preview['remember'] = false; $core->blog->withoutPassword(true); if ($_ctx->posts->isEmpty()) { # No entry self::p404(); } $post_id = $_ctx->posts->post_id; $post_password = $_ctx->posts->post_password; # Getting commenter informations from cookie if (!empty($_COOKIE['comment_info'])) { $c_cookie = unserialize($_COOKIE['comment_info']); foreach ($c_cookie as $k => $v) { $_ctx->comment_preview[$k] = $v; } $_ctx->comment_preview['remember'] = true; } # Password protected entry if ($post_password != '') { # Get passwords cookie if (isset($_COOKIE['dc_passwd'])) { $pwd_cookie = unserialize($_COOKIE['dc_passwd']); } else { $pwd_cookie = array(); } # Check for match if ((!empty($_POST['password']) && $_POST['password'] == $post_password) || (isset($pwd_cookie[$post_id]) && $pwd_cookie[$post_id] == $post_password)) { $pwd_cookie[$post_id] = $post_password; setcookie('dc_passwd',serialize($pwd_cookie),0,'/'); } else { self::serveDocument('password-form.html','text/html',false); exit; } } $post_comment = isset($_POST['c_name']) && isset($_POST['c_mail']) && isset($_POST['c_site']) && isset($_POST['c_content']) && $_ctx->posts->commentsActive(); # Posting a comment if ($post_comment) { # Spam trap if (!empty($_POST['f_mail'])) { http::head(412,'Precondition Failed'); header('Content-Type: text/plain'); echo "So Long, and Thanks For All the Fish"; exit; } $name = $_POST['c_name']; $mail = $_POST['c_mail']; $site = $_POST['c_site']; $content = $_POST['c_content']; $preview = !empty($_POST['preview']); # Storing commenter informations in cookie if (!empty($_POST['c_remember'])) { $c_cookie = array('name' => $name,'mail' => $mail, 'site' => $site); $c_cookie = serialize($c_cookie); setcookie('comment_info',$c_cookie,strtotime('+3 month'),'/'); } if ($content != '') { if ($core->blog->settings->wiki_comments) { $core->initWikiComment(); } else { $core->initWikiSimpleComment(); } $content = $core->wikiTransform($content); $content = $core->HTMLfilter($content); } $_ctx->comment_preview['content'] = $content; $_ctx->comment_preview['rawcontent'] = $_POST['c_content']; $_ctx->comment_preview['name'] = $name; $_ctx->comment_preview['mail'] = $mail; $_ctx->comment_preview['site'] = $site; if ($preview) { $_ctx->comment_preview['preview'] = true; } else { # Post the comment $cur = $core->con->openCursor($core->prefix.'comment'); $cur->comment_author = $name; $cur->comment_site = html::clean($site); $cur->comment_email = html::clean($mail); $cur->comment_content = $content; $cur->post_id = $_ctx->posts->post_id; $cur->comment_status = $core->blog->settings->comments_pub ? 1 : -1; $cur->comment_ip = http::realIP(); $redir = $_ctx->posts->getURL(); $redir .= strpos($redir,'?') !== false ? '&' : '?'; try { if (!text::isEmail($cur->comment_email)) { throw new Exception(__('You must provide a valid email adress.')); } # --BEHAVIOR-- publicBeforeCommentCreate $core->callBehavior('publicBeforeCommentCreate',$cur); $comment_id = $core->blog->addComment($cur); # --BEHAVIOR-- publicAfterCommentCreate $core->callBehavior('publicAfterCommentCreate',$cur,$comment_id); if ($cur->comment_status == 1) { $redir_arg = 'pub=1'; } else { $redir_arg = 'pub=0'; } header('Location: '.$redir.$redir_arg); exit; } catch (Exception $e) { $_ctx->form_error = $e->getMessage(); $_ctx->form_error; } } } # The entry self::serveDocument('post.html'); exit; } public static function feed($args) { $type = null; $comments = false; $cat_url = false; $post_id = null; $params = array(); $subtitle = ''; $mime = 'application/xml'; $_ctx =& $GLOBALS['_ctx']; $core =& $GLOBALS['core']; if (preg_match('!^([a-z]{2}(-[a-z]{2})?)/(.*)$!',$args,$m)) { $params['lang'] = $m[1]; $args = $m[3]; $_ctx->langs = $core->blog->getLangs($params); if ($_ctx->langs->isEmpty()) { self::p404(); } else { $_ctx->cur_lang = $m[1]; } } if (preg_match('#^rss2/xslt$#',$args,$m)) { # RSS XSLT stylesheet self::serveDocument('rss2.xsl','text/xml'); exit; } elseif (preg_match('#^(atom|rss2)/comments/([0-9]+)$#',$args,$m)) { # Post comments feed $type = $m[1]; $comments = true; $post_id = (integer) $m[2]; } elseif (preg_match('#^(?:category/(.+)/)?(atom|rss2)(/comments)?$#',$args,$m)) { # All posts or comments feed $type = $m[2]; $comments = !empty($m[3]); if (!empty($m[1])) { $cat_url = $m[1]; } } else { self::p404(); } if ($cat_url) { $params['cat_url'] = $cat_url; $_ctx->categories = $core->blog->getCategories($params); if ($_ctx->categories->isEmpty()) { self::p404(); } $subtitle = ' - '.$_ctx->categories->cat_title; } elseif ($post_id) { $params['post_id'] = $post_id; $_ctx->posts = $core->blog->getPosts($params); if ($_ctx->posts->isEmpty()) { self::p404(); } $subtitle = ' - '.$_ctx->posts->post_title; } $tpl = $type; if ($comments) { $tpl .= '-comments'; $_ctx->nb_comment_per_page = $core->blog->settings->nb_comment_per_feed; } else { $_ctx->nb_entry_per_page = $core->blog->settings->nb_post_per_feed; $_ctx->short_feed_items = $core->blog->settings->short_feed_items; } $tpl .= '.xml'; if ($type == 'atom') { $mime = 'application/atom+xml'; } $_ctx->feed_subtitle = $subtitle; self::serveDocument($tpl,$mime); if (!$comments && !$cat_url) { $core->blog->publishScheduledEntries(); } exit; } public static function trackback($args) { if (!preg_match('/^[0-9]+$/',$args)) { self::p404(); } else { $tb = new dcTrackback($GLOBALS['core']); $tb->receive($args); exit; } } public static function rsd($args) { $core =& $GLOBALS['core']; http::cache($GLOBALS['mod_files'],$GLOBALS['mod_ts']); header('Content-Type: text/xml; charset=UTF-8'); echo '<?xml version="1.0" encoding="UTF-8"?>'."\n". '<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">'."\n". "<service>\n". " <engineName>DotClear</engineName>\n". " <engineLink>http://www.dotclear.net</engineLink>\n". ' <homePageLink>'.html::escapeHTML($core->blog->url)."</homePageLink>\n"; if ($core->blog->settings->enable_xmlrpc) { $u = sprintf(DC_XMLRPC_URL,$core->blog->url,$core->blog->id); echo " <apis>\n". ' <api name="Movable Type" blogID="1" preferred="true" apiLink="'.$u.'"/>'."\n". ' <api name="MetaWeblog" blogID="1" preferred="false" apiLink="'.$u.'"/>'."\n". ' <api name="Blogger" blogID="1" preferred="false" apiLink="'.$u.'"/>'."\n". " </apis>\n"; } echo "</service>\n". "</rsd>\n"; exit; } public static function xmlrpc($args) { $core =& $GLOBALS['core']; $server = new dcXmlRpc($core,$args); $server->serve(); exit; } } ?>
©
2018.