mirror of
https://github.com/itflow-org/itflow
synced 2026-02-28 02:44:53 +00:00
Updated bulk action js to pass the checkboxe names into the get array this allows the use of multiple checkbox name arrays to be passed at once instead of just selected_ids had to update each bulk model from selected_ids to to the array that was passed. This was important so we could mix files and documents together
This commit is contained in:
@@ -2,17 +2,26 @@
|
||||
|
||||
require_once '../../../includes/modal_header.php';
|
||||
|
||||
$client_id = intval($_GET['client_id']);
|
||||
$selected_ids = array_map('intval', $_GET['selected_ids'] ?? []);
|
||||
$client_id = intval($_GET['client_id'] ?? 0);
|
||||
$current_folder_id = intval($_GET['current_folder_id'] ?? 0);
|
||||
|
||||
$count = count($selected_ids);
|
||||
// Selected IDs from JS (may be empty arrays)
|
||||
$file_ids = array_map('intval', $_GET['file_ids'] ?? []);
|
||||
$document_ids = array_map('intval', $_GET['document_ids'] ?? []);
|
||||
|
||||
$count_files = count($file_ids);
|
||||
$count_docs = count($document_ids);
|
||||
$total = $count_files + $count_docs;
|
||||
|
||||
ob_start();
|
||||
|
||||
?>
|
||||
|
||||
<div class="modal-header bg-dark">
|
||||
<h5 class="modal-title"><i class="fa fa-fw fa-exchange-alt mr-2"></i>Move <strong><?= $count ?></strong> Files</h5>
|
||||
<h5 class="modal-title">
|
||||
<i class="fa fa-fw fa-exchange-alt mr-2"></i>
|
||||
Move <strong><?= $total ?></strong> Item<?= $total === 1 ? '' : 's' ?>
|
||||
</h5>
|
||||
<button type="button" class="close text-white" data-dismiss="modal">
|
||||
<span>×</span>
|
||||
</button>
|
||||
@@ -20,10 +29,22 @@ ob_start();
|
||||
|
||||
<form action="post.php" method="post" autocomplete="off">
|
||||
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
|
||||
<?php foreach ($selected_ids as $id) { ?><input type="hidden" name="file_ids[]" value="<?= $id ?>"><?php } ?>
|
||||
|
||||
<?php foreach ($file_ids as $id): ?>
|
||||
<input type="hidden" name="file_ids[]" value="<?= $id ?>">
|
||||
<?php endforeach; ?>
|
||||
|
||||
<?php foreach ($document_ids as $id): ?>
|
||||
<input type="hidden" name="document_ids[]" value="<?= $id ?>">
|
||||
<?php endforeach; ?>
|
||||
|
||||
<div class="modal-body">
|
||||
|
||||
<p>
|
||||
Files: <strong><?= $count_files ?></strong><br>
|
||||
Documents: <strong><?= $count_docs ?></strong>
|
||||
</p>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Target Folder</label>
|
||||
<div class="input-group">
|
||||
@@ -32,75 +53,81 @@ ob_start();
|
||||
</div>
|
||||
<select class="form-control select2" name="bulk_folder_id">
|
||||
<option value="0">/</option>
|
||||
<?php
|
||||
// Fetch all folders for the client
|
||||
$sql_all_folders = mysqli_query($mysqli, "SELECT folder_id, folder_name, parent_folder FROM folders WHERE folder_location = 1 AND folder_client_id = $client_id ORDER BY folder_name ASC");
|
||||
$folders = array();
|
||||
<?php
|
||||
// NOTE: folder_location is gone now, so just use folder_client_id
|
||||
$sql_all_folders = mysqli_query(
|
||||
$mysqli,
|
||||
"SELECT folder_id, folder_name, parent_folder
|
||||
FROM folders
|
||||
WHERE folder_client_id = $client_id
|
||||
ORDER BY folder_name ASC"
|
||||
);
|
||||
|
||||
// Build an associative array of folders indexed by folder_id
|
||||
while ($row = mysqli_fetch_assoc($sql_all_folders)) {
|
||||
$folders[$row['folder_id']] = array(
|
||||
'folder_id' => intval($row['folder_id']),
|
||||
'folder_name' => nullable_htmlentities($row['folder_name']),
|
||||
'parent_folder' => intval($row['parent_folder']),
|
||||
'children' => array()
|
||||
);
|
||||
$folders = [];
|
||||
|
||||
while ($row = mysqli_fetch_assoc($sql_all_folders)) {
|
||||
$folders[$row['folder_id']] = [
|
||||
'folder_id' => (int)$row['folder_id'],
|
||||
'folder_name' => nullable_htmlentities($row['folder_name']),
|
||||
'parent_folder'=> (int)$row['parent_folder'],
|
||||
'children' => []
|
||||
];
|
||||
}
|
||||
|
||||
// Build hierarchy
|
||||
foreach ($folders as $id => &$folder) {
|
||||
if ($folder['parent_folder'] != 0 && isset($folders[$folder['parent_folder']])) {
|
||||
$folders[$folder['parent_folder']]['children'][] = &$folder;
|
||||
}
|
||||
}
|
||||
unset($folder);
|
||||
|
||||
// Build the folder hierarchy
|
||||
foreach ($folders as $id => &$folder) {
|
||||
if ($folder['parent_folder'] != 0 && isset($folders[$folder['parent_folder']])) {
|
||||
$folders[$folder['parent_folder']]['children'][] = &$folder;
|
||||
$root_folders = [];
|
||||
foreach ($folders as $id => $folder) {
|
||||
if ($folder['parent_folder'] == 0) {
|
||||
$root_folders[] = $folder;
|
||||
}
|
||||
}
|
||||
|
||||
// Optional: if you want to default-select current folder, pass it in GET
|
||||
$current_folder_id = intval($_GET['current_folder_id'] ?? 0);
|
||||
|
||||
$stack = [];
|
||||
foreach (array_reverse($root_folders) as $folder) {
|
||||
$stack[] = ['folder' => $folder, 'level' => 0];
|
||||
}
|
||||
|
||||
while (!empty($stack)) {
|
||||
$node = array_pop($stack);
|
||||
$folder = $node['folder'];
|
||||
$level = $node['level'];
|
||||
|
||||
$indentation = str_repeat(' ', $level * 4);
|
||||
|
||||
$selected = ($folder['folder_id'] === $current_folder_id) ? 'selected' : '';
|
||||
|
||||
echo "<option value=\"{$folder['folder_id']}\" $selected>$indentation{$folder['folder_name']}</option>";
|
||||
|
||||
if (!empty($folder['children'])) {
|
||||
foreach (array_reverse($folder['children']) as $child) {
|
||||
$stack[] = ['folder' => $child, 'level' => $level + 1];
|
||||
}
|
||||
}
|
||||
unset($folder); // Break the reference
|
||||
|
||||
// Prepare a list of root folders
|
||||
$root_folders = array();
|
||||
foreach ($folders as $id => $folder) {
|
||||
if ($folder['parent_folder'] == 0) {
|
||||
$root_folders[] = $folder;
|
||||
}
|
||||
}
|
||||
|
||||
// Display the folder options iteratively
|
||||
$stack = array();
|
||||
foreach (array_reverse($root_folders) as $folder) {
|
||||
$stack[] = array('folder' => $folder, 'level' => 0);
|
||||
}
|
||||
|
||||
while (!empty($stack)) {
|
||||
$node = array_pop($stack);
|
||||
$folder = $node['folder'];
|
||||
$level = $node['level'];
|
||||
|
||||
// Indentation for subfolders
|
||||
$indentation = str_repeat(' ', $level * 4);
|
||||
|
||||
// Check if this folder is selected
|
||||
$selected = '';
|
||||
if ($folder['folder_id'] == $get_folder_id) {
|
||||
$selected = 'selected';
|
||||
}
|
||||
|
||||
echo "<option value=\"{$folder['folder_id']}\" $selected>$indentation{$folder['folder_name']}</option>";
|
||||
|
||||
// Add children to the stack
|
||||
if (!empty($folder['children'])) {
|
||||
foreach (array_reverse($folder['children']) as $child_folder) {
|
||||
$stack[] = array('folder' => $child_folder, 'level' => $level + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="submit" name="bulk_move_files" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Move Files</button>
|
||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||
<button type="submit" name="bulk_move_files" class="btn btn-primary text-bold">
|
||||
<i class="fa fa-check mr-2"></i>Move Files
|
||||
</button>
|
||||
<button type="button" class="btn btn-light" data-dismiss="modal">
|
||||
<i class="fa fa-times mr-2"></i>Cancel
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user