]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Attach.php
Attach: store, update, delete. Model and views
[friendica.git] / src / Model / Attach.php
index 13b0adb6f2217caf6d4b4addbc311c7d0fc395d9..2911136188d53b9ab2a492ea33f74c6690c3f817 100644 (file)
@@ -149,4 +149,138 @@ class Attach extends BaseObject
                        return $backendClass::get($backendRef);
                }
        }
-}
\ No newline at end of file
+
+       /**
+        * @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);
+       }
+}