}
}
+ public function getSelfLink()
+ {
+ if ($this->isLocal()) {
+ return common_local_url('ApiStatusesShow', array('id' => $this->getID(), 'format' => 'atom'));
+ }
+
+ $selfLink = $this->getPref('ostatus', 'self');
+
+ if (!common_valid_http_url($selfLink)) {
+ throw new InvalidUrlException($selfLink);
+ }
+
+ return $selfLink;
+ }
+
public function getObjectType($canonical=false) {
if (is_null($this->object_type) || $this->object_type==='') {
throw new NoObjectTypeException($this);
static function saveNew($profile_id, $content, $source, array $options=null) {
$defaults = array('uri' => null,
'url' => null,
+ 'self' => null,
'conversation' => null, // URI of conversation
'reply_to' => null, // This will override convo URI if the parent is known
'repeat_of' => null, // This will override convo URI if the repeated notice is known
} else {
// Conversation entry with specified URI was not found, so we must create it.
common_debug('Conversation URI not found, so we will create it with the URI given in the options to Notice::saveNew: '.$options['conversation']);
+ $convctx = new ActivityContext();
+ $convctx->conversation = $options['conversation'];
+ if (array_key_exists('conversation_url', $options)) {
+ $convctx->conversation_url = $options['conversation_url'];
+ }
// The insert in Conversation::create throws exception on failure
- $conv = Conversation::create($options['conversation'], $notice->created);
+ $conv = Conversation::create($convctx, $notice->created);
}
$notice->conversation = $conv->getID();
unset($conv);
}
}
+ if ($self && common_valid_http_url($self)) {
+ $notice->setPref('ostatus', 'self', $self);
+ }
+
// Only save 'attention' and metadata stuff (URLs, tags...) stuff if
// the activityverb is a POST (since stuff like repeat, favorite etc.
// reasonably handle notifications themselves.
// implied object
$options['uri'] = $act->id;
$options['url'] = $act->link;
+ if ($act->selfLink) {
+ $options['self'] = $act->selfLink;
+ }
} else {
$actobj = count($act->objects)===1 ? $act->objects[0] : null;
if (!is_null($actobj) && !empty($actobj->id)) {
$options['url'] = $actobj->id;
}
}
+ if ($actobj->selfLink) {
+ $options['self'] = $actobj->selfLink;
+ }
}
$defaults = array(
'reply_to' => null,
'repeat_of' => null,
'scope' => null,
+ 'self' => null,
'source' => 'unknown',
'tags' => array(),
'uri' => null,
// Conversation entry with specified URI was not found, so we must create it.
common_debug('Conversation URI not found, so we will create it with the URI given in the context of the activity: '.$act->context->conversation);
// The insert in Conversation::create throws exception on failure
- $conv = Conversation::create($act->context->conversation, $stored->created);
+ $conv = Conversation::create($act->context, $stored->created);
}
$stored->conversation = $conv->getID();
unset($conv);
throw new ServerException('Supposedly saved Notice has no ID.');
}
+ if ($self && common_valid_http_url($self)) {
+ $stored->setPref('ostatus', 'self', $self);
+ }
+
+ if ($self && common_valid_http_url($self)) {
+ $stored->setPref('ostatus', 'self', $self);
+ }
+
// Only save 'attention' and metadata stuff (URLs, tags...) stuff if
// the activityverb is a POST (since stuff like repeat, favorite etc.
// reasonably handle notifications themselves.
if (common_config('group', 'addtag')) {
// we automatically add a tag for every group name, too
-
- $tag = Notice_tag::pkeyGet(array('tag' => common_canonical_tag($group->nickname),
- 'notice_id' => $this->id));
+ common_debug('Adding hashtag matching group nickname: '._ve($group->getNickname()));
+ $tag = Notice_tag::pkeyGet(array('tag' => common_canonical_tag($group->getNickname()),
+ 'notice_id' => $this->getID()));
if (is_null($tag)) {
- $this->saveTag($group->nickname);
+ $this->saveTag($group->getNickname());
}
}
/**
* Convert a notice into an activity for export.
*
- * @param Profile $scoped The currently logged in/scoped profile
+ * @param Profile $scoped The currently logged in/scoped profile
*
* @return Activity activity object representing this Notice.
+ * @throws ClientException
+ * @throws ServerException
*/
function asActivity(Profile $scoped=null)
$conv = Conversation::getKV('id', $this->conversation);
if ($conv instanceof Conversation) {
$ctx->conversation = $conv->uri;
+ $ctx->conversation_url = $conv->url;
}
}
}
}
+ try {
+ $act->selfLink = $this->getSelfLink();
+ } catch (InvalidUrlException $e) {
+ $act->selfLink = null;
+ }
if ($this->isLocal()) {
- $act->selfLink = common_local_url('ApiStatusesShow', array('id' => $this->id,
- 'format' => 'atom'));
$act->editLink = $act->selfLink;
}
$object->title = sprintf('New %1$s by %2$s', ActivityObject::canonicalType($object->type), $this->getProfile()->getNickname());
$object->content = $this->getRendered();
$object->link = $this->getUrl();
+ try {
+ $object->selfLink = $this->getSelfLink();
+ } catch (InvalidUrlException $e) {
+ $object->selfLink = null;
+ }
$object->extra[] = array('statusnet:notice_id', null, $this->id);
}
}
}
+
+ public function delPref($namespace, $topic) {
+ return Notice_prefs::setData($this, $namespace, $topic, null);
+ }
+
+ public function getPref($namespace, $topic, $default=null) {
+ // If you want an exception to be thrown, call Notice_prefs::getData directly
+ try {
+ return Notice_prefs::getData($this, $namespace, $topic, $default);
+ } catch (NoResultException $e) {
+ return null;
+ }
+ }
+
+ // The same as getPref but will fall back to common_config value for the same namespace/topic
+ public function getConfigPref($namespace, $topic)
+ {
+ return Notice_prefs::getConfigData($this, $namespace, $topic);
+ }
+
+ public function setPref($namespace, $topic, $data) {
+ return Notice_prefs::setData($this, $namespace, $topic, $data);
+ }
}