Sequenzia/app/models/Comment.php
2013-11-19 12:31:38 -05:00

143 lines
4.2 KiB
PHP
Executable File

<?php
// require 'translate'
# FIXME: god, why I need this. Anyway, the required helper functions should be
# moved to library instead. It's not really "view" helper anymore.
// include ApplicationHelper
class Comment extends Rails\ActiveRecord\Base
{
static public function generate_sql(array $params)
{
$query = self::none();
if (isset($params['post_id'])) {
$query->where('post_id = ?', $params['post_id']);
// unset($params['post_id']);
}
return $query;
// return array_merge($params, $query);
}
static public function updated(User $user)
{
if(!$user->is_anonymous())
$query = Comment::where("user_id <> ?", $user->id);
else
$query = Comment::none();
if (!$newest_comment = $query->order("id desc")->limit(1)->select("created_at")->first())
return false;
!$user->last_comment_read_at && $user->last_comment_read_at = '0000-00-00 00:00:00';
return $newest_comment->created_at > $user->last_comment_read_at;
}
public function update_last_commented_at()
{
# return if self.do_not_bump_post
$comment_count = self::connection()->selectValue("SELECT COUNT(*) FROM comments WHERE post_id = ?", $this->post_id);
if ($comment_count <= CONFIG()->comment_threshold) {
self::connection()->executeSql(["UPDATE posts SET last_commented_at = (SELECT created_at FROM comments WHERE post_id = :post_id ORDER BY created_at DESC LIMIT 1) WHERE posts.id = :post_id", 'post_id' => $this->post_id]);
}
}
public function get_formatted_body()
{
return $this->format_inlines($this->format_text($this->body, ['mode' => 'comment']), $this->id);
}
public function update_fragments()
{
return;
}
# Get the comment translated into the requested language. Languages in source_langs
# will be left untranslated.
public function get_translated_formatted_body_uncached($target_lang, $source_langs)
{
return $this->get_formatted_body();
// return $this->get_formatted_body, array();
}
public function get_translated_formatted_body($target_lang, array $source_langs)
{
$source_lang_list = implode(',', $source_langs);
$key = "comment:" . $this->id . ":" . strtotime($this->updated_at) . ":" . $target_lang . ":" . $source_lang_list;
return Rails::cache()->fetch($key, function() use ($target_lang, $source_langs) {
return $this->get_translated_formatted_body_uncached($target_lang, $source_langs);
});
}
public function author()
{
return $this->user->name;
}
public function pretty_author()
{
return str_replace("_", " ", $this->author());
}
public function author2()
{
return $this->user->name;
}
public function pretty_author2()
{
return str_replace("_", " ", $this->author2());
}
public function api_attributes()
{
return array(
'id' => $this->id,
'created_at' => $this->created_at,
'post_id' => $this->post_id,
'creator' => $this->author(),
'creator_id' => $this->user_id,
'body' => $this->body
);
}
public function toXml(array $options = array())
{
return parent::toXml(array_merge($options, ['attributes' => $this->api_attributes()]));
}
public function asJson($args = array())
{
return $this->api_attributes();
}
protected function validations()
{
return array(
'body' => array(
'format' => array('with' => '/\S/', 'message' => 'has no content')
)
);
}
protected function associations()
{
return array(
'belongs_to' => array(
'post',
'user'
)
);
}
protected function callbacks()
{
return array(
'after_save' => array('update_last_commented_at', 'update_fragments'),
'after_destroy' => array('update_last_commented_at')
);
}
}