PDO::ERRMODE_EXCEPTION] ); $stmt = $pdo->query("SELECT DISTINCT company FROM assets ORDER BY company ASC"); $allCompanies = $stmt->fetchAll(PDO::FETCH_COLUMN); } catch (PDOException $e) { die("DB Connection failed: " . $e->getMessage()); } // Handle switch action if (isset($_POST['switch_company']) && in_array($_POST['switch_company'], $allCompanies)) { $_SESSION['company'] = $_POST['switch_company']; header("Location: main.php"); exit(); } } $company = $_SESSION['company'] ?? ''; if ($company === '') { if ($role === 'superadmin' && !empty($allCompanies)) { // Auto-select first company if none selected $company = $allCompanies[0]; $_SESSION['company'] = $company; } else { die('No company assigned in session.'); } } $userTableName = 'assets'; // Fixed table name $role = $_SESSION['role'] ?? 'user'; $currentUserEmail = $_SESSION['user_email'] ?? ''; $perPage = 25; $page = (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0) ? intval($_GET['page']) : 1; // Sorting $sort_by = $_GET['sort_by'] ?? ''; $sort_dir = strtolower($_GET['sort_dir'] ?? 'asc'); $sort_dir = in_array($sort_dir, ['asc','desc'], true) ? $sort_dir : 'asc'; // Columns to fetch from API (Term before UserEmail) $columns_to_show = [ 'Id','UUID','SN','OS','OSVersion','Hostname','Mobile','Manufacturer', 'Term','UserEmail','BYOD','Status','Warranty','Asset','PurchaseDate', 'CypherID','CypherKey' ]; // Columns editable in this grid $columns_editable = ['UserEmail','Status','Warranty','Asset','PurchaseDate','BYOD']; // Columns read-only in this grid $columns_readonly = ['Hostname']; // Columns hidden in this grid (but still fetched) $columns_hidden = ['Id','UUID','CypherID','CypherKey','OSVersion','Mobile']; // Visible columns in this grid (Term will appear before UserEmail here) $columns_visible = array_values(array_diff($columns_to_show, $columns_hidden)); if ($role === 'user') { $columns_editable = []; $columns_readonly = $columns_visible; } $fields_param = implode(',', $columns_to_show); // Hardcoded Status options $status_options = ["In Use","In Stock","In Repair","Replaced","Decommissioned","Lost or Stolen"]; // Search/filter $search_field = $_GET['search_field'] ?? ''; $search_text = $_GET['search_text'] ?? ''; $filterParamStr = ''; if ($search_field !== '' && $search_text !== '') { $filterParamStr = '&where=(' . rawurlencode($search_field) . ',like,' . rawurlencode('%' . $search_text . '%') . ')'; } // Helper: DB Connection try { $pdo = new PDO( "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4", DB_USER, DB_PASS, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] ); } catch (PDOException $e) { die("DB Connection failed: " . $e->getMessage()); } // Build Query $whereClauses = []; $params = []; if ($search_field !== '' && $search_text !== '') { $whereClauses[] = "`$search_field` LIKE :searchText"; $params[':searchText'] = '%' . $search_text . '%'; } if ($role === 'user') { $whereClauses[] = "`UserEmail` = :currentUserEmail"; $params[':currentUserEmail'] = $currentUserEmail; } // Always filter by company $whereClauses[] = "`company` = :company"; $params[':company'] = $company; $whereSql = ''; if (!empty($whereClauses)) { $whereSql = 'WHERE ' . implode(' AND ', $whereClauses); } // Count Total $countSql = "SELECT COUNT(*) FROM `$userTableName` $whereSql"; $stmt = $pdo->prepare($countSql); $stmt->execute($params); $totalRows = $stmt->fetchColumn(); $totalPages = $perPage > 0 ? (int)ceil($totalRows / $perPage) : 1; // Sorting $orderSql = ''; if ($sort_by !== '' && in_array($sort_by, $columns_to_show, true)) { $orderSql = "ORDER BY `$sort_by` " . ($sort_dir === 'desc' ? 'DESC' : 'ASC'); } else { // Default sort $orderSql = "ORDER BY Id DESC"; } // Pagination $offset = ($page - 1) * $perPage; $limitSql = "LIMIT :offset, :limit"; // Fetch Rows $sql = "SELECT * FROM `$userTableName` $whereSql $orderSql $limitSql"; $stmt = $pdo->prepare($sql); foreach ($params as $k => $v) { $stmt->bindValue($k, $v); } $stmt->bindValue(':offset', $offset, PDO::PARAM_INT); $stmt->bindValue(':limit', $perPage, PDO::PARAM_INT); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $companyUsers = []; if ($role === 'admin' || $role === 'manager' || $role === 'superadmin') { // Fetch all users for this company to populate the dropdown // We need to query the 'users' table. $uStmt = $pdo->prepare("SELECT email FROM users WHERE company = :comp ORDER BY email ASC"); $uStmt->execute([':comp' => $company]); $companyUsers = $uStmt->fetchAll(PDO::FETCH_COLUMN); } function escape($text) { return htmlspecialchars((string)$text, ENT_QUOTES, 'UTF-8'); } function count_files_in_term($row, $pdo, $tableName) { $id = $row['Id'] ?? 0; $stmt = $pdo->prepare("SELECT COUNT(*) FROM device_files WHERE device_id = :id AND device_table = 'assets'"); $stmt->execute([':id' => $id]); return $stmt->fetchColumn(); } // Preserve query params for pagination links $queryParams = $_GET; unset($queryParams['page']); $queryFilterStr = http_build_query($queryParams); $paginationSuffix = $queryFilterStr ? '&' . $queryFilterStr : ''; $startRecord = $totalRows > 0 ? (($page - 1) * $perPage) + 1 : 0; $endRecord = ($page * $perPage) > $totalRows ? $totalRows : ($page * $perPage); // Helper to build sorted header links and arrow function sort_link($col, $current_by, $current_dir) { $params = $_GET; $params['sort_by'] = $col; $params['sort_dir'] = ($current_by === $col && strtolower($current_dir) === 'asc') ? 'desc' : 'asc'; $qs = http_build_query($params); return '?' . $qs; } function sort_arrow($col, $current_by, $current_dir) { if ($col !== $current_by) return ''; return strtolower($current_dir) === 'asc' ? '▲' : '▼'; } ?>
Signed in as: ()