1
0
www.mikescher.com/demos/blog/protected/models/Comment.php

148 lines
3.1 KiB
PHP

<?php
class Comment extends CActiveRecord
{
/**
* The followings are the available columns in table 'tbl_comment':
* @var integer $id
* @var string $content
* @var integer $status
* @var integer $create_time
* @var string $author
* @var string $email
* @var string $url
* @var integer $post_id
*/
const STATUS_PENDING=1;
const STATUS_APPROVED=2;
/**
* Returns the static model of the specified AR class.
* @return CActiveRecord the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
/**
* @return string the associated database table name
*/
public function tableName()
{
return '{{comment}}';
}
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('content, author, email', 'required'),
array('author, email, url', 'length', 'max'=>128),
array('email','email'),
array('url','url'),
);
}
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'post' => array(self::BELONGS_TO, 'Post', 'post_id'),
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'id' => 'Id',
'content' => 'Comment',
'status' => 'Status',
'create_time' => 'Create Time',
'author' => 'Name',
'email' => 'Email',
'url' => 'Website',
'post_id' => 'Post',
);
}
/**
* Approves a comment.
*/
public function approve()
{
$this->status=Comment::STATUS_APPROVED;
$this->update(array('status'));
}
/**
* @param Post the post that this comment belongs to. If null, the method
* will query for the post.
* @return string the permalink URL for this comment
*/
public function getUrl($post=null)
{
if($post===null)
$post=$this->post;
return $post->url.'#c'.$this->id;
}
/**
* @return string the hyperlink display for the current comment's author
*/
public function getAuthorLink()
{
if(!empty($this->url))
return CHtml::link(CHtml::encode($this->author),$this->url);
else
return CHtml::encode($this->author);
}
/**
* @return integer the number of comments that are pending approval
*/
public function getPendingCommentCount()
{
return $this->count('status='.self::STATUS_PENDING);
}
/**
* @param integer the maximum number of comments that should be returned
* @return array the most recently added comments
*/
public function findRecentComments($limit=10)
{
return $this->with('post')->findAll(array(
'condition'=>'t.status='.self::STATUS_APPROVED,
'order'=>'t.create_time DESC',
'limit'=>$limit,
));
}
/**
* This is invoked before the record is saved.
* @return boolean whether the record should be saved.
*/
protected function beforeSave()
{
if(parent::beforeSave())
{
if($this->isNewRecord)
$this->create_time=time();
return true;
}
else
return false;
}
}