*/ namespace AzDrive\Model; if ( !defined( 'ABSPATH' ) ) exit; use AzDrive\Classes\Helpers; use AzDrive\Model\PostModel; class FolderModel{ /** * Get all folders * */ public static function getAllFolders($select = '*', $isArray = true){ $sql = "SELECT {$select} FROM " . self::getTable(); $results = Helpers::query($sql, [], 'get_results', $isArray ? ARRAY_A : OBJECT_K); return !empty($results) ? $results : []; } /** * Get all folders of a type * @param string $type = ['attachment', 'post', 'page', 'custom'] * @param string $select * @param string $sql is extra sql query, for example: "AND `created_by` = user_id" * * @return array */ public static function getFoldersByType( $type = 'attachment', $select = '*', $sql = '' ){ if( !$type ) $type = 'attachment'; return Helpers::query( "SELECT {$select} FROM ". self::getTable() ." WHERE `type` = %s{$sql}", $type ); } /** * Get folder by ID */ public static function getFolderById($id, $select = '*'){ $id = intval($id); $sql = "SELECT {$select} FROM ". self::getTable() ." WHERE `id` = %d"; return Helpers::query($sql, $id, 'get_row', OBJECT); } /** * Get list folder from list IDS * @param array $ids * @param string $select * * @return array */ public static function getFoldersByIds( $ids, $select = 'id, title' ){ return Helpers::query( "SELECT {$select} FROM ". self::getTable() ." WHERE `id` IN (" . implode(',', $ids). ")" ); } /** * Get list subfolders of folder * * @param int $folder_id * @param string $select * @param string $user_id * * @return array */ public static function getSubfolders($folder_id = 0, $select = '*', $user_id = 0){ // search created_by $search = ''; if( $user_id ){ $search = " AND `created_by` = {$user_id}"; } $folder_id = intval($folder_id); $folder_id = $folder_id > 0 ? $folder_id : 0; $sql = "SELECT {$select} FROM ". self::getTable() ." WHERE `parent_id` = %d{$search} ORDER BY `title` ASC"; $folders = Helpers::query($sql, $folder_id, 'get_results', OBJECT); return $folders; } /** * Create new folder * @param array $fields * * @return array|bool */ public static function createFolder( $fields ){ global $wpdb; $fields = apply_filters( 'azdrive_folder_create_before', $fields ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery $wpdb->insert( self::getTable(), $fields ); $folder_id = $wpdb->insert_id; if( $folder_id ){ return $folder_id; } return false; } /** * Update folder * * @param int $folder_id * @param array $fields * * @return int */ public static function updateFolder($folder_id, $fields){ global $wpdb; $folder_id = intval($folder_id); if( $folder_id <= 0 ) return false; $fields = apply_filters( 'azdrive_folder_update_before', $fields, $folder_id ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery return $wpdb->update( self::getTable(), $fields, array( 'id' => $folder_id ) ); } /** * Add or update folder * @param array $fields */ public static function addOrUpdateFolder($fields){ // check folder if( isset($fields['id']) && $fields['id'] > 0 ){ $folder = self::getFolderById($fields['id']); if( !$folder || !$folder->id ) return false; // update folder return self::updateFolder($folder->id, $fields); } // create new folder return self::createFolder($fields); } /** * Delete folder * deleteOriginal: delete original files in this folder * @param int $id is folder ID */ public static function deleteFolder($folder_id, $deleteOriginal = false){ global $wpdb; $folder = self::getFolderById($folder_id, 'id, parent_id'); if( !$folder || !$folder->id ) return false; // delete subfolders $subfolders = self::getSubfolders($folder_id, 'id'); if( $subfolders && count($subfolders) > 0 ){ foreach( $subfolders as $subfolder ){ self::deleteFolder($subfolder->id, $deleteOriginal); } } // delete files PostModel::deleteAllPostsFromFolder($folder_id, $deleteOriginal); // phpcs:ignore WordPress.DB.DirectDatabaseQuery $wpdb->delete( self::getTable(), array( 'id' => $folder_id ) ); return true; } /** * Delete files and folders */ public static function deleteAll(){ global $wpdb; // phpcs:ignore WordPress.DB $wpdb->query( "DELETE FROM ". self::getTable() ); } /** * Get table name */ public static function getTable($name = 'folders'){ global $wpdb; return "{$wpdb->prefix}az_{$name}"; } }