]> 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 d4abbfddeef3f5f45c26621fce6414c16e75827f..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;
     }
 
@@ -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;