]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/oembed.php
Enable events for showing Attachment representation
[quix0rs-gnu-social.git] / actions / oembed.php
index 11d814583701a78a23392042b8dd861618e8f532..da0352edf878816f8dbde6e8f08ab473b6a94a4d 100644 (file)
@@ -61,7 +61,9 @@ class OembedAction extends Action
             $proxy_args = $r->map($path);
 
             if (!$proxy_args) {
-                $this->serverError(_("$path not found."), 404);
+                // TRANS: Server error displayed in oEmbed action when path not found.
+                // TRANS: %s is a path.
+                $this->serverError(sprintf(_('"%s" not found.'),$path), 404);
             }
             $oembed=array();
             $oembed['version']='1.0';
@@ -71,30 +73,36 @@ class OembedAction extends Action
                 case 'shownotice':
                     $oembed['type']='link';
                     $id = $proxy_args['notice'];
-                    $notice = Notice::staticGet($id);
+                    $notice = Notice::getKV($id);
                     if(empty($notice)){
-                        $this->serverError(_("Notice $id not found."), 404);
+                        // TRANS: Server error displayed in oEmbed action when notice not found.
+                        // TRANS: %s is a notice.
+                        $this->serverError(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->url?$notice->url:$notice->uri);
+                    $oembed['url']=$notice->getUrl();
                     $oembed['html']=$notice->rendered;
                     break;
                 case 'attachment':
                     $id = $proxy_args['attachment'];
-                    $attachment = File::staticGet($id);
+                    $attachment = File::getKV($id);
                     if(empty($attachment)){
-                        $this->serverError(_("Attachment $id not found."), 404);
+                        // TRANS: Server error displayed in oEmbed action when attachment not found.
+                        // TRANS: %d is an attachment ID.
+                        $this->serverError(sprintf(_('Attachment %s not found.'),$id), 404);
                     }
-                    if(empty($attachment->filename) && $file_oembed = File_oembed::staticGet('file_id', $attachment->id)){
+                    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;
@@ -105,18 +113,28 @@ class OembedAction extends Action
                         $oembed['title']=$file_oembed->title;
                         $oembed['author_name']=$file_oembed->author_name;
                         $oembed['author_url']=$file_oembed->author_url;
-                        $oembed['url']=$file_oembed->url;
+                        $oembed['url']=$file_oembed->getUrl();
                     }else if(substr($attachment->mimetype,0,strlen('image/'))=='image/'){
                         $oembed['type']='photo';
-                        //TODO set width and height
-                        //$oembed['width']=
-                        //$oembed['height']=
-                        $oembed['url']=$attachment->url;
-                        $thumb = $attachment->getThumbnail();
-                        if ($thumb) {
-                            $oembed['thumbnail_url'] = $thumb->url;
+                        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
                         }
                     }else{
                         $oembed['type']='link';
@@ -126,7 +144,9 @@ class OembedAction extends Action
                     if($attachment->title) $oembed['title']=$attachment->title;
                     break;
                 default:
-                    $this->serverError(_("$path not supported for oembed requests."), 501);
+                    // 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($args['format']){
                 case 'xml':
@@ -183,6 +203,7 @@ class OembedAction extends Action
             }
             break;
         default:
+            // TRANS: Server error displayed in oEmbed action when request specifies an unsupported data format.
             $this->serverError(_('Not a supported data format.'), 501);
             break;
         }
@@ -202,10 +223,22 @@ class OembedAction extends Action
             }
             break;
         default:
+            // TRANS: Server error displayed in oEmbed action when request specifies an unsupported data format.
             $this->serverError(_('Not a supported data format.'), 501);
             break;
         }
         return;
     }
 
+    /**
+     * Is this action read-only?
+     *
+     * @param array $args other arguments
+     *
+     * @return boolean is read only action?
+     */
+    function isReadOnly($args)
+    {
+        return true;
+    }
 }