aboutsummaryrefslogtreecommitdiff
path: root/ratatoeskr/frontend.php
diff options
context:
space:
mode:
Diffstat (limited to 'ratatoeskr/frontend.php')
-rw-r--r--ratatoeskr/frontend.php1294
1 files changed, 647 insertions, 647 deletions
diff --git a/ratatoeskr/frontend.php b/ratatoeskr/frontend.php
index 9c43ec5..71e940e 100644
--- a/ratatoeskr/frontend.php
+++ b/ratatoeskr/frontend.php
@@ -2,7 +2,7 @@
/*
* File: ratatoeskr/frontend.php
* All the stuff for the frontend (i.e. what the visitor of the website sees).
- *
+ *
* License:
* This file is part of Ratatöskr.
* Ratatöskr is licensed unter the MIT / X11 License.
@@ -18,137 +18,137 @@ require_once(dirname(__FILE__) . "/libs/kses.php");
/*
* Function: section_transform_ste
* Transforms an <Section> object to an array, so it can be accessed via a STE template.
- *
+ *
* Parameters:
- * $section - <Section> object.
- * $lang - The current language.
- *
+ * $section - <Section> object.
+ * $lang - The current language.
+ *
* Returns:
- * Array with these fields:
- * * id - The ID of the section.
- * * name - The name of the section.
- * * title - The title of the section in the current language
- * * __obj - The <Section> object. Useful for plugins, so they do not need to fetch the object from the database again.
+ * Array with these fields:
+ * * id - The ID of the section.
+ * * name - The name of the section.
+ * * title - The title of the section in the current language
+ * * __obj - The <Section> object. Useful for plugins, so they do not need to fetch the object from the database again.
*/
function section_transform_ste($section, $lang)
{
- return array(
- "id" => $section->get_id(),
- "name" => $section->name,
- "title" => $section->title[$lang]->text,
- "__obj" => $section
- );
+ return array(
+ "id" => $section->get_id(),
+ "name" => $section->name,
+ "title" => $section->title[$lang]->text,
+ "__obj" => $section
+ );
}
/*
* Function: tag_transform_ste
* Transforms an <Tag> object to an array, so it can be accessed via a STE template.
- *
+ *
* Parameters:
- * $section - <Tag> object.
- * $lang - The current language.
- *
+ * $section - <Tag> object.
+ * $lang - The current language.
+ *
* Returns:
- * Array with these fields:
- * * id - The ID of the tag.
- * * name - The name of the tag.
- * * title - The title in the current language.
- * * __obj - The <Tag> object. Useful for plugins, so they do not need to fetch the object from the database again.
+ * Array with these fields:
+ * * id - The ID of the tag.
+ * * name - The name of the tag.
+ * * title - The title in the current language.
+ * * __obj - The <Tag> object. Useful for plugins, so they do not need to fetch the object from the database again.
*/
function tag_transform_ste($tag, $lang)
{
- try
- {
- return array(
- "id" => $tag->get_id(),
- "name" => $tag->name,
- "title" => $tag->title[$lang]->text,
- "__obj" => $tag
- );
- }
- catch(DoesNotExistError $e)
- {
- return False;
- }
+ try
+ {
+ return array(
+ "id" => $tag->get_id(),
+ "name" => $tag->name,
+ "title" => $tag->title[$lang]->text,
+ "__obj" => $tag
+ );
+ }
+ catch(DoesNotExistError $e)
+ {
+ return False;
+ }
}
/*
* Function: article_transform_ste
* Transforms an <Article> object to an array, so it can be accessed via a STE template.
- *
+ *
* Parameters:
- * $article - <Article> object.
- * $lang - The current language.
- *
+ * $article - <Article> object.
+ * $lang - The current language.
+ *
* Returns:
- * Array with these fields:
- * * id
- * * urlname
- * * fullurl
- * * title
- * * text
- * * excerpt
- * * custom (array: name=>value)
- * * status (numeric)
- * * section (sub-fields: <section_transform_ste>)
- * * timestamp
- * * tags (array(sub-fields: <tag_transform_ste>))
- * * languages (array: language name=>url)
- * * comments_allowed
- * * __obj - Useful for plugins, so they do not need to fetch the object from the database again.
+ * Array with these fields:
+ * * id
+ * * urlname
+ * * fullurl
+ * * title
+ * * text
+ * * excerpt
+ * * custom (array: name=>value)
+ * * status (numeric)
+ * * section (sub-fields: <section_transform_ste>)
+ * * timestamp
+ * * tags (array(sub-fields: <tag_transform_ste>))
+ * * languages (array: language name=>url)
+ * * comments_allowed
+ * * __obj - Useful for plugins, so they do not need to fetch the object from the database again.
*/
function article_transform_ste($article, $lang)
{
- global $rel_path_to_root;
-
- $languages = array();
- $a_section = $article->get_section();
- foreach($article->title as $language => $_)
- $languages[$language] = "$rel_path_to_root/$language/{$a_section->name}/{$article->urlname}";
-
- return array(
- "id" => $article->get_id(),
- "urlname" => $article->urlname,
- "fullurl" => htmlesc("$rel_path_to_root/$lang/{$a_section->name}/{$article->urlname}"),
- "title" => htmlesc($article->title[$lang]->text),
- "text" => textprocessor_apply(str_replace("%root%", $rel_path_to_root, $article->text[$lang]->text), $article->text[$lang]->texttype),
- "excerpt" => textprocessor_apply(str_replace("%root%", $rel_path_to_root, $article->excerpt[$lang]->text), $article->excerpt[$lang]->texttype),
- "custom" => $article->custom,
- "status" => $article->status,
- "section" => section_transform_ste($a_section, $lang),
- "timestamp" => $article->timestamp,
- "tags" => array_filter(array_map(function($tag) use ($lang) { return tag_transform_ste($tag, $lang); }, $article->get_tags())),
- "languages" => $languages,
- "comments_allowed" => $article->allow_comments,
- "__obj" => $article
- );
+ global $rel_path_to_root;
+
+ $languages = array();
+ $a_section = $article->get_section();
+ foreach($article->title as $language => $_)
+ $languages[$language] = "$rel_path_to_root/$language/{$a_section->name}/{$article->urlname}";
+
+ return array(
+ "id" => $article->get_id(),
+ "urlname" => $article->urlname,
+ "fullurl" => htmlesc("$rel_path_to_root/$lang/{$a_section->name}/{$article->urlname}"),
+ "title" => htmlesc($article->title[$lang]->text),
+ "text" => textprocessor_apply(str_replace("%root%", $rel_path_to_root, $article->text[$lang]->text), $article->text[$lang]->texttype),
+ "excerpt" => textprocessor_apply(str_replace("%root%", $rel_path_to_root, $article->excerpt[$lang]->text), $article->excerpt[$lang]->texttype),
+ "custom" => $article->custom,
+ "status" => $article->status,
+ "section" => section_transform_ste($a_section, $lang),
+ "timestamp" => $article->timestamp,
+ "tags" => array_filter(array_map(function($tag) use ($lang) { return tag_transform_ste($tag, $lang); }, $article->get_tags())),
+ "languages" => $languages,
+ "comments_allowed" => $article->allow_comments,
+ "__obj" => $article
+ );
}
/*
* Function: comment_transform_ste
* Transforms an <Comment> object to an array, so it can be accessed via a STE template.
- *
+ *
* Parameters:
- * $comment - <Comment> object.
- *
+ * $comment - <Comment> object.
+ *
* Returns:
- * Array with these fields:
- * * id
- * * text
- * * author
- * * timestamp
+ * Array with these fields:
+ * * id
+ * * text
+ * * author
+ * * timestamp
*/
function comment_transform_ste($comment)
{
- global $rel_path_to_root, $ratatoeskr_settings;
-
- return array(
- "id" => $comment->get_id(),
- "text" => $comment->create_html(),
- "author" => htmlesc($comment->author_name),
- "timestamp" => $comment->get_timestamp(),
- "__obj" => $comment
- );
+ global $rel_path_to_root, $ratatoeskr_settings;
+
+ return array(
+ "id" => $comment->get_id(),
+ "text" => $comment->create_html(),
+ "author" => htmlesc($comment->author_name),
+ "timestamp" => $comment->get_timestamp(),
+ "__obj" => $comment
+ );
}
/* Register some tags for the template engine */
@@ -156,522 +156,522 @@ function comment_transform_ste($comment)
* STETag: articles_get
* Get articles by custom criterias. Will only get articles, that are available in the current language ($language).
* The fields of an article can be looked up at <article_transform_ste>.
- *
+ *
* Parameters:
- * var - (mandatory) The name of the variable, where the current article should be stored at.
- * id - (optional) Filter by ID.
- * urlname - (optional) Filter by urlname.
- * section - (optional) Filter by section (section name).
- * sectionvar - (optional) Filter by section (Name of variable that contains a section).
- * status - (optional) Filter by status (numeric, <ARTICLE_STATUS_>).
- * tag - (optional) Filter by tag (tag name).
- * tagvar - (optional) Filter by tag (Name of variable that contains a tag).
- * sort - (optional) How to sort. Format: "fieldname direction" where fieldname is one of [id, urlname, title, timestamp] and direction is one of [asc, desc].
- * perpage - (optional) How many articles should be shown per page (default unlimited).
- * page - (optional) On which page are we (starting with 1). Useful in combination with $current[page], <page_prev> and <page_next>. (Default: 1)
- * maxpage - (optional) (variable name) If given, the number of pages are stored in this variable.
- * skip - (optional) How many articles should be skipped? (Default: none)
- * count - (optional) How many articles to output. (Default unlimited)
+ * var - (mandatory) The name of the variable, where the current article should be stored at.
+ * id - (optional) Filter by ID.
+ * urlname - (optional) Filter by urlname.
+ * section - (optional) Filter by section (section name).
+ * sectionvar - (optional) Filter by section (Name of variable that contains a section).
+ * status - (optional) Filter by status (numeric, <ARTICLE_STATUS_>).
+ * tag - (optional) Filter by tag (tag name).
+ * tagvar - (optional) Filter by tag (Name of variable that contains a tag).
+ * sort - (optional) How to sort. Format: "fieldname direction" where fieldname is one of [id, urlname, title, timestamp] and direction is one of [asc, desc].
+ * perpage - (optional) How many articles should be shown per page (default unlimited).
+ * page - (optional) On which page are we (starting with 1). Useful in combination with $current[page], <page_prev> and <page_next>. (Default: 1)
+ * maxpage - (optional) (variable name) If given, the number of pages are stored in this variable.
+ * skip - (optional) How many articles should be skipped? (Default: none)
+ * count - (optional) How many articles to output. (Default unlimited)
*
* Tag Content:
- * The tag's content will be executed for every article. The current article will be written to the variable specified by the var parameter before.
+ * The tag's content will be executed for every article. The current article will be written to the variable specified by the var parameter before.
*
* Returns:
- * All results from the tag content.
+ * All results from the tag content.
*/
$ste->register_tag("articles_get", function($ste, $params, $sub)
{
- $lang = $ste->vars["language"];
-
- if(!isset($params["var"]))
- throw new \ste\RuntimeError("Parameter var is needed in article_get!");
-
- $criterias = array("langavail" => $lang, "onlyvisible" => True);
- if(isset($params["id"]))
- $criterias["id"] = $params["id"];
- if(isset($params["urlname"]))
- $criterias["urlname"];
- if(isset($params["status"]))
- $criterias["status"] = $params["status"];
- if(isset($params["sectionvar"]))
- {
- $sectionvar = $ste->get_var_by_name($params["sectionvar"]);
- $criterias["section"] = $sectionvar["__obj"];
- }
- else if(isset($params["section"]))
- {
- try
- {
- $criterias["section"] = Section::by_name($params["section"]);
- }
- catch(DoesNotExistError $e) {}
- }
- if(isset($params["tagvar"]))
- {
- $tagvar = $ste->get_var_by_name($params["tagvar"]);
- $criterias["tag"] = $tagvar["__obj"];
- }
- if(isset($params["tag"]))
- {
- try
- {
- $criterias["tag"] = Tag::by_name($params["tag"]);
- }
- catch(DoesNotExistError $e) {}
- }
-
- $field = NULL;
- $direction = NULL;
- if(isset($params["sort"]))
- {
- list($field, $direction) = explode(" ", $params["sort"]);
- if($direction === NULL)
- $field = NULL;
- $direction = strtoupper($direction);
- }
-
- $result = Article::by_multi($criterias, $field, $direction, @$params["count"], @$params["skip"], @$params["perpage"], @$params["page"], $maxpage);
-
- $result = array_map(function($article) use ($lang) { return article_transform_ste($article, $lang); }, $result);
-
- if(isset($params["perpage"]) and isset($params["maxpage"]))
- $ste->set_var_by_name($params["maxpage"], $maxpage == 0 ? 1 : $maxpage);
-
- $output = "";
- foreach($result as $article)
- {
- $ste->set_var_by_name($params["var"], $article);
- $output .= $sub($ste);
- }
- return $output;
+ $lang = $ste->vars["language"];
+
+ if(!isset($params["var"]))
+ throw new \ste\RuntimeError("Parameter var is needed in article_get!");
+
+ $criterias = array("langavail" => $lang, "onlyvisible" => True);
+ if(isset($params["id"]))
+ $criterias["id"] = $params["id"];
+ if(isset($params["urlname"]))
+ $criterias["urlname"];
+ if(isset($params["status"]))
+ $criterias["status"] = $params["status"];
+ if(isset($params["sectionvar"]))
+ {
+ $sectionvar = $ste->get_var_by_name($params["sectionvar"]);
+ $criterias["section"] = $sectionvar["__obj"];
+ }
+ else if(isset($params["section"]))
+ {
+ try
+ {
+ $criterias["section"] = Section::by_name($params["section"]);
+ }
+ catch(DoesNotExistError $e) {}
+ }
+ if(isset($params["tagvar"]))
+ {
+ $tagvar = $ste->get_var_by_name($params["tagvar"]);
+ $criterias["tag"] = $tagvar["__obj"];
+ }
+ if(isset($params["tag"]))
+ {
+ try
+ {
+ $criterias["tag"] = Tag::by_name($params["tag"]);
+ }
+ catch(DoesNotExistError $e) {}
+ }
+
+ $field = NULL;
+ $direction = NULL;
+ if(isset($params["sort"]))
+ {
+ list($field, $direction) = explode(" ", $params["sort"]);
+ if($direction === NULL)
+ $field = NULL;
+ $direction = strtoupper($direction);
+ }
+
+ $result = Article::by_multi($criterias, $field, $direction, @$params["count"], @$params["skip"], @$params["perpage"], @$params["page"], $maxpage);
+
+ $result = array_map(function($article) use ($lang) { return article_transform_ste($article, $lang); }, $result);
+
+ if(isset($params["perpage"]) and isset($params["maxpage"]))
+ $ste->set_var_by_name($params["maxpage"], $maxpage == 0 ? 1 : $maxpage);
+
+ $output = "";
+ foreach($result as $article)
+ {
+ $ste->set_var_by_name($params["var"], $article);
+ $output .= $sub($ste);
+ }
+ return $output;
});
/*
* STETag: section_list
* Iterate over all sections.
* The fields of a section can be looked up at <section_transform_ste>.
- *
+ *
* Parameters:
- * var - (mandatory) The name of the variable, where the current section should be stored at.
- * exclude - (optional) Sections to exclude
- * include_default - (optional) Should the default section be included (default: No).
- *
+ * var - (mandatory) The name of the variable, where the current section should be stored at.
+ * exclude - (optional) Sections to exclude
+ * include_default - (optional) Should the default section be included (default: No).
+ *
* Tag Content:
- * The tag's content will be executed for every section. The current section will be written to the variable specified by the var parameter before.
+ * The tag's content will be executed for every section. The current section will be written to the variable specified by the var parameter before.
*
* Returns:
- * All results from the tag content.
+ * All results from the tag content.
*/
$ste->register_tag("section_list", function($ste, $params, $sub)
{
- global $ratatoeskr_settings;
- $lang = $ste->vars["language"];
-
- $default_section = $ratatoeskr_settings["default_section"];
-
- if(!isset($params["var"]))
- throw new \ste\RuntimeException("Parameter var is needed in article_get!");
-
- $result = Section::all();
-
- if(isset($params["exclude"]))
- {
- $exclude = explode(",", $params["exclude"]);
- $result = array_filter($result, function($section) use ($exclude) { return !in_array($section->name, $exclude); });
- }
-
- $result = array_filter($result, function($section) use ($default_section) { return $section->get_id() != $default_section; });
-
- $result = array_map(function($section) use ($lang) { return section_transform_ste($section, $lang); }, $result);
-
- if($ste->evalbool($params["include_default"]))
- {
- $default = section_transform_ste(Section::by_id($default_section), $lang);
- array_unshift($result, $default);
- }
-
- $output = "";
- foreach($result as $section)
- {
- $ste->set_var_by_name($params["var"], $section);
- $output .= $sub($ste);
- }
- return $output;
+ global $ratatoeskr_settings;
+ $lang = $ste->vars["language"];
+
+ $default_section = $ratatoeskr_settings["default_section"];
+
+ if(!isset($params["var"]))
+ throw new \ste\RuntimeException("Parameter var is needed in article_get!");
+
+ $result = Section::all();
+
+ if(isset($params["exclude"]))
+ {
+ $exclude = explode(",", $params["exclude"]);
+ $result = array_filter($result, function($section) use ($exclude) { return !in_array($section->name, $exclude); });
+ }
+
+ $result = array_filter($result, function($section) use ($default_section) { return $section->get_id() != $default_section; });
+
+ $result = array_map(function($section) use ($lang) { return section_transform_ste($section, $lang); }, $result);
+
+ if($ste->evalbool($params["include_default"]))
+ {
+ $default = section_transform_ste(Section::by_id($default_section), $lang);
+ array_unshift($result, $default);
+ }
+
+ $output = "";
+ foreach($result as $section)
+ {
+ $ste->set_var_by_name($params["var"], $section);
+ $output .= $sub($ste);
+ }
+ return $output;
});
/*
* STETag: article_comments_count
* Get the number of comments for an article.
- *
+ *
* Parameters:
- * article - (mandatory) The name of the variable, where the article is stored at.
- *
+ * article - (mandatory) The name of the variable, where the article is stored at.
+ *
* Returns:
- * The number of comments.
+ * The number of comments.
*/
$ste->register_tag("article_comments_count", function($ste, $params, $sub)
{
- if(!isset($params["article"]))
- throw new \ste\RuntimeException("Need parameter 'article' in ste:article_comments_count.");
- $tpl_article = $ste->get_var_reference($params["article"], False);
- $lang = $ste->vars["language"];
-
- if(isset($tpl_article["__obj"]))
- $article = $tpl_article["__obj"];
- else
- {
- try
- {
- $article = Article::by_id(@$tpl_article["id"]);
- }
- catch(DoesNotExistError $e)
- {
- return 0;
- }
- }
- $comments = $article->get_comments($lang, True);
- $tpl_article["__comments"] = $comments;
- return count($comments);
+ if(!isset($params["article"]))
+ throw new \ste\RuntimeException("Need parameter 'article' in ste:article_comments_count.");
+ $tpl_article = $ste->get_var_reference($params["article"], False);
+ $lang = $ste->vars["language"];
+
+ if(isset($tpl_article["__obj"]))
+ $article = $tpl_article["__obj"];
+ else
+ {
+ try
+ {
+ $article = Article::by_id(@$tpl_article["id"]);
+ }
+ catch(DoesNotExistError $e)
+ {
+ return 0;
+ }
+ }
+ $comments = $article->get_comments($lang, True);
+ $tpl_article["__comments"] = $comments;
+ return count($comments);
});
/*
* STETag: article_comments
* List all comments for an article.
* The fields of a comment can be looked up at <comment_transform_ste>.
- *
+ *
* Parameters:
- * var - (mandatory) The name of the variable, where the current comment should be stored at.
- * article - (mandatory) The name of the variable, where the article is stored at.
- * sort - (optional) Should the comments be sorted chronologically (asc) or inverse (desc)? Default: asc
- *
+ * var - (mandatory) The name of the variable, where the current comment should be stored at.
+ * article - (mandatory) The name of the variable, where the article is stored at.
+ * sort - (optional) Should the comments be sorted chronologically (asc) or inverse (desc)? Default: asc
+ *
* Tag Content:
- * The tag's content will be executed for every comment. The current comment will be written to the variable specified by the var parameter before.
- *
+ * The tag's content will be executed for every comment. The current comment will be written to the variable specified by the var parameter before.
+ *
* Returns:
- * All results from the tag content.
+ * All results from the tag content.
*/
$ste->register_tag("article_comments", function($ste, $params, $sub)
{
- if(!isset($params["var"]))
- throw new \ste\RuntimeException("Need parameter 'var' in ste:article_comments.");
- if(!isset($params["article"]))
- throw new \ste\RuntimeException("Need parameter 'article' in ste:article_comments.");
- $tpl_article = $ste->get_var_reference($params["article"], False);
- $lang = $ste->vars["language"];
-
- if(isset($tpl_article["__comments"]))
- $comments = $tpl_article["__comments"];
- else
- {
- if(isset($tpl_article["__obj"]))
- $article = $tpl_article["__obj"];
- else
- {
- try
- {
- $article = Article::by_id(@$tpl_article["id"]);
- }
- catch(DoesNotExistError $e)
- {
- return "";
- }
- }
-
- $comments = $article->get_comments($lang, True);
- }
-
- $sortdir = (@$params["sort"] == "desc") ? -1 : 1;
- usort($comments, function($a,$b) use ($sortdir) { return intcmp($a->get_timestamp(), $b->get_timestamp()) * $sortdir; });
-
- $comments = array_map("comment_transform_ste", $comments);
-
- $output = "";
- foreach($comments as $comment)
- {
- $ste->set_var_by_name($params["var"], $comment);
- $output .= $sub($ste);
- }
- return $output;
+ if(!isset($params["var"]))
+ throw new \ste\RuntimeException("Need parameter 'var' in ste:article_comments.");
+ if(!isset($params["article"]))
+ throw new \ste\RuntimeException("Need parameter 'article' in ste:article_comments.");
+ $tpl_article = $ste->get_var_reference($params["article"], False);
+ $lang = $ste->vars["language"];
+
+ if(isset($tpl_article["__comments"]))
+ $comments = $tpl_article["__comments"];
+ else
+ {
+ if(isset($tpl_article["__obj"]))
+ $article = $tpl_article["__obj"];
+ else
+ {
+ try
+ {
+ $article = Article::by_id(@$tpl_article["id"]);
+ }
+ catch(DoesNotExistError $e)
+ {
+ return "";
+ }
+ }
+
+ $comments = $article->get_comments($lang, True);
+ }
+
+ $sortdir = (@$params["sort"] == "desc") ? -1 : 1;
+ usort($comments, function($a,$b) use ($sortdir) { return intcmp($a->get_timestamp(), $b->get_timestamp()) * $sortdir; });
+
+ $comments = array_map("comment_transform_ste", $comments);
+
+ $output = "";
+ foreach($comments as $comment)
+ {
+ $ste->set_var_by_name($params["var"], $comment);
+ $output .= $sub($ste);
+ }
+ return $output;
});
/*
* STETag: comment_form
* Generates a HTML form tag that allows the visitor to write a comment.
- *
+ *
* Parameters:
- * article - (mandatory) The name of the variable, where the article is stored at.
- * default - (optional) If not empty, a default formular with the mandatory fields will be generated.
- * previewbtn - (optional) If not empty and default form is choosen, a preview button will also be generated.
- *
+ * article - (mandatory) The name of the variable, where the article is stored at.
+ * default - (optional) If not empty, a default formular with the mandatory fields will be generated.
+ * previewbtn - (optional) If not empty and default form is choosen, a preview button will also be generated.
+ *
* Tag Content:
- * The tag's content will be written into the HTML form tag.
- * You have at least to define these fields:
- *
- * * <input type="text" name="author_name" /> - The Name of the author.
- * * <input type="text" name="author_mail" /> - The E-Mailaddress of the author.
- * * <textarea name="comment_text"></textarea> - The Text of the comment.
- * * <input type="submit" name="post_comment" /> - Submit button.
- *
- * You might also want to define this:
- *
- * * <input type="submit" name="preview_comment" /> - For a preview of the comment.
- *
- * If the parameter default is not empty, the tag's content will be thrown away.
- *
+ * The tag's content will be written into the HTML form tag.
+ * You have at least to define these fields:
+ *
+ * * <input type="text" name="author_name" /> - The Name of the author.
+ * * <input type="text" name="author_mail" /> - The E-Mailaddress of the author.
+ * * <textarea name="comment_text"></textarea> - The Text of the comment.
+ * * <input type="submit" name="post_comment" /> - Submit button.
+ *
+ * You might also want to define this:
+ *
+ * * <input type="submit" name="preview_comment" /> - For a preview of the comment.
+ *
+ * If the parameter default is not empty, the tag's content will be thrown away.
+ *
* Returns:
- * The finished HTML form.
- *
+ * The finished HTML form.
+ *
* See Also:
- * The "prevcomment" field in <$current>.
+ * The "prevcomment" field in <$current>.
*/
$ste->register_tag("comment_form", function($ste, $params, $sub)
{
- global $translation;
- if(!isset($params["article"]))
- throw new \ste\RuntimeException("Need parameter 'article' in ste:comment_form.");
- $tpl_article = $ste->get_var_reference($params["article"], False);
-
- if(isset($tpl_article["__obj"]))
- $article = $tpl_article["__obj"];
- else
- {
- try
- {
- $article = Article::by_id(@$tpl_article["id"]);
- }
- catch(DoesNotExistError $e)
- {
- return "";
- }
- }
-
- if(!$article->allow_comments)
- return "";
-
- /* A token protects from double sending of the same form and is also a simple protection from stupid spambots. */
- $token = uniqid("", True);
- $_SESSION["ratatoeskr_comment_tokens"][$token] = time();
-
- $form_header = "<form action=\"{$tpl_article["fullurl"]}?comment\" method=\"post\" accept-charset=\"UTF-8\"><input type=\"hidden\" name=\"comment_token\" value=\"$token\" />";
-
- $previewbtn = $ste->evalbool(@$params["previewbtn"]) ? " <input type=\"submit\" name=\"preview_comment\" value=\"{$translation["comment_form_preview"]}\" />" : "";
-
- if($ste->evalbool(@$params["default"]))
- $form_body = "<p>{$translation["comment_form_name"]}: <input type=\"text\" name=\"author_name\" value=\"" . htmlesc(@$_POST["author_name"]) . "\" /></p>
+ global $translation;
+ if(!isset($params["article"]))
+ throw new \ste\RuntimeException("Need parameter 'article' in ste:comment_form.");
+ $tpl_article = $ste->get_var_reference($params["article"], False);
+
+ if(isset($tpl_article["__obj"]))
+ $article = $tpl_article["__obj"];
+ else
+ {
+ try
+ {
+ $article = Article::by_id(@$tpl_article["id"]);
+ }
+ catch(DoesNotExistError $e)
+ {
+ return "";
+ }
+ }
+
+ if(!$article->allow_comments)
+ return "";
+
+ /* A token protects from double sending of the same form and is also a simple protection from stupid spambots. */
+ $token = uniqid("", True);
+ $_SESSION["ratatoeskr_comment_tokens"][$token] = time();
+
+ $form_header = "<form action=\"{$tpl_article["fullurl"]}?comment\" method=\"post\" accept-charset=\"UTF-8\"><input type=\"hidden\" name=\"comment_token\" value=\"$token\" />";
+
+ $previewbtn = $ste->evalbool(@$params["previewbtn"]) ? " <input type=\"submit\" name=\"preview_comment\" value=\"{$translation["comment_form_preview"]}\" />" : "";
+
+ if($ste->evalbool(@$params["default"]))
+ $form_body = "<p>{$translation["comment_form_name"]}: <input type=\"text\" name=\"author_name\" value=\"" . htmlesc(@$_POST["author_name"]) . "\" /></p>
<p>{$translation["comment_form_mail"]}: <input type=\"text\" name=\"author_mail\" value=\"" . htmlesc(@$_POST["author_mail"]) . "\" /></p>
<p>{$translation["comment_form_text"]}:<br /><textarea name=\"comment_text\" cols=\"50\" rows=\"10\">" . htmlesc(@$_POST["comment_text"]) . "</textarea></p>
<p><input type=\"submit\" name=\"post_comment\" value=\"{$translation["comment_form_submit"]}\" />$previewbtn</p>";
- else
- {
- $ste->vars["current"]["oldcomment"] = array(
- "name" => @$_POST["author_name"],
- "mail" => @$_POST["author_mail"],
- "text" => @$_POST["comment_text"]
- );
- $form_body = $sub($ste);
- unset($ste->vars["current"]["oldcomment"]);
- }
-
- return "$form_header\n$form_body\n</form>";
+ else
+ {
+ $ste->vars["current"]["oldcomment"] = array(
+ "name" => @$_POST["author_name"],
+ "mail" => @$_POST["author_mail"],
+ "text" => @$_POST["comment_text"]
+ );
+ $form_body = $sub($ste);
+ unset($ste->vars["current"]["oldcomment"]);
+ }
+
+ return "$form_header\n$form_body\n</form>";
});
/*
* STETags: Page control
* These tags can create links to the previous/next page.
- *
+ *
* page_prev - Link to the previous page (if available).
* page_next - Link to the next page (if available).
- *
+ *
* Parameters:
- * current - (mandatory) The current page number.
- * maxpage - (mandatory) How many pages in total?
- * default - (optional) If not empty, a default localized link text will be used.
- *
+ * current - (mandatory) The current page number.
+ * maxpage - (mandatory) How many pages in total?
+ * default - (optional) If not empty, a default localized link text will be used.
+ *
* Tag Content:
- * The tag's content will be used as the link text.
- *
+ * The tag's content will be used as the link text.
+ *
* Returns:
- * A Link to the previous / next page.
+ * A Link to the previous / next page.
*/
$ste->register_tag("page_prev", function($ste, $params, $sub)
{
- global $translation;
- if(!isset($params["current"]))
- throw new \ste\RuntimeException("Need parameter 'current' in ste:page_prev.");
- if(!isset($params["maxpage"]))
- throw new \ste\RuntimeException("Need parameter 'maxpage' in ste:page_prev.");
-
- if($params["current"] == 1)
- return "";
-
- parse_str(parse_url($_SERVER["REQUEST_URI"], PHP_URL_QUERY), $query);
- $query["page"] = $params["current"] - 1;
- $url = $_SERVER["REDIRECT_URL"] . "?" . http_build_query($query);
- return "<a href=\"" . htmlesc($url) . "\">" . (($ste->evalbool(@$params["default"])) ? $translation["page_prev"] : $sub($ste)) . "</a>";
+ global $translation;
+ if(!isset($params["current"]))
+ throw new \ste\RuntimeException("Need parameter 'current' in ste:page_prev.");
+ if(!isset($params["maxpage"]))
+ throw new \ste\RuntimeException("Need parameter 'maxpage' in ste:page_prev.");
+
+ if($params["current"] == 1)
+ return "";
+
+ parse_str(parse_url($_SERVER["REQUEST_URI"], PHP_URL_QUERY), $query);
+ $query["page"] = $params["current"] - 1;
+ $url = $_SERVER["REDIRECT_URL"] . "?" . http_build_query($query);
+ return "<a href=\"" . htmlesc($url) . "\">" . (($ste->evalbool(@$params["default"])) ? $translation["page_prev"] : $sub($ste)) . "</a>";
});
$ste->register_tag("page_next", function($ste, $params, $sub)
{
- global $translation;
- if(!isset($params["current"]))
- throw new \ste\RuntimeException("Need parameter 'current' in ste:page_next.");
- if(!isset($params["maxpage"]))
- throw new \ste\RuntimeException("Need parameter 'maxpage' in ste:page_next.");
-
- if($params["current"] == $params["maxpage"])
- return "";
-
- parse_str(parse_url($_SERVER["REQUEST_URI"], PHP_URL_QUERY), $query);
- $query["page"] = $params["current"] + 1;
- $url = $_SERVER["REDIRECT_URL"] . "?" . http_build_query($query);
- return "<a href=\"" . htmlesc($url) . "\">" . (($ste->evalbool(@$params["default"])) ? $translation["page_next"] : $sub($ste)) . "</a>";
+ global $translation;
+ if(!isset($params["current"]))
+ throw new \ste\RuntimeException("Need parameter 'current' in ste:page_next.");
+ if(!isset($params["maxpage"]))
+ throw new \ste\RuntimeException("Need parameter 'maxpage' in ste:page_next.");
+
+ if($params["current"] == $params["maxpage"])
+ return "";
+
+ parse_str(parse_url($_SERVER["REQUEST_URI"], PHP_URL_QUERY), $query);
+ $query["page"] = $params["current"] + 1;
+ $url = $_SERVER["REDIRECT_URL"] . "?" . http_build_query($query);
+ return "<a href=\"" . htmlesc($url) . "\">" . (($ste->evalbool(@$params["default"])) ? $translation["page_next"] : $sub($ste)) . "</a>";
});
/*
* STETag: languages
* List all languages available in the current context.
- *
+ *
* Parameters:
- * var - (mandatory) The name of the variable, where the current language information should be stored at.
- *
+ * var - (mandatory) The name of the variable, where the current language information should be stored at.
+ *
* Sub-fields of var:
- * short - 2 letter code of language
- * fullname - The full name of the language
- * url - URL to the current page in this language
+ * short - 2 letter code of language
+ * fullname - The full name of the language
+ * url - URL to the current page in this language
*
* Tag Content:
- * The tag's content will be executed for every language. The current language will be written to the variable specified by the var parameter before.
- *
+ * The tag's content will be executed for every language. The current language will be written to the variable specified by the var parameter before.
+ *
* Returns:
- * All results from the tag content.
+ * All results from the tag content.
*/
$ste->register_tag("languages", function($ste, $params, $sub)
{
- global $languages, $ratatoeskr_settings, $rel_path_to_root;
-
- if(!isset($params["var"]))
- throw new Exception("Need parameter 'var' in ste:languages.");
-
- $langs = array();
- if(isset($ste->vars["current"]["article"]))
- {
- if(isset($ste->vars["current"]["article"]["__obj"]))
- $article = $ste->vars["current"]["article"]["__obj"];
- else
- {
- try
- {
- $article = Article::by_id($ste->vars["current"]["article"]["id"]);
- }
- catch(DoesNotExistError $e) {}
- }
- foreach($article->title as $lang => $_)
- $langs[] = $lang;
- }
- else
- {
-
- foreach($ratatoeskr_settings["languages"] as $lang)
- $langs[] = $lang;
- }
-
- $output = "";
- foreach($langs as $lang)
- {
- $ste->set_var_by_name($params["var"], array(
- "short" => $lang,
- "fullname" => htmlesc($languages[$lang]["language"]),
- "url" => htmlesc("$rel_path_to_root/$lang/" . implode("/", array_slice($ste->vars["current"]["url_fragments"], 1)))
- ));
- $output .= $sub($ste);
- }
- return $output;
+ global $languages, $ratatoeskr_settings, $rel_path_to_root;
+
+ if(!isset($params["var"]))
+ throw new Exception("Need parameter 'var' in ste:languages.");
+
+ $langs = array();
+ if(isset($ste->vars["current"]["article"]))
+ {
+ if(isset($ste->vars["current"]["article"]["__obj"]))
+ $article = $ste->vars["current"]["article"]["__obj"];
+ else
+ {
+ try
+ {
+ $article = Article::by_id($ste->vars["current"]["article"]["id"]);
+ }
+ catch(DoesNotExistError $e) {}
+ }
+ foreach($article->title as $lang => $_)
+ $langs[] = $lang;
+ }
+ else
+ {
+
+ foreach($ratatoeskr_settings["languages"] as $lang)
+ $langs[] = $lang;
+ }
+
+ $output = "";
+ foreach($langs as $lang)
+ {
+ $ste->set_var_by_name($params["var"], array(
+ "short" => $lang,
+ "fullname" => htmlesc($languages[$lang]["language"]),
+ "url" => htmlesc("$rel_path_to_root/$lang/" . implode("/", array_slice($ste->vars["current"]["url_fragments"], 1)))
+ ));
+ $output .= $sub($ste);
+ }
+ return $output;
});
/*
* STETag: styles_load
* Load all current styles.
- *
+ *
* Parameters:
- * mode - (optional) Either "embed" or "link". Default: link
- *
+ * mode - (optional) Either "embed" or "link". Default: link
+ *
* Returns:
- * The current styles (either linked or embedded)
+ * The current styles (either linked or embedded)
*/
$ste->register_tag("styles_load", function($ste, $params, $sub)
{
- global $rel_path_to_root;
- if(isset($params["mode"]) and (($params["mode"] == "embed") or ($params["mode"] == "link")))
- $mode = $params["mode"];
- else
- $mode = "link";
-
- if($mode == "embed")
- {
- $output = "";
- if(isset($ste->vars["current"]["__style_objs"]))
- {
- foreach($ste->vars["current"]["__style_objs"] as $style)
- $output .= "/* Style: {$style->name} */\n" . $style->code . "\n";
- }
- else
- {
- foreach($ste->vars["current"]["styles"] as $stylename)
- {
- try
- {
- $style = Style::by_name($stylename);
- $output .= "/* Style: $stylename */\n" . str_replace("%root%", $rel_path_to_root, $style->code) . "\n";
- }
- catch(DoesNotExistError $e)
- {
- $output .= "/* Warning: Failed to load style: $stylename */\n";
- }
- }
- }
- $output = "<style type=\"text/css\">\n" . htmlesc($output) . "</style>";
- }
- else
- {
- $output = "";
- foreach($ste->vars["current"]["styles"] as $stylename)
- $output .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"$rel_path_to_root/css.php?name=" . htmlesc($stylename) . "\" />\n";
- }
- return $output;
+ global $rel_path_to_root;
+ if(isset($params["mode"]) and (($params["mode"] == "embed") or ($params["mode"] == "link")))
+ $mode = $params["mode"];
+ else
+ $mode = "link";
+
+ if($mode == "embed")
+ {
+ $output = "";
+ if(isset($ste->vars["current"]["__style_objs"]))
+ {
+ foreach($ste->vars["current"]["__style_objs"] as $style)
+ $output .= "/* Style: {$style->name} */\n" . $style->code . "\n";
+ }
+ else
+ {
+ foreach($ste->vars["current"]["styles"] as $stylename)
+ {
+ try
+ {
+ $style = Style::by_name($stylename);
+ $output .= "/* Style: $stylename */\n" . str_replace("%root%", $rel_path_to_root, $style->code) . "\n";
+ }
+ catch(DoesNotExistError $e)
+ {
+ $output .= "/* Warning: Failed to load style: $stylename */\n";
+ }
+ }
+ }
+ $output = "<style type=\"text/css\">\n" . htmlesc($output) . "</style>";
+ }
+ else
+ {
+ $output = "";
+ foreach($ste->vars["current"]["styles"] as $stylename)
+ $output .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"$rel_path_to_root/css.php?name=" . htmlesc($stylename) . "\" />\n";
+ }
+ return $output;
});
/*
* STETag: title
* Generate a HTML title tag for your site.
- *
+ *
* Tag Content:
- * The name of your site.
- *
+ * The name of your site.
+ *
* Returns:
- * A HTML title tag that describes the current (sub)page.
+ * A HTML title tag that describes the current (sub)page.
*/
$ste->register_tag("title", function($ste, $params, $sub)
{
- $pagetitle = $sub($ste);
- if(isset($ste->vars["current"]["article"]))
- return "<title>" . htmlesc($ste->vars["current"]["article"]["title"]) . " – $pagetitle" . "</title>";
- if(isset($ste->vars["current"]["section"]))
- return "<title>" . htmlesc($ste->vars["current"]["section"]["title"]) . " – $pagetitle" . "</title>";
- return "<title>$pagetitle</title>";
+ $pagetitle = $sub($ste);
+ if(isset($ste->vars["current"]["article"]))
+ return "<title>" . htmlesc($ste->vars["current"]["article"]["title"]) . " – $pagetitle" . "</title>";
+ if(isset($ste->vars["current"]["section"]))
+ return "<title>" . htmlesc($ste->vars["current"]["section"]["title"]) . " – $pagetitle" . "</title>";
+ return "<title>$pagetitle</title>";
});
function make_on_anything_tag($field)
{
- return function($ste, $params, $sub) use ($field)
- {
- if($ste->evalbool(@$ste->vars["current"][$field]))
- {
- if(!empty($params["var"]))
- $ste->set_var_by_name($params["var"], $ste->vars["current"][$field]);
- return $sub($ste);
- }
- };
+ return function($ste, $params, $sub) use ($field)
+ {
+ if($ste->evalbool(@$ste->vars["current"][$field]))
+ {
+ if(!empty($params["var"]))
+ $ste->set_var_by_name($params["var"], $ste->vars["current"][$field]);
+ return $sub($ste);
+ }
+ };
}
/*
@@ -679,10 +679,10 @@ function make_on_anything_tag($field)
* Execute tag content, if currently an article is requested.
*
* Parameters:
- * var - (optional) If set, the article will be stored in the variable with that name (see <article_transform_ste> for sub-fields).
+ * var - (optional) If set, the article will be stored in the variable with that name (see <article_transform_ste> for sub-fields).
*
* Returns:
- * The executed tag content, if an article was requested.
+ * The executed tag content, if an article was requested.
*/
$ste->register_tag("on_article", make_on_anything_tag("article"));
@@ -691,10 +691,10 @@ $ste->register_tag("on_article", make_on_anything_tag("article"));
* Execute tag content, if currently a tag is requested.
*
* Parameters:
- * var - (optional) If set, the tag will be stored in the variable with that name (see <tag_transform_ste> for sub-fields).
+ * var - (optional) If set, the tag will be stored in the variable with that name (see <tag_transform_ste> for sub-fields).
*
* Returns:
- * The executed tag content, if a tag was requested.
+ * The executed tag content, if a tag was requested.
*/
$ste->register_tag("on_tag", make_on_anything_tag("tag"));
@@ -703,30 +703,30 @@ $ste->register_tag("on_tag", make_on_anything_tag("tag"));
* Execute tag content, if currently a section is requested.
*
* Parameters:
- * var - (optional) If set, the section will be stored in the variable with that name (see <section_transform_ste> for sub-fields).
+ * var - (optional) If set, the section will be stored in the variable with that name (see <section_transform_ste> for sub-fields).
*
* Returns:
- * The executed tag content, if a section was requested.
+ * The executed tag content, if a section was requested.
*/
$ste->register_tag("on_section", make_on_anything_tag("section"));
/*
* STEVar: $current
* Holds information about the current page in the frontend (the part of the webpage, the visitor sees).
- *
+ *
* $current has these fields:
- * * article - Only set if a single article is shown. Holds information about an article. (sub-fields are described at <article_transform_ste>).
- * * section - Only set if a whole section is shown. Holds information about an section. (sub-fields are described at <section_transform_ste>).
- * * tag - Only set if all articles with the same tag should be shown (pseudo section _tags). Holds information about a tag. (sub-fields are described at <tag_transform_ste>).
- * * page - Which subpage is shown? Useful with <page_prev>, <page_next> and the page parameter of <articles_get>. Default: 1
- * * commented - True, if the visitor has successfully written a comment.
- * * comment_fail - If the user tried to comment, but the system rejected the comment, this will be set and will contain the error message.
- * * comment_prev - If the user wanted to preview the article, this will be set and contain the HTML code of the comment.
- * * styles - The styles, that should be loaded. You can also just use <styles_load>.
- * * url_fragments - Array of URL parts. Mainly used internally, so you *really* should not modify this one...
- * * oldcomment - The data of the previously sent formular (subfields: name, mail, text). Only set inside the <comment_form> tag.
- *
- * Plugins might insert their own $current fields.
+ * * article - Only set if a single article is shown. Holds information about an article. (sub-fields are described at <article_transform_ste>).
+ * * section - Only set if a whole section is shown. Holds information about an section. (sub-fields are described at <section_transform_ste>).
+ * * tag - Only set if all articles with the same tag should be shown (pseudo section _tags). Holds information about a tag. (sub-fields are described at <tag_transform_ste>).
+ * * page - Which subpage is shown? Useful with <page_prev>, <page_next> and the page parameter of <articles_get>. Default: 1
+ * * commented - True, if the visitor has successfully written a comment.
+ * * comment_fail - If the user tried to comment, but the system rejected the comment, this will be set and will contain the error message.
+ * * comment_prev - If the user wanted to preview the article, this will be set and contain the HTML code of the comment.
+ * * styles - The styles, that should be loaded. You can also just use <styles_load>.
+ * * url_fragments - Array of URL parts. Mainly used internally, so you *really* should not modify this one...
+ * * oldcomment - The data of the previously sent formular (subfields: name, mail, text). Only set inside the <comment_form> tag.
+ *
+ * Plugins might insert their own $current fields.
*/
/*
@@ -735,23 +735,23 @@ $ste->register_tag("on_section", make_on_anything_tag("section"));
*/
$comment_validators = array(
- function() /* Basic validator. Checks, if all mandatory fields are set and if the form token is okay. Also provides some stupid spambot protection... */
- {
- global $translation;
- if(empty($_POST["author_name"]))
- throw new CommentRejected($translation["author_name_missing"]);
- if(empty($_POST["author_mail"]))
- throw new CommentRejected($translation["author_email_missing"]);
- if(empty($_POST["comment_text"]))
- throw new CommentRejected($translation["comment_text_missing"]);
- if(!isset($_POST["comment_token"]))
- throw new CommentRejected($translation["comment_form_invalid"]);
- if(!isset($_SESSION["ratatoeskr_comment_tokens"][$_POST["comment_token"]]))
- throw new CommentRejected($translation["comment_form_invalid"]);
- if(time() - $_SESSION["ratatoeskr_comment_tokens"][$_POST["comment_token"]] < 10) /* Comment filled in in under 10 seconds? Most likely a spambot. */
- throw new CommentRejected($translation["comment_too_fast"]);
- unset($_SESSION["ratatoeskr_comment_tokens"][$_POST["comment_token"]]);
- }
+ function() /* Basic validator. Checks, if all mandatory fields are set and if the form token is okay. Also provides some stupid spambot protection... */
+ {
+ global $translation;
+ if(empty($_POST["author_name"]))
+ throw new CommentRejected($translation["author_name_missing"]);
+ if(empty($_POST["author_mail"]))
+ throw new CommentRejected($translation["author_email_missing"]);
+ if(empty($_POST["comment_text"]))
+ throw new CommentRejected($translation["comment_text_missing"]);
+ if(!isset($_POST["comment_token"]))
+ throw new CommentRejected($translation["comment_form_invalid"]);
+ if(!isset($_SESSION["ratatoeskr_comment_tokens"][$_POST["comment_token"]]))
+ throw new CommentRejected($translation["comment_form_invalid"]);
+ if(time() - $_SESSION["ratatoeskr_comment_tokens"][$_POST["comment_token"]] < 10) /* Comment filled in in under 10 seconds? Most likely a spambot. */
+ throw new CommentRejected($translation["comment_too_fast"]);
+ unset($_SESSION["ratatoeskr_comment_tokens"][$_POST["comment_token"]]);
+ }
);
$on_comment_store = array();
@@ -761,123 +761,123 @@ $on_comment_store = array();
*/
function frontend_url_handler(&$data, $url_now, &$url_next)
{
- global $ste, $ratatoeskr_settings, $languages, $metasections, $comment_validators, $on_comment_store;
- $path = array_merge(array($url_now), $url_next);
- $url_next = array();
-
- /* If no language or an invalid language was given, fix it. */
- if((count($path) == 0) or (!isset($languages[$path[0]])))
- {
- if(count($path > 0))
- array_shift($path);
- array_unshift($path, $ratatoeskr_settings["default_language"]);
- }
-
- $ste->vars["current"]["url_fragments"] = $path;
-
- $lang = array_shift($path);
- $ste->vars["language"] = $lang;
- load_language($languages[$lang]["translation_exist"] ? $lang : "en"); /* English is always available */
-
- if(count($path) != 0)
- $section_name = array_shift($path);
- else
- $section_name = NULL;
-
- if($section_name == "_tags")
- {
- try
- {
- $tag = Tag::by_name(array_shift($path));
- }
- catch(DoesNotExistError $e)
- {
- throw new NotFoundError();
- }
- $ste->vars["current"]["tag"] = tag_transform_ste($tag, $lang);
- }
- else
- {
- if($section_name === NULL)
- $section = Section::by_id($ratatoeskr_settings["default_section"]);
- else
- {
- try
- {
- $section = Section::by_name($section_name);
- }
- catch(DoesNotExistError $e)
- {
- throw new NotFoundError();
- }
- }
-
- if(count($path)== 0)
- $ste->vars["current"]["section"] = section_transform_ste($section, $lang);
- else
- {
- try
- {
- $article = Article::by_urlname(array_shift($path));
- }
- catch(DoesNotExistError $e)
- {
- throw new NotFoundError();
- }
- $ste->vars["current"]["article"] = article_transform_ste($article, $lang);
-
- if(isset($_GET["comment"]))
- {
- if(isset($_POST["preview_comment"]))
- $ste->vars["current"]["comment_prev"] = Comment::htmlize_comment_text($_POST["comment_text"]);
- else if(isset($_POST["post_comment"]))
- {
- $rejected = False;
- try
- {
- foreach($comment_validators as $validator)
- call_user_func($validator);
- }
- catch(CommentRejected $e)
- {
- $ste->vars["current"]["comment_fail"] = htmlesc($e->getMessage());
- $rejected = True;
- }
- if(!$rejected)
- {
- $comment = Comment::create($article, $lang);
- $comment->author_name = $_POST["author_name"];
- $comment->author_mail = $_POST["author_mail"];
- $comment->text = $_POST["comment_text"];
- $comment->save();
- $ste->vars["current"]["commented"] = "Yes";
- foreach($on_comment_store as $ocs_fx)
- call_user_func($ocs_fx, $comment);
- }
- }
- }
- }
- }
-
- $ste->vars["current"]["page"] = (isset($_GET["page"]) and is_numeric($_GET["page"])) ? $_GET["page"] : 1;
-
- if(!isset($section))
- $section = Section::by_id($ratatoeskr_settings["default_section"]);
-
- foreach($section->get_styles() as $style)
- {
- $ste->vars["current"]["styles"][] = $style->name;
- $ste->vars["current"]["__style_objs"][] = $style;
- }
- echo $ste->exectemplate("/usertemplates/" . $section->template);
+ global $ste, $ratatoeskr_settings, $languages, $metasections, $comment_validators, $on_comment_store;
+ $path = array_merge(array($url_now), $url_next);
+ $url_next = array();
+
+ /* If no language or an invalid language was given, fix it. */
+ if((count($path) == 0) or (!isset($languages[$path[0]])))
+ {
+ if(count($path > 0))
+ array_shift($path);
+ array_unshift($path, $ratatoeskr_settings["default_language"]);
+ }
+
+ $ste->vars["current"]["url_fragments"] = $path;
+
+ $lang = array_shift($path);
+ $ste->vars["language"] = $lang;
+ load_language($languages[$lang]["translation_exist"] ? $lang : "en"); /* English is always available */
+
+ if(count($path) != 0)
+ $section_name = array_shift($path);
+ else
+ $section_name = NULL;
+
+ if($section_name == "_tags")
+ {
+ try
+ {
+ $tag = Tag::by_name(array_shift($path));
+ }
+ catch(DoesNotExistError $e)
+ {
+ throw new NotFoundError();
+ }
+ $ste->vars["current"]["tag"] = tag_transform_ste($tag, $lang);
+ }
+ else
+ {
+ if($section_name === NULL)
+ $section = Section::by_id($ratatoeskr_settings["default_section"]);
+ else
+ {
+ try
+ {
+ $section = Section::by_name($section_name);
+ }
+ catch(DoesNotExistError $e)
+ {
+ throw new NotFoundError();
+ }
+ }
+
+ if(count($path)== 0)
+ $ste->vars["current"]["section"] = section_transform_ste($section, $lang);
+ else
+ {
+ try
+ {
+ $article = Article::by_urlname(array_shift($path));
+ }
+ catch(DoesNotExistError $e)
+ {
+ throw new NotFoundError();
+ }
+ $ste->vars["current"]["article"] = article_transform_ste($article, $lang);
+
+ if(isset($_GET["comment"]))
+ {
+ if(isset($_POST["preview_comment"]))
+ $ste->vars["current"]["comment_prev"] = Comment::htmlize_comment_text($_POST["comment_text"]);
+ else if(isset($_POST["post_comment"]))
+ {
+ $rejected = False;
+ try
+ {
+ foreach($comment_validators as $validator)
+ call_user_func($validator);
+ }
+ catch(CommentRejected $e)
+ {
+ $ste->vars["current"]["comment_fail"] = htmlesc($e->getMessage());
+ $rejected = True;
+ }
+ if(!$rejected)
+ {
+ $comment = Comment::create($article, $lang);
+ $comment->author_name = $_POST["author_name"];
+ $comment->author_mail = $_POST["author_mail"];
+ $comment->text = $_POST["comment_text"];
+ $comment->save();
+ $ste->vars["current"]["commented"] = "Yes";
+ foreach($on_comment_store as $ocs_fx)
+ call_user_func($ocs_fx, $comment);
+ }
+ }
+ }
+ }
+ }
+
+ $ste->vars["current"]["page"] = (isset($_GET["page"]) and is_numeric($_GET["page"])) ? $_GET["page"] : 1;
+
+ if(!isset($section))
+ $section = Section::by_id($ratatoeskr_settings["default_section"]);
+
+ foreach($section->get_styles() as $style)
+ {
+ $ste->vars["current"]["styles"][] = $style->name;
+ $ste->vars["current"]["__style_objs"][] = $style;
+ }
+ echo $ste->exectemplate("/usertemplates/" . $section->template);
}
/*
* Class: CommentRejected
* An Exeption a comment validator can throw, if the validation failed.
- *
+ *
* See Also:
- * <register_comment_validator>
+ * <register_comment_validator>
*/
class CommentRejected extends Exception {}