82 lines
No EOL
1.8 KiB
PHP
82 lines
No EOL
1.8 KiB
PHP
<?php
|
|
|
|
class Mapper_BlogPost extends Fiktiv_Model_Mapper_DbTableAbstract
|
|
{
|
|
|
|
protected $_mapperUser = null;
|
|
|
|
public static function generatePermalink(BlogPost $post)
|
|
{
|
|
$chars = array(
|
|
' ' => '-',
|
|
);
|
|
|
|
$permalink = $post->getTitle();
|
|
|
|
foreach ($chars as $ch => $rep) {
|
|
$permalink = str_replace($ch, $rep, $permalink);
|
|
}
|
|
|
|
return strtolower($permalink);
|
|
}
|
|
|
|
public function __construct($dbtable = null) {
|
|
parent::__construct($dbtable);
|
|
|
|
$this->_mapperUser = new Mapper_User(new Table_User());
|
|
}
|
|
|
|
protected function _createBlogPost($obj)
|
|
{
|
|
$blogPost = new BlogPost();
|
|
|
|
if ($obj instanceof Zend_Db_Table_Row) {
|
|
|
|
$blogPost->setId($obj->id);
|
|
$blogPost->setTitle($obj->title);
|
|
$blogPost->setContent($obj->content);
|
|
$blogPost->setPubDate(new Fiktiv_Date($obj->pubDate));
|
|
$blogPost->setAuthor($this->_mapperUser->findById($obj->userId));
|
|
|
|
} else {
|
|
$blogPost = null;
|
|
}
|
|
|
|
return $blogPost;
|
|
}
|
|
|
|
|
|
public function findById($id)
|
|
{
|
|
if (is_numeric($id)) {
|
|
return $this->_createBlogPost($this->_dbTable->find($id)->current());
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function findAllPostByAuthor($user)
|
|
{
|
|
if ($user instanceof User) {
|
|
return $this->_createBlogPost($this->_dbTable->findByUser($user->getId()));
|
|
}
|
|
}
|
|
|
|
public function findAll($limit = null)
|
|
{
|
|
|
|
if (!is_numeric($limit))
|
|
throw new Fiktiv_Exception('limit must be numeric');
|
|
|
|
$rows = $this->_dbTable->fetchAll(null, 'pubDate DESC', $limit);
|
|
|
|
$posts = array();
|
|
|
|
foreach ($rows as $row) {
|
|
$posts[] = $this->_createBlogPost($row);
|
|
}
|
|
|
|
return $posts;
|
|
}
|
|
|
|
} |