diff --git a/admin/contract_templates.php b/admin/contract_template.php similarity index 100% rename from admin/contract_templates.php rename to admin/contract_template.php diff --git a/admin/database_updates.php b/admin/database_updates.php index f1e138af..ee595709 100644 --- a/admin/database_updates.php +++ b/admin/database_updates.php @@ -4059,9 +4059,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { `contract_template_created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `contract_template_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, - `contract_template_archived_at` DATETIME NULL DEFAULT NULL, - - `company_id` INT(11) NOT NULL + `contract_template_archived_at` DATETIME NULL DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"); @@ -4115,10 +4113,31 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.7'"); } - // if (CURRENT_DATABASE_VERSION == '2.3.7') { - // // Insert queries here required to update to DB version 2.3.8 + if (CURRENT_DATABASE_VERSION == '2.3.7') { + + mysqli_query($mysqli, " + CREATE TABLE `asset_tags` ( + `asset_tag_asset_id` INT(11) NOT NULL, + `asset_tag_tag_id` INT(11) NOT NULL, + PRIMARY KEY (`asset_tag_asset_id`, `asset_tag_tag_id`), + CONSTRAINT `fk_asset` + FOREIGN KEY (`asset_tag_asset_id`) + REFERENCES `assets`(`asset_id`) + ON DELETE CASCADE, + CONSTRAINT `fk_tag` + FOREIGN KEY (`asset_tag_tag_id`) + REFERENCES `tags`(`tag_id`) + ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + "); + + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.8'"); + } + + // if (CURRENT_DATABASE_VERSION == '2.3.8') { + // // Insert queries here required to update to DB version 2.3.9 // // Then, update the database to the next sequential version - // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.8'"); + // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.9'"); // } } else { diff --git a/admin/includes/side_nav.php b/admin/includes/side_nav.php index 230f9fdd..3cbe9ccc 100644 --- a/admin/includes/side_nav.php +++ b/admin/includes/side_nav.php @@ -111,7 +111,7 @@
Contract Templates
diff --git a/admin/modals/contract_template/contract_template_add.php b/admin/modals/contract_template/contract_template_add.php index be330d95..ad4c5596 100644 --- a/admin/modals/contract_template/contract_template_add.php +++ b/admin/modals/contract_template/contract_template_add.php @@ -1,15 +1,18 @@Asset ID: = $asset_id ?>
diff --git a/agent/post/asset.php b/agent/post/asset.php index b22c8de5..8c1d22a6 100644 --- a/agent/post/asset.php +++ b/agent/post/asset.php @@ -20,6 +20,14 @@ if (isset($_POST['add_asset'])) { $asset_id = mysqli_insert_id($mysqli); + // Add Tags + if (isset($_POST['tags'])) { + foreach($_POST['tags'] as $tag) { + $tag = intval($tag); + mysqli_query($mysqli, "INSERT INTO asset_tags SET asset_tag_asset_id = $asset_id, asset_tag_tag_id = $tag"); + } + } + // Add Photo if (isset($_FILES['file']['tmp_name'])) { if ($new_file_name = checkFileUpload($_FILES['file'], array('jpg', 'jpeg', 'gif', 'png', 'webp'))) { @@ -108,6 +116,18 @@ if (isset($_POST['edit_asset'])) { mysqli_query($mysqli,"UPDATE assets SET asset_photo = '$new_file_name' WHERE asset_id = $asset_id"); } + // Tags + // Delete existing tags + mysqli_query($mysqli, "DELETE FROM asset_tags WHERE asset_tag_asset_id = $asset_id"); + + // Add new tags + if (isset($_POST['tags'])) { + foreach($_POST['tags'] as $tag) { + $tag = intval($tag); + mysqli_query($mysqli, "INSERT INTO asset_tags SET asset_tag_asset_id = $asset_id, asset_tag_tag_id = $tag"); + } + } + logAction("Asset", "Edit", "$session_name edited asset $name", $client_id, $asset_id); flash_alert("Asset $name edited"); @@ -188,6 +208,50 @@ if (isset($_GET['delete_asset'])) { } +if (isset($_POST['bulk_assign_asset_tags'])) { + + enforceUserPermission('module_client', 2); + + if (isset($_POST['asset_ids'])) { + + $count = count($_POST['asset_ids']); + + foreach($_POST['asset_ids'] as $asset_id) { + $asset_id = intval($asset_id); + + $sql = mysqli_query($mysqli,"SELECT asset_name, asset_client_id FROM assets WHERE asset_id = $asset_id"); + $row = mysqli_fetch_array($sql); + $asset_name = sanitizeInput($row['asset_name']); + $client_id = intval($row['asset_client_id']); + + if($_POST['remove_tags']) { + mysqli_query($mysqli, "DELETE FROM asset_tags WHERE asset_tag_asset_id = $asset_id"); + } + + if (isset($_POST['tags'])) { + foreach($_POST['tags'] as $tag) { + $tag = intval($tag); + + $sql = mysqli_query($mysqli,"SELECT * FROM asset_tags WHERE asset_tag_asset_id = $asset_id AND asset_tag_tag_id = $tag"); + if (mysqli_num_rows($sql) == 0) { + mysqli_query($mysqli, "INSERT INTO asset_tags SET asset_tag_asset_id = $asset_id, asset_tag_tag_id = $tag"); + } + } + } + + logAction("Asset", "Edit", "$session_name added tags to asset $asset_name", $client_id, $asset_id); + + } + + logAction("Asset", "Bulk Edit", "$session_name added tags for $asset_count assets", $client_id); + + flash_alert("Assigned tags for $count assets"); + } + + redirect(); + +} + if (isset($_POST['bulk_assign_asset_location'])) { validateCSRFToken($_POST['csrf_token']); diff --git a/db.sql b/db.sql index 6a1fddf5..42af2911 100644 --- a/db.sql +++ b/db.sql @@ -275,6 +275,23 @@ CREATE TABLE `asset_notes` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `asset_tags` +-- + +DROP TABLE IF EXISTS `asset_tags`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `asset_tags` ( + `asset_tag_asset_id` int(11) NOT NULL, + `asset_tag_tag_id` int(11) NOT NULL, + PRIMARY KEY (`asset_tag_asset_id`,`asset_tag_tag_id`), + KEY `fk_tag` (`asset_tag_tag_id`), + CONSTRAINT `fk_asset` FOREIGN KEY (`asset_tag_asset_id`) REFERENCES `assets` (`asset_id`) ON DELETE CASCADE, + CONSTRAINT `fk_tag` FOREIGN KEY (`asset_tag_tag_id`) REFERENCES `tags` (`tag_id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `assets` -- @@ -800,7 +817,6 @@ CREATE TABLE `contract_templates` ( `contract_template_created_at` datetime DEFAULT current_timestamp(), `contract_template_updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(), `contract_template_archived_at` datetime DEFAULT NULL, - `company_id` int(11) NOT NULL, PRIMARY KEY (`contract_template_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -2897,4 +2913,4 @@ CREATE TABLE `vendors` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-11-07 16:47:40 +-- Dump completed on 2025-11-11 19:57:21 diff --git a/includes/database_version.php b/includes/database_version.php index 550ddbd1..63110ccf 100644 --- a/includes/database_version.php +++ b/includes/database_version.php @@ -5,4 +5,4 @@ * It is used in conjunction with database_updates.php */ -DEFINE("LATEST_DATABASE_VERSION", "2.3.7"); +DEFINE("LATEST_DATABASE_VERSION", "2.3.8");