Avoid having to check for notices without rendered copies in upgrade.php
Always call the Notice->getRendered() function to get a rendered copy. We could perhaps put some sanitation there too in the future
This commit is contained in:
parent
d6ac002639
commit
b596391fcd
@ -327,7 +327,7 @@ class ApiSearchAtomAction extends ApiPrivateAuthAction
|
|||||||
'rel' => 'alternate',
|
'rel' => 'alternate',
|
||||||
'href' => $nurl));
|
'href' => $nurl));
|
||||||
$this->element('title', null, common_xml_safe_str(trim($notice->content)));
|
$this->element('title', null, common_xml_safe_str(trim($notice->content)));
|
||||||
$this->element('content', array('type' => 'html'), $notice->rendered);
|
$this->element('content', array('type' => 'html'), $notice->getRendered());
|
||||||
$this->element('updated', null, common_date_w3dtf($notice->created));
|
$this->element('updated', null, common_date_w3dtf($notice->created));
|
||||||
$this->element('link', array('type' => 'image/png',
|
$this->element('link', array('type' => 'image/png',
|
||||||
// XXX: Twitter uses rel="image" (not valid)
|
// XXX: Twitter uses rel="image" (not valid)
|
||||||
|
@ -259,6 +259,14 @@ class Notice extends Managed_DataObject
|
|||||||
|
|
||||||
public function getRendered()
|
public function getRendered()
|
||||||
{
|
{
|
||||||
|
if (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
|
||||||
|
$orig = clone($this);
|
||||||
|
$this->rendered = common_render_content($this->getContent(),
|
||||||
|
$this->getProfile(),
|
||||||
|
$this->hasParent() ? $this->getParent() : null);
|
||||||
|
$this->update($orig);
|
||||||
|
}
|
||||||
return $this->rendered;
|
return $this->rendered;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -816,6 +824,7 @@ class Notice extends Managed_DataObject
|
|||||||
$content = $actobj->content ?: $actobj->summary;
|
$content = $actobj->content ?: $actobj->summary;
|
||||||
}
|
}
|
||||||
$stored->rendered = $actor->isLocal() ? $content : common_purify($content);
|
$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);
|
$stored->content = common_strip_html($stored->rendered);
|
||||||
|
|
||||||
// Maybe a missing act-time should be fatal if the actor is not local?
|
// Maybe a missing act-time should be fatal if the actor is not local?
|
||||||
@ -1835,7 +1844,7 @@ class Notice extends Managed_DataObject
|
|||||||
// The notice is probably a share or similar, which don't
|
// The notice is probably a share or similar, which don't
|
||||||
// have a representational URL of their own.
|
// have a representational URL of their own.
|
||||||
}
|
}
|
||||||
$act->content = common_xml_safe_str($this->rendered);
|
$act->content = common_xml_safe_str($this->getRendered());
|
||||||
|
|
||||||
$profile = $this->getProfile();
|
$profile = $this->getProfile();
|
||||||
|
|
||||||
@ -2069,7 +2078,7 @@ class Notice extends Managed_DataObject
|
|||||||
$object->id = $this->getUri();
|
$object->id = $this->getUri();
|
||||||
//FIXME: = $object->title ?: sprintf(... because we might get a title from StartActivityObjectFromNotice
|
//FIXME: = $object->title ?: sprintf(... because we might get a title from StartActivityObjectFromNotice
|
||||||
$object->title = sprintf('New %1$s by %2$s', ActivityObject::canonicalType($object->type), $this->getProfile()->getNickname());
|
$object->title = sprintf('New %1$s by %2$s', ActivityObject::canonicalType($object->type), $this->getProfile()->getNickname());
|
||||||
$object->content = $this->rendered;
|
$object->content = $this->getRendered();
|
||||||
$object->link = $this->getUrl();
|
$object->link = $this->getUrl();
|
||||||
|
|
||||||
$object->extra[] = array('status_net', array('notice_id' => $this->id));
|
$object->extra[] = array('status_net', array('notice_id' => $this->id));
|
||||||
|
@ -408,7 +408,7 @@ class ApiAction extends Action
|
|||||||
|
|
||||||
// StatusNet-specific
|
// StatusNet-specific
|
||||||
|
|
||||||
$twitter_status['statusnet_html'] = $notice->rendered;
|
$twitter_status['statusnet_html'] = $notice->getRendered();
|
||||||
$twitter_status['statusnet_conversation_id'] = intval($notice->conversation);
|
$twitter_status['statusnet_conversation_id'] = intval($notice->conversation);
|
||||||
|
|
||||||
// The event call to handle NoticeSimpleStatusArray lets plugins add data to the output array
|
// The event call to handle NoticeSimpleStatusArray lets plugins add data to the output array
|
||||||
@ -503,7 +503,7 @@ class ApiAction extends Action
|
|||||||
|
|
||||||
// We trim() to avoid extraneous whitespace in the output
|
// We trim() to avoid extraneous whitespace in the output
|
||||||
|
|
||||||
$entry['content'] = common_xml_safe_str(trim($notice->rendered));
|
$entry['content'] = common_xml_safe_str(trim($notice->getRendered()));
|
||||||
$entry['title'] = $profile->nickname . ': ' . common_xml_safe_str(trim($notice->content));
|
$entry['title'] = $profile->nickname . ': ' . common_xml_safe_str(trim($notice->content));
|
||||||
$entry['link'] = common_local_url('shownotice', array('notice' => $notice->id));
|
$entry['link'] = common_local_url('shownotice', array('notice' => $notice->id));
|
||||||
$entry['published'] = common_date_iso8601($notice->created);
|
$entry['published'] = common_date_iso8601($notice->created);
|
||||||
|
@ -209,8 +209,8 @@ class Rss10Action extends ManagedAction
|
|||||||
$this->element('title', null, $title);
|
$this->element('title', null, $title);
|
||||||
$this->element('link', null, $nurl);
|
$this->element('link', null, $nurl);
|
||||||
$this->element('description', null, $profile->nickname."'s status on ".common_exact_date($notice->created));
|
$this->element('description', null, $profile->nickname."'s status on ".common_exact_date($notice->created));
|
||||||
if ($notice->rendered) {
|
if ($notice->getRendered()) {
|
||||||
$this->element('content:encoded', null, common_xml_safe_str($notice->rendered));
|
$this->element('content:encoded', null, common_xml_safe_str($notice->getRendered()));
|
||||||
}
|
}
|
||||||
$this->element('dc:date', null, common_date_w3dtf($notice->created));
|
$this->element('dc:date', null, common_date_w3dtf($notice->created));
|
||||||
$this->element('dc:creator', null, ($profile->fullname) ? $profile->fullname : $profile->nickname);
|
$this->element('dc:creator', null, ($profile->fullname) ? $profile->fullname : $profile->nickname);
|
||||||
|
@ -68,7 +68,7 @@ class SystemListItem extends NoticeListItemAdapter
|
|||||||
|
|
||||||
$out->elementStart('div', 'system-activity');
|
$out->elementStart('div', 'system-activity');
|
||||||
|
|
||||||
$out->raw($notice->rendered);
|
$out->raw($notice->getRendered());
|
||||||
|
|
||||||
$out->elementEnd('div');
|
$out->elementEnd('div');
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ class UnfollowListItem extends SystemListItem
|
|||||||
|
|
||||||
$out->elementStart('div', 'unfollow-activity');
|
$out->elementStart('div', 'unfollow-activity');
|
||||||
|
|
||||||
$out->raw($notice->rendered);
|
$out->raw($notice->getRendered());
|
||||||
|
|
||||||
$out->elementEnd('div');
|
$out->elementEnd('div');
|
||||||
}
|
}
|
||||||
|
@ -144,8 +144,6 @@ class ActivityModerationPlugin extends ActivityVerbHandlerPlugin
|
|||||||
foreach($props as $prop) {
|
foreach($props as $prop) {
|
||||||
$stored->$prop = $target->$prop;
|
$stored->$prop = $target->$prop;
|
||||||
}
|
}
|
||||||
//$stored->content = $stored->content ?: _('Notice deleted.');
|
|
||||||
//$stored->rendered = $stored->rendered ?: $stored->rendered;
|
|
||||||
|
|
||||||
// Let's see if this has been deleted already.
|
// Let's see if this has been deleted already.
|
||||||
try {
|
try {
|
||||||
|
@ -74,7 +74,7 @@ class ActivityVerbPostPlugin extends ActivityVerbHandlerPlugin
|
|||||||
$object->type = $notice->object_type ?: ActivityObject::NOTE;
|
$object->type = $notice->object_type ?: ActivityObject::NOTE;
|
||||||
$object->id = $notice->getUri();
|
$object->id = $notice->getUri();
|
||||||
$object->title = sprintf('New %1$s by %2$s', ActivityObject::canonicalType($object->type), $notice->getProfile()->getNickname());
|
$object->title = sprintf('New %1$s by %2$s', ActivityObject::canonicalType($object->type), $notice->getProfile()->getNickname());
|
||||||
$object->content = $notice->rendered;
|
$object->content = $notice->getRendered();
|
||||||
$object->link = $notice->getUrl();
|
$object->link = $notice->getUrl();
|
||||||
|
|
||||||
$object->extra[] = array('status_net', array('notice_id' => $notice->getID()));
|
$object->extra[] = array('status_net', array('notice_id' => $notice->getID()));
|
||||||
@ -102,7 +102,7 @@ class ActivityVerbPostPlugin extends ActivityVerbHandlerPlugin
|
|||||||
|
|
||||||
protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
|
protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
|
||||||
{
|
{
|
||||||
$out->raw($stored->rendered);
|
$out->raw($stored->getRendered());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getActionTitle(ManagedAction $action, $verb, Notice $target, Profile $scoped)
|
protected function getActionTitle(ManagedAction $action, $verb, Notice $target, Profile $scoped)
|
||||||
|
@ -37,6 +37,7 @@ class DirectionDetectorPlugin extends Plugin {
|
|||||||
* @param object $notice notice is going to be saved
|
* @param object $notice notice is going to be saved
|
||||||
*/
|
*/
|
||||||
public function onStartNoticeSave($notice){
|
public function onStartNoticeSave($notice){
|
||||||
|
// don't use getRendered() here since it's not saved yet and thus can't ->update in case that would happen
|
||||||
if(!preg_match('/<span class="rtl">/', $notice->rendered) && self::isRTL($notice->content))
|
if(!preg_match('/<span class="rtl">/', $notice->rendered) && self::isRTL($notice->content))
|
||||||
$notice->rendered = '<span class="rtl">'.$notice->rendered.'</span>';
|
$notice->rendered = '<span class="rtl">'.$notice->rendered.'</span>';
|
||||||
return true;
|
return true;
|
||||||
|
@ -171,7 +171,7 @@ class UserEmailSummaryHandler extends QueueHandler
|
|||||||
$out->element('a', array('href' => $profile->profileurl),
|
$out->element('a', array('href' => $profile->profileurl),
|
||||||
$profile->nickname);
|
$profile->nickname);
|
||||||
$out->text(' ');
|
$out->text(' ');
|
||||||
$out->raw($notice->rendered);
|
$out->raw($notice->getRendered());
|
||||||
$out->elementStart('div', array('style' => 'font-size: 0.8em; padding-top: 4px;'));
|
$out->elementStart('div', array('style' => 'font-size: 0.8em; padding-top: 4px;'));
|
||||||
$noticeurl = $notice->getLocalUrl();
|
$noticeurl = $notice->getLocalUrl();
|
||||||
// above should always return an URL
|
// above should always return an URL
|
||||||
|
@ -63,7 +63,7 @@ class Fave extends Managed_DataObject
|
|||||||
// notice's nickname and %3$s is the content of the favorited notice.)
|
// notice's nickname and %3$s is the content of the favorited notice.)
|
||||||
$act->content = sprintf(_('%1$s favorited something by %2$s: %3$s'),
|
$act->content = sprintf(_('%1$s favorited something by %2$s: %3$s'),
|
||||||
$actor->getNickname(), $target->getProfile()->getNickname(),
|
$actor->getNickname(), $target->getProfile()->getNickname(),
|
||||||
$target->rendered ?: $target->content);
|
$target->getRendered());
|
||||||
$act->actor = $actor->asActivityObject();
|
$act->actor = $actor->asActivityObject();
|
||||||
$act->target = $target->asActivityObject();
|
$act->target = $target->asActivityObject();
|
||||||
$act->objects = array(clone($act->target));
|
$act->objects = array(clone($act->target));
|
||||||
@ -186,7 +186,7 @@ class Fave extends Managed_DataObject
|
|||||||
// notice's nickname and %3$s is the content of the favorited notice.)
|
// notice's nickname and %3$s is the content of the favorited notice.)
|
||||||
$act->content = sprintf(_('%1$s favorited something by %2$s: %3$s'),
|
$act->content = sprintf(_('%1$s favorited something by %2$s: %3$s'),
|
||||||
$actor->getNickname(), $target->getProfile()->getNickname(),
|
$actor->getNickname(), $target->getProfile()->getNickname(),
|
||||||
$target->rendered ?: $target->content);
|
$target->getRendered());
|
||||||
|
|
||||||
$act->actor = $actor->asActivityObject();
|
$act->actor = $actor->asActivityObject();
|
||||||
$act->target = $target->asActivityObject();
|
$act->target = $target->asActivityObject();
|
||||||
@ -343,7 +343,7 @@ class Fave extends Managed_DataObject
|
|||||||
$actobj->objects = array(clone($actobj->target));
|
$actobj->objects = array(clone($actobj->target));
|
||||||
$actobj->verb = ActivityVerb::FAVORITE;
|
$actobj->verb = ActivityVerb::FAVORITE;
|
||||||
$actobj->title = ActivityUtils::verbToTitle($actobj->verb);
|
$actobj->title = ActivityUtils::verbToTitle($actobj->verb);
|
||||||
$actobj->content = $this->getTarget()->rendered ?: $this->getTarget()->content;
|
$actobj->content = $this->getTarget()->getRendered();
|
||||||
return $actobj;
|
return $actobj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,7 +388,7 @@ function linkback_save($source, $target, $response, $notice_or_user) {
|
|||||||
// notice's nickname and %3$s is the content of the favorited notice.)
|
// notice's nickname and %3$s is the content of the favorited notice.)
|
||||||
$act->content = sprintf(_('%1$s favorited something by %2$s: %3$s'),
|
$act->content = sprintf(_('%1$s favorited something by %2$s: %3$s'),
|
||||||
$profile->getNickname(), $notice_or_user->getProfile()->getNickname(),
|
$profile->getNickname(), $notice_or_user->getProfile()->getNickname(),
|
||||||
$notice_or_user->rendered ?: $notice_or_user->content);
|
$notice_or_user->getRendered());
|
||||||
if($entry['rsvp']) {
|
if($entry['rsvp']) {
|
||||||
$act->content = $options['rendered'];
|
$act->content = $options['rendered'];
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@ class MapAction extends Action
|
|||||||
|
|
||||||
$arr = $act->twitterStatusArray($notice, true);
|
$arr = $act->twitterStatusArray($notice, true);
|
||||||
$arr['url'] = $notice->getUrl(true);
|
$arr['url'] = $notice->getUrl(true);
|
||||||
$arr['html'] = $notice->rendered;
|
$arr['html'] = $notice->getRendered();
|
||||||
$arr['source'] = $arr['source'];
|
$arr['source'] = $arr['source'];
|
||||||
|
|
||||||
if (!empty($notice->reply_to)) {
|
if (!empty($notice->reply_to)) {
|
||||||
|
@ -88,7 +88,7 @@ class OembedAction extends Action
|
|||||||
$oembed['author_name']=$authorname;
|
$oembed['author_name']=$authorname;
|
||||||
$oembed['author_url']=$profile->profileurl;
|
$oembed['author_url']=$profile->profileurl;
|
||||||
$oembed['url']=$notice->getUrl();
|
$oembed['url']=$notice->getUrl();
|
||||||
$oembed['html']=$notice->rendered;
|
$oembed['html']=$notice->getRendered();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'attachment':
|
case 'attachment':
|
||||||
|
@ -322,7 +322,7 @@ class RealtimePlugin extends Plugin
|
|||||||
|
|
||||||
$arr = $act->twitterStatusArray($notice, true);
|
$arr = $act->twitterStatusArray($notice, true);
|
||||||
$arr['url'] = $notice->getUrl(true);
|
$arr['url'] = $notice->getUrl(true);
|
||||||
$arr['html'] = htmlspecialchars($notice->rendered);
|
$arr['html'] = htmlspecialchars($notice->getRendered());
|
||||||
$arr['source'] = htmlspecialchars($arr['source']);
|
$arr['source'] = htmlspecialchars($arr['source']);
|
||||||
$arr['conversation_url'] = $notice->getConversationUrl();
|
$arr['conversation_url'] = $notice->getConversationUrl();
|
||||||
|
|
||||||
@ -335,7 +335,7 @@ class RealtimePlugin extends Plugin
|
|||||||
$original = Notice::getKV('id', $notice->repeat_of);
|
$original = Notice::getKV('id', $notice->repeat_of);
|
||||||
if ($original instanceof Notice) {
|
if ($original instanceof Notice) {
|
||||||
$arr['retweeted_status']['url'] = $original->getUrl(true);
|
$arr['retweeted_status']['url'] = $original->getUrl(true);
|
||||||
$arr['retweeted_status']['html'] = htmlspecialchars($original->rendered);
|
$arr['retweeted_status']['html'] = htmlspecialchars($original->getRendered());
|
||||||
$arr['retweeted_status']['source'] = htmlspecialchars($original->source);
|
$arr['retweeted_status']['source'] = htmlspecialchars($original->source);
|
||||||
$originalProfile = $original->getProfile();
|
$originalProfile = $original->getProfile();
|
||||||
$arr['retweeted_status']['user']['profile_url'] = $originalProfile->profileurl;
|
$arr['retweeted_status']['user']['profile_url'] = $originalProfile->profileurl;
|
||||||
|
@ -170,7 +170,7 @@ class SharePlugin extends ActivityVerbHandlerPlugin
|
|||||||
$object = new Activity();
|
$object = new Activity();
|
||||||
$object->actor = $stored->getProfile()->asActivityObject();
|
$object->actor = $stored->getProfile()->asActivityObject();
|
||||||
$object->verb = ActivityVerb::SHARE;
|
$object->verb = ActivityVerb::SHARE;
|
||||||
$object->content = $stored->rendered;
|
$object->content = $stored->getRendered();
|
||||||
$this->extendActivity($stored, $object);
|
$this->extendActivity($stored, $object);
|
||||||
|
|
||||||
return $object;
|
return $object;
|
||||||
|
@ -195,7 +195,7 @@ class SubMirror extends Managed_DataObject
|
|||||||
{
|
{
|
||||||
$options = array('is_local' => Notice::LOCAL_PUBLIC,
|
$options = array('is_local' => Notice::LOCAL_PUBLIC,
|
||||||
'url' => $notice->getUrl(), // pass through the foreign link...
|
'url' => $notice->getUrl(), // pass through the foreign link...
|
||||||
'rendered' => $notice->rendered);
|
'rendered' => $notice->getRendered());
|
||||||
|
|
||||||
$saved = Notice::saveNew($profile->id,
|
$saved = Notice::saveNew($profile->id,
|
||||||
$notice->content,
|
$notice->content,
|
||||||
|
@ -41,7 +41,6 @@ function main()
|
|||||||
|
|
||||||
// These replace old "fixup_*" scripts
|
// These replace old "fixup_*" scripts
|
||||||
|
|
||||||
fixupNoticeRendered();
|
|
||||||
fixupNoticeConversation();
|
fixupNoticeConversation();
|
||||||
initConversation();
|
initConversation();
|
||||||
fixupGroupURI();
|
fixupGroupURI();
|
||||||
@ -94,26 +93,6 @@ function updateSchemaPlugins()
|
|||||||
printfnq("DONE.\n");
|
printfnq("DONE.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
function fixupNoticeRendered()
|
|
||||||
{
|
|
||||||
printfnq("Ensuring all notices have rendered HTML...");
|
|
||||||
|
|
||||||
$notice = new Notice();
|
|
||||||
|
|
||||||
$notice->whereAdd('rendered IS NULL');
|
|
||||||
$notice->find();
|
|
||||||
|
|
||||||
while ($notice->fetch()) {
|
|
||||||
$original = clone($notice);
|
|
||||||
$notice->rendered = common_render_content($notice->content,
|
|
||||||
$notice->getProfile(),
|
|
||||||
$notice->hasParent() ? $notice->getParent() : null);
|
|
||||||
$notice->update($original);
|
|
||||||
}
|
|
||||||
|
|
||||||
printfnq("DONE.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
function fixupNoticeConversation()
|
function fixupNoticeConversation()
|
||||||
{
|
{
|
||||||
printfnq("Ensuring all notices have a conversation ID...");
|
printfnq("Ensuring all notices have a conversation ID...");
|
||||||
|
Loading…
Reference in New Issue
Block a user