public $__table = 'attention'; // table name
public $notice_id; // int(4) primary_key not_null
public $profile_id; // int(4) primary_key not_null
- public $reason; // varchar(255)
+ public $reason; // varchar(191) not 255 because utf8mb4 takes more space
public $created; // datetime() not_null
public $modified; // timestamp not_null default_CURRENT_TIMESTAMP
'fields' => array(
'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice_id to give attention'),
'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'profile_id for feed receiver'),
- 'reason' => array('type' => 'varchar', 'length' => 255, 'description' => 'Optional reason why this was brought to the attention of profile_id'),
+ 'reason' => array('type' => 'varchar', 'length' => 191, 'description' => 'Optional reason why this was brought to the attention of profile_id'),
'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
),
);
}
- public static function saveNew(Notice $notice, Profile $profile, $reason=null)
+ public static function saveNew(Notice $notice, Profile $target, $reason=null)
{
- $att = new Attention();
+ try {
+ $att = Attention::getByKeys(['notice_id'=>$notice->getID(), 'profile_id'=>$target->getID()]);
+ throw new AlreadyFulfilledException('Attention already exists with reason: '._ve($att->reason));
+ } catch (NoResultException $e) {
+ $att = new Attention();
- $att->notice_id = $notice->getID();
- $att->profile_id = $profile->getID();
- $att->reason = $reason;
- $att->created = common_sql_now();
- $result = $att->insert();
+ $att->notice_id = $notice->getID();
+ $att->profile_id = $target->getID();
+ $att->reason = $reason;
+ $att->created = common_sql_now();
+ $result = $att->insert();
- if ($result === false) {
- throw new Exception('Could not saveNew in Attention');
+ if ($result === false) {
+ throw new Exception('Failed Attention::saveNew for notice id=='.$notice->getID().' target id=='.$target->getID().', reason=="'.$reason.'"');
+ }
}
+ self::blow('attention:stream:%d', $target->getID());
return $att;
}
}