public $__table = 'fave'; // table name
public $notice_id; // int(4) primary_key not_null
public $user_id; // int(4) primary_key not_null
- public $uri; // varchar(255)
+ public $uri; // varchar(191) not 255 because utf8mb4 takes more space not 255 because utf8mb4 takes more space
public $created; // datetime multiple_key not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
'fields' => array(
'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice that is the favorite'),
'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user who likes this notice'),
- 'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier, usually a tag URI'),
+ 'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'universally unique identifier, usually a tag URI'),
'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'),
),
* @throws Exception on failure
*/
static function addNew(Profile $actor, Notice $target) {
+ if (self::existsForProfile($target, $actor)) {
+ // TRANS: Client error displayed when trying to mark a notice as favorite that already is a favorite.
+ throw new AlreadyFulfilledException(_('You have already favorited this!'));
+ }
+
$act = new Activity();
$act->type = ActivityObject::ACTIVITY;
$act->verb = ActivityVerb::FAVORITE;
return $stored;
}
+ public function removeEntry(Profile $actor, Notice $target)
+ {
+ $fave = new Fave();
+ $fave->user_id = $actor->getID();
+ $fave->notice_id = $target->getID();
+ if (!$fave->find(true)) {
+ // TRANS: Client error displayed when trying to remove a 'favor' when there is none in the first place.
+ throw new AlreadyFulfilledException(_('This is already not favorited.'));
+ }
+
+ $result = $fave->delete();
+ if ($result === false) {
+ common_log_db_error($fave, 'DELETE', __FILE__);
+ // TRANS: Server error displayed when removing a favorite from the database fails.
+ throw new ServerException(_('Could not delete favorite.'));
+ }
+
+ Fave::blowCacheForProfileId($actor->getID());
+ Fave::blowCacheForNoticeId($target->getID());
+ }
+
// exception throwing takeover!
public function insert()
{
return $result;
}
- function stream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $own=false, $since_id=0, $max_id=0)
+ static function stream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $own=false, $since_id=0, $max_id=0)
{
$stream = new FaveNoticeStream($user_id, $own);
*
* @return array Array of Fave objects
*/
- static public function byNotice($notice)
+ static public function byNotice(Notice $notice)
{
if (!isset(self::$_faves[$notice->id])) {
self::fillFaves(array($notice->id));
$target = self::getTargetFromStored($stored);
// The following logic was copied from StatusNet's Activity plugin
- if (ActivityUtils::compareTypes($target->verb, array(ActivityVerb::POST))) {
+ if (ActivityUtils::compareVerbs($target->verb, array(ActivityVerb::POST))) {
// "I like the thing you posted"
$act->objects = $target->asActivity()->objects;
} else {
public function getActor()
{
- $profile = new Profile();
- $profile->id = $this->user_id;
- if (!$profile->find(true)) {
- throw new NoResultException($profile);
- }
- return $profile;
+ return Profile::getByID($this->user_id);
}
public function getActorObject()
// We (should've in this case) created it ourselves, so we tag it ourselves
return self::newUri($this->getActor(), $this->getTarget(), $this->created);
}
-
- static function newUri(Profile $actor, Managed_DataObject $target, $created=null)
- {
- if (is_null($created)) {
- $created = common_sql_now();
- }
- return TagURI::mint(strtolower(get_called_class()).':%d:%s:%d:%s',
- $actor->id,
- ActivityUtils::resolveUri(self::getObjectType(), true),
- $target->id,
- common_date_iso8601($created));
- }
}