aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Chabowski <kevin@kch42.de>2011-12-27 13:35:09 +0100
committerKevin Chabowski <kevin@kch42.de>2011-12-27 13:35:09 +0100
commita2ee929485e2a55492cbc161b4270038099b26f8 (patch)
tree85da3c19a6dba358f95a7e13b8bcbc77eab435fe
parentcf2a4a79eb8344ab1c3303d4bdbb80c91d94925b (diff)
downloadratatoeskr-cms-a2ee929485e2a55492cbc161b4270038099b26f8.tar.gz
ratatoeskr-cms-a2ee929485e2a55492cbc161b4270038099b26f8.tar.bz2
ratatoeskr-cms-a2ee929485e2a55492cbc161b4270038099b26f8.zip
Article now has get/set_tags() and get/set_section()
-rw-r--r--ratatoeskr/backend.php23
-rw-r--r--ratatoeskr/frontend.php13
-rw-r--r--ratatoeskr/sys/models.php102
3 files changed, 94 insertions, 44 deletions
diff --git a/ratatoeskr/backend.php b/ratatoeskr/backend.php
index 57d87f9..365fe7a 100644
--- a/ratatoeskr/backend.php
+++ b/ratatoeskr/backend.php
@@ -236,11 +236,11 @@ $backend_subactions = url_action_subactions(array(
$article->urlname = $inputs["urlname"];
$article->status = $inputs["article_status"];
$article->timestamp = $inputs["date"];
- $article->section = $inputs["section"];
- $article->tags = maketags($inputs["tags"], $editlang);
$article->title [$editlang] = new Translation($inputs["title"], "" );
$article->text [$editlang] = new Translation($inputs["content"], $inputs["content_txtproc"]);
$article->excerpt[$editlang] = new Translation($inputs["excerpt"], $inputs["excerpt_txtproc"]);
+ $article->set_tags(maketags($inputs["tags"], $editlang));
+ $article->set_section($inputs["section"]);
}
if(empty($article))
@@ -316,7 +316,7 @@ $backend_subactions = url_action_subactions(array(
$inputs["excerpt_txtproc"] = $translation_obj->texttype;
}
if(!isset($inputs["tags"]))
- $inputs["tags"] = array_map(function($tag) use ($editlang) { return $tag->name; }, $article->tags);
+ $inputs["tags"] = array_map(function($tag) use ($editlang) { return $tag->name; }, $article->get_tags());
$ste->vars["morelangs"] = array();
$ste->vars["pagetitle"] = $article->title[$editlang]->text;
foreach($article->title as $lang => $_)
@@ -330,7 +330,7 @@ $backend_subactions = url_action_subactions(array(
if(isset($inputs["tags"]))
$ste->vars["tags"] = implode(", ", $inputs["tags"]);
if(isset($inputs["article_section"]))
- $ste->section["article_section"] = $inputs["article_section"]->name;
+ $ste->vars["article_section"] = $inputs["article_section"]->name;
$ste->vars["editlang"] = $editlang;
foreach(array(
"urlname" => "urlname",
@@ -542,14 +542,14 @@ $backend_subactions = url_action_subactions(array(
if(!empty($_GET["filter_tag"]))
{
$searchfor = $_GET["filter_tag"];
- $articles = array_filter($articles, function($a) use ($searchfor) { foreach($a->tags as $t) { if($t->name==$searchfor) return True; } return False; });
+ $articles = array_filter($articles, function($a) use ($searchfor) { foreach($a->get_tags() as $t) { if($t->name==$searchfor) return True; } return False; });
$filterquery[] = "filter_tag=" . urlencode($searchfor);
$ste->vars["filter_tag"] = $searchfor;
}
if(!empty($_GET["filter_section"]))
{
$searchfor = $_GET["filter_section"];
- $articles = array_filter($articles, function($a) use ($searchfor) { return $a->section->name == $searchfor; });
+ $articles = array_filter($articles, function($a) use ($searchfor) { return $a->get_section()->name == $searchfor; });
$filterquery[] = "filter_section=" . urlencode($searchfor);
$ste->vars["filter_section"] = $searchfor;
}
@@ -570,7 +570,7 @@ $backend_subactions = url_action_subactions(array(
$ste->vars["sortquery"] = "sort_asc=section";
$ste->vars["sort_asc_section"] = True;
$ste->vars["sorting"] = array("dir" => "asc", "by" => "section");
- usort($articles, function($a, $b) { return strcmp($a->section->name, $b->section->name); });
+ usort($articles, function($a, $b) { return strcmp($a->get_section()->name, $b->get_section()->name); });
break;
case "urlname":
$ste->vars["sortquery"] = "sort_asc=urlname";
@@ -595,7 +595,7 @@ $backend_subactions = url_action_subactions(array(
$ste->vars["sortquery"] = "sort_desc=section";
$ste->vars["sort_desc_section"] = True;
$ste->vars["sorting"] = array("dir" => "desc", "by" => "section");
- usort($articles, function($a, $b) { return strcmp($b->section->name, $a->section->name); });
+ usort($articles, function($a, $b) { return strcmp($b->get_section()->name, $a->get_section()->name); });
break;
case "urlname":
$ste->vars["sortquery"] = "sort_desc=urlname";
@@ -622,12 +622,13 @@ $backend_subactions = url_action_subactions(array(
foreach($article->title as $lang => $_)
$avail_langs[] = $lang;
sort($avail_langs);
+ $a_section = $article->get_section();
return array(
"urlname" => $article->urlname,
"languages" => $avail_langs,
"date" => $article->timestamp,
- "tags" => array_map(function($tag) { return $tag->name; }, $article->tags),
- "section" => array("id" => $article->section->get_id(), "name" => $article->section->name)
+ "tags" => array_map(function($tag) { return $tag->name; }, $article->get_tags()),
+ "section" => array("id" => $a_section->get_id(), "name" => $a_section->name)
);
}, $articles);
@@ -1119,7 +1120,7 @@ $backend_subactions = url_action_subactions(array(
$default_section = Section::by_id($ratatoeskr_settings["default_section"]);
foreach($section->get_articles() as $article)
{
- $article->section = $default_section;
+ $article->set_section($default_section);
$article->save();
}
$section->delete();
diff --git a/ratatoeskr/frontend.php b/ratatoeskr/frontend.php
index 92197f5..142915c 100644
--- a/ratatoeskr/frontend.php
+++ b/ratatoeskr/frontend.php
@@ -89,21 +89,22 @@ 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/{$article->section->name}/{$article->urlname}";
+ $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/{$article->section->name}/{$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($article->section, $lang),
+ "section" => section_transform_ste($a_section, $lang),
"timestamp" => $article->timestamp,
- "tags" => array_map(function($tag) use ($lang) { return tag_transform_ste($tag, $lang); }, $article->tags),
+ "tags" => array_map(function($tag) use ($lang) { return tag_transform_ste($tag, $lang); }, $article->get_tags()),
"languages" => $languages,
"comments_allowed" => $article->comments_allowed
);
@@ -181,12 +182,14 @@ $ste->register_tag("articles_get", function($ste, $params, $sub)
$result = Article::by_multi($params);
+ /*
+ FIXME:
if(isset($params["tag"]))
{
if(!isset($result))
$result = Article::all();
$result = array_filter($result, function($article) use ($params) { return isset($article->tags[$params["tag"]]); });
- }
+ }*/
/* Now filter out the articles, where the current language does not exist */
$result = array_filter($result, function($article) use ($lang) { return isset($article->title[$lang]); });
diff --git a/ratatoeskr/sys/models.php b/ratatoeskr/sys/models.php
index 78057c5..f24b71c 100644
--- a/ratatoeskr/sys/models.php
+++ b/ratatoeskr/sys/models.php
@@ -2218,6 +2218,9 @@ class Article extends BySQLRowEnabled
{
private $id;
+ private $section_id;
+ private $section_obj;
+
/*
* Variables: Public class variables
*
@@ -2229,10 +2232,8 @@ class Article extends BySQLRowEnabled
* $custom - Custom fields, is an array
* $article_image - The article <Image>. If none: NULL
* $status - One of the ARTICLE_STATUS_* constants
- * $section - <Section>
* $timestamp - Timestamp
* $allow_comments - Are comments allowed?
- * $tags - Arrray of <Tag> objects
*/
public $urlname;
public $title;
@@ -2242,14 +2243,12 @@ class Article extends BySQLRowEnabled
public $custom;
public $article_image;
public $status;
- public $section;
public $timestamp;
public $allow_comments;
- public $tags;
protected function __construct()
{
- $this->tags = array();
+ $this->section_obj = NULL;
}
protected function populate_by_sqlrow($sqlrow)
@@ -2263,13 +2262,9 @@ class Article extends BySQLRowEnabled
$this->custom = unserialize(base64_decode($sqlrow["custom"]));
$this->article_image = $sqlrow["article_image"] == 0 ? NULL : Image::by_id($sqlrow["article_image"]);
$this->status = $sqlrow["status"];
- $this->section = Section::by_id($sqlrow["section"]);
+ $this->section_id = $sqlrow["section"];
$this->timestamp = $sqlrow["timestamp"];
$this->allow_comments = $sqlrow["allow_comments"] == 1;
-
- $result = qdb("SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`title` AS `title` FROM `PREFIX_tags` `a` INNER JOIN `PREFIX_article_tag_relations` `b` ON `a`.`id` = `b`.`tag` WHERE `b`.`article` = %d", $this->id);
- while($sqlrow = mysql_fetch_assoc($result))
- $this->tags[] = Tag::by_sqlrow($sqlrow);
}
/*
@@ -2306,7 +2301,7 @@ class Article extends BySQLRowEnabled
$obj->custom = array();
$obj->article_image = NULL;
$obj->status = ARTICLE_STATUS_HIDDEN;
- $obj->section = Section::by_id($ratatoeskr_settings["default_section"]);
+ $obj->section_id = $ratatoeskr_settings["default_section"];
$obj->timestamp = time();
$obj->allow_comments = $ratatoeskr_settings["allow_comments_default"];
@@ -2316,7 +2311,7 @@ class Article extends BySQLRowEnabled
$obj->excerpt->get_id(),
base64_encode(serialize($obj->custom)),
$obj->status,
- $obj->section->get_id(),
+ $obj->section_id,
$obj->timestamp,
$obj->allow_comments ? 1 : 0);
$obj->id = mysql_insert_id();
@@ -2445,19 +2440,31 @@ class Article extends BySQLRowEnabled
}
/*
- * Function: save
+ * Function: get_tags
+ * Get all Tags of this Article.
+ *
+ * Returns:
+ * Array of <Tag> objects.
*/
- public function save()
+ public function get_tags()
{
- $result = qdb("SELECT COUNT(*) AS `n` FROM `PREFIX_articles` WHERE `urlname` = '%s' AND `id` != %d", $this->urlname, $this->id);
- $sqlrow = mysql_fetch_assoc($result);
- if($sqlrow["n"] > 0)
- throw new AlreadyExistsError();
-
- $this->title->save();
- $this->text->save();
- $this->excerpt->save();
- foreach($this->tags as $tag)
+ $rv = array();
+ $result = qdb("SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`title` AS `title` FROM `PREFIX_tags` `a` INNER JOIN `PREFIX_article_tag_relations` `b` ON `a`.`id` = `b`.`tag` WHERE `b`.`article` = %d", $this->id);
+ while($sqlrow = mysql_fetch_assoc($result))
+ $rv[] = Tag::by_sqlrow($sqlrow);
+ return $rv;
+ }
+
+ /*
+ * Function: set_tags
+ * Set the Tags that should be associated with this Article.
+ *
+ * Parameters:
+ * $tags - Array of <Tag> objects.
+ */
+ public function set_tags($tags)
+ {
+ foreach($tags as $tag)
$tag->save();
qdb("DELETE FROM `PREFIX_article_tag_relations` WHERE `article`= %d", $this->id);
@@ -2467,11 +2474,50 @@ class Article extends BySQLRowEnabled
if(!empty($this->tags))
qdb(
"INSERT INTO `PREFIX_article_tag_relations` (`article`, `tag`) VALUES " .
- implode(",",
- array_map(function($tag) use ($articleid){ return qdb_fmt("(%d, %d)", $articleid, $tag->get_id()); },
- $this->tags)
- )
+ implode(",", array_map(function($tag) use ($articleid){ return qdb_fmt("(%d, %d)", $articleid, $tag->get_id()); }, $tags))
);
+ }
+
+ /*
+ * Function: get_section
+ * Get the section of this article.
+ *
+ * Returns:
+ * A <Section> object.
+ */
+ public function get_section()
+ {
+ if($this->section_obj === NULL)
+ $this->section_obj = Section::by_id($this->section_id);
+ return $this->section_obj;
+ }
+
+ /*
+ * Function: set_section
+ * Set the section of this article.
+ *
+ * Parameters:
+ * $section - A <Section> object.
+ */
+ public function set_section($section)
+ {
+ $this->section_id = $section->get_id();
+ $this->section_obj = $section;
+ }
+
+ /*
+ * Function: save
+ */
+ public function save()
+ {
+ $result = qdb("SELECT COUNT(*) AS `n` FROM `PREFIX_articles` WHERE `urlname` = '%s' AND `id` != %d", $this->urlname, $this->id);
+ $sqlrow = mysql_fetch_assoc($result);
+ if($sqlrow["n"] > 0)
+ throw new AlreadyExistsError();
+
+ $this->title->save();
+ $this->text->save();
+ $this->excerpt->save();
qdb("UPDATE `PREFIX_articles` SET `urlname` = '%s', `title` = %d, `text` = %d, `excerpt` = %d, `meta` = '%s', `custom` = '%s', `article_image` = %d, `status` = %d, `section` = %d, `timestamp` = %d, `allow_comments` = %d WHERE `id` = %d",
$this->urlname,
@@ -2482,7 +2528,7 @@ class Article extends BySQLRowEnabled
base64_encode(serialize($this->custom)),
$this->article_image === NULL ? 0 : $this->article_image->get_id(),
$this->status,
- $this->section->get_id(),
+ $this->section_id,
$this->timestamp,
$this->allow_comments ? 1 : 0,
$this->id