X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FActivityModeration%2Fclasses%2FDeleted_notice.php;h=9a0a65c6b21acdebbcd7a102e4d42cca3ada7ffc;hb=77951647cef2b025f4c5731c00713a455d20498d;hp=c450c0eb6389f8bf52b6fddb3bf422d085a680d8;hpb=88f7bb1ed5faded5563eeb1d75d5fb44126b0712;p=quix0rs-gnu-social.git diff --git a/plugins/ActivityModeration/classes/Deleted_notice.php b/plugins/ActivityModeration/classes/Deleted_notice.php index c450c0eb63..9a0a65c6b2 100644 --- a/plugins/ActivityModeration/classes/Deleted_notice.php +++ b/plugins/ActivityModeration/classes/Deleted_notice.php @@ -30,15 +30,15 @@ class Deleted_notice extends Managed_DataObject public $profile_id; // int(4) not_null public $uri; // varchar(191) unique_key not 255 because utf8mb4 takes more space public $act_uri; // varchar(191) unique_key not 255 because utf8mb4 takes more space + public $act_created; // datetime() not_null public $created; // datetime() not_null - public $deleted; // datetime() not_null public static function schemaDef() { return array( 'fields' => array( - 'id' => array('type' => 'int', 'not null' => true, 'description' => 'identity of notice'), - 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'author of the notice'), + 'id' => array('type' => 'int', 'not null' => true, 'description' => 'notice ID'), + 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'profile that deleted the notice'), 'uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'URI of the deleted notice'), 'act_uri' => array('type' => 'varchar', 'length' => 191, 'description' => 'URI of the delete activity, may exist in notice table'), 'act_created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date the notice record was created'), @@ -46,6 +46,7 @@ class Deleted_notice extends Managed_DataObject ), 'primary key' => array('id'), 'unique keys' => array( + 'deleted_notice_uri_key' => array('uri'), 'deleted_notice_act_uri_key' => array('act_uri'), ), 'indexes' => array( @@ -54,23 +55,21 @@ class Deleted_notice extends Managed_DataObject ); } - public static function addNew(Notice $notice) + public static function addNew(Notice $notice, Profile $actor=null) { - $actor = $notice->getProfile(); + if (is_null($actor)) { + $actor = $notice->getProfile(); + } - if ($actor->hasRole(Profile_role::DELETED)) { - // Don't emit notices if the user is deleted - return true; + if ($notice->getProfile()->hasRole(Profile_role::DELETED)) { + // Don't emit notices if the notice author is (being) deleted + return false; } $act = new Activity(); - $act->type = ActivityObject::ACTIVITY; $act->verb = ActivityVerb::DELETE; $act->time = time(); - $act->id = TagURI::mint('deleted_notice:%d:%d:%s', - $actor->getID(), - $notice->getID(), - common_date_iso8601(common_sql_now())); + $act->id = $notice->getUri(); $act->content = sprintf(_m('%2$s deleted notice {{%4$s}}.'), htmlspecialchars($actor->getUrl()), @@ -80,8 +79,9 @@ class Deleted_notice extends Managed_DataObject ); $act->actor = $actor->asActivityObject(); - $act->target = new ActivityObject(); + $act->target = new ActivityObject(); // We don't save the notice object, as it's supposed to be removed! $act->target->id = $notice->getUri(); + $act->target->type = $notice->getObjectType(); $act->objects = array(clone($act->target)); $url = $notice->getUrl(); @@ -99,19 +99,21 @@ class Deleted_notice extends Managed_DataObject static public function fromStored(Notice $stored) { $class = get_called_class(); - $object = new $class; - $object->act_uri = $stored->getUri(); - if (!$object->find(true)) { - throw new NoResultException($object); - } - return $object; + return self::getByPK(array('uri' => $stored->getUri())); } + // The one who deleted the notice, not the notice's author public function getActor() { return Profile::getByID($this->profile_id); } + // As above: The one who deleted the notice, not the notice's author + public function getActorObject() + { + return $this->getActor()->asActivityObject(); + } + static public function getObjectType() { return 'activity'; @@ -121,36 +123,27 @@ class Deleted_notice extends Managed_DataObject public function getStored() { - $uri = $this->getTargetUri(); + $uri = $this->getUri(); if (!isset($this->_stored[$uri])) { - $stored = new Notice(); - $stored->uri = $uri; - if (!$stored->find(true)) { - throw new NoResultException($stored); - } - $this->_stored[$uri] = $stored; + $this->_stored[$uri] = Notice::getByPK(array('uri' => $uri)); } return $this->_stored[$uri]; } - public function getTargetUri() - { - return $this->uri; - } - public function getUri() { - return $this->act_uri; + return $this->uri; } public function asActivityObject(Profile $scoped=null) { $actobj = new ActivityObject(); $actobj->id = $this->getUri(); - $actobj->type = ActivityUtils::resolveUri(self::getObjectType()); + $actobj->type = ActivityObject::ACTIVITY; $actobj->actor = $this->getActorObject(); $actobj->target = new ActivityObject(); - $actobj->target->id = $this->getTargetUri(); + $actobj->target->id = $this->getUri(); + // FIXME: actobj->target->type? as in extendActivity, and actobj->target->actor maybe? $actobj->objects = array(clone($actobj->target)); $actobj->verb = ActivityVerb::DELETE; $actobj->title = ActivityUtils::verbToTitle($actobj->verb); @@ -159,22 +152,22 @@ class Deleted_notice extends Managed_DataObject $actobj->content = sprintf(_m('%2$s deleted notice {{%3$s}}.'), htmlspecialchars($actor->getUrl()), htmlspecialchars($actor->getBestName()), - htmlspecialchars($actor->getTargetUri()) + htmlspecialchars($this->getUri()) ); return $actobj; } - static function newUri(Profile $actor, Managed_DataObject $object, $created=null) + static public function extendActivity(Notice $stored, Activity $act, Profile $scoped=null) { - if (is_null($created)) { - $created = common_sql_now(); - } - return TagURI::mint(strtolower(get_called_class()).':%d:%s:%d:%s', - $actor->getID(), - ActivityUtils::resolveUri(self::getObjectType(), true), - $object->getID(), - common_date_iso8601($created)); + // the original notice id and type is still stored in the Notice table + // so we use that information to describe the delete activity + $act->target = new ActivityObject(); + $act->target->id = $stored->getUri(); + $act->target->type = $stored->getObjectType(); + $act->objects = array(clone($act->target)); + + $act->title = ActivityUtils::verbToTitle($act->verb); } static public function beforeSchemaUpdate() @@ -192,8 +185,8 @@ class Deleted_notice extends Managed_DataObject } echo "\nFound old $table table, upgrading it to contain 'act_uri' and 'act_created' field..."; - $schemadef['fields']['act_uri'] = array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'URI of the delete activity, may exist in notice table'); - $schemadef['fields']['act_created'] = array('type' => 'datetime', 'not null' => true, 'description' => 'date the notice record was created'); + $schemadef['fields']['act_uri'] = array('type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'URI of the deleted notice'); + $schemadef['fields']['act_created'] = array('type' => 'datetime', 'not null' => true, 'description' => 'datetime the notice record was created'); unset($schemadef['unique keys']); $schema->ensureTable($table, $schemadef); @@ -207,12 +200,14 @@ class Deleted_notice extends Managed_DataObject while($deleted->fetch()) { $orig = clone($deleted); $deleted->act_uri = $deleted->uri; - // this is a fake URI just to have something to put there to avoid NULL - $deleted->uri = TagURI::mint(strtolower(get_called_class()).':%d:%s:%s:%s', + // this is a fake URI just to have something to put there to avoid NULL. crc32 of uri is to avoid collisions + $deleted->uri = TagURI::mint(strtolower(get_called_class()).':%d:%s:%s:%s:crc32=%x', $deleted->profile_id, ActivityUtils::resolveUri(self::getObjectType(), true), 'unknown', - common_date_iso8601($deleted->created)); + common_date_iso8601($deleted->created), + crc32($deleted->act_uri) + ); $deleted->act_created = $deleted->created; // we don't actually know when the notice was created $deleted->updateWithKeys($orig, 'id'); print ".";