]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/attachmentlistitem.php
[DATABASE][User_openid_prefs] Fix wrong type for modified column
[quix0rs-gnu-social.git] / lib / attachmentlistitem.php
index 8adc07e6db7c59bd1c7ab40d8a245d3e6f0a0364..de1087d44cb75f360df589ecd4abfe8ed9566207 100644 (file)
@@ -63,7 +63,7 @@ class AttachmentListItem extends Widget
     }
 
     function title() {
-        return $this->attachment->getTitle();
+        return $this->attachment->getTitle() ?: _('Untitled attachment');
     }
 
     function linkTitle() {
@@ -81,33 +81,36 @@ class AttachmentListItem extends Widget
     function show()
     {
         $this->showStart();
-        $this->showNoticeAttachment();
+        try {
+            $this->showNoticeAttachment();
+        } catch (Exception $e) {
+            $this->element('div', ['class'=>'error'], $e->getMessage());
+            common_debug($e->getMessage());
+        }
         $this->showEnd();
     }
 
     function linkAttr() {
-        return array('class' => 'attachment',
-                     'href' => $this->attachment->getUrl(false),
-                     'id' => 'attachment-' . $this->attachment->id,
+        return array(
+                     'class' => 'u-url',
+                     'href' => $this->attachment->getAttachmentUrl(),
                      'title' => $this->linkTitle());
     }
 
-    function showLink() {
-        $this->out->elementStart('a', $this->linkAttr());
-        $this->out->element('span', null, $this->linkTitle());
-        $this->showRepresentation();
-        $this->out->elementEnd('a');
-    }
-
     function showNoticeAttachment()
     {
-        $this->showLink();
+        $this->showRepresentation();
     }
 
     function showRepresentation() {
         $enclosure = $this->attachment->getEnclosure();
 
         if (Event::handle('StartShowAttachmentRepresentation', array($this->out, $this->attachment))) {
+
+            $this->out->elementStart('label');
+            $this->out->element('a', $this->linkAttr(), $this->title());
+            $this->out->elementEnd('label');
+
             if (!empty($enclosure->mimetype)) {
                 // First, prepare a thumbnail if it exists.
                 $thumb = null;
@@ -141,7 +144,13 @@ class AttachmentListItem extends Widget
                     if ($thumb instanceof File_thumbnail) {
                         $this->out->element('img', $thumb->getHtmlAttrs(['class'=>'u-photo', 'alt' => '']));
                     } else {
-                        $this->out->element('img', array('class'=>'u-photo', 'src' => $this->attachment->getUrl(), 'alt' => $this->attachment->getTitle()));
+                        try {
+                            // getUrl(true) because we don't want to hotlink, could be made configurable
+                            $this->out->element('img', ['class'=>'u-photo', 'src'=>$this->attachment->getUrl(true), 'alt' => $this->attachment->getTitle()]);
+                        } catch (FileNotStoredLocallyException $e) {
+                            $url = $e->file->getUrl(false);
+                            $this->out->element('a', ['href'=>$url, 'rel'=>'external'], $url);
+                        }
                     }
                     unset($thumb);  // there's no need carrying this along after this
                     break;
@@ -168,7 +177,10 @@ class AttachmentListItem extends Widget
 
                 default:
                     unset($thumb);  // there's no need carrying this along
-                    switch ($this->attachment->mimetype) {
+                    switch (common_bare_mime($this->attachment->mimetype)) {
+                    case 'text/plain':
+                        $this->element('div', ['class'=>'e-content plaintext'], file_get_contents($this->attachment->getPath()));
+                        break;
                     case 'text/html':
                         if (!empty($this->attachment->filename)
                                 && (GNUsocial::isAjax() || common_config('attachments', 'show_html'))) {
@@ -201,11 +213,7 @@ class AttachmentListItem extends Widget
      */
     protected function scrubHtmlFile(File $attachment)
     {
-        $path = File::path($attachment->filename);
-        if (!file_exists($path) || !is_readable($path)) {
-            common_log(LOG_ERR, "Missing local HTML attachment $path");
-            return false;
-        }
+        $path = $attachment->getPath();
         $raw = file_get_contents($path);
 
         // Normalize...
@@ -232,13 +240,9 @@ class AttachmentListItem extends Widget
         $body = preg_replace('/^.*<body[^>]*>/is', '', $body);
         $body = preg_replace('/<\/body[^>]*>.*$/is', '', $body);
 
-        require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
-        $config = array('safe' => 1,
-                        'deny_attribute' => 'id,style,on*',
-                        'comment' => 1); // remove comments
-        $scrubbed = htmLawed($body, $config);
-
-        return $scrubbed;
+        require_once INSTALLDIR.'/extlib/HTMLPurifier/HTMLPurifier.auto.php';
+        $purifier = new HTMLPurifier();
+        return $purifier->purify($body);
     }
 
     /**