* @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;
}
/**
* @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);
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;