X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FFavorite%2Fclasses%2FFave.php;h=eca4412b23068c0d5a114203269d77bd29c26bce;hb=f9ddb0e20919b1b22b1a78463ffb227a009c5614;hp=916620a34c929d1abd478e9481309ca7e8d0fee0;hpb=adc4dfc081e87a638b9f9de26fc1f3c0e042d276;p=quix0rs-gnu-social.git diff --git a/plugins/Favorite/classes/Fave.php b/plugins/Favorite/classes/Fave.php index 916620a34c..eca4412b23 100644 --- a/plugins/Favorite/classes/Fave.php +++ b/plugins/Favorite/classes/Fave.php @@ -8,7 +8,7 @@ class Fave extends Managed_DataObject 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 @@ -18,7 +18,7 @@ class Fave extends Managed_DataObject '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'), ), @@ -48,7 +48,13 @@ class Fave extends Managed_DataObject * @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; $act->time = time(); $act->id = self::newUri($actor, $target, common_sql_date($act->time)); @@ -73,6 +79,27 @@ class Fave extends Managed_DataObject 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() { @@ -108,7 +135,7 @@ class Fave extends Managed_DataObject 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); @@ -223,7 +250,7 @@ class Fave extends Managed_DataObject * * @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)); @@ -330,7 +357,7 @@ class Fave extends Managed_DataObject $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 { @@ -396,12 +423,7 @@ class Fave extends Managed_DataObject 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() @@ -418,16 +440,4 @@ class Fave extends Managed_DataObject // 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)); - } }