Skip to content

Commit c650764

Browse files
authored
Merge pull request #1271 from itflow-org/develop
Develop to Master
2 parents 20e2f22 + 43dbc69 commit c650764

File tree

771 files changed

+8768
-4087
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

771 files changed

+8768
-4087
lines changed

CHANGELOG.md

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,46 @@
22

33
This file documents all notable changes made to ITFlow.
44

5+
## [26.03] Stable Release
6+
### Bug Fixes
7+
- Ticket Templates: Fix Task Sorting.
8+
- Ticket: Lower autoclose setting minimum value from 48 to 24 Hours.
9+
- Ticket: Fix Task Approval.
10+
- Recurring Ticket: add empty value placeholder for Ticket Frequency.
11+
- Documents/Files: Fix redirect after File Upload to redirect to files instead of the non existent documents.
12+
- Setup: Fix base url tacking on /setup when not installing via script.
13+
14+
15+
### New Features & Updates
16+
- Clients: Net Terms: Added common 45 and 15 Days, removed 14 Days not as common.
17+
- Clients: Bulk Action Set Net Terms Added.
18+
- 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.
19+
- Clients: Added New Ticket to Client Top Header Menu.
20+
- Clients: Client Overview: UI Sprucing.
21+
- Invoice: Send reminder 1 day after due date.
22+
- Invoices/Quotes/Recurring Invoices: Split Items tables into their own POST logic and Modal UIs and tables (quote_items, invoice_items, recurring_items).
23+
- Tickets: New Ticket Parsing - Anyone CC'ed onto the original email that created the ticket is added as a ticket watcher.
24+
- Ticket/Quotes: Quotes can now be associated with a ticket.
25+
- Networks: Removed Subnet Mask Field, Use CIDR instead.
26+
- Networks: Rearranged fields, Updated placeholders, Add/Edit/list for better flow.
27+
- Networks: Renamed DHCP to IP Range to allow for you use of both DHCP and or Usable IPs.
28+
- Assets: Rearranged fields, Updated placeholders, Add/Edit/list for better flow.
29+
- 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.
30+
- Calendar: Event thats are cut off can now be viewed as a tooltip on hover.
31+
- Calendar: Renamed System Calendars to built-in calendars and added the names and color dot for reference.
32+
- Calendar: You can now delete a custom calendar.
33+
- Report: Client Ticket Time Detail Audit: Selectable Billing Time Increment, will later be avauilable globally.
34+
- 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.
35+
- Project Templates: Ticket Template order can now be dragged and dropped.
36+
- Global: Introduced new checkbox class to all Checkbox select columns to keep consistency and reduce space and enhance ui.
37+
- Global: CSRF Checks everywhere instead of just deletion calls.
38+
- Global: Renamed the rest of the unarchive post and label calls to restore.
39+
- Files: Allow upload of .unifi extension.
40+
- Bump Libraries:
41+
- stripe-php from 19.0.0 to 19.4.1.
42+
- fullcalendar from 6.1.19 to 6.1.20
43+
- TCPDF from 6.10.1 to 6.11.2
44+
545
## [26.02.1] Maint Release
646
### Bug Fixes
747
- Credentials: Fix Password Generator.
@@ -12,7 +52,7 @@ This file documents all notable changes made to ITFlow.
1252
- Ticket Details: Deny access to client restricted agents to view tickets without client_id in uri.
1353
- Tickets: Allow agents with restricted client access to view and edit tickets without a client.
1454
- Ticket Change client: Limit selection for agents with restricted client access.
15-
- Ticket Details: Don't display Updated at when null.
55+
- Ticket Details: Don't display updated at when null.
1656

1757
### New Features & Updates
1858
- Report: Added Client Detail Auditing.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ We track the implementation of confirmed features and bugs via [TaskFlow](https:
8282
For help using ITFlow, bugs, feature requests, and general ideas / discussions please use the community [forum](https://forum.itflow.org).
8383

8484
### Contributing
85-
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).
85+
We have temporarily paused PRs from the community.
8686

8787
#### Contributors
8888
<a href="https://github.com/itflow-org/itflow/graphs/contributors">

admin/category.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,11 @@ class="fas fa-fw fa-archive mr-2"></i>Archived</a>
135135
if ($archived) {
136136
?>
137137
<a class="dropdown-item text-success confirm-link"
138-
href="post.php?unarchive_category=<?php echo $category_id; ?>">
139-
<i class="fas fa-fw fa-archive mr-2"></i>Unarchive
138+
href="post.php?restore_category=<?php echo $category_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
139+
<i class="fas fa-fw fa-archive mr-2"></i>Restore
140140
</a>
141141
<a class="dropdown-item text-danger confirm-link"
142-
href="post.php?delete_category=<?php echo $category_id; ?>">
142+
href="post.php?delete_category=<?php echo $category_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
143143
<i class="fas fa-fw fa-trash mr-2"></i>Delete
144144
</a>
145145
<?php
@@ -150,7 +150,7 @@ class="fas fa-fw fa-archive mr-2"></i>Archived</a>
150150
<i class="fas fa-fw fa-edit mr-2"></i>Edit
151151
</a>
152152
<a class="dropdown-item text-danger confirm-link"
153-
href="post.php?archive_category=<?php echo $category_id; ?>">
153+
href="post.php?archive_category=<?php echo $category_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
154154
<i class="fas fa-fw fa-archive mr-2"></i>Archive
155155
</a>
156156
<?php

admin/custom_link.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
<i class="fas fa-fw fa-edit mr-2"></i>Edit
124124
</a>
125125
<div class="dropdown-divider"></div>
126-
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?delete_custom_link=<?php echo $custom_link_id; ?>">
126+
<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'] ?>">
127127
<i class="fas fa-fw fa-trash mr-2"></i>Delete
128128
</a>
129129
</div>

admin/database_updates.php

Lines changed: 145 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4193,10 +4193,152 @@ function processFile($file_path, $file_name, $mysqli) {
41934193
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.0'");
41944194
}
41954195

4196-
// if (CURRENT_DATABASE_VERSION == '2.4.0') {
4197-
// // Insert queries here required to update to DB version 2.4.1
4196+
if (CURRENT_DATABASE_VERSION == '2.4.0') {
4197+
4198+
mysqli_query($mysqli, "
4199+
CREATE TABLE `quote_items` (
4200+
`item_id` int(11) NOT NULL AUTO_INCREMENT,
4201+
`item_name` varchar(200) NOT NULL,
4202+
`item_description` text DEFAULT NULL,
4203+
`item_quantity` decimal(15,2) NOT NULL DEFAULT 0.00,
4204+
`item_price` decimal(15,2) NOT NULL DEFAULT 0.00,
4205+
`item_subtotal` decimal(15,2) NOT NULL DEFAULT 0.00,
4206+
`item_tax` decimal(15,2) NOT NULL DEFAULT 0.00,
4207+
`item_total` decimal(15,2) NOT NULL DEFAULT 0.00,
4208+
`item_order` int(11) NOT NULL DEFAULT 0,
4209+
`item_created_at` datetime NOT NULL DEFAULT current_timestamp(),
4210+
`item_updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
4211+
`item_archived_at` datetime DEFAULT NULL,
4212+
`item_tax_id` int(11) NOT NULL DEFAULT 0,
4213+
`item_product_id` int(11) NOT NULL DEFAULT 0,
4214+
`item_quote_id` int(11) NOT NULL,
4215+
PRIMARY KEY (`item_id`)
4216+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
4217+
");
4218+
4219+
mysqli_query($mysqli, "
4220+
CREATE TABLE `recurring_invoice_items` (
4221+
`item_id` int(11) NOT NULL AUTO_INCREMENT,
4222+
`item_name` varchar(200) NOT NULL,
4223+
`item_description` text DEFAULT NULL,
4224+
`item_quantity` decimal(15,2) NOT NULL DEFAULT 0.00,
4225+
`item_price` decimal(15,2) NOT NULL DEFAULT 0.00,
4226+
`item_subtotal` decimal(15,2) NOT NULL DEFAULT 0.00,
4227+
`item_tax` decimal(15,2) NOT NULL DEFAULT 0.00,
4228+
`item_total` decimal(15,2) NOT NULL DEFAULT 0.00,
4229+
`item_order` int(11) NOT NULL DEFAULT 0,
4230+
`item_created_at` datetime NOT NULL DEFAULT current_timestamp(),
4231+
`item_updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
4232+
`item_archived_at` datetime DEFAULT NULL,
4233+
`item_tax_id` int(11) NOT NULL DEFAULT 0,
4234+
`item_product_id` int(11) NOT NULL DEFAULT 0,
4235+
`item_recurring_invoice_id` int(11) NOT NULL,
4236+
PRIMARY KEY (`item_id`)
4237+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
4238+
");
4239+
4240+
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.1'");
4241+
}
4242+
4243+
if (CURRENT_DATABASE_VERSION == '2.4.1') {
4244+
4245+
// Migrate Items
4246+
mysqli_query($mysqli, "
4247+
INSERT INTO `recurring_invoice_items` (
4248+
`item_name`,
4249+
`item_description`,
4250+
`item_quantity`,
4251+
`item_price`,
4252+
`item_subtotal`,
4253+
`item_tax`,
4254+
`item_total`,
4255+
`item_order`,
4256+
`item_created_at`,
4257+
`item_updated_at`,
4258+
`item_archived_at`,
4259+
`item_tax_id`,
4260+
`item_product_id`,
4261+
`item_recurring_invoice_id`
4262+
)
4263+
SELECT
4264+
`item_name`,
4265+
`item_description`,
4266+
`item_quantity`,
4267+
`item_price`,
4268+
`item_subtotal`,
4269+
`item_tax`,
4270+
`item_total`,
4271+
`item_order`,
4272+
`item_created_at`,
4273+
`item_updated_at`,
4274+
`item_archived_at`,
4275+
`item_tax_id`,
4276+
`item_product_id`,
4277+
`item_recurring_invoice_id`
4278+
FROM `invoice_items`
4279+
WHERE `item_recurring_invoice_id` != 0
4280+
");
4281+
4282+
mysqli_query($mysqli, "
4283+
INSERT INTO `quote_items` (
4284+
`item_name`,
4285+
`item_description`,
4286+
`item_quantity`,
4287+
`item_price`,
4288+
`item_subtotal`,
4289+
`item_tax`,
4290+
`item_total`,
4291+
`item_order`,
4292+
`item_created_at`,
4293+
`item_updated_at`,
4294+
`item_archived_at`,
4295+
`item_tax_id`,
4296+
`item_product_id`,
4297+
`item_quote_id`
4298+
)
4299+
SELECT
4300+
`item_name`,
4301+
`item_description`,
4302+
`item_quantity`,
4303+
`item_price`,
4304+
`item_subtotal`,
4305+
`item_tax`,
4306+
`item_total`,
4307+
`item_order`,
4308+
`item_created_at`,
4309+
`item_updated_at`,
4310+
`item_archived_at`,
4311+
`item_tax_id`,
4312+
`item_product_id`,
4313+
`item_quote_id`
4314+
FROM `invoice_items`
4315+
WHERE `item_quote_id` != 0
4316+
");
4317+
4318+
mysqli_query($mysqli, "
4319+
DELETE FROM `invoice_items`
4320+
WHERE `item_recurring_invoice_id` != 0
4321+
");
4322+
4323+
mysqli_query($mysqli, "
4324+
DELETE FROM `invoice_items`
4325+
WHERE `item_quote_id` != 0
4326+
");
4327+
4328+
mysqli_query($mysqli, "
4329+
ALTER TABLE `invoice_items`
4330+
DROP COLUMN `item_quote_id`,
4331+
DROP COLUMN `item_recurring_invoice_id`
4332+
");
4333+
4334+
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.2'");
4335+
4336+
}
4337+
//
4338+
// // if (CURRENT_DATABASE_VERSION == '2.4.2') {
4339+
// // Insert queries here required to update to DB version 2.4.3
41984340
// // Then, update the database to the next sequential version
4199-
// mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.1'");
4341+
// mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.3'");
42004342
// }
42014343

42024344
} else {

admin/document_template.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

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

7878
?>
7979

8080
<tr>
8181
<td>
82-
<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>
83-
<div class="mt-1 text-secondary"><?php echo $document_template_description; ?></div>
82+
<a class="text-dark ajax-modal" href="#"
83+
data-modal-size="xl"
84+
data-modal-url="modals/document_template/document_template_edit.php?id=<?= $document_template_id ?>">
85+
<div class="media">
86+
<i class="fas fa-fw fa-2x fa-file-alt mr-2"></i>
87+
<div class="media-body">
88+
<div><?= $document_template_name ?></div>
89+
<div><small class="text-secondary"><?= $document_template_description ?></small></div>
90+
</div>
91+
</div>
92+
</a>
8493
</td>
8594
<td>
8695
<?php echo $document_template_created_at; ?>
@@ -93,13 +102,17 @@
93102
<i class="fas fa-ellipsis-h"></i>
94103
</button>
95104
<div class="dropdown-menu">
105+
<a class="dropdown-item" href="document_template_details.php?document_template_id=<?= $document_template_id ?>">
106+
<i class="fas fa-fw fa-eye mr-2"></i>View
107+
</a>
108+
<div class="dropdown-divider"></div>
96109
<a class="dropdown-item ajax-modal" href="#"
97110
data-modal-size="xl"
98111
data-modal-url="modals/document_template/document_template_edit.php?id=<?= $document_template_id ?>">
99112
<i class="fas fa-fw fa-edit mr-2"></i>Edit
100113
</a>
101114
<div class="dropdown-divider"></div>
102-
<a class="dropdown-item text-danger text-bold" href="post.php?delete_document_template=<?php echo $document_template_id; ?>">
115+
<a class="dropdown-item text-danger text-bold" href="post.php?delete_document_template=<?php echo $document_template_id; ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
103116
<i class="fas fa-fw fa-trash mr-2"></i>Delete
104117
</a>
105118
</div>

admin/document_template_details.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,19 @@
4343
<li class="breadcrumb-item">
4444
<a href="document_template.php">Document Templates</a>
4545
</li>
46-
<li class="breadcrumb-item active"><i class="fas fa-file mr-2"></i><?php echo $document_template_name; ?></li>
46+
<li class="breadcrumb-item active"><i class="fas fa-file-alt mr-2"></i><?php echo $document_template_name; ?></li>
4747
</ol>
4848

4949
<div class="card card-dark">
50-
<div class="card-header py-2">
50+
<div class="card-header">
5151

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

5454
<div class="card-tools">
55-
<button type="button" class="btn btn-primary ajax-modal"
55+
<button type="button" class="btn btn-tool ajax-modal"
5656
data-modal-size="xl"
5757
data-modal-url="modals/document_template/document_template_edit.php?id=<?= $document_template_id ?>">
58-
<i class="fas fa-edit mr-2"></i>Edit
58+
<i class="fas fa-edit mr-2"></i>
5959
</button>
6060
</div>
6161
</div>

admin/includes/side_nav.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['ai_provid
139139
</li>
140140
<li class="nav-item">
141141
<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' : ''); ?>">
142-
<i class="nav-icon fas fa-file"></i>
142+
<i class="nav-icon fas fa-file-alt"></i>
143143
<p>Document Templates</p>
144144
</a>
145145
</li>

0 commit comments

Comments
 (0)