File: /home/mmickelson/martyknows.com/wp-content/plugins/filebird/includes/Controller/SyncController.php
<?php
namespace FileBird\Controller;
defined( 'ABSPATH' ) || exit;
use FileBird\Model\Folder as FolderModel;
class SyncController {
public function exportCSV( \WP_REST_Request $request ) {
$id = $request->get_param( 'id' );
if( !empty( $id ) ) {
$folders = get_option( 'filebird_backup_' . $id, array() );
} else {
$folders = FolderModel::exportAll();
}
return new \WP_REST_Response( array( 'folders' => $folders ) );
}
public function readCSV( \WP_REST_Request $request ) {
$params = $request->get_file_params();
$handle = \fopen( $params['file']['tmp_name'], 'r' );
$data = array();
$columns = array();
if ( false !== $handle ) {
$count = 1;
while ( 1 ) {
$row = fgetcsv( $handle, 0 );
if ( 1 === $count ) {
$columns = $row;
$count++;
continue;
}
if ( false === $row ) {
break;
}
foreach ( $columns as $key => $col ) {
$tmp[ $col ] = $row[ $key ];
}
$data[] = $tmp;
}
}
\fclose( $handle );
$check = array_diff(
$columns,
array(
'id',
'name',
'parent',
'type',
'ord',
'created_by',
'attachment_ids',
)
);
if ( count( $check ) > 0 ) {
return new \WP_REST_Response(
array(
'success' => false,
'message' => __( 'The uploaded file was not generated by FileBird. Please check again.', 'filebird' ),
)
);
}
return $data;
}
public function restoreFolderStructure( $folders ) {
$tree = $this->buildTree( $folders );
$folders_created = $this->run_import_folders( $tree );
$mess = sprintf( __( 'Congratulations! We imported successfully %d folders into <strong>FileBird.</strong>', 'filebird' ), count( $folders_created ) );
return new \WP_REST_Response( array( 'mess' => $mess ) );
}
public function buildTree( array &$data, $parentId = 0 ) {
$tree = array();
foreach ( $data as &$node ) {
if ( $node['parent'] == $parentId ) {
$children = $this->buildTree( $data, $node['id'] );
if ( $children ) {
$node['children'] = $children;
}
$tree[] = $node;
unset( $node );
}
}
return $tree;
}
public function run_import_folders( $folders, $parent = 0 ) {
$folders_created = array();
usort(
$folders,
function( $folder1, $folder2 ) {
return intval( $folder1['ord'] ) > intval( $folder2['ord'] ) ? 1 : -1;
}
);
foreach ( $folders as $folder ) {
$new_folder = FolderModel::newOrGet( $folder['name'], $parent );
$attachment_ids = ! empty( $folder['attachment_ids'] ) ? explode( '|', $folder['attachment_ids'] ) : false;
array_push( $folders_created, $folder['id'] );
if ( $attachment_ids && false !== $new_folder ) {
FolderModel::setFoldersForPosts( $attachment_ids, $new_folder['id'] );
}
if ( isset( $folder['children'] ) && count( $folder['children'] ) > 0 ) {
$new_child_folders = $this->run_import_folders( $folder['children'], $new_folder['id'] );
$folders_created = array_merge( $folders_created, $new_child_folders );
}
}
return $folders_created;
}
public function importCSV( \WP_REST_Request $request ) {
$data = $this->readCSV( $request );
$createdBy = intval( $request->get_param( 'userId' ) );
if ( $createdBy != '-1' ) {
$data = array_filter(
$data,
function( $item ) use ( $createdBy ) {
return $item['created_by'] == $createdBy;
}
);
}
$result = $this->restoreFolderStructure( $data );
return new \WP_REST_Response( array( 'success' => $result ) );
}
public function getImportCSVDetail( \WP_REST_Request $request ) {
$data = $this->readCSV( $request );
$users = \get_users(
array(
'include' => array_unique( array_column( $data, 'created_by' ) ),
)
);
$usersReturn = array();
foreach ( $users as $user ) {
$usersReturn[ $user->ID ] = $user->data->display_name . ' ' . __( 'folders', 'filebird' );
}
return new \WP_REST_Response( $usersReturn );
}
}