'reply_to' => array('type' => 'int', 'description' => 'notice replied to (usually a guess)'),
'is_local' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'notice was generated by a user'),
'source' => array('type' => 'varchar', 'length' => 32, 'description' => 'source of comment, like "web", "im", or "clientname"'),
- 'conversation' => array('type' => 'int', 'description' => 'id of root notice in this conversation'),
+ 'conversation' => array('type' => 'int', 'description' => 'the local numerical conversation id'),
'repeat_of' => array('type' => 'int', 'description' => 'notice this is a repeat of'),
'object_type' => array('type' => 'varchar', 'length' => 191, 'description' => 'URI representing activity streams object type', 'default' => null),
'verb' => array('type' => 'varchar', 'length' => 191, 'description' => 'URI representing activity streams verb', 'default' => 'http://activitystrea.ms/schema/1.0/post'),
public function getRendered()
{
- if (is_null($this->rendered) || $this->rendered === '') {
+ // we test $this->id because if it's not inserted yet, we can't update the field
+ if (!empty($this->id) && (is_null($this->rendered) || $this->rendered === '')) {
// update to include rendered content on-the-fly, so we don't have to have a fix-up script in upgrade.php
common_debug('Rendering notice '.$this->getID().' as it had no rendered HTML content.');
$orig = clone($this);
return $this->created;
}
+ public function getVerb($make_relative=false)
+ {
+ return ActivityUtils::resolveUri($this->verb, $make_relative);
+ }
+
+ public function isVerb(array $verbs)
+ {
+ return ActivityUtils::compareVerbs($this->getVerb(), $verbs);
+ }
+
/*
* Get the original representation URL of this notice.
*
}
public function getObjectType($canonical=false) {
+ if (is_null($this->object_type) || $this->object_type==='') {
+ throw new NoObjectTypeException($this);
+ }
return ActivityUtils::resolveUri($this->object_type, $canonical);
}
+ public function isObjectType(array $types)
+ {
+ try {
+ return ActivityUtils::compareTypes($this->getObjectType(), $types);
+ } catch (NoObjectTypeException $e) {
+ return false;
+ }
+ }
+
public static function getByUri($uri)
{
$notice = new Notice();
$stored->url = $url;
$stored->verb = $act->verb;
- // Notice content. We trust local users to provide HTML we like, but of course not remote users.
- // FIXME: What about local users importing feeds? Mirror functions must filter out bad HTML first...
$content = $act->content ?: $act->summary;
if (is_null($content) && !is_null($actobj)) {
$content = $actobj->content ?: $actobj->summary;
}
- $stored->rendered = $actor->isLocal() ? $content : common_purify($content);
- // yeah, just don't use getRendered() here since it's not inserted yet ;)
- $stored->content = common_strip_html($stored->rendered);
+ // Strip out any bad HTML
+ $stored->rendered = common_purify($content);
+ $stored->content = common_strip_html($stored->getRendered(), true, true);
if (trim($stored->content) === '') {
// TRANS: Error message when the plain text content of a notice has zero length.
throw new ClientException(_('Empty notice content, will not save this.'));