]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
oEmbed Action logic simplified (early return)
authorMikael Nordfeldth <mmn@hethane.se>
Fri, 3 Apr 2015 18:47:08 +0000 (20:47 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Fri, 3 Apr 2015 18:47:08 +0000 (20:47 +0200)
plugins/Oembed/actions/oembed.php

index bf3e71c5056578e3ae86ea0e6ed0627e38e4bd39..a586bf2b00c8ee9bbdecafb6cfc7b50c9fe9af57 100644 (file)
@@ -44,138 +44,139 @@ class OembedAction extends Action
         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);
         }
     }