Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
ef7794c
Added non payment invoice reminder / Late fee if enabled after 1 day …
johnnyq Feb 19, 2026
129e95f
Added Net 45 Days, removed 14 Days as this isnt typically used anywhere
johnnyq Feb 19, 2026
8efa354
Fix Task Sorting in ticket templates
johnnyq Feb 21, 2026
702d968
clarify PR stance
Feb 26, 2026
1ba19cc
New Ticket Parsing - Anyone CC'ed onto the original email that create…
Feb 26, 2026
9cb1ff7
Add new optional beta email parser thats based on ImapEngine instead …
johnnyq Feb 26, 2026
87fd23f
Beta Mail Parser Add inline images as attachments keeps the DB clean
johnnyq Feb 26, 2026
04a74b5
Revert "Beta Mail Parser Add inline images as attachments keeps the D…
johnnyq Feb 26, 2026
7927312
Revert "Revert "Beta Mail Parser Add inline images as attachments kee…
johnnyq Feb 26, 2026
ac4bb32
Revert "Beta Mail Parser Add inline images as attachments keeps the D…
johnnyq Feb 26, 2026
92fba49
Revert "Add new optional beta email parser thats based on ImapEngine …
johnnyq Feb 26, 2026
adb4370
Update Networks, remove subnet mask in favor of CIDR, Global View sho…
johnnyq Feb 28, 2026
10c3794
UI: Update icoms for description inputs
johnnyq Mar 1, 2026
f09be24
Rearrange add/edit Asset field Order, updated icons, minor ui work
johnnyq Mar 1, 2026
ae81092
Updated Placeholders to set better formal expectations
johnnyq Mar 1, 2026
ef1b65d
Client: Add missing CSRF checks, and missing enforcements
johnnyq Mar 2, 2026
c2cbfc5
Add Hidden Inpout csrf token to client download pdf
johnnyq Mar 2, 2026
63f6faf
Ticket: Add missing CSRF checks
johnnyq Mar 2, 2026
9213249
Recurring Ticket: Add missing CSRF checks
johnnyq Mar 2, 2026
1508e6b
Project: Add missing CSRF checks
johnnyq Mar 2, 2026
5463842
rename unarchive project to restore project
johnnyq Mar 2, 2026
308dc6e
Ticket Tasks: Add missing CSRF checks and other CSRF checks missed in…
johnnyq Mar 2, 2026
e1daa14
Calendar: Add missing CSRF checks
johnnyq Mar 2, 2026
2c47001
Quote: Add missing CSRF checks and missing permission on export quote…
johnnyq Mar 2, 2026
4440581
Invoice: Add missing CSRF checks and missing permissions
johnnyq Mar 2, 2026
f653752
Recurring Invoice: Add missing CSRF checks and missing permissions in…
johnnyq Mar 2, 2026
af1ebfe
Revenues: Add missing CSRF checks
johnnyq Mar 2, 2026
36ac006
Products: Add missing CSRF checks change wording from unarchive to re…
johnnyq Mar 2, 2026
5c3ff91
Lower autoclose minimum allowed value to 24 hours (this still works o…
Mar 2, 2026
795144b
Fix documents => files redirect after deletion (since we merged these)
Mar 2, 2026
dee5085
Allow associating a quote with a ticket
Mar 2, 2026
7e515af
Payments: Add missing CSRF and additonal perm check
johnnyq Mar 2, 2026
5b49908
Vendors: Add missing CSRF, need to update the permissions as a vendor…
johnnyq Mar 2, 2026
1d5fcee
Expenses: Add missing CSRF, Add missing perms
johnnyq Mar 2, 2026
3d80d15
Recurring Expenses: Add missing CSRF, Add missing permission checks
johnnyq Mar 2, 2026
5509807
Accounts: Add missing CSRF checks
johnnyq Mar 2, 2026
7b438e2
Transfers: Add missing CSRF checks
johnnyq Mar 2, 2026
8a13351
Trips: Add missing CSRF checks, we may need another permission module…
johnnyq Mar 2, 2026
ad16e92
Use true Decimal minute reporting in Client Time Audit Detail Report
johnnyq Mar 2, 2026
d936339
Contacts: Add missing CSRF checks, add missing permission checks, ren…
johnnyq Mar 2, 2026
18e180e
Vendors: Check if client_id is set to enforce the right permission ch…
johnnyq Mar 2, 2026
c71d1f1
locations: Add missing CSRF checks, add missing permission checks, re…
johnnyq Mar 3, 2026
24b244b
assets: Add missing CSRF checks, add missing permission checks, renam…
johnnyq Mar 3, 2026
1740599
software licenses: Add missing CSRF checks, add missing permission ch…
johnnyq Mar 3, 2026
023cb4f
credentials: Add missing CSRF checks
johnnyq Mar 3, 2026
8bac4f9
networks: Add missing CSRF checks rename unarchive to restore
johnnyq Mar 3, 2026
e7b5e71
racks: Add missing CSRF checks rename unarchive to restore
johnnyq Mar 3, 2026
dd2ac00
certificates: Add missing CSRF checks rename unarchive to restore
johnnyq Mar 3, 2026
b5fb14e
domains: Add missing CSRF checks rename unarchive to restore
johnnyq Mar 3, 2026
6bbe887
services: Add missing CSRF checks rename unarchive to restore
johnnyq Mar 3, 2026
9017106
document and files and folders: Add missing CSRF checks, add missing …
johnnyq Mar 3, 2026
6da8821
Add hidden form field to folder modals as well
johnnyq Mar 3, 2026
918b40a
Add missing CSRF Checks in admin area and settings
johnnyq Mar 3, 2026
9d9ebe7
Added Bulk Net Terms editing in clients
johnnyq Mar 3, 2026
f9558d4
Assets: Added IPv6 Address to assets list and interface list, Updated…
johnnyq Mar 3, 2026
ef3a7d0
Rearrange columns for network interfaces make better logicl sense
johnnyq Mar 3, 2026
c0f2620
Swapped Location and Contact Columns in Clients Listing for better sc…
johnnyq Mar 3, 2026
8cd1668
Cleanup Ticket Template Details header
johnnyq Mar 3, 2026
99218d0
Document Templates: UI Enhancement / Cleanup Document templates
johnnyq Mar 3, 2026
fe40648
UI Update for Role Listing
johnnyq Mar 3, 2026
b94604a
Assets List: Major UI / UX Update removed some columns to reduce spac…
johnnyq Mar 3, 2026
3481431
Add New ticket button in client top header button, spruce up credenti…
johnnyq Mar 3, 2026
220e1d4
Make new ticket first in client top head
johnnyq Mar 3, 2026
dd5fde4
Client Overview: Cleaned up UI shrunk table sizes and card headers
johnnyq Mar 3, 2026
5cbed12
Use new custom CSS Class for Column Checkboxes so they are a static 40px
johnnyq Mar 4, 2026
af4327f
Show Full Event title in calendar on hover
johnnyq Mar 4, 2026
f77bd4f
Calendar: Add Delete Calendar, rename System calendar to Built-in cal…
johnnyq Mar 4, 2026
302914c
Add New Calendar Hint
johnnyq Mar 4, 2026
47b8ec6
Simple Calendar naming
johnnyq Mar 4, 2026
203b161
Add Billing Time Increment Option in Client Ticket Time Detail Report…
johnnyq Mar 4, 2026
994526e
Asset details Modal: Reduce top bar Icon Size, Add IPv6 to interfaces…
johnnyq Mar 5, 2026
a81edc1
Add CSRF Checks on Agent ajax endpoints that would update / delete or…
johnnyq Mar 5, 2026
30357b9
Add CSRF Checks to notifications and ensure the user dismissing the n…
johnnyq Mar 5, 2026
8fc3dfe
New Function enforceClientAccess() and added to contact post and clie…
johnnyq Mar 6, 2026
71b19e1
Locations and tickets enforceClientAccess in POST fix a few missing c…
johnnyq Mar 6, 2026
3be815c
Recurring tickets: enforceClientAccess in POST
johnnyq Mar 6, 2026
de8b9df
Projects: enforceClientAccess in POST only if a client is assigned to…
johnnyq Mar 6, 2026
df5c350
Vendors: enforceClientAccess in POST only if vendor is assigned a cli…
johnnyq Mar 6, 2026
3983c45
Calendar Events: use client_id instead of client in POST and enforceC…
johnnyq Mar 6, 2026
8afa2db
Assets: remove client_id from edit asset modal as it should get the c…
johnnyq Mar 6, 2026
91976cc
Software: remove client_id post from edit software modal as it should…
johnnyq Mar 6, 2026
7d41782
Credential: remove client_id post from edit credential modal as it sh…
johnnyq Mar 6, 2026
a252ff7
Racks: remove client_id post from edit rack and add rack device moda…
johnnyq Mar 6, 2026
7563148
certificates: remove client_id post from edit certificate modal as it…
johnnyq Mar 6, 2026
e7b70c7
domains: remove client_id post from edit domain modal as it should ge…
johnnyq Mar 6, 2026
a1931f5
services: remove client_id post from edit service modal as it should …
johnnyq Mar 6, 2026
8ad8fd0
files, folders, documents: remove client_id post from edit and link m…
johnnyq Mar 6, 2026
202f55c
invoices: remove client_id post from edit and link modals as it shoul…
johnnyq Mar 6, 2026
111a30f
recurring invoices: enforceClientAccess
johnnyq Mar 6, 2026
6f0a2a5
quotes: enforceClientAccess
johnnyq Mar 6, 2026
6e3a36d
payments: enforceClientAccess
johnnyq Mar 6, 2026
74ce8f4
Trips: enforceClientAccess only if client is referenced
johnnyq Mar 6, 2026
fcf098f
use client_id as post var name not client
johnnyq Mar 6, 2026
60b6c24
Change expense client to client_id post var
johnnyq Mar 6, 2026
c8273b2
Client related modal and post move client_id get after post
johnnyq Mar 7, 2026
6d2cb0a
Split out item edits into seperate posts and modals for editing invoi…
johnnyq Mar 7, 2026
8de7b20
Add CSRF Checks in the client portal
johnnyq Mar 7, 2026
726b1cd
Fix Stripe Add Payment in client portal regression on CSRF check
johnnyq Mar 7, 2026
fe9bc05
Rearrange fields so they make a better workflow in software edit and add
johnnyq Mar 7, 2026
083262f
Dont require gateway on network edit also make vlan field numeric
johnnyq Mar 7, 2026
92b98b9
Better field arrangedment for better workflow for rack edit add
johnnyq Mar 7, 2026
8dbbef3
Fix file upload missing client_id
johnnyq Mar 7, 2026
ffb9700
Bump TCPDF from 6.10.1 to 6.11.2
johnnyq Mar 7, 2026
11ba077
Bump fullcalendar from 6.1.19 to 6.1.20
johnnyq Mar 7, 2026
526fa1a
Bump stripe-php from 19.0.0 to 19.4.1
johnnyq Mar 7, 2026
e44d571
Allow Project template ticket templates to be Drag and drop sorted in…
johnnyq Mar 7, 2026
2b6ebca
Fix Project templates listing to not open edit modal when project is …
johnnyq Mar 7, 2026
7209167
Bump DB to to include tables for quote items and recurring invoice it…
johnnyq Mar 7, 2026
7f180eb
Migrate Invoice Quote Recurring Invoice Items to their new respecting…
johnnyq Mar 7, 2026
6122efc
Updated all Queries related to invoice items to reflect their new tab…
johnnyq Mar 8, 2026
7acaf55
Bump App Version and Update Changelog
johnnyq Mar 8, 2026
c936823
Update Changelog
johnnyq Mar 8, 2026
b0190f4
Invoice: Fix Regression caused by renaming post var clien to client_id
johnnyq Mar 8, 2026
edad83c
Fix Regression of chnage post name from client to client_id Add / Edi…
johnnyq Mar 8, 2026
e254712
Update Var naming schemes to match the post var name
johnnyq Mar 8, 2026
5bd21a2
add .unifi to the allowed extensions on file uploads
johnnyq Mar 9, 2026
6e33c07
Hide New Invoice, Recurring Invoices, Tickets, revenues, products for…
johnnyq Mar 9, 2026
26ebac4
Setup: Fix config_base_url if not using the script so /setup is not a…
johnnyq Mar 9, 2026
ada336c
Update var names
johnnyq Mar 9, 2026
b394f48
Fix Vars add empty value placeholder for Ticket Frequency
johnnyq Mar 9, 2026
b365b7c
Rename unarchive to restore in assets
johnnyq Mar 9, 2026
cf639cb
Update Changelog
johnnyq Mar 10, 2026
e45563a
Update Changelog
johnnyq Mar 10, 2026
b133f63
Ticket: Fix Task Approval
johnnyq Mar 10, 2026
b000147
tickets: Add Tooltip to Approve task
johnnyq Mar 10, 2026
5d85810
Update Changelog
johnnyq Mar 10, 2026
d13104b
Update changelog order
johnnyq Mar 10, 2026
c8dd7f2
Network: Fix Assignable IPs field not posting
johnnyq Mar 11, 2026
5c24813
Move client column back to the end in networks
johnnyq Mar 11, 2026
43dbc69
Remove custom tables from db.sql
johnnyq Mar 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
42 changes: 41 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,46 @@

This file documents all notable changes made to ITFlow.

## [26.03] Stable Release
### Bug Fixes
- Ticket Templates: Fix Task Sorting.
- Ticket: Lower autoclose setting minimum value from 48 to 24 Hours.
- Ticket: Fix Task Approval.
- Recurring Ticket: add empty value placeholder for Ticket Frequency.
- Documents/Files: Fix redirect after File Upload to redirect to files instead of the non existent documents.
- Setup: Fix base url tacking on /setup when not installing via script.


### New Features & Updates
- Clients: Net Terms: Added common 45 and 15 Days, removed 14 Days not as common.
- Clients: Bulk Action Set Net Terms Added.
- Clients: Swapped location and contact column, add PopOver with Details such as created, abbreviation, DB ID instead of taking up space underneath client, rounded tag pills and increased padding, removed info badges and added one info badge that displays a popover with details.
- Clients: Added New Ticket to Client Top Header Menu.
- Clients: Client Overview: UI Sprucing.
- Invoice: Send reminder 1 day after due date.
- Invoices/Quotes/Recurring Invoices: Split Items tables into their own POST logic and Modal UIs and tables (quote_items, invoice_items, recurring_items).
- Tickets: New Ticket Parsing - Anyone CC'ed onto the original email that created the ticket is added as a ticket watcher.
- Ticket/Quotes: Quotes can now be associated with a ticket.
- Networks: Removed Subnet Mask Field, Use CIDR instead.
- Networks: Rearranged fields, Updated placeholders, Add/Edit/list for better flow.
- Networks: Renamed DHCP to IP Range to allow for you use of both DHCP and or Usable IPs.
- Assets: Rearranged fields, Updated placeholders, Add/Edit/list for better flow.
- Assets: Added IPv6 if available under IP, Make and Model are now one line with Serial Underneath. Added OS under Type. use pill for status.
- Calendar: Event thats are cut off can now be viewed as a tooltip on hover.
- Calendar: Renamed System Calendars to built-in calendars and added the names and color dot for reference.
- Calendar: You can now delete a custom calendar.
- Report: Client Ticket Time Detail Audit: Selectable Billing Time Increment, will later be avauilable globally.
- Roles/Permissions: Now complete and is out of beta all permission roles are strictly enforced, except for in Trips and Calendar, new enforce modules will be added for these at a later date.
- Project Templates: Ticket Template order can now be dragged and dropped.
- Global: Introduced new checkbox class to all Checkbox select columns to keep consistency and reduce space and enhance ui.
- Global: CSRF Checks everywhere instead of just deletion calls.
- Global: Renamed the rest of the unarchive post and label calls to restore.
- Files: Allow upload of .unifi extension.
- Bump Libraries:
- stripe-php from 19.0.0 to 19.4.1.
- fullcalendar from 6.1.19 to 6.1.20
- TCPDF from 6.10.1 to 6.11.2

## [26.02.1] Maint Release
### Bug Fixes
- Credentials: Fix Password Generator.
Expand All @@ -12,7 +52,7 @@ This file documents all notable changes made to ITFlow.
- Ticket Details: Deny access to client restricted agents to view tickets without client_id in uri.
- Tickets: Allow agents with restricted client access to view and edit tickets without a client.
- Ticket Change client: Limit selection for agents with restricted client access.
- Ticket Details: Don't display Updated at when null.
- Ticket Details: Don't display updated at when null.

### New Features & Updates
- Report: Added Client Detail Auditing.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ We track the implementation of confirmed features and bugs via [TaskFlow](https:
For help using ITFlow, bugs, feature requests, and general ideas / discussions please use the community [forum](https://forum.itflow.org).

### Contributing
If you want to improve ITFlow, feel free to fork the repo and create a pull reques. Make sure to discuss significant changes or new features with fellow contributors on the forum first. This helps ensure that your contributions are aligned with project goals, and saves time for everyone. All contributions should follow our [code standards](https://docs.itflow.org/code_standards). See the [contributing guide](https://docs.itflow.org/contribute).
We have temporarily paused PRs from the community.

#### Contributors
<a href="https://github.com/itflow-org/itflow/graphs/contributors">
Expand Down
8 changes: 4 additions & 4 deletions admin/category.php
Original file line number Diff line number Diff line change
Expand Up @@ -135,11 +135,11 @@ class="fas fa-fw fa-archive mr-2"></i>Archived</a>
if ($archived) {
?>
<a class="dropdown-item text-success confirm-link"
href="post.php?unarchive_category=<?php echo $category_id; ?>">
<i class="fas fa-fw fa-archive mr-2"></i>Unarchive
href="post.php?restore_category=<?php echo $category_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-archive mr-2"></i>Restore
</a>
<a class="dropdown-item text-danger confirm-link"
href="post.php?delete_category=<?php echo $category_id; ?>">
href="post.php?delete_category=<?php echo $category_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash mr-2"></i>Delete
</a>
<?php
Expand All @@ -150,7 +150,7 @@ class="fas fa-fw fa-archive mr-2"></i>Archived</a>
<i class="fas fa-fw fa-edit mr-2"></i>Edit
</a>
<a class="dropdown-item text-danger confirm-link"
href="post.php?archive_category=<?php echo $category_id; ?>">
href="post.php?archive_category=<?php echo $category_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-archive mr-2"></i>Archive
</a>
<?php
Expand Down
2 changes: 1 addition & 1 deletion admin/custom_link.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
<i class="fas fa-fw fa-edit mr-2"></i>Edit
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?delete_custom_link=<?php echo $custom_link_id; ?>">
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?delete_custom_link=<?php echo $custom_link_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash mr-2"></i>Delete
</a>
</div>
Expand Down
148 changes: 145 additions & 3 deletions admin/database_updates.php
Original file line number Diff line number Diff line change
Expand Up @@ -4193,10 +4193,152 @@ function processFile($file_path, $file_name, $mysqli) {
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.0'");
}

// if (CURRENT_DATABASE_VERSION == '2.4.0') {
// // Insert queries here required to update to DB version 2.4.1
if (CURRENT_DATABASE_VERSION == '2.4.0') {

mysqli_query($mysqli, "
CREATE TABLE `quote_items` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`item_name` varchar(200) NOT NULL,
`item_description` text DEFAULT NULL,
`item_quantity` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_price` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_subtotal` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_tax` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_total` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_order` int(11) NOT NULL DEFAULT 0,
`item_created_at` datetime NOT NULL DEFAULT current_timestamp(),
`item_updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
`item_archived_at` datetime DEFAULT NULL,
`item_tax_id` int(11) NOT NULL DEFAULT 0,
`item_product_id` int(11) NOT NULL DEFAULT 0,
`item_quote_id` int(11) NOT NULL,
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");

mysqli_query($mysqli, "
CREATE TABLE `recurring_invoice_items` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`item_name` varchar(200) NOT NULL,
`item_description` text DEFAULT NULL,
`item_quantity` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_price` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_subtotal` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_tax` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_total` decimal(15,2) NOT NULL DEFAULT 0.00,
`item_order` int(11) NOT NULL DEFAULT 0,
`item_created_at` datetime NOT NULL DEFAULT current_timestamp(),
`item_updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
`item_archived_at` datetime DEFAULT NULL,
`item_tax_id` int(11) NOT NULL DEFAULT 0,
`item_product_id` int(11) NOT NULL DEFAULT 0,
`item_recurring_invoice_id` int(11) NOT NULL,
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");

mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.1'");
}

if (CURRENT_DATABASE_VERSION == '2.4.1') {

// Migrate Items
mysqli_query($mysqli, "
INSERT INTO `recurring_invoice_items` (
`item_name`,
`item_description`,
`item_quantity`,
`item_price`,
`item_subtotal`,
`item_tax`,
`item_total`,
`item_order`,
`item_created_at`,
`item_updated_at`,
`item_archived_at`,
`item_tax_id`,
`item_product_id`,
`item_recurring_invoice_id`
)
SELECT
`item_name`,
`item_description`,
`item_quantity`,
`item_price`,
`item_subtotal`,
`item_tax`,
`item_total`,
`item_order`,
`item_created_at`,
`item_updated_at`,
`item_archived_at`,
`item_tax_id`,
`item_product_id`,
`item_recurring_invoice_id`
FROM `invoice_items`
WHERE `item_recurring_invoice_id` != 0
");

mysqli_query($mysqli, "
INSERT INTO `quote_items` (
`item_name`,
`item_description`,
`item_quantity`,
`item_price`,
`item_subtotal`,
`item_tax`,
`item_total`,
`item_order`,
`item_created_at`,
`item_updated_at`,
`item_archived_at`,
`item_tax_id`,
`item_product_id`,
`item_quote_id`
)
SELECT
`item_name`,
`item_description`,
`item_quantity`,
`item_price`,
`item_subtotal`,
`item_tax`,
`item_total`,
`item_order`,
`item_created_at`,
`item_updated_at`,
`item_archived_at`,
`item_tax_id`,
`item_product_id`,
`item_quote_id`
FROM `invoice_items`
WHERE `item_quote_id` != 0
");

mysqli_query($mysqli, "
DELETE FROM `invoice_items`
WHERE `item_recurring_invoice_id` != 0
");

mysqli_query($mysqli, "
DELETE FROM `invoice_items`
WHERE `item_quote_id` != 0
");

mysqli_query($mysqli, "
ALTER TABLE `invoice_items`
DROP COLUMN `item_quote_id`,
DROP COLUMN `item_recurring_invoice_id`
");

mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.2'");

}
//
// // if (CURRENT_DATABASE_VERSION == '2.4.2') {
// // Insert queries here required to update to DB version 2.4.3
// // Then, update the database to the next sequential version
// mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.1'");
// mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.3'");
// }

} else {
Expand Down
23 changes: 18 additions & 5 deletions admin/document_template.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

<div class="card card-dark">
<div class="card-header py-2">
<h3 class="card-title mt-2"><i class="fa fa-fw fa-file mr-2"></i>Document Templates</h3>
<h3 class="card-title mt-2"><i class="fa fa-fw fa-file-alt mr-2"></i>Document Templates</h3>
<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/document_template/document_template_add.php" data-modal-size="xl">
<i class="fas fa-plus mr-2"></i>New Template
Expand Down Expand Up @@ -73,14 +73,23 @@
$document_template_content = nullable_htmlentities($row['document_template_content']);
$document_template_created_by_name = nullable_htmlentities($row['user_name']);
$document_template_created_at = nullable_htmlentities($row['document_template_created_at']);
$document_template_updated_at = nullable_htmlentities($row['document_template_updated_at']);
$document_template_updated_at = nullable_htmlentities(getFallback($row['document_template_updated_at']));

?>

<tr>
<td>
<a class="text-bold" href="document_template_details.php?document_template_id=<?php echo $document_template_id; ?>"><i class="fas fa-fw fa-file-alt text-dark"></i> <?php echo $document_template_name; ?></a>
<div class="mt-1 text-secondary"><?php echo $document_template_description; ?></div>
<a class="text-dark ajax-modal" href="#"
data-modal-size="xl"
data-modal-url="modals/document_template/document_template_edit.php?id=<?= $document_template_id ?>">
<div class="media">
<i class="fas fa-fw fa-2x fa-file-alt mr-2"></i>
<div class="media-body">
<div><?= $document_template_name ?></div>
<div><small class="text-secondary"><?= $document_template_description ?></small></div>
</div>
</div>
</a>
</td>
<td>
<?php echo $document_template_created_at; ?>
Expand All @@ -93,13 +102,17 @@
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="document_template_details.php?document_template_id=<?= $document_template_id ?>">
<i class="fas fa-fw fa-eye mr-2"></i>View
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item ajax-modal" href="#"
data-modal-size="xl"
data-modal-url="modals/document_template/document_template_edit.php?id=<?= $document_template_id ?>">
<i class="fas fa-fw fa-edit mr-2"></i>Edit
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger text-bold" href="post.php?delete_document_template=<?php echo $document_template_id; ?>">
<a class="dropdown-item text-danger text-bold" href="post.php?delete_document_template=<?php echo $document_template_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash mr-2"></i>Delete
</a>
</div>
Expand Down
10 changes: 5 additions & 5 deletions admin/document_template_details.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,19 @@
<li class="breadcrumb-item">
<a href="document_template.php">Document Templates</a>
</li>
<li class="breadcrumb-item active"><i class="fas fa-file mr-2"></i><?php echo $document_template_name; ?></li>
<li class="breadcrumb-item active"><i class="fas fa-file-alt mr-2"></i><?php echo $document_template_name; ?></li>
</ol>

<div class="card card-dark">
<div class="card-header py-2">
<div class="card-header">

<h3 class="card-title mt-2"><i class="fa fa-fw fa-file mr-2"></i><?php echo $document_template_name; ?></h3>
<h3 class="card-title mt-1"><i class="fa fa-fw fa-file-alt mr-2"></i><?php echo $document_template_name; ?></h3>

<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal"
<button type="button" class="btn btn-tool ajax-modal"
data-modal-size="xl"
data-modal-url="modals/document_template/document_template_edit.php?id=<?= $document_template_id ?>">
<i class="fas fa-edit mr-2"></i>Edit
<i class="fas fa-edit mr-2"></i>
</button>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion admin/includes/side_nav.php
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['ai_provid
</li>
<li class="nav-item">
<a href="/admin/document_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['document_template.php', 'document_template_details.php']) ? 'active' : ''); ?>">
<i class="nav-icon fas fa-file"></i>
<i class="nav-icon fas fa-file-alt"></i>
<p>Document Templates</p>
</a>
</li>
Expand Down
Loading
Loading