]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/File.php
Merge branch 'page_title_showstream' into 'nightly'
[quix0rs-gnu-social.git] / classes / File.php
index 76c00dc1f887d364095e3e987009091435b3f940..977c02bce68ef2d57a3a8c17bd64a86c2d1003c9 100644 (file)
@@ -82,27 +82,37 @@ class File extends Managed_DataObject
      * @param string $given_url
      * @return File
      */
-    public static function saveNew(array $redir_data, $given_url) {
+    public static function saveNew(array $redir_data, $given_url)
+    {
+        $file = null;
+        try {
+            // I don't know why we have to keep doing this but we run a last check to avoid
+            // uniqueness bugs.
+            $file = File::getByUrl($given_url);
+            return $file;
+        } catch (NoResultException $e) {
+            // We don't have the file's URL since before, so let's continue.
+        }
 
-        // I don't know why we have to keep doing this but I'm adding this last check to avoid
-        // uniqueness bugs.
+        if (!Event::handle('StartFileSaveNew', array(&$redir_data, $given_url))) {
+            throw new ServerException('File not saved due to an aborted StartFileSaveNew event.');
+        }
 
-        $file = File::getKV('urlhash', self::hashurl($given_url));
-        
-        if (!$file instanceof File) {
-            $file = new File;
-            $file->urlhash = self::hashurl($given_url);
-            $file->url = $given_url;
-            if (!empty($redir_data['protected'])) $file->protected = $redir_data['protected'];
-            if (!empty($redir_data['title'])) $file->title = $redir_data['title'];
-            if (!empty($redir_data['type'])) $file->mimetype = $redir_data['type'];
-            if (!empty($redir_data['size'])) $file->size = intval($redir_data['size']);
-            if (isset($redir_data['time']) && $redir_data['time'] > 0) $file->date = intval($redir_data['time']);
-            $file_id = $file->insert();
+        $file = new File;
+        $file->urlhash = self::hashurl($given_url);
+        $file->url = $given_url;
+        if (!empty($redir_data['protected'])) $file->protected = $redir_data['protected'];
+        if (!empty($redir_data['title'])) $file->title = $redir_data['title'];
+        if (!empty($redir_data['type'])) $file->mimetype = $redir_data['type'];
+        if (!empty($redir_data['size'])) $file->size = intval($redir_data['size']);
+        if (isset($redir_data['time']) && $redir_data['time'] > 0) $file->date = intval($redir_data['time']);
+        $file_id = $file->insert();
+
+        if ($file_id === false) {
+            throw new ServerException('File/URL metadata could not be saved to the database.');
         }
 
         Event::handle('EndFileSaveNew', array($file, $redir_data, $given_url));
-        assert ($file instanceof File);
         return $file;
     }
 
@@ -116,14 +126,14 @@ class File extends Managed_DataObject
      *
      * @fixme refactor this mess, it's gotten pretty scary.
      * @param string $given_url the URL we're looking at
-     * @param int $notice_id (optional)
+     * @param Notice $notice (optional)
      * @param bool $followRedirects defaults to true
      *
      * @return mixed File on success, -1 on some errors
      *
      * @throws ServerException on failure
      */
-    public static function processNew($given_url, $notice_id=null, $followRedirects=true) {
+    public static function processNew($given_url, Notice $notice=null, $followRedirects=true) {
         if (empty($given_url)) {
             throw new ServerException('No given URL to process');
         }
@@ -181,7 +191,7 @@ class File extends Managed_DataObject
                 //
                 // Seen in the wild with clojure.org, which redirects through
                 // wikispaces for auth and appends session data in the URL params.
-                $file = self::processNew($redir_url, $notice_id, /*followRedirects*/false);
+                $file = self::processNew($redir_url, $notice, /*followRedirects*/false);
                 File_redirection::saveNew($redir_data, $file->id, $given_url);
             }
 
@@ -193,8 +203,8 @@ class File extends Managed_DataObject
             }
         }
 
-        if (!empty($notice_id)) {
-            File_to_post::processNew($file->id, $notice_id);
+        if ($notice instanceof Notice) {
+            File_to_post::processNew($file, $notice);
         }
         return $file;
     }
@@ -471,7 +481,7 @@ class File extends Managed_DataObject
     /**
      * @param   string  $hashstr    String of (preferrably lower case) hexadecimal characters, same as result of 'hash_file(...)'
      */
-    static public function getByHash($hashstr, $alg=File::FILEHASH_ALG)
+    static public function getByHash($hashstr)
     {
         $file = new File();
         $file->filehash = strtolower($hashstr);
@@ -488,13 +498,13 @@ class File extends Managed_DataObject
             throw new ServerException('URL already exists in DB');
         }
         $sql = 'UPDATE %1$s SET urlhash=%2$s, url=%3$s WHERE urlhash=%4$s;';
-        $result = $this->query(sprintf($sql, $this->__table,
+        $result = $this->query(sprintf($sql, $this->tableName(),
                                              $this->_quote((string)self::hashurl($url)),
                                              $this->_quote((string)$url),
                                              $this->_quote((string)$this->urlhash)));
         if ($result === false) {
             common_log_db_error($this, 'UPDATE', __FILE__);
-            throw new ServerException("Could not UPDATE {$this->__table}.url");
+            throw new ServerException("Could not UPDATE {$this->tableName()}.url");
         }
 
         return $result;