mirror of
https://github.com/friendica/friendica
synced 2025-04-26 21:50:11 +00:00
Attach: store, update, delete. Model and views
This commit is contained in:
parent
fc2b804ccc
commit
b7b3086263
3 changed files with 143 additions and 31 deletions
|
@ -149,4 +149,138 @@ class Attach extends BaseObject
|
|||
return $backendClass::get($backendRef);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Store new file metadata in db and binary in default backend
|
||||
*
|
||||
* @param string $data Binary data
|
||||
* @param integer $uid User ID
|
||||
* @param string $filename Filename
|
||||
* @param string $filetype Mimetype. optional
|
||||
* @param integer $filesize File size in bytes. optional
|
||||
* @param string $allow_cid Permissions, allowed contacts. optional, default = ''
|
||||
* @param string $allow_gid Permissions, allowed groups. optional, default = ''
|
||||
* @param string $deny_cid Permissions, denied contacts.optional, default = ''
|
||||
* @param string $deny_gid Permissions, denied greoup.optional, default = ''
|
||||
*
|
||||
* @return boolean/integer Row id on success, False on errors
|
||||
*/
|
||||
public function store($data, $uid, $filename, $filetype = '' , $filesize = -1, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '')
|
||||
{
|
||||
if ($filetype === '') {
|
||||
$filetype = Mimetype::getContentType($filename);
|
||||
}
|
||||
|
||||
if ($filesize < 0) {
|
||||
$filesize = strlen($data);
|
||||
}
|
||||
|
||||
$backend_class = StorageManager::getBackend();
|
||||
$backend_ref = '';
|
||||
if ($backend_class !== '') {
|
||||
$backend_ref = $backend_class::put($data);
|
||||
$data = '';
|
||||
}
|
||||
|
||||
$hash = System::createGUID(64);
|
||||
$created = DateTimeFormat::utcNow();
|
||||
|
||||
$fields = [
|
||||
'uid' => $uid,
|
||||
'hash' => $hash,
|
||||
'filename' => $filename,
|
||||
'filetype' => $filetype,
|
||||
'filesize' => $filesize,
|
||||
'data' => $data,
|
||||
'created' => $created,
|
||||
'edited' => $created,
|
||||
'allow_cid' => $allow_cid,
|
||||
'allow_gid' => $allow_gid,
|
||||
'deny_cid' => $deny_cid,
|
||||
'deny_gid' => $deny_gid,
|
||||
'backend-class' => $backend_class,
|
||||
'backend-ref' => $backend_ref
|
||||
];
|
||||
|
||||
$r = DBA::insert('attach', $fields);
|
||||
if ($r === true) {
|
||||
return DBA::lastInsertId();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Store new file metadata in db and binary in default backend from existing file
|
||||
*
|
||||
* @return boolean True on success
|
||||
*/
|
||||
public function storeFile($src, $uid, $filename = '', $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '')
|
||||
{
|
||||
if ($filename === '') {
|
||||
$filename = basename($src);
|
||||
}
|
||||
|
||||
$data = @file_get_contents($src);
|
||||
|
||||
return self::store($data, $uid, $filename, '', '', $allow_cid, $allow_gid, $deny_cid, $deny_gid);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Update an attached file
|
||||
*
|
||||
* @param array $fields Contains the fields that are updated
|
||||
* @param array $conditions Condition array with the key values
|
||||
* @param string $data File data to update. Optional, default null.
|
||||
* @param array|boolean $old_fields Array with the old field values that are about to be replaced (true = update on duplicate)
|
||||
*
|
||||
* @return boolean Was the update successfull?
|
||||
*
|
||||
* @see \Friendica\Database\DBA::update
|
||||
*/
|
||||
public static function update($fields, $conditions, $img = null, array $old_fields = [])
|
||||
{
|
||||
if (!is_null($data)) {
|
||||
// get items to update
|
||||
$items = self::select(['backend-class','backend-ref'], $conditions);
|
||||
|
||||
foreach($items as $item) {
|
||||
$backend_class = (string)$item['backend-class'];
|
||||
if ($backend_class !== '') {
|
||||
$fields['backend-ref'] = $backend_class::put($img->asString(), $item['backend-ref']);
|
||||
} else {
|
||||
$fields['data'] = $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$fields['edited'] = DateTimeFormat::utcNow();
|
||||
|
||||
return DBA::update('attach', $fields, $conditions, $old_fields);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Delete info from table and data from storage
|
||||
*
|
||||
* @param array $conditions Field condition(s)
|
||||
* @param array $options Options array, Optional
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @see \Friendica\Database\DBA::delete
|
||||
*/
|
||||
public static function delete(array $conditions, array $options = [])
|
||||
{
|
||||
// get items to delete data info
|
||||
$items = self::select(['backend-class','backend-ref'], $conditions);
|
||||
|
||||
foreach($items as $item) {
|
||||
$backend_class = (string)$item['backend-class'];
|
||||
if ($backend_class !== '') {
|
||||
$backend_class::delete($item['backend-ref']);
|
||||
}
|
||||
}
|
||||
|
||||
return DBA::delete('attach', $conditions, $options);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue