diff options
| -rw-r--r-- | classes/File.php | 7 | ||||
| -rw-r--r-- | classes/Notice.php | 28 | ||||
| -rw-r--r-- | js/util.js | 7 | ||||
| -rw-r--r-- | lib/activity.php | 5 | ||||
| -rw-r--r-- | plugins/OStatus/classes/Ostatus_profile.php | 12 | 
5 files changed, 53 insertions, 6 deletions
| diff --git a/classes/File.php b/classes/File.php index 189e04ce0..1b8ef1b3e 100644 --- a/classes/File.php +++ b/classes/File.php @@ -286,5 +286,12 @@ class File extends Memcached_DataObject          }          return $enclosure;      } + +    // quick back-compat hack, since there's still code using this +    function isEnclosure() +    { +        $enclosure = $this->getEnclosure(); +        return !empty($enclosure); +    }  } diff --git a/classes/Notice.php b/classes/Notice.php index 63dc96897..c1263c782 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -211,6 +211,8 @@ class Notice extends Memcached_DataObject       *                              extracting ! tags from content       *              array 'tags' list of hashtag strings to save with the notice       *                           in place of extracting # tags from content +     *              array 'urls' list of attached/referred URLs to save with the +     *                           notice in place of extracting links from content       * @fixme tag override       *       * @return Notice @@ -380,8 +382,11 @@ class Notice extends Memcached_DataObject              $notice->saveTags();          } -        // @fixme pass in data for URLs too? -        $notice->saveUrls(); +        if (isset($urls)) { +            $notice->saveKnownUrls($urls); +        } else { +            $notice->saveUrls(); +        }          // Prepare inbox delivery, may be queued to background.          $notice->distribute(); @@ -427,6 +432,25 @@ class Notice extends Memcached_DataObject          common_replace_urls_callback($this->content, array($this, 'saveUrl'), $this->id);      } +    /** +     * Save the given URLs as related links/attachments to the db +     * +     * follow redirects and save all available file information +     * (mimetype, date, size, oembed, etc.) +     * +     * @return void +     */ +    function saveKnownUrls($urls) +    { +        // @fixme validation? +        foreach ($urls as $url) { +            File::processNew($url, $this->id); +        } +    } + +    /** +     * @private callback +     */      function saveUrl($data) {          list($url, $notice_id) = $data;          File::processNew($url, $notice_id); diff --git a/js/util.js b/js/util.js index d08c46fe6..3efda0d7b 100644 --- a/js/util.js +++ b/js/util.js @@ -423,8 +423,11 @@ var SN = { // StatusNet              };              notice.find('a.attachment').click(function() { -                $().jOverlay({url: $('address .url')[0].href+'attachment/' + ($(this).attr('id').substring('attachment'.length + 1)) + '/ajax'}); -                return false; +                var attachId = ($(this).attr('id').substring('attachment'.length + 1)); +                if (attachId) { +                    $().jOverlay({url: $('address .url')[0].href+'attachment/' + attachId + '/ajax'}); +                    return false; +                }              });              if ($('#shownotice').length == 0) { diff --git a/lib/activity.php b/lib/activity.php index b20153213..ce14fa254 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -1044,6 +1044,7 @@ class Activity      public $id;      // ID of the activity      public $title;   // title of the activity      public $categories = array(); // list of AtomCategory objects +    public $enclosures = array(); // list of enclosure URL references      /**       * Turns a regular old Atom <entry> into a magical activity @@ -1140,6 +1141,10 @@ class Activity                  $this->categories[] = new AtomCategory($catEl);              }          } + +        foreach (ActivityUtils::getLinks($entry, 'enclosure') as $link) { +            $this->enclosures[] = $link->getAttribute('href'); +        }      }      /** diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php index a33e95d93..059c19e7c 100644 --- a/plugins/OStatus/classes/Ostatus_profile.php +++ b/plugins/OStatus/classes/Ostatus_profile.php @@ -550,7 +550,8 @@ class Ostatus_profile extends Memcached_DataObject                          'rendered' => $rendered,                          'replies' => array(),                          'groups' => array(), -                        'tags' => array()); +                        'tags' => array(), +                        'urls' => array());          // Check for optional attributes... @@ -595,6 +596,12 @@ class Ostatus_profile extends Memcached_DataObject              }          } +        // Atom enclosures -> attachment URLs +        foreach ($activity->enclosures as $href) { +            // @fixme save these locally or....? +            $options['urls'][] = $href; +        } +          try {              $saved = Notice::saveNew($oprofile->profile_id,                                       $content, @@ -620,7 +627,8 @@ class Ostatus_profile extends Memcached_DataObject      protected function purify($html)      {          require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php'; -        $config = array('safe' => 1); +        $config = array('safe' => 1, +                        'deny_attribute' => 'id,style,on*');          return htmLawed($html, $config);      } | 
