%PDF- %PDF-
| Direktori : /www/klubovnaostrava/test/wp-content/plugins/filebird/includes/Controller/ |
| Current File : //www/klubovnaostrava/test/wp-content/plugins/filebird/includes/Controller/FolderController.php |
<?php
namespace FileBird\Controller;
use FileBird\Model\Folder as FolderModel;
use FileBird\Model\UserSettingModel;
use FileBird\Classes\Tree;
defined( 'ABSPATH' ) || exit;
class FolderController extends Controller {
public function getFolders( \WP_REST_Request $request ) {
$order = sanitize_key( $request->get_param( 'order' ) );
$orderby = sanitize_key( $request->get_param( 'orderby' ) );
$lang = sanitize_key( $request->get_param( 'language' ) );
$search = sanitize_text_field( $request->get_param( 'search' ) );
$tree = ( new Tree( $orderby, $order, $search ) )->get();
return rest_ensure_response(
array(
'tree' => $tree,
'allAttachmentsCount' => Tree::getCount( -1, $lang ),
'attachmentsCount' => FolderModel::countAttachments( $lang ),
)
);
}
public function setFolderCounter( \WP_REST_Request $request ) {
$type = sanitize_key( $request->get_param( 'type' ) );
$lang = sanitize_key( $request->get_param( 'language' ) );
// add_filter(
// 'fbv_counter_type',
// function() use ( $type ) {
// return $type;
// }
// );
UserSettingModel::getInstance()->setFolderCounterType( $type );
return rest_ensure_response( FolderModel::countAttachments( $lang ) );
}
public function updateFolderColor( \WP_REST_Request $request ) {
$id = sanitize_key( $request->get_param( 'folderId' ) );
$color = sanitize_hex_color( $request->get_param( 'color' ) );
$option = get_option( 'fbv_folder_colors', array() );
$option[ $id ] = $color;
update_option( 'fbv_folder_colors', $option );
return rest_ensure_response( true );
}
public function createFolder( \WP_REST_Request $request ) {
$name = $request->get_param( 'title' );
$parent = $request->get_param( 'parent' );
$name = isset( $name ) ? sanitize_text_field( wp_unslash( $name ) ) : '';
$parent = isset( $parent ) ? sanitize_text_field( $parent ) : '';
if ( $name != '' && $parent != '' ) {
$insert = FolderModel::newOrGet( $name, $parent, false );
if ( $insert !== false ) {
return rest_ensure_response( $insert );
} else {
return new \WP_Error( 'folder_name_exist', __( 'A folder with this name already exists. Please choose another one.', 'filebird' ) );
}
} else {
return new \WP_Error( 'validation_failed', __( 'Validation failed', 'filebird' ) );
}
}
public function updateFolder( \WP_REST_Request $request ) {
$id = $request->get_param( 'id' );
$parent = $request->get_param( 'parent' );
$name = $request->get_param( 'title' );
$id = isset( $id ) ? sanitize_text_field( $id ) : '';
$parent = isset( $parent ) ? intval( sanitize_text_field( $parent ) ) : '';
$name = isset( $name ) ? sanitize_text_field( wp_unslash( $name ) ) : '';
$current_user_id = get_current_user_id();
$folder_per_user = get_option( 'njt_fbv_folder_per_user', '0' ) === '1';
if ( is_numeric( $id ) && is_numeric( $parent ) && $name != '' && FolderModel::verifyAuthor( $id, $current_user_id, $folder_per_user ) ) {
$update = FolderModel::updateFolderName( $name, $parent, $id );
if ( true === $update ) {
return rest_ensure_response( $update );
} else {
return new \WP_Error( 'folder_name_exist', __( 'A folder with this name already exists. Please choose another one.', 'filebird' ) );
}
}
return new \WP_Error( 'validation_failed', __( 'Validation failed', 'filebird' ) );
}
public function updateFolderOrder( \WP_REST_Request $request ) {
global $wpdb;
$data = array(
'dropPosition' => $request->get_param( 'dropPosition' ),
'dropNodeId' => $request->get_param( 'dropNodeId' ),
'dragNodeId' => $request->get_param( 'dragNodeId' ),
'toParentId' => $request->get_param( 'toParentId' ),
);
$lang = sanitize_key( $request->get_param( 'language' ) );
foreach ( $data as $param ) {
if ( strlen( $param ) === 0 || ! is_numeric( $param ) ) {
return new \WP_Error( 'invalid_params', __( 'Invalid params', 'filebird' ), array( 'status' => 400 ) );
}
}
$old_node = $wpdb->get_row(
$wpdb->prepare(
"SELECT id, parent, ord FROM {$wpdb->prefix}fbv WHERE `id` = %d AND `created_by` = %d",
$data['dropNodeId'],
apply_filters( 'fbv_folder_created_by', 0 )
),
ARRAY_A
);
// Drop folder inside another folder
if ( 0 === $data['dropPosition'] ) {
$children = $wpdb->get_results(
$wpdb->prepare(
"SELECT id, ord FROM {$wpdb->prefix}fbv WHERE (parent = %d and created_by = %d and id != %d) ORDER BY ord+0 ASC",
$data['dropNodeId'],
apply_filters( 'fbv_folder_created_by', 0 ),
$data['dragNodeId']
)
);
array_unshift(
$children,
(object) array(
'id' => $data['dragNodeId'],
'ord' => 0,
)
);
foreach ( $children as $key => $child ) {
$wpdb->update(
"{$wpdb->prefix}fbv",
array(
'ord' => $key + 1,
'parent' => $data['dropNodeId'],
),
array(
'id' => $child->id,
),
array( '%d', '%d' ),
array( '%d' )
);
}
}
if ( 1 === $data['dropPosition'] ) {
$children = $wpdb->get_results(
$wpdb->prepare(
"SELECT id, ord FROM {$wpdb->prefix}fbv WHERE (parent = %d and created_by = %d and id != %d) ORDER BY ord+0 ASC",
$data['toParentId'],
apply_filters( 'fbv_folder_created_by', 0 ),
$data['dragNodeId']
)
);
$ord = 0;
foreach ( $children as $child ) {
$wpdb->update(
"{$wpdb->prefix}fbv",
array(
'ord' => $ord++,
'parent' => $data['toParentId'],
),
array(
'id' => $child->id,
),
array( '%d', '%d' ),
array( '%d' )
);
if ( intval( $child->id ) === $data['dropNodeId'] ) {
$wpdb->update(
"{$wpdb->prefix}fbv",
array(
'ord' => $ord++,
'parent' => $data['toParentId'],
),
array(
'id' => $data['dragNodeId'],
),
array( '%d', '%d' ),
array( '%d' )
);
}
}
}
if ( -1 === $data['dropPosition'] ) {
$children = $wpdb->get_results(
$wpdb->prepare(
"SELECT id, ord FROM {$wpdb->prefix}fbv WHERE (parent = %d and created_by = %d and id != %d) ORDER BY ord+0 ASC",
$data['toParentId'],
apply_filters( 'fbv_folder_created_by', 0 ),
$data['dragNodeId']
)
);
array_unshift(
$children,
(object) array(
'id' => $data['dragNodeId'],
'ord' => 0,
)
);
foreach ( $children as $key => $child ) {
$wpdb->update(
"{$wpdb->prefix}fbv",
array(
'ord' => $key + 1,
'parent' => $data['toParentId'],
),
array(
'id' => $child->id,
),
array( '%d', '%d' ),
array( '%d' )
);
}
}
if ( ! is_null( $old_node ) && ( $old_node['parent'] != $data['toParentId'] ) ) {
do_action( 'fbv_folder_parent_updated', $data['dragNodeId'], $data['toParentId'] );
}
if ( UserSettingModel::getInstance()->get( 'FOLDER_COUNTER_TYPE' ) === 'counter_file_in_folder_and_sub' ) {
return rest_ensure_response( FolderModel::countAttachments( $lang ) );
}
return rest_ensure_response( true );
}
public function deleteFolder( \WP_REST_Request $request ) {
$ids = $request->get_param( 'ids' );
$lang = sanitize_key( $request->get_param( 'language' ) );
if ( empty( $ids ) ) {
return new \WP_Error( 'delete_failed', __( 'Can\'t delete folder, please try again later', 'filebird' ) );
}
$ids = array_map( 'intval', $ids );
$current_user_id = get_current_user_id();
$folder_per_user = get_option( 'njt_fbv_folder_per_user', '0' ) === '1';
foreach ( $ids as $k => $id ) {
if ( ! FolderModel::verifyAuthor( $id, $current_user_id, $folder_per_user ) ) {
unset( $ids[ $k ] );
}
}
$folderCounter = FolderModel::delete( $ids, $lang );
return rest_ensure_response( $folderCounter );
}
public function assignFolder( \WP_REST_Request $request ) {
$folderId = $request->get_param( 'folderId' );
$ids = $request->get_param( 'ids' );
$lang = sanitize_key( $request->get_param( 'language' ) );
if ( empty( $folderId ) && ! is_numeric( $folderId ) && empty( $ids ) ) {
return new \WP_Error( 'validation_failed', __( 'Validation failed', 'filebird' ) );
}
$ids = array_map( 'intval', apply_filters( 'fbv_ids_assigned_to_folder', $ids ) );
$current_user_id = get_current_user_id();
$user_has_own_folder = get_option( 'njt_fbv_folder_per_user', '0' ) === '1';
if( ! FolderModel::verifyAuthor( $folderId, $current_user_id, $user_has_own_folder ) ) {
return new \WP_Error( 'validation_failed', __( 'Permisson Denied.', 'filebird' ) );
}
$folderCounter = FolderModel::assignFolder( $folderId, $ids, $lang );
return rest_ensure_response( $folderCounter );
}
public function gutenbergGetFolder() {
$_folders = Tree::getFolders( null, null, true );
$folders = array(
array(
'value' => 0,
'label' => __( 'Please choose folder', 'filebird' ),
'disabled' => true,
),
);
foreach ( $_folders as $k => $v ) {
$folders[] = array(
'value' => $v['id'],
'label' => $v['text'],
);
}
wp_send_json_success( $folders );
}
}