parent::handle();
$url = $this->trimmed('url');
- if (substr(strtolower($url),0,strlen(common_root_url())) == strtolower(common_root_url())) {
- $path = substr($url,strlen(common_root_url()));
+ if (substr(strtolower($url),0,strlen(common_root_url())) !== strtolower(common_root_url())) {
+ // TRANS: Error message displaying attachments. %s is the site's base URL.
+ // FIXME: 404 not found?! (this will automatically become a 500 because it's not a serverError!)
+ $this->serverError(sprintf(_('Only %s URLs over plain HTTP please.'), common_root_url()), 404);
+ }
+
+ $path = substr($url,strlen(common_root_url()));
+
+ $r = Router::get();
+
+ $proxy_args = $r->map($path);
+ if (!$proxy_args) {
+ // TRANS: Client error displayed in oEmbed action when path not found.
+ // TRANS: %s is a path.
+ $this->clientError(sprintf(_('"%s" not found.'),$path), 404);
+ }
- $r = Router::get();
+ $oembed=array();
+ $oembed['version']='1.0';
+ $oembed['provider_name']=common_config('site', 'name');
+ $oembed['provider_url']=common_root_url();
- $proxy_args = $r->map($path);
- if (!$proxy_args) {
- // TRANS: Client error displayed in oEmbed action when path not found.
- // TRANS: %s is a path.
- $this->clientError(sprintf(_('"%s" not found.'),$path), 404);
+ switch ($proxy_args['action']) {
+ case 'shownotice':
+ $oembed['type']='link';
+ $id = $proxy_args['notice'];
+ $notice = Notice::getKV($id);
+ if(empty($notice)){
+ // TRANS: Client error displayed in oEmbed action when notice not found.
+ // TRANS: %s is a notice.
+ $this->clientError(sprintf(_("Notice %s not found."),$id), 404);
}
+ $profile = $notice->getProfile();
+ if (empty($profile)) {
+ // TRANS: Server error displayed in oEmbed action when notice has not profile.
+ $this->serverError(_('Notice has no profile.'), 500);
+ }
+ $authorname = $profile->getFancyName();
+ // TRANS: oEmbed title. %1$s is the author name, %2$s is the creation date.
+ $oembed['title'] = sprintf(_('%1$s\'s status on %2$s'),
+ $authorname,
+ common_exact_date($notice->created));
+ $oembed['author_name']=$authorname;
+ $oembed['author_url']=$profile->profileurl;
+ $oembed['url']=$notice->getUrl();
+ $oembed['html']=$notice->rendered;
+ break;
- $oembed=array();
- $oembed['version']='1.0';
- $oembed['provider_name']=common_config('site', 'name');
- $oembed['provider_url']=common_root_url();
-
- switch ($proxy_args['action']) {
- case 'shownotice':
- $oembed['type']='link';
- $id = $proxy_args['notice'];
- $notice = Notice::getKV($id);
- if(empty($notice)){
- // TRANS: Client error displayed in oEmbed action when notice not found.
- // TRANS: %s is a notice.
- $this->clientError(sprintf(_("Notice %s not found."),$id), 404);
- }
- $profile = $notice->getProfile();
- if (empty($profile)) {
- // TRANS: Server error displayed in oEmbed action when notice has not profile.
- $this->serverError(_('Notice has no profile.'), 500);
- }
- $authorname = $profile->getFancyName();
- // TRANS: oEmbed title. %1$s is the author name, %2$s is the creation date.
- $oembed['title'] = sprintf(_('%1$s\'s status on %2$s'),
- $authorname,
- common_exact_date($notice->created));
- $oembed['author_name']=$authorname;
- $oembed['author_url']=$profile->profileurl;
- $oembed['url']=$notice->getUrl();
- $oembed['html']=$notice->rendered;
- break;
-
- case 'attachment':
- $id = $proxy_args['attachment'];
- $attachment = File::getKV($id);
- if(empty($attachment)){
- // TRANS: Client error displayed in oEmbed action when attachment not found.
- // TRANS: %d is an attachment ID.
- $this->clientError(sprintf(_('Attachment %s not found.'),$id), 404);
- }
- if (empty($attachment->filename) && $file_oembed = File_oembed::getKV('file_id', $attachment->id)) {
- // Proxy the existing oembed information
- $oembed['type']=$file_oembed->type;
- $oembed['provider']=$file_oembed->provider;
- $oembed['provider_url']=$file_oembed->provider_url;
- $oembed['width']=$file_oembed->width;
- $oembed['height']=$file_oembed->height;
- $oembed['html']=$file_oembed->html;
- $oembed['title']=$file_oembed->title;
- $oembed['author_name']=$file_oembed->author_name;
- $oembed['author_url']=$file_oembed->author_url;
- $oembed['url']=$file_oembed->getUrl();
- } elseif (substr($attachment->mimetype,0,strlen('image/'))==='image/') {
- $oembed['type']='photo';
- if ($attachment->filename) {
- $filepath = File::path($attachment->filename);
- $gis = @getimagesize($filepath);
- if ($gis) {
- $oembed['width'] = $gis[0];
- $oembed['height'] = $gis[1];
- } else {
- // TODO Either throw an error or find a fallback?
- }
- }
- $oembed['url']=$attachment->getUrl();
- try {
- $thumb = $attachment->getThumbnail();
- $oembed['thumbnail_url'] = $thumb->getUrl();
- $oembed['thumbnail_width'] = $thumb->width;
- $oembed['thumbnail_height'] = $thumb->height;
- unset($thumb);
- } catch (UnsupportedMediaException $e) {
- // No thumbnail data available
+ case 'attachment':
+ $id = $proxy_args['attachment'];
+ $attachment = File::getKV($id);
+ if(empty($attachment)){
+ // TRANS: Client error displayed in oEmbed action when attachment not found.
+ // TRANS: %d is an attachment ID.
+ $this->clientError(sprintf(_('Attachment %s not found.'),$id), 404);
+ }
+ if (empty($attachment->filename) && $file_oembed = File_oembed::getKV('file_id', $attachment->id)) {
+ // Proxy the existing oembed information
+ $oembed['type']=$file_oembed->type;
+ $oembed['provider']=$file_oembed->provider;
+ $oembed['provider_url']=$file_oembed->provider_url;
+ $oembed['width']=$file_oembed->width;
+ $oembed['height']=$file_oembed->height;
+ $oembed['html']=$file_oembed->html;
+ $oembed['title']=$file_oembed->title;
+ $oembed['author_name']=$file_oembed->author_name;
+ $oembed['author_url']=$file_oembed->author_url;
+ $oembed['url']=$file_oembed->getUrl();
+ } elseif (substr($attachment->mimetype,0,strlen('image/'))==='image/') {
+ $oembed['type']='photo';
+ if ($attachment->filename) {
+ $filepath = File::path($attachment->filename);
+ $gis = @getimagesize($filepath);
+ if ($gis) {
+ $oembed['width'] = $gis[0];
+ $oembed['height'] = $gis[1];
+ } else {
+ // TODO Either throw an error or find a fallback?
}
- } else {
- $oembed['type']='link';
- $oembed['url']=common_local_url('attachment',
- array('attachment' => $attachment->id));
}
- if ($attachment->title) {
- $oembed['title']=$attachment->title;
+ $oembed['url']=$attachment->getUrl();
+ try {
+ $thumb = $attachment->getThumbnail();
+ $oembed['thumbnail_url'] = $thumb->getUrl();
+ $oembed['thumbnail_width'] = $thumb->width;
+ $oembed['thumbnail_height'] = $thumb->height;
+ unset($thumb);
+ } catch (UnsupportedMediaException $e) {
+ // No thumbnail data available
}
- break;
- default:
- // TRANS: Server error displayed in oEmbed request when a path is not supported.
- // TRANS: %s is a path.
- $this->serverError(sprintf(_('"%s" not supported for oembed requests.'),$path), 501);
+ } else {
+ $oembed['type']='link';
+ $oembed['url']=common_local_url('attachment',
+ array('attachment' => $attachment->id));
}
- switch ($this->trimmed('format')) {
- case 'xml':
- $this->init_document('xml');
- $this->elementStart('oembed');
- foreach(array(
- 'version', 'type', 'provider_name',
- 'provider_url', 'title', 'author_name',
- 'author_url', 'url', 'html', 'width',
- 'height', 'cache_age', 'thumbnail_url',
- 'thumbnail_width', 'thumbnail_height',
- ) as $key) {
- if (isset($oembed[$key]) && $oembed[$key]!='') {
- $this->element($key, null, $oembed[$key]);
- }
+ if ($attachment->title) {
+ $oembed['title']=$attachment->title;
+ }
+ break;
+ default:
+ // TRANS: Server error displayed in oEmbed request when a path is not supported.
+ // TRANS: %s is a path.
+ $this->serverError(sprintf(_('"%s" not supported for oembed requests.'),$path), 501);
+ }
+
+ switch ($this->trimmed('format')) {
+ case 'xml':
+ $this->init_document('xml');
+ $this->elementStart('oembed');
+ foreach(array(
+ 'version', 'type', 'provider_name',
+ 'provider_url', 'title', 'author_name',
+ 'author_url', 'url', 'html', 'width',
+ 'height', 'cache_age', 'thumbnail_url',
+ 'thumbnail_width', 'thumbnail_height',
+ ) as $key) {
+ if (isset($oembed[$key]) && $oembed[$key]!='') {
+ $this->element($key, null, $oembed[$key]);
}
- $this->elementEnd('oembed');
- $this->end_document('xml');
- break;
-
- case 'json':
- case null:
- $this->init_document('json');
- $this->raw(json_encode($oembed));
- $this->end_document('json');
- break;
- default:
- // TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
- $this->serverError(sprintf(_('Content type %s not supported.'), $apidata['content-type']), 501);
}
- } else {
- // TRANS: Error message displaying attachments. %s is the site's base URL.
- // FIXME: 404 not found?! (this will automatically become a 500 because it's not a serverError!)
- $this->serverError(sprintf(_('Only %s URLs over plain HTTP please.'), common_root_url()), 404);
+ $this->elementEnd('oembed');
+ $this->end_document('xml');
+ break;
+
+ case 'json':
+ case null:
+ $this->init_document('json');
+ $this->raw(json_encode($oembed));
+ $this->end_document('json');
+ break;
+ default:
+ // TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
+ $this->serverError(sprintf(_('Content type %s not supported.'), $apidata['content-type']), 501);
}
}