4936 Commits

Author SHA1 Message Date
Johnny
61bb9dd7cb Merge pull request #1298 from itflow-org/develop
Develop to Master for Release
2026-09-01 13:01:18 -04:00
johnnyq
e528ef8ff3 Changelog update 2026-09-01 12:36:29 -04:00
johnnyq
30045781e2 Update Changelog 2026-09-01 12:23:01 -04:00
Wrongecho
d16ae9bc49 Client API - Add delete endpoint (thank you @BoredManCodes) 2026-09-01 15:09:59 +00:00
Wrongecho
491d459619 Make client delete modal even clearer 2026-09-01 15:03:31 +00:00
Wrongecho
7b986ed196 Bugfix: Client update API would error out if client_lead/client_is_lead was not specified 2026-09-01 14:47:44 +00:00
Wrongecho
450f2492ea Tickets API - add close endpoint (simplify) 2026-09-01 13:18:30 +00:00
Wrongecho
e95b3c1977 API - Add app logging when auth is fine but queries fail 2026-09-01 13:18:02 +00:00
Wrongecho
7fe0f8638c Tickets API - add close endpoint 2026-09-01 13:13:10 +00:00
Wrongecho
d21d4c7fc0 Hide option to delete ticket when it is closed as we treat closed tickets as immutable 2026-09-01 12:23:00 +00:00
Wrongecho
f947da6aff Bump security version 2026-09-01 11:15:27 +00:00
Wrongecho
fd81c17cd6 rm mention of GH Issues 2026-09-01 11:07:36 +00:00
johnnyq
36ea4a9a80 API: allow reads to filter by client_id on top of RBAC client scoping
The RBAC rework dropped the client_id read filter along with per-key client scope, so an all-clients key could no longer narrow to one client. apiClientScopeSql() now appends the filter after the scope fragment, so it can only narrow, never widen. Reads only - writes take client_id as their target client.
2026-08-31 18:30:09 -04:00
johnnyq
b0c12ac89d More Syntax Fixes 2026-08-31 17:58:02 -04:00
johnnyq
bcdfab996c Fix approval Syntax 2026-08-31 17:52:44 -04:00
wrongecho
7442e0c2c8 Move interface deletion inside delete check otherwise the count is of the interfaces not the asset 2026-08-31 21:42:07 +01:00
johnnyq
68f18064c6 Fix Syntax error in name, update contributing 2026-08-31 16:27:30 -04:00
johnnyq
c89e3a90d4 Add Proper footers to Guest Area and client portal 2026-08-31 13:24:32 -04:00
johnnyq
364c9e2134 Use built in sticky footer css class for The ITFlow footer in admin 2026-08-31 13:12:50 -04:00
johnnyq
accc1948be Fix Color Class 2026-08-31 12:46:00 -04:00
johnnyq
dd1936c4d8 Added some Margin bottom to guest task approval card 2026-08-31 12:32:23 -04:00
johnnyq
271d780f50 Added some Margin bottom to guest stripe pay invoice fixes mobile view 2026-08-31 12:30:11 -04:00
johnnyq
c07c10c610 Fix Guest Approve Modal Offscreen issue, added guest header and spruced up the UI a bit 2026-08-31 12:22:55 -04:00
Wrongecho
d9cb0251b0 Small payment bugfixes 2026-08-30 23:15:16 +01:00
Wrongecho
16b46c1f1a Stripe Invoice Payments
- Add ability to refund Stripe payments rather than just deleting & manually refunding
- Limit refunding / deleting payments to Full/3 Sales&Financial permissions, as this is a delete rather than modify action
2026-08-30 22:54:01 +01:00
Wrongecho
5a925f8784 Move payment provider post vars to a model to reduce repetition 2026-08-30 15:12:14 +01:00
Wrongecho
318eb7cf77 Stripe - Warn the user if the secret key is not valid during provider add/edit 2026-08-30 15:06:32 +01:00
Wrongecho
401f0dfce3 Stripe ID creation/linking for guest flows 2026-08-30 14:09:44 +01:00
Wrongecho
f83dc8a28e Fix idiot copy/paste 2026-08-30 12:58:22 +01:00
Wrongecho
9bc0bf0b7b Stripe ID creation/linking for guest flows (wip) 2026-08-30 12:42:12 +01:00
Marcus Hill
231651b603 Make saved payment wording clearer 2026-08-30 11:10:11 +01:00
johnnyq
d98b8bc427 Add ps-3 to table columns that don't have a checkbox and made sure all table listings conform 2026-08-29 19:45:28 -04:00
johnnyq
20b406c5b0 Add margin bottom to the ticket filter 2026-08-29 17:27:41 -04:00
johnnyq
06d6d4b23b Bump ITFlow App Version to from 26.08.2 to 26.09, updated changelog 2026-08-29 16:06:22 -04:00
johnnyq
f395d224fa Collapsable Client Top Head collapsable is remembered upon navigation 2026-08-29 00:59:49 -04:00
johnnyq
f6e03b2196 Add Chevron to show top client collapse 2026-08-29 00:46:30 -04:00
johnnyq
087c75f3d7 Dont show the reply card in ticket until a reply button is clicked 2026-08-29 00:21:40 -04:00
johnnyq
950d02d6ab Fix: Six ajax modals had dead JS - DOMContentLoaded had already fired before their scripts were injected. New itflowReady() helper restores jQuery .ready() semantics. Fixes notification pagination, asset OS autocomplete, contact auth toggle, AI ticket summary, AI document template generation 2026-08-28 19:41:00 -04:00
johnnyq
3277567b87 Demo Data Take 6 2026-08-28 19:23:36 -04:00
johnnyq
8d25337774 Added More Client to Demo Seed, even better relations, filled out more missing data spots etc 2026-08-28 19:09:42 -04:00
johnnyq
bfa53dfd66 Rewrite of the demo data seed includes more alternative products including FOSS more accurate historical relations, break fix mix with managed clients and services 2026-08-28 18:17:36 -04:00
johnnyq
bd7f67aa5b Enhancement: Files: Document and Files are easily distinguashable now with the option to choose all docs or just files. Thumbnails view now shows all files, Previews now available for documents, pdfs, txts etc, List view and Thumbnail view now retain in search param when navigating folders 2026-08-28 17:33:04 -04:00
johnnyq
d66e26d910 DB Update 2026-08-28 16:40:09 -04:00
johnnyq
156c51224d Fix client portal review findings: PIN wipe, log indexing, statement currency (db 2.7.8)
Setting a PIN containing < or > silently cleared it: the length check ran before escapeSql(), whose strip_tags() then emptied the value, and the UPDATE stored the blank while flashing success. Length is now checked after sanitising.

Password and PIN changes require the current password. SSO contacts are exempt - no local password to check, and the IdP already did it.

New index on logs(log_user_id, log_client_id) for the portal profile and activity pages, which were scanning the whole table twice per profile view. admin/audit_logs.php's date filter rewritten as a half-open range so KEY log_created_at is usable - DATE(log_created_at) BETWEEN made it non-sargable.

Portal statement page and PDF now render in the client's currency, matching the guest view and the emailed statement.

Quick Send asks for confirmation; confirm-link extended to submit buttons.

Portal audit entries logged an empty name - client/post.php used , which only exists agent-side.
2026-08-28 16:38:42 -04:00
johnnyq
820103460f Add Top Bottom Margin for Guest Quote and Invoice Quote 2026-08-28 16:29:58 -04:00
johnnyq
be20810d18 Use Datatables for User Activity on the client portal 2026-08-28 16:19:27 -04:00
johnnyq
10fb40f36f Feature: Major spruce up of the client portal profile page, added Department, Location, Title, Phone with Edit, editing Pin, Recent signins and recent activity along with a seperate activity page 2026-08-28 16:08:23 -04:00
johnnyq
194841e7f8 Add Empty state messages in client portal instead of just showing an empty table with the table header 2026-08-28 15:26:43 -04:00
johnnyq
c10d4eb736 Add Account Statment in Client Portal with option to download as a PDF 2026-08-28 15:22:02 -04:00
johnnyq
c53b2402e5 Spruced up the Account Statement on Guest View Invoice 2026-08-28 15:13:17 -04:00
johnnyq
6586a557ed Fix Send Client Account Statement Bug 2026-08-28 15:04:43 -04:00
johnnyq
342502073e Feature: Added Send Account Statment in Client Invoices Drop Down with Date Options and options to only include paid invoices 2026-08-28 14:50:15 -04:00
johnnyq
86ba041cdc Add Quick Send Quote / Invoice to replicate the old single click to Send Email 2026-08-28 14:40:25 -04:00
johnnyq
68b15ca49b Email Invoice Only shows Billing and Primary, Quote shows Important Billing, Primary and Technical contacts that can be selected 2026-08-28 13:43:51 -04:00
johnnyq
72e6f23e19 Send Email and Mark Sent modals for invoices and quotes (db 2.7.7)
Send Email opens a contact picker instead of hardcoding the primary contact; Mark Sent asks how it went out and takes a note. Both log recipients / method / note to the document history. Handlers moved GET -> POST.

Fixes two pre-existing bugs in the email path: archived contacts were still receiving billing copies, and every copy was addressed to the primary contact by name.
2026-08-28 13:31:22 -04:00
johnnyq
20b8fb5379 Make Add Primary links small 2026-08-28 00:44:47 -04:00
johnnyq
097891ed96 Add Primary Location / Contact if missing link modals 2026-08-28 00:26:40 -04:00
johnnyq
6d13237a17 DB Structure Update 2026-08-28 00:13:20 -04:00
johnnyq
27c5502de2 Index the per-parent child fetches and the mail queue loop (db 2.7.6) 2026-08-28 00:11:22 -04:00
johnnyq
8f884f789a Cleanup - fix two broken script paths and drop 29 dead/duplicate files (348KB of unused FullCalendar themes) 2026-08-28 00:01:44 -04:00
johnnyq
1119e13e5d restore nice toast alerts 2026-08-27 23:54:04 -04:00
johnnyq
988788b7c0 Add height placeholder to calendar to reduce jankiness on load 2026-08-27 23:50:19 -04:00
johnnyq
f182eec0b1 Fix content area flashing blank on every client page - defer the client delete modal's script so it stops blocking the parser mid-body 2026-08-27 23:26:29 -04:00
johnnyq
1eabf1ec7d Cleanup CSS Drop dead view transitions 2026-08-27 23:10:39 -04:00
johnnyq
0838ed07ec Add indexes on the client-scoped columns (db 2.7.5)
None of the *_client_id columns carried an index, so agent/includes/inc_all_client.php was doing a full table scan per badge count before the page rendered a byte - 27 of them. The main agent context runs 8 counts and the admin context none, which is why the client side nav was the only one that felt slow.

24 indexes, shaped (<entity>_client_id, <entity>_archived_at) where the query pairs the two and the client column alone otherwise. The archived column is always trailing and never an index of its own - on a healthy instance nearly every row has it NULL, so it cannot lead. recurring_tickets, services, invoices, recurring_invoices and calendar_events get a single column because their queries carry no archived filter; invoices is in that group because the money total there spans archived rows on purpose. payments.payment_invoice_id and transfers.transfer_revenue_id are join keys rather than client scoping but sit on the same page's critical path.

Migration checks information_schema.STATISTICS before each ALTER, since MySQL has no ADD INDEX IF NOT EXISTS and re-adding is an error - safe to re-run and safe where an index was added by hand. db.sql carries the same keys so fresh installs skip the update step.

Wider than the side nav: these are the columns clientScopeSql() filters on, so every client-scoped list page was paying for their absence. Expect the ALTERs to be the slow part of the upgrade on a mature instance.
2026-08-27 22:59:14 -04:00
johnnyq
877474b7f0 Speed up client context pages - badge counts are now one query per table instead of one per number (43 -> 27 queries per page load, invoices scanned once instead of eight times) 2026-08-27 22:47:09 -04:00
johnnyq
f980893cb1 Make each page refresh feel less Jenky with Smooth Fade Page Transitions 2026-08-27 22:44:53 -04:00
johnnyq
6d5152d1e6 Fix Tom Select JS Jankiness on page load 2026-08-27 19:06:36 -04:00
johnnyq
131b10eeb0 Fix Active Side nav Highlight 2026-08-27 18:43:14 -04:00
johnnyq
12ed62326a Add Holiday / Closure Days to SLA to pause SLA timer on defined days, also has a US Holiday Importer 2026-08-27 17:58:02 -04:00
johnnyq
32811fd1d2 Security: gate and client-scope the client overview record pages 2026-08-27 15:27:55 -04:00
johnnyq
4e1d72e06d Roll SLA email targets up to business days, escape priority, validate priority in the tickets API 2026-08-27 15:15:40 -04:00
johnnyq
ac175e7dc0 Add SLA response target to ticket created emails, with a call-in note on High and Urgent 2026-08-27 15:03:31 -04:00
johnnyq
855a608ee4 Default to Public reply by default in Ticket Reply 2026-08-27 13:15:15 -04:00
johnnyq
bf04d6a757 Ticket default to Medium Priority unless specified, as this is just good practice 2026-08-27 13:04:19 -04:00
johnnyq
069f587c1d Implemented Check for updates which removs the last shell exec from web ui, and reimplemented db_update switch to update_cli.php 2026-08-26 23:38:23 -04:00
johnnyq
14c38b9814 Remove DB Update from WebUI as this is handled by the update_cli backend 2026-08-26 22:59:17 -04:00
johnnyq
51c925522c Remove thr web updater this is now either queued from the web or ran from the shell to update 2026-08-26 22:53:29 -04:00
johnnyq
93fc6cd2ef Offset background color fix datepciker empty right column 2026-08-26 22:42:20 -04:00
johnnyq
1bebd2d578 Fix Light mode Initialization flash when in dark mode 2026-08-26 22:09:29 -04:00
johnnyq
2409c98e1e Added Border End to clients checkbox column 2026-08-26 15:20:15 -04:00
johnnyq
e637da615e Added More Meaningful nothing matches filters or no records exist 2026-08-26 15:12:16 -04:00
johnnyq
806732c8f5 Display Phone number Country Codes 2026-08-26 14:19:32 -04:00
johnnyq
422f88c25e Retain PHone Country code on edit 2026-08-26 14:11:23 -04:00
johnnyq
96f2c697c6 use intl js lib across all phone number fields 2026-08-26 13:53:27 -04:00
johnnyq
cfafc385f0 Bump intl-tel-input 2026-08-26 13:14:32 -04:00
johnnyq
3d9a41bec4 Bump imapengine from 1.25.4 to 1.25.6 and dependencies 2026-08-26 13:02:29 -04:00
johnnyq
71cfdf5e39 Pruned printer custom css patches as upstream vendor adminlte fixed the issue 2026-08-26 12:33:34 -04:00
johnnyq
6d043948b4 Updated Adminlte from 4.8.5 to 4.9.1 to fix print issues 2026-08-26 12:24:16 -04:00
johnnyq
0440aa8ffa Fix copy to clipboard to be a ntn-link instead of a button fixes adminlte4 regression 2026-08-25 18:42:37 -04:00
johnnyq
c6d642fbe7 Use new lte skin preview class for themes instead of colored circles 2026-08-25 18:31:33 -04:00
johnnyq
d20e3f78d1 Add Margin and remove un needed card surrounding calendar 2026-08-25 18:00:51 -04:00
johnnyq
fdc2a8c2c3 Switch some bg-primary to bg-blue so they are consistent across themes, use new bs5 to reduce width on certain form inputs 2026-08-25 17:44:18 -04:00
johnnyq
4b9c53675c Use AdminLTE4 new nav bar Search class looks great 2026-08-25 17:09:38 -04:00
johnnyq
5cf14ee74b Fix Extra Blank Page when printing, adminlte bug created overide, Do not include cards border on print like adminlte3 and shrink the font on print 2026-08-25 16:56:07 -04:00
johnnyq
4da086206c Prune un-nessary overides in itflow custom css as adminlte 4.8.5 fixed the issues 2026-08-25 16:08:53 -04:00
johnnyq
0843dc94fb Update AdminLTE from 4.7.0 to 4.8.5 and switched adminlte colors to use min version 2026-08-25 15:52:48 -04:00
johnnyq
3a19921edf Add Darkmode support for Sweetalert2 Modals 2026-08-25 15:38:20 -04:00
johnnyq
bd868d8e0a Keep networks side nav active in network IP view 2026-08-25 12:40:55 -04:00
johnnyq
59cb772a7f Revised the network info sidebar, added ip count, prefixed subnet IP in form, ajax check within network 2026-08-25 12:35:34 -04:00
johnnyq
1381add82b Feature: Added network IPs section to document network IP and their hostnames 2026-08-25 12:19:02 -04:00
johnnyq
ffda605195 Add Fake Demo Data Seed stretching over 2 year span 2026-08-24 16:44:09 -04:00
wrongecho
baf1164f08 Notify when mail parser skips an autogenerated ticket 2026-08-20 09:30:43 +01:00
wrongecho
f94181c68f Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2026-08-20 09:02:17 +01:00
wrongecho
3a64d53ca6 Bug: Fix not being able to open ticket for clients marked as a lead 2026-08-20 09:02:03 +01:00
johnnyq
f2b2082762 css 2026-08-19 13:48:55 -04:00
johnnyq
fc5dc82c29 Bump AdminLTE to 4.7.0 to fix print issues 2026-08-18 18:16:49 -04:00
johnnyq
858acbcd30 Bump AdminLTE which brings back AdminLTE colors 2026-08-18 12:24:31 -04:00
johnnyq
ba319a8f25 Fix d-print-none adminlte 3 override of bootstrap css class so sienavs and top navs wont print 2026-08-17 21:31:53 -04:00
johnnyq
c84bb56bc7 Fix Generate readable passwords 2026-08-17 12:59:24 -04:00
johnnyq
5c7f641635 Fix Ticket Notification in Portal was calling a function that was removed causing it to 500 error out 2026-08-17 12:39:29 -04:00
johnnyq
6df101c217 Css fixes 2026-08-16 22:25:05 -04:00
johnnyq
92377b918a Dark Mode Patches across the board for Calendar TinyMCE additonal dark mode css fixed and fixing autofocus on modal close when modal is open without a form autofocus 2026-08-16 15:57:37 -04:00
johnnyq
0f69ef8e19 Fix Dark mode bg-light and btn-light and multi select box table checkboxes 2026-08-16 13:27:27 -04:00
johnnyq
35ddd1a64d Feature: Designate a client record as your organization currently only provdes a direct link when you click company name in top of the side nav 2026-08-15 20:36:56 -04:00
johnnyq
1514934726 Update DB Structure 2026-08-15 19:56:38 -04:00
johnnyq
6af0634f47 Ticket SLA: Fix on hold to pause only after first reply, show resolved closed and onhold as fixed on paused sla in the list 2026-08-15 19:55:40 -04:00
johnnyq
bcc73737e4 Apply custom css across the board including client portal and guest 2026-08-15 17:53:10 -04:00
johnnyq
6ef84c4547 Feature: Add Ticket Canned Responses 2026-08-15 17:29:17 -04:00
johnnyq
4c4c172f59 Feature: queued Updates which now eliminates the need for shell_exec from the webui, but if enabled you can still update from the webui the old way too 2026-08-15 16:41:42 -04:00
johnnyq
d5ee0bff74 update_cli.php now does both db and forces app updates all in one go no more switches 2026-08-15 15:25:14 -04:00
johnnyq
77319f8fc1 update_cli.php now updates both the app and all database updates in one go and the switches --update only updates the app --db_update only updates the db 2026-08-15 15:12:45 -04:00
johnnyq
bdab434707 Fix Margins in various areas 2026-08-15 13:34:38 -04:00
johnnyq
56d9e04eac Update Theme select to use new bootstrap 5 radio button 2026-08-15 13:17:32 -04:00
johnnyq
72c037c581 Fix Date Range FlatPickr defaulting to 1970 for All time now default to current month 2026-08-15 13:04:55 -04:00
johnnyq
2375e69f2d Update badge classes to bg 2026-08-15 13:00:41 -04:00
johnnyq
73e10e72f2 Update filter bar, increase height on top navbar, primary buttons now inherit theme color 2026-08-15 12:55:24 -04:00
johnnyq
c44fa30792 Fix Mail settings tabs regression and user menu coloring 2026-08-15 12:29:39 -04:00
johnnyq
8c0e5246b4 Fix Card Margin bottoms client header and ticket cards on the right 2026-08-14 19:08:15 -04:00
johnnyq
35239b563d Resize top nav and compoents 2026-08-14 18:53:20 -04:00
johnnyq
e2512b0f86 Fixed Side nav titles, Fixed ajax on bootstrap modals, fixed pagination all regressions 2026-08-14 18:32:33 -04:00
johnnyq
1c5803dc12 Removed dead libs pdfmake dropzone and popper, fixed missing label for ids and migrated datatables to use bootstrap 5 libs instead of of 4 2026-08-14 17:50:17 -04:00
johnnyq
6fc94d9733 Migrated confirm modal to sweetalert2 lib 2026-08-14 17:38:21 -04:00
johnnyq
bbbfff7413 All Jquery removed replaced with stand JS and non jqery dependent libs 2026-08-14 17:28:06 -04:00
johnnyq
2354dd1511 Migrate fully away from Jquery Stage 1 2026-08-14 17:11:01 -04:00
johnnyq
dc6b191eed Update Font, Migrated away from JQUERY dependent libs: toastr to bootstrap5 toasts, daterangepicker to flatpickr, select2 to Tom Select, InputMask to IMask 2026-08-14 17:08:40 -04:00
johnnyq
0fe6d51bdb Theme Fixes for adminlte 4 2026-08-14 14:11:13 -04:00
johnnyq
e6da3fd0e3 Remove script 2026-08-14 13:22:47 -04:00
johnnyq
a084e37c39 Initial migration from AdminLTE 3 to 4, bootstrap 4 to 5 2026-08-14 13:22:11 -04:00
wrongecho
691059aab2 Debug - bump php memory flag to 512M 2026-08-13 09:45:01 +01:00
wrongecho
eda32f7d57 Update security 2026-08-12 15:27:40 +01:00
wrongecho
c44ae74557 Update readme 2026-08-12 15:20:48 +01:00
Johnny
0262707ef0 Merge pull request #1296 from itflow-org/develop
Develop to master for 26.08.2 Release
2026-08-10 12:10:21 -04:00
johnnyq
41900191af Bump ITFlow version and update Changelog 2026-08-10 11:33:38 -04:00
johnnyq
076f45abb0 Remove Stale SMTP IMAP host if switching Standard SMTP.IMAP to OAUTH 2026-08-09 23:59:54 -04:00
johnnyq
f7548af234 Fix Export Missing coluns due to the select star sweep 2026-08-09 14:33:06 -04:00
johnnyq
de46184a5b Fix calendar queries missing columns lost in the SELECT * sweep 2026-08-09 13:41:01 -04:00
johnnyq
f237993fd7 DB Structure update for AI temperature 2026-08-09 13:29:46 -04:00
johnnyq
a96324628a Fix broken cron page due to the select * sweep, note thi sdid not break cron itself 2026-08-09 13:27:51 -04:00
Johnny
89b080b430 Merge pull request #1294 from itflow-org/develop
Develop to Master for point release
2026-08-08 14:15:55 -04:00
johnnyq
b903ee02fe Bump version 2026-08-08 13:15:24 -04:00
johnnyq
6ff454134b Update changelog 2026-08-08 13:14:25 -04:00
johnnyq
04991a0d79 Fix ticket schedule cancellation never cancelling the calendar event 2026-08-08 13:00:01 -04:00
johnnyq
46a63b191c Fix bulk recurring ticket priority change denying access to all non-admin users 2026-08-08 12:59:31 -04:00
johnnyq
6b65c8150f Fix contact delete leaving an orphaned portal user and anonymize not redacting the phone number 2026-08-08 12:58:46 -04:00
johnnyq
d484629ebc do not update ticket status in history if it is the same 2026-08-08 12:41:34 -04:00
johnnyq
656aa95a4e Fix WebUI setup regression locking out after first step 2026-08-07 18:09:01 -04:00
johnnyq
db96766ab0 Fix Error on Scheduling Tickets, Fixed Zapcal Path 2026-08-07 12:44:56 -04:00
johnnyq
10f0c9de58 remove audit system time script 2026-08-06 19:26:43 -04:00
johnnyq
ac598f6379 Fix system-generated ticket replies booking fake time worked 2026-08-06 19:25:39 -04:00
johnnyq
605c7811e4 Fix AI 2026-08-06 19:18:34 -04:00
johnnyq
942fe41b18 Apply further gating to client pdf export 2026-08-06 19:03:47 -04:00
johnnyq
64423cbefa Fix Client PDF Export 2026-08-06 18:51:09 -04:00
johnnyq
3cae52067a Fix calendar event Delete bug 2026-08-06 14:21:57 -04:00
johnnyq
abb724b40b Removed Orphaned vars 2026-08-06 14:03:44 -04:00
johnnyq
f8899e592f More Select * Queries convert 2026-08-06 13:57:46 -04:00
johnnyq
108781db5b Move more select * to column select for further optimization 2026-08-06 13:44:02 -04:00
johnnyq
b3744e9ed5 More sweeps to replace select * with actual returned column names dramatically reduces php memory usage and speeds up processing dramatically especially in the crons since they run all the time 2026-08-06 13:10:23 -04:00
johnnyq
b8c9d5b4cf Query Optimization: Select only needed columns instead of SELECT * on looped queries 2026-08-06 12:59:43 -04:00
johnnyq
77defcf7d8 Global Search Query Optimization only returns columns needed 2026-08-06 12:30:27 -04:00
johnnyq
9324d0822e Drop more dead client left joins big saver is the badge counts 2026-08-06 12:14:43 -04:00
johnnyq
eb2cc3d653 Update Contributing with the new clientScopeSql function 2026-08-06 11:55:39 -04:00
johnnyq
ddd9c2b56a clientScopeSql sweep whicn now removed the extra unessesary client joins 2026-08-06 11:45:56 -04:00
johnnyq
83383599a1 Add clientScopeSql helper for client-scoped list queries 2026-08-06 11:25:11 -04:00
johnnyq
49a3c2d266 Enforce client scoping on API expense reads and record updates
Fixes (expenses/read.php missing apiClientScopeSql), plus an unscoped UPDATE in contacts/update.php and follow-up writes firing on zero-row updates in assets/credentials.
2026-08-06 11:00:49 -04:00
Johnny
ccaa45b0ae Merge pull request #1292 from itflow-org/develop
Develop to Master for26.08 Release
2026-08-04 15:29:17 -04:00
johnnyq
cbf8922f5b Update Changelog 2026-08-04 15:13:57 -04:00
johnnyq
b39f3c0b23 Redesing task bar and remove redundant task count in ticket details 2026-08-04 12:40:47 -04:00
johnnyq
f9ae7598ec Bump FullCalendar from 7.0.0 to 7.0.2 2026-08-04 12:39:04 -04:00
johnnyq
261bdab61a Gate SLA option in ticket details its gated everywhere else 2026-08-04 12:14:56 -04:00
johnnyq
1b386567fa Bump DataTables from 2.3.7 to 3.0.1 2026-08-04 12:12:42 -04:00
johnnyq
5eba64afad Bump TinyMCE to 8.8.2 2026-08-04 12:05:23 -04:00
johnnyq
c30c12674a Sync DB Seed data between setup and setup cli 2026-08-03 22:41:31 -04:00
wrongecho
8aaf5b450f Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2026-08-03 20:55:57 +01:00
wrongecho
d74c9743be Feature: Add invoice_items API endpoint (adding line items to an invoice) 2026-08-03 20:53:53 +01:00
johnnyq
0311a3d056 Fix remaing undefine vars for audits and flash messages 2026-08-03 15:40:44 -04:00
johnnyq
c5288f9e30 Fix undefined variables in expense, asset and contact audit/flash messages 2026-08-03 15:34:18 -04:00
johnnyq
e800064202 Fix Expense Description logging spelling 2026-08-03 15:28:36 -04:00
johnnyq
abd79c0aed Feature: Add Income Bulk Actions (Account, Payment Method and category 2026-08-03 15:23:50 -04:00
wrongecho
a313278623 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2026-08-03 18:58:58 +01:00
wrongecho
f87d43881e Add very basic product import via CSV 2026-08-03 18:58:53 +01:00
johnnyq
ea3d6a2fc6 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2026-08-03 13:28:53 -04:00
johnnyq
7a44cdd438 Fix Autofill products in invoice, quotes, recurring invoice, tax field wasnt updating and a dash was being put in front 2026-08-03 13:28:41 -04:00
wrongecho
ad234c5e46 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2026-08-03 18:01:47 +01:00
wrongecho
f16e7893ac Bump supported version 2026-08-03 18:01:40 +01:00
johnnyq
3b0d3839ae Merge branch 'develop' of github.com:itflow-org/itflow into develop 2026-08-03 12:55:24 -04:00
johnnyq
ffe32adbd3 Move categories and tag types to a left side nav instead of top nav 2026-08-03 12:54:33 -04:00
wrongecho
5ee1c9580f Enhance .htaccess rules 2026-08-03 17:51:04 +01:00
johnnyq
315768d651 Add Category column and filter into income along with the exports 2026-08-02 18:23:18 -04:00
johnnyq
6b5be0f881 Rework Update UI and fix banch 2026-08-02 18:07:24 -04:00
johnnyq
a27019511e Remove unused overdue invoice setting move master cron switch out of notificaiton and into cron 2026-08-02 17:22:28 -04:00
johnnyq
ad15fabbb3 Credential length guard 2026-08-02 16:30:14 -04:00
johnnyq
e793804203 Migrate credential password from varbinary to varchar and set max length for passwords 2026-08-02 16:18:36 -04:00
johnnyq
89fba247c5 Add some missing maxlength form options to prevent info overflow and result in error 500 2026-08-02 16:08:01 -04:00
johnnyq
3e532fc792 Update imapengine dependancies too 2026-08-02 01:26:40 -04:00
johnnyq
cf4446f405 Bump imapengine from 1.25.3 to 1.25.4 2026-08-02 01:21:29 -04:00
johnnyq
ab41543578 Remove unused DB wrappers 2026-08-01 19:49:22 -04:00
johnnyq
c8dab1a7e5 Revert PAyment cleanInput too 2026-08-01 18:48:07 -04:00
johnnyq
056db263a5 Rever old test run of using prepared mysql statement for client add /edit 2026-08-01 18:20:43 -04:00
johnnyq
6107d9f833 Update Contributing 2026-08-01 15:42:56 -04:00
johnnyq
23a09f54fc Reworked getFieldById to remove escaping and and reworked everything that uses the function to also escape, was causing double escaping in many places this standardizes the function 2026-08-01 15:33:48 -04:00
johnnyq
75028ba09a Fix some Ticket History gaps 2026-08-01 14:33:37 -04:00
johnnyq
cdb4a43b89 Major UI/UX overhaul on Tickets listing / Kanban and ticket details 2026-08-01 14:12:03 -04:00
johnnyq
4fec57709a Recurring Expense: Fix edit not keeping client 2026-08-01 12:09:39 -04:00
johnnyq
abe02d7d8e Fix Wording on changelog 2026-07-31 16:57:19 -04:00
johnnyq
53f45fa008 Fix queued backups never building, per-type retention, and cron connection handling 2026-07-31 16:35:39 -04:00
johnnyq
ae468d6cee Encrypted backups with types, scheduling and CLI restore
Backups are now AES-256 encrypted zips in three types (full, database
only, master key), catalogued in a new backups table, built by cron rather
than the web request, and kept under uploads/backups with retention in the
nightly job. The encryption key is one value per install held in config.php,
never in the database and never in the file name.

Restore is shared by the setup wizard and the new scripts/restore_cli.php,
which is the only path without an upload size limit. It verifies the key and
unpacks the archive before dropping anything, and dumps the current database
first so a failed import is rolled back.

A backup dumps, zips and encrypts for minutes without issuing a query, so on
a server with a short wait_timeout the connection is closed underneath it and
the UPDATE marking the backup complete is what fails - long after the archive
was written correctly. The connection is now held open for the job and
re-established before any write that follows long file work, including the
database phase of a restore. Retention recovers rows a dropped connection
left behind: still Running after six hours becomes Complete if the archive is
on disk, Failed if it is not.

cron.php's own failure path is hardened to match. It recorded job failures
through the same connection the failing job had just killed, so an uncaught
exception ended the dispatch and no trace of the original error survived.
Failures now also echo to stdout, so cron mails something useful when the
database is unreachable.

Security: the setup wizard's restore step is now closed on any install that
has users, whatever config.php says. $config_enable_setup defaulted to
enabled when the flag was absent, and the flag is only written at the end of
a successful install, so an install abandoned partway left an unauthenticated
endpoint that would drop every table, import an attacker-supplied archive,
and overwrite uploads/ including the .htaccess that stops PHP running there.
Affects 26.07 and earlier. Restoring over a live install is now CLI only.
2026-07-31 16:18:20 -04:00
johnnyq
6a5cf6704a Add Indexes to foreign key in ticket replies and attachments fixes slow ticket access issue with many replies with large inline images 2026-07-31 14:16:19 -04:00
johnnyq
16000efcf7 Drop SVG extension in the ticket mail parser 2026-07-31 12:39:10 -04:00
johnnyq
293ba534e2 Simplified Changelog 2026-07-30 19:18:05 -04:00
johnnyq
7c5579677d Cron: daily jobs catch up when the dispatcher is invoked before their scheduled time, so an old single daily crontab entry still runs them 2026-07-30 18:21:47 -04:00
johnnyq
09a74d6d26 Update changelog and Important Upgrade Steps 2026-07-30 18:01:35 -04:00
johnnyq
8436cd6296 Nightly tasks: apply late fees, overdue reminder emails, and autopay retries at most once per invoice per day, and lock nightly to the daily schedule 2026-07-30 17:50:11 -04:00
johnnyq
36c9c030c0 DB Update 2026-07-30 17:07:38 -04:00
johnnyq
0631c45040 Fix Cron Schedule and new directory includes created inside cron for the cron lock 2026-07-30 17:06:07 -04:00
johnnyq
119334ab71 Cron Fix 2026-07-30 16:44:56 -04:00
johnnyq
38e8edea19 Cron runs all jobs from a single dispatcher cron.php which should now be run every minute and all other cron jobs eliminated from cron 2026-07-30 13:48:39 -04:00
johnnyq
1005b73416 DB Structure Update 2026-07-30 02:30:15 -04:00
johnnyq
f2d5ac4a29 Feature: Calendars are now exportable shareable so Third Party Calendar services can read them, also added recoccurence to calendar, and all day along with sperating the time fields and click in a box to add calendar event is possible 2026-07-30 02:18:30 -04:00
johnnyq
3c8f812a16 Feature: On all export modals added Filter Tab and Selectable Columns tab with default selected, also you can now export to a PDF 2026-07-30 00:46:15 -04:00
johnnyq
729d22d19b Move Attachments to Assignment in new ticket get rid of help texts in reply for attachments and update changelog 2026-07-29 18:39:43 -04:00
johnnyq
2395a3ee16 Phase 2 of ticket attachements by agents 2026-07-29 18:10:34 -04:00
johnnyq
7c8c93c01c Feature allow agents to attach files to tickets in the app 2026-07-29 17:58:04 -04:00
johnnyq
e74307eaea Feature: Add Dynamic Task editing in add ticket and add recurring ticket, recurring tickets now have their own task table as well 2026-07-29 17:48:41 -04:00
johnnyq
74a5359b80 Move Watchers into assignment in add ticket 2026-07-29 17:28:57 -04:00
johnnyq
d01024931b Retire v1 Ticket and merge into 1 add ticket 2026-07-29 17:24:55 -04:00
johnnyq
8a092852cf Fixed Asset section in recurring ticket if global added project in add ticket 2026-07-29 16:52:47 -04:00
johnnyq
3296e48ac6 Unlink template from recurring ticket if template is deleted 2026-07-29 16:36:47 -04:00
johnnyq
eaf3f5abd1 Add Badge next to recurring tickets with a template 2026-07-29 16:28:17 -04:00
johnnyq
75d8b4d37c Fix get FieldByID spots 2026-07-29 16:16:32 -04:00
johnnyq
7245ff0650 Fix Cron URL Key on recurring tickets 2026-07-29 16:11:36 -04:00
johnnyq
bc64c9e3d1 Feature: Abiliry to assign Ticket Templates to Recurring Tickets 2026-07-29 15:55:14 -04:00
johnnyq
9c123c42d1 Update Changelog 2026-07-29 14:34:59 -04:00
johnnyq
af9990ff13 Fix Contact Notes and Fix a few broken links 2026-07-29 14:22:18 -04:00
johnnyq
a900b2cd74 Update DB Structure 2026-07-29 14:15:15 -04:00
johnnyq
fc5cdeea82 Add UI Elements for Asset Notes similar to contact notes 2026-07-29 14:13:55 -04:00
johnnyq
bb1f0d5489 SLA Fixes 2026-07-29 13:50:00 -04:00
johnnyq
566d74c15d Fix SLA resolve-time reporting, stale settings cache on save, and report N+1 2026-07-29 13:34:34 -04:00
johnnyq
750c2e58cc Update DB Structure 2026-07-29 13:23:02 -04:00
johnnyq
9533da4053 Repair SLA verdicts missed by kanban/portal resolve; record first response on kanban resolve 2026-07-29 13:21:37 -04:00
johnnyq
cc651c18be DB Structure Update 2026-07-29 13:04:05 -04:00
johnnyq
162a597da9 Add SLA pausing, SLA reports, SLA filtering and kanban SLA state (phase 3)
Statuses can be flagged to pause the resolution clock; sla_history records the intervals a ticket's clock actually ran and the deadline is re-based on remaining budget when it resumes. Adds SLA Summary and SLA by Client reports, an SLA state filter on the ticket list, SLA colouring on kanban cards, and an Urgent column on the Tickets by Client report. DB update 2.5.1. Also fixes resolution SLA verdicts being skipped when resolving via kanban or the client portal.
2026-07-29 13:02:27 -04:00
johnnyq
e76b384606 Add ticket reply API endpoints
GET /api/v1/ticket_replies/read.php and POST create.php, so an RMM or
monitoring system can append to a ticket it did not open.

Replies default to Internal so an integration cannot email a client by
omitting a parameter. Public replies mark first response, notify the
contact and watchers, and fire the same custom actions as the agent
reply handler. An optional ticket_status also sets the status, and
resolves the ticket and marks the resolution SLA when set to 4.

Replies are always joined to tickets so ticket_client_id is checked
against the key user's client scope, and the client_id named on a write
must match the ticket's own client. The reply is attributed to the user
the API key runs as.

read.php resolves ticket_reply_by_name, since that column holds a
user_id on Internal and Public replies but a contact_id on Client ones.
2026-07-29 01:53:18 -04:00
johnnyq
07c73a6a04 Add Urgent Priority, move Per Client SLA Settings to notes tab in client add / edit modal remove unnessesary sla admin setting for client overide 2026-07-29 00:49:31 -04:00
johnnyq
d5ed05017b Allow selecting client SLA assignments on client create/edit 2026-07-29 00:21:13 -04:00
johnnyq
dd45a0f4f1 Update DB Structure 2026-07-29 00:03:08 -04:00
johnnyq
d08ef6184a Add optional ticket SLAs
Response/resolution targets stamped at creation from per-client/priority assignments, business-hours due date math, warn/breach alert stages via cron/ticket_sla.php, ticket list coloring, per-ticket SLA override, admin page for plans/assignments/business hours. DB update 2.5.0. No behavior change unless SLAs are assigned. Bulk reply now only counts Public replies as first response.
2026-07-29 00:00:42 -04:00
johnnyq
78ee38b39f Revert DB Update 2026-07-28 22:08:01 -04:00
johnnyq
1494d2cb5e Backed out of Refunds which still keeps the fix to properly set the invoice status when payment is deleted 2026-07-28 22:03:35 -04:00
johnnyq
31921ee99b Add Refunding capability along with Stripe Refunding 2026-07-28 21:34:06 -04:00
johnnyq
b3f959ac55 Use Short echo tags across the code 2026-07-28 18:47:52 -04:00
johnnyq
0031438bce Update Contrubuting 2026-07-28 18:12:42 -04:00
johnnyq
556ab22c79 Enfoce Sales Permission Read on products export 2026-07-28 17:53:13 -04:00
johnnyq
78e7e1c49e Remove Normalize Scripts 2026-07-28 17:46:39 -04:00
johnnyq
c5ff3e2a3f Normalize line endings to LF; add .gitattributes and .editorconfig 2026-07-28 17:45:52 -04:00
johnnyq
7f7880a4a7 Add Quick Payments view modal in Invoices 2026-07-28 12:49:57 -04:00
johnnyq
5f3a0bec46 Remove old payments and revenues and all ties to the pages as these are combined in income now 2026-07-28 12:38:29 -04:00
johnnyq
c3896ba3d6 Add Export CSV to the new combined income page 2026-07-28 12:26:50 -04:00
johnnyq
7327ebb37c Stop parallel login attempts from bypassing the rate limits 2026-07-28 01:01:43 -04:00
johnnyq
2e855f62c9 Require credential module access to view or share credentials 2026-07-28 00:40:33 -04:00
johnnyq
4c65b8c561 Clear mail bodies after successful delivery 2026-07-28 00:18:07 -04:00
johnnyq
c64c76c577 Rotate session ID on login and fix client portal Entra SSO 2026-07-27 23:49:09 -04:00
johnnyq
22e93589cb Fix share link view accounting and quote response handling 2026-07-27 21:11:45 -04:00
johnnyq
f129311b2e Remove patch and update gitignore 2026-07-27 21:02:13 -04:00
johnnyq
70d165e8bc Claim shared item views atomically and log guest audit IPs 2026-07-27 20:58:37 -04:00
johnnyq
b555a300bc Give the vault session key full entropy and guard empty-key credential writes
generateUserSessionKey() built its AES-128 key with randomString(16), which
draws 12 random bytes and base64url-encodes them into 16 printable characters.
Those 16 characters were handed to openssl_encrypt as the 16-byte key, so the
key that wraps the site master key in the user's session carried 96 bits of
entropy instead of 128. Same for the IV.

The key and IV are now random_bytes(16) and stay raw for the cipher. Base64 is
applied only for transport - the cookie and the session copy of the IV - and
decoded again at the three read sites.

Sessions issued before this change will not decode and are not supported;
anyone logged in at deploy time is prompted to log in again. Nothing is stored
long term in this path, so there is nothing to migrate.

Also guards encryptCredentialEntry against a master key that failed to decrypt.
openssl_encrypt accepts false as a key and silently encrypts under an empty
key, so a session whose cookie had expired could write a credential that no
key would ever recover. It now returns false instead. This was reachable
before this change too, whenever a cookie expired mid-session.
2026-07-27 20:27:23 -04:00
johnnyq
829527244e Fix broken ajax 2026-07-27 20:25:48 -04:00
johnnyq
50352fb779 Revert vault session key entropy change 2026-07-27 20:13:46 -04:00
johnnyq
8dcb45fc9d Remove Patch 2026-07-27 20:00:42 -04:00
johnnyq
b18544c69b Give the vault session key full entropy and guard empty-key credential writes
generateUserSessionKey() built its AES-128 key with randomString(16), which
draws 12 random bytes and base64url-encodes them into 16 printable characters.
Those 16 characters were handed to openssl_encrypt as the 16-byte key, so the
key that wraps the site master key in the user's session carried 96 bits of
entropy instead of 128. Same for the IV.

The key and IV are now random_bytes(16) and stay raw for the cipher. Base64 is
applied only for transport - the cookie and the session copy of the IV - and
decoded again at the three read sites.

Sessions issued before this change will not decode and are not supported;
anyone logged in at deploy time is prompted to log in again. Nothing is stored
long term in this path, so there is nothing to migrate.

Also guards encryptCredentialEntry against a master key that failed to decrypt.
openssl_encrypt accepts false as a key and silently encrypts under an empty
key, so a session whose cookie had expired could write a credential that no
key would ever recover. It now returns false instead. This was reachable
before this change too, whenever a cookie expired mid-session.
2026-07-27 20:00:09 -04:00
johnnyq
8825661360 Dump new DB Structure 2026-07-27 18:38:48 -04:00
johnnyq
a4fdced10f Rate limit 2FA code attempts and narrow the TOTP acceptance window 2026-07-27 18:36:43 -04:00
johnnyq
97490bef3b Security Fix in recurring invoices in cron 2026-07-27 18:07:15 -04:00
johnnyq
a844d7b428 Adds a shared flock guard used by all five cron entry points, keyed per
script and per install. Replaces the mail queue's own lock file, which
was not atomic and could be deleted out from under a long run. Bounds
the SMTP conversation so an unresponsive server cannot hold the lock.
Recovers rows left at Sending by a run that died, which nothing
previously picked up.
2026-07-27 17:35:39 -04:00
johnnyq
686fca99e1 Fix Possible duplicate emails in a race condition in mail queue 2026-07-27 16:59:10 -04:00
johnnyq
775e8f58f6 Fix Cents Calc 2026-07-27 16:55:16 -04:00
johnnyq
409d769eb7 Scope the cron lock per install so instances don't block each other
Report an unopenable cron lock file instead of claiming cron is running
2026-07-27 16:41:21 -04:00
johnnyq
cff416dd87 Remove Patch 2026-07-27 15:22:46 -04:00
johnnyq
65de8c35e6 Prevent duplicate Stripe payment bookings and overlapping cron runs 2026-07-27 15:22:16 -04:00
johnnyq
815802fb7c Gate Admin UI Modals to Admin 2026-07-27 14:50:32 -04:00
johnnyq
53842a50d2 Add URI Tabs to mail settings keeps the tab active upon saving 2026-07-26 01:52:25 -04:00
johnnyq
5fc2f93b38 Allow negative numbers in add expense 2026-07-26 01:40:11 -04:00
johnnyq
32be252261 Remove patch file 2026-07-26 01:11:27 -04:00
johnnyq
04014da21f Combined Payments and Revenues as one View called income keeps all income in one place and still can add revenue not related to invoice 2026-07-26 01:10:52 -04:00
johnnyq
276e84ad0b Expenses: Set Current Date in new expense 2026-07-25 20:38:58 -04:00
johnnyq
cd34236716 Fix saved-payment setup Checkout: embedded_page ui_mode + attach existing Stripe customer 2026-07-25 19:00:06 -04:00
johnnyq
a26ac2c4fc Fixed adding saved credit cards in stipe due to API change 2026-07-25 18:47:13 -04:00
johnnyq
497ea3b669 Centralize client portal access checks through contactCan()
Replaces the duplicated primary/billing/technical checks across portal pages, post.php handlers, nav, and dashboard with contactCan()/enforceContactCan(). Same behavior, but the rules now live in one place instead of being copy-pasted, which is what let them drift before. file.php keeps its 404 response; ticket-visibility and approval-routing checks are intentionally left as-is.
2026-07-25 17:55:30 -04:00
johnnyq
887063394a Prevent client portal contacts from editing their own contact record 2026-07-25 17:28:57 -04:00
johnnyq
04bf3c234f Read API credential decrypt password from body instead of query string
Keeps the credential decryption secret out of the URL, so it no longer lands in web-server access logs, proxy logs, or browser history. credentials/read.php now reads api_key_decrypt_password from the request body, matching create/update. Consumers reading decrypted credentials must send it in the body, not the query string.
2026-07-25 17:08:22 -04:00
johnnyq
e6daf00528 Fix some broken API calls after RBAC update 2026-07-25 16:59:03 -04:00
johnnyq
c509b7f693 Add user-based RBAC for API keys
API keys now run as a user and inherit that user's module, operation, and client permissions. Drops per-key client scoping and removes existing keys (must be recreated). Adds an edit modal to change a key's user.
2026-07-25 16:50:58 -04:00
johnnyq
8d46e2a7db Fix Client Permission overides to include deny allow list in projects prohect and edit ticket 2026-07-25 13:28:47 -04:00
johnnyq
3756561458 Feature: Add Deny Client Access to Client Access Permssions - BREAKS UI, MUST UPDATE DB USING php scripts/cli_update.php --db_update 2026-07-25 13:22:52 -04:00
johnnyq
ff4b69b511 Client Enforcement via function on client edit instad of in sql query 2026-07-25 00:35:47 -04:00
johnnyq
761b2a7af4 Module permissions modal enforcement sweep to match its post counterpart 2026-07-25 00:28:42 -04:00
johnnyq
7a793cbbcc Add more enforceClientAccess to agent ajax gets 2026-07-24 22:51:57 -04:00
johnnyq
113ef4b9a4 Add more enforceClientAccess 2026-07-24 22:49:18 -04:00
johnnyq
3524010d7a Add enforceClientAccess to 4 bulk modals initially missing 2026-07-24 22:06:42 -04:00
johnnyq
8993bce53f Force No Indexes of empty directories even if enabled using .htaccess in uploads 2026-07-24 20:52:35 -04:00
johnnyq
8813b2c066 Use imapEngine lib for testing imap connection 2026-07-24 18:56:16 -04:00
johnnyq
5c4805b822 Neutralize CSV formula injection in generated exports using the new created escapeCsvFormula Function 2026-07-24 18:12:45 -04:00
johnnyq
28f1a965b8 Remove dead code 2026-07-24 17:33:09 -04:00
johnnyq
565aff35f6 Set SameSite=Lax on the session cookie
Applied at all seven session_start sites. keepalive.php and guest_post.php
had no cookie flags at all and now set httponly and secure too.
2026-07-24 14:09:52 -04:00
johnnyq
3549c2ef2a Harden CSRF handling and session cookies
Return 403 on CSRF failure instead of a 302, which anything following
redirects records as a 200. Set SameSite=Lax at every session_start;
keepalive.php and guest_post.php had no cookie flags at all.
2026-07-24 14:06:04 -04:00
johnnyq
8afc5aea89 Typo fix 2026-07-24 13:45:52 -04:00
johnnyq
af51c4316f Updated validateCSRFToken to automatically grab and compare get or post csrf token no longer need to pass an argument to the function which fixed the issue if no hash was present 2026-07-24 13:40:37 -04:00
johnnyq
dd358da65d Update missing CSRF endpoint checks missed update_db 2026-07-24 13:22:17 -04:00
johnnyq
91a1676e89 Update missing CSRF endpoint checks 2026-07-24 13:16:51 -04:00
johnnyq
e7698f15bd Make better use of formatAddress function for clients listing 2026-07-24 12:22:15 -04:00
johnnyq
c7b34fe107 Remove leftover getFallBack in client pdf export in favor of ?: '-' 2026-07-23 18:29:11 -04:00
johnnyq
5846119ec9 remove duplicate formatAddress 2026-07-23 18:16:57 -04:00
johnnyq
41b118ab87 Add formatAddress function and replace all addresses with it 2026-07-23 18:10:39 -04:00
johnnyq
9c65644adc Update the rest of the PHP functions to use camelCase 2026-07-23 17:39:06 -04:00
johnnyq
3d94846a61 Fix broken link to service modal in services 2026-07-23 13:48:00 -04:00
johnnyq
90bc8ed029 Fix broken links to modals and remove _details from service 2026-07-23 13:43:04 -04:00
johnnyq
40be80981d Fix vendor modal link in service details 2026-07-23 13:34:08 -04:00
johnnyq
b853c24c96 Remove a few more unused vendor contact modals and update the escaping in rename modal vendor_details.php to vendor.php 2026-07-23 13:26:06 -04:00
johnnyq
5f26d75e18 Update Functions in ticket_edit_vendor and document link vendor and deleted legacy code unused that had legacy functions tied to them 2026-07-23 13:17:41 -04:00
johnnyq
8f43b92496 Use stripe_init include to init stripe and updated code everywhere 2026-07-23 13:00:01 -04:00
johnnyq
7ccdc942fe Bump imapEngine from v1.25.2 to v1.25.3 2026-07-23 00:59:07 -04:00
johnnyq
2b756f6ea4 Split DB Updates into seperate files, with the cutoff being 2.0.0 2026-07-22 18:43:11 -04:00
johnnyq
17e4c61067 Spelling Fix 2026-07-22 17:40:30 -04:00
johnnyq
fad62ca045 Remove custom_hosting tables 2026-07-22 17:36:55 -04:00
johnnyq
5402578ce6 Remove Static payment processing fees from database and update field hints with useful info when adding / editing payment provider 2026-07-22 17:32:01 -04:00
johnnyq
8ee780566e Cleanup Expense Code in post blocks and remove single use function since stripe payments get reconciled during nightly cron 2026-07-22 17:06:10 -04:00
johnnyq
08334b22c3 Add Stripe fee reconciliation to cron
Balance transactions aren't always attached when a payment completes,
so the fee expense can be skipped at payment time. Daily cron pass now
finds recent Stripe payments with no matching fee expense and records
the actual fee once available. Dedupes by expense reference prefix,
30-day lookback.
2026-07-22 16:47:28 -04:00
johnnyq
f4b1b6585b Move Expense block for Stripe after intent 2026-07-22 16:16:40 -04:00
johnnyq
66b38b7f19 Get Expense from Stripe instead of Static Entry 2026-07-22 16:07:39 -04:00
johnnyq
54e2005224 Icon change for Mail Queue 2026-07-21 14:18:33 -04:00
johnnyq
d5a1305192 Reorg Admin Side nav menu 2026-07-21 14:17:16 -04:00
johnnyq
4bb497ea9c Reorganize Client Side nav and the renamed Client overview to All Client Docs side nav 2026-07-21 13:43:56 -04:00
johnnyq
97ab1df762 Feature: Add Transactions, reorg Main side nav 2026-07-21 13:21:23 -04:00
johnnyq
058e31c290 Fix Truncated Client name in side nav needs to be truncated before escaped 2026-07-20 19:31:31 -04:00
johnnyq
d173357b51 Add Bulk and Single Refresh certificate Actions 2026-07-20 19:14:38 -04:00
johnnyq
e134c89c3a Add Bulk and Single Refresh Domain Actions 2026-07-20 18:54:01 -04:00
johnnyq
a35ef025dc Add Expiring in Filter Field to assets, licenses, domains and certificate and wire that into the dashboard as well 2026-07-20 18:25:44 -04:00
johnnyq
ce0a62b0c3 Add Expiring Asset Warranties and Liceneses to the Dashboard 2026-07-20 17:45:03 -04:00
johnnyq
1a3d7a1e0d Bump ImapEngine from 1.25.1 to 1.25.2 2026-07-18 11:17:53 -04:00
johnnyq
9cc7e5ff3c Move Guest Function formatBytes to root shared functions and use in files and files section in contact 2026-07-16 20:25:18 -04:00
johnnyq
113d6220bb Add back missing function call 2026-07-16 19:32:52 -04:00
johnnyq
e40926c08d Restore native DNS/RDAP domain lookups (lost in functions.php split)
getDnsRecords and getDomainExpirationDate had regressed to shell_exec
(dig/whois) when domain code was moved into functions/domain.php; the
RDAP helper stack was dropped entirely. Restores the dns_get_record +
RDAP + port-43-socket-whois implementation from d1e1609b under the
current function names. getSslCertificate was unaffected.
2026-07-16 19:30:38 -04:00
johnnyq
e11d8f3252 Harden checkFileUpload: drop content hashing for random storage names
Replace md5(file_contents)+randomString(2) naming with randomString(32).
No longer reads the file into memory (removes file_get_contents), so
validation is O(1) regardless of size or upload count. Add is_uploaded_file()
and UPLOAD_ERR_OK checks, use pathinfo() for extension extraction, and
return false consistently on all failures (oversize previously returned a
truthy error string that callers treated as a valid filename).
2026-07-16 19:18:08 -04:00
johnnyq
41d029937a More Client Scoping fixes 2026-07-16 14:29:23 -04:00
johnnyq
1251944dcc More Client Enforcement in modals across the app 2026-07-16 13:33:17 -04:00
johnnyq
2c09ce097c More Client Enforcement in modals across the app 2026-07-16 13:10:02 -04:00
johnnyq
9e84ce4c07 Ticket Merge: EnforceClientAccess on modal and ticket list 2026-07-16 12:14:36 -04:00
johnnyq
a8ad16758c Update Contributing 2026-07-16 00:44:51 -04:00
johnnyq
9f11af0d4d Update Contributing 2026-07-16 00:42:10 -04:00
johnnyq
906f58473d Fix guest view credential totp 2026-07-16 00:26:25 -04:00
johnnyq
e39ecb7ac9 Remove Legacy OTP code and fix guest view credential 2026-07-15 22:02:52 -04:00
johnnyq
86b0e11e95 Enforce ClientAccess in asset modal 2026-07-15 21:37:48 -04:00
johnnyq
2076bb2a93 Added Audit Log on Edit Credential Modal as password can be viewed here 2026-07-15 21:13:07 -04:00
johnnyq
7c9bd77603 Remove unused credential view model, add enforceClient Check on export client pdf 2026-07-15 21:09:11 -04:00
johnnyq
b1c57fc5c7 Feature: Add new js function to retrieve and Audit log Password reveals, still need to get the edit modals 2026-07-15 20:32:50 -04:00
johnnyq
89cb9074ab UI: Add Monospace font to timestamps in notifications listing 2026-07-15 18:59:05 -04:00
johnnyq
590bad3bcc Global Search: use secure file handler on files in global search 2026-07-15 18:55:40 -04:00
johnnyq
60bae12024 Clean up admin post handler to match agent
- Anchor includes and glob to __DIR__ so loading doesn't depend on CWD
- Replace _model.php regex check with str_ends_with()
2026-07-15 18:48:40 -04:00
johnnyq
e48ea57db9 Clean up agent post handler
- Remove dead referer/module parsing (unused since modules are glob-loaded)
- Anchor includes and glob to __DIR__ so loading doesn't depend on CWD
- Replace _model.php regex check with str_ends_with()
2026-07-15 18:45:27 -04:00
johnnyq
3838d052f0 Add secure file handler for client ticket attachment and file view along with client and contact permission isolation, add the handler links in asset and contact 2026-07-15 18:35:32 -04:00
johnnyq
c8f616ebee Ticket UI: Migrated ticket Attachments to a small table class 2026-07-15 13:52:52 -04:00
johnnyq
33a2929ab6 Feature: Secure File Download Handler for ticket attachments Implemented 2026-07-15 13:42:19 -04:00
johnnyq
df3a24eab7 Feature: Secure File Download Handler Implemented 2026-07-15 13:11:02 -04:00
johnnyq
6dbe84dee4 Update admin/ breadcrumbs to match plural file names 2026-07-15 00:48:16 -04:00
johnnyq
6e20800a98 Update Tax to Tax Rate in headr title for tax rates 2026-07-15 00:44:32 -04:00
johnnyq
dfedc31c04 Update Tax to Tax Rates in admin side nav 2026-07-15 00:43:09 -04:00
johnnyq
dae7f09650 Remove _details, fix plural and singular file naming in admin, update admin post to match agent post 2026-07-15 00:38:34 -04:00
johnnyq
38a042d435 Remove _details and use singular filename for certain objects 2026-07-15 00:12:27 -04:00
johnnyq
c3a438ee59 Replace the rest of the getFallBack Functions with simple ?: '-' 2026-07-14 19:17:26 -04:00
johnnyq
bcb244c245 Update skipped function renames in anything named vendor 2026-07-14 19:09:32 -04:00
johnnyq
cddcedbf1c Cleanup format Functions 2026-07-14 18:28:53 -04:00
johnnyq
eac913eb07 Remove function removeEmoji() as this is no longer needed as the DB Charset is set to the standard utf8mb4 across the board 2026-07-14 18:27:02 -04:00
johnnyq
ee7ef71855 Correct plugins to libs path for zapCal library in functions 2026-07-14 18:15:32 -04:00
johnnyq
2181e92e44 Removed valueOrDash Function was able to replace with ?: '-' 2026-07-14 18:13:34 -04:00
johnnyq
746e919aff Replace Function getFallBack with valueOrDash() 2026-07-14 18:00:12 -04:00
johnnyq
71f7299337 Replace Function roundToNearest15() with roundToNearest15Min() 2026-07-14 17:55:59 -04:00
johnnyq
21a23e79b0 Replace Function getSSL() with getSslCertificate() 2026-07-14 17:54:31 -04:00
johnnyq
52b5063066 Replace Function getDomainRecords() with getDnsRecords() 2026-07-14 17:53:16 -04:00
johnnyq
8f824a1868 Replace Function shortenClient() with shortenClientName() 2026-07-14 17:46:25 -04:00
johnnyq
9d540f4bfe Replace Function customAction() with triggerCustomAction() 2026-07-14 17:43:55 -04:00
johnnyq
b8873039a4 Rename Functions: flash_alert, sanitizeFilename and display_folder_options using camelCase instead to match other custom php functions 2026-07-14 17:41:41 -04:00
johnnyq
f1836c70cd Replace Function logAction() with logAudit() 2026-07-14 17:35:23 -04:00
johnnyq
29a0b3ead8 Replace Function fetchUpdates() with checkForUpdates() 2026-07-14 17:31:54 -04:00
johnnyq
31cc3f3ac3 Replace Function strtoAZaz09() with toAlphanumeric() 2026-07-14 17:30:13 -04:00
johnnyq
8de3cd300d Replace Function key32gen() with generateTotpSecret() 2026-07-14 17:27:02 -04:00
johnnyq
b57ddc0e5c Replace Function sanitizeInput() with just escapeSql() and update all instances throughout 2026-07-14 17:17:50 -04:00
johnnyq
7bc47a58fe Replace Function nullable_htmlentities() with just escapeHtml() and update all instances throughout 2026-07-14 17:10:45 -04:00
johnnyq
d62b6e2ae7 Update comment 2026-07-14 16:58:16 -04:00
johnnyq
5eb9f6b6d5 Fix weak RNG in key32gen (TOTP secret generation)
Replace srand()/rand() with random_int() for cryptographically secure,
unbiased key generation. The previous implementation seeded rand() from
microtime(), making TOTP secrets predictable if the generation time
could be approximated. Also removes modulo bias and dead while(1)
wrapper.

Output format is unchanged: 32 chars from the base32 alphabet (A-Z,
2-7), so existing TOTP enrollments are unaffected.
2026-07-14 16:57:16 -04:00
johnnyq
bf0d799caf Remove old function comment 2026-07-14 16:51:34 -04:00
johnnyq
29bea9517d Removed the last of legacy validate functions and replaced with the new enforce fumctions. 2026-07-14 16:49:14 -04:00
johnnyq
a2a96f9752 Removed unused legacy functions and split the functions into their own file and use function.php to call them 2026-07-14 16:32:45 -04:00
johnnyq
c1447f5bad Bump TinyMCE from 8.6.0 to 8.7.0 2026-07-14 16:08:05 -04:00
johnnyq
79032de032 Certificates: Allow to search by description 2026-07-14 11:23:54 -04:00
johnnyq
b81e57db28 Show Invoice Stats in Invoice only for user permissable clients 2026-07-13 17:19:32 -04:00
johnnyq
95441dc3bb Show 7 Characters of client name in client side nav instead of Abbreviation 2026-07-13 13:29:24 -04:00
johnnyq
fe7e9b2398 Main Side Nav: Only shows counts to the user who has permission to see 2026-07-13 13:08:03 -04:00
johnnyq
91e9f6097b Client Overview Side Nav: Only shows counts to the user who has permission to see 2026-07-13 12:45:59 -04:00
johnnyq
0f0aa89f75 Bump ImapEngine from 1.25.0 to 1.25.1 2026-07-10 18:37:16 -04:00
johnnyq
8da3a107fb Rename plugins to libs and update all file references 2026-07-10 13:24:20 -04:00
johnnyq
7ba1571400 Revert Billable placement in tickets, create CONTRIBUTING.md file 2026-07-10 12:32:46 -04:00
johnnyq
d2026a417f Add Client to top of the modals trips, ticket, recurring ticket, invoice, recurring invoice, quote and rework the UI for Ticket/Recurring ticket create Put Billable beside subject so it doesnt take up a whole row 2026-07-09 18:50:31 -04:00
johnnyq
fc59481476 Enforce Client Access in client selectbox 2026-07-09 16:17:00 -04:00
johnnyq
21328c2dee clientEnforcement on Recurring Invoices and payments listings 2026-07-09 16:13:39 -04:00
johnnyq
317fe91359 Add Missing clientEnforcement in various modals, already handled on POST also add client selection in edit trip and enforce client permissions on trips 2026-07-09 16:07:54 -04:00
johnnyq
68f705b135 Set EnforceClientAccess Perms throughout expenses, modals and post along with listing 2026-07-09 14:51:51 -04:00
johnnyq
c01645c4e2 Expense: On create enforce client Access only if Client is selected 2026-07-08 18:13:14 -04:00
johnnyq
ae5c9fe8ec Mail Parser: Add logic when creating ITFlow folder to determine if the namespace is INBOX. or can be created in root directory. Fixes issue with CPanel Dovecot Maildir++ configuration where their namespace is just INBOX 2026-07-08 15:58:00 -04:00
johnnyq
de6d2b1595 OAUTH Send Quote Fix: was reading smtp host var needed to read smtp provider as smtp host is not filled in when OAUTH2 is selected 2026-07-07 16:20:21 -04:00
johnnyq
47a5825d3e OAUTH Send Invoice Fix: was reading smtp host var needed to read smtp provider as smtp host is not filled in when OAUTH2 is selected 2026-07-07 15:04:48 -04:00
johnnyq
78c3dd0eed Remove Dig and Whois binary requirements, revert fetchUpdates function 2026-07-05 16:05:19 -04:00
johnnyq
d1e1609b8a Right — same commit or separate, here's the combined version covering both:
Remove exec/shell_exec from update checker and domain lookups

Update checker (fetchUpdates) no longer shells out to git:

- Current commit read directly from .git/HEAD, following the branch
  ref through loose refs with a packed-refs fallback (survives git gc);
  detached HEAD handled
- Latest commit fetched from the GitHub API via curl using the
  Accept: application/vnd.github.sha header (returns bare SHA, no
  JSON parsing)
- Repo owner/name derived from the origin remote in .git/config so
  forks check against their own remote, falling back to
  itflow-org/itflow
- Failures now distinguish unreadable .git (permissions) from API
  errors (network/rate limit) instead of silently returning empty

Domain lookups no longer shell out to dig and whois:

- DNS records (A/NS/MX/TXT) via dns_get_record()
- Registration data via RDAP (JSON over HTTPS, curl), the ICANN
  successor to port-43 whois; RDAP server per TLD resolved from
  IANA's bootstrap registry, cached locally for a week, rdap.org as
  secondary lookup
- Expiration date from RDAP's structured expiration event, replacing
  regex/date-format guessing for RDAP-covered TLDs
- Port-43 whois retained as socket-based fallback (fsockopen) for
  ccTLDs without RDAP, with IANA server discovery and one registrar
  referral follow
- RDAP responses cached per-run: getDomainRecords() and
  getDomainExpirationDate() on the same domain = one HTTP request

Fixes whois rate limiting, removes the exec dependency for hardened
hosts (Snuffleupagus etc.), and eliminates the shell injection
surface - no shell, nothing to escape.
2026-07-05 15:33:51 -04:00
Johnny
698135d53d Merge pull request #1291 from itflow-org/develop
Develop to Master for Stable
2026-07-03 12:43:04 -04:00
johnnyq
a32c4b5172 Update Changelog 2026-07-03 12:29:10 -04:00
johnnyq
c34e4f5ff0 EnforceClientAccess on Generating Guest Share Links 2026-07-03 12:27:46 -04:00
johnnyq
aab8b34970 Bump ITFlow Version and changelog 2026-07-03 12:15:05 -04:00
johnnyq
1a1f6d80a1 Possible Fix for OAUTH2 M365 2026-07-02 16:08:59 -04:00
Johnny
12e5d13282 Merge pull request #1289 from itflow-org/develop
Develop to Master for Stable Release
2026-07-01 11:19:50 -04:00
johnnyq
fe9e3274fe Fix missing ) 2026-07-01 11:11:30 -04:00
johnnyq
9f14e97d58 Update changelog 2026-06-29 19:04:59 -04:00
johnnyq
fab5dbea04 Don't set Theme to Gray amd blue when in client section always Keep configured theme 2026-06-29 18:52:56 -04:00
johnnyq
1bcc535e99 Updated Changelog and Bump ITFlow version and update logs timestamp fields to use monospace font 2026-06-27 21:52:02 -04:00
johnnyq
6a448668ad Clients: Only show 3 tags per line 2026-06-26 13:28:03 -04:00
johnnyq
166a606ba9 Remove client counts on clients listing page 2026-06-26 13:26:25 -04:00
johnnyq
48c33ae1ab Enforce Client Access and Role Access for AI Ticket Summary 2026-06-26 12:40:47 -04:00
johnnyq
e7b53388a0 Check CSRF and Enforce ClientAccess when deactivating Shared Items 2026-06-26 12:17:38 -04:00
johnnyq
f14fa22222 USe enforceClientAccess and enforceUserPermissions on Client related edit / view modals as we do with credential edit modal 2026-06-26 12:05:11 -04:00
johnnyq
c16a1753a5 Add text MonoSpace in places where it needs to be, reduced info icon size in clients, Fixed navigation highlight for files when in document details and is asset details 2026-06-25 18:06:39 -04:00
johnnyq
a53d828a73 MAil Settings: Further UI Sprucing added more placeholder text field with only number input for ports etc 2026-06-25 16:01:11 -04:00
johnnyq
298569a2c2 Mail Setting UI: Rework the entire Mail Configuration 2026-06-25 15:49:09 -04:00
johnnyq
8e9cd7a8a5 Bump Sortablejs from 1.15.6 to 1.15.7 2026-06-24 14:28:21 -04:00
johnnyq
2010acaaa2 Bump TinyMCE from 8.5.0 to 8.6.0 2026-06-24 14:26:03 -04:00
johnnyq
ceec38d3f1 Bump Fullcalendar from 6.1.20 to 7.0.0 amd convert existing code to comply with 7.0, also make calendar more printable 2026-06-24 14:22:56 -04:00
johnnyq
bd310d1e5d Bump PHPMailer from 7.0.2 to 7.1.1 2026-06-24 13:53:50 -04:00
johnnyq
3d858eb761 Update to latest version of imapengine 1.25.0 2026-06-24 13:48:26 -04:00
johnnyq
171a0d38f8 Mail Parser: Completely remove Webklex IMAP and all dependcies 2026-06-24 13:39:07 -04:00
johnnyq
63ad3256ee CLI Setup: Add repo_branch option defaults to master 2026-06-24 13:18:01 -04:00
johnnyq
6e7d2b2d6a Invoice Late Overdue notices shows correct balance when late fees are attached and if partial invoice was paid 2026-06-24 13:07:52 -04:00
johnnyq
a819dff19a Mail: Update mail configuration check to use smtp_provider instead of smtp_host as host is blank upon using oath2 2026-06-24 12:47:41 -04:00
johnnyq
6532c2dde4 User Preferences Avatar: Fix creating user upload directory if doesnt exist, and remove Avatar now properly deletes the old avatar image 2026-06-24 12:04:19 -04:00
johnnyq
b1a5b34725 Do not send an inapp alert on successful cron execution, keep it in logging only 2026-06-23 18:22:20 -04:00
johnnyq
d2d1a75448 Generate CSRF Token during Client Portal login when using Entra 2026-06-12 17:38:58 -04:00
johnnyq
d3a93652f3 Allow PHP-8.2 and up Compatibility instead of just PHP-8.4 2026-06-12 17:06:10 -04:00
johnnyq
2204bd52f4 Rewrite email parser using ImapEngine, harden processing loop
Replace webklex/php-imap with directorytree/imapengine in the ticket
email parser. ImapEngine is pure PHP over sockets.

Parser improvements:
- Wrap per-message processing in try/catch so one malformed email
  can't abort the run; failures are flagged and logged with UID
- Query unseen + unflagged so previously-failed (flagged) messages
  are no longer re-processed on every cron run
- Skip vacation/auto-responder emails (RFC 3834) to prevent mail
  loops with the ticket auto-reply
- Cap messages per run (50) and attachment size (15MB); inline
  images over 2MB are stored as attachments instead of base64-embedded
  in ticket details
- Atomic lock file creation
- preg_quote() the ticket prefix in subject matching
- Dedupe CC watchers and exclude the sender
- Map webklex 'tls' encryption setting to STARTTLS for compatibility

NDR/DSN parsing now walks MIME parts via the underlying
zbateson parser instead of relying on attachment extraction.
2026-06-12 16:56:39 -04:00
johnnyq
300a1aff9f Login: Uodate Email text field to email type 2026-06-07 13:01:28 -04:00
johnnyq
63d86917ae Generate Secure link: Use intval for item_expires and include HOUR in the insert query 2026-06-02 14:56:21 -04:00
johnnyq
9b77bbdd0b declare intval 2026-05-22 11:26:20 -04:00
Johnny
60563e3392 Merge pull request #1284 from itflow-org/develop
Bump Version
2026-05-21 10:53:48 -04:00
johnnyq
a02d78bde5 Bump Version 2026-05-21 10:38:56 -04:00
wrongecho
bd15cbe375 - Stripe saved cards - lock down invoice and client IDs
- Stop app log handling from breaking due to quotes
2026-05-20 17:51:54 +01:00
wrongecho
c5d67cd4f9 Kanban - Enforce per-client perms (ajax) 2026-05-20 14:01:55 +01:00
wrongecho
7211426292 Invoices - Secure date/frequency input handling 2026-05-20 13:32:21 +01:00
Johnny
885a002611 Merge pull request #1281 from itflow-org/develop
Develop to Master
2026-05-04 17:00:10 -04:00
johnnyq
67382a4c4c Fix extra } 2026-05-04 16:56:37 -04:00
johnnyq
351e81231f Update Changelog Bump Release 2026-05-04 16:50:18 -04:00
johnnyq
0ecd76329c Bump TCPDF from 6.11.2 to 6.11.3 2026-05-04 16:15:30 -04:00
johnnyq
f5da94a278 Bump TinyMCE from 8.4.0 to 8.5.0 2026-05-04 16:07:56 -04:00
johnnyq
e0f2fc1e1b Enforce Client Access Restriction on ajax call get_totp_token_via_id 2026-05-04 15:48:40 -04:00
johnnyq
8094e6e761 Credentials: Enforce Credential Perm and client perm on credient edit / view modals 2026-05-04 15:37:02 -04:00
johnnyq
a7c4136d60 Enforce Credential Permissions on contact, asset details both full page and modals 2026-05-04 15:30:33 -04:00
johnnyq
67f9f9ec76 Client Overview: Enforce visibility permissions on credentials in client overview 2026-05-04 13:38:31 -04:00
johnnyq
90232c82c0 Fix broken add saved card, by commenting CSRF Check on add saved card in client post 2026-05-04 12:59:01 -04:00
johnnyq
0cdb780b88 Stripe Payment: Rollback stipe-php from 20.0.0 back to 19.4.1 to fix a isses with adding saved paymentss, Stripe updated their API in which we will update to a later date 2026-05-04 12:32:12 -04:00
johnnyq
a6d996b83f Projects: Fixing missing ' regression 2026-04-27 13:17:21 -04:00
johnnyq
b6e3176ed0 Projects: Fix slow load by using an optimized query to count tickets and tasks 2026-04-27 13:15:11 -04:00
wrongecho
e762ebb88b Show correct currency for the account balance when adding payment to invoice 2026-04-27 14:07:05 +01:00
wrongecho
163581cbcd Expire all PW reset tokens nightly with cron 2026-04-27 13:36:39 +01:00
johnnyq
e9c3ee4661 Shared Items via secure link: Do not delete shared items that have not been viewed before cron runs 2026-04-24 11:40:38 -04:00
johnnyq
90de4e4fe3 Client: Fix Client Abbreviation being converted to an int on edit 2026-04-17 12:15:56 -04:00
Johnny
5c89e50f30 Merge pull request #1278 from itflow-org/develop
Develop to master for release
2026-04-16 15:22:58 -04:00
johnnyq
cb9ac33fbe Update changelog 2026-04-16 15:18:47 -04:00
johnnyq
319ccbad01 Revert "API: Add some missing end points"
This reverts commit c4ba2bc326.
2026-04-16 15:16:08 -04:00
johnnyq
4e862053e8 Fix Missing CSRF in unused modals 2026-04-13 13:19:12 -04:00
johnnyq
9c0c8ec239 Update Changelog 2026-04-12 11:41:15 -04:00
johnnyq
715aadb9d3 Update Changelog 2026-04-12 11:34:46 -04:00
johnnyq
f94458690e API: Remove Payment Endpoint for now 2026-04-12 11:26:56 -04:00
johnnyq
134b5e6491 Update changelog 2026-04-11 18:47:35 -04:00
johnnyq
c4ba2bc326 API: Add some missing end points 2026-04-11 18:21:03 -04:00
johnnyq
1e02322382 API: Invoice_items only return if item_id or invoice_id is specified and do not return all invoice items 2026-04-11 17:57:22 -04:00
johnnyq
81f87e3960 Update Changelog 2026-04-11 14:07:11 -04:00
johnnyq
efaeac3c14 Networks: Added Import Networks 2026-04-11 14:06:31 -04:00
johnnyq
bb06ced05b update Changelog 2026-04-11 13:43:26 -04:00
johnnyq
ed564f64ff Merge branch 'develop' of github.com:itflow-org/itflow into develop 2026-04-11 13:33:30 -04:00
johnnyq
830f40edee API: Add Invoice Items read endpoint 2026-04-11 13:32:50 -04:00
wrongecho
ec9a148e97 API - Fix documents not falling back to DB values 2026-04-09 16:07:44 +01:00
wrongecho
5efdfc53ff Asset API - History 2026-04-09 15:25:21 +01:00
johnnyq
c1bb1694a0 Update Changelog 2026-04-08 12:54:05 -04:00
johnnyq
82b5613335 Bump TinyMCE from 8.3.2 to 8.4.0 2026-04-08 12:51:25 -04:00
johnnyq
123a581583 Bump stripe-php from 19.4.1 to 20.0.0 2026-04-08 12:44:45 -04:00
johnnyq
346d7ed9f0 Update the changelog 2026-04-05 12:06:12 -04:00
johnnyq
b79a6c390e Move some arrays out of load global settings and into their own entity 2026-04-05 12:00:56 -04:00
johnnyq
fae74a8b1e Software: Add Additional License Types 2026-04-05 11:48:07 -04:00
johnnyq
c434b5e6f0 Categories: Fix Restore function and restore icon and color 2026-04-04 18:22:05 -04:00
johnnyq
e7ed88e10e Remove custom_hosting tables from db.sql 2026-04-04 18:14:13 -04:00
johnnyq
78971d1ccb Setup cli: add categories to mimic setup web ui 2026-04-04 18:09:29 -04:00
johnnyq
8a4bb2e80d Update App version 2026-04-04 17:51:14 -04:00
johnnyq
c25b5aac9d Update Changelog 2026-04-04 17:49:48 -04:00
johnnyq
4856c5cb1f Update Changelog 2026-04-04 17:46:56 -04:00
johnnyq
065e674a68 Quotes: Fix Quote Copy missing client 2026-04-04 17:38:12 -04:00
wrongecho
20be416fa6 API
- Fix credential errors since field names changed
- Sort domains properly
2026-04-04 11:20:52 +01:00
wrongecho
4617f44cda - Prevent error 500s when existing data can't be cleanly re-inserted to database 2026-04-04 11:01:34 +01:00
wrongecho
0ae4c2fac9 - Prevent error 500s when existing data can't be cleanly re-inserted to database
- Full support for asset_uri_2
2026-04-04 10:52:32 +01:00
wrongecho
9389f2cc91 More helpful error 2026-04-04 10:49:50 +01:00
wrongecho
52c2ba69cb Don't set client ID from POST - this is properly done via require_post_method instead only if it's an all-clients key. 2026-04-04 10:49:40 +01:00
wrongecho
8591758cd7 Fix asset read api - uri_2 2026-04-04 10:18:21 +01:00
johnnyq
02d217402c Categories: Moved note type, software type, rack type to be creatable/editable Categories with common defaults and descriptions 2026-03-31 18:05:16 -04:00
johnnyq
52eb0b9c21 Files: Allow .swb file extensions for MikroTik Backups 2026-03-31 17:19:27 -04:00
johnnyq
5698da9c5b Update Changelog 2026-03-30 17:41:52 -04:00
johnnyq
aa19472512 Ticket: Fix missing contact in version 1 Create Ticket 2026-03-30 17:38:44 -04:00
johnnyq
11288ce782 Fix missing setting DB Version 2026-03-30 17:31:15 -04:00
johnnyq
383897ee27 Assets: Moved asset status to be creatable/editable Categories with common defaults and descriptions also Add category description to add / edit modals and description underneath category name 2026-03-30 17:25:51 -04:00
johnnyq
7bed0231d2 Categories: Make category type pretty Capitalize words, replace _ with space 2026-03-30 15:29:13 -04:00
johnnyq
d8359e1049 Network Interface Types: Moved to creatable/editable Categories with common defaults 2026-03-30 15:24:09 -04:00
johnnyq
35fb8b1ee6 Update Changelog for 26.03.1 Release 2026-03-30 11:58:22 -04:00
wrongecho
793b14885b Remove unnecessary blank line in account.php 2026-03-30 10:28:45 +01:00
johnnyq
bb3e311fb7 Racks: Fix Device Removal 2026-03-27 17:02:13 -04:00
johnnyq
65b53dd7f4 Tables: Removed removed -sm in table-responsive to fix some responsive issues also adding margin between top and bottom tags in clients and moved the tags in its own div 2026-03-26 13:30:07 -04:00
johnnyq
0e75106e1a Client POST: Added comment regarding MySQLi Prepared statement usage within Client add/edit POST 2026-03-23 13:30:03 -04:00
wrongecho
619dd0d472 Fix missing csrf tokens in category modals 2026-03-23 16:36:15 +00:00
johnnyq
22d33847c3 Fix edit client 2026-03-22 19:53:35 -04:00
johnnyq
6d1b654d0c Invoice: Do not apply late fee on first overdue reminder (day 1) 2026-03-20 17:44:33 -04:00
Johnny
c650764eb5 Merge pull request #1271 from itflow-org/develop
Develop to Master
2026-03-14 13:03:05 -04:00
johnnyq
43dbc69358 Remove custom tables from db.sql 2026-03-14 12:25:15 -04:00
johnnyq
5c24813d36 Move client column back to the end in networks 2026-03-10 20:43:01 -04:00
johnnyq
c8dd7f2970 Network: Fix Assignable IPs field not posting 2026-03-10 20:35:37 -04:00
johnnyq
d13104bb5a Update changelog order 2026-03-10 14:06:34 -04:00
johnnyq
5d85810e58 Update Changelog 2026-03-10 14:01:59 -04:00
johnnyq
b00014771d tickets: Add Tooltip to Approve task 2026-03-10 13:58:39 -04:00
johnnyq
b133f63736 Ticket: Fix Task Approval 2026-03-10 13:54:54 -04:00
johnnyq
e45563ad66 Update Changelog 2026-03-10 13:25:19 -04:00
johnnyq
cf639cbf98 Update Changelog 2026-03-10 13:22:22 -04:00
johnnyq
b365b7c810 Rename unarchive to restore in assets 2026-03-09 15:33:32 -04:00
johnnyq
b394f484d3 Fix Vars add empty value placeholder for Ticket Frequency 2026-03-09 15:29:22 -04:00
johnnyq
ada336ceea Update var names 2026-03-09 15:16:29 -04:00
johnnyq
26ebac450f Setup: Fix config_base_url if not using the script so /setup is not appended 2026-03-09 12:04:21 -04:00
johnnyq
6e33c071ef Hide New Invoice, Recurring Invoices, Tickets, revenues, products for appropriate permissions 2026-03-09 11:44:45 -04:00
johnnyq
5bd21a2bd4 add .unifi to the allowed extensions on file uploads 2026-03-09 11:22:46 -04:00
johnnyq
e2547122a6 Update Var naming schemes to match the post var name 2026-03-08 14:25:12 -04:00
johnnyq
edad83cc37 Fix Regression of chnage post name from client to client_id Add / Edit Expense 2026-03-08 13:43:46 -04:00
johnnyq
b0190f462c Invoice: Fix Regression caused by renaming post var clien to client_id 2026-03-08 13:33:36 -04:00
johnnyq
c936823912 Update Changelog 2026-03-08 12:54:58 -04:00
johnnyq
7acaf55331 Bump App Version and Update Changelog 2026-03-08 12:47:02 -04:00
johnnyq
6122efc870 Updated all Queries related to invoice items to reflect their new tables quote, invoice, recurring invoice items 2026-03-07 19:35:44 -05:00
johnnyq
7f180eb6d9 Migrate Invoice Quote Recurring Invoice Items to their new respecting tables 2026-03-07 18:47:28 -05:00
johnnyq
72091670fd Bump DB to to include tables for quote items and recurring invoice item for future splitting of line items 2026-03-07 18:23:19 -05:00
johnnyq
2b6ebca4c3 Fix Project templates listing to not open edit modal when project is clicked 2026-03-07 18:00:32 -05:00
johnnyq
e44d571331 Allow Project template ticket templates to be Drag and drop sorted instead of manually typing in the order 2026-03-07 17:56:39 -05:00
johnnyq
526fa1aff5 Bump stripe-php from 19.0.0 to 19.4.1 2026-03-07 17:19:48 -05:00
johnnyq
11ba077726 Bump fullcalendar from 6.1.19 to 6.1.20 2026-03-07 17:09:01 -05:00
johnnyq
ffb97006ec Bump TCPDF from 6.10.1 to 6.11.2 2026-03-07 17:01:53 -05:00
johnnyq
8dbbef37bb Fix file upload missing client_id 2026-03-07 16:50:11 -05:00
johnnyq
92b98b95ee Better field arrangedment for better workflow for rack edit add 2026-03-07 16:39:07 -05:00
johnnyq
083262fedb Dont require gateway on network edit also make vlan field numeric 2026-03-07 16:31:39 -05:00
johnnyq
fe9bc05937 Rearrange fields so they make a better workflow in software edit and add 2026-03-07 16:17:34 -05:00
johnnyq
726b1cd42b Fix Stripe Add Payment in client portal regression on CSRF check 2026-03-07 13:17:24 -05:00
johnnyq
8de7b20ba1 Add CSRF Checks in the client portal 2026-03-07 13:11:08 -05:00
johnnyq
6d2cb0aea3 Split out item edits into seperate posts and modals for editing invoice, quote and recurring invoice items 2026-03-07 12:12:27 -05:00
johnnyq
c8273b2052 Client related modal and post move client_id get after post 2026-03-07 11:48:56 -05:00
johnnyq
60b6c245ef Change expense client to client_id post var 2026-03-06 18:40:01 -05:00
johnnyq
fcf098f494 use client_id as post var name not client 2026-03-06 18:33:25 -05:00
johnnyq
74ce8f4e98 Trips: enforceClientAccess only if client is referenced 2026-03-06 18:26:14 -05:00
johnnyq
6e3a36d8c4 payments: enforceClientAccess 2026-03-06 18:20:58 -05:00
johnnyq
6f0a2a5a73 quotes: enforceClientAccess 2026-03-06 18:11:35 -05:00
johnnyq
111a30f13c recurring invoices: enforceClientAccess 2026-03-06 18:01:20 -05:00
johnnyq
202f55c2ff invoices: remove client_id post from edit and link modals as it should get the client_id in post, enforceClientAccess 2026-03-06 17:53:44 -05:00
johnnyq
8ad8fd07b3 files, folders, documents: remove client_id post from edit and link modals as it should get the client_id in post, enforceClientAccess 2026-03-06 17:16:04 -05:00
johnnyq
a1931f59f8 services: remove client_id post from edit service modal as it should get the client_id in post, enforceClientAccess 2026-03-06 17:01:34 -05:00
johnnyq
e7b70c7992 domains: remove client_id post from edit domain modal as it should get the client_id in post, enforceClientAccess 2026-03-06 16:59:15 -05:00
johnnyq
7563148182 certificates: remove client_id post from edit certificate modal as it should get the client_id in post, enforceClientAccess 2026-03-06 16:53:20 -05:00
johnnyq
a252ff717e Racks: remove client_id post from edit rack and add rack device modal as it should get the client_id in post, enforceClientAccess 2026-03-06 16:43:56 -05:00
johnnyq
7d41782013 Credential: remove client_id post from edit credential modal as it should get the client_id in post, enforceClientAccess 2026-03-06 16:34:01 -05:00
johnnyq
91976cc415 Software: remove client_id post from edit software modal as it should get the client_id in post, enforceClientAccess 2026-03-06 16:23:53 -05:00
johnnyq
8afa2dbf75 Assets: remove client_id from edit asset modal as it should get the client_id in post, enforceClientAccess 2026-03-06 16:13:56 -05:00
johnnyq
3983c45cac Calendar Events: use client_id instead of client in POST and enforceClientAccess if client is assigned to an event 2026-03-06 15:59:18 -05:00
johnnyq
df5c350765 Vendors: enforceClientAccess in POST only if vendor is assigned a client, as vendor_client_id 0 is for global vendors 2026-03-06 15:43:44 -05:00
johnnyq
de8b9df4da Projects: enforceClientAccess in POST only if a client is assigned to the project 2026-03-06 15:25:30 -05:00
johnnyq
3be815c749 Recurring tickets: enforceClientAccess in POST 2026-03-06 14:35:19 -05:00
johnnyq
71b19e125e Locations and tickets enforceClientAccess in POST fix a few missing client_id vars which were bale to be used for logging too 2026-03-06 14:09:51 -05:00
johnnyq
8fc3dfed1f New Function enforceClientAccess() and added to contact post and client inc all This enforces user client access if set at post and in other places easily 2026-03-06 13:05:11 -05:00
johnnyq
30357b9cf7 Add CSRF Checks to notifications and ensure the user dismissing the notification is their own notification 2026-03-05 17:51:20 -05:00
johnnyq
a81edc122d Add CSRF Checks on Agent ajax endpoints that would update / delete or add something to the db 2026-03-05 17:12:44 -05:00
johnnyq
994526e2c8 Asset details Modal: Reduce top bar Icon Size, Add IPv6 to interfaces, rearrange interfaces to match full page asset details and cleanup code 2026-03-04 19:48:51 -05:00
johnnyq
203b161e82 Add Billing Time Increment Option in Client Ticket Time Detail Report, this option will later be available globally 2026-03-04 18:33:08 -05:00
johnnyq
47b8ec6f96 Simple Calendar naming 2026-03-04 17:18:54 -05:00
johnnyq
302914c789 Add New Calendar Hint 2026-03-04 17:13:02 -05:00
johnnyq
f77bd4f0c6 Calendar: Add Delete Calendar, rename System calendar to Built-in calendar with builtin calendar names, moved calendar select on top for both edit / add event 2026-03-04 17:09:13 -05:00
johnnyq
af4327ff27 Show Full Event title in calendar on hover 2026-03-04 16:27:22 -05:00
johnnyq
5cbed128e6 Use new custom CSS Class for Column Checkboxes so they are a static 40px 2026-03-04 11:56:20 -05:00
johnnyq
dd5fde4069 Client Overview: Cleaned up UI shrunk table sizes and card headers 2026-03-03 16:11:52 -05:00
johnnyq
220e1d4e24 Make new ticket first in client top head 2026-03-03 15:51:50 -05:00
johnnyq
3481431eb5 Add New ticket button in client top header button, spruce up credential favorites on overview 2026-03-03 15:50:14 -05:00
johnnyq
b94604ae71 Assets List: Major UI / UX Update removed some columns to reduce space and add them as a secondary row instead 2026-03-03 15:20:11 -05:00
johnnyq
fe406487de UI Update for Role Listing 2026-03-03 11:44:22 -05:00
johnnyq
99218d02ad Document Templates: UI Enhancement / Cleanup Document templates 2026-03-03 11:16:36 -05:00
johnnyq
8cd1668ff2 Cleanup Ticket Template Details header 2026-03-03 09:50:27 -05:00
johnnyq
c0f26204c2 Swapped Location and Contact Columns in Clients Listing for better scannabilty 2026-03-02 23:59:17 -05:00
johnnyq
ef3a7d0490 Rearrange columns for network interfaces make better logicl sense 2026-03-02 23:52:01 -05:00
johnnyq
f9558d4701 Assets: Added IPv6 Address to assets list and interface list, Updated UI of add / edit network interfaces updated icons wording and bettr arrangement 2026-03-02 23:40:53 -05:00
johnnyq
9d9ebe7b9e Added Bulk Net Terms editing in clients 2026-03-02 22:43:14 -05:00
johnnyq
918b40afbe Add missing CSRF Checks in admin area and settings 2026-03-02 22:15:36 -05:00
johnnyq
6da8821f2c Add hidden form field to folder modals as well 2026-03-02 20:51:12 -05:00
johnnyq
90171064a8 document and files and folders: Add missing CSRF checks, add missing permission checks 2026-03-02 20:49:35 -05:00
johnnyq
6bbe887f8b services: Add missing CSRF checks rename unarchive to restore 2026-03-02 20:34:55 -05:00
johnnyq
b5fb14ec96 domains: Add missing CSRF checks rename unarchive to restore 2026-03-02 20:32:20 -05:00
johnnyq
dd2ac00aa2 certificates: Add missing CSRF checks rename unarchive to restore 2026-03-02 20:26:43 -05:00
johnnyq
e7b5e7120a racks: Add missing CSRF checks rename unarchive to restore 2026-03-02 20:22:36 -05:00
johnnyq
8bac4f9e53 networks: Add missing CSRF checks rename unarchive to restore 2026-03-02 20:17:26 -05:00
johnnyq
023cb4ff11 credentials: Add missing CSRF checks 2026-03-02 20:11:56 -05:00
johnnyq
1740599b61 software licenses: Add missing CSRF checks, add missing permission checks 2026-03-02 19:37:27 -05:00
johnnyq
24b244b612 assets: Add missing CSRF checks, add missing permission checks, renamed unarchive to restore 2026-03-02 19:32:45 -05:00
johnnyq
c71d1f190e locations: Add missing CSRF checks, add missing permission checks, renamed unarchive to restore 2026-03-02 19:15:52 -05:00
johnnyq
18e180eca5 Vendors: Check if client_id is set to enforce the right permission check. If client vendor then check client module otherwise check financial module 2026-03-02 18:40:07 -05:00
johnnyq
d936339f07 Contacts: Add missing CSRF checks, add missing permission checks, renamed unarchive to restore 2026-03-02 18:28:53 -05:00
johnnyq
ad16e92763 Use true Decimal minute reporting in Client Time Audit Detail Report 2026-03-02 18:06:54 -05:00
johnnyq
8a1335174d Trips: Add missing CSRF checks, we may need another permission module check for trips for now only admin and financial lv3 can delete a trip 2026-03-02 17:50:04 -05:00
johnnyq
7b438e2889 Transfers: Add missing CSRF checks 2026-03-02 17:38:20 -05:00
johnnyq
550980719e Accounts: Add missing CSRF checks 2026-03-02 17:35:18 -05:00
johnnyq
3d80d1519e Recurring Expenses: Add missing CSRF, Add missing permission checks 2026-03-02 17:32:18 -05:00
johnnyq
1d5fceeecd Expenses: Add missing CSRF, Add missing perms 2026-03-02 17:27:56 -05:00
johnnyq
5b49908438 Vendors: Add missing CSRF, need to update the permissions as a vendor can be client or global and permissions need to be set based off if the referal url has client_id or not 2026-03-02 17:20:00 -05:00
johnnyq
7e515afb79 Payments: Add missing CSRF and additonal perm check 2026-03-02 16:38:17 -05:00
wrongecho
dee5085f4a Allow associating a quote with a ticket 2026-03-02 10:54:44 +00:00
wrongecho
795144b288 Fix documents => files redirect after deletion (since we merged these) 2026-03-02 08:12:07 +00:00
wrongecho
5c3ff91f21 Lower autoclose minimum allowed value to 24 hours (this still works off cron so is not exact) 2026-03-02 08:07:43 +00:00
johnnyq
36ac006438 Products: Add missing CSRF checks change wording from unarchive to restore 2026-03-01 22:50:04 -05:00
johnnyq
af1ebfea41 Revenues: Add missing CSRF checks 2026-03-01 22:42:37 -05:00
johnnyq
f653752026 Recurring Invoice: Add missing CSRF checks and missing permissions in POST 2026-03-01 22:37:51 -05:00
johnnyq
4440581f14 Invoice: Add missing CSRF checks and missing permissions 2026-03-01 22:22:21 -05:00
johnnyq
2c47001b19 Quote: Add missing CSRF checks and missing permission on export quote pdf 2026-03-01 22:02:43 -05:00
johnnyq
e1daa14087 Calendar: Add missing CSRF checks 2026-03-01 21:52:28 -05:00
johnnyq
308dc6e550 Ticket Tasks: Add missing CSRF checks and other CSRF checks missed in he previous commits 2026-03-01 21:45:26 -05:00
johnnyq
54638428e3 rename unarchive project to restore project 2026-03-01 21:32:24 -05:00
johnnyq
1508e6b055 Project: Add missing CSRF checks 2026-03-01 21:30:41 -05:00
johnnyq
9213249f7b Recurring Ticket: Add missing CSRF checks 2026-03-01 21:21:37 -05:00
johnnyq
63f6faf1e8 Ticket: Add missing CSRF checks 2026-03-01 21:14:58 -05:00
johnnyq
c2cbfc5558 Add Hidden Inpout csrf token to client download pdf 2026-03-01 20:43:44 -05:00
johnnyq
ef1b65de09 Client: Add missing CSRF checks, and missing enforcements 2026-03-01 20:42:18 -05:00
johnnyq
ae81092112 Updated Placeholders to set better formal expectations 2026-02-28 20:52:53 -05:00
johnnyq
f09be24188 Rearrange add/edit Asset field Order, updated icons, minor ui work 2026-02-28 20:12:51 -05:00
johnnyq
10c37946b1 UI: Update icoms for description inputs 2026-02-28 19:14:00 -05:00
johnnyq
adb43703ed Update Networks, remove subnet mask in favor of CIDR, Global View show clients in first column, allow for IPv6 and provide IPv6 placeholder examples, gateway no longer required reword DHCP Range to IP Range moved DNS to the end, chnaged out some icons 2026-02-28 18:41:03 -05:00
johnnyq
92fba49a91 Revert "Add new optional beta email parser thats based on ImapEngine instead of Webklex"
This reverts commit 9cb1ff7330.
2026-02-26 16:44:49 -05:00
johnnyq
ac4bb32081 Revert "Beta Mail Parser Add inline images as attachments keeps the DB clean"
This reverts commit 87fd23f443.
2026-02-26 16:44:39 -05:00
johnnyq
7927312f4f Revert "Revert "Beta Mail Parser Add inline images as attachments keeps the DB clean""
This reverts commit 04a74b5a34.
2026-02-26 16:41:50 -05:00
johnnyq
04a74b5a34 Revert "Beta Mail Parser Add inline images as attachments keeps the DB clean"
This reverts commit 87fd23f443.
2026-02-26 16:41:03 -05:00
johnnyq
87fd23f443 Beta Mail Parser Add inline images as attachments keeps the DB clean 2026-02-26 16:30:29 -05:00
johnnyq
9cb1ff7330 Add new optional beta email parser thats based on ImapEngine instead of Webklex 2026-02-26 16:11:49 -05:00
wrongecho
1ba19cc249 New Ticket Parsing - Anyone CC'ed onto the original email that created the ticket is added as a ticket watcher 2026-02-26 12:49:32 +00:00
wrongecho
702d9689d6 clarify PR stance 2026-02-26 10:24:44 +00:00
johnnyq
8efa354fdb Fix Task Sorting in ticket templates 2026-02-21 14:49:46 -05:00
johnnyq
129e95fd3a Added Net 45 Days, removed 14 Days as this isnt typically used anywhere 2026-02-19 12:34:30 -05:00
johnnyq
ef7794c411 Added non payment invoice reminder / Late fee if enabled after 1 day an invoice is overdue. currently it was jumping right to 30,60,90... now its 1,30,90... 2026-02-19 12:20:26 -05:00
Johnny
20e2f22a27 Merge pull request #1268 from itflow-org/develop
Develop to Master for 26.02.1 Maint Release
2026-02-14 15:54:13 -05:00
johnnyq
12b3775041 Update Changelog 2026-02-14 15:50:27 -05:00
johnnyq
52b509fdc5 Update Changelog 2026-02-14 15:49:40 -05:00
johnnyq
f9d0a8bf43 Ticket: Dont display Updated at if null, Move Subject from top ticket bar to header in ticket details, add additional comments about the client_permission_overide 2026-02-14 15:48:40 -05:00
johnnyq
2349ef33d1 Remove 0 in access_permission_query 2026-02-14 15:07:42 -05:00
johnnyq
ccaf15268c Add a 0 IN ticket_client_id for no client tickets so agents that are restricted to certain clients and still view no clients in tickets list by using a , also restrict change clients on tickets for restricted agents 2026-02-14 15:06:17 -05:00
johnnyq
616635f951 client edit modal: Restrict Access to client restricted agents 2026-02-14 13:17:15 -05:00
johnnyq
ce7daaf1cf ticket edit modal: Restrict Access to client restricted agents 2026-02-14 12:55:34 -05:00
johnnyq
fb9f5d986d ticket Details: Restrict Access to ticket details by restricted agents 2026-02-14 12:51:58 -05:00
johnnyq
3148906cfe ticket Details: Restrict Access to ticket details by restricted Agents 2026-02-14 12:30:49 -05:00
johnnyq
6c057f4fd0 Restrict Tickets presented in ticket listing to client restricted Agents 2026-02-14 12:16:22 -05:00
johnnyq
3014bba66d Update Changelog, Bump App Release 2026-02-14 12:01:49 -05:00
johnnyq
97958d5e22 Missing Generate Password js code in Create Credential modal 2026-02-13 14:43:34 -05:00
johnnyq
1a7452cc27 Restrict Agents that are restricted to view certain clients from calendar events. 2026-02-13 14:28:45 -05:00
johnnyq
34ba5d0570 Properly get the new ticket number for logging in ticket merge 2026-02-13 14:14:01 -05:00
johnnyq
c0fe9813dc Fix Ticket Merging regressed from ticket select now use ticket_id instead of ticket_number 2026-02-13 14:09:05 -05:00
johnnyq
fd29eb7c15 Fix Transfer Asset to client due to field change from asset_important to asset_favorite 2026-02-13 13:39:41 -05:00
johnnyq
1bee085b33 Add Report for Client Detail Time Auditing 2026-02-13 13:35:02 -05:00
johnnyq
1d06e6d9c8 Revert to old ajax-modal js code for now, Fix Assets not lising in create ticket. 2026-02-11 13:33:28 -05:00
wrongecho
bdf8038148 Merge pull request #1265 from MydsiIversen/Time-API
feat: Add API endpoint to retrieve time worked by technicians
2026-02-09 14:23:02 +00:00
Mads Iversen
62fb2c91a1 feat: Add API endpoint to retrieve time worked by technicians on tickets with filtering by date and technician. 2026-02-09 12:09:56 +00:00
Johnny
376285ef62 Merge pull request #1263 from itflow-org/develop
Develop to Master for 26.02 Release Take 2
2026-02-08 12:02:43 -05:00
johnnyq
d1eeba67fc Add bulk Fav / unfav creds and added fav creds to the client overview page 2026-02-07 18:42:53 -05:00
johnnyq
2ca8112daf Revert Git change test to ticket_email_parser.php 2026-02-06 15:14:37 -05:00
johnnyq
546f10bc82 Testing Git changes on ticket_email_parser.php 2026-02-06 15:13:54 -05:00
johnnyq
ec7f1d561d Fix Version 2026-02-06 13:12:34 -05:00
johnnyq
8d54bc3a2f Another change 2026-02-06 13:03:07 -05:00
johnnyq
1d8f77f799 Update Changelog for 26.2 Release 2026-02-06 13:01:37 -05:00
johnnyq
1c6795dd55 Bump app version 2026-02-06 12:09:32 -05:00
Johnny
4d895a56e4 Merge pull request #1261 from cs2000/develop
Add full Microsoft 365 and Google OAuth mail support
2026-02-05 14:04:22 -05:00
johnnyq
bdd56c91f7 Update Credential Important to Favorite 2026-02-05 12:24:21 -05:00
johnnyq
be172b5bd9 Add star-toggle class to add asset 2026-02-05 12:15:41 -05:00
johnnyq
d224d71f59 Bump Datatables from 2.3.4 to 2.3.7 2026-02-05 11:50:33 -05:00
johnnyq
065630b975 Bump PHPMailer from 7.0.1 to 7.0.2 2026-02-05 11:46:28 -05:00
johnnyq
decea604ab Bump TinyMCE 8.2.2 to 8.3.2 2026-02-05 11:38:22 -05:00
johnnyq
004b3b2bdc Draft of ticket_by_client report v2 not yet in the side menu of reports 2026-02-05 11:31:40 -05:00
cs2000
dca0cc34e9 Revert to original file from dev branch
Accidentally comitted an older file.
2026-02-05 16:08:04 +00:00
cs2000
9afb165fc4 SonarCube Suggestion
Remove duplicates of https://login.microsoftonline.com/ and make them use a constant.
2026-02-05 10:26:51 +00:00
cs2000
6a6eb4a714 SonarCube Suggestion
Define a constant "MICROSOFT_OAUTH_BASE_URL" instead of duplicating "https://login.microsoftonline.com/" multiple times in the same file.
2026-02-05 10:22:06 +00:00
cs2000
629f4e0c81 SonarCube Suggestion
Defined a constant $settings_mail_path at the top of the file instead of duplicating "/admin/settings_mail.php" in the code multiple times.
2026-02-05 10:19:13 +00:00
cs2000
7cbe9bf7fc SonarCube Suggestion
Removed two instances of unecessary double parentheses.
2026-02-05 10:17:28 +00:00
cs2000
fc33312e79 SonarCube Suggestion
Rename multiple functions to conform to project naming rules (^[a-z][a-zA-Z0-9]*$). This is a non-functional refactor for style/CI compliance and consistency.
2026-02-05 10:15:52 +00:00
cs2000
563c0ea9c4 Changes for M365 oAuth using dev code
My bad, my changes were made previously using my installed version and not the latest changes in the dev branch, i have pulled the dev branch and merged my changes with the latest codebase.
2026-02-05 09:38:09 +00:00
cs2000
10d1a902d9 Changes for M365 oAuth now using latest dev code
My bad, my changes were made previously using my installed version and not the latest changes in the dev branch, i have pulled the dev branch and merged my changes with the latest codebase.
2026-02-05 09:37:22 +00:00
johnnyq
4079257739 Update UI/UX for Adding and editing roles, Permissions can be set upon role add nice blocker style radios buttons instead of select boxes 2026-02-04 13:12:24 -05:00
johnnyq
91aba13c0d Fix Empty col in client overview if no fabvorite assets, fix creds page rename var from important to favorite 2026-02-04 11:11:12 -05:00
cs2000
2cca4f2f0e Changes for M365 oAuth
- Added null-safe guard around folder path logging during message move failure to prevent property_exists() fatal when folder object is null.
2026-02-04 13:26:52 +00:00
cs2000
d2e8dc1439 Changes for M365 oAuth
- Fixed email queue gating for OAuth SMTP setups by treating configured config_smtp_provider as mail-enabled, even when config_smtp_host is blank.
- Restores queueing for public ticket reply emails (including “Public Comment & Email”) and related ticket notification paths.
2026-02-04 13:26:17 +00:00
cs2000
f3f9d0dd71 Changes for M365 oAuth
- Added OAuth token lifecycle helpers (expiry check, refresh, persistence).
- Updated SMTP XOAUTH2 send path to automatically refresh expired/missing access tokens for Microsoft/Google providers before sending queued mail.
2026-02-04 13:25:32 +00:00
cs2000
f6845a046f Changes for M365 oAuth
- New callback endpoint to complete Microsoft OAuth web flow.
- Validates admin session + OAuth state, exchanges authorization code for tokens, stores refresh/access tokens and expiry, and redirects with success/error feedback.
2026-02-04 13:24:50 +00:00
cs2000
a50a4f274f Changes for M365 oAuth
- Added handler to start Microsoft OAuth Authorization Code flow (oauth_connect_microsoft_mail) with state generation/validation prep.
- Added handler to test OAuth token refresh from admin UI and persist refreshed tokens/expiry.
- Updated IMAP test handler to support OAuth token refresh + XOAUTH2 authentication (in addition to legacy LOGIN).
2026-02-04 13:23:53 +00:00
cs2000
6b6d847756 Changes for M365 oAuth
- Added web-based Microsoft OAuth onboarding UI in Mail settings, including a Connect Microsoft 365 button and auto-generated callback URI display.
- Added Test OAuth Token Refresh UI section.
- Updated visibility logic so Test Email Sending and Test IMAP Connection show correctly for OAuth-based configs (not only host/password configs).
2026-02-04 13:23:03 +00:00
johnnyq
65d1f59e9b Feature: Favorites added to assets, Bulk Fav/unfav, adds favs to client overview 2026-02-03 22:23:20 -05:00
johnnyq
f39e6ccbc9 Remove old ticket merge code, rename kanban_v2 to to just kanban 2026-02-03 17:20:19 -05:00
johnnyq
747b62d78c Remove extra double quote 2026-02-03 17:09:07 -05:00
johnnyq
af0f3ac25f Update ticket Merge bulk with a dropdown select box to select a ticket instead of entering a number manually 2026-02-03 16:35:20 -05:00
johnnyq
6aefe99c2f Update ticket Merge with a dropdown select box to select a ticket instead of entering a number manually 2026-02-03 16:08:33 -05:00
johnnyq
61c5595a68 Fix Get type on add asset 2026-02-02 16:05:38 -05:00
johnnyq
3d11611699 Attempt to Fix duplicate data entries by fast clicking submit in modals using ajax_modal.js include 2026-01-31 15:14:01 -05:00
johnnyq
38b4ed4b96 Tidy check_login for client portal 2026-01-30 14:24:34 -05:00
johnnyq
34308a5f9a check if archived and active for client login as well along with loading extended client user session vars in /client/includes/check_login.php 2026-01-30 14:10:59 -05:00
johnnyq
118cc10804 During load user session check if user is archived and active, prevents users from making further actions if they are disabled or archived but are still logged in 2026-01-30 13:36:18 -05:00
johnnyq
ae3386f2d5 Fix Vendor phone formatting in Ticket details 2026-01-29 16:36:10 -05:00
johnnyq
bf1ccc62f5 Fix Collected Tax Report, was not adding totals OCT-Dec was misaligned and Grand Total wasnt displaying 2026-01-29 14:02:50 -05:00
johnnyq
1ce4dd932e Updated PL report - changed Gross Profit to Gross Revenue as is more accurate for taxation 2026-01-29 13:55:09 -05:00
johnnyq
ff0bb49926 Tidy up Ticket to Invoice Description 2026-01-29 13:13:24 -05:00
johnnyq
018642cbb8 Fix Ticket View / filtering 2026-01-28 23:33:12 -05:00
johnnyq
bf1d0655c4 Update Ticket list ui smaller badge for ticket and smaller task progress bar and more natural dates 2026-01-28 22:52:56 -05:00
johnnyq
874b07f4d7 More UI/UX updated to ticket details shrink padding on right cards, update wordings, changed header paddings, made unassigned a clickable badge no longer red, swapped trash cans for times icons, much cleaner overall 2026-01-28 22:06:50 -05:00
johnnyq
19fa210743 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2026-01-28 18:16:54 -05:00
johnnyq
c8a6513d1c Fix new times on new date time displays in ticket details 2026-01-28 18:16:38 -05:00
wrongecho
01288c8452 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2026-01-28 23:10:54 +00:00
johnnyq
a60d3bb3a0 More Ticket Details UI/UX Sprucing better label naming etc 2026-01-28 17:41:14 -05:00
johnnyq
0470159c55 Added function formatDuration to format times like worked etc, updated Time worked in Ticket details to use the new function and some other minor ui/ux cleanups in ticket details 2026-01-28 16:08:39 -05:00
wrongecho
e1a93035fd Undo client scoping uses = instead of LIKE in tickets resolve.php --- see forum thread 2667 2026-01-28 14:57:28 +00:00
wrongecho
c0b7a26905 API bugfixes before release:
- apiEncryptLoginEntry should be apiEncryptCredentialEntry
- Client scoping uses = instead of LIKE in tickets resolve.php
2026-01-28 14:48:41 +00:00
johnnyq
704d770ec2 Fix Icon to Chevron down if Expand all folders is clicked 2026-01-27 16:32:17 -05:00
johnnyq
d42d2d99b1 Remember folders expanded by Passing folders_expanded var in breadcrumb links and search in files 2026-01-27 16:27:04 -05:00
johnnyq
ebfcc15927 Feature: File Folders are collapsed by default with a global option to exapand all folders or expand individual folder by click 2026-01-27 16:15:18 -05:00
johnnyq
4693aa3c93 Render root in display_folders function in files instead of it being seperate 2026-01-27 15:25:20 -05:00
wrongecho
07df657848 Bugfix: newline char showing in parsed emails 2026-01-27 17:25:53 +00:00
wrongecho
ef9436a1fb Bugfix: Ticket edit modal not setting assigned agent 2026-01-27 12:32:41 +00:00
johnnyq
9318f42ce0 Remove Folder option in edit document modal as this is reserved for move to folder modal 2026-01-24 01:37:00 -05:00
johnnyq
85c37d78a8 Do not update document_updated_at field if document is moved, toggle visibity, renamed, archived or restored same with bulk 2026-01-24 01:27:50 -05:00
johnnyq
ff02ab0cea Show Document Updated at instead of created at. This fixes where it should show the initial document creation date instead of the most updated date, also renamed uploaded column to updated 2026-01-23 13:06:06 -05:00
johnnyq
bd8bf026f0 Allow svg email attachemment for mail parser 2026-01-23 11:24:26 -05:00
johnnyq
644dc95380 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2026-01-21 12:40:43 -05:00
johnnyq
f4935efed3 Remove deprecated quick adds to the client overview 2026-01-21 12:40:30 -05:00
wrongecho
1712d34846 Kanban - move to v2 (rewritten style) 2026-01-21 13:15:23 +00:00
johnnyq
f0f1134be6 Fix phone number formatting is both asset details page and modal 2026-01-19 17:26:40 -05:00
johnnyq
e0f7460e08 If not client_id then do not include &client_id= in ticket uris as this would cause ticket viewing to break if client_id is 0. 2026-01-19 17:01:38 -05:00
johnnyq
ae1d71dcd7 append client_id to the uri for agent ticket links so that the when clicked will take them to the client section and show client header along with the bread crumbs link of client tickets 2026-01-19 16:24:31 -05:00
johnnyq
3cfe38c948 updated UI for contact details so menu is on the left instead of top. Also load the first tab based off the count 2026-01-17 17:35:05 -05:00
johnnyq
c1f0b63101 Fix login not passing master key if agent is client and agent and if MFA is enabled 2026-01-17 17:07:22 -05:00
johnnyq
0a658d7cab Fix Document Update API 2026-01-17 13:17:17 -05:00
johnnyq
3ed2582a9b Remove TaxID from packing slip 2026-01-15 14:09:03 -05:00
johnnyq
2ea68776f6 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2026-01-15 13:13:25 -05:00
johnnyq
c1ff22298f Remove xcustom from .gitignore as its been superceded by custom 2026-01-15 13:13:15 -05:00
wrongecho
e94d2f93ea Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2026-01-15 17:35:35 +00:00
wrongecho
e7f6f8a4c7 Mail Parser - NDR Parsing 2026-01-15 17:35:13 +00:00
johnnyq
4ffe75683b Merge branch 'develop' of github.com:itflow-org/itflow into develop 2026-01-15 12:28:34 -05:00
johnnyq
687920743d Fix user_id not being set in audit logs for agent and client logins, also fix issie where user_id wasnt being set in client portal. 2026-01-15 12:28:20 -05:00
wrongecho
1a93149643 Basic asset history tracking (transfers) - See https://tasks.dev.itflow.org/task_details.php?task_id=19 2026-01-15 14:58:23 +00:00
wrongecho
11d6654763 Basic asset history tracking - See https://tasks.dev.itflow.org/task_details.php?task_id=19 2026-01-15 14:49:41 +00:00
wrongecho
512d65c17a Keep asset PO/ref when copying 2026-01-15 14:22:22 +00:00
wrongecho
5a274061f3 Invoice - add a basic picking/packaging slip 2026-01-15 13:58:53 +00:00
wrongecho
a398ac7a8d Mail Parser - Support flowed text 2026-01-15 11:54:37 +00:00
wrongecho
41df4c4b9f API Keys - Revoke then Delete 2026-01-15 11:37:17 +00:00
wrongecho
7e7909cec1 Mail Parser - Do not automatically send new ticket notifications to noreply/donotreply addresses 2026-01-15 10:38:25 +00:00
wrongecho
7322bd66df Invoices - Show agent names in history 2026-01-15 10:19:56 +00:00
wrongecho
39affa5528 Show trips on main nav for everyone if accounting enabled 2026-01-15 10:04:48 +00:00
wrongecho
374111c88d Add digiBandit as sponsor 2026-01-15 09:28:52 +00:00
wrongecho
72fc0015bf Add digiBandit as sponsor 2026-01-15 09:28:03 +00:00
johnnyq
7ab406b3f5 Convert mysqli_fetch_assoc to mysqli_fetch_row in setup for table import 2026-01-14 18:02:11 -05:00
johnnyq
df280cd574 Fix missing isset in view in tickets.php 2026-01-14 17:36:06 -05:00
johnnyq
0a30300bde replace all instances of mysqli_fetch_array with mysqli_fetch_assoc for better performance and memory usage 2026-01-14 17:30:23 -05:00
johnnyq
cb8b99d6ae up the permissions to added edit Payment 2026-01-12 18:12:20 -05:00
johnnyq
1d3f29d385 added edit Payment 2026-01-12 18:11:41 -05:00
johnnyq
c154113474 Do not add Signature on ticket comment if Public only when reply is emailed 2026-01-12 15:18:22 -05:00
johnnyq
e02a6fc5e6 Use mysqli_fetch_assoc in login 2026-01-12 12:30:12 -05:00
johnnyq
78040573d1 Fix Remove Powered by ITFlow on Login Screen when WhiteLabel is enabled 2026-01-12 12:27:44 -05:00
wrongecho
981f9ace04 TinyMCE - add all options to mobile (we may regret this) 2026-01-12 16:12:06 +00:00
wrongecho
208f7ac8f0 Tickets Kanban
- Keep the selected view (kanban/list) when applying other filters
- Allow filtering tickets by project (main and kanban v2)
2026-01-12 16:11:36 +00:00
wrongecho
661f8db10b Tickets Kanban
- Keep the selected view (kanban/list) when applying other filters
- Allow filtering tickets by project (main and kanban v2)
2026-01-12 16:04:02 +00:00
wrongecho
b48168ffec Rewrite kanban in more procedural code to match existing codebase (as a v2, delete old and rename once we're happy) 2026-01-12 15:36:06 +00:00
wrongecho
908ebb46d9 Merge pull request #1258 from itflow-org/ticket-task-approvals
Ticket task approvals
2026-01-12 12:27:24 +00:00
wrongecho
58bcb38617 Add task approval system (tidy) 2026-01-12 12:21:10 +00:00
johnnyq
1de023f9df Fix Role Archiving, Roles can only be archived if no users are assigned to the role 2026-01-11 16:46:53 -05:00
johnnyq
5815ef2f75 Added bulk delete, archive and restore and invidual file/document restore functions to files 2026-01-10 20:38:04 -05:00
johnnyq
e5dab8b1ca Update files to use mysqli_fetch_assoc for better performance and memory optimization. Add title for List View and Grid View 2026-01-10 19:12:22 -05:00
johnnyq
56c4b7fbe6 Add show archived logic to files 2026-01-10 19:03:28 -05:00
johnnyq
365b65e5b2 fix Bulk Delete Documents and Files 2026-01-10 16:27:12 -05:00
johnnyq
2193cd8d3e switched from mysqli_fetch_array to mysqli_fetch_assoc in client modals 2026-01-10 16:09:03 -05:00
johnnyq
8b221bc055 switched from mysqli_fetch_array to mysqli_fetch_assoc in clients listing page. This will have a major query speed and memory optimization impact 2026-01-10 15:54:19 -05:00
wrongecho
77e4d2b566 Add task approval system 2026-01-09 17:14:44 +00:00
wrongecho
88a29b7599 Bugfix: Mail queue loop not sending invoices to all billing contacts 2026-01-09 16:56:11 +00:00
wrongecho
64525750b6 Fix readme demo creds 2026-01-09 13:56:29 +00:00
wrongecho
30499123f1 Bugfix: Portal not showing contact user id in session 2026-01-09 13:50:46 +00:00
johnnyq
79703042ff Update client table responsiveness viewpoint to fix issue when window is a certain width on the desktop 2025-12-30 16:58:44 -05:00
johnnyq
ccd5605d97 Remove unused code 2025-12-29 18:03:53 -05:00
johnnyq
908277065b Fix Ticket Template auto filling for v1 ticket creation 2025-12-29 17:47:24 -05:00
johnnyq
f2d4eb0486 Fix Ticket Template auto filling 2025-12-29 17:46:23 -05:00
johnnyq
f784b659e8 Remove extra agent client wording 2025-12-20 15:05:47 -05:00
johnnyq
e60a7a59f9 Fix Login flow where user agent and client exists and agent has MFA but will not let them continue, also update some wording and button colors. Also dont show email password fields again after success and login as agent and client is shown. 2025-12-20 14:30:57 -05:00
johnnyq
cab81ca170 Fix Billable sort 2025-12-18 20:39:47 -05:00
johnnyq
a82e2c7ea1 Billable and non billable status use icons check and minus 2025-12-18 20:38:15 -05:00
johnnyq
a277380441 Set API key back to 32 Chars 2025-12-18 20:03:33 -05:00
johnnyq
ad5710b1d8 Fix Invoice CSV Exporting 2025-12-18 20:00:56 -05:00
johnnyq
3e3531a6ce Set API Key to 32 Chars 2025-12-18 14:28:24 -05:00
johnnyq
a79ce23ae5 Fix randomString() to generate cryptographically secure URL-safe tokens, reduced url keys to 32 Characters for performance and easy copy and paste and compatibility while still mainitaining ubreakable cryptographic keys 2025-12-18 14:24:53 -05:00
Johnny
163aa3062e Merge pull request #1254 from itflow-org/develop
Develop to Master for 25.12.1 Maint Release
2025-12-14 14:03:56 -05:00
johnnyq
32f996d034 If login key is set and it is not provided show Client Email instead of just Email for placeholder 2025-12-14 13:42:38 -05:00
johnnyq
312eb4dffc Allow use of login key only for agents 2025-12-14 13:16:54 -05:00
johnnyq
1916456c84 Fix White Label not displaying on the login page 2025-12-14 13:04:53 -05:00
johnnyq
9b8d37b577 Updated changelog 2025-12-13 15:47:28 -05:00
johnnyq
05018e5f17 Added Reset favicon 2025-12-13 15:45:02 -05:00
johnnyq
72ef918452 Update changelog and bump app version to 25.12.1 2025-12-12 16:51:34 -05:00
johnnyq
27fde82aff Fixed Adding Payment provider not adding an account, now adding you can customize the income/expense account, expense category, and Expense vendor. Moved Saved Payment Provider Methods into Payment Providers as a link instead of on the admin side nav. Same with AI Provider and AI Models. 2025-12-12 16:42:09 -05:00
johnnyq
b27ffe6635 Refine DB Helpers 2025-12-10 18:32:46 -05:00
johnnyq
84cc4a094a Add DB helpers to make MySQLi Prepared statements less bloated and require less code 2025-12-10 17:09:34 -05:00
johnnyq
e75600ee05 Fix New ticket button in contact details in the related tickets section 2025-12-10 13:18:41 -05:00
johnnyq
871ad2ea7e Update legacy client login links to use the new unified login method 2025-12-10 12:21:12 -05:00
wrongecho
8b5f2e0f3f Update + credit 2025-12-10 08:54:24 +00:00
johnnyq
58d6ab7342 Unify Agent and Client login, if same user exists as a client and an agent then offer a selection of client portal or agent portal 2025-12-09 13:39:16 -05:00
Johnny
03570ecd04 Merge pull request #1250 from itflow-org/develop
Develop to Master for 25.12 release
2025-12-06 14:36:09 -05:00
johnnyq
ca5fb2e010 refined php-xml ext notice 2025-12-06 13:46:09 -05:00
johnnyq
da561b296e Added php-xml as a requirement 2025-12-06 13:38:40 -05:00
johnnyq
523da0dea0 Added a few more things to the changelog 2025-12-06 12:35:20 -05:00
johnnyq
0e4cc76a84 Bump Version for 25.12 updated changelog 2025-12-06 12:18:11 -05:00
johnnyq
7e39a7ed89 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-12-05 12:46:52 -05:00
johnnyq
4a26ea7ed9 Hide Permission Modules on sidenav admin menu as this is not ready for custom modules 2025-12-05 12:46:44 -05:00
wrongecho
7c83ba15b9 Mail queue - minor comment syntax error 2025-12-03 15:43:55 +00:00
wrongecho
10bfbed4bb Mail queue - introduce a --no-mx-validation flag to bypass recipient domain MX validation 2025-12-03 15:30:26 +00:00
wrongecho
81550bd7a8 Ticket merge input - strip text 2025-12-03 15:13:52 +00:00
johnnyq
a430bb917e Add CSV Escaping to the Sample Export CSV Files 2025-12-02 15:18:20 -05:00
johnnyq
e1a579387f Convert all Import / Export Modals to Ajax and a few other lingering modals that were not converted yet 2025-12-02 15:04:05 -05:00
johnnyq
fe8df66c67 Migrate Import/export clients to ajax-modals 2025-12-01 20:33:01 -05:00
johnnyq
5bb410f80c Converted all Document Link Modals to the new ajax-modal, also switched trash icons for unlink icons in document details 2025-12-01 17:16:59 -05:00
johnnyq
29b79b9d4e Bump TinyMCE from 8.2.0 to 8.2.2 2025-11-28 17:37:38 -05:00
johnnyq
0f8a8d1464 Bump TCPDF from 6.10.0 to 6.10.1 2025-11-28 17:34:16 -05:00
johnnyq
cc92a4b7ee Bump stripe-php from 18.1.0 to 19.0.0 2025-11-28 17:31:04 -05:00
johnnyq
3ffef6df51 Remove library phpMimeParser as its no longer needed and php-imap webklex is not doing this function 2025-11-28 17:27:05 -05:00
johnnyq
78e4787b99 Bump PHPMailer from 7.0.0 to 7.0.1 2025-11-28 17:24:12 -05:00
johnnyq
540512a156 remove folder location vars as no longer needed as files and documents have been merged 2025-11-28 15:26:26 -05:00
johnnyq
7737dbc65d Migrate Invoice to Recurring Invoice to an ajax modal 2025-11-28 15:15:01 -05:00
johnnyq
faa94d888d Convert Quote to Invoice to use ajax-modal 2025-11-28 14:44:47 -05:00
johnnyq
99e2487d2b Fix dupe race condition with ticket, invoice, quote, project, recurring ticket numbering when being created in parallel Atomically update and get the next ticket number in one SQL query everywhere. 2025-11-28 14:14:46 -05:00
johnnyq
f09d8ffe05 Fix dupe ticket numbering when being created in parallel Atomically update and get the next ticket number in one SQL query. 2025-11-28 13:07:56 -05:00
johnnyq
c486e3fe62 Conver the what should be the last bulk asset interfaces modals to the new ajax 2025-11-27 14:13:33 -05:00
johnnyq
ba2d6b6709 Convert Bulk Edit Product Category modal to ajax 2025-11-27 13:41:53 -05:00
johnnyq
a388a279bc Convert Bulk Edit Product Category modal to ajax 2025-11-27 13:40:09 -05:00
johnnyq
5a64b19a06 Convert Document from Template modal to ajax 2025-11-27 13:17:14 -05:00
johnnyq
53178b8d20 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 2025-11-27 12:48:59 -05:00
wrongecho
0347382a34 Invoices - Allow specifying discount during creation 2025-11-27 09:53:35 +00:00
johnnyq
840460afe7 Update Bulk Action JS to accept and pass multiple custom name selector arrays but default to selected_ids if data-bulk-names is not specified 2025-11-26 16:12:19 -05:00
johnnyq
c851e54e1d Fix Decimal not showing on the iphone for specific fields associated to price cost percentage etc 2025-11-26 13:54:24 -05:00
johnnyq
5ef53b569c Create upload folders for recurring tickets and ticket_templates 2025-11-24 13:09:01 -05:00
johnnyq
698b4166e8 Add back deleted client edit in post 2025-11-24 11:27:01 -05:00
johnnyq
1a9a36829b Process base64 Images for document creation and editing for the API and Client Portal 2025-11-24 00:14:27 -05:00
johnnyq
155b8598ff Introduce cleanupUnusedImages function to delete referenced files that have been deleted when editing content which as been added to document template edit. Did not do this for documents as they are versioned and images will remain until the document is fully deleted 2025-11-23 15:36:11 -05:00
johnnyq
4153c91f84 Add function copyDirectory so when creating a document from a template copy the document_template folder to documents folder and update links 2025-11-23 15:26:29 -05:00
johnnyq
a99b19a1b5 Update add and edit Document template to extract base64 images and place them into files instead also delete the document_template/document_template_id folder when deleting a document template 2025-11-23 15:09:03 -05:00
johnnyq
18429fda2c Remove all side nav Quick adds 2025-11-23 14:53:39 -05:00
johnnyq
435da991ec Add custom folder to uploads for custom uploading for custom modules 2025-11-23 14:32:57 -05:00
johnnyq
ebd9aae924 Add Document Templates to uploads dir 2025-11-23 14:30:50 -05:00
johnnyq
414a84d5ec Focus on Author and Date values 2025-11-23 14:24:20 -05:00
johnnyq
a3b2517603 Fix up UI on document details header 2025-11-23 14:10:45 -05:00
johnnyq
43535082f6 Cleanup UI for document details title header 2025-11-23 14:02:01 -05:00
johnnyq
e73af9980e Also Delete Documents/Document_id folder during bulk delete 2025-11-23 13:43:12 -05:00
johnnyq
0bdd5784ee use saveBase64Image function for edit document as well and when document is deleted, delete the corresponding folder uploads/documents/document_id 2025-11-23 13:35:45 -05:00
johnnyq
48719ce29c Add Exclude uploads/documents to gitignore 2025-11-23 13:05:56 -05:00
johnnyq
29839d3b23 Implemented saveBase64Images() to convert base64 <img> tags into real files stored under /uploads/<module>/<id>/ with secure filenames. Added wrapper functions and updated document creation to use processed image paths. 2025-11-23 13:03:03 -05:00
johnnyq
185ea7d6ac Fix 'Email from at' On tickets that come from emails, was cuasing dup html head body tags causing htmlPurifier to strip it in ticket viewing, so we removed html body and head tags also remove orginal reply on reply ticket emails this removed ##- Please type your reply above this line -## and anything after it. Also removed the custom CSS that was embedded for all email sent out from ITFlow 2025-11-22 17:40:44 -05:00
johnnyq
ac7623d4f5 Update Add Client to use prepared statments 2025-11-21 20:53:04 -05:00
johnnyq
3d119261cc Add cleanInput function without mysqli_escape_string and converted add and edit payment method to Procedural mysqli Prepared Statments 2025-11-21 19:54:50 -05:00
wrongecho
169619c9b9 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-11-18 13:08:17 +00:00
wrongecho
b991f787a2 Introduce subject-based automatic ticket merging/reply detection where e-mail is sent from a known contact or domain and the subject is a 95% match for a ticket opened in the last 7 days for that client 2025-11-18 13:08:02 +00:00
johnnyq
215fc6803e Fix Bulk Ticket Merging due to missing modal footer 2025-11-17 15:27:23 -05:00
johnnyq
a79c1c8246 Remove Duplicate get_query_strings code as this is all handled in the the filter header 2025-11-17 14:55:05 -05:00
johnnyq
1aa6419b1b Fix Broken Updating asset noted in asset details modal 2025-11-17 13:51:19 -05:00
Johnny
c7ef3627ce Merge pull request #1247 from itflow-org/develop
Merge Develop into Master for v25.11.1 release
2025-11-17 12:22:24 -05:00
johnnyq
02694f6720 Fix Broken Links in Email to Agent via Client Portal Ticket Update, update changelog 2025-11-17 12:10:10 -05:00
johnnyq
f50aabb570 Update Changelog 2025-11-17 11:59:43 -05:00
johnnyq
19b8d09bfd Update Ticket Detail card to use the adminlte's Card Collapse 2025-11-17 11:55:03 -05:00
johnnyq
66fb999a8c Update Test IMAP to use a Raw connection instead of depending on the Deprecated php-imap extension 2025-11-17 11:29:05 -05:00
johnnyq
0c5883b61b Use btn-tool for side references in Ticket details and some cleanup 2025-11-16 20:56:30 -05:00
johnnyq
ef66d5172c Move Ticket edit from top Right Menu to Ticket Details Section 2025-11-16 20:27:58 -05:00
johnnyq
118f9a34d8 Update Changelog 2025-11-16 20:02:26 -05:00
johnnyq
b61dfac569 Ticket Details Checks, Dont display Add/edit relations if no cliet in selected, dont show relations in ticket edit if no client assigned to ticket, also dont display public and email response type if no contact_email exists 2025-11-16 19:56:59 -05:00
johnnyq
79160f9b5c Dont show Client Tickets in Ticket Details Breadcrumbs if not client is assigned a ticket 2025-11-16 19:35:42 -05:00
johnnyq
d2523cff4a Add Tag Displays in edit and listing, remove unused type column 2025-11-16 18:41:30 -05:00
johnnyq
1839599769 Added Tag Type Filter Nav to tags 2025-11-16 18:21:01 -05:00
johnnyq
29e1b56e78 Hide contract side nav as its not yet complete 2025-11-16 17:58:07 -05:00
johnnyq
47e647c712 Update Changelog and bunp App Version 2025-11-16 17:55:13 -05:00
johnnyq
a87b0b0447 Fix regression in dashboard has client 2025-11-16 17:40:06 -05:00
johnnyq
96b8fcad3a Fix Pay With a Saved Card in Invoice Listing if Saved Cards are on files for that client 2025-11-16 17:34:37 -05:00
johnnyq
cf0fa0024c Update Wording on delete provider 2025-11-16 17:16:46 -05:00
johnnyq
aba5ed9271 Add Back Delete Payment Provider, the db will cascade delete all related recurring payments, related saved cards and client payment provider relation 2025-11-16 17:12:02 -05:00
johnnyq
63141f3578 Composer updates 2025-11-16 16:00:57 -05:00
johnnyq
612041635d Updated symfony/http-foundation from 7.3.3 to 7.3.7 2025-11-16 15:49:11 -05:00
johnnyq
efcc0fd5cb Add Where clause to only accept saved payment by logged in session_client_id in Client Portal 2025-11-16 15:33:45 -05:00
johnnyq
b0724f5b66 Add TOTP Secret to Export / Offboard Client Documentation PDF 2025-11-15 19:17:03 -05:00
johnnyq
66a2b4b6d2 Afer Ticket Merge Redirect to new ticket Details 2025-11-15 17:09:46 -05:00
johnnyq
77b4dfa50a Add UserID: on hover in users 2025-11-15 16:59:39 -05:00
johnnyq
1e6e7fd6d8 If ticket doesn't have a client dont show client section 2025-11-15 16:51:31 -05:00
johnnyq
46a1b673ba Fix Add Ticket Watcher 2025-11-13 00:01:35 -05:00
johnnyq
7230325e62 Migrate Ticket Template add to ajax-modal, add category type option if not defined, add product type if not defined 2025-11-12 17:04:53 -05:00
johnnyq
af8e733cfb Added Quick Add Links to the majority of Side bars navs 2025-11-12 16:27:03 -05:00
johnnyq
26ab43c57f Fix Mail Queue link when sending a test email, updated the quote send email wording to Quote sent 2025-11-12 14:50:05 -05:00
johnnyq
15ed4ef1ce Fix unable to delete Vendor Templates 2025-11-12 14:35:06 -05:00
johnnyq
0ac76766bd Add Asset Tags Display in Contact Details, asset details, along with their detail modals 2025-11-11 21:05:59 -05:00
johnnyq
abb97ad99f [Feature] Added Asset Tags 2025-11-11 19:57:51 -05:00
johnnyq
6cdc26b55b Fix broken edit payment methods due to missing hidden field 2025-11-09 12:24:04 -05:00
Johnny
d1dcc5fb7e Merge pull request #1246 from itflow-org/develop
Develop to Master for Release
2025-11-08 13:47:43 -05:00
johnnyq
9f19fd3c75 Fix Folder in Document API End point 2025-11-08 13:10:35 -05:00
johnnyq
61dedb7e7b Removed old Cron Files from /scripts/ removed old sendmail function along with PHPMailer requirments in functions.php, removed debug php ext check for php-mime-mail-parser and php-imap 2025-11-08 12:56:16 -05:00
johnnyq
65d2b8b2cb UJpdate App Version and Changelog for release 2025-11-08 12:44:58 -05:00
johnnyq
1d3f206660 Addec Contract Templates Listing add modal and add post code 2025-11-07 17:55:19 -05:00
johnnyq
ab46899e72 [FEATURE] Client Contracts, initial DB Schema, rates and net terms along with SLA Reponse / Resolution times will eventually be moved over to this 2025-11-07 16:49:35 -05:00
johnnyq
723a423b06 After ticket Creation Redirect to ticket details with Client Side bar and Top bar, Remove Currency code from Client Add / Edit defaults to company currency for now 2025-11-07 14:27:22 -05:00
johnnyq
a837b97870 Migrated the last of the bulk modals to the new ajax-modal 2025-11-06 22:49:44 -05:00
johnnyq
8be0789f25 Converted even more bulk modals to the new ajax-modal 2025-11-06 20:36:30 -05:00
wrongecho
99d017144d Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-11-06 16:58:35 +00:00
wrongecho
891f71006b Mail queue - Recipient domain MX validation before sending 2025-11-06 16:58:18 +00:00
wrongecho
d25017216a substr to conform to db columns for logs 2025-11-06 16:57:14 +00:00
wrongecho
83b7c7b054 substr to conform to db columns 2025-11-06 16:49:14 +00:00
wrongecho
283c2a17df sanitize after substr 2025-11-06 16:44:34 +00:00
johnnyq
44de049f3b Remove image optimization on upload for now as this will later be added a cron task 2025-11-06 11:44:22 -05:00
wrongecho
920d08f039 Note 2025-11-06 16:27:46 +00:00
johnnyq
0cf1e338c2 Added data-bulk to the ajax modal to allow for bulk GET collection of selected ids that have a class of bulk-select, converted expense and client bulk modals to use the the new ajax-modal 2025-11-06 11:26:08 -05:00
wrongecho
293a2b800e Merge pull request #1244 from Flos/fix-timer-sleeping-chrome-tab-and-initialise-on-reload
Fix ticket timer, to initialise on reload and after tab sleeping
2025-11-06 16:18:46 +00:00
wrongecho
650a099e19 Contacts API - Prevent more than 1 primary contact being set per client 2025-11-06 16:00:21 +00:00
wrongecho
46c2c8616e Clients API - Add - abbreviation support 2025-11-06 15:35:43 +00:00
wrongecho
6295a5c878 Clients API - Update endpoint 2025-11-06 15:34:19 +00:00
wrongecho
39d8e19e16 Clients API - Archiving & Un-archiving 2025-11-06 15:21:45 +00:00
wrongecho
9d3a44d110 Contacts API - Archiving & Un-archiving 2025-11-06 15:10:25 +00:00
wrongecho
54d46719c2 Certificates API - Create endpoint 2025-11-06 14:46:08 +00:00
wrongecho
dbed2c17db Certificates - Bugfix missing js to fetch details 2025-11-06 14:44:24 +00:00
wrongecho
f772ef2efd Certificates - Better empty date handling in agent ui 2025-11-06 14:44:03 +00:00
wrongecho
2f28f96f8d Log the API endpoint/URL path for API auth failures to assist with debugging 2025-11-06 14:43:32 +00:00
wrongecho
1f2bcf7c34 Domains - show a dash instead of blank where there is no expiry 2025-11-06 12:29:07 +00:00
wrongecho
a9a5850fd4 Domains - only show time to expire when there is an expiry date set (otherwise it shows epoch 56 years ago) 2025-11-06 12:19:28 +00:00
wrongecho
09f3bfd8f4 When fetching domain records, quit if no SOA record exists (prevents most sub-domains) 2025-11-06 11:57:08 +00:00
wrongecho
3813fbf8f2 When adding a domain, flag if no SOA record exists (prevents most sub-domains) 2025-11-06 10:41:52 +00:00
wrongecho
16001f8d4e When adding a contact, flag duplicate or invalid e-mail addresses 2025-11-05 22:22:28 +00:00
wrongecho
49d3dbad9a Fix client delete 2025-11-05 10:24:39 +00:00
johnnyq
56f32a4da2 Finished migrating the last of the admin add modals to ajax-modal 2025-11-05 01:54:49 -05:00
johnnyq
a297b8d6d8 Migrate many admin Add modals to the new ajax-modal 2025-11-05 01:39:22 -05:00
johnnyq
d365f48192 Minor ticket details sprucing little more padding on top ticket details and move subject to top with Ticket number 2025-11-04 19:25:07 -05:00
johnnyq
df6d955261 Migrate Schedule Ticket and Merge Ticket to ajax modal also spruce up Schedule Inteface and cleanup code 2025-11-04 18:37:43 -05:00
johnnyq
9fcaf9f5cc [Feature] Updated Invoice Ticket to include more details in the description, predefined along with optional Invoice Title, helper texts below qty and price to show how it gets its information, fixed ticket number not showing in ticket reply when adding ticket to an existing invoice. Add to Existing Invoice is default if open invoices exist, migrated many more ticket related modals to use ajax-modal 2025-11-04 17:48:21 -05:00
johnnyq
43a7b7faa5 [Feature] Allow searching quote via Global Search 2025-11-03 17:08:55 -05:00
johnnyq
69253385c5 Update Invoice, Quote, Recurring Invoice Hyperlinks to take you directly to the client view instead of keeping you in global view. We also did this with tickets in the previous commit 2025-11-03 16:29:41 -05:00
johnnyq
cea7d61481 Updated Bread crumbs in ticket, quote invoice to show All as the first breadcrumb 2025-11-03 15:43:56 -05:00
johnnyq
41f9a2e6e2 Migrated add revenue, trip, quote, invoice, recurring invoice, product, document, folder, file, project, and asset interface over to the new ajax-modal 2025-11-03 14:06:44 -05:00
johnnyq
31d3659098 Migrated product add to the new ajax-modal 2025-11-02 23:20:42 -05:00
johnnyq
c12bfb157e Migrate Add Ticket, Recurring Ticket, Project and Vendor to the new ajax-modal 2025-11-02 22:54:48 -05:00
johnnyq
a55dabb1cd Migrate credemtial, software, network, certificate, domain, service Add modals to the new ajax-modal 2025-11-02 19:39:34 -05:00
johnnyq
06fec3c280 Migrate add locaiton to new ajax-modal 2025-11-02 18:07:39 -05:00
johnnyq
f733a27ad7 Bump DataTable from 2.3.3 to 2.3.4, TinyMCE 8.0.2 to 8.2.0, Stripe-PHP 17.6.0 to 18.1.0, PHPMailer from 6.10.0 to 7.0.0, chartjs from 4.5.0 to 4.5.1 2025-11-02 16:44:59 -05:00
johnnyq
7ea39eb545 Fix non existent record in contact details, document details, document template, ticket template also add limit 1 2025-11-02 13:32:44 -05:00
johnnyq
a85f898ef5 Fix No records exist if client_id in the uri is non existent 2025-11-02 13:13:51 -05:00
johnnyq
519975f3cf Fix Include footer link in project details when no record exists 2025-11-02 12:49:24 -05:00
Johnny
0e9a071e96 Merge pull request #1245 from itflow-org/undefined-asset-handling
Better error handling for undefined/non-existent asset IDs
2025-11-02 12:42:25 -05:00
wrongecho
3917e66fd8 Better error handling for undefined/non-existent asset IDs 2025-11-02 17:17:37 +00:00
wrongecho
9f48e2d9f0 Better error handling for undefined/non-existent asset IDs 2025-11-02 17:14:01 +00:00
wrongecho
215eadcf2b Better error handling for undefined/non-existent asset IDs 2025-11-02 17:12:03 +00:00
Flos
b09e4938b7 Fix ticket timer, to initialise on reload and after tab sleeping
When the tab was reloaded, the timer was not initialized again.
When the tab was in background and the tab was sleeping, the timer showed the wrong time
2025-11-01 23:23:25 +01:00
johnnyq
d3d706ea68 Added ticket details to the search query in global search tickets 2025-11-01 16:28:23 -04:00
johnnyq
8268761ef4 Add Recurring Invoice Reference along with a link in Invoices 2025-11-01 16:17:11 -04:00
wrongecho
2850c35bdc Flag duplicate clients/leads when using the client_add modal 2025-11-01 18:48:23 +00:00
wrongecho
24d8635dac Invoice product autocomplete - search product code as well as name 2025-11-01 17:59:12 +00:00
johnnyq
8314a115bb Migrate Add Asset to the new ajax-modal 2025-10-30 19:05:37 -04:00
johnnyq
b8e2423dbd Mugrated Payment Modals from invoice folder to payment modal folder 2025-10-30 14:46:49 -04:00
johnnyq
52c67f4139 Remove unused budget code 2025-10-30 14:29:51 -04:00
johnnyq
e895156d03 Fix TinyMCE not working on bulk create tickets and sort Categories ASC and fix assign to 2025-10-30 14:06:09 -04:00
johnnyq
89abc18465 Migrated Contact Add to the ajax-modal 2025-10-30 13:58:10 -04:00
johnnyq
355dfbbb25 [Feature] Create Recurring Ticket - Add Asset Type Optgroups on asset selection along with make, model and assigned contact 2025-10-29 19:14:21 -04:00
johnnyq
6d15640ae4 [Feature] Recurring Ticket - Add Three Day and Biweekly to the Frequency options 2025-10-29 18:15:21 -04:00
johnnyq
ad4ab5a54c Fix in old add ticket 2025-10-29 17:50:37 -04:00
johnnyq
3c5c86c4c5 Fix Issue with user not showing up in add ticket and recurring ticket, Also fixed the sort from DESC to ASC in some areas with user select 2025-10-29 17:49:39 -04:00
johnnyq
09b91c8826 [Feature] Recurring Tickets - Add Category, Assigned Agent and Billable Status filters 2025-10-29 17:13:52 -04:00
johnnyq
13ea48bff8 Seperate out recurring expenses and expenses into their own post file 2025-10-29 16:21:56 -04:00
johnnyq
26bb430d6e Seperate out posts into payment, invoice and recurring invoice instead of them all being under invoice post file 2025-10-29 16:18:32 -04:00
johnnyq
82da54740f Moved recurring ticket posts to its own post file 2025-10-29 15:58:04 -04:00
johnnyq
e02b10d12a [Feature] Added Billable column in recurring ticket list view along with bulk actions to set priority, agent, billable status, category and next run date 2025-10-29 15:51:14 -04:00
johnnyq
1573045157 Sort recurring tickets by Next Run Date instead of subject, and Swap Client column with Netrun column so Client column is last and next run date is first 2025-10-29 12:25:02 -04:00
johnnyq
bf31c333a6 Migrate Add Client Modal to the new Ajax Modal 2025-10-28 16:56:27 -04:00
johnnyq
4229bca978 Major UI Work on Contact Details Modal Always Display common details at the top with the nav underneath. 2025-10-25 18:16:56 -04:00
johnnyq
13bd929755 Tidy up the contact details modal 2025-10-25 14:44:20 -04:00
johnnyq
7f6c0346af Add https:// prefix to vendor website field in vendor details modal 2025-10-25 13:09:25 -04:00
johnnyq
0387e66066 Added Sortable Task Count in Ticket Templates Listing view 2025-10-25 12:54:58 -04:00
johnnyq
04bae8dc37 Add Archive and Delete buttons to document details along with button titles to state what the button does, also added a from var to fix redirect behavior if deleting from document details go back to documents listing 2025-10-24 14:46:09 -04:00
johnnyq
559506fc90 Added Access Modules to view current modules and to allow custom modules for the future for use in custom code directories 2025-10-23 15:55:54 -04:00
johnnyq
f2b6d481a1 Feature: Add new date range picker to admin area mail queue audit log, app log 2025-10-23 13:30:22 -04:00
johnnyq
c66aa92365 Update All Side Nav Links to be absolute so the side bar includes can be navigatable when navs are included in custom code 2025-10-23 13:07:02 -04:00
johnnyq
e24ef68d8d Fix Deleting Recurring Ticket from asset details page due to missing CSRF Check token 2025-10-22 17:11:26 -04:00
johnnyq
0cacf83ae5 Fix Sending Email when Forcing a Recurring Invoice into an Invoice 2025-10-22 16:28:53 -04:00
johnnyq
2dc66b329b Fix Ajax Modal Link to referral category in Add Bulk Referral 2025-10-22 15:26:15 -04:00
johnnyq
10dc8ea2bf Wording update for client bulk modals 2025-10-22 14:53:43 -04:00
johnnyq
303f9174c9 Added Bulk Create Tickets for Clients 2025-10-22 14:50:50 -04:00
johnnyq
c5dd5f2b6f Add Clause to not collapse advanced filter on all time aka if date from is set to the default 1970-01-01 2025-10-20 18:16:39 -04:00
johnnyq
ab77705ca2 Feature: Replace old date range to Date Range Picker JS for better date from/to handling 2025-10-20 18:04:00 -04:00
johnnyq
10c89ebf73 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-10-16 11:43:37 -04:00
johnnyq
ecce994921 Used status var unstead of get status var for checkall 2025-10-16 11:43:26 -04:00
wrongecho
5dd4f5ea62 New mail parser:
- bugfix .eml not being generated
- include the message when notifying the tech of a reply
2025-10-16 16:32:37 +01:00
wrongecho
93bb5db019 typo 2025-10-15 21:56:21 +01:00
wrongecho
65ff008ccf Bugfix - Email not including ticket guest key 2025-10-15 15:36:07 +01:00
wrongecho
f0c48d23fe Add html code plugin + button to tinymceticket 2025-10-15 15:27:56 +01:00
wrongecho
975b52a43d Time tracking - show H/M/S placeholders if timer auto-start is disabled 2025-10-15 12:29:26 +01:00
wrongecho
079b0d5024 Asset import - allow importing notes 2025-10-15 10:32:16 +01:00
wrongecho
99ccb12b8c Allow importing TOTP credential info 2025-10-15 10:31:59 +01:00
wrongecho
0bb7d24e07 Allow importing TOTP credential info 2025-10-15 10:18:44 +01:00
wrongecho
b7a9f9ea38 When exporting credential info, include the TOTP secret 2025-10-15 10:12:14 +01:00
wrongecho
21aee98f9f Fix checkAll ticket box not showing when status wasn't set - should only be hidden for the closed view 2025-10-15 09:57:32 +01:00
wrongecho
9a5a4be64a When archiving a client, cancel recurring invoices 2025-10-15 09:20:08 +01:00
wrongecho
db7f8501d0 When archiving a client, cancel recurring invoices 2025-10-15 09:18:53 +01:00
johnnyq
61d15cbf9e Remove non existent seatch column recurring ticket prefix 2025-10-14 16:07:08 -04:00
johnnyq
39c9c695f1 Allow searching tickets with ticketprefix and number combo in Global search 2025-10-14 15:59:29 -04:00
johnnyq
d97654581b Add 30 Day wording to Expiring Domain and Certificates in dashboard 2025-10-12 13:34:27 -04:00
johnnyq
2ee70fd3a8 Update .htaccess 2025-10-09 19:23:48 -04:00
johnnyq
b336ec4188 Revert setup restore to a saner version 2025-10-09 19:14:31 -04:00
johnnyq
c77e1be1c3 Try to fix uploads 2025-10-09 19:00:02 -04:00
johnnyq
986f688468 another Attempt at restore 2025-10-09 18:49:54 -04:00
johnnyq
1d9429b762 Another attempt at restore 2025-10-09 18:27:35 -04:00
johnnyq
d122d90a47 Remove CSRF check 2025-10-09 18:11:16 -04:00
johnnyq
2c534d4d20 Attempt to fix uploads and writing to config file during setup 2025-10-09 18:10:21 -04:00
johnnyq
b7e0e5c5eb Fix setup complete flag 2025-10-09 13:00:00 -04:00
johnnyq
2915b12181 Remove temp CSRF check on setup 2025-10-09 12:43:28 -04:00
johnnyq
ed589ef65b Update Backup / Restore, now streams backup and restore to disk instead of memory causing memory to run out, sets timeout limit to unlimited, checks backup file contents for anything bad, use php instead shell exec for import of db, added .htaccess for apache to prevent php execution in /uploads/ directory as this is intended for file download only 2025-10-09 12:28:38 -04:00
Johnny
0d5bfdafdf Merge pull request #1242 from itflow-org/develop
Develop to Master
2025-10-08 17:39:41 -04:00
johnnyq
fbf3346052 Update Changelog 2025-10-08 17:30:19 -04:00
johnnyq
3ff206f84d Add .htaccess in cron 2025-10-08 17:25:03 -04:00
johnnyq
a3b0fce961 Fix login_microsoft 2025-10-08 17:19:17 -04:00
johnnyq
8130280b35 Fix edit from contact details modal 2025-10-08 17:12:23 -04:00
johnnyq
fea3020d9a Add powered by ITFlow in Guest Section 2025-10-08 15:29:06 -04:00
johnnyq
1eb9d163fa Updated Changelog 2025-10-08 14:50:34 -04:00
johnnyq
e3e7c2e38b Add Signature in ticket reply POST dont add a signature if Internal 2025-10-08 14:48:13 -04:00
johnnyq
27e1d6a9cd remove net terms in quote add jquery to guest header 2025-10-08 01:18:55 -04:00
johnnyq
2ec4cdc4fb Ceated inc_all_guest.php and modulaized the guest header.php removed guest footer and used the global footer.php as they were very similar 2025-10-08 01:00:48 -04:00
johnnyq
35a7506c26 Copy crons from /scripts to /cron, added custom directories for api/v1/, /setup, /cron and /scripts 2025-10-07 13:55:54 -04:00
johnnyq
16242be74e Update Client Nav to use Absolute links and updated more of the inc_alls to use Document Server Root 2025-10-07 13:44:08 -04:00
johnnyq
3fcbe440d3 Fix Missing Missing Country code in Guest View Ticket 2025-10-07 12:34:26 -04:00
johnnyq
4ef0755039 Update Guest header and footer to use Server Document Root var 2025-10-06 17:07:19 -04:00
johnnyq
a4ed906dd1 Update modal footer and header to user SERVER Document root with absolute path intead of relative 2025-10-06 15:13:52 -04:00
johnnyq
416a8d9a94 Fix to properly redirect to the setup page if config_enable_setup is not set or is 1 2025-10-06 14:19:49 -04:00
wrongecho
d8803aaac2 prevent open redirects upon agent login 2025-10-06 16:32:42 +01:00
wrongecho
01f6615ca0 rm test 2025-10-06 16:13:08 +01:00
johnnyq
fd93ee3263 Allow HTML for signatures 2025-10-04 19:20:34 -04:00
johnnyq
32bfd298a1 Added Project Edit Function for Ticket 2025-10-03 17:37:25 -04:00
johnnyq
5de2e7a3bd If imap Encryption is blank then use notls in the ticket mail parser 2025-10-03 11:36:27 -04:00
johnnyq
6e8c133a99 Fix Regressions in Vendor Templates updated path from ../user/post to ../agent/post 2025-10-03 11:25:48 -04:00
johnnyq
956f18430b Fix Microsoft SSO Login in Client Portal, fix ticket templates due to regression from changing from user to agent 2025-10-03 11:12:48 -04:00
johnnyq
76c9933baf Update imap and smtp providers to allow empty string if empty do not execute mail queue 2025-10-02 14:28:43 -04:00
johnnyq
6c6a988c2b Fix custom Favicon 2025-10-02 11:42:30 -04:00
Johnny
d829e39b66 Merge pull request #1240 from itflow-org/develop
Develop to Master for 25.10 release
2025-10-01 15:28:06 -04:00
johnnyq
0e401df3c0 Setting 0 for the Payment Provider threshold disables the invoice amount check 2025-10-01 15:23:00 -04:00
johnnyq
9072c37e95 Set payment provider default Threshold to 9999.00 when adding a payment provider 2025-10-01 15:06:14 -04:00
johnnyq
2eff11efbf Added Custom Link option to Reports Nav 2025-10-01 14:35:18 -04:00
johnnyq
6a7a02d220 Add Custom Links Admin Nav option 2025-10-01 13:48:52 -04:00
johnnyq
d6349bbc5c Mention new installs already configuring the new cron jobs 2025-10-01 11:37:13 -04:00
johnnyq
9a2f887db1 Update Changelog increase app version to 25.10 2025-10-01 11:34:43 -04:00
johnnyq
71d30ff95f Enforce Payment Provider Max Threshold for Stripe Paymented in Guest Invoice and Unpaid Invoices 2025-09-30 12:14:24 -04:00
johnnyq
3135247936 Add Gibraltar to the countries list array 2025-09-25 17:35:02 -04:00
johnnyq
0d629221fe Add Software keys and software key assignment for contacts and assets table to the database schema 2025-09-25 17:24:42 -04:00
johnnyq
181ea4b487 Remove dead router.php require 2025-09-25 13:43:47 -04:00
johnnyq
fa769665df Update report links in dashboard 2025-09-25 13:38:51 -04:00
johnnyq
00f5198bed Update appNotidfy links to use Absolute paths, updated gitignore 2025-09-25 13:31:16 -04:00
johnnyq
785a291614 Remove unessesary vars in edit ticket asset modal 2025-09-24 14:56:50 -04:00
johnnyq
92209c7125 Updated edit ticket asset to new ajax-modal and add additonal assets field 2025-09-24 14:51:34 -04:00
johnnyq
690007be5c More Relative to Absolute web asset paths updates 2025-09-24 13:09:25 -04:00
johnnyq
e6bcf0e12f Started updating href paths to absolute paths instead of relative paths as itflow should be installed in document root anyway and not a sub-directory 2025-09-24 12:56:01 -04:00
wrongecho
ca6a903b8f Keepalive
- Fix directory path
- Remove duplicate file
- Add to client portal
2025-09-24 08:39:45 +01:00
johnnyq
50f790dd6c Fix MFA Enforcement 2025-09-23 20:30:25 -04:00
johnnyq
ed6aa843b7 Fix Activity log link 2025-09-23 19:41:02 -04:00
johnnyq
52a27699f1 fix mfa model 2025-09-23 19:39:49 -04:00
johnnyq
dba08714bf moved user preferences and user settings into /agent/user/ directory 2025-09-23 19:17:14 -04:00
johnnyq
edabc5c33f rename /user/ to /agent/ and update links to use agent/ instead 2025-09-23 18:04:23 -04:00
johnnyq
6b6c70f1df added extra ../ to href for css and js in header and footer to allow code to be placed deeper within the directory structure moved reports to /user/reports, this should also fix the new custom directories 2025-09-23 17:05:12 -04:00
johnnyq
93061eb695 Add Assigned Agent column to Recurring Tickets 2025-09-23 15:43:45 -04:00
johnnyq
1f9133c188 Added Viewing Archived Users and the Ability to Restore alonf with reassigning tickets of that user during the archive process 2025-09-23 15:36:45 -04:00
wrongecho
e7dcc6df3c Tickets API - Add ability to resolve ticket in post request with only a ticket ID and client ID via resolve.php endpoint 2025-09-23 09:28:27 +01:00
wrongecho
fbd58b4723 Bugfix: Change working directory back after 2025-09-23 09:27:04 +01:00
wrongecho
e992138456 Better logic for the index/root page:
- If app user, send to their start page
- If a client contact, send back to the client area
- If not logged in at all, make them
2025-09-23 08:45:06 +01:00
wrongecho
058f79d0a1 Fix file paths in cron notifs to new structure 2025-09-23 08:38:29 +01:00
johnnyq
5c448c05a9 Update .gitignore and add custom directories to /admin /client /guest /user Example Documentation coming soon 2025-09-22 19:33:40 -04:00
wrongecho
e966cd3068 New tickets v2 - Exclude leads 2025-09-22 12:04:11 +01:00
wrongecho
6d3351b2f7 Payment providers bug-fixing 2025-09-22 11:53:49 +01:00
wrongecho
61a1d61901 Bugfix - remove capital in html field name - Threshold => threshold 2025-09-22 11:23:18 +01:00
johnnyq
4ff3231451 Fix Incorrect Asset Name in Logging and Flash Alert when editing an asset in a ticket, remove ACH and Add Bank Transfer to Setup 2025-09-20 15:56:50 -04:00
johnnyq
ce832d2805 Fix Broken Restore from Backup on Setup Page 2025-09-19 16:02:55 -04:00
Johnny
b11730303e Merge pull request #1238 from itflow-org/develop
Develop
2025-09-19 14:00:02 -04:00
johnnyq
565f9ab314 Update Changelog and App Version 2025-09-19 13:47:36 -04:00
Johnny
9435434cf9 Merge pull request #1237 from git-kup/develop
Update invoice.php - removed extra unnecessary wording
2025-09-17 00:03:41 -04:00
git-kup
a58ca6f66d Update invoice.php - removed extra unnecessary wording
it always bugged me that the alert message is so bloated. i almost never go to the mail queue after sending each invoice it just doesn't make any sense
2025-09-16 19:36:25 -04:00
johnnyq
c769bbc405 Created new Mail Queuer to take advantage of OAUTH2 for M365 and Google Workspaces not enabled by default 2025-09-16 15:43:54 -04:00
Johnny
0379143829 Merge pull request #1236 from cynicalgeek/develop
Update to use payment_methods table
2025-09-16 11:46:30 -04:00
cynicalgeek
ee235cf231 Update to use payment_methods table 2025-09-16 01:38:11 -07:00
johnnyq
04b29d43df Update Agent ticket access path in emails to new /user/ path 2025-09-15 17:28:58 -04:00
johnnyq
dc0715da57 Added SMTP Provider and the ability to share OAUTH keys with IMAP for M365 Mail Auth 2025-09-15 17:23:00 -04:00
johnnyq
902323a75b Fix Broken gloabl search when in Admin section 2025-09-12 17:32:44 -04:00
johnnyq
3a5b18f3dd Added Beta support for Microsoft IMAP OAUTH2 must use new mail parser for it to work cron/ticket_email_parser.php 2025-09-12 15:56:44 -04:00
johnnyq
ce7d84aa2f Reintroduce Webklex IMAP for ticket processing as PHP-IMAP is no longer being developed. This is optional for now and considered beta can be found in cron/ticket_email_parser.php 2025-09-10 14:27:46 -04:00
johnnyq
981fb9585d Updated All Exports to include your company name if exporting all and if exporting just from a client prepend the client name to file, introduced a sanitize_filename function and used it for the exports to always get a clean file name that works on every OS 2025-09-10 12:50:10 -04:00
johnnyq
23b2dcba70 Renamed post file user back to users 2025-09-09 17:47:16 -04:00
johnnyq
e4a437f54c added escape parameters to fputcsv to satisfy php 8.4 Depracations 2025-09-09 17:45:09 -04:00
johnnyq
d4167f9595 Fix Missing first row on interface export, started adding escape parameters to fputcsv to satisfy php 8.4 Depracations and fixed export all quotes 2025-09-09 16:54:18 -04:00
johnnyq
88475a2b76 Fix Mispelling causing Adding new certificate to break 2025-09-09 12:50:27 -04:00
johnnyq
c26ce4b7dc Spruced up UI and eliminated checkbox to grant consent on Stripe consent in client Portal instead button acts a consent 2025-09-08 17:36:09 -04:00
johnnyq
5960e7cbd9 Fix Broken Add Payment link in reccuring invoice in the client portal 2025-09-08 17:23:51 -04:00
johnnyq
68872ab9fb Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-09-08 13:06:49 -04:00
johnnyq
64f12b42b8 Fix Footer path in used edit causing edit user not to function, also removed the old ajax used edit modal 2025-09-08 13:06:33 -04:00
wrongecho
8c0d542d7d Better logic handling for the default page redirects 2025-09-08 15:40:59 +01:00
wrongecho
c016b67c3a Fix typo in sql query field, matching develop back to master because we screwed up the flow 2025-09-08 15:26:57 +01:00
Johnny
49d127e957 Merge pull request #1235 from expxx/patch-1
fix: spelling error with `vendor_descripion` -> `vendor_description`
2025-09-07 21:04:14 -04:00
Cam
e7353c4757 fix: spelling error with vendor_descripion 2025-09-07 18:26:00 -06:00
Johnny
3106685972 Merge pull request #1234 from itflow-org/develop
v25.09.1
2025-09-07 11:44:10 -04:00
johnnyq
2b7017fae2 Fix dark mode for AI Ticket Summary 2025-09-07 11:38:03 -04:00
johnnyq
da0b01e23f Center Generating Summary in AI Summary 2025-09-07 11:30:43 -04:00
johnnyq
d450ea4beb Fix Installer Database not installing due to bad file name 2025-09-07 11:06:26 -04:00
johnnyq
9210734911 Also take in consideration of the ticket source, category and priority 2025-09-06 19:41:16 -04:00
johnnyq
ebae80bb7e Ticket Summeries are now in HTML form wit ha breakdown of the Main Issue, Actions Taken and Resolution or Next Steps. It also takes into consideration of the current ticket status and Who replyied for the ticket replys / comments 2025-09-06 19:31:44 -04:00
johnnyq
dcade3a5c7 Update the AI Ticket Summary Prompt 2025-09-06 17:57:58 -04:00
johnnyq
f51c3e9e3f Text Wrap client tags so table doesnt go off the page with clients with many tags 2025-09-05 19:29:21 -04:00
johnnyq
b34298e45b Hide Add Credit button in Client Top Head Dropdown also hide credits in client listing if no credit balance 2025-09-05 19:17:02 -04:00
johnnyq
9fa78897bc Fix extra spacing between icon and Assigned Contact Name iin ticket details 2025-09-05 19:05:06 -04:00
johnnyq
9642babb7e Fix issue with AI Settings displaying in Admin Menu if the module invoice/accouting module is turned off 2025-09-05 19:00:17 -04:00
johnnyq
d2d1aed393 Fix long Invoice/Quote notes overflowing into the invoice/quote footer by removing a rowspan class, adjusted the page margins from 15 to 10 and adjusted the invoice/quote notes to use font size 9 instead of 10 2025-09-05 18:48:35 -04:00
Johnny
58d43063ec Merge pull request #1233 from itflow-org/develop
25.09 Release
2025-09-05 13:24:54 -04:00
johnnyq
6a5ce1dce3 Add note about updating from the webUI 2025-09-05 13:09:02 -04:00
johnnyq
f3c7c0761b Add note about backing up before updating 2025-09-05 13:05:46 -04:00
johnnyq
27b3124f77 Update .gitignore to ignore the new custom/* 2025-09-05 12:57:19 -04:00
johnnyq
aa516529e7 Another attempt at fix automatic recurring payments expense 2025-09-04 17:56:00 -04:00
johnnyq
2283ad0eb2 Fix Adding Expense on recurring stripe payments in cron 2025-09-04 17:44:34 -04:00
johnnyq
cece9ad46c Another attempt to fix reccuring payment migration to match the correct client_id; 2025-09-04 16:29:55 -04:00
johnnyq
d37da2e8ff Fix Recurring Payment Migration for stripe 2025-09-04 16:07:38 -04:00
johnnyq
9d9bfc65d5 Fix Active side nav for api keys 2025-09-03 18:46:01 -04:00
johnnyq
d7d6e4ac6f Fix paths for db and uploads dir in debug 2025-09-03 18:42:32 -04:00
johnnyq
46d93f986e Further enhanced the Saved Payments Section by splitting cards and add card into 2 columns 2025-09-03 17:45:11 -04:00
johnnyq
2549a97a7e Added card icons to Saved Payments in Client Portal and spruced up ui 2025-09-03 17:40:09 -04:00
johnnyq
fc2cca5fdb Added card icon 2025-09-03 17:14:53 -04:00
johnnyq
ef1ec56270 Allow the Client to easily Pay an invoice from the client portal with a saved card 2025-09-03 17:09:17 -04:00
johnnyq
cf63a2e7d1 Fix TinyMCE License in client portal 2025-09-02 14:57:09 -04:00
johnnyq
ed9b99e2f0 Fix unpaid invoices on client portal but also comment it out until ready for next release 2025-09-02 14:52:38 -04:00
johnnyq
33340b80f9 Updated Changelog, Increased app version 2025-09-02 13:14:18 -04:00
johnnyq
ec94bb3d2a Add back Pay Invoice with saved card, currently only pays the full amount, would like to integrate into add payment modal and add payment post eventually 2025-09-01 16:19:33 -04:00
johnnyq
bc2fe2bec8 Fixed stripe Migration table name spelling 2025-08-30 11:19:28 -04:00
Marcus Hill
a87a206c04 Add better error handling for dodgy whois results 2025-08-30 16:16:55 +01:00
Marcus Hill
45083e19b0 Fix if undefined 2025-08-30 15:58:19 +01:00
Marcus Hill
de627c19c5 No csrf for client side, yet 2025-08-30 15:51:14 +01:00
Marcus Hill
595e57dcdd Rewording 2025-08-30 15:51:05 +01:00
Marcus Hill
dadcc69900 Typo 2025-08-30 15:35:31 +01:00
Marcus Hill
2c160d1ac9 Take you back to dashboard rather than a redirect 2025-08-30 15:31:49 +01:00
johnnyq
292b074d8c Remove legacy Stripe Enabled from invoice Commented out Pay Via Saved card this will have to wait for next release 2025-08-29 13:44:22 -04:00
johnnyq
2beff45811 Removed some simple tinyMCE inits and combined AI button into one 2025-08-29 12:51:14 -04:00
johnnyq
469c36da46 Remove AI Enable References through the UI this will be handled differently 2025-08-29 12:26:56 -04:00
johnnyq
8afe2d52a0 Converted and combine ajax add for tags and categories, fixed quick add links 2025-08-28 16:57:08 -04:00
johnnyq
51273e9151 Remove unused / unfinished browser extension from user preferences 2025-08-28 15:39:00 -04:00
johnnyq
1517c96841 Remove Budget from reports as it totally unfinished 2025-08-28 14:38:49 -04:00
johnnyq
b7afbd3500 Revert Bump down fontawesome-free 7.0.0 to 5.15.4, did not like the way the new icons looked with the app at all 2025-08-28 14:25:14 -04:00
johnnyq
39d6c42c71 Bump and Migrate logic chartjs 2.9.4 to 4.5.0, bump stripe-php from 17.2.1 to 17.6.0, fontawesome-free from 5.15.4 to 7.0.0, fullcalendar from 6.1.17 to 6.1.19, TinyMCE from 7.9.1 to 8.0.2, bootsatrap js bundle from 4.6.1 to 4.6.2, DataTables from 2.3.1 to 2.3.3 2025-08-28 13:57:42 -04:00
johnnyq
9f50c9355a Move reports out of the sub directory for now as it broke requires 2025-08-28 11:46:20 -04:00
johnnyq
fd73f132bc Fixed a few table names in Stripe Migration, Removed legacy stripe and AI settings 2025-08-28 11:44:29 -04:00
johnnyq
1f99e592b7 Remove old Autop Pay Logic from recurring Invoices Listing 2025-08-27 20:09:12 -04:00
johnnyq
a90c4eded8 Remove Old Auto Pay Modal for recurring Invoices 2025-08-27 20:05:47 -04:00
johnnyq
1638538fb4 Remove Old Auto Pay from recurring Invoice in favor of the saved cards. 2025-08-27 20:04:49 -04:00
johnnyq
da0892f9e3 Remove Stripe check and add payment provider check in Client Portal Recurring Invoices to create auto payments 2025-08-27 18:23:58 -04:00
johnnyq
66cab6c1ab Fixed Guest Pay removed old stripe vars in place of new payment provider vars 2025-08-27 17:38:41 -04:00
johnnyq
535078b0ab Fix Bad vars in PAyment Providers listing, add check to see if payment provider already exists 2025-08-27 16:27:54 -04:00
johnnyq
d584c6b1e8 Commented out Credit lines as its not ready for next release running into way to many pitfalls will focus more on next release 2025-08-27 16:02:00 -04:00
johnnyq
530a76a9a2 Fix undefined vars in export invoice / quote pdf fix regression company logo path in export invoice / quote 2025-08-27 11:53:58 -04:00
johnnyq
2a0181fd92 Convert Invoice and Quote Guest URL to Copy to Clipboard link instead of open links 2025-08-26 12:17:45 -04:00
johnnyq
86c5b9a55d Removed Budge from the side nav as this was never finished and doesnt really do anything, will work on it at a later date 2025-08-25 23:51:48 -04:00
johnnyq
0a6b890250 Fix broken php start tag 2025-08-25 17:33:40 -04:00
johnnyq
af7f1f30ad Credentials: Fix broken page if no clients exist, which also fixes dont show share modal if GET client_id is not set 2025-08-25 17:32:15 -04:00
johnnyq
f6c0f840fe Asset: Multiple Bug fixes, Fix broken asset list if no assets exist, fix bulk Asset Ticket creation to use the client_id of the associated asset, allow to assign to all open projects. Fix Transfer client where client_id is not defined in client overview section 2025-08-25 16:59:15 -04:00
johnnyq
0e54359db8 Assets: Fix Description not displaying, Fix issue with unitialized OS var, fix client asset uri using asset_uri_2 2025-08-25 14:07:55 -04:00
johnnyq
373f1574bd Update function path for customAction to use the new path /custom and not /xcustom 2025-08-25 12:58:57 -04:00
johnnyq
6f5ffef22f Link Fixes 2025-08-25 12:50:01 -04:00
johnnyq
451206525e Remove function code for old way ajax-modal, moved modals over to modal_header/footer and removed _new 2025-08-25 00:07:51 -04:00
johnnyq
41f957ea3b Migrated admin modals to modals/ENTITY removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax 2025-08-24 23:50:38 -04:00
johnnyq
91b0080428 Finished Consolidating the remaining user modals to modals/ENTITY removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax 2025-08-24 00:38:48 -04:00
johnnyq
170d6dd7e5 Consolidate alot of modals to modals/ENTITY removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax 2025-08-23 18:48:21 -04:00
johnnyq
15ba385398 Consolidate asset modals to modals/asset removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax 2025-08-22 21:54:26 -04:00
johnnyq
0b93d58a32 Consolidate account modals to modals/account removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax 2025-08-22 18:51:39 -04:00
johnnyq
67078c4552 Consolidate product modals to modals/product removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax 2025-08-22 18:22:04 -04:00
johnnyq
ab17de7efd Consolidate client modals to modals/client and use new ajax-modal syntax 2025-08-22 18:06:37 -04:00
johnnyq
1145260619 Consolidate trip modals to modals/trip removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax 2025-08-22 17:49:46 -04:00
johnnyq
066952ed04 Consolidate vendor modals to modals/vendor removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax 2025-08-22 17:36:07 -04:00
johnnyq
6ccf7a0fb8 Set Invoice Credit, Consolidated all expense modals to modals/expense removed ajax_ and _modal prefixes from file name create new modal header and footer to include another parent directory eventually will consolidate all, this was just an example 2025-08-22 16:59:31 -04:00
johnnyq
7f49ecefb1 Flash alert if no comment was entered in a ticket reply via the client portal 2025-08-21 18:35:16 -04:00
johnnyq
43324391ff Fix Regressed See More... in User Activies page 2025-08-21 18:15:28 -04:00
johnnyq
89af8216b8 Fix Ticket Kanban CSS Path and category query 2025-08-21 18:13:31 -04:00
johnnyq
be9e30e6d8 Fix Show Add Payment dropdown if client has credits or saved payment methods 2025-08-21 18:04:49 -04:00
johnnyq
85cfd6fb7c Fix Regression Broken Quick add modals 2025-08-21 17:54:10 -04:00
johnnyq
e694e20025 Use mysqli escape string instead of sanitizeInput on stripe to payment provider migration just incase 2025-08-20 14:18:34 -04:00
johnnyq
7618dd335a Update Stripe to Payment Provider Migration to not transfer over clients with a NULL or blank stripe payment method 2025-08-20 14:12:39 -04:00
johnnyq
eca09253d3 Migrate over Payment Methods from Categories to its own table payment_methods 2025-08-20 13:53:38 -04:00
johnnyq
96c32b3275 Added Stripe Config Migration to a database Update 2025-08-20 13:30:46 -04:00
wrongecho
94a4fec3c6 Fix popping future tickets numbering 2025-08-20 16:43:45 +01:00
Marcus Hill
a8386d3937 Allow reporting on average time to first response 2025-08-16 21:44:17 +01:00
Marcus Hill
4b7aa4bece Powered by 2025-08-16 16:37:24 +01:00
Marcus Hill
4c604f4009 Use HTML for the logo instead of pdf->image; scales much nicer 2025-08-16 16:25:51 +01:00
Marcus Hill
98cf2f7a5a Use freeserif font instead of helvetica to properly display foreign characters 2025-08-16 15:54:28 +01:00
Marcus Hill
804467b1ba Use freeserif font instead of helvetica to properly display foreign characters 2025-08-16 15:52:54 +01:00
Marcus Hill
9fbf775299 Fix file icon in file rename modal 2025-08-16 15:30:10 +01:00
Marcus Hill
5c93753b7e Rm extra unnecessary line in overdue invoice email 2025-08-16 15:17:48 +01:00
Marcus Hill
27016eaa28 Recurring tickets - add ability to bulk recurr 2025-08-16 14:31:36 +01:00
Marcus Hill
859281784a Recurring tickets - fix include path 2025-08-16 14:31:01 +01:00
Marcus Hill
7ae7b8904c Invoice.php - Fix undefined error 2025-08-16 14:30:37 +01:00
Marcus Hill
559e0c6350 Comment direct link to guest pay, we should not encourage agents to do this 2025-08-16 13:47:47 +01:00
Marcus Hill
d942badec8 Fix primary contact text not showing 2025-08-16 13:42:29 +01:00
johnnyq
f443ae9203 convert even more ajax modals to new syntax 2025-08-16 02:06:42 -04:00
johnnyq
d37dc37c2d convert more ajax modals to new syntax 2025-08-16 01:40:40 -04:00
johnnyq
236d895498 Reworked the ajax-modal function to be more simplified and use less data attributes 2025-08-16 01:02:16 -04:00
johnnyq
3bb0ef6f39 Left Align Billing Header 2025-08-15 22:55:40 -04:00
johnnyq
a0ced96d1d Use a WAY MORE Efficient query when filling out filter selection boxes by using EXIST instead of DISTINCT selections 2025-08-15 20:39:23 -04:00
johnnyq
4ef1e91c78 When Show Archived is selected in clients show Drop down filters for them as well in Idustry and Referral 2025-08-15 19:32:09 -04:00
johnnyq
2333fa2d9b Product Category Dropdown Filter only show categories thats are assigned to the products not all the categories 2025-08-15 19:26:42 -04:00
johnnyq
37bef2d824 Check Stock if product type is a product before adding the line item 2025-08-15 19:12:45 -04:00
johnnyq
6427235aec Show Name Description Tax Price and Stock in Product Auto Complete in Invoice 2025-08-15 18:25:23 -04:00
johnnyq
535c8e9f7b Remove Stock if Inventory item is selected and added to an invoice and return stock when Invoice Item related to a product is deleted 2025-08-15 17:32:44 -04:00
johnnyq
890e166d1c Thicken the left border on ticket replies for more prominent type of reply 2025-08-13 13:35:29 -04:00
johnnyq
337ceb7477 Fix Client Net terms displaying default Net terms instead of On Receipt if selected 2025-08-11 21:51:05 -04:00
johnnyq
f82f3e9b8c Allow adding more than 9 stock 2025-08-11 21:40:42 -04:00
johnnyq
3c709955e3 Add UI elements for product location, used logic to seperate product from service, also added the ability to add stock for a product and linking stock to an expense with notation, still need to work on taking away from stock 2025-08-11 21:18:55 -04:00
johnnyq
595e6090c7 Added Stock Ledger to tables and additonal fields for product including type, code and location 2025-08-11 18:19:45 -04:00
johnnyq
1d98eb5160 Update Project Details Header to use card group class and update client ui to not show header button texts in mobile view, added no text wrap to location and contact column 2025-08-08 16:09:46 -04:00
johnnyq
7172c92f02 Update Database updates patch in update_cli 2025-08-08 15:09:03 -04:00
johnnyq
874d9ddbc3 Cleaned up ticket details UI used card Group for top, removed responses in ticket replies section, uncarded the ticket commend editor giving much more room, moved summarize to 3 dots 2025-08-07 20:38:23 -04:00
johnnyq
73b84a9690 Removed dynamic depth path_prefix due to potential security issues with it 2025-08-06 18:12:13 -04:00
johnnyq
c78f50ab8c cap the path_prefix to 3 depth directories max 2025-08-06 18:03:51 -04:00
johnnyq
8407cd3ea5 updated router.php to automatically determine relative path based off directory depth and use var path_prefix instead of prepend_uri var these vars are only used in header and footer php files for now 2025-08-06 18:02:25 -04:00
johnnyq
9caa42975d rename get_settings.php to load_global_settings.php and update all requires 2025-08-06 17:48:23 -04:00
johnnyq
44fdb6c24f Broke up the check_login.php require into several files seperated by function and then required them in the check_login 2025-08-06 17:16:30 -04:00
Johnny
c8984d1bc9 Merge pull request #1231 from itflow-org/ticket-fr
Implement ticket first response date/time tracking
2025-08-06 16:19:27 -04:00
johnnyq
be66a1690f Fix setup redirect 2025-08-06 12:52:02 -04:00
wrongecho
13838ec8d6 Implement ticket first response date/time tracking 2025-08-06 10:45:28 +01:00
wrongecho
2d72a6fd12 Implement ticket first response date/time tracking 2025-08-06 10:38:52 +01:00
johnnyq
e24ec04a75 Fix Post errors when repeat and Email Event is not selected 2025-08-05 18:39:24 -04:00
johnnyq
9a0aa9ce97 Fix Calendar not showing when no client is selected 2025-08-05 18:36:23 -04:00
johnnyq
643a4ce666 add router.php to inc_all_client.php 2025-08-05 18:18:46 -04:00
johnnyq
189098541e Remove unused top nav ticket modal 2025-08-05 18:17:14 -04:00
johnnyq
e8a1d4c66c Update mfa enforcement page to use new asset pathes 2025-08-05 14:05:09 -04:00
johnnyq
08dd6147f2 Migrate Dark/light mode to a user settings instead of global setting, created new include called router.php to dynamically prepend ../../ to asset pathes based off currect directory depth 2025-08-05 13:32:19 -04:00
johnnyq
7e55808a05 add some redirect to login.php, fix ticket post 2025-08-04 18:16:13 -04:00
johnnyq
6b39c1a280 Finished moving to the redirect, flash_alert and get_field_by_id and maing sure validate_csrf is on top and some other cleanups for guest and client posts 2025-08-04 18:07:26 -04:00
johnnyq
a38d0054df Finished moving to the redirect, flash_alert and get_field_by_id and maing sure validate_csrf is on top and some other cleanups for user posts 2025-08-04 17:41:32 -04:00
johnnyq
e39072d3bc More work on moving to the redirect, flash_alert and get_field_by_id and maing sure validate_csrf is on top and some other cleanups, along with more work on credits 2025-08-04 17:01:19 -04:00
johnnyq
b4e5e3fda7 Fix injection with role id affecting authenticated admin accounts only 2025-08-04 12:06:05 -04:00
johnnyq
e8af173b4f Fix Client Billing column lweft align the label right align the amounts 2025-08-04 11:36:30 -04:00
johnnyq
fef0d8761f More user post function migration and cleanup 2025-08-04 11:27:24 -04:00
wrongecho
76b48378ab Hide invite contact letter options for now 2025-08-04 11:45:54 +01:00
johnnyq
a7e042b5f4 Removed logging comments as its implied in asset post also if returning 1 field for logging use getFieldById Function flipped it so it validate CSRF before role permission check, replaced header redirect with new redirect function and elimnasted the extra exit() afer redirect as its done in the function, also used the flash_alert function 2025-08-02 12:51:40 -04:00
johnnyq
ab8f51622f Started Removing logging comments as its implied in user posts also if returning 1 field for logging use getFieldById Function flipped it so it validate CSRF before role permission check 2025-08-01 18:30:32 -04:00
johnnyq
fae7e76721 Remove logging comments as its implied in admin also if returning 1 field for logging use getFieldById Function 2025-08-01 18:08:02 -04:00
johnnyq
012b0f1a77 Update Admin posts to use new functions flash_alert and getFieldById which greatly cleans up and reduces the code also removed logging comments as implied by the function logAction 2025-08-01 17:21:35 -04:00
johnnyq
cc5b1c8040 Add new function called flash_alert() to repace the alerting in posts, updated accounts post to use new function 2025-08-01 15:51:29 -04:00
johnnyq
2cf932600e Fix broken link for edit role 2025-08-01 15:32:43 -04:00
johnnyq
d2dac1915d Update admin, user, guest and client post to use new redirect function 2025-08-01 15:25:52 -04:00
johnnyq
5d52b6c4ec Update logic for Apply Credit on invoice Post 2025-08-01 15:17:50 -04:00
johnnyq
7cfba7f2ef Added redirect() function for page redirects and updated credit system fields to include credit_note, credit_invoice_id and type for better reporting 2025-08-01 13:37:23 -04:00
johnnyq
41a8e41463 Move reports back and rename them appropriately update broken links 2025-07-31 18:48:33 -04:00
johnnyq
07e2c41eb7 Fix client uri regression broken asset details page update echos to use php short hand for easier code reading 2025-07-31 16:10:33 -04:00
johnnyq
9fe0d8417b Feature: Added Client URI field to Assets which is exposed in the client portal can be used for remote desktop links etc 2025-07-31 15:54:07 -04:00
johnnyq
905908bcf1 broken link updates 2025-07-30 20:59:20 -04:00
johnnyq
8e87c25de1 Update more broken links from file diretory consolidation and started migrating some js and ajax and css from root to /user /admin etc that pertain to the section 2025-07-30 20:08:28 -04:00
johnnyq
5a76780cd9 Move db.sql back to fix develop platform 2025-07-29 21:40:50 -04:00
johnnyq
10fd911dcc Update links on the setup page as well 2025-07-29 18:59:42 -04:00
johnnyq
2333d81276 Update more broken links from file dirextory consolidation 2025-07-29 18:34:51 -04:00
johnnyq
9ee76213e1 Update more broken links from file dirextory consolidation 2025-07-29 14:32:43 -04:00
johnnyq
4ec1441189 Cleanup some broken links from file dirextory consolidation 2025-07-28 23:29:46 -04:00
johnnyq
38e2e50a29 More progress on consolidating files into user and admin 2025-07-28 22:48:44 -04:00
johnnyq
95950700d8 Moved user items to user directory 2025-07-28 17:57:06 -04:00
johnnyq
0494bfc1cf Moved admin_ to /admin, user_ to user report_ to /reports each have their own post includes modals directories created seperate headers and footer. Also did the same for xcustom, more work to me done 2025-07-28 13:32:28 -04:00
johnnyq
4906e06bf1 Initialized migrating modals into entity folders and modals out of ajax and start working on moving admin items to new admin directory 2025-07-27 21:24:14 -04:00
johnnyq
699546f531 In Client Import Clarify CSV as Primary Contact Name instead of just Contact Name same with Location name use Primary Location Name, makes it much clearer when importing clients 2025-07-25 14:21:55 -04:00
johnnyq
d5ec601d75 add eg info@company.com for further clarification on company setup 2025-07-25 13:36:07 -04:00
johnnyq
5f26f68a04 Clarify Email during company setup, instead of just enter email enter company email for the placeholder https://youtu.be/Ul10HXaPwNk?t=2079 2025-07-25 13:34:05 -04:00
johnnyq
219fe59aa2 Use Badge Pill for rounded Badges in client side nav 2025-07-25 12:44:43 -04:00
johnnyq
d115d57d1a Update sanitize_input Function to handle encoding issues such as Vietnamese. Instead of Blindly just converting to UTF-8 check the input to see if its already UTF-8 2025-07-25 12:35:13 -04:00
johnnyq
6307099bc1 Clarified Importing contacts when inporting clients in the client import modal window 2025-07-25 12:18:17 -04:00
johnnyq
e0a5efdfaf Updated Contact Asset Counts to use more optimied query and added asset counts to client listing 2025-07-24 17:28:10 -04:00
johnnyq
e014e516e6 Beta Support for Dark Mode has been added to the theme options 2025-07-24 14:58:06 -04:00
johnnyq
4d71eb5de0 Remove Credit once Applied, also get total credits applied 2025-07-24 13:24:59 -04:00
johnnyq
0db6853fde Updated Invoice, Quote Recurring Invoice UI to include a table border and added hover effects to line items 2025-07-24 13:02:57 -04:00
johnnyq
197dd9f299 Initial Work on Client Account Credit System, DB Structure, Credit Balance Calculation, added Apply Credit and add Credit with Expire dates, Added DB Structure for Discount Codes, UI Rewrite on client top header now using grouped cards, more dark mode work as well 2025-07-24 11:31:45 -04:00
johnnyq
99aaeefe8e Move the adminlte css to be the last css to fix select2 being white in dark-mode 2025-07-23 17:32:51 -04:00
johnnyq
712804d2a8 Preparing for Dark mode theme: Started Fixing models so they look better in dark mode 2025-07-23 17:02:20 -04:00
johnnyq
a393284acd Remove Building Icon next to company name in main side bar nav 2025-07-23 13:24:48 -04:00
johnnyq
719a0e5efa Also Apply previous commit it editing recurring expenses 2025-07-23 13:20:06 -04:00
johnnyq
6221fd67e1 Fix recurring expense next run date logic for monthly and annual frequencies 2025-07-23 11:47:31 -04:00
johnnyq
56c7c76ac6 Add option to filter footer 500 records per page 2025-07-22 16:15:09 -04:00
johnnyq
a5aae51b1a Fix issue in some of the client overview entities archived will not remain selected after query, fixed issue where clients would not show in overview if in archived 2025-07-22 16:13:04 -04:00
johnnyq
14691fa367 Fix Archived Query for domains to not show archived clients 2025-07-22 15:51:57 -04:00
johnnyq
38b2a94231 Client Overview do not count Archived Clients entities and in services do not show services of archived clients 2025-07-22 15:46:17 -04:00
johnnyq
4c031c8f83 Increase the width for totals on invoices and Quotes PDF Exports 2025-07-21 21:31:39 -04:00
johnnyq
b100498dd7 Add Client Bulk Actions: Edit Tags, Referral, Industry, Set Hourly Rate, Send Bulk Email, Archive. Also added restore option to restore a client 2025-07-21 18:27:31 -04:00
johnnyq
50a8e67917 Commented out deleting old Payment Provider Settings from DB until next release 2025-07-21 13:29:29 -04:00
wrongecho
dfe0a0b1c7 Add default netid for asset int csv import to prevent errors 2025-07-21 09:18:30 +01:00
wrongecho
52dac2252a Add default purchase date for csv import to prevent error when undefined 2025-07-21 08:11:57 +01:00
johnnyq
5aee84e84f Add Credit card icon to the pay button 2025-07-15 18:27:09 -04:00
johnnyq
3e7d7f3801 Make Client Portal Dashboard Cards Linkable, added upaid invoices with ui for option to enter card manually, pay with saved card or pay entire balance 2025-07-15 18:23:20 -04:00
johnnyq
184aba4de4 Finished UI work for AI Providers and Models, AI is set to use the new AI Provider and Models 2025-07-15 16:19:23 -04:00
johnnyq
dd482b246f Use getFallBack function on MAC Address if no MAC is present show a - placeholder 2025-07-15 13:56:54 -04:00
johnnyq
717e6351e7 Add Option for Mac Address in Additonal Column and allow to filter by MAC 2025-07-15 13:54:25 -04:00
johnnyq
c36b1cf50f Added Income Category Filter to Invoices 2025-07-15 13:34:05 -04:00
johnnyq
896da66caf Remove the Archive button from invoices as we dont archive invoices 2025-07-15 13:26:13 -04:00
johnnyq
f72b7763c1 Added Bulk Actions to Invoices Assign Income Category 2025-07-15 13:24:28 -04:00
johnnyq
46c4a62046 Converted add payment to a dropdown under invoice to allow for the standard manaual add payment and to pay with a saved card or by entering a card manully 2025-07-14 17:36:03 -04:00
wrongecho
da3a1d2ce4 Allow linking closed tickets to a project 2025-07-14 15:13:36 +01:00
johnnyq
35d6b51770 use table-sm for tickets to reduce padding and margin and remove ticket_compact_view 2025-07-10 16:11:02 -04:00
johnnyq
35cbfdd736 Rework Categories into a select box for tickets, which now makes it easier to see what category your viewing and one less click as the form auto submits upon selection 2025-07-10 16:04:52 -04:00
johnnyq
a7b2522c87 Fix Invoice Link in ticket details when billed 2025-07-09 20:10:08 -04:00
johnnyq
fe8baf2ca4 Fix pointer not switch to a finger when hovering over add contact in ticket details 2025-07-09 20:06:22 -04:00
johnnyq
300aef413c Fixed Email Notify not showing for recurring invoice 2025-07-09 19:32:24 -04:00
johnnyq
467c681117 Add Saved Payment Options to recurring invoices and details for agents 2025-07-09 19:23:12 -04:00
johnnyq
31a89c0641 Update Recurring Payment Auto pay in cron 2025-07-09 17:05:56 -04:00
johnnyq
5f94543d9b Add Easy Select Auto Pay option in Client Portal Recurring Invoices, fix guest pay 2025-07-09 15:58:13 -04:00
johnnyq
10fd74b4c4 Remove unused model 2025-07-09 01:46:56 -04:00
johnnyq
9bc705bfa1 Updated Guest pay and Client Add Delete Payments, adjustedsetting saved payment per recurring invoice 2025-07-09 01:45:56 -04:00
johnnyq
307d9892b2 No need for a sql delete on recurring payments when deleting a saved payment method as SQL cascadely deletes the recurring payment if saved payment method is deleted 2025-07-08 14:10:27 -04:00
johnnyq
93f4ea51fd Rework Payment Provider AI Provider Tables and logic add cascading deletes 2025-07-08 14:07:10 -04:00
johnnyq
a6f83493f8 Fix Payment Method Additons in setup 2025-07-07 23:22:35 -04:00
johnnyq
7e17fdf851 Add new UI for Saved Payments for payment providers 2025-07-07 18:25:23 -04:00
johnnyq
c76da10747 Add Payment Method to UI and switch Add Payment modals to use the new table 2025-07-07 16:37:51 -04:00
wrongecho
7c558ff842 Add location create endpoint 2025-07-07 13:47:17 +01:00
johnnyq
a011dc4dea POST code for AI and Payment Providers 2025-07-06 17:01:28 -04:00
johnnyq
fa9acef279 Fixed IMAP test button with error details 2025-07-06 12:47:26 -04:00
johnnyq
ed0936059b Convert new lines to brs for contact notes 2025-07-06 11:50:12 -04:00
johnnyq
77597fd7a9 Update wording on Add Payment Processing, we plan on using the income/expense account to be named after provider name and category be processing fees and the vendor named after the provider name if payment processing expense is enabled 2025-07-04 18:07:59 -04:00
johnnyq
8d1bf3d245 UI add modal and listing work on Payment Providers 2025-07-04 17:48:54 -04:00
johnnyq
e7503e8f55 Initial DB work to Generalize Payment Providers, allow multiple payment providers and client payment methods, also to move payment methods to its own table instead of in categories, started work on ai provider ui models 2025-07-04 16:52:30 -04:00
johnnyq
9b6be66623 Initial work on Adding Payment Methods for Online Payments in Client on Agent Side and initial work on AI Providers with multiple model support assigned to various sections and custom prompts 2025-07-04 15:42:26 -04:00
johnnyq
6bc7862232 UI Dashb oard resize some Dashboard cards 2025-07-03 18:14:20 -04:00
Johnny
69a8a9246d Merge pull request #1226 from MydsiIversen/Document-enhancement-clientside
Enhanced the document function on the client side
2025-07-03 17:42:24 -04:00
johnnyq
b87b801b04 Fix broken Table header Link buttons in contact details 2025-07-03 16:24:51 -04:00
johnnyq
dba04a407a Fix Table Header Link Buttons in Asset Details 2025-07-03 16:19:55 -04:00
johnnyq
e281a39512 Add title Icon for Bulk Set Status 2025-07-03 16:08:15 -04:00
johnnyq
e0364183e2 Disable Certain Bulk Actions that are directly related to a client in client overview section instead are shown in the client section 2025-07-03 16:03:57 -04:00
Johnny
6af61cbb3c Merge pull request #1225 from itflow-org/bulk-assign-phyloc
Add physical location modal - not working
2025-07-03 15:11:42 -04:00
johnnyq
67dc012caa Small wording hints on file uploads instead of upload File its just upload and added the title of the upload modal from upload files to upload file(s) 2025-07-03 14:44:30 -04:00
johnnyq
8753655c9c Do not allow client portal logins with Contact users of a client that is archived 2025-07-03 14:18:14 -04:00
wrongecho
873dc1f76d Fix contact location if not provided in api call 2025-07-01 11:50:20 +01:00
wrongecho
d781130b49 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-07-01 10:52:05 +01:00
wrongecho
effbf241e6 Fix default rate and net terms if not provided in api call 2025-07-01 10:51:56 +01:00
Mads Iversen
396a67b198 - Enhanced the document retrieval process by including the document description in the SQL query.
- Implemented file upload capabilities, allowing users to attach files to documents with support for various formats (PDF, Word, text).
- Created modals for adding new documents and uploading files, improving user experience.
- Added functions for formatting file sizes and retrieving appropriate icons based on file extensions.
- Updated the document display logic to handle attached files, providing inline previews for PDFs and images.
2025-06-30 14:41:12 +02:00
Marcus Hill
1939e06a24 Start using the new modal when creating tickets. This allows us to select both the client and contact, along with a client-specific asset, location and vendor 2025-06-28 17:56:55 +01:00
Marcus Hill
3f21e73b2e Comment ticket collabs, still broken 2025-06-28 15:55:13 +01:00
Marcus Hill
bc9529c488 Client Portal - Allow client choose asset during ticket creation 2025-06-28 15:49:17 +01:00
Marcus Hill
19af05ebee Client Portal - Add company logo to header banner 2025-06-28 14:28:25 +01:00
Marcus Hill
eb11e5b2f8 Bugfix: Company logo not being removed properly from db 2025-06-28 14:27:51 +01:00
Marcus Hill
b85137096d Add physical location modal - not working 2025-06-28 13:42:00 +01:00
Marcus Hill
77e9d72f92 Add physical location modal - not working 2025-06-28 13:37:44 +01:00
Marcus Hill
ec344cbaa7 Allow entering multiple ticket watchers at once 2025-06-28 12:30:42 +01:00
johnnyq
4cb2f42d71 Added Bulk Action Set IP to DHCP in Asset Interface 2025-06-27 01:45:25 -04:00
johnnyq
98723b76cf Added Bulk Actions Set Network, Type and Delete to Asset Interfaces 2025-06-27 01:31:23 -04:00
johnnyq
45ac7f084b Add Bulk Delete Function Also when deletign a ticket delete the watchers and attachments and remove the ticket id from uploads/tickets/ticket_id 2025-06-26 23:16:08 -04:00
johnnyq
3626777bd1 Fix Item name and Description Alignment in PDF Exports 2025-06-26 19:12:25 -04:00
johnnyq
5fb1070567 Show your Assigned Assets on the Client Portal Home Page 2025-06-26 18:45:23 -04:00
johnnyq
f0bcf975b6 Add Assets to the client Portal viewable by Primary and technical Contacts 2025-06-26 18:18:36 -04:00
johnnyq
0ca28dc630 Fix Document API to not insert a new document upon update as we changed the way documents and document versions are handled 2025-06-26 17:30:34 -04:00
johnnyq
8196706538 Ticket API: Allow HTML into ticket Content and allow inserting asset_id 2025-06-26 17:13:27 -04:00
johnnyq
411a6efeb5 Fix Searching Closed Tickets 2025-06-26 17:05:38 -04:00
johnnyq
ffad0cdec9 Fix broken Documents in the Client Portal due to regression with splitting document templates 2025-06-26 16:45:00 -04:00
johnnyq
ca519fe4e1 Fix Adding a vendor from a template and adding country code to vendor template 2025-06-26 16:27:11 -04:00
johnnyq
6b0855cff8 Fix Exports while in Client Overview some were failing due to missing client_id var and some were not logging the client_id if in the client section 2025-06-26 15:49:49 -04:00
wrongecho
e8a3309822 Fix project search not filtering completed projects 2025-06-26 13:13:25 +01:00
wrongecho
ce8c4dfc4c Add debug check for php-zip 2025-06-25 20:40:08 +01:00
wrongecho
a1b99c46c7 Client Portal - Don't allow tech contacts to edit themselves 2025-06-25 09:44:57 +01:00
wrongecho
1ee50fdfde Ticket merging - Hyperlink the new parent ticket in the internal comment for quicker access 2025-06-25 09:23:02 +01:00
wrongecho
05850f61d2 Fix php debug message 2025-06-25 09:11:19 +01:00
johnnyq
12d8c8e959 Fix Overlapping logo with company information in PDF Invoice and Quote 2025-06-23 19:43:41 -04:00
johnnyq
2b4933bd5c Do not Update ticket status when scheduling or cancelling a tickets schedule 2025-06-23 18:15:05 -04:00
Marcus Hill
500e713764 clarify error message wording 2025-06-22 10:01:10 +01:00
Marcus Hill
2ca50776ec Ticket
- Move ticket metadata/details into their own card (source, category, time, closure details, etc)
- Start adding support for ticket_quote
2025-06-22 10:00:53 +01:00
Marcus Hill
bd31513e5d Add db fields for ticket_quote 2025-06-22 09:59:23 +01:00
Johnny
6df04390bb Merge pull request #1224 from itflow-org/develop
25.6.1 Release
2025-06-22 01:52:33 -04:00
johnnyq
49511276fd Bump Release to 25.06.1 - updated changelog 2025-06-21 18:42:19 -04:00
johnnyq
c4e91df1ed Fix Regression that broke setup, set company currency default to USD if not set 2025-06-21 18:33:48 -04:00
Johnny
ed8a576ac3 Merge pull request #1223 from itflow-org/develop
25.06 Release
2025-06-20 15:34:32 -04:00
johnnyq
5c6a7acb7d Fix Updated at date in Documents 2025-06-20 15:25:42 -04:00
johnnyq
850db54a3b Bump ITFlow version to 25.6 and updated changelog 2025-06-20 15:10:46 -04:00
johnnyq
985593b7c2 Add Confirm Modal to Accept Decline Quote 2025-06-19 16:39:22 -04:00
johnnyq
857b5d1bfd Remove redundant php open tag 2025-06-19 00:27:33 -04:00
johnnyq
498e86aa7a Refactor Restore ITFlow Backup code in setup to utilize Sys Temp Directory 2025-06-19 00:26:23 -04:00
johnnyq
79d0fd28b0 Fix Backup function 2025-06-19 00:17:52 -04:00
johnnyq
426ca90515 Add Function to cleanup temp backup files if backup times out or error out 2025-06-19 00:13:56 -04:00
johnnyq
e7328f1be5 Use tmp directory to zip and backup itflow instance 2025-06-19 00:06:54 -04:00
johnnyq
baccc8051e Fix Extra spacing before Contact Name in client listing 2025-06-18 23:13:06 -04:00
johnnyq
f1c7690270 Also add contact_id to the compact ticket listing 2025-06-18 22:34:27 -04:00
johnnyq
d700d1530b Add missing contact_id in ticket listing 2025-06-18 22:32:55 -04:00
johnnyq
b60f44eede Allow the Contact to be clickable in ticket compact listing too 2025-06-18 18:06:59 -04:00
johnnyq
54ab788e93 Allow the Contact to be clickable in ticket listing and direct to the client contact details page 2025-06-18 18:05:28 -04:00
johnnyq
ac2dd04959 Moved Has Base Vendor Template Icon to the the end of the Vendors Table listing 2025-06-18 16:56:40 -04:00
johnnyq
9a449c35ac Fix No content in Edit Recurring Invoice Note Modal 2025-06-18 16:18:01 -04:00
johnnyq
2ff5d2f87c Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-06-18 15:32:38 -04:00
johnnyq
8f704dade8 Recurring Payments now make the payment on the invoice Due Date instead of when the recurring invoice is generated 2025-06-18 15:32:22 -04:00
wrongecho
3b3e323ce5 Assets - Import CSV now takes purchase date too (MUST be in format YYYY-MM-DD, Excel is annoying and will silently reformat this at random) 2025-06-18 14:48:13 +01:00
wrongecho
43ec144bf0 Fix more debug errors 2025-06-18 14:47:21 +01:00
wrongecho
d5f94819d0 Fix 'Passing null to parameter' debug message 2025-06-18 14:11:18 +01:00
johnnyq
98aa7e4993 Remove url_query_strings_sort var as this functionality has been moved to the filter header that all listing pages share 2025-06-18 01:42:21 -04:00
johnnyq
7c61911dba Added Document Template Delete function 2025-06-18 00:55:57 -04:00
johnnyq
2bb107a5d7 Add Functionality to mark all tasks as complete or incomplete in a ticket 2025-06-18 00:48:18 -04:00
johnnyq
0c4a2aedb7 Show Puzzle Piece Icon if a Vendor has a base vendor template assigned to it 2025-06-18 00:16:19 -04:00
johnnyq
e7e7272002 Migrated Vendor Templates to its own table, lots of code modifications here 2025-06-17 22:44:54 -04:00
johnnyq
f672991089 Remove Document Template field from a few more files 2025-06-17 19:09:43 -04:00
johnnyq
473fa2671d Migrate Document templates to its own table 2025-06-17 19:00:56 -04:00
johnnyq
85e1515080 Move Document Versions to a seperate table much more efficient and allow to reference same document using a link Note this update will delete previous document versions 2025-06-17 17:58:20 -04:00
johnnyq
84437a2732 Bump TCPDF from 6.9.4 to 6.10.0 and TinyMCE from 7.9.0 to 7.9.1 2025-06-17 14:44:06 -04:00
johnnyq
71911f418f Remove Unessesary Code 2025-06-17 14:32:35 -04:00
johnnyq
2741f78bd8 Fully Migrated Quote and Invoice to use TCPDF and elimiated PDFMake 2025-06-17 14:22:57 -04:00
johnnyq
012e54161a Converted PDF Invoice from PDFMake to TCPDF 2025-06-16 18:40:05 -04:00
johnnyq
409084c499 Update UI on Quote, Recurring Invoice and Guest views to match new optimized Invoice UI Layout 2025-06-16 15:49:38 -04:00
johnnyq
27595b2c4a UI Add Ticket to Invoice - Removed Warning about Draf Invoices increase modal size to large and move input to a row to reduce uneessary veritical space being occupied. 2025-06-16 13:13:48 -04:00
johnnyq
62b6535625 UI Invoice make footer text secondary color 2025-06-15 15:42:13 -04:00
johnnyq
e593f438b3 UI Work on Client Overview Increase Quick Notes and Recent Activities width and added contact photos or initials to important contacts 2025-06-15 15:36:54 -04:00
johnnyq
44d46a2cc5 UI Overhaul to invoice Details Page 2025-06-15 15:06:53 -04:00
johnnyq
66e30dd1a8 Added Badge Counts in Client Overview Section 2025-06-13 16:05:49 -04:00
johnnyq
4c74351d21 Added Company Tax ID Field and Option to Show Tax ID on Invoices 2025-06-13 15:51:09 -04:00
johnnyq
5d2b14259c Added Ticket Due Date basic functionality to tickets 2025-06-12 17:13:17 -04:00
johnnyq
878d5444e1 Use Gray Accent color when in client view and use configured theme for Global view, this will help differentiate the view that you are in 2025-06-12 15:00:47 -04:00
johnnyq
ec24ec60c6 Disable Ticket Auto Timer by default 2025-06-12 13:49:11 -04:00
johnnyq
9c096d1f65 Add Setting option to enable or disable ticket autotimer 2025-06-12 13:44:21 -04:00
johnnyq
dba3e895da UI/UX update in ticket details switch to full card stacks with edit icons for the stackable reference items on the right like asset watchers contact etc 2025-06-11 22:28:38 -04:00
johnnyq
07726322df Project Details: Add Bulk Actions to tickets and allow tickets to be sorted 2025-06-11 20:47:27 -04:00
johnnyq
bef18c0d72 Do not Resolved Tickets in Bulk that have Open tasks, display warning and count of ticket not resolved because of open tasks 2025-06-11 18:48:23 -04:00
johnnyq
7c3332570a Add Ticket Category UI for Recurring Tickets 2025-06-11 18:11:08 -04:00
johnnyq
a3d4a52188 Add Mark Sent when invoice is draft to Action Dropdown for invoice listings 2025-06-11 17:29:38 -04:00
johnnyq
5530e89f41 Add one more Non-Billable Check in invoices 2025-06-11 17:18:28 -04:00
johnnyq
a3554b3dfd Add one more Non-Billable Check in invoices 2025-06-11 17:16:03 -04:00
johnnyq
674da36cd1 Do Not calculate Non-Billable Invoices towards a clients balance Convert Add Payment Modal to AJAX and add it as an option from the invoice listing page 2025-06-11 17:12:37 -04:00
johnnyq
18ce12f60d Add Option if visiting a deleted invoice / recurring to return to the listing page and added delete to invoice details page 2025-06-11 15:57:52 -04:00
johnnyq
a462ab36f8 Ticket add / edit / builk sort categories alphabeticaly 2025-06-11 14:56:23 -04:00
Johnny
8aa41edc3e Merge pull request #1222 from itflow-org/functions-ip-addr-leftmost
Update how functions.php gets the remote IP address for logging
2025-06-11 14:01:12 -04:00
wrongecho
4e0252553a rm extra ; 2025-06-11 08:18:32 +01:00
johnnyq
8745d09890 Add sanitize the remaining uris that allow uri type:// refactored service details 2025-06-10 12:11:58 -04:00
wrongecho
ac3a02baea Disallow turning on login key without a secret 2025-06-10 09:19:29 +01:00
wrongecho
f2bbc170da Update how functions.php gets the remote IP address for logging
- Builds on PR #1210 to always get the leftmost IP address
- Cloudflare (HTTP_CF_CONNECTING_IP) must now be explicitly defined, otherwise people could add the HTTP_CF_CONNECTING_IP header to a non-Cloudflare host and spoof IPs
- Tidy up the if/else logic a little
2025-06-10 09:03:00 +01:00
johnnyq
d79a17adb0 Added sanitize_url function to strip out unsupported URI Schemas schema:// if not on the allow list it will show unsupport://URL 2025-06-09 20:28:10 -04:00
johnnyq
680dbb04ce Fix UI Regression with Indenting Columns in Tickets listing when Open and Closed tickets are filters 2025-06-09 13:30:13 -04:00
johnnyq
6c8403fa09 Move MFA Modal out of the Password Reset Form 2025-06-09 12:52:07 -04:00
johnnyq
fec8eaef70 Remove xml from the allowed upload list, if you must zip it up 2025-06-07 01:28:13 -04:00
johnnyq
5f007029b4 Fix Category 2025-06-07 00:58:56 -04:00
johnnyq
4e76ceaa0f Simplify Category filter logic in tickets catrgory is an int not a string duh 2025-06-07 00:46:11 -04:00
johnnyq
08e467baa9 Encode Page Title 2025-06-06 21:48:24 -04:00
Johnny
f78a2250f1 Merge pull request #1221 from itflow-org/develop
Develop to Master for 25.05.1 Release
2025-06-02 14:39:50 -04:00
johnnyq
84e8a459c8 update Changelog 2025-06-02 14:24:52 -04:00
johnnyq
b777f80249 Increment Minor Version and update Changelog 2025-06-02 14:19:04 -04:00
johnnyq
73da203dbb Added Cards for Account Balance, Recurring Monthly for Billing Contacts and Domains Expiring for Technical Contacts to Client Portal 2025-05-31 17:47:08 -04:00
johnnyq
55a31865d0 Updated Client Overview Entities to not show Archived client's Entities even though the entity may not be archived, also added Archive Searching to network and certificates also added unarchive capabilities to them as well 2025-05-30 16:15:12 -04:00
wrongecho
350697869b Fix invoice top banner not showing 2025-05-30 17:31:54 +01:00
Johnny
939b07422d Merge pull request #1220 from itflow-org/develop
Merge Develop into Master for 25.05 Release
2025-05-29 14:30:25 -04:00
wrongecho
88369d480a Reword changelog 2025-05-29 18:42:25 +01:00
wrongecho
cf083e94e6 Fix 2025-05-29 18:40:51 +01:00
wrongecho
11e8f5acfc Bump app version 2025-05-29 18:37:39 +01:00
wrongecho
77b3a89eb2 Reword changelog 2025-05-29 18:37:16 +01:00
johnnyq
f572f4265a Updated Changelog 2025-05-29 13:31:40 -04:00
johnnyq
0b66c8e1be Better naming of Indetity Providers instead of Integrations to make way for more Indentity Provider like Google and custom SSO for the future 2025-05-29 13:29:27 -04:00
johnnyq
a8328a3f56 Add more text-nowrap to more table headers 2025-05-29 11:45:45 -04:00
johnnyq
8b42b17121 Added more text no wrap to table headers 2025-05-29 00:18:37 -04:00
johnnyq
db418ce662 Mobile UI/UX - Hide long New Button names and use plus icon only in mobile view, proper form group spacing in mobile as well 2025-05-28 23:39:44 -04:00
johnnyq
96fe566e08 Add location country even when client id uri is not set 2025-05-28 22:03:55 -04:00
johnnyq
a00f26d8a4 UI/UX Draggables now switch to a hand on hover, updated the UI in invoice quote and reccuring invoice so buttons do not wrap and are grouped. Seperated the Dragable button using a button link, did the same for tasks in tickets 2025-05-28 21:22:21 -04:00
johnnyq
eeef63d1c3 Updated Changelog 2025-05-28 19:36:52 -04:00
johnnyq
0b88ea85ae Display Country in Invoices, Quotes, Recurring Invoices, Clients, locations, client top head, and allow searching via country in Locations and Clients 2025-05-28 19:27:11 -04:00
johnnyq
c564118156 Fix Dupe GET VARS in tickets Removed extra Rebuild URL as this has been done in the filter header for some time now 2025-05-28 18:34:50 -04:00
johnnyq
01a7dc2068 Allow both Client and Contact to be sorted in same column in ticket list 2025-05-28 18:29:02 -04:00
johnnyq
bb44ecec3f Trips UI/UX - Move Client at the end column for consistency 2025-05-28 18:13:44 -04:00
johnnyq
b7b24d7de6 UI/UX Expenses - Combined Category and Description Column with secondary text seperation and expanded Truncation of Description from 50 chars to 60 chars 2025-05-28 18:08:08 -04:00
johnnyq
dcca93e34f Only show 8 notifications at a time instead of 10 2025-05-28 17:43:03 -04:00
johnnyq
4124188505 Ticket UI/UX allow the ticket toolbar to be a little more Mobile friendly 2025-05-28 17:39:32 -04:00
johnnyq
eb5d59623b Don't show Checkbox columns when ticket is closed, compact ticket list now matches round pills for status and priority 2025-05-28 17:02:50 -04:00
Marcus Hill
8631c06731 Stripe - Remove the locally stored payment identifiers (expiry/last 4) from the database when the client removes the stripe pm 2025-05-27 19:29:03 +01:00
Marcus Hill
40eb40fd86 Cron mail queue - fix $config_smtp_encryption being set to None in IF statement 2025-05-27 14:46:50 +01:00
Marcus Hill
c486682a0e Cron mail queue - fix app_log_type not being one of available enums 2025-05-27 14:05:09 +01:00
Marcus Hill
336da073f1 Admin mail settings
- Disable the IMAP test button as it doesn't work yet
- Remove word 'successfully' when testing SMTP as we're only adding the message to the queue, it wasn't sent yet
2025-05-27 14:00:25 +01:00
Marcus Hill
d2e187a239 Update security supported versions 2025-05-26 20:34:01 +01:00
johnnyq
f69de29353 Get a more accurate count of Tables rows in Debug using count instead of relying on show table status as this is not accurate all the time. 2025-05-24 13:45:27 -04:00
johnnyq
61de8bc792 Redirect to login when itflow restore completes 2025-05-24 13:30:49 -04:00
johnnyq
d31f19707b DB Dump 2025-05-24 13:23:41 -04:00
johnnyq
811312466f If Restore from Backup is chosen show message must configure database first if DB and config dont exist 2025-05-24 13:09:16 -04:00
johnnyq
5ecfb3e962 Update setup to include welcome as an option and do not hide the side nav items if db is already created. 2025-05-24 12:40:33 -04:00
johnnyq
77be5af4e5 Update setup to include restore option but place it in its own nav section for seperation. Also if DB and config is configured skip and do not show checks or database in the side nav 2025-05-24 12:28:34 -04:00
johnnyq
c512a716d2 Fix extra spacing in modal footer in notifications 2025-05-23 19:09:36 -04:00
johnnyq
14f5630caf Fix Invoice Header Button 2025-05-23 18:34:25 -04:00
johnnyq
8532bdc172 More UI updates to Guest Pay 2025-05-23 18:25:09 -04:00
johnnyq
9d74bf8e19 Use cards in Guest Pay Invoice 2025-05-23 17:45:06 -04:00
johnnyq
f75445b4d0 Limit Stripe Payments to just Credit Cards 2025-05-23 17:18:22 -04:00
johnnyq
e04fa1b696 Add stripe_pm_created_at 2025-05-23 17:13:05 -04:00
johnnyq
e07dfb5f67 db structure 2025-05-23 15:42:47 -04:00
johnnyq
3d1af05fc2 Updated DB to store Payment details 2025-05-23 15:41:52 -04:00
johnnyq
0e38925d74 Update Changelog 2025-05-22 18:00:08 -04:00
johnnyq
c0f3343412 Client Portal Add Recurrung Invoices with option to Enable or Disable Auto Pay per recurring Invoice if Stripe is enabled and Client has a payment method. Also when removing saved auto payment methods delete all recurring payments for that client that are Stripe method also added this to the admin settings 2025-05-22 17:58:51 -04:00
johnnyq
6a368840fa Bump stripe-php from 16.4.0 to 17.2.1 2025-05-22 12:37:35 -04:00
johnnyq
5361391b3b Update changelog with the bumps 2025-05-22 12:24:49 -04:00
johnnyq
b80662bb24 Bump FullCalendar from 6.1.15 to 6.1.17 2025-05-22 12:16:16 -04:00
johnnyq
4c272b6b8d Bump DataTables from 2.2.2 to 2.3.1 2025-05-22 12:08:47 -04:00
johnnyq
96abdef3ad Bump TCPDF from 6.8.2 to 6.9.4 2025-05-22 12:04:48 -04:00
johnnyq
0b04bc79e9 Bump tinyMCE from 7.7.1 to 7.9.0 2025-05-22 11:57:54 -04:00
johnnyq
cefbbdc3a8 Bump phpMailer from 6.9.2 to 6.10.0 2025-05-22 11:46:09 -04:00
johnnyq
83ffe05a99 Update Changelog 2025-05-22 11:38:24 -04:00
johnnyq
b6f73083ef SMTP Option Encryption None now works as intended 2025-05-22 11:37:14 -04:00
johnnyq
693736023e Update changelog 2025-05-21 21:02:55 -04:00
johnnyq
fed87c93ab Migrated contact link models to the new ajax models this fixes the issue of the overlapping var contact_name and improves page load and performance in contact details 2025-05-21 12:18:42 -04:00
johnnyq
f53b77b556 Migrated asset link models to the new ajax models this fixes the issue of the overlapping var asset_name and improves page load and performance in asset details 2025-05-21 11:51:18 -04:00
wrongecho
b858d82b0b Show archived categories properly 2025-05-20 14:51:12 +01:00
wrongecho
ccb2af6d17 Fix category name/type logging when archiving/deleting a category 2025-05-20 14:50:27 +01:00
wrongecho
8d937ac8f5 Fix add asset modal icon not showing 2025-05-20 11:39:35 +01:00
wrongecho
2786fb65ed Don't show archived ticket categories in the tickets.php filter options 2025-05-20 11:39:09 +01:00
wrongecho
025532f579 Fix quote top navbar options not showing following perms work 2025-05-20 11:29:26 +01:00
wrongecho
5bd03be1ad Ticket tasks - set maxlength html attribute 2025-05-14 16:05:43 +01:00
wrongecho
40086f1ce0 Quotes / Invoicing - More role/perms enforcement 2025-05-14 11:07:25 +01:00
wrongecho
be66ad9a4c Quotes / Invoicing
- Ability to manually mark a quote as invoiced (weird css fix for this, we can remove the custom css if we make the parent button just a dropdown, but don't want to introduce extra clicks)
- When converting a quote to an invoice, show the new invoice number in the quote history
- Quotes can now be sent from the main Send dropdown, instead of having to use the send button in the options menu / main quotes.php page
2025-05-14 10:41:32 +01:00
Marcus Hill
0df5c01bb7 Project - Require CSRF token to delete a project 2025-05-11 12:25:13 +01:00
Marcus Hill
b85fa38b67 Project - Show client abbreviation in open ticket link modal 2025-05-11 12:19:34 +01:00
Marcus Hill
546246d7c5 Project - Allow editing client after creation 2025-05-11 12:14:20 +01:00
Marcus Hill
d5536e78f4 Ajax contacts - Enforce client access restrictions when getting client contacts 2025-05-11 12:01:23 +01:00
Marcus Hill
908738b7ca Ajax active clients - enforce client access restrictions (e.g. when changing ticket client) 2025-05-11 11:57:16 +01:00
Marcus Hill
797e02bffa Hide Credentials in side nav if no perms to view 2025-05-11 11:48:47 +01:00
Marcus Hill
d856685782 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-05-11 11:46:00 +01:00
Marcus Hill
1400983d8c Projects/Tickets
- Hide new project button for users that only have support read access
- Hide new ticket button for users that only have support read access
- Enforce client access restrictions for viewing project details based off project client
- Prevent selecting the 'Select tickets' text when linking ticket
2025-05-11 11:45:47 +01:00
johnnyq
2a43c5d868 Remove DB Check 2025-05-08 16:46:25 -04:00
johnnyq
a67675c649 Remove 500 Records per page option to reduce Resource strain, 100 records per page is max 2025-05-08 16:08:28 -04:00
johnnyq
fc344ef636 add notification paging 2025-05-07 19:23:11 -04:00
johnnyq
2ffb2be083 Update the backup code to be a full backup zip file download of uploads and db dump along with version meta data file. Also allow to restore a single file in setup currently hidden 2025-05-07 15:37:57 -04:00
johnnyq
069772f27d Add Upload uploads.zip file to restore files as well 2025-05-07 14:54:25 -04:00
johnnyq
241ec50802 Add hidden option to restore dumped ITFlow Database during Setup 2025-05-07 14:32:51 -04:00
johnnyq
b943c9cd89 Remove Influencer as a referral 2025-05-06 19:50:51 -04:00
johnnyq
80625f8c3f Remove Unused vars in setup, added jpeg to the allow extension for user avatars 2025-05-06 19:36:31 -04:00
johnnyq
58435d3460 Add Next Button if Database is already configured 2025-05-06 17:18:54 -04:00
johnnyq
7a7ac4a47f Fix Edit Blank Recurring ticket in Asset Details 2025-05-06 13:16:56 -04:00
Marcus Hill
429dfa5ca4 Allow file upload extensions: .bat, .stk 2025-05-04 21:38:11 +01:00
wrongecho
e1f212d30d Start recording ticket source (API, Email, Portal, Agent) 2025-04-28 14:51:38 +01:00
wrongecho
670450bcfb Ticket statuses - Allow ordering from admin settings, this can replace the need to move the Kanban columns 2025-04-23 10:22:33 +01:00
Johnny
83e15e9e4a Merge pull request #1216 from itflow-org/develop
Develop to Master 25.03.6
2025-04-21 17:28:14 -04:00
johnnyq
b309081d75 Allow to search by project reference number 2025-04-21 17:16:35 -04:00
johnnyq
f1a7b35aa6 Update Changelog and App Version fix date to 2025-04-21 17:00:32 -04:00
Marcus Hill
469c5ef06d Update client pdf export
- Fix HTML formatting for the cover div, other div styling is still broken
- Adjust layout of cover info and add MSP logo
- Add software purchase and expiry dates
2025-04-19 16:30:00 +01:00
Marcus Hill
07cbe561bd Add stupidly bigger update warning to update page. Add reminder note to check ITFlow backup (one in every ten page loads) 2025-04-19 15:14:40 +01:00
Johnny
b69a70cfc3 Merge pull request #1213 from itflow-org/develop
Develop to Master - 25.03.5 Release
2025-04-18 19:08:18 -04:00
johnnyq
923001928c Update Changelog and version 2025-04-18 18:08:40 -04:00
johnnyq
75ed461c67 Asset and Contact Links now goto the details page instead of the details modal 2025-04-16 18:51:53 -04:00
johnnyq
691aebce91 Revert Fix 2025-04-13 15:15:18 -04:00
johnnyq
846947ff49 Change the button handlebar class 2025-04-13 15:11:37 -04:00
johnnyq
65e107d154 Totally remove Dragula in Favor of the modern SortableJS library, updated the Kanban 2025-04-13 15:01:52 -04:00
johnnyq
19b809b699 Added SortableJS Library, and updated Invoice, Quote and Recurring to use it. Added Grab Bar Icons next to action buttons. Will now sort in Mobile much more efficiently, update ajax vars for recurring invoice 2025-04-13 13:29:16 -04:00
johnnyq
60fe02bb47 Comment 2025-04-13 11:57:26 -04:00
johnnyq
3e708059c6 Fix not showing File folders instead of Document Folders when creating a document. 2025-04-13 11:55:14 -04:00
johnnyq
424104bb66 Default Date between max date to 9999-12-31 instead of current date for filtered listings, this fixes the issue if you post date an entity it would not show in the listing by default unless you selected a a great to date in the filter 2025-04-12 12:08:30 -04:00
johnnyq
62696b9ebe Fix Mobile Country Code in contact list 2025-04-12 11:58:32 -04:00
Johnny
87403e8c2d Merge pull request #1209 from itflow-org/index-redirect
Redirect the blank index page to the start page
2025-04-12 11:54:05 -04:00
wrongecho
7a5a607ff6 Redirect the blank index page to the start page 2025-04-11 14:53:02 +01:00
wrongecho
a195774726 Update README.md
Add JetBrains to sponsors, as they provide FOSS licenses of PhpStorm to us
2025-04-11 14:31:01 +01:00
johnnyq
8d0da7b55b Fix Entity Linking in Asset and contact details 2025-04-09 14:00:51 -04:00
Johnny
58c315cd09 Merge pull request #1207 from TamirSlo/fix-dashboard-db-update-1-9-7
Fix Dashboard following DB Update 1.9.7
2025-04-08 17:00:40 -04:00
Johnny
dd6c4602db Merge pull request #1194 from ssteeltm/develop
fix: missing kanban ticket settings
2025-04-08 16:59:07 -04:00
Tamir Slobodskoy
d413e0c8ff Fix Copy Trip Modal 2025-04-08 05:27:56 +01:00
Tamir Slobodskoy
b356658635 Fix Dashboard following DB Update 1.9.7 2025-04-08 05:02:46 +01:00
Johnny
d92f0fc49b Merge pull request #1206 from itflow-org/develop
Develop to Master for 25.03.4 Release
2025-04-07 13:31:20 -04:00
johnnyq
f206a28cf7 Update Changelog and App version to 25.03.4 2025-04-07 13:07:03 -04:00
johnnyq
70cb0ac635 Add the ability to remove additional assets from the ticket details screen 2025-04-07 12:58:55 -04:00
johnnyq
a0ece18876 Allow to remove additional assets in a ticket 2025-04-07 11:59:56 -04:00
wrongecho
4a22b03952 Global search - assets
When global search returns an asset, include a hyperlink to the asset details as part of the asset name
2025-04-04 15:12:32 +01:00
wrongecho
5ebf797c90 rm asset_mac - no longer in assets table 2025-04-04 15:08:04 +01:00
wrongecho
a20759f1f2 rm asset_mac - no longer in assets table 2025-04-04 15:07:47 +01:00
wrongecho
c273cab36e Portal - View all ticket bugfix
View all tickets should display the ticket_number rather than the database ID
2025-04-04 14:50:36 +01:00
johnnyq
8306a04eda Add Purchase Reference to Copy Asset 2025-04-03 15:07:56 -04:00
johnnyq
f078203136 Fix Database Export, was not properly exporting utf8, html data and such. Also disable foreign key contraint check in the export then renable it in the end. This fixes the issue with importing the database into phpmyadmin or using the mysql command 2025-04-03 15:01:47 -04:00
johnnyq
15e89c3c4e Fix Bulk Assign ticket to only show ITflow users and not client users 2025-04-01 17:23:44 -04:00
Johnny
595c4f1440 Merge pull request #1205 from itflow-org/develop
Develop to Master for 25.03.3 release
2025-04-01 11:45:41 -04:00
johnnyq
91a523dc23 Update Changelog 2025-04-01 11:40:24 -04:00
johnnyq
8567c97c09 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-04-01 11:33:16 -04:00
johnnyq
3621e99c61 Update Changelog and app version 2025-04-01 11:33:04 -04:00
Johnny
d99b9cbe68 Merge pull request #1204 from itflow-org/fix-assign2
Ticket assign
2025-04-01 10:56:56 -04:00
Johnny
e319768fd3 Merge pull request #1203 from itflow-org/fix-bulk-assign
Tickets - Fix bulk assign
2025-04-01 10:56:27 -04:00
Johnny
c30ffcf096 Merge pull request #1202 from itflow-org/user-activity
User activity
2025-04-01 10:55:17 -04:00
wrongecho
7286248fef Ticket assign
Remove the role check altogether, its the old way of doing the roles anyway
2025-04-01 09:12:24 +01:00
wrongecho
dc49f80cc3 Tickets - Fix bulk assign
Fix bulk assigning tickets to agents
2025-04-01 09:03:33 +01:00
wrongecho
1ae2da8054 User activity
Hide the See More button if the user can't actually access the logs due to not being an admin
2025-04-01 08:46:22 +01:00
johnnyq
090f4cb560 Fix adding location phone extension when addign a client 2025-03-31 19:33:07 -04:00
johnnyq
0914716b8e Allow user to redact client replied tickets 2025-03-31 18:42:56 -04:00
johnnyq
ab463c1773 Tidy Phone Country code add + placeholder 2025-03-31 17:30:33 -04:00
johnnyq
36af4d11fc Few more phone fixes 2025-03-31 16:52:47 -04:00
johnnyq
14d8dc6fa6 Fix php errors thrown when formatPhone is blank 2025-03-31 16:35:36 -04:00
johnnyq
2032b48ad3 DB Update Set Country codes to default to NULL and not 1 Nullify all current country codes 2025-03-31 12:06:36 -04:00
Johnny
2af795f548 Merge pull request #1201 from itflow-org/fix-users
Fix users
2025-03-31 11:22:47 -04:00
Johnny
7b4edb2948 Merge pull request #1200 from itflow-org/recurring-invoices
Recurring invoices
2025-03-31 11:22:30 -04:00
wrongecho
17a906fd03 Users bugfixes
- Fix syntax error when adding user, thanks @fleetlognorge
- Fix old reference to scheduled_tickets
2025-03-31 08:35:42 +01:00
wrongecho
af46a1fd96 Fix syntax error when adding user, thanks @fleetlognorge 2025-03-31 08:32:14 +01:00
wrongecho
393c0b8c11 Recurring invoices
- Fix the delete link
- Cron should only flag recurring invoices that with a next-run in the past if the recurring invoice is active
2025-03-31 08:28:22 +01:00
johnnyq
e92f2f714d Fix Ticket Assign to 2025-03-30 20:48:12 -04:00
johnnyq
42606067c0 If no country code is entered display the number only no spaces hyphens or perenthesis 2025-03-30 12:22:43 -04:00
johnnyq
98bb65509d Fix setting country code in company details 2025-03-30 11:45:27 -04:00
johnnyq
a2599e5d43 Fix network location edit 2025-03-30 02:14:06 -04:00
Johnny
0390b1bc2a Merge pull request #1198 from itflow-org/develop
Develop to Master
2025-03-29 18:23:37 -04:00
johnnyq
531f3ec741 Update app version and changelog 2025-03-29 18:18:52 -04:00
johnnyq
127afdca0d DB.sql revert 2 2025-03-29 18:16:25 -04:00
johnnyq
c4df5bf988 DB.sql revert 2025-03-29 18:12:32 -04:00
Johnny
30234e044d Merge pull request #1197 from itflow-org/develop
Merge Develop into Master
2025-03-29 17:47:08 -04:00
johnnyq
1e98ee8916 Update app version and Changelog hotfix 2025-03-29 17:43:00 -04:00
johnnyq
d5665c2577 Update db.sql to match the mediumtext of the updates 2025-03-29 17:35:53 -04:00
johnnyq
762ec51a19 Fix issue with missing phone numbers 2025-03-29 16:41:40 -04:00
johnnyq
309ad724ec Fix client export to only show licnesed software by the selected client only 2025-03-29 16:22:48 -04:00
Johnny
34397fe468 Merge pull request #1196 from itflow-org/develop
Merge Develop into Master
2025-03-29 15:51:47 -04:00
johnnyq
2f82647f5e One more chnagelog update 2025-03-29 15:35:40 -04:00
johnnyq
7d7854424c Refined and updated changelog 2025-03-28 13:15:33 -04:00
johnnyq
eaeadbe933 Fix users list 2025-03-28 12:01:39 -04:00
johnnyq
cf3f0cee6c Revert Users listing 2025-03-28 11:48:23 -04:00
ssteeltm
a5f7b7fa9c fix: missing kanban ticket settings 2025-03-28 12:00:48 -03:00
johnnyq
9f7c289e94 Fix AI Promps 2025-03-27 22:25:01 -04:00
johnnyq
c2bba7a919 Allow to close a project with resolved tickets 2025-03-27 14:21:56 -04:00
johnnyq
4bb37a7198 Removed absent task_description var from projects 2025-03-27 13:41:15 -04:00
johnnyq
231694aabe Fix Invoice Vars in ticket, return empty string instead of null for getFieldByID() 2025-03-27 13:38:22 -04:00
johnnyq
2fb75e6d67 Uncommented out temp comment check cli runtime 2025-03-27 12:40:43 -04:00
Johnny
810af638a3 Merge pull request #1193 from itflow-org/cron-recurring-notify
Recurring items with next-run dates in the past
2025-03-27 12:39:27 -04:00
johnnyq
9223b8cfb1 Fixed some renamed vars 2025-03-27 12:29:55 -04:00
wrongecho
b7df21a663 Notify if a recurring ticket, invoice or expense has a next run date in the past - it needs to be manually adjusted for cron to pick it up again. Also, bugfix bulk recurring ticket delete. 2025-03-27 16:29:39 +00:00
johnnyq
7d47ed4dbd Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-03-27 12:01:24 -04:00
johnnyq
65eaf92862 Fixed a few debug errors where client was not checked to see if it was set in some of the create modals, replaced old url_query_strings_sb var to the correct new var url_query_strings_sort. 2025-03-27 12:01:10 -04:00
wrongecho
8a01bc0d7d Recurring ticket - remove rogue 's' from 'Contact' tab 2025-03-27 15:54:10 +00:00
Johnny
1a8a3781dc Merge pull request #1192 from itflow-org/certs-exp-colours
Certificates page and sidebar - colours/badges
2025-03-27 11:39:49 -04:00
wrongecho
eadfdc41c4 Tickets api - allow setting the billable status when creating a ticket 2025-03-27 14:45:44 +00:00
wrongecho
421abd4c5b Tickets api - bugfix 500 error 2025-03-27 14:34:36 +00:00
wrongecho
ae1a0dcc73 Certificates page and sidebar - Only show yellow on certificates 7 days (blanket, not just for LE) 2025-03-27 12:27:08 +00:00
johnnyq
63b8804e2d Migrated client pdf export to TCPDF from pdfMake 2025-03-26 21:13:00 -04:00
johnnyq
634afcc089 Added TCPDF for PDFs and allow document export to PDF 2025-03-26 19:35:27 -04:00
johnnyq
90f5c8ad57 Simplify getFallBack function to just fallback on - instead N/A 2025-03-26 18:39:45 -04:00
johnnyq
12fd45c144 Dont include Archived Assets, contacts or software is the software license export report 2025-03-26 18:28:33 -04:00
johnnyq
382258a27c Add User and Asset Assigned Licenses to Client PDF Export 2025-03-26 18:17:45 -04:00
johnnyq
b5fa8ab4de Added Search by client Abbreviation to client and global search 2025-03-26 17:56:40 -04:00
johnnyq
bbb0db2f4f Update Changelog 2025-03-26 17:53:33 -04:00
johnnyq
5b89e3dbee Add Phone Country code in even more places 2025-03-26 14:04:47 -04:00
johnnyq
07b29a7bdc Add Phone Country code in more places for proper phone number formatting 2025-03-26 13:36:56 -04:00
johnnyq
3286343026 Update DB to remove phone_mask 2025-03-26 11:14:05 -04:00
johnnyq
6a26b611fa Remove Phone Masking option in favor of Country Codes 2025-03-26 11:10:51 -04:00
johnnyq
218fd2dcdc Update formatPhoneNumber php function to include other country formatting, updated phone inputs to incoude country code 2025-03-25 18:45:24 -04:00
johnnyq
4c85db5e49 Remove legacy redact function in favor of tinymce integration redact 2025-03-24 13:22:41 -04:00
johnnyq
85ae42190a Feature: Added User Signature preferences, currently appends signature to ticket replies / comments 2025-03-24 12:49:47 -04:00
johnnyq
df8a755462 Wrap a wait before the DOM is loaded before loading anything calling anything in app.js 2025-03-23 18:08:14 -04:00
johnnyq
53713a0318 Add back batch payment when in client view for invoices 2025-03-22 21:01:55 -04:00
johnnyq
61aa477cbf Fix Tags 2025-03-22 20:49:37 -04:00
johnnyq
c2adb92d28 Rework tag filter a bit to use array_map instead of looping through the get vars, update string wording to tag_filter and only show tags in the tag filter that are relatd to an entity and also include tags in the get var fixes 2025-03-22 18:32:56 -04:00
johnnyq
19b2b08eac Update locations filter to still include the a location that is not assigned to an entity if present in the url this fixes the issue where for example in client contact you select a location to filter only 1 contact is shown you goto edit the contacts location then submit it pushes you back with no results and all locations is present but in the uri the old location is still present 2025-03-22 15:49:35 -04:00
johnnyq
504346256f Only show locations if an entity references the locations. Previously, all locations were listed in the location filter, even if no entites were assigned to them. 2025-03-22 15:16:53 -04:00
johnnyq
34e92d2223 Update Tags filter to only show tags available 2025-03-22 14:55:13 -04:00
johnnyq
573953704c Limit Client Selection to clients that have an emtity in client filters 2025-03-22 14:11:27 -04:00
johnnyq
0b9f10985d Add Client Select Filters the remaining entities also when creating an entity auto select the client based off the the client selected in the client dropdown filter 2025-03-22 13:50:03 -04:00
johnnyq
8e3dd42a32 Allow start interface to be named 0 2025-03-21 21:54:55 -04:00
johnnyq
0647933df7 Added JS Library to handle Country based Phone formatting inputs intl-tel-input 2025-03-21 12:59:56 -04:00
johnnyq
93f4da3962 Added Phone Country Code fields defaulting to +1 for US will add logic in code later for phone number formatting 2025-03-21 12:48:00 -04:00
johnnyq
f72351ea88 UI tidy 2025-03-21 11:58:16 -04:00
johnnyq
d3c4c8c846 Comment Query 2025-03-20 18:18:33 -04:00
johnnyq
cf047024a1 Add Projects to client side nav and seperated the logic between client and global view of projects 2025-03-20 18:17:26 -04:00
johnnyq
ad3ed68932 Add the ability to Create a ticket inside a project then auto assign it to the project 2025-03-20 17:05:47 -04:00
Johnny
62b8ee9d30 Merge pull request #1190 from itflow-org/cron-certificate-notifs
Cron certificate notifs
2025-03-20 13:51:35 -04:00
johnnyq
eedd92c894 Fix creating a ticket and selecting a template it would use template name instead of the subject for the ticket 2025-03-20 13:47:11 -04:00
johnnyq
622d5e5a44 Delete unused add asset ajax modal 2025-03-20 13:00:51 -04:00
johnnyq
475d653979 You can now upload and create documents, credentials in contact and asset details sections 2025-03-20 12:58:00 -04:00
johnnyq
19a6f8f422 Use nearest text area instead of a static ID for AI rewording, started adding entity creations in contact details and auto selecting the contact when in contact details page 2025-03-20 11:39:50 -04:00
wrongecho
e69d69760d Cron - Only notify on certificates expiring in 45 days if they are valid for longer than 90 (i.e. not LE) 2025-03-20 13:53:53 +00:00
johnnyq
06de349fac Expanded the Redact tool into ticket details area, generalized it to allow redaction in other areas as well 2025-03-19 15:35:02 -04:00
johnnyq
c3ec83f640 Updated changelog also added redact to open tickets 2025-03-19 13:20:55 -04:00
wrongecho
37c20e4e0d Hyperlink the report_time_by_tech report. Need to add a monthly version. 2025-03-19 14:07:07 +00:00
wrongecho
400ba5bb20 Started changelog 2025-03-19 14:02:30 +00:00
wrongecho
a1ea5214a9 Sonarcloud fixes 2025-03-19 13:54:15 +00:00
wrongecho
aae633c4ac Merge pull request #1189 from itflow-org/ticket-redaction
Add ticket redaction feature
2025-03-19 13:53:15 +00:00
johnnyq
ec8d7a36a8 Only store optimized WebP images, so only 1 image is stored and used for thumnails and viewing, removed fields has_preview and has_thumbnail as these are no longer needed, fixed issue when optimizing portrait images the bottom half would get cropped out 2025-03-18 16:48:05 -04:00
wrongecho
21dc26b06f Merge branch 'develop' into ticket-redaction 2025-03-18 09:42:29 +00:00
wrongecho
6a8d2cf1d4 Add ticket redaction feature 2025-03-18 09:40:39 +00:00
johnnyq
b803ba4c55 Use MD5 hashing instead of SHA256 on file uploads which is way faster and still provides a unique file reference 2025-03-17 15:10:39 -04:00
johnnyq
4378fc2719 Removed redundant hash field from files table as the reference already stores this value 2025-03-17 14:59:37 -04:00
johnnyq
244e1290b4 Convert service_domains to use InnoDB instead of MyISAM 2025-03-15 18:35:21 -04:00
johnnyq
5a64bd3a32 Ensure all Tables and fields use CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci 2025-03-15 18:28:48 -04:00
johnnyq
cc0b2126ba Removed most Associated deletions when deleting a client as most of this is performed through SQL now using cascade deleting 2025-03-14 19:45:59 -04:00
johnnyq
97f92e508e Remove Associated Deletions as these are handled by the database cascade deletions 2025-03-14 18:37:56 -04:00
johnnyq
09fbe4e4ad Update more multi to multi link tables to use cascading delete and foreign key relation 2025-03-14 18:18:44 -04:00
johnnyq
508af6a80f Fix some Database update logic 2025-03-14 17:15:10 -04:00
johnnyq
073f816dbd Do not allow cascade deletion for rack devices as this table is optional to reference an asset and will cause issues when adding a devoce without a selected asset 2025-03-14 15:33:00 -04:00
johnnyq
bf327afd19 Bump DataTables from 2.2.1 to 2.2.2 2025-03-14 13:35:48 -04:00
johnnyq
8fb8ce319e Added copy to clipboard for contact and asset ajax modal credentials fixed issue with clipboard because jquery ui was declared last mved it up 2025-03-14 13:28:00 -04:00
johnnyq
eabfef22be Turned caching back on for Ajax Modals Function Fix some PHP Error, update credential vars in assets and contacts 2025-03-14 12:31:18 -04:00
johnnyq
06c31e0808 Update Asset reference SQL Tables to use Foreign keys and cascading delete, and remove orphaned data from the foreign tables to prevent integrity errors during update 2025-03-13 21:35:39 -04:00
johnnyq
509fb5cfed Bump TinyMCE from 7.6.1 to 7.7.1 2025-03-13 19:41:21 -04:00
johnnyq
f1aa66119a Update pointers to the includes folder 2025-03-13 18:12:18 -04:00
johnnyq
7150b1545a Moved files check_login.php, get_settings.php, settings_localization_array.php, inc_set_timezone.php into the includes folder, we also moved /client/check_login.php into client/includes/ 2025-03-13 17:55:31 -04:00
johnnyq
59bbbe4a8d Removed Patch panel tables as they share similarities with assets and assets interfaces, rename events to calendar events and event attendees to calendar even attendees 2025-03-13 16:34:38 -04:00
johnnyq
f64641cfdd Fix regression OTP in guest view item 2025-03-12 23:03:28 -04:00
johnnyq
f1783a6110 update credential model 2025-03-12 22:35:13 -04:00
johnnyq
c8c1155c9c Update the API for the new cred var names 2025-03-12 22:33:06 -04:00
johnnyq
338a08da6c Fix credential vars in Services post 2025-03-12 22:10:48 -04:00
johnnyq
15aed891f4 Fix credential vars in Services 2025-03-12 22:04:55 -04:00
johnnyq
c1c54780cb Update client export pdf for new table field names 2025-03-12 21:39:47 -04:00
johnnyq
e93704bbdb Completely renamed everything login to credential including tables added cascading deletion to the multi to multi tables 2025-03-12 21:28:50 -04:00
johnnyq
c0db914213 Added Recurring Ticket Reference to Tickets 2025-03-12 13:56:36 -04:00
johnnyq
b78e31e518 Fix Recurring Income by Client Report with the updated recurring invoice vars 2025-03-12 11:36:51 -04:00
johnnyq
2533f0ced1 Fix Create Auto Payment after renaming recurring to recurring invoices 2025-03-11 22:54:44 -04:00
johnnyq
c7f4e48a27 A Few more places to update recurring invoice vars 2025-03-11 22:38:13 -04:00
johnnyq
87c1a95b06 Few more places for recurring invoice vars 2025-03-11 22:26:52 -04:00
johnnyq
4efb39358a Missed recurring_invoice details and fixes up a few other places for recurring invoice vars 2025-03-11 22:24:19 -04:00
johnnyq
619b93a545 Renamed Recurring to recurring_invoices updated a large portion of code, and updated many other fields to reflect recurring_invoice and not just recurring 2025-03-11 22:08:37 -04:00
johnnyq
a0598997d7 Update Recurring Tickets in a few more places 2025-03-11 19:55:08 -04:00
johnnyq
d0b8095bba Feature: Added additional assets to Recurring Tickets as well 2025-03-11 19:36:39 -04:00
johnnyq
daab1bca3d Rename the remain items from Scheduled Tickets to Recurring Tickets 2025-03-11 18:32:24 -04:00
johnnyq
a0a2fddd90 Feature: Additonal Assets can now be assigned to a single Ticket 2025-03-11 17:41:40 -04:00
johnnyq
f61c30bd5a Started work on additional assets per ticket, added table ticket_assets, Fixed Legacy Check User Role Functions 2025-03-11 15:10:23 -04:00
johnnyq
4921d1eb19 More Work on Client Users section, added User Icon Indicator in contact if a user account exists 2025-03-11 13:59:01 -04:00
johnnyq
28c8b1a6da Fix missing attachments on ticket replies via the ticket email parser 2025-03-10 19:17:40 -04:00
johnnyq
3f0a6df717 Organize color theme settings into similar color rows 2025-03-10 18:46:08 -04:00
johnnyq
07c8398e0d Update user_roles naming in setup and setup_cli 2025-03-10 18:06:47 -04:00
johnnyq
82c7a64a25 Added Bulk Delete Asset Functionality and also deleted more asset reference tables as we are not using cascade delete yet 2025-03-10 17:35:16 -04:00
johnnyq
164a6a5604 Started Standard user view and client user view in users 2025-03-10 16:51:10 -04:00
johnnyq
9b6ea851e7 Removed the prepended user_ from the fields in the user_roles table, moved user_role_id from user_settings directly to users table, rename table user_permissions to user_client_permissions, removed unused Sessions vars in login. This upedate will require to update using update_cli.php --db_update 2025-03-10 15:57:16 -04:00
johnnyq
3804e18e53 When cron or manually generating invoice from a Recurring Invoice insert referencing recurring Invoice ID into the invoice 2025-03-10 12:34:31 -04:00
johnnyq
244a47efad Added Recurring Invoice Reference ID to Invoices and Product ID reference to Invoice Items 2025-03-10 12:26:14 -04:00
Johnny
89e59b2448 Merge pull request #1184 from itflow-org/tck-time-by-tech
Add work/time by technician report
2025-03-09 12:31:34 -04:00
Johnny
bf9c2f6de7 Merge pull request #1182 from itflow-org/tck-fr-at
Add database field for ticket_first_response_at.
2025-03-09 12:31:07 -04:00
Johnny
ff80a3db3f Merge pull request #1186 from itflow-org/develop
v25.02.4 - Stable Minor Release
2025-03-08 18:11:38 -05:00
johnnyq
c7d00d7b0d Fixed Changelog 2025-03-08 17:53:20 -05:00
johnnyq
1c6e74b08e Update Changelog put back the missing parts for 25.02.3 2025-03-08 17:40:36 -05:00
johnnyq
f8d054f8aa Bump minor version and update the Changelog 2025-03-08 17:25:10 -05:00
wrongecho
e5dc50ec35 Add time by technician report 2025-03-07 22:57:18 +00:00
johnnyq
e0dfaf2d22 Fixed a few var errors in ajax contact details 2025-03-07 16:58:52 -05:00
johnnyq
757a62c35b Fix Ticket Count under contact listing 2025-03-07 16:44:38 -05:00
johnnyq
52a62fc23c Fix Client URL in recurring Invoices 2025-03-07 14:47:47 -05:00
wrongecho
44b70d7161 Add database field for ticket_first_response_at. This can be used as part of metric reporting and also as part of SLAs in the future 2025-03-07 13:28:35 +00:00
johnnyq
ad9e4b4fb4 Added new php function to retrieve and escape a single record from a specified table using an id getFieldById(table, id, field_to_retrieve, escape_method) escape method defaults to SQL but html and json and int can be specified 2025-03-04 13:45:21 -05:00
johnnyq
4fdd5ae769 Fix Bug adding software license if no vendor is selected 2025-03-04 00:13:21 -05:00
Johnny
9f2b9e3b3e Merge pull request #1181 from itflow-org/develop
v25.02.3 - Stable Minor Release
2025-03-03 15:57:26 -05:00
johnnyq
2c074e9dc4 Spelling 2025-03-03 15:55:01 -05:00
johnnyq
0fad31d683 Update changelog new minor release 2025-03-03 15:53:58 -05:00
johnnyq
b154930a4c Fix Notifications 2025-03-03 15:36:32 -05:00
Johnny
359b04e7d1 Merge pull request #1180 from itflow-org/develop
v25.02.2 Maint / Small Feature Release
2025-03-03 15:22:57 -05:00
johnnyq
cc00e3bf75 Add Periods to the changelog 2025-03-03 15:19:18 -05:00
johnnyq
0454685039 Update Changelog 2025-03-03 15:09:40 -05:00
johnnyq
b5eb325c5e Fix Dismissed Notification Search Filter 2025-03-03 15:00:33 -05:00
johnnyq
ed6276a3e4 Add Active Inactive filter to recurring invoices 2025-03-03 14:56:04 -05:00
johnnyq
5da1310e34 Combine Notifications dismissed and notifications into 1 and add link to Notifications Ajax modal 2025-03-03 14:36:38 -05:00
wrongecho
a69b09c9e6 Bugfix: When exporting to CSV, the first asset isn't shown 2025-03-03 09:42:45 +00:00
wrongecho
8da3bb15e9 Add physical location field to asset csv import/export 2025-03-03 09:29:28 +00:00
wrongecho
8488445bf4 Start March changelog 2025-03-03 09:06:07 +00:00
wrongecho
546d21adac Fix client notes on edit modal 2025-03-03 09:03:49 +00:00
johnnyq
580f50b187 Added Link button to WYSIWYG Document Creation and editing 2025-03-03 00:22:51 -05:00
johnnyq
4744276f2a Don't count Non-Billable Invoices in overdue count 2025-03-03 00:07:22 -05:00
johnnyq
6106b8aebb Fix broken client link for the report clients with a balance 2025-03-02 21:03:02 -05:00
Johnny
dd2b203321 Merge pull request #1178 from itflow-org/43-ssl-history
Add SSL certificate history tracking
2025-03-02 11:22:34 -05:00
Marcus Hill
7994c9c7a8 Add SSL certificate history tracking 2025-03-02 10:15:26 +00:00
Marcus Hill
ae59aa3326 Add SSL certificate history tracking 2025-03-02 10:12:47 +00:00
Marcus Hill
0ab9a1c97d Temp fix warnings on num_domains expiring / num_domains_expired vars not defined yet 2025-03-02 09:50:50 +00:00
Marcus Hill
2908568e2a Fix certificates not showing notes 2025-03-02 09:40:21 +00:00
Marcus Hill
2b673a1b6c Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-03-02 09:26:28 +00:00
Marcus Hill
bece8abfe2 Prune db updates older than a year 2025-03-02 09:26:16 +00:00
johnnyq
ac2b355399 updated Changelog and bumped app version to 25.02.2 2025-03-01 21:21:03 -05:00
Johnny
7e658ee1f2 Merge pull request #1177 from itflow-org/develop
Release v25.02.1
2025-03-01 12:29:14 -05:00
Johnny
bbee81c3bb Merge pull request #1176 from Whit3XLightning/Whit3XLightning-patch-2
Update folder_create_modal.php
2025-03-01 12:11:59 -05:00
johnnyq
45b61ba335 Updated Changelog 2025-03-01 12:09:43 -05:00
johnnyq
32e6345cbc Add Paid to the top of a pdf invoice if paid 2025-03-01 12:03:48 -05:00
Tallyn Morse
afff46972a Update folder_create_modal.php
$folder['folder_name']; did not exist in the scope of where folder_create_modal.php was being required in the client_files.php and client_documents.php leading to null array pointer exception. While dirty the new way will reliably retrieve the name of the current folder the user is browsing to correctly name the modal.
2025-02-28 23:26:39 -06:00
johnnyq
d197995226 Updated Changelog, and Updated version to 25.02.1 2025-02-28 15:24:47 -05:00
johnnyq
09fa23519d Use Generated Thumbnail images if available in Gallery view for files, add options to download Original, Preview (Optimized) or Thumbnail 2025-02-28 14:43:03 -05:00
johnnyq
9da736daee Enhance the file picture upload optimization to read EXIF data when available and correctly adjust the image orientation for the optimized version. 2025-02-28 13:55:32 -05:00
johnnyq
410d1e0f86 Add Fade Animation to ajax modals 2025-02-28 13:34:26 -05:00
johnnyq
12ad7962c0 Wrap text in notifications 2025-02-28 13:31:53 -05:00
Johnny
397ebc5112 Merge pull request #1175 from ssteeltm/fix-kanban-dragging-touch
fix: kanban cards dragging when on touch devices
2025-02-27 23:25:58 -05:00
ssteeltm
d48823925a fix: kanban cards dragging when on touch devices 2025-02-27 18:36:34 -03:00
johnnyq
6f49f16f6b Fix Links cannot contain directories that exist https://forum.itflow.org/d/1568-bulk-send-email-links-cannot-contain-directories-that-exist 2025-02-27 15:21:04 -05:00
johnnyq
c2664a2888 Add .zed to the .gitignore 2025-02-27 11:46:29 -05:00
johnnyq
4529a56d7b Fix Sort Newest to oldest in notifications 2025-02-27 11:22:02 -05:00
johnnyq
fded8177c5 Added contact and Asset Indicators with quick links to credentials page 2025-02-26 16:00:22 -05:00
johnnyq
e670a9847a Added Indicator Counts for assets, credentials, licenses, tickets and documnent in Contacts Listing 2025-02-26 15:35:14 -05:00
johnnyq
8aada99f06 Added Edit to asset and contact details ajax modal for quick edits, added more links to the vendor details ajax modal 2025-02-26 13:46:04 -05:00
johnnyq
04e624cc14 Added Purchase Reference to Software Licneses 2025-02-26 12:59:03 -05:00
johnnyq
55ebe70808 Add Vendor Details Popup, works with Domain Vendors right now, Added fallBack function when no text is present use a placeholder 2025-02-25 18:16:03 -05:00
johnnyq
f23afdd85c Added Quick Category/Tag Add throughout utilizes the new ajax modal 2025-02-25 17:05:34 -05:00
johnnyq
bac76871c1 Added vendor UI select elements for software 2025-02-24 21:36:30 -05:00
johnnyq
56cbcf2921 Removed Single Link Vendor Login and single link software login. These are unused will be moved to multi to multi relationship, also added vendor_id to software to reference a vendor 2025-02-24 21:24:57 -05:00
johnnyq
f2dc25aedb Added Link to and unlink Items in Asset Details 2025-02-24 19:08:00 -05:00
johnnyq
2367ca2255 Remove expire record limits and only include items expiring within 45 days instead of 90 in client overview 2025-02-24 17:24:43 -05:00
johnnyq
f28c1ce398 In-App alerts are spawned 1,7 and 45 days instead of 1,7,14,30 and 90 2025-02-24 17:03:29 -05:00
johnnyq
6cc6e80f92 Fixed ticket link for agent email notifications on scheduling tickets 2025-02-24 16:19:22 -05:00
johnnyq
9aeda2ce53 Set Array instead of selecting Days to Expire in client overview 2025-02-24 13:18:32 -05:00
johnnyq
a08393b4d4 Fix Redirect Link when scheduling tickets that conflict with other scheduled tickets 2025-02-24 12:52:35 -05:00
johnnyq
02c1446cb8 Fix Transfer Asset(s) to Client 2025-02-24 12:42:31 -05:00
johnnyq
8e66434ec4 Updated asset details Link in rack, fixed opening asset details modal when clicking on a connected asset in asset details page 2025-02-23 15:48:47 -05:00
johnnyq
66d43d8a95 Dashboard When clicking domains or certificates sort by expire date asc 2025-02-23 12:30:47 -05:00
johnnyq
6c7052ea0d Fix missing public key var in certificate edit 2025-02-23 12:23:13 -05:00
johnnyq
a994bb7e8c Update Links on Project and and client listing 2025-02-22 17:37:35 -05:00
johnnyq
9b109c7abd Update links in project list 2025-02-22 17:29:19 -05:00
johnnyq
95855fc22e Update links in client overview 2025-02-22 17:27:16 -05:00
johnnyq
3218ea85b2 Bug Fix Contact Detail Modal not showing Credentials or Tickets 2025-02-22 17:15:41 -05:00
Johnny
a1831c7406 Merge pull request #1174 from itflow-org/develop
25.02 Release
2025-02-22 16:40:45 -05:00
johnnyq
c022e5fe32 Last fix document edit loading tonymce 2025-02-22 15:45:21 -05:00
johnnyq
2cddda5062 Updated Changelog 2025-02-22 15:36:57 -05:00
johnnyq
daeb71abb3 Update the App Version to 25.02 for prep on release 2025-02-22 15:20:10 -05:00
johnnyq
915161d812 Fixed Revenue Edit category and account fields also removed currency selection there as its automatically determined by the company default 2025-02-22 15:04:11 -05:00
johnnyq
0e3959ce00 Updated Client Access Permissions to use the defined in check_login.php 2025-02-22 14:25:24 -05:00
johnnyq
8d05633d7d Auto set client abbreviation if not set in add or edit client 2025-02-22 14:02:31 -05:00
Johnny
2d39f21b51 Merge pull request #1173 from itflow-org/small-fix
Small perms fixes
2025-02-22 13:38:05 -05:00
johnnyq
69850f83d3 Add s 2025-02-22 13:31:27 -05:00
johnnyq
7e041d52df Move Client Overview to the bottom of the side nav 2025-02-22 13:22:53 -05:00
johnnyq
58a8f08bd2 Fix broken product edit due to wrong field being called 2025-02-22 13:15:15 -05:00
Marcus Hill
8eea19d03d Small permissions fix for client-specific access 2025-02-22 17:59:24 +00:00
johnnyq
5d18e85d62 Don't auto generate Client Abbreviation on the fly on the side bar. This is auto generated when you create or edit a client and leave abbreviation blank 2025-02-22 12:53:56 -05:00
johnnyq
8a13207327 Fixed dragula css and js to not prepend / 2025-02-22 12:47:26 -05:00
johnnyq
2a974c28b0 Remove old item ordering logic for invoice, recurring invoice and quote 2025-02-21 22:14:40 -05:00
johnnyq
9b5eb86cac Changelog Update, Allow to view unlimited notifications 2025-02-21 21:50:44 -05:00
johnnyq
86212ee088 Update Changelog 2025-02-21 21:20:14 -05:00
johnnyq
e0a1e45928 Updated Asset Details AJAX modal to include its own details as well 2025-02-21 20:48:17 -05:00
johnnyq
5c3e0f0c31 Added Contact Info to the new contact details akax modal 2025-02-21 20:37:02 -05:00
johnnyq
25db6c6e03 Replaced more contact Links with the new ajax contact details modal, updated the modal UI as well to use bigger icons and have the icon on its own line 2025-02-21 20:14:36 -05:00
johnnyq
87779e5c10 Show Quick Asset details when clicking on a connected asset also when you click on asset in document details 2025-02-21 18:22:14 -05:00
Johnny
94ff910564 Merge pull request #1171 from ssteeltm/drag-and-drop-items
Drag and drop items
2025-02-21 14:56:34 -05:00
johnnyq
1b59eef9e2 Added Quick Details Modal for Assets 2025-02-21 14:55:22 -05:00
ssteeltm
b10d757b77 drag drop for recurring invoices 2025-02-21 15:05:45 -03:00
ssteeltm
4dd55df7a8 Drag and Drop for Invoice Items 2025-02-21 14:44:24 -03:00
ssteeltm
554c4d99bb Drag and Drop Quote Items 2025-02-21 14:22:01 -03:00
ssteeltm
17920e3cda update admin_ticket_template_details.php 2025-02-21 13:51:57 -03:00
root
073713a6a2 Drag and Drop Ticket Template Tasks 2025-02-21 13:30:26 -03:00
Hugo Sampaio
43c8e0785a Merge branch 'itflow-org:master' into drag-and-drop-items 2025-02-21 12:55:35 -03:00
johnnyq
22cd28de98 Added Connected Device Icon as well 2025-02-21 01:20:27 -05:00
johnnyq
c1548ce83d Connected Asset Links are now clickable 2025-02-21 00:55:09 -05:00
johnnyq
64f3df6baf Add Some Client Permission Checks to the new Global View and some tidying 2025-02-21 00:28:36 -05:00
johnnyq
ab3ffdf7fc Update more links rearrange Client Overview Side menu to match client side nav, define 0 for the post vars now defined in form. update unbilled tickets report 2025-02-20 21:07:53 -05:00
johnnyq
162ce8261a Hide client related form elements when Creating Entities in the client over view global section 2025-02-20 18:55:27 -05:00
johnnyq
fe68a1f641 Services is now in global view 2025-02-20 17:20:15 -05:00
johnnyq
713bd0dab7 Added Network to Global View and updated links 2025-02-20 16:43:59 -05:00
johnnyq
fc00b5e78f Added Location to Global View, updated links and fixed password pop over moving you to the top of the page when clicked in asset and conact details 2025-02-20 16:25:07 -05:00
johnnyq
2795b4e15e Added Global Views for Licenses, Credentials and Certificates 2025-02-20 14:58:25 -05:00
johnnyq
7628fc2643 Fixed Shared links not showing in the client overview until a user opens it 2025-02-20 11:39:01 -05:00
johnnyq
15d7875369 Fix Client Selection 2025-02-20 00:48:44 -05:00
johnnyq
a5d69d47ee Show select Client when adding items in Client Overview / Global View 2025-02-20 00:44:22 -05:00
johnnyq
d76d405d5a Make contacts global view compatible, remove bulk mail from admin as this is in contacts bulk actions, updated links, tidy 2025-02-20 00:38:40 -05:00
johnnyq
70495ef298 Created whole new section Client Overview to get a global view of all your clients things, merged domains and assets into one 2025-02-19 22:16:24 -05:00
johnnyq
7f5893a627 Moved Edit Recurring Ticket over to the new AJAX modal function 2025-02-19 19:10:21 -05:00
johnnyq
4c02a4e8c2 Moved Edit Network over to the new AJAX modal function 2025-02-19 18:05:16 -05:00
johnnyq
afdb4c06da Converted edit Calendar to the new ajax modal function 2025-02-19 17:10:41 -05:00
johnnyq
2fe8adcfca Simplified Client URL Handling in global client header logic 2025-02-19 15:58:43 -05:00
johnnyq
a2c77cf0c2 Merged Client and Global Calendar into one code base seperated them with some header logic 2025-02-19 15:05:37 -05:00
johnnyq
eab441da06 No need to enforce client permission check as its already handled in inc_all_client.php 2025-02-19 14:23:32 -05:00
johnnyq
19daa289b2 Merged Files Vendors with Client Vendors seperated them with some header logic 2025-02-19 14:18:16 -05:00
johnnyq
d228c30b03 Merged Global Tickets with Client Tickets seperated them with some header logic 2025-02-19 13:45:44 -05:00
johnnyq
a5ff978a77 Merged Global Recurring Invoices with Client Recurring Invoices seperated them with some header logic 2025-02-19 12:10:03 -05:00
johnnyq
78cfda1dbc Merged Global Recurring Tickets with Client Recurring Tickets seperated them with some header logic 2025-02-19 11:56:49 -05:00
johnnyq
78ae44c334 Migrated domain and certificate edit to the new AJAX modal function 2025-02-19 01:22:31 -05:00
johnnyq
e6e30dcd7c Migrated domain edit to the new AJAX Modal functon 2025-02-19 00:44:51 -05:00
johnnyq
17489e60c8 Merged Client Payments and Payments into one file using logic at the header to seperate between client and global section 2025-02-18 21:45:12 -05:00
johnnyq
f723450d51 Merged Client Invoices and Invoices into one file using logic at the header to seperate between client and global section 2025-02-18 21:20:40 -05:00
johnnyq
f8e4163c2f Merged Client Trip and Global Trips along with exports into 1 managable file 2025-02-18 20:58:47 -05:00
johnnyq
1dee1b4abb Add missing LIMIT 1 to ajax edit items 2025-02-18 20:29:36 -05:00
johnnyq
6f8cc40167 Changed header names from logins to credentials in asset and contact details, migrated more items to the new AJAX modal function 2025-02-18 20:25:02 -05:00
johnnyq
88ee9b60e7 Migrated Tax, custom link edit over to the new AJAX model function 2025-02-18 18:47:28 -05:00
johnnyq
a9e3e4744d Added back option for 500 records per page as we have successfully moved most of the repeating row modals to ajax which will allow super improved performance 2025-02-18 18:10:26 -05:00
johnnyq
b9f6871bae Migrated Edit Line Item to new AJAX modal function, adjusted the logic to determine line item type (invoice, quote, recurring) in the post instead of the form 2025-02-18 18:06:31 -05:00
johnnyq
f920b8fac9 Fixed missing vendor name and category name for receipt filename in edit expense 2025-02-18 17:29:58 -05:00
johnnyq
d8955f1f2d Added Asset Purchase reference to assets to reference an invoice or PO number 2025-02-18 17:22:22 -05:00
johnnyq
43b50c44b1 Combined client_quotes.php and quotes.php into one file quotes.php checks if get client_id var is set and which chooses to display client top header and client side nav or global nav 2025-02-18 17:04:49 -05:00
johnnyq
f6e33d5892 Added Document Quick View to asset and contact details 2025-02-18 11:57:28 -05:00
johnnyq
206dfc2426 Show related documents in asset details 2025-02-18 11:47:51 -05:00
johnnyq
2467274f7b Ported users, roles, categories, tags edit to new AJAX modal function 2025-02-17 19:29:31 -05:00
johnnyq
e02d45db3e More Migration to AJAX Modal 2025-02-17 16:44:29 -05:00
johnnyq
650b8754e8 Migrated Edit Recurring Invoice, Revenue over to the new AJAX modal 2025-02-17 11:57:10 -05:00
wrongecho
64a6b7dc39 Client files - allow uploading .key files 2025-02-17 12:01:36 +00:00
wrongecho
7aa773b336 Update changelog 2025-02-17 11:56:17 +00:00
wrongecho
a8b63ed429 Quote - remove reference to old modal 2025-02-17 11:42:51 +00:00
wrongecho
08f2a307d3 Merge pull request #1166 from itflow-org/quote-upload
Ability to upload files to an approved quote
2025-02-17 11:31:46 +00:00
wrongecho
72a84af1a7 Merge branch 'develop' into quote-upload 2025-02-17 11:27:05 +00:00
wrongecho
a8f682286a Add DB logic for quote file upload 2025-02-17 11:14:55 +00:00
johnnyq
b0a79c1b6f remove legacy quote copy modal, dont show client selection in quote copy when copying quote from within client section 2025-02-16 23:55:59 -05:00
johnnyq
ccec330ceb Migrated project, transfer and quote edit to the new AJAX modal function 2025-02-16 23:14:32 -05:00
johnnyq
093fd69415 Migrated Ticket Priority, Assign Agent, Assign Contact, Ticket Billable, Task edit, task_template edit to the the new AJAX Modal 2025-02-16 18:27:43 -05:00
johnnyq
3cf33afac4 Let AJAX handle the model header 2025-02-16 13:20:15 -05:00
johnnyq
5f7b297cf1 UI tidy work on header for Viewing Message in Queue 2025-02-15 22:21:15 -05:00
johnnyq
b6ffa0595d migrated credentials and expenses edit modals to the new AJAX function 2025-02-15 21:47:43 -05:00
johnnyq
4a3154baca Remove the old asset edit modal in favor of the new AJAX function 2025-02-15 20:36:37 -05:00
johnnyq
ca0b1a1fb7 Edit and Copy Assets is now using the new AJAX function 2025-02-15 20:35:35 -05:00
johnnyq
5f02bc07aa Delete the old asset Interface edit modal as we are using the new AJAX 2025-02-15 18:12:00 -05:00
johnnyq
7c070e3929 Migrated edit asset interface to use the new AJAX function 2025-02-15 18:11:01 -05:00
johnnyq
ed0b192f5b Added data-modal-size to the new ajax generic modal functin to define modal size if left blank it will use standard md, also moved Email Message View to use the new ajax modal 2025-02-15 17:02:35 -05:00
johnnyq
36e1df93bb Moved edit client, notification, and create contact note to the new ajax system, also updated the notificaiton count to be more efficient 2025-02-15 16:19:35 -05:00
johnnyq
615604661c Seems like I have to readd some Javascript functions into the ajax footer to get certain function to work on the generic ajax modal 2025-02-15 15:01:24 -05:00
johnnyq
9458c1cc7a Added data-toggle='ajax-modal' to trigger the ajax modal instead, also added an ajax header and and footer to dedup code 2025-02-15 14:50:48 -05:00
johnnyq
298a584377 Remove Test Code that end up not using 2025-02-15 00:53:03 -05:00
johnnyq
74a1603943 Started work on AJAX with a different approach, this is WIP but edit contact currently uses it. with this approach your dont have to touch the js or modal template just the ajax 2025-02-15 00:50:52 -05:00
johnnyq
117861034a Enhanced the add/edit interface Modal UI into tabs 2025-02-14 13:42:15 -05:00
johnnyq
7452e8f08e Update some Asset Details Headings 2025-02-13 16:45:20 -05:00
johnnyq
5ed5473b36 Add Nat IP Field to Interfaces 2025-02-13 16:34:27 -05:00
johnnyq
2e9e49a203 Added the Ability Set which interface is primary under add / edit interface section 2025-02-13 16:26:21 -05:00
johnnyq
c81b430318 Feature: Ability to import and export Asset Interfaces via CSV 2025-02-13 15:58:19 -05:00
johnnyq
33beae68e5 Tickets can not be categorized in bulk 2025-02-12 19:48:16 -05:00
johnnyq
1b8cd5630a Fix recurring Tickets priority var 2025-02-12 18:54:48 -05:00
johnnyq
b8d17be015 Fix Ticket Priority Sorting, now sorts by prioty when clicked 2025-02-12 18:45:05 -05:00
johnnyq
fe762ef926 Asset Interfaces: Renamed Port to Description, added Interface Type 2025-02-12 17:13:39 -05:00
johnnyq
8d8b0f4a48 Feature: Ability to create multiple interfaces/ports in one swoop with interface name and port prefix along with network assignment and notes 2025-02-12 15:27:31 -05:00
johnnyq
a2e16f918c Removed Task Order Input from Task edit modal as this is done by dragging and dropping now 2025-02-11 17:29:53 -05:00
johnnyq
228a457518 Remove dup css styles 2025-02-11 17:25:36 -05:00
johnnyq
f0cc9412bb Added custom css class grab-cursor so it turns the cursor into a grab hand instead of a finger, applied this to ticket tasks 2025-02-11 17:24:47 -05:00
johnnyq
7509301f5c Fix Edit Login under Contact and Asset Details, had to redo the SQL query as login_id was being used in tag as well and sometimes would get a login_id 0 2025-02-11 16:41:59 -05:00
johnnyq
d97da07cb1 Restricted users by client now shows the correct client count, also moved the side nav count to a new include file called get side nav counts 2025-02-11 13:33:32 -05:00
johnnyq
2ec38606e0 Fixed URI links for credentials in asset details and contacts details 2025-02-11 13:17:56 -05:00
johnnyq
2c85922788 Clone all Interfaces of asset when transfering to a new client jut the name, port, primary, mac 2025-02-10 17:15:46 -05:00
johnnyq
fc24bcb24f Moved Transfer Asset to Client to a Bulk Action and create Primary Interface when moving with MAC address 2025-02-10 16:58:39 -05:00
Johnny
08ebedef03 Merge pull request #1165 from ssteeltm/tasks_moves
ticket tasks moving order
2025-02-10 14:07:40 -05:00
Hugo Sampaio
eac46d0da0 fix conflitct 2025-02-10 10:31:03 -03:00
johnnyq
a69b60703b Dedup Notications code and move to a modal instead of a drop menu 2025-02-08 19:54:49 -05:00
johnnyq
4ed0767f1c Show record details in listing filter footer Showing X of X of X Records 2025-02-08 18:47:23 -05:00
johnnyq
72ae7843f6 Show record details in listing filter footer Showing X of X of X Records 2025-02-08 18:45:19 -05:00
Johnny
d92b803526 Merge pull request #1158 from ssteeltm/kanban_tickets
tickets views
2025-02-08 18:22:35 -05:00
Johnny
506783f022 Merge pull request #1167 from itflow-org/portal-custom-links
Allow adding custom links to the client portal nav-bar
2025-02-06 10:33:17 -05:00
wrongecho
2fe7bf6870 Taking a different approach. Utilize the existing file upload functionality and just link the file to the quote. 2025-02-05 22:48:15 +00:00
wrongecho
c36fb6ae12 rv 2025-02-05 15:44:33 +00:00
wrongecho
55c761b11e rv 2025-02-05 15:44:09 +00:00
wrongecho
a769993fa8 swap donate link for sponsor services link 2025-02-05 15:15:28 +00:00
wrongecho
6df3a35766 Move reports perms to new role system 2025-02-05 14:51:53 +00:00
wrongecho
abd985d0f4 Create report landing page from nav menu 2025-02-05 14:50:21 +00:00
wrongecho
db5cfed96f Update to new perms system 2025-02-05 14:31:46 +00:00
wrongecho
9ce502c1b9 Comment old perms functions 2025-02-05 14:31:31 +00:00
wrongecho
0172895e3c Rename password rotation report to credential rotation report 2025-02-05 14:19:43 +00:00
wrongecho
a29bfc3cb5 Only show tasks if ticket is open OR when ticket is resolved & there were tasks 2025-02-05 10:50:59 +00:00
wrongecho
341ff69c58 Only show tasks if ticket is open OR when ticket is resolved & there were tasks 2025-02-05 10:48:16 +00:00
wrongecho
66ab0d3f11 Update changelog 2025-02-05 10:24:31 +00:00
wrongecho
b147bc46cf Client Portal Tickets - Show category field, tidy the perms check 2025-02-05 10:21:06 +00:00
Hugo Sampaio
11203f1ad2 notification when resolved 2025-02-04 17:27:41 -03:00
Hugo Sampaio
ee2e4b671d ticket kanban settings 2025-02-04 17:07:42 -03:00
Hugo Sampaio
65bb1b4007 alter ticket_kanban to ticket_order 2025-02-04 13:35:28 -03:00
wrongecho
cdc0422d31 Allow adding custom links to the client portal nav-bar 2025-02-04 16:04:44 +00:00
wrongecho
1bbf7c7662 rm old debugging message 2025-02-04 15:10:10 +00:00
wrongecho
1ca31662f8 Cron scripts should log using logApp 2025-02-04 14:24:41 +00:00
Hugo Sampaio
3de97fcd15 nullable_htmlentities 2025-02-04 10:47:23 -03:00
wrongecho
9218d828b0 Fix unbilled tickets report permissions - requires sales read rights (in addition to general reporting) 2025-02-04 13:39:42 +00:00
wrongecho
4ed9c5cfb8 Start new changelog 2025-02-04 13:30:22 +00:00
Hugo Sampaio
17cd1fd0c1 ajax cleanup 2025-02-04 10:16:52 -03:00
Hugo Sampaio
c7b9c95d0d missing tickets_kanban.css 2025-02-04 09:59:45 -03:00
Hugo Sampaio
c0360f4e68 kanban js/css files 2025-02-04 09:58:18 -03:00
wrongecho
571ed4818e rm desc field; we don't store the description, the file name is enough because we know it's already related to the quote 2025-02-03 22:32:25 +00:00
wrongecho
04226101af Add ability for client to upload attachments to approved invoices 2025-02-03 22:19:32 +00:00
wrongecho
b50c2295a6 Add logic for showing quote attachments in the admin/tech side 2025-02-03 22:19:06 +00:00
wrongecho
75e002a054 Update git-ignore for new quotes dir 2025-02-03 22:18:22 +00:00
Hugo Sampaio
e6c18970b3 fix: explicit default declaration 2025-02-03 18:04:49 -03:00
Hugo Sampaio
00a9c53fc4 dragula plugin 2025-02-03 11:59:18 -03:00
Hugo Sampaio
942f5bff52 ticket tasks moving order 2025-02-03 11:55:20 -03:00
Johnny
9ea41c6ae5 Merge pull request #1163 from itflow-org/develop
Release 25.01.3
2025-01-31 13:52:39 -05:00
Johnny
c40d15a545 Merge pull request #1162 from itflow-org/tck-assign-modal
Bugfix: Amend SQL query for ticket assignment modal so contacts aren't shown
2025-01-31 13:48:08 -05:00
wrongecho
4c966f19e5 Bugfix: Amend SQL query for ticket assignment modal so client contacts aren't shown 2025-01-31 18:42:27 +00:00
johnnyq
73d0cb7497 Removed reports_contacts.php as it was incomplete for the hotfix 3 2025-01-31 13:23:49 -05:00
Hugo Sampaio
e3ae8df4d8 new changes 2025-01-31 11:50:06 -03:00
johnnyq
ef06c4141f Started work on Global Contacts, Added PrettyContent to guest footer and updated the guest document view to use it so images are responsive and tables show up correctly 2025-01-30 18:24:05 -05:00
Johnny
0dca0ce4bf Merge pull request #1161 from itflow-org/develop
Release 25.01.2
2025-01-30 15:01:20 -05:00
johnnyq
b5be8605d6 Final Version Fix in Changelog 2025-01-30 14:58:18 -05:00
johnnyq
2268a41b00 Update App version to 25.01.2 2025-01-30 14:55:06 -05:00
johnnyq
8efd22f47b Fix App Versioning 2025-01-30 14:54:09 -05:00
Johnny
e3aafcbc68 Merge pull request #1160 from itflow-org/develop
Release 25.01.01
2025-01-30 14:45:57 -05:00
johnnyq
2e5b0d1429 Increased version to 25.01.1 for a hotfix release 2025-01-30 14:17:08 -05:00
johnnyq
dd94e594a1 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-01-30 11:38:51 -05:00
johnnyq
b3c7b00e61 Fix broken image link in user pref and company details ig not avatar or company logo is present update nav user icon 2025-01-30 11:38:34 -05:00
wrongecho
badda09245 Prevent users disabling MFA when it is enforced 2025-01-29 21:29:04 +00:00
wrongecho
bf019f374a Minor changelog wording tweaks 2025-01-29 21:19:26 +00:00
johnnyq
aa87a11f12 Removed setup from the cron script wording 2025-01-29 15:59:21 -05:00
johnnyq
6df465a4d1 Update Changelog 2025-01-29 15:25:25 -05:00
johnnyq
c4980a1241 Update Changelog 2025-01-29 15:22:52 -05:00
Hugo Sampaio
f4eaba4384 fix whitespace qualitygate 2025-01-29 16:53:52 -03:00
Hugo Sampaio
9ee159c458 fix card move, after qualitygate changes 2025-01-29 16:52:12 -03:00
Hugo Sampaio
180635f318 update 2025-01-29 16:30:04 -03:00
Hugo Sampaio
e498cc6036 update tickets_kanban.php 2025-01-29 16:27:53 -03:00
Hugo Sampaio
b6e0990a78 update tickets.php 2025-01-29 16:21:08 -03:00
Hugo Sampaio
04fac54987 update tickets_list.php 2025-01-29 16:17:29 -03:00
Hugo Sampaio
b31d1eba6a update ticket_kanban.php 2025-01-29 16:12:32 -03:00
Hugo Sampaio
dec91d116a update tickets_compact.php 2025-01-29 16:10:40 -03:00
Hugo Sampaio
1fb243df11 update compact list 2025-01-29 16:03:24 -03:00
Hugo Sampaio
c02b267d44 update tickets.php 2025-01-29 15:55:58 -03:00
johnnyq
ffca7ff445 Added back warning about the old script path 2025-01-29 12:43:29 -05:00
johnnyq
34b94af965 Copied the cron scripts from /script dir back to / and updated all require pathes 2025-01-29 12:32:45 -05:00
johnnyq
5b32127de2 Add Tooltips on hover to better explain what to do with the MFA enformcement info 2025-01-29 11:41:37 -05:00
johnnyq
22a5c90d21 Reworked MFA Enforcement page to use login page style for smoother transition 2025-01-29 11:35:14 -05:00
Hugo Sampaio
ed5aa9a0c2 sync last changes
sync last changes on days  27 and 28
2025-01-29 12:00:52 -03:00
Hugo Sampaio
3e0e72dedc database update for kanban 2025-01-29 11:39:54 -03:00
Hugo Sampaio
3aa26226e5 kanban post actions 2025-01-29 11:08:42 -03:00
Hugo Sampaio
bb787cdc70 tickets initial idea of views
Kanban view
Compact view
2025-01-29 11:01:53 -03:00
johnnyq
6cbd4ffebe Add members column in roles and other UI tidying 2025-01-28 20:03:23 -05:00
johnnyq
033a5d1f4f Remove comment 2025-01-28 19:25:29 -05:00
johnnyq
02fdc66af9 Updated UI / UX MFA enforcement 2025-01-28 19:23:25 -05:00
johnnyq
52ad2ba322 Reworked the MFA Enforcement 2025-01-28 18:57:04 -05:00
johnnyq
677bb6b400 Updated Changelog removed crons and cron key 2025-01-28 17:32:27 -05:00
johnnyq
c282e22228 Updated Changelog 2025-01-28 17:29:15 -05:00
Johnny
5b5e01df4b Merge pull request #1157 from itflow-org/bulk-mail
Bulk mail - only show active clients
2025-01-28 17:20:00 -05:00
Johnny
f4173354bb Merge pull request #1156 from itflow-org/tck-assign
Fix ticket assign modal/filter
2025-01-28 17:19:29 -05:00
Johnny
47eddfdf9c Merge pull request #1155 from itflow-org/rec-payment-stripe
Autopay
2025-01-28 17:18:23 -05:00
johnnyq
706a77c5d3 Added btn-responsive style class to define buttons to go full block level while in mobile and to stay defined size in non mobile response 2025-01-28 17:14:47 -05:00
johnnyq
a4c9b4efa4 fix right margin on forms in user details when in mobile response 2025-01-28 16:55:47 -05:00
johnnyq
9ea5fdf425 Further improve the MFA process, now when verification fails the modal will stay open and the secret remain the same 2025-01-28 16:34:07 -05:00
johnnyq
ec9572c2ec Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-01-28 15:08:41 -05:00
johnnyq
c150fb02bb Fix Profit and Loss Report getting the wrong total expense amount for Quarter 2 April - June due to wrong var being used this does not affect actual expense data and will show correctly after update and also does not affect total expense for all 4 quarters 2025-01-28 15:06:43 -05:00
wrongecho
92ef31d861 Bulk mail - only show active clients
Bulk mail shouldn't show archived clients
2025-01-28 12:31:09 +00:00
wrongecho
5fa8363ad7 Fix ticket assign modal/filter 2025-01-28 11:50:38 +00:00
wrongecho
20a862f020 Fix redirect to /client if no login key is set 2025-01-28 11:24:08 +00:00
wrongecho
071352e32f Autopay
- Stripe wasn't showing as an option in the modal
- Show the current payment method at the top of the recurring invoice
2025-01-28 11:19:56 +00:00
johnnyq
39adab734b Enhanced the MFA Setup Flow 2025-01-27 23:26:10 -05:00
johnnyq
8221ef2927 Global Ticket View make contact secondary text in table header and remove tasks from the table header 2025-01-27 11:20:24 -05:00
johnnyq
ab7273bf39 Reduce Global Ticket view padding by not displaying contact's email 2025-01-27 11:15:43 -05:00
johnnyq
96809c7f85 Update db.sql 2025-01-25 21:47:24 -05:00
johnnyq
d5a03d3afc remove cron key from the code and remove old cron script and setup and update cli scripts as they now reside in scripts directory 2025-01-25 21:44:46 -05:00
johnnyq
052d5a6dbe Remove cron key from setup 2025-01-25 21:30:23 -05:00
johnnyq
227b87b1cb Fix Show OTP on hover in asset and contact details logins section 2025-01-25 19:53:00 -05:00
Johnny
e8c3cabde7 Merge pull request #1154 from itflow-org/develop
Release 25.01
2025-01-25 12:48:43 -05:00
johnnyq
33f80cb6b5 Adjust Version to use double digit for month 2025-01-25 12:42:11 -05:00
johnnyq
bf382f3aeb Bump ITFlow Version from 24.12 to 25.01 2025-01-25 12:35:19 -05:00
johnnyq
f4c4fe655b Update Changelog 2025-01-25 12:06:45 -05:00
johnnyq
6473a84fb2 Bump plugin stripe-php from 10.5.0 to 16.4.0 and update links 2025-01-25 11:47:58 -05:00
johnnyq
17f7b8be1c Minor UI update on Client Saved Payment Methods 2025-01-25 00:51:21 -05:00
johnnyq
cd40a97ae8 Use company currency code when autopay creates an expense, sort Invoices DESC 2025-01-25 00:30:48 -05:00
johnnyq
ce7406b632 Fix stripe library link in invoice 2025-01-24 23:55:30 -05:00
johnnyq
eef67194c4 Bump plugin Inputmask from 5.0.8 to 5.0.9 2025-01-24 22:30:52 -05:00
johnnyq
79d1914fe8 Bump Plugin DataTables from 2.1.8 to 2.2.1 2025-01-24 22:23:20 -05:00
johnnyq
b47c79d90a Bump plugin pdfmake from 0.2.8 to 0.2.18 2025-01-24 22:18:13 -05:00
johnnyq
fb17dbb1fb Bump php-mime-mail-parser library to 9.0.1 2025-01-24 22:07:49 -05:00
johnnyq
927725de7d Initialize TinyMCE using gpl license 2025-01-24 21:58:12 -05:00
johnnyq
156fcb7379 Bump TinyMCE from 7.5.1 to 7.6.1 2025-01-24 21:52:52 -05:00
johnnyq
6a2489865d Garbage Collect .git 2025-01-24 21:47:03 -05:00
johnnyq
5cecbe6ed1 Revert app version link 2025-01-24 21:30:03 -05:00
johnnyq
7863935a20 Fix app_version.php link in inc_all_admin.php 2025-01-24 21:28:23 -05:00
johnnyq
87e1371318 Move app_version.php and database_version.php to includes folder update all assocoiated links, remove 2 legacy php files maintence and legacy_debug 2025-01-24 21:25:04 -05:00
johnnyq
f29d122376 Move totp.php out of functions folder into plugins then removed functions folder 2025-01-24 21:07:01 -05:00
johnnyq
772b47f2c0 Remove unused css files in css folder along with the css folder 2025-01-24 20:58:28 -05:00
Johnny
38fced55a5 Merge pull request #1153 from itflow-org/hide-files
Hide the .git and .github folders as well as config.php
2025-01-24 20:51:58 -05:00
johnnyq
e9b011ea90 Update remainder strip lib links 2025-01-24 20:48:27 -05:00
johnnyq
6733d3cd24 Removed unused libs in the vendor folder and moved stripe to the plugins folder then elininated the vendor folder all together, updated all the stripe links 2025-01-24 20:44:36 -05:00
johnnyq
bf0d3de393 totp.php link fix 2025-01-24 20:32:00 -05:00
johnnyq
8e04e10753 Combine base32static.php and rfc6238.php into 1 file called totp.php and place it into the functions folder 2025-01-24 20:26:46 -05:00
johnnyq
d80d4803db Moved TOTP dependent files rfc6238.php and base32static.php to /includes folder and updated links in pages 2025-01-24 19:20:49 -05:00
wrongecho
2b3ff954c3 Hide the .git and .github folders as well as config.php 2025-01-24 19:30:22 +00:00
johnnyq
b1f0cfa29a Add back bootstrap5 css for select2 2025-01-24 13:19:18 -05:00
johnnyq
4965bcadc5 Update some wording on select boxes and and UI tiday on Send Mass Email in contacts 2025-01-24 13:16:49 -05:00
wrongecho
fcbb083cfb Mention SSO breaking 2025-01-24 15:25:18 +00:00
wrongecho
cce2e937da Hide settings for disabled modules in the admin sidebar 2025-01-24 15:18:49 +00:00
wrongecho
a3e94d1171 - Finish updating URLs from /portal to /client
- Add a basic Stripe management page to admin settings to remove cards/reset Stripe customer IDs
2025-01-24 15:08:09 +00:00
wrongecho
57deea2785 Hyperlink primary contact name on overview 2025-01-24 09:42:59 +00:00
wrongecho
6d94c32818 Hyperlink primary contact name on overview 2025-01-24 09:41:36 +00:00
wrongecho
6f2ae10e39 Fix portal password reset link (portal -> client) 2025-01-24 09:01:49 +00:00
johnnyq
0558358627 Added breaking changes to the Changelog specifically /guest/ and /client/ 2025-01-23 17:29:13 -05:00
johnnyq
2b8778b205 Fix some lingering dead links 2025-01-23 17:21:49 -05:00
johnnyq
5f76a7989b Move portal to client and rename and reorganize some client portal files 2025-01-23 17:12:11 -05:00
johnnyq
70dd3ab5c8 Remove Cron Key Requirement from cron scripts in /scripts folder and set to only run on the cli 2025-01-23 14:01:15 -05:00
johnnyq
c8e3e37d87 Update top right corner logo on setup, add more default common income, expense, referral, payment method categories 2025-01-23 12:53:26 -05:00
johnnyq
49682e4362 Fix Adminlte Paths in setup 2025-01-23 11:47:21 -05:00
johnnyq
faa1f789b8 Update Function in bulk mail 2025-01-22 21:07:11 -05:00
johnnyq
2c51289d75 Remove mysqli connection vars when passing mail data to addToMailQueue Function 2025-01-22 20:56:24 -05:00
johnnyq
c5c809791a Fix Default order by 2025-01-22 19:32:47 -05:00
johnnyq
606f3061d0 Simplify / rework some of the filter header logic and update filter vars in the rest of the code 2025-01-22 18:55:05 -05:00
johnnyq
4fc39a7203 Update Filter Vars in expenses 2025-01-22 17:31:04 -05:00
johnnyq
e403526321 Better var naming for filter vars for clients and contacts 2025-01-22 16:36:55 -05:00
johnnyq
5765144770 Disable HTML Purifier Caching in Guest and Portal Areas ass well 2025-01-22 14:42:45 -05:00
johnnyq
bff04e947b Disable HTML Purifier Caching 2025-01-22 14:39:39 -05:00
johnnyq
502ebf5080 Update Changelog 2025-01-22 11:25:02 -05:00
johnnyq
823c9eb030 Reduce the Max amount of Records per page to 100 instead of 500 to prevent performance issues 2025-01-22 11:22:09 -05:00
johnnyq
679291217d Fix Regression with TinyMCE not loading when editing or adding a ticket template 2025-01-22 11:17:47 -05:00
johnnyq
2abc6cd8ef Fix Editing Recurring Expenses, update Changelog 2025-01-20 23:28:46 -05:00
johnnyq
9d2f509694 Add tooltips to the client badge count on the side nav menu to explain what it counts 2025-01-19 20:53:02 -05:00
johnnyq
22e9699b20 Fix Archive Taxes 2025-01-18 16:48:39 -05:00
johnnyq
5382676fc1 Reduce padding in Rack units, use thumnail class for rack image 2025-01-18 14:54:33 -05:00
johnnyq
a90e08cb2d UI Update to rack devices, added a table header to Device Units removed border between action and device 2025-01-18 14:48:59 -05:00
johnnyq
37e792402f Update Change log 2025-01-18 14:26:32 -05:00
johnnyq
034dc4a745 Row span and center each Rack Devices instead of repeating same device for each unit the device utilizes 2025-01-18 14:09:06 -05:00
johnnyq
5fb4d2a197 Tidy some code in client contacts 2025-01-18 13:38:55 -05:00
johnnyq
657d766fbd Update Table UI for domain history 2025-01-18 13:20:39 -05:00
johnnyq
eee5a9cd8d Updated CHANGELOG 2025-01-18 13:09:37 -05:00
johnnyq
360974d9f4 Refactor interface linking system:
- Remove 'interface_connected_asset_interface' column usage
- Introduce 'asset_interface_links' table for one-to-one connections
- Update add/edit/delete queries and modals to handle new schema
- Exclude already-connected interfaces in dropdowns
- Improve data integrity and simplify linking logic
2025-01-18 13:04:56 -05:00
wrongecho
d2b3970a7b Update SECURITY.md 2025-01-18 12:19:00 +00:00
wrongecho
317d45c60b Update README.md 2025-01-18 12:06:45 +00:00
wrongecho
85cee68d15 Update README.md 2025-01-18 11:20:23 +00:00
wrongecho
c425c37fbf Update CHANGELOG.md 2025-01-18 11:00:08 +00:00
johnnyq
d1ebdcf92c Add Force Recur ticket to client Recurring, client details and asset details 2025-01-17 17:34:37 -05:00
johnnyq
57cbcf4e1d Update some UI elements in User Preferences 2025-01-17 17:05:41 -05:00
Johnny
bddc406c1d Merge pull request #1151 from itflow-org/domain-history
Add domain history
2025-01-17 16:47:05 -05:00
johnnyq
43337ff138 Update User Details Page to mimic company Details layout 2025-01-17 16:44:00 -05:00
wrongecho
ecd83b6b11 Add domain history to domain refresher 2025-01-17 21:39:11 +00:00
johnnyq
e68c8b7922 Reduce Card Header Padding in Company Details 2025-01-17 16:25:54 -05:00
johnnyq
269bddee9d Feature: Ability to remove Company Logo, also small UI touch up in company details 2025-01-17 16:23:29 -05:00
johnnyq
505ad52950 Update Changelog 2025-01-17 15:58:14 -05:00
wrongecho
e0c8155943 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-01-17 20:55:18 +00:00
wrongecho
d22c2b5265 Refactor changelog 2025-01-17 20:55:10 +00:00
johnnyq
5baecf6982 Add Payment Deletion Capabilities from payments and client payments page 2025-01-17 15:54:26 -05:00
wrongecho
fd59709af5 Fix stripe auto-pay not fetching publishable key 2025-01-17 20:28:09 +00:00
wrongecho
9dcd9abdc6 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-01-17 20:27:35 +00:00
wrongecho
55b324621e Fix stripe auto-pay not fetching publishable key 2025-01-17 20:27:22 +00:00
johnnyq
e3623dce5e Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-01-17 15:27:18 -05:00
johnnyq
cb7965a84f Stripe Var Passthru attempt 2025-01-17 15:26:40 -05:00
Johnny
2ce32731aa Merge pull request #1150 from itflow-org/services-db-charset
Services table has a weird character set - removed
2025-01-15 20:22:54 -05:00
wrongecho
99c4f9b92d Add domain history 2025-01-15 18:04:56 +00:00
wrongecho
c5058b26de Services table has a weird character set - removed
https://tasks.dev.itflow.org/task_details.php?task_id=41
2025-01-15 12:05:03 +00:00
johnnyq
e4a4687e8c Added Connected Asset Interface ID to asset interface table to eventual link to anothr assets interface/port 2025-01-14 23:50:08 -05:00
johnnyq
1c971ca88c Reduce Padding for Network Interfaces table 2025-01-14 22:40:32 -05:00
johnnyq
a5d3c73249 Sort Interface Ports ASC instead of DESC in asset details 2025-01-14 22:33:31 -05:00
johnnyq
5d3b4c8ff7 Update JS for stripe autopay to fetch value of Publishable Key from hidden form element instead of using hard coded key 2025-01-14 16:39:34 -05:00
Johnny
47657e462a Merge pull request #1149 from itflow-org/modal-maxlength
Modal maxlength
2025-01-14 12:55:26 -05:00
Johnny
5567dfe968 Merge pull request #1148 from itflow-org/stripe-autopay
Initial add Stripe Auto-payment with saved card
2025-01-14 12:54:36 -05:00
wrongecho
f774218b6d Cron - log retention should include the new app and audit logs tables too 2025-01-14 17:48:42 +00:00
wrongecho
34daca31b8 Include rather than require for the admin/xcustom includes to avoid breaking notifications/logout on pages that don't have a post handler (e.g. app logs) 2025-01-14 17:47:56 +00:00
wrongecho
6d9de98a71 Add maxlength attribute to modals 2025-01-14 17:24:43 +00:00
wrongecho
6c234968cb Fix top_nav_tickets_modal path 2025-01-14 15:39:33 +00:00
wrongecho
54dde984ac nullable_htmlentities - prevent Passing null to parameter error 2025-01-14 15:37:24 +00:00
wrongecho
9a36ad2cea Initial add Stripe Auto-payment with saved card 2025-01-14 00:28:49 +00:00
wrongecho
88c1b8cb8b Initial add Stripe Auto-payment with saved card 2025-01-13 22:58:23 +00:00
johnnyq
701df8db38 Update Changelog 2025-01-13 16:15:51 -05:00
johnnyq
97723da633 Windows/Tab Titles now reflect the current page your on along with the company name or selected client. Pages contact details, asset details, tickets, projects, documents, invoices, quotes, recurring invoices overide to include more detail in tab title 2025-01-13 14:40:05 -05:00
wrongecho
2693bbf81a Initial add Stripe Auto-payment with saved card 2025-01-13 00:11:04 +00:00
wrongecho
b72c3f23af Initial add Stripe Auto-payment with saved card 2025-01-12 23:59:39 +00:00
wrongecho
f153ae8ff3 Initial add Stripe Auto-payment with saved card 2025-01-12 22:02:49 +00:00
wrongecho
cd374b7b21 Initial add Stripe Auto-payment with saved card 2025-01-12 21:42:02 +00:00
wrongecho
a15081ac67 Initial add Stripe Auto-payment with saved card 2025-01-12 20:56:38 +00:00
johnnyq
0cb3cdc26d Moved all modals into /modals and updated all require links 2025-01-12 13:55:31 -05:00
wrongecho
e7f19dc69d Fix portal invoices 2025-01-12 09:25:13 +00:00
wrongecho
2c6b1a83d6 Fix portal confirm modal include 2025-01-12 09:22:21 +00:00
johnnyq
d57caed793 tidy 2025-01-11 17:41:50 -05:00
johnnyq
5b2b3d2821 Add index.php in /guest to redirect to the portal 2025-01-11 17:28:49 -05:00
wrongecho
731927d49c Allow archiving roles 2025-01-11 22:08:28 +00:00
wrongecho
2b07b03560 Update URLs for guest being in subdir 2025-01-11 21:46:34 +00:00
johnnyq
ae7b7d1157 Update AdminLTE CSS/JS links in client Portal's login, login_reset and header and footer 2025-01-11 16:20:40 -05:00
johnnyq
cc0b456312 Update all email content links to use the /guest directory now for ticket viewing, invoice, quote and item 2025-01-11 16:07:48 -05:00
johnnyq
d29aa55411 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-01-11 15:48:31 -05:00
johnnyq
7a23cf245d Fix index.php, Move Guest files to /Guest directory, fix adminlte path 2025-01-11 15:48:10 -05:00
wrongecho
677823d19d Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-01-11 19:51:41 +00:00
wrongecho
25e7ed6a6e Guest ticket feedback now shows friendly ticket prefix & number 2025-01-11 19:51:32 +00:00
johnnyq
08b91ead25 Merge branch 'develop' of github.com:itflow-org/itflow into develop 2025-01-11 14:49:14 -05:00
johnnyq
98f9083bcb Structure rework: Moved most php files that are included to /includes renamed pagination.php to filter_footer.php, updated all file to reference new filter_footer and includes 2025-01-11 14:47:32 -05:00
wrongecho
2ca92744f3 mv 2025-01-11 19:40:36 +00:00
wrongecho
5baae71dc7 Auto-acknowledgement email for email parsed tickets now contains guest link 2025-01-11 19:33:48 +00:00
johnnyq
a9179462c4 Moved client location modals inside /modals and updated the require links in location listing 2025-01-11 13:05:26 -05:00
johnnyq
69fb9f682b Created modals and includes folder moved client contact modals to /modals and updsated contact details and contact listing code 2025-01-11 12:55:23 -05:00
wrongecho
7bd47b1cca All cron scripts should set the running directory for consistency 2025-01-09 19:01:31 +00:00
wrongecho
12d8894c8f Mail queue - duh, it actually sees to be a fix.. 2025-01-09 18:59:24 +00:00
wrongecho
73c711095a Mail queue - undo file inclusion, not a fix 2025-01-09 18:53:11 +00:00
wrongecho
8914f4afe7 Mail parser - fix billable 2025-01-09 17:02:03 +00:00
wrongecho
50e252efb7 Mail queue - fix file inclusion following move to subdir 2025-01-09 16:58:09 +00:00
wrongecho
22d1a1809c Tickets created via portal/email not being marked as billable 2025-01-09 16:29:07 +00:00
wrongecho
64fd761934 Don't require a contact for recurring tickets 2025-01-09 16:23:35 +00:00
wrongecho
90e53981f6 Credential add modal - URI placeholder text was off 2025-01-09 16:11:52 +00:00
wrongecho
a67de7a8f1 Prevent post pages being accessed directly 2025-01-09 16:09:39 +00:00
wrongecho
ec54b28b02 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-01-09 15:32:22 +00:00
wrongecho
d3d3d37595 Show git branch on debug page 2025-01-09 15:32:11 +00:00
wrongecho
cf511b2c4b Update CHANGELOG.md 2025-01-09 15:21:20 +00:00
wrongecho
0871833f48 Merge branch 'develop' of https://github.com/itflow-org/itflow into develop 2025-01-09 15:14:57 +00:00
wrongecho
e8c7b3616b Tweak docs link 2025-01-09 15:14:46 +00:00
wrongecho
9845991413 Merge pull request #1147 from itflow-org/new-admin-check
Implement new admin check
2025-01-09 15:13:04 +00:00
wrongecho
fe94036b3a Implement new admin check
Uses the new $session_is_admin rather than the old validateAdminRole.
Reverts #1065
2025-01-09 15:11:07 +00:00
wrongecho
77b3eca687 Merge pull request #1146 from itflow-org/stripe-account-ui
Stripe payments - Account selection
2025-01-09 15:01:46 +00:00
wrongecho
1e777afa50 Stripe payments - Account selection
https://tasks.dev.itflow.org/task_details.php?task_id=22
2025-01-09 15:01:04 +00:00
wrongecho
2f57bdb677 Merge pull request #1145 from itflow-org/stripe-account-ui
Stripe payments - Account selection
2025-01-09 14:58:42 +00:00
wrongecho
d32e3a698f Stripe payments - Account selection
https://tasks.dev.itflow.org/task_details.php?task_id=22
2025-01-09 14:56:36 +00:00
wrongecho
3c697617f9 Update README.md
Remove issues shield, as we'll be using our own system for roadmapping
2025-01-08 13:42:37 +00:00
johnnyq
bc417b7cf3 Fix creating a recurring expense due to bad var name 2025-01-02 21:46:40 -05:00
johnnyq
3e52155d1c Fix editing recurring expense due to bad var name 2025-01-02 21:26:29 -05:00
wrongecho
5d734e58af Merge pull request #1144 from itflow-org/bug-asset-network
Bugfix: Asset interface DHCP vanishing
2025-01-02 22:58:58 +00:00
wrongecho
b0d398618d Bugfix: Asset interface DHCP vanishing
Fixes a bug that removes the DHCP setting on asset interfaces when changing their network interface from the asset details page
2025-01-02 22:57:13 +00:00
wrongecho
87f0cb295f Merge pull request #1143 from itflow-org/bug-tickets-projects
Bugfix - tickets <=> projects
2025-01-02 22:24:46 +00:00
wrongecho
65873eb46f Bugfix: Ticket edit modal not showing multi-client/no-client projects 2025-01-02 22:22:37 +00:00
wrongecho
cb2f620343 Bugfix: Ticket edit modal not showing multi-client/no-client projects 2025-01-02 22:21:02 +00:00
wrongecho
2dad616f42 Merge pull request #1142 from itflow-org/cron-scripts-move
Domain Refresh - Tidy old debug message
2025-01-02 22:02:03 +00:00
wrongecho
afc03634d6 Tidy old debug message 2025-01-02 22:01:01 +00:00
wrongecho
e677d5f7ca Merge pull request #1141 from itflow-org/cron-scripts-move
config.php has to be written to parent dir
2025-01-02 21:57:23 +00:00
wrongecho
43ccf8a026 config.php has to be written to parent dir 2025-01-02 21:55:25 +00:00
wrongecho
4167381fb1 Merge pull request #1140 from itflow-org/cron-scripts-move
uploads have to be written to parent dir
2025-01-02 21:48:54 +00:00
wrongecho
ff4f8a9a18 uploads have to be written to parent dir 2025-01-02 21:48:02 +00:00
wrongecho
c2f82bbe0e Merge pull request #1139 from itflow-org/cron-scripts-move
config.php has to be written to parent dir
2025-01-02 21:45:36 +00:00
wrongecho
b0a960547c config.php has to be written to parent dir 2025-01-02 21:43:23 +00:00
wrongecho
04def2e434 Merge pull request #1138 from itflow-org/cron-scripts-move
db.sql also needs to be called from the parent directory
2025-01-02 21:38:41 +00:00
wrongecho
a529eca414 db.sql also needs to be called from the parent directory 2025-01-02 21:37:10 +00:00
wrongecho
942004a6a7 Merge pull request #1137 from itflow-org/cron-scripts-move
Adjust cron/cli scripts in subdir to load required scripts from parent
2025-01-02 21:31:28 +00:00
wrongecho
7ebac0a674 Sonar recommendations 2025-01-02 21:30:18 +00:00
wrongecho
50371558c6 Adjust cron/cli scripts in subdir to load required scripts from parent 2025-01-02 21:27:14 +00:00
wrongecho
ee49c2c5c6 Update CHANGELOG.md
wip
2025-01-02 21:14:15 +00:00
wrongecho
740f477d4c Merge pull request #1136 from itflow-org/cron-scripts-move
Move cli/cron scripts
2025-01-02 21:11:11 +00:00
wrongecho
2d403415d4 Tidying per sonar recommendations 2025-01-02 21:09:27 +00:00
wrongecho
f39b0eb367 Tidying per sonar recommendations 2025-01-02 21:05:03 +00:00
wrongecho
db6d2fb534 Move cron scripts
Move cron scripts to their own subfolder.
2025-01-02 20:59:05 +00:00
wrongecho
3b0d24f5a5 Delete test.md 2024-12-31 16:26:42 +00:00
wrongecho
c7b0f1222f Update test.md 2024-12-31 16:10:29 +00:00
wrongecho
bf53d5b0fe Also move setup and update cli to scripts folder for better organisation 2024-12-31 11:49:48 +00:00
wrongecho
fd2339e17c Merge pull request #1135 from itflow-org/add-changelog
Add changelog
2024-12-30 17:47:22 +00:00
wrongecho
df19709c2f Move cron scripts
Move cron scripts to their own subfolder.
2024-12-30 17:31:34 +00:00
wrongecho
5bf009f052 Add changelog 2024-12-30 16:54:16 +00:00
wrongecho
0bde1ccee4 Merge pull request #1133 from itflow-org/develop
Release system - 24.12
2024-12-30 14:26:38 +00:00
wrongecho
955f7c3f3b Merge pull request #1134 from itflow-org/add-release-system
Add release system - with admin update
2024-12-30 14:25:51 +00:00
wrongecho
8c3ea6404e Add versioning/release system - December 2024 / 24.12 2024-12-30 14:24:56 +00:00
wrongecho
e6f5c6c484 Merge pull request #1132 from itflow-org/add-release-system
Add versioning/release system - December 2024 / 24.12
2024-12-30 13:16:05 +00:00
wrongecho
469c495a73 Add versioning/release system - December 2024 / 24.12 2024-12-30 12:58:50 +00:00
wrongecho
4711955e17 Merge pull request #1131 from itflow-org/develop
Test - Merge develop into master
2024-12-30 11:59:16 +00:00
wrongecho
b014ddd6bd Merge pull request #1130 from itflow-org/test-my-feat
Test - ignore
2024-12-30 11:48:25 +00:00
wrongecho
6800a48cd4 Test - ignore 2024-12-30 11:39:34 +00:00
johnnyq
8a8af5525c Renamed header Sales to Billing on Main side nav 2024-12-28 14:24:37 -05:00
johnnyq
e56b4019e4 Rename client side menu header from Finance to Billing as its more suitable name 2024-12-28 13:10:04 -05:00
Johnny
eddf8d4016 Merge pull request #1129 from itflow-org/tidying
Tidying/General quality of life updates
2024-12-28 12:41:19 -05:00
Johnny
c78d0a175b Merge pull request #1128 from itflow-org/font-tidy
Stop using Source Sans Pro intermittently for some pages
2024-12-28 12:37:48 -05:00
Johnny
343365d31c Merge pull request #1127 from itflow-org/ticket-client-attachments
Client Portal Ticketing - Show attachments
2024-12-28 12:35:37 -05:00
Marcus Hill
c85626a937 Tidying/General quality of life updates
General quality of life updates:

- Ticket contact edit: 'No one' should be logged when ticket isn't associated with any contact, rather than a blank space; also fix email content
- Ticket portal/guest: Only show 'Assigned to' if someone is actually assigned
- Ticket tasks: Don't allow adding/modifying tasks for tickets in a resolved state
- Portal contacts: Properly align word 'Contacts' in a similar way all other page headings are aligned
- Client PDF export/handover: Now opens in a new self-closing window
2024-12-28 01:12:59 +00:00
Marcus Hill
fcfc6ff5e2 Stop using Source Sans Pro for some pages, we seem to use Sans Serif everywhere else 2024-12-27 23:02:24 +00:00
Marcus Hill
a6451c787e Client Portal Ticketing - Show attachments for each reply 2024-12-27 20:57:38 +00:00
johnnyq
a2f0f392be Moved Create and Disable Auto Pay from Hamburger menu to a button by Email Notify, also Tidied up the Header in add payment 2024-12-21 20:50:21 -05:00
johnnyq
74770a976a Added Auto Pay Options to Recurring Invoice Details 2024-12-21 20:37:46 -05:00
johnnyq
5611ac103d Recurring Payments - Added Auto Pay via cron, removed auto pay amount as it uses the recurring invoice amount, next up integrate with stripe 2024-12-21 20:25:21 -05:00
johnnyq
87a86803ee Added Recurring Payment Creation and Deletion and display in the recurring Invoice sections, still not operational need to add to cron 2024-12-21 18:49:42 -05:00
johnnyq
63015ab22d Feature: Recurring Payments created DB Structure 2024-12-21 16:46:21 -05:00
Johnny
3e0e30a480 Merge pull request #1126 from itflow-org/roles-perms
Move more things to new role perms system
2024-12-20 12:17:52 -05:00
Marcus Hill
bd7a156800 Move more things to new role perms system 2024-12-20 11:23:41 +00:00
wrongecho
dacbc51f95 Merge pull request #1125 from git-kup/master
tidy roles warning & global search
2024-12-19 12:04:33 +00:00
gt-business
8e385d8599 Update global_search.php 2024-12-18 18:57:10 -05:00
gt-business
7007c34e8d Update global_search.php 2024-12-18 18:56:26 -05:00
gt-business
c5cbfd50d2 Update global_search.php 2024-12-18 18:49:38 -05:00
gt-business
7ee04fa26a Update global_search.php 2024-12-18 18:48:42 -05:00
git-kup
4627736a8c make global search nicer 2024-12-18 18:10:22 -05:00
git-kup
56f00fe366 Update global_search.php 2024-12-18 17:50:33 -05:00
git-kup
d0998b7d0d Update admin_role.php 2024-12-18 16:35:08 -05:00
git-kup
5fccf5ffd4 Update admin_role.php 2024-12-18 16:33:20 -05:00
wrongecho
1281b7758f Merge pull request #1124 from Whit3XLightning/patch-1
client_files - check if file shared before assigning variables to prevent errors
2024-12-17 23:37:58 +00:00
Clayton Brown
608c9ef711 check if file shared before assigning variables.
Fixed an issue that produced warnings in the event a file had not been shared. The program was attempting to access a null ($row) array. Also fixed an issue where the author of an uploaded file ($file_uploaded_by) had not been declared in the scope it was being called.
2024-12-17 16:31:52 -06:00
johnnyq
829ee37a53 Add Current App Version by checking the current commit hash, also moved Database version on top with App Version in Debug 2024-12-16 14:24:38 -05:00
Johnny
803704c1ed Merge pull request #1123 from itflow-org/rec-tck-runnow
Recurring tickets
2024-12-16 14:03:47 -05:00
Marcus Hill
ac4a9b8ef2 Recurring tickets
- Allow forcing recurring tickets to run (e.g. cron broke, or you want to do a task early)
- Use new permissions system for recurring UI
- Bugfix: Ticket billable status wasn't saving/displaying on the edit modal
2024-12-16 12:11:29 +00:00
wrongecho
fae4f1e59d readme - we didn't hit stable in 2024, probs early next year now 2024-12-16 09:50:53 +00:00
Johnny
32ef744d6b Merge pull request #1122 from itflow-org/anon-tck-watcher
Anonymous/Guest tickets - Add the anon email as a watcher
2024-12-14 14:28:03 -05:00
Johnny
83cbb3daa3 Merge pull request #1121 from itflow-org/api-tck-fix-2
API - New tickets
2024-12-14 14:27:48 -05:00
wrongecho
68cfa12f1e Anonymous/Guest tickets - Add the anon email as a watcher 2024-12-14 17:31:06 +00:00
wrongecho
3eda726b2b API - New tickets
- Allow creating tickets for no client / no contact
- Set URL view key
- Fix line break after ticket details that causes odd email formatting
2024-12-14 17:06:03 +00:00
Johnny
19221b8749 Merge pull request #1119 from itflow-org/typeahead-os
Assets: Suggest operating systems when adding an asset
2024-12-14 11:53:33 -05:00
wrongecho
7577f505d5 Merge pull request #1120 from itflow-org/api-tck-fix
API - New ticket bugfix
2024-12-14 13:59:32 +00:00
wrongecho
e417badf92 API - New ticket bugfix
Ticket status should be 1, not 'New'
2024-12-14 13:55:39 +00:00
wrongecho
6d23cca51b Assets: Suggest operating systems when adding an asset 2024-12-14 13:37:40 +00:00
johnnyq
1a972d6a3e Added Fax in the UI 2024-12-13 15:59:20 -05:00
johnnyq
a21cb08914 DB Structure Update: Add Fax to location, Delete Vendor Contacts tables decided to merge vendor contacts and conacts as one table as contacts table already had a reference to vendor_id 2024-12-13 15:12:48 -05:00
Johnny
10496c2971 Merge pull request #1118 from itflow-org/bugfix-tck-feedback
Bugfix: Ticket feedback notifications
2024-12-13 11:49:10 -05:00
wrongecho
6df53db9da Bugfix: Ticket feedback notifications 2024-12-13 16:29:02 +00:00
johnnyq
0ffb39980f Started work on vendor contact post code 2024-12-12 19:27:19 -05:00
johnnyq
768511f6e5 Fix Non Existent warning file causing Javascipt to break in Users section 2024-12-12 17:55:55 -05:00
johnnyq
4681a340dc Fix Non Existent warning file causing Javascipt to break in Client Assets section 2024-12-12 11:37:34 -05:00
johnnyq
3eb1530dbc Initial Work on Vendor Details 2024-12-11 18:58:01 -05:00
johnnyq
580b7cd4c0 Added Vendor Contact Create and Edit Modals 2024-12-11 18:01:52 -05:00
johnnyq
4689b8c5c7 Remove ridicelous Export CSV Warning message 2024-12-11 16:30:42 -05:00
johnnyq
8ab82d9edf Really fix it now 2024-12-10 22:26:05 -05:00
johnnyq
41f60e6b21 Dont show update successfull if already updated 2024-12-10 22:23:53 -05:00
johnnyq
3b079de8ad Fix update_cli to get the proper latest db version 2024-12-10 22:19:41 -05:00
johnnyq
32d5e333c6 Renamed error_logs to app_logs, created app logs list view and renamed function logError to logApp, updated some of the log functions in cron and ticket mail parser to use the new appLog 2024-12-10 22:06:35 -05:00
johnnyq
d5e5a13fe7 Automatically select the current asset in asset details whjen creating a recurring or regular ticket 2024-12-10 20:51:16 -05:00
johnnyq
0bff350463 Add Recurring tickets list to contact details as well as the ability to Create and Edit Recurring contacts all witihin contact details 2024-12-10 20:40:47 -05:00
johnnyq
e24c79fbaf Add Recurring Tickets to asset details, added ability to open a ticket for asset in asset details, also recurring ticket 2024-12-10 20:23:04 -05:00
johnnyq
c0928e9b68 Dropped the Vendor Templates Table decided to use the same table, added Vendor Contacts Table to allow for more than 1 contact for a vendor 2024-12-10 17:47:41 -05:00
Johnny
d35d6a93b0 Merge pull request #1117 from ssteeltm/master
Ticket Summary with detected language
2024-12-10 15:48:34 -05:00
johnnyq
bb6a1c3cc7 Feature: Allow AI to Generate Document Templates with a prompt example Generate AD Structure Documentation, File Share etc 2024-12-10 15:47:12 -05:00
Hugo Sampaio
52da072711 Ticket Summary with detected language 2024-12-10 16:54:57 -03:00
johnnyq
1e05c7d524 Fix Ticket Summary move js inline with ticket.php as js files cant read php vars 2024-12-10 14:24:48 -05:00
johnnyq
c9a5df30d8 PHP Tag fix 2024-12-10 14:07:46 -05:00
johnnyq
2ac32ab0c5 AI Feature Ticket Summary: Summarieze an entire ticket 2024-12-10 14:03:43 -05:00
johnnyq
501c5fce15 Update update_cli script to only allow the script to run as the owner of the script preventing any permissions issues when updating via git. Also removed the --user option. to run the script you can use sudo -u USER php update_cli.php while in its path 2024-12-10 12:40:22 -05:00
johnnyq
f3faaa2a4e Revert Wireless Access Point to Access Point 2024-12-09 11:29:00 -05:00
johnnyq
1d8a78b279 Add Image Thumbnails and Previews for better image optimization update view image modal to JS and allow to move between images using previous and next arrows 2024-12-08 15:22:37 -05:00
johnnyq
c4870e49cf Ensure All commands are executed within the update and setup scripts directory 2024-12-07 15:53:17 -05:00
johnnyq
2cf2545f32 name script finalized 2024-12-07 15:49:07 -05:00
johnnyq
41743a529f Update CLI show help screen and show if an argument is invalid 2024-12-07 15:46:48 -05:00
johnnyq
6b8d02c6ef DB Update Add vendor_templates table to eventually seperate out templates from the vendors table 2024-12-07 15:38:35 -05:00
johnnyq
29f75fc69c Update CLI - Added option to specify a when update the app otherwise default to www-data 2024-12-07 15:26:29 -05:00
johnnyq
5f8b68ac3c Setup CLI Fix Country Example to include full country name and add additonal eg for timezones 2024-12-07 15:21:20 -05:00
johnnyq
a8328172e6 Allow force_update to be seperate from --update 2024-12-07 15:16:46 -05:00
johnnyq
926935ceb6 Add help to the update_cli and execute standard update by default also fix getting the current DB version 2024-12-07 15:09:29 -05:00
johnnyq
b43a7ec16d Initial work on update script via cli the update_cli.php can only be run via command line preventing web public dir execution 2024-12-07 14:46:08 -05:00
johnnyq
0a59ab33b9 Added setup_cli.php to allow to setup via the command line via interactive prompts and non intertactive by argument switches this allows for better automation of installing itflow in places like docker, ansible, HestiaCP Auto Install scripts etc 2024-12-07 14:09:15 -05:00
johnnyq
6501fc528e Add IP back to the default shown columns in assets 2024-12-07 12:45:09 -05:00
johnnyq
095c5b95ac Removed Physical Asset location in show additonal columns instead show Physical Location below location 2024-12-07 12:26:41 -05:00
johnnyq
193e9e3e01 Make Company Name clickable 2024-12-06 19:44:14 -05:00
johnnyq
e1b30f6c25 Update Side nav to use icon next to company 2024-12-06 19:40:10 -05:00
johnnyq
804164bc3f Center Align Company Name in side bar and downsize the font size 2024-12-06 19:17:15 -05:00
johnnyq
324f66b5fd Update the UI Header for Asset Selection on in the client assets and reports sections 2024-12-06 18:45:34 -05:00
johnnyq
74e7507f7d Change asset TV to Display, changed Firewall icon to Fire 2024-12-06 17:00:52 -05:00
johnnyq
acf5268139 Wording Fix for Share Link 2024-12-06 16:21:01 -05:00
johnnyq
26ca2ab907 Fix View After Delete and turn it into a switch 2024-12-06 16:10:56 -05:00
johnnyq
6ae18dbc43 Update UI in share Model Remove Views instead use Delete after view and set long expiration dates and chnage them to a radio buttons instead of select 2024-12-06 14:11:51 -05:00
Johnny
22f5bdb1c0 Merge pull request #1113 from itflow-org/invoice-guest-cancelled
Guest invoice view - cancelled
2024-12-06 11:42:39 -05:00
Johnny
9312aac7fc Merge pull request #1112 from itflow-org/portal-contacts-bugfix
Portal contacts
2024-12-06 11:42:24 -05:00
wrongecho
9bc1ebd7ea Merge pull request #1115 from itflow-org/fix-contact-related-logins
Bugfix contact related logins
2024-12-04 23:03:28 +00:00
wrongecho
8954287047 Merge pull request #1114 from itflow-org/tt-bulk-reply
Add time tracking for bulk ticket replies
2024-12-04 22:17:26 +00:00
wrongecho
4213a33652 TT for bulk resolve too 2024-12-04 21:14:35 +00:00
wrongecho
1caf33b7c2 Bugfix contact related logins. This was caused by login_id being used more than once due to joins 2024-12-04 17:20:13 +00:00
wrongecho
7afa1760f3 Add time tracking for bulk ticket replies
- TT for bulk replies
- Encourage the correct time format using a placeholder, pattern and required field (client-side validation only - still results in server error if you intentionally break it, for now)
2024-12-04 16:49:51 +00:00
wrongecho
425b06e550 Add time tracking for bulk ticket replies
- TT for bulk replies
- Encourage the correct time format using a placeholder and pattern (client-side validation only)
2024-12-04 16:43:09 +00:00
wrongecho
ab19d37f5f Guest invoice view
Make it clearer to guests when an invoice has been cancelled
2024-12-04 16:26:27 +00:00
wrongecho
da1b3b55b1 Portal contacts
- Bugfix not being able to edit contacts after the switch to storing contact creds in the users table
- Prevent a client adding contacts with duplicated emails
2024-12-02 18:01:29 +00:00
johnnyq
a31387720c Fix self avatar uploading 2024-11-27 13:34:39 -05:00
johnnyq
439d1bc3db Move Extension down one line in contact details 2024-11-27 12:55:17 -05:00
johnnyq
ad62edb7f6 Fix networks page not displaying dns if secondary dns server was not entered 2024-11-27 12:42:09 -05:00
johnnyq
f731104375 Fix Credential Deleting 2024-11-27 12:24:37 -05:00
johnnyq
53c888c4b8 Add User Type to session, along with user type check 2024-11-27 11:50:45 -05:00
johnnyq
8eb32a09b2 Feature You can now Add and Remove User type Software Licenses in Contact Details 2024-11-26 16:58:37 -05:00
johnnyq
bbed55a8ff Added Linking and unlinking services in contact details 2024-11-26 16:16:24 -05:00
johnnyq
5e8a6bfcd6 Added Unlinking of credentials and assets to contact details 2024-11-26 15:29:40 -05:00
johnnyq
cbbf8c27ba Fix Ticket Watchers not getting emails when No Contact is selected on a ticket, and add the ability to link files in contact details 2024-11-26 14:06:34 -05:00
johnnyq
8968476b7c Added Many to Many Linkage between contacts and documents, asset, credential linkage and unlinkage in contact details, more to come 2024-11-25 23:55:33 -05:00
johnnyq
8c296de205 Do not check to see if session is set before setting timezone always set timezone, Fixes MFA when switching timezones 2024-11-25 12:20:56 -05:00
johnnyq
5a8234db13 Remove branding from downloaded files via link and use original filename replaced old logging function in download with new logAction funtion 2024-11-25 11:58:08 -05:00
johnnyq
8050dffbb8 Enhancement: DB Structure Update: Seperate Logs into 3 seperate log tables error_logs, auth_logs, audit_logs. This will provide huge performance benefits and organization 2024-11-24 15:04:23 -05:00
johnnyq
94e2a4b1f0 Added Placeholder for Linking items to a contact in contact details 2024-11-24 13:06:26 -05:00
johnnyq
137438f873 Added Archive, Unarchive functions for contact notes along with the ability to add a note under client contact details page 2024-11-24 12:38:59 -05:00
johnnyq
8599729602 Defined a note_type_array in get_settings to define note type and associated icon incorporated the array into the Selectboxes to create note and the UI display in contact details 2024-11-24 12:11:31 -05:00
Johnny
276e3c79a0 Merge pull request #1107 from ColDog5044/master
Fix typos in admin_settings
2024-11-24 10:58:02 -05:00
Collin Laney
ffa677db30 Fix typo in admin_settings_quote.php
Fixed typo in placeholder for email address to notify when quotes are accepted/declined.

... leave bank for none -> ...leave blank for none.
2024-11-24 02:22:12 -05:00
Collin Laney
44a8431960 Fix typo in admin_settings_ticket.php
Fixed typo in placeholder for email address to notify when new tickets are raised.

... leave bank for none -> ...leave blank for none.
2024-11-24 02:20:45 -05:00
Collin Laney
47b720b063 Fix typo in admin_settings_invoice.php
Fixed typo in placeholder for email address to notify when invoices are paid online.

... leave bank for none -> ...leave blank for none.
2024-11-24 02:13:05 -05:00
johnnyq
a80fddfc0d Delete Contact Notes when contact is deleted also delete contact references when delting a client 2024-11-23 18:18:22 -05:00
johnnyq
724d4a347a Feature: Contact Notes / Interactions - Create an Add Model and display cpontact notes under contact details 2024-11-23 17:52:03 -05:00
johnnyq
1766b95fc4 Fixed table layout in Client Portal Documents, put pretty content in the portal footer instead as it caused issues with the XSS Protection Content-Security-Policy 2024-11-23 16:43:16 -05:00
johnnyq
1c0441060e FEATURE: Added Tables for Multiple Notes with note type to keep track of interactions and notes for clients, contacts, assets and vendors. UI to come next 2024-11-23 15:36:39 -05:00
johnnyq
504b28ee4c Fix Create / Copy Trips missing trip_id 2024-11-23 11:45:32 -05:00
wrongecho
b2651f7445 Merge pull request #1106 from itflow-org/user-create-fix
Bugfix: Creating users
2024-11-20 21:44:03 +00:00
wrongecho
a216f1bbf8 Bugfix: Creating users 2024-11-20 21:43:33 +00:00
johnnyq
c96833a977 When adding a ticket from contact details page make sure sure the contact is selected by default 2024-11-20 14:08:40 -05:00
johnnyq
fe24e3bcea Update Breadcrumbs to always have a link to the client for fast access to the client section. The breadcrumb order will change depending how you access using the global view or within the client section on Invoice, Quote, Ticket, Recurring Invoice 2024-11-20 12:41:29 -05:00
johnnyq
1e4306381f DB Optimizing in Ticket Selections and relogicify mark billable also more logging 2024-11-19 18:46:07 -05:00
johnnyq
dea702b45f Fix missing ) in Portal Post was a logging regression which also fixes poral logout 2024-11-19 18:22:53 -05:00
johnnyq
050d15579d More in depth logging ticket history and less passing vars from POT in ticket POAST 2024-11-19 18:18:32 -05:00
johnnyq
bbe2b1d2c9 Bump TinyMCE from 7.4.1 to 7.5.1 2024-11-19 16:08:20 -05:00
johnnyq
a10486a95c Breaking AI Change you must update the URL to include the full URL in settings > AI example for openai: https://api.openai.com/v1/chat/completions 2024-11-19 15:42:48 -05:00
johnnyq
dcedddcad6 Moved AI Reword Buttons to the WYSISYG toolbar, Seperated Document and ticket toolbars. Ticket Toolbar has items related to tickets while document has additional items related to documents 2024-11-19 15:33:14 -05:00
johnnyq
9d44d3e849 Uncomment contact add alert 2024-11-19 12:03:09 -05:00
johnnyq
b7163dad6d Add isset check on file upload 2024-11-19 11:59:52 -05:00
johnnyq
c181954960 Fix alert 2024-11-19 11:45:01 -05:00
johnnyq
ff3df12523 allow webp for users and profile 2024-11-18 18:19:57 -05:00
johnnyq
097e1c7b5f Add Acceptable File formats on the Client side, also allow webp for image file uploads in assets, locations, expenses and contact 2024-11-18 18:14:13 -05:00
johnnyq
34e09f32e0 Remove unessesary check if file has been uploaded as the function already does that 2024-11-18 16:29:42 -05:00
johnnyq
06314e136e Replicated previous fix by using enctype=multipart/form-data for bulk forms that have subforms that require a file upload 2024-11-18 16:16:00 -05:00
johnnyq
9d5818050e Fix Contact Photo not uploading when editing the first contact, odd fix but worked the edit contact forms are wrapped in a parent form on the entire table itself for Bulk changes. For some reason it wouldnt take the first edit modal form if we didnt enctype = multipart/form-data fo the parent form even though each edit subform has it already. it doesnt make sense but works 2024-11-18 16:07:22 -05:00
johnnyq
1a968abb35 Fix var for Reccuring Item added alert 2024-11-18 14:10:07 -05:00
johnnyq
32158872b2 get client id for logging when adding recurring items 2024-11-18 14:08:13 -05:00
johnnyq
c9b38b2b5f Show only logged in user notifications 2024-11-17 15:14:40 -05:00
johnnyq
eacb345c70 Only show notificaiton in alert window for logged in user and increase the limit from 5 to 8 2024-11-17 15:11:03 -05:00
johnnyq
cf6df1c2b1 Only show dismissed notifications pertaining to the logged in user 2024-11-17 15:09:30 -05:00
johnnyq
a81bcf350c When Dismiss all notifications are clicked only dismiss the notificaitons of the logged in user only 2024-11-17 15:03:05 -05:00
johnnyq
acec430e28 Fix var name in client edit post 2024-11-17 14:59:54 -05:00
johnnyq
9c24a780be More Checkbox enhancements, remove js from dashboard if finanacial isnt selected 2024-11-17 14:54:16 -05:00
johnnyq
b2fff24bd9 Change theme on click now instead of selecting them then hitting submit more ?? 0s for the form checkboxes 2024-11-17 14:33:31 -05:00
johnnyq
c2be946f7a Switched contact to use ?? 0 in post for checkbox items that are not checked, this save from creating an extra hidden form field in the form model hence cleaner code 2024-11-16 17:45:16 -05:00
johnnyq
978c7c5db4 Switched location to use ?? 0 in post for checkbox items that are not checked, this save from creating an extra hidden form field hence cleaner code 2024-11-16 17:38:19 -05:00
johnnyq
20a24b6ec6 Fix PHP error on login check if Array last_visited is set 2024-11-16 16:33:23 -05:00
johnnyq
20c87044b9 Only accept jpg, jpeg and png for company logo 2024-11-16 15:09:38 -05:00
johnnyq
5f4356546f Fix ticket post missing ) 2024-11-16 14:03:03 -05:00
johnnyq
7fd0a40ea1 logAction is used everywhere in ticket post, also did some logic tiday updates, but way more need to happen within ticket post so more to come 2024-11-16 14:01:08 -05:00
johnnyq
235d1641f0 Update Edit Ticket Logic, Moved fetching ticket info before check notify for logging and alerting and to reduce the amount of post data received 2024-11-16 12:34:13 -05:00
johnnyq
d5524f75b0 Format Alerting / Logging Currency for transfers 2024-11-15 16:05:57 -05:00
johnnyq
9d15721845 Fix Payment Amount logging 2024-11-15 16:00:02 -05:00
johnnyq
4ca9fbe655 wording 2024-11-15 15:31:47 -05:00
johnnyq
95ec0b2979 UI Update Setup: Move locale settings to its own screen 2024-11-15 15:28:20 -05:00
johnnyq
278ba079c3 Updated cron mail queue and cron email ticket parser to use new logAction and tidy up code 2024-11-15 13:40:04 -05:00
johnnyq
bc5e089e95 Updated login to use new logAction and tidy up code 2024-11-15 13:07:38 -05:00
johnnyq
7b9229d926 Updated Portal post to use new logAction and tidy up code 2024-11-15 12:53:41 -05:00
johnnyq
881f498237 Wording Updates Azure to Entra 2024-11-15 12:31:10 -05:00
johnnyq
a6a94e3ccd More logAction function updates to client portal entra login amd cleaned up the client entra login portal for better presentation of vars 2024-11-15 12:29:46 -05:00
johnnyq
412462a4c0 More logAction function updates to client portal login amd cleaned up the client login portal for better presentation of vars 2024-11-15 12:21:55 -05:00
johnnyq
577d97b471 Updated ajax.php to use the new logAction function 2024-11-15 11:53:43 -05:00
johnnyq
ed92592aa6 Check to see if arrays are set before executing for each loops to prevent php errors 2024-11-14 19:13:56 -05:00
johnnyq
e9f023f0c7 Updated all API functions to use the new logAction Function 2024-11-14 18:27:31 -05:00
johnnyq
bfffec7363 Temp added vars session_ip and session_user_agent to validate_api_key so IP and User agent is logged with the new logAction function 2024-11-14 17:55:35 -05:00
johnnyq
ba5e2b216b Updated asset API to use new logAction function 2024-11-14 17:42:01 -05:00
johnnyq
77aede8bab Updated the remaining posts except ticket to use new logAction function, tidy and added more details to logging 2024-11-14 17:32:26 -05:00
johnnyq
5bdd5d1f79 Finished Updating admin / settings posts to use new logAction function, tidy and added more details to logging 2024-11-14 17:20:52 -05:00
johnnyq
ef651f5248 Updated admin posts to use new logAction function, tidy and added more details to logging 2024-11-14 16:07:35 -05:00
johnnyq
8ffa90ae28 Updated vendor post to use new logAction function, tidy and added more details to logging 2024-11-14 13:39:17 -05:00
johnnyq
670390f1d3 Updated trip post to use new logAction function, tidy and added more details to logging 2024-11-14 13:16:23 -05:00
johnnyq
2047a6d18d removed old logging line in transfer 2024-11-14 12:52:56 -05:00
johnnyq
5d8b9ac600 Updated transfer post to use new logAction function, new role checking, tidy and added more details to logging 2024-11-14 12:51:26 -05:00
johnnyq
22f54886e2 Fix: Broken Create Quote - regression in logging 2024-11-14 11:56:12 -05:00
Johnny
653b174830 Merge pull request #1105 from itflow-org/import-chk
Import CSV - Check file uploaded
2024-11-14 11:17:11 -05:00
Johnny
b5256fb529 Merge pull request #1104 from itflow-org/quote-notifs
Quote notifications
2024-11-14 11:16:18 -05:00
Johnny
99b482ab30 Merge pull request #1103 from itflow-org/debug-tweak
Clarify notes on debug
2024-11-14 11:12:46 -05:00
Johnny
45b61da29a Merge pull request #1102 from itflow-org/archive-typo
Fix typo in ticket archived logging
2024-11-14 11:12:20 -05:00
wrongecho
7a561a8c2e Import CSV - Check file uploaded
Check the file was uploaded when importing a CSV. Can probably convert this into a function at a later date.
2024-11-14 11:51:39 +00:00
wrongecho
28a0343a97 Quote notifications
- Send an internal email when quotes are accepted/declined
- Clients are prompted to confirm accept/decline with confirm-link
- Tidy
2024-11-14 11:23:28 +00:00
wrongecho
9fe9d8e9ff Clarify notes on debug 2024-11-14 08:44:08 +00:00
wrongecho
fc94d71795 Fix typo in ticket archived logging 2024-11-14 08:08:52 +00:00
johnnyq
e4f618c150 More work on Updating ticket post to use new logAction function, added more ticket history updates, tidy and added more details to logging, lots of logic changes need to happen here 2024-11-13 18:46:28 -05:00
johnnyq
52284231bb Remove Dup Edit Priority Logic from ticket post and fix priority from > to 2024-11-13 17:56:28 -05:00
Johnny
05ff7e145c Merge pull request #1101 from ThaMunsta/feedback-notification
Update guest_post.php
2024-11-13 22:49:37 +00:00
johnnyq
56361c7008 Partially Updated ticket post to use new logAction function, added some ticket history updates, tidy and added more details to logging 2024-11-13 17:48:24 -05:00
ThaMunsta
93b5c6aab1 Update guest_post.php
fix hotlink on notification
2024-11-13 17:25:58 -05:00
johnnyq
47a4fa78a8 Updated task post to use new logAction function, tidy and added more details to logging 2024-11-13 17:22:07 -05:00
johnnyq
2ec4be8154 Updated software post to use new logAction function, rework array handling tidy and added more details to logging 2024-11-13 17:13:55 -05:00
johnnyq
a86eecf63b Updated service post to use new logAction function, rework adding / ediing arrays tidy and added more details to logging 2024-11-13 17:02:06 -05:00
johnnyq
ed02c2aa3e Updated revenue post to use new logAction function, new role check function tidy and added more details to logging 2024-11-13 16:23:35 -05:00
johnnyq
b408a31cde Updated rack post to use new logAction function, new role check function tidy and added more details to logging 2024-11-13 15:46:20 -05:00
johnnyq
cf22f01df4 Updated quote post to use new logAction function, tidy and added more details to logging 2024-11-13 15:28:24 -05:00
johnnyq
96649af18b Updated project post to use new logAction function, tidy and added more details to logging 2024-11-12 18:50:30 -05:00
johnnyq
c5aa22a832 Updated profile post to use new logAction function, tidy and added more details to logging 2024-11-12 18:26:04 -05:00
johnnyq
115640fc89 Updated product post to use new logAction function, tidy and added more details to logging and add permission check 2024-11-12 18:09:00 -05:00
johnnyq
08c8153d64 Updated network post to use new logAction function, tidy and added more details to logging 2024-11-12 17:41:56 -05:00
johnnyq
640a068026 Fix forloop regressions forgot to include POST duh 2024-11-12 17:30:53 -05:00
johnnyq
b88e111c64 Updated location post to use new logAction function, tidy and added more details to logging 2024-11-12 17:22:22 -05:00
johnnyq
e45b543ff8 Format Payment for currenct in alerting 2024-11-12 15:16:57 -05:00
johnnyq
b305758152 Finished Updating invoice post to use new logAction function, and appNotify function tidy and added more details to logging 2024-11-12 15:09:55 -05:00
johnnyq
651726c9ea Fix broken client link in audit logs 2024-11-12 11:26:43 -05:00
johnnyq
808b190c8d Fix broken AI Settings 2024-11-12 11:01:24 -05:00
johnnyq
e91c0b09b7 wording, fix 2024-11-11 17:46:10 -05:00
johnnyq
c61ec7def6 Partially Updated invoice post to use new logAction function, tidy and added more details to logging 2024-11-11 17:39:18 -05:00
johnnyq
1b8722eb90 Updated folder post to use new logAction function, tidy and added more details to logging 2024-11-11 16:13:44 -05:00
johnnyq
2a5945816d Updated file post to use new logAction function, tidy and added more details to logging 2024-11-10 14:37:02 -05:00
johnnyq
e58bf3d558 Updated epenses post to use new logAction function, tidy and added more details to logging 2024-11-10 13:32:42 -05:00
johnnyq
1ebd537d9d Updated Cron to use new logAction function, also updated logAction cron to make session_user_id 0 if not set 2024-11-10 12:44:10 -05:00
johnnyq
5d147c0d7a Replaced old logging with new logging function in domain event post along with tidy, wording updates and better logging and replaced one line with appNotify function 2024-11-10 12:16:30 -05:00
johnnyq
bd8ef62133 Replaced old logging with new logging function in domain post along with tidy, wording updates and better logging 2024-11-09 19:14:53 -05:00
johnnyq
51a6f7fa8f Removed left over old logging functionality in document post 2024-11-09 18:10:58 -05:00
johnnyq
93c64c7467 more wording updates 2024-11-09 18:08:19 -05:00
johnnyq
9e9c1100f8 wording update 2024-11-09 18:04:00 -05:00
johnnyq
0917633848 Replaced old logging with new logging function in document post along with tidy, wording updates and better logging 2024-11-09 18:01:59 -05:00
johnnyq
ae06ddb068 Replaced old logging with new logging function in credential post along with tidy, wording updates 2024-11-09 15:07:55 -05:00
johnnyq
60a0ebeeb6 added domain name in client creation logging 2024-11-09 13:23:40 -05:00
johnnyq
659aa7a788 Replaced old logging with new logging function in client post along with tidy, wording updates 2024-11-09 13:19:57 -05:00
johnnyq
cc97331676 Replaced old logging with new logging function in certificate post 2024-11-09 12:41:24 -05:00
johnnyq
ac2bbd55a7 Replaced old logging with new logging function in budget post 2024-11-09 12:29:15 -05:00
johnnyq
59cf67814a Functionalize Logging and tidy Asset Posts 2024-11-08 18:07:22 -05:00
johnnyq
365cd6dcae Functionlized logging for account post and wording tidy updates to account post as well 2024-11-08 16:37:05 -05:00
johnnyq
119b2d0fbc Functionalized logging for contact post and some tidying there as well 2024-11-08 16:23:24 -05:00
johnnyq
7b4dda0ad6 Functionalize logging, replaced old logging in contact add with new logging function 2024-11-08 14:40:14 -05:00
johnnyq
3d5e1a1811 Bulk Logic update for files to mimic document bulk deletion 2024-11-08 13:06:42 -05:00
johnnyq
e2f7537517 Add Bulk Document Deletion 2024-11-08 13:02:03 -05:00
johnnyq
1090794f7f Added Bulk File Delete support, Added new user role / permission enforcement on the file posts 2024-11-08 12:20:18 -05:00
johnnyq
01c9e8604f Updated the cron php script to use app notify removed the _esc from ids in cron ticket email parser as ids are always escaped as ints 2024-11-07 12:30:07 -05:00
johnnyq
a5cd1e1f1a Replaced old notification with new appNotify in all the Guest_ PHP Scripts 2024-11-07 12:13:05 -05:00
johnnyq
53724c3012 Clarify Contact Billing Role that they will receive a copy of invoices 2024-11-07 11:46:37 -05:00
johnnyq
68c47ee87d Updated appNotify function to allow null for client_id entity_id and action, also updated all the notification instances to use the new appNotify in cron.php, starting to drop the entity_id as well 2024-11-06 20:56:28 -05:00
johnnyq
db621a97fa FEATURE: appNotify Function added so each user can get their own notificaiton and can individually dismiss and see their own notifications, only works under invoice viewed right now 2024-11-06 18:58:45 -05:00
johnnyq
af9ec9ca85 Fix broken portal login and password reset due to the timezone set before the session was initiated, now we set the timezone after session has started 2024-11-06 17:55:46 -05:00
Johnny
6dbf6f0778 Merge pull request #1100 from itflow-org/admin-footer-banner
Add banner to admin footer
2024-11-06 15:13:59 -05:00
wrongecho
1dd6a02a15 Add banner to admin footer
To contain the app version, once we move to doing dev/master branches with releases.

Also adding the standard links to the forum, docs and sponsor services page.
2024-11-06 12:56:29 +00:00
wrongecho
1a66ad9070 Add banner to admin footer
To contain the app version, once we move to doing dev/master branches with releases.

Also adding the standard links to the forum, docs and sponsor services page.
2024-11-06 12:54:38 +00:00
johnnyq
351bb484a7 Reworked the entire debugger, only grather nessesary info and database comparison to existing and db.sql works now 2024-11-05 17:36:50 -05:00
johnnyq
2250269820 small Fixes UI Cleanups in checks 2024-11-05 15:35:58 -05:00
johnnyq
0d935fa221 Run various Checks (required PHP extentions, shell commands, ssl checks, fqdn check, directory permissions check, php settings check etc during setup 2024-11-05 15:19:23 -05:00
johnnyq
c41b391cb1 SET SQL TIMEZONE on Session, this fixes the issue where created,deleted,updated,archived_ats using SQLs current_timestamp() are set to UTC-0 in SQL causing issues with displaying data in ITFlow as PHP is set to the timezone selected. Note its optional to set system timezone 2024-11-05 13:47:38 -05:00
johnnyq
a3a0a3e8c6 Add xcustom and /post/xcustom to the git ignore list so git doesnt overwrite them except for the readme.php inside them 2024-11-04 22:03:57 -05:00
johnnyq
304623fc05 Guest View Invoice - Fix extra <th> tag in Outsanding Invoices Table 2024-11-04 16:41:57 -05:00
johnnyq
23cc47f8f5 DB Stucture Update: Added Ticket History Table to keep track of ticket events such as priority changes, ticket status, assignment, task completion etc 2024-11-04 12:21:47 -05:00
johnnyq
5211ba73d5 Moved Create Edit User code block towards the top of edit contact user to reduce the query by 1 2024-11-02 16:45:59 -04:00
johnnyq
593f09f6fd Fix issue with creating a contact without a user and then trying to create a user by editing the contact. 2024-11-02 16:25:50 -04:00
Johnny
ada0d52dc0 Merge pull request #1099 from itflow-org/aad-to-entra
Portal SSO - Rename AAD to Entra
2024-11-02 12:40:03 -04:00
Johnny
b71bc508f9 Merge pull request #1098 from itflow-org/cal-rep-dis
Disable calendar repeat for now until we properly add it
2024-11-02 12:39:54 -04:00
Johnny
b4f1cb7d8f Merge pull request #1097 from itflow-org/ticket-status-no-reply
Ticketing updates
2024-11-02 12:39:37 -04:00
Johnny
3dd7006ba4 Merge pull request #1096 from itflow-org/db-prune
Prune old database update logic (2+ yrs old)
2024-11-02 12:39:27 -04:00
Marcus Hill
2e2a992c32 Portal SSO - Rename AAD to Entra 2024-11-02 10:54:19 +00:00
Marcus Hill
d074ddad9f Disable calendar repeat for now until we properly add it 2024-11-02 10:50:30 +00:00
Marcus Hill
13f89d2118 Ticketing updates
- Allow changing ticket status without adding a reply (just leave the response blank)
- Bugfix: Contact change email didn't include URL key
- Make it clearer when nobody is assigned to a ticket
2024-11-02 10:22:31 +00:00
Marcus Hill
d8d455e324 Prune old database update logic (2+ yrs old) 2024-11-02 09:56:09 +00:00
johnnyq
eb70aba430 Also fix the credential tagging in client asset details page 2024-11-01 17:49:48 -04:00
johnnyq
5215ff9a7e Add Group By to logins to prevent duplicated logins from appearing, fixed client contact details from breaking because of missing login tag query 2024-11-01 17:21:55 -04:00
johnnyq
631163d691 Fix Extra spacing in Ticket to Invoice Description 2024-10-31 17:21:47 -04:00
johnnyq
2f182d8c3c tidy 2024-10-31 16:33:15 -04:00
johnnyq
08830fd21f CONTINUE BIG FIX: Adjust the breadcrumbs according to if you are in client section or main section when view ticket, invoice, quote, recurring ticket details 2024-10-31 16:30:34 -04:00
johnnyq
72240462a0 CONTINUE BIG FIX: Adjust the reaminder of links within client section 2024-10-31 15:56:20 -04:00
johnnyq
4e72925c21 BIG FIX: When accessing ticket, invoice, recurring invoice or quote details while in the client section of ITFlow keep the Client Side Nav instead of redirecting back to the Main Nav. This caused much confusion in the past. This will improve naviagtion in those areas greatly 2024-10-31 15:40:02 -04:00
johnnyq
5a6cf0ccac Revert Reoslved count as ins included when you click on Closed Add Mouse Hover Effects to Header Open and Closed Status 2024-10-31 13:39:51 -04:00
johnnyq
5af8d6934b Add Resolved Tickets Count and Select option for tickets 2024-10-31 13:26:34 -04:00
johnnyq
d35880e658 Disabled logging execution time of the mail parser 2024-10-30 21:04:16 -04:00
johnnyq
0ee5828bf3 Fix contact creation when emailing into the ticket parser with domain matching a client 2024-10-30 19:54:47 -04:00
johnnyq
910787c81c Fix Custom Links in the Top nav from breaking ITFlow if the database isnt updated to 1.4.6 2024-10-30 19:49:39 -04:00
johnnyq
1df98166bd Fix issue with Contacts API - Removed contact_auth from Contacts call to the API 2024-10-30 19:35:26 -04:00
johnnyq
c3321dcb0b Removed temp admin_fix file 2024-10-30 19:18:21 -04:00
johnnyq
70569fc226 Scans all files and matches them with the reference file in DB then sets the file size and Mime Type. Note this update doesnt do any DB Structure changes 2024-10-30 19:17:21 -04:00
johnnyq
241b0008e8 Updated DB Structure 2024-10-30 18:39:49 -04:00
johnnyq
3cc9c0720d FEATURE: Files now shows File Size, Mime Type, and who uploaded the file. These fields will only populate on newly uplaoded files, existing ones will show 0 or blank 2024-10-30 18:39:00 -04:00
johnnyq
883976529d UI Update to files, add Breadcrumbs, change file icon to dark 2024-10-30 17:05:58 -04:00
johnnyq
d60f5a9f86 FEATURE: Nested folders in Files 2024-10-30 16:55:19 -04:00
johnnyq
5d9b161b19 Wording Updates 2024-10-30 15:49:39 -04:00
johnnyq
96bdca5a4d UI Update: Reworked the Documents UI Folder Path is not located on the Right, Moved Search on the top when in root directory it searches all files when in a directory searches in current directory 2024-10-30 15:43:15 -04:00
johnnyq
a6ac215f8d FEATURE: Added Bulk Tag Assignment to Credentials 2024-10-30 15:07:51 -04:00
johnnyq
3b45f8e255 Remove login id beside the name, this was for debugging only 2024-10-30 14:53:48 -04:00
johnnyq
807bbef3e2 Use Tag array instead of querying by tag name when clicking on a tag to reveal other items with the same tag, this allow more narrowed searches 2024-10-30 14:51:39 -04:00
johnnyq
873df63c76 FEATURE: Added Credential Tagging Support 2024-10-30 14:40:02 -04:00
johnnyq
58738debc6 Fix for users on DB 1.5.9 updating to 1.6.0 check to see if login_folder_id exists before adding it and Makming sure all ticket statuses are a number 2024-10-30 12:13:26 -04:00
johnnyq
219028c6d1 Updated Anon and Archive Function to archive the user and set names to Archived - UnixTimeStamp 2024-10-30 11:41:39 -04:00
johnnyq
11f68a59f3 Fix Archive Contact, removed unused fields 2024-10-30 11:26:07 -04:00
johnnyq
990335838e Added First Asset History Item, Asset Created, also delete asset history when you delete an asset 2024-10-29 19:00:02 -04:00
johnnyq
c08ac330be FEATURE: Credential Tags Initial DB Structure Commit 2024-10-29 18:33:17 -04:00
johnnyq
926a796602 Replaced logs, with asset_history in client assets 2024-10-29 18:23:05 -04:00
johnnyq
f52beed3d0 Added asset history table 2024-10-29 18:16:28 -04:00
johnnyq
c3379a5576 Increase DB Field Sizes 2024-10-29 15:41:10 -04:00
johnnyq
ab3d915bdc Mail Ticket Parser Fix: Allow Unencrypted IMAP connections 2024-10-29 13:36:30 -04:00
johnnyq
af123d3978 Fix Only show Document Folders, Removed Create Subfolder as this is now merged into Create Folder Dependign on what folder you are in 2024-10-28 22:12:45 -04:00
johnnyq
1d4165f41a Updated Bulk Document Move to include the indented folder and sub folder structure 2024-10-28 18:47:43 -04:00
Johnny
bc211f3824 Merge pull request #1095 from itflow-org/tidy-28
Tidying
2024-10-28 18:31:13 -04:00
Johnny
5f708f6003 Merge pull request #1094 from itflow-org/force-mfa
Force setup of MFA on login
2024-10-28 18:21:32 -04:00
johnnyq
cb611a764b Rework Move Document to not utilize a function 2024-10-28 18:05:45 -04:00
johnnyq
580e6a55ce Remove garbage code 2024-10-28 17:54:33 -04:00
johnnyq
77fce6a69d FEATURE: Implemented SubFolders within Documents UI 2024-10-28 17:53:44 -04:00
wrongecho
91c01d2cdb Tidying 2024-10-28 21:16:15 +00:00
wrongecho
334829c23e Force setup of MFA on login 2024-10-28 21:01:55 +00:00
johnnyq
9491643a4b Fix issue where sometimes the due date is invisible when viewing an invoice from the guest link 2024-10-28 13:32:41 -04:00
johnnyq
56feefe612 Remove Create Ticket from Template dropdown in Contact Details 2024-10-26 19:20:06 -04:00
johnnyq
5094453550 Define processed and unprocessed email count for logging 2024-10-26 13:48:54 -04:00
johnnyq
41f2177788 Ticket Email Parser Add Debugging after each run to calculate emails processed and unprocessed including the execution time of the script 2024-10-26 13:42:48 -04:00
johnnyq
d3cca2e633 Fix Invalid var 2024-10-26 13:21:13 -04:00
johnnyq
07d89ad09d Re-add Functions after test 2024-10-26 13:14:56 -04:00
johnnyq
01db0ddc3c Do not use the autoloader to load php mime mail parser 2024-10-26 13:09:21 -04:00
johnnyq
46572afc77 Mail Parser: Use UIDs instead of Message Sequence Numbers, this could potentially fix the issue of repeating tickets 2024-10-26 13:06:53 -04:00
johnnyq
6c402942e4 Mail Parser: Better way to set important flag then remove seen flag 2024-10-26 12:48:41 -04:00
johnnyq
72eaf3d269 Email Ticket Parser: Fix Flagged Email from getting marked as read, use imap_store function to flag emails not processed as this function keeps the email as unread 2024-10-26 12:26:03 -04:00
johnnyq
71f7fa2683 Started working on Archiving Contact Options Dialog for when archiving a contact 2024-10-26 11:58:04 -04:00
johnnyq
ae561d3195 FEATURE: New Invoice Status Non-Billable 2024-10-25 14:33:12 -04:00
johnnyq
58f995ed37 Fix Invalid Field change in cron.php causing cron to break 2024-10-24 22:30:16 -04:00
johnnyq
aa2e0ed5c5 carry over the Task Completion estimate When creating a new ticket from a template 2024-10-23 14:13:05 -04:00
johnnyq
636c74dbb0 FEATURE: Added Task Completion Estimate to the UI 2024-10-23 14:06:41 -04:00
johnnyq
dffc97859d FEATURE: Estimated Time Completion on Tasks - Phase 1 DB Structure update 2024-10-23 13:28:46 -04:00
johnnyq
808fdf5f76 When Archiving, Unarchiving, Deleting and Bulk Actions also update the associated user as well 2024-10-23 12:40:32 -04:00
johnnyq
55c9c76194 Fix Self Password Reset via Portal 2024-10-23 00:46:02 -04:00
Johnny
0a63ed2cd6 Merge pull request #1091 from itflow-org/bugfix-tck-schd-notif
Bugfix: Ticket scheduling emails
2024-10-23 00:29:00 -04:00
johnnyq
f2dedbf8e8 Cmplete Migrate Contact Users to Users 2024-10-22 23:53:14 -04:00
johnnyq
ee19e1b967 Check for user type of during login and set a temp if condition on check_login.php to see if user_type field exists and query user based off that result, the condition will be removed at a later date 2024-10-22 17:06:18 -04:00
johnnyq
ba64a179c6 Add contact_user_id to contacts table to associate a contact with a user 2024-10-22 16:34:08 -04:00
wrongecho
30738ed9fd Bugfix: Ticket scheduling emails
Scheduling a ticket should only send an email if config_ticket_client_general_notifications is enabled
2024-10-22 19:42:40 +01:00
johnnyq
499f9456f8 DB Update add user_role_type to differentiate between itflow users, client users and api permissions 2024-10-22 14:08:50 -04:00
johnnyq
48b306452c Phase 1 - Combining contact logins with users table - Add User Type field to users table 2024-10-22 13:47:44 -04:00
johnnyq
ea494a8b5c Fix FullCalendar Links 2024-10-21 13:53:40 -04:00
johnnyq
b456caa129 Bump FullCalendar from 6.1.10 to 6.1.15 2024-10-21 13:48:29 -04:00
johnnyq
b1de0c86f6 Fix Broken Client Details page 2024-10-21 13:36:44 -04:00
johnnyq
47c6c70c67 Bump DataTables from 2.0.8 to 2.1.8 2024-10-21 12:29:05 -04:00
johnnyq
a93187fdf8 Add Number of Tasks in the ticket template selection when creating a ticket 2024-10-20 14:49:50 -04:00
johnnyq
c214c12d00 FEATURE: Auto Populate Create Ticket when selecting a template, remove old ticket mail parser code 2024-10-20 14:34:09 -04:00
johnnyq
061e912123 Tidy 2024-10-20 12:48:14 -04:00
johnnyq
fccc8ab8fd Fix adding a device to a rack: Unit Start number cannot be higher than Unit End number 2024-10-19 16:34:03 -04:00
johnnyq
c32c47785e Fix notification action log path for cron successully run 2024-10-19 16:13:36 -04:00
johnnyq
ab9ae71ac7 Do not resanitize subject after passed to the create/update ticket function as its sanitized before passing to the functon, this caused unessesary slashes in the subject line if sql escape chars were used 2024-10-19 15:56:26 -04:00
johnnyq
051fdda9a8 Bump TinyMCE from 7.3.0 to 7.4.1 2024-10-18 18:08:39 -04:00
johnnyq
36af07c837 Bump PHPMailer from 6.9.1 to 6.9.2 2024-10-18 18:02:09 -04:00
johnnyq
1e964fe90a Remove WEBKLEX-PHP_IMAP Libraries 2024-10-18 17:44:43 -04:00
johnnyq
6cd5290f4c Migrate cron_ticket_email_parser.php back to using php-mime-mail-parser libraries and php extensions php imap and php Mailparse while still keeping the new functionality from the webklex php-imap version of this script. There were wayyy to many dependcies with WebKlex and ran into way too many problems. This delays OAAUTH2 until we can find a better solution 2024-10-18 17:29:45 -04:00
johnnyq
02e3ca3f52 Wording 2024-10-18 16:12:11 -04:00
johnnyq
64a3f8f1cc UI Update of Client Add / Edit Modals - Moved Lead Checkbox next to Name, Moved Shortned Name and tags to main tab 2024-10-18 16:00:41 -04:00
johnnyq
b15a175044 When creating Ticket from main ticket listing and not the client listing make Client Selectable first 2024-10-18 15:42:09 -04:00
johnnyq
8dca7bc183 Simplify Ticket Creation and Edit Model by removing unessesary tabs and combining fields to fewer tabs 2024-10-18 15:40:17 -04:00
johnnyq
6c1c5d6523 Simplify Ticket Template Creation by putting all fields into 1 modal tab instead of multiple and removing the ability to ass tasks via add ticket template, this should be done in the details 2024-10-18 15:11:54 -04:00
johnnyq
d01d912154 Move logout to a file logout.php in /post fixes issue where one cant logout if in admin section, also redirect to login page with or without login key if set 2024-10-18 00:12:08 -04:00
johnnyq
fe86ca0dd7 Bump php-mime-mail-parser from 8.0 to 8.0.4 2024-10-17 23:33:53 -04:00
johnnyq
77ed7aa7ff Updated new cron mail parser 2024-10-17 23:15:39 -04:00
johnnyq
646b94d8ab Initial work on new Mail Parser that uses the old php imap libraries and not the new webklex 2024-10-17 20:55:23 -04:00
johnnyq
878e145550 When Editing Recurring Expense use the Next Month Date instead of selecting the month that the recurring expense was initially created 2024-10-15 18:28:53 -04:00
johnnyq
bfd5973be8 Fix Bulk Actions by removing input form requirements for Create asset ticket as they share one giant form 2024-10-12 15:38:43 -04:00
johnnyq
5bc260e0c0 Wording Fix 2024-10-11 12:31:55 -04:00
johnnyq
0fc6a2f02c Keep contact contact within the media body 2024-10-10 18:13:35 -04:00
johnnyq
4289ba3026 Display Link Location Name in the Custom Links Listing 2024-10-10 17:37:53 -04:00
johnnyq
22086bef24 Optimize Guest Post to only selecting the required Database Table Fields and Tidy 2024-10-10 17:01:40 -04:00
johnnyq
0954579216 rename admin to administration and use user-shield icon 2024-10-10 16:57:27 -04:00
johnnyq
e37df8bf4b Fix Custom Link Order to ASC instead of DESC as well 2024-10-10 16:53:31 -04:00
johnnyq
ab1c5ac631 FEATURE: Custom Links can be added to the Top Nav Note must have icons 2024-10-10 16:51:00 -04:00
johnnyq
eaab9b75de Send InApp Notification when Quotes have been Declined or Accepted, also show status under guest url 2024-10-10 15:28:30 -04:00
johnnyq
2b2840a43c When Adding a Ticket Template to a Project Template use the Template name and not the subject also optimized Query 2024-10-10 14:42:57 -04:00
johnnyq
4963f2f385 Add Ticket Category to New Ticket and Bulk add Tickets through assets 2024-10-10 01:38:21 -04:00
johnnyq
a9ebc1395c Fix Repeating ticket number when adding bulk tickets via assets 2024-10-10 01:08:12 -04:00
johnnyq
70ae55eacb Tidy 2024-10-09 15:49:42 -04:00
johnnyq
134f4f9ad3 FEATURE: Create Ticket for each asset in Bulk 2024-10-09 15:24:40 -04:00
johnnyq
bbdc83e57e Add Cron Execution Notify placeholder to notifications 2024-10-09 14:01:42 -04:00
johnnyq
ef3c87f5d9 Added some headings to notifications to help seperate them 2024-10-09 13:25:34 -04:00
johnnyq
6fa3aea520 Add placeholder for ITFlow Update Notification to Notifications Settings 2024-10-09 13:15:53 -04:00
johnnyq
51578cd743 Update Wording 2024-10-09 13:12:35 -04:00
johnnyq
66a28685a3 Add Place Holders for Certificate, Asset Warranty and Shared Item View to the Notifications settings, also removed 120 Days from the Notifications Settings page 2024-10-09 13:10:52 -04:00
johnnyq
246878a32f Create Notification if a shared item was viewed 2024-10-09 12:56:55 -04:00
johnnyq
ce9a0b903f Added Shared Item Recipient to Files, Documents and Credentials 2024-10-09 12:36:22 -04:00
johnnyq
d0769b9f6b Added Shared Item Recipient Email to the Shared Items list in overview 2024-10-09 12:13:26 -04:00
johnnyq
f1a90156c2 Expose more Admin Options in the Side menu without having to expand sub menus 2024-10-08 18:44:08 -04:00
Johnny
b0c592831e Merge pull request #1090 from itflow-org/tidy
Tidying
2024-10-08 18:24:06 -04:00
wrongecho
b9e37d4052 Tidying
- Move more things to new permissions system
- Deduplicate assets post logic into model
- Swap out some "SELECT *" queries when only a couple of rows are actually needed
2024-10-08 23:10:27 +01:00
wrongecho
987cd59764 Tidying
- Move more things to new permissions system
- Deduplicate assets post logic into model
- Swap out some "SELECT *" queries when only a couple of rows are actually needed
2024-10-08 23:08:05 +01:00
johnnyq
ac3ab1dedb Add Notes about setting up cron, Add ITFlow Docs Custom Link when you setup ITFlow 2024-10-08 17:49:41 -04:00
johnnyq
7eee69366a Show Example of what Phone masking Enable vs Disabled 2024-10-08 16:13:03 -04:00
Johnny
e90200aebe Merge pull request #1089 from itflow-org/bugfix-template
Ticket templates - edit bugfix
2024-10-07 11:37:14 -04:00
wrongecho
ff954b0060 Ticket templates - edit bugfix 2024-10-07 12:18:09 +01:00
wrongecho
3c73c4d34a README.md - Add Sponsor: F1 For Help 2024-10-07 07:49:24 +01:00
Johnny
4309fcc48c Merge pull request #1088 from itflow-org/doc-revisions-updatedby
Docs - Show user updated by in revisions
2024-10-06 21:36:47 -04:00
Johnny
893eb16819 Merge pull request #1087 from itflow-org/invoice-pay-addr
Invoices - Send email notif when paid
2024-10-06 21:36:13 -04:00
Johnny
e5472e2cb1 Merge pull request #1086 from itflow-org/portal-login-logs
Portal login logs
2024-10-06 21:35:53 -04:00
Johnny
315a90a913 Merge pull request #1085 from itflow-org/debug
Add notes to debug page
2024-10-06 21:35:38 -04:00
wrongecho
ab18005d72 Docs - Show user updated by in revisions 2024-10-06 21:43:07 +01:00
wrongecho
a9de75aa99 Invoices - Send email notif when paid 2024-10-06 20:59:54 +01:00
Marcus Hill
377c5952d7 Portal login logs
- Mention contact ID in audit log if password is incorrect
- Mention in audit logs if invalid email/auth method
2024-10-06 16:38:48 +01:00
Marcus Hill
afe378d2f3 Add notes to debug page 2024-10-06 16:25:58 +01:00
Johnny
c948ccff5c Merge pull request #1084 from itflow-org/budget-perms
Budget - CSRF + Perms
2024-10-03 16:52:28 -04:00
Johnny
5ea271662b Merge pull request #1083 from itflow-org/tax-report-tidy
Tidy up the tax report + perms
2024-10-03 16:52:18 -04:00
Johnny
3bc9b28712 Merge pull request #1082 from itflow-org/ticket-invoice-tidy
Tidy up the ticket_invoice_add_modal
2024-10-03 16:52:04 -04:00
Johnny
c77246c7f8 Merge pull request #1081 from itflow-org/more-permss
Move account/asset post logic to new permissions system
2024-10-03 16:51:55 -04:00
wrongecho
f8c6a5ef19 Budget - CSRF + Perms 2024-10-03 20:52:37 +01:00
wrongecho
90fb28e32b Tidy up the tax report + perms 2024-10-03 20:42:56 +01:00
wrongecho
5635cd9b8c Tidy up the tax report 2024-10-03 20:41:28 +01:00
wrongecho
e433c819a8 Tidy up the tax report 2024-10-03 20:41:12 +01:00
wrongecho
4d7d9baba8 Tidy up the ticket_invoice_add_modal 2024-10-03 20:25:41 +01:00
wrongecho
18889d228a Move account/asset post logic to new permissions system 2024-10-03 19:42:48 +01:00
Johnny
6d6689e7c5 Merge pull request #1080 from itflow-org/cert-dont-blank
Certificate cron bugfix
2024-10-02 12:34:57 -04:00
Johnny
11230d655f Merge pull request #1079 from itflow-org/custom-actions
Add custom event handler
2024-10-02 12:34:45 -04:00
Johnny
10fab109eb Merge pull request #1078 from itflow-org/cert-perms-model
Certificates - perms and model
2024-10-02 12:30:01 -04:00
wrongecho
63579d5a8f Certificate cron bugfix
Don't try to update certificates if expiry is empty (connection error)
2024-10-02 12:00:56 +01:00
wrongecho
fa6aa4318b tidy 2024-10-02 11:42:30 +01:00
wrongecho
d7b5e0e591 tidy 2024-10-02 11:35:14 +01:00
wrongecho
4a625183fb Certificates - perms and model
Move certificates to the new permissions system
Deduplicate add/edit using a model
2024-10-02 11:26:58 +01:00
wrongecho
1c404b9cf1 Add custom event handler to be triggered by some actions affecting tickets/quotes/invoices/contacts 2024-10-02 11:26:13 +01:00
wrongecho
4e9afd3e6b Certificates - perms and model
Move certificates to the new permissions system
Deduplicate add/edit using a model
2024-10-02 08:32:42 +01:00
johnnyq
c352f6e3cb Do not show Send Invoice or Add Payment if Invoice Amount is 0 2024-10-02 01:04:59 -04:00
johnnyq
6a55abaf50 Fix Error 500 when adding or editing network 2024-10-01 22:50:30 -04:00
Johnny
1f846f4164 Merge pull request #1076 from cybershieldms/ticket-features
cron_ticket_email_parser.php - send new ticket opened email to unknown clients
2024-10-01 14:49:56 -04:00
johnnyq
7ccfad80de Add Client name to the paid notification when client pays via stripe 2024-10-01 12:09:42 -04:00
Craig Hodges
d506790135 Merge branch 'itflow-org:master' into ticket-features 2024-09-30 19:08:30 -05:00
Craig Hodges
da3a6d636e Changed regex to only exclude from postmaster or daemon. 2024-09-30 19:07:01 -05:00
Johnny
b318872ba8 Merge pull request #1077 from itflow-org/projects
Projects fixups
2024-09-30 17:53:28 -04:00
wrongecho
e0b088b76b Projects
- Add archive and unarchive ability
- Improve logic around Open > Close > Archive > Delete
- Change to new perms system
- Tidy and formatting
- TODO: CSRF
2024-09-30 21:31:04 +01:00
wrongecho
10a223b5b8 Projects
- Add archive and unarchive ability
- Improve logic around Open > Close > Archive > Delete
- Change to new perms system
- TODO: CSRF
2024-09-30 21:27:42 +01:00
wrongecho
81844cea2e Update credential.Php - model fix path 2024-09-30 18:47:22 +01:00
Craig Hodges
bd5621ce1e Sends new ticket notifications to unknown (client id = 0) including logic to not process e-mail bounce messages. Fixed ticket description missing from new ticket notifications to others ().Added e-mail From: display name () to beginning of ticket description. 2024-09-29 23:46:45 -05:00
Johnny
7945d8b998 Merge pull request #1075 from itflow-org/tck-eml-urls
Add guest ticket URL to emails
2024-09-29 21:14:48 -04:00
wrongecho
478d81b0f9 Add guest ticket URL to emails 2024-09-29 22:00:15 +01:00
wrongecho
a414f279b1 Fix admin nav modules 2024-09-29 21:35:33 +01:00
Johnny
13d9d01e22 Merge pull request #1074 from itflow-org/more-perms
Refactor POST handling
2024-09-29 14:39:30 -04:00
Marcus Hill
0c0cf2f427 Refactor POST handling.
- Split into admin and user handlers, each admin page gets its own file now
- Enforce role access once for admin POST requests
- Automatically load POST logic for admin-based requests based on the referring page, otherwise automatically load all user request logic
- Add support for using custom POST handlers
2024-09-29 19:08:59 +01:00
Marcus Hill
6363d265ca Refactor POST handling.
- Split into admin and user handlers, each admin page gets its own file now
- Enforce role access once for admin POST requests
- Automatically load POST logic for admin-based requests based on the referring page, otherwise automatically load all user request logic
- Add support for using custom POST handlers
2024-09-29 19:02:28 +01:00
Johnny
e911bde66c Merge pull request #1073 from itflow-org/stripe-note
Add note re payment providers
2024-09-29 10:48:06 -04:00
Marcus Hill
99a6562d1e Add note re payment providers 2024-09-29 12:18:41 +01:00
Johnny
635b1f903a Merge pull request #1072 from itflow-org/post-perms-maint
More enforcing user permissions
2024-09-29 00:30:25 -04:00
wrongecho
928d723a77 More enforcing user permissions 2024-09-28 20:07:54 +01:00
wrongecho
654b590033 More enforcing user permissions 2024-09-28 20:04:33 +01:00
Johnny
e94aae7940 Merge pull request #1071 from ThaMunsta/download-filename-fix
Update expenses.php
2024-09-26 16:54:43 -04:00
johnnyq
cbcb793b64 Remove temp Debugging snippet for calculating recurring expenses 2024-09-26 16:52:17 -04:00
johnnyq
aca45d39aa Fix Monthly Recurring Expenses always showing 0 in Dashboard 2024-09-26 16:50:32 -04:00
ThaMunsta
e3df5c02bf Update expenses.php
Downloaded filename was hardcoded and assumed only ever PDF would be uploaded and downloads any jpg/png as a PDF filename. Fix takes into account the database filename and extension and updated iconography for more general file indication.
2024-09-25 22:57:31 -04:00
johnnyq
0cd7e7a9f5 Fix Notification Number 2024-09-25 20:25:34 -04:00
johnnyq
7d0c9b738f Fix Icons 2024-09-25 19:26:28 -04:00
johnnyq
f245d1a7b4 Revert notification Icon and badge color 2024-09-25 19:22:02 -04:00
johnnyq
2290e7ba32 UI Top Nav: Reposition Notification badge count and change color to warning 2024-09-25 17:07:17 -04:00
johnnyq
4f0e74520c Removed Destructive delete option in assets, Added Delete to assets if archived 2024-09-24 16:17:02 -04:00
johnnyq
c5e9d02edf UI Update Client Vendors: Give Description its own column, add account number if exists below Vendor Name and fix copy website button submitting instead of copying the site 2024-09-24 13:34:22 -04:00
Johnny
8e9654927a Merge pull request #1070 from itflow-org/email-parse-eml
Email parser - bugfix saving the original message
2024-09-22 01:33:00 -04:00
wrongecho
eb831b5ca1 Email parser - bugfix saving the original message 2024-09-21 16:59:38 +01:00
johnnyq
3c6b9ea206 Added Archive Button for Vendors 2024-09-21 11:47:54 -04:00
Johnny
d33e5cd08d Merge pull request #1069 from itflow-org/client-http-header-loginfail
Show a 401 header for unsuccessful portal logins
2024-09-21 11:27:16 -04:00
Johnny
c5575e749e Merge pull request #1068 from itflow-org/http-header-blocked
Show a 429 header when logins are blocked
2024-09-21 11:27:08 -04:00
Johnny
f1ce116fb5 Merge pull request #1067 from itflow-org/encoding
Detect and convert non-UTF8 encoding as part of input sanitization
2024-09-21 11:27:00 -04:00
wrongecho
0e4f57eaed Show a 401 header for unsuccessful portal logins 2024-09-21 13:45:47 +01:00
wrongecho
19dc33a836 Show a 429 header when logins are blocked 2024-09-21 13:08:30 +01:00
wrongecho
b509090530 Detect and convert non-UTF8 encoding as part of input sanitization 2024-09-21 11:07:53 +01:00
johnnyq
c5e13fdba6 Fix Dead Link 2024-09-20 21:45:23 -04:00
Johnny
eff4c9c725 Merge pull request #1066 from itflow-org/updates-db-first
Show DB updates before git updates
2024-09-20 20:02:38 -04:00
johnnyq
04f0905397 Added sort order visual cues to every listing 2024-09-20 20:00:21 -04:00
wrongecho
9d0f553422 Update CODE_OF_CONDUCT.md
rm discord
2024-09-20 23:32:05 +01:00
wrongecho
2e74e1756c Show DB updates before git updates 2024-09-20 21:51:51 +01:00
johnnyq
f9897e811c Added Sort order visual cue to invoices 2024-09-20 16:45:45 -04:00
wrongecho
3c413ae0be Merge pull request #1065 from itflow-org/revert-admin-check
Temp revert new admin check to allow DB updates
2024-09-20 21:42:03 +01:00
wrongecho
b6e4d6dd34 Temp revert new admin check to allow DB updates 2024-09-20 21:40:05 +01:00
Johnny
26e4dc5fb3 Merge pull request #1064 from itflow-org/roles-enforce-2
Permissions - clients and tickets
2024-09-20 16:16:59 -04:00
johnnyq
b658cf09dc Opps settings_localization_array.php should have not have amin_ prepended reverting 2024-09-20 16:15:05 -04:00
johnnyq
3fff623674 Add visual sort order cues to quotes 2024-09-20 16:13:38 -04:00
wrongecho
23f776efa3 Permissions - clients and tickets
Enforce new permissions model in clients and tickets
2024-09-20 21:10:24 +01:00
johnnyq
2d13dab61e Add Visual sort cues to Recurring Tickets, and projects 2024-09-20 16:02:59 -04:00
johnnyq
91e4dd5dba Add Recurring Invoices, Tickets, Expenses instead of just Recurring back to the side navs, makes for easier navigation 2024-09-20 15:45:37 -04:00
johnnyq
42ffa9b4ab Move /post/settings.php into /post/admin.php 2024-09-20 15:23:50 -04:00
johnnyq
3c4275e2c6 Preappend admin_ to the settings files for consistency 2024-09-20 15:14:28 -04:00
Johnny
9c92831f70 Merge pull request #1062 from ThaMunsta/rep-tk-client-fix-round2
Update report_ticket_by_client.php
2024-09-20 15:00:38 -04:00
Johnny
dd1994e881 Merge pull request #1061 from itflow-org/rec-delete
Recurring invoices - hide delete when active
2024-09-20 15:00:12 -04:00
Johnny
49341782a9 Merge pull request #1059 from itflow-org/func-acc-tidy
Tidy unused accounting functions
2024-09-20 14:57:19 -04:00
ThaMunsta
c02386f439 Update report_ticket_by_client.php
Sorry I thought I had this sorted out the first time but the monthly report section was still wrong.
2024-09-20 14:51:18 -04:00
johnnyq
847870a45a Fixed undefined sort var by using php isset function in the filter header, added sort order icons to tickets 2024-09-20 14:35:26 -04:00
wrongecho
ce3264db04 Recurring invoices - hide delete when active
Adjust recurring invoices so they have to be made inactive to delete them
2024-09-20 19:33:32 +01:00
wrongecho
eeac235c1d Tidy unused accounting functions 2024-09-20 19:24:28 +01:00
Johnny
e714b80af2 Merge pull request #1058 from ThaMunsta/settings-online-payment-fix
Update settings_online_payment.php
2024-09-20 14:11:43 -04:00
ThaMunsta
65b4f97e37 Update settings_online_payment.php
Removed account type as I understand that isn't used anymore.
2024-09-20 14:07:25 -04:00
johnnyq
8498f01f6c Rename pagination_head.php to filter_header.php as this is a more suitable name for its function 2024-09-20 13:58:30 -04:00
Johnny
c9f3d17f12 Merge pull request #1057 from itflow-org/roles-enforce-1
Custom Roles & Permissions
2024-09-20 13:29:31 -04:00
wrongecho
3d1e333ff0 Custom Roles & Permissions
Initial enforcement of custom roles & permissions - only on some pages via GET for now.
2024-09-20 18:17:59 +01:00
wrongecho
3c9995cb01 Custom Roles & Permissions
Initial enforcement of custom roles & permissions - only on some pages via GET for now.
2024-09-20 18:09:00 +01:00
johnnyq
55c832bde6 Feature: Inititial functionality for sort order icons on table headers 2024-09-20 13:01:41 -04:00
wrongecho
10fafacefe Custom Roles & Permissions
Initial enforcement of custom roles & permissions - only on some pages via GET for now.
2024-09-20 17:59:49 +01:00
Johnny
5a20c7fdbe Merge pull request #1056 from itflow-org/client-import
Client import - resiliency
2024-09-20 11:43:42 -04:00
Johnny
5eb9f3f5ee Merge pull request #1055 from itflow-org/tag-delete-fix
Fix deleting tags
2024-09-20 11:42:54 -04:00
wrongecho
0886a6c41d Client import - resiliency
- Add some resiliency to the client import function to better account for blank fields (may also fix some import errors)
- Fix the default settings page not loading due to the removal of account types
2024-09-20 11:38:15 +01:00
wrongecho
677d80d770 Fix deleting tags 2024-09-20 10:44:22 +01:00
Johnny
1390ca07f9 Merge pull request #1054 from ThaMunsta/report-fix
Update mysql query for report_ticket_by_client.php
2024-09-20 00:26:05 -04:00
ThaMunsta
2898084851 Update mysql query for report_ticket_by_client.php
Fix empty report
2024-09-19 23:51:17 -04:00
johnnyq
547f9282d3 Fix Dead link to domains in dashboard 2024-09-19 14:21:06 -04:00
johnnyq
8c4b021168 Added UI elements for the new custom link fields, new tab, order and location 2024-09-18 21:25:59 -04:00
johnnyq
0a1ab84140 DB Structure Update for additonal feature of custom links include nav location, order and open in new tab option 2024-09-18 18:22:37 -04:00
johnnyq
4dd24531cb Fix Main, user account, reports and admin side nav bars to prevent text overflow when collapsed now only show back button when collapsed 2024-09-18 17:52:19 -04:00
johnnyq
5f46536a85 Update Secure Message with the intended recipient, also added a confidential disclosure method to the email and Secure message link, added number of views left and expire date, and other minor ui updates 2024-09-18 17:22:39 -04:00
johnnyq
415f536cd7 DB Structure Update: Remove Account Types, Add Account Description Field, Change is admin from INT to TINYINT for performance 2024-09-18 16:30:55 -04:00
Johnny
62a2ed7430 Merge pull request #1052 from itflow-org/perms-2
Permissions overhaul - Define permissions in the database
2024-09-18 14:20:05 -04:00
johnnyq
eaee42f1f5 Add the ability to edit ticket reply types to puiblic or internal, note there is no client email option here 2024-09-17 14:55:02 -04:00
johnnyq
7b2566b654 Remove all reminense of Account Types next is deleting the DB Tables for account types 2024-09-17 13:59:58 -04:00
johnnyq
10ecb8b7c9 Phase 2 Removal of Account Types: Removed files 2024-09-17 13:32:37 -04:00
johnnyq
4286588446 Initial Removal of Account Types: Removed from Admin side nav 2024-09-17 13:29:31 -04:00
johnnyq
a2766bd67f Allow Techs to remove units from a rack 2024-09-17 13:24:08 -04:00
johnnyq
273483151f Add Expiration Date Column to Software Licenses 2024-09-17 13:18:46 -04:00
johnnyq
7e9b924927 Allow Columns to be sorted in Recurring Tickets 2024-09-17 12:45:47 -04:00
johnnyq
b251b7a15f Remove 120 Day Notifications for Domain, Cert, Warranty 2024-09-16 18:16:13 -04:00
wrongecho
0d0483b0a4 Update README.md
Move 'Built With' to docs
2024-09-15 00:18:12 +01:00
wrongecho
147df7f292 Update SECURITY.md
Add badge
2024-09-15 00:10:42 +01:00
wrongecho
970efa7731 Merge pull request #1053 from itflow-org/tidy
Tidying
2024-09-14 23:58:09 +01:00
wrongecho
4a6d312ea0 Tidying 2024-09-14 23:50:05 +01:00
wrongecho
5dc9f47799 Tidying 2024-09-14 23:47:19 +01:00
wrongecho
c65db3431d Tidying 2024-09-14 23:43:54 +01:00
wrongecho
ee9a2789e9 Permissions overhaul - Define permissions in the database
2nd attempt at this one!
Similar to #1008 but separately defining the roles, modules and associated permissions in the database.
Also has admin being a defined role automatically having full access.

Parent issue: #530
2024-09-14 19:14:35 +01:00
wrongecho
c7340ca0d4 Permissions overhaul - Define permissions in the database
2nd attempt at this one!
Similar to #1008 but separately defining the roles, modules and associated permissions in the database.
Also has admin being a defined role automatically having full access.

Parent issue: #530
2024-09-14 18:55:00 +01:00
wrongecho
271019b16b Permissions overhaul - Define permissions in the database
2nd attempt at this one!
Similar to #1008 but separately defining the roles, modules and associated permissions in the database.
Also has admin being a defined role automatically having full access.

Parent issue: #530
2024-09-14 18:29:44 +01:00
johnnyq
6975d6ef44 Fixed Broken Link to all assets on the dashboard, added link for all domains, updated all domains report to highlight domains, expired and expiring 2024-09-13 14:35:46 -04:00
johnnyq
07df444561 Added Bulk Delete Expenses Option 2024-09-13 13:52:47 -04:00
johnnyq
6bb56f7c51 UI Improvement to Domains, Certificates and Licenses listing: Updated Expire to show TimeAgo as well and to highlight table rows red if expiring within 14 Days, yellow for 90 days and gray if expired also updated side badges to refelect the badge color as well 2024-09-13 13:31:18 -04:00
johnnyq
208e56e784 Added Additonal Export Options to Expenses Including Account, Vendor and Category, removed CSV Warning on Export Model 2024-09-13 12:32:16 -04:00
johnnyq
e0ca3f15a8 Added Ubuntu, Fedora and DuckDuckGo to user agents 2024-09-12 12:42:15 -04:00
johnnyq
168a298a55 Dont Show windows version as this is inaccurate, show just Windows for OS, fix Opera String, and removed iPod 2024-09-12 12:28:24 -04:00
Johnny
86f1beb687 Merge pull request #1051 from itflow-org/allow-clear-avatar
Allow users to clear their avatar
2024-09-12 12:16:12 -04:00
Johnny
412eed7554 Merge pull request #1050 from itflow-org/ticket-reply-layout
Adjust ticket reply layout
2024-09-12 12:16:02 -04:00
johnnyq
f2a3299ef0 Update getOS Function to include Windows 11, Fix get Web Browser when using Microsoft Edge 2024-09-12 12:13:51 -04:00
wrongecho
80884bab47 Allow users to clear their avatar 2024-09-12 15:34:51 +01:00
wrongecho
77b7250703 Adjust ticket reply layout 2024-09-12 15:04:52 +01:00
Johnny
5ef8bd5720 Merge pull request #1049 from itflow-org/api
API Tidy
2024-09-11 18:05:55 -04:00
Johnny
7324c21c1f Merge pull request #1047 from itflow-org/share-modal-anyone
Guest Link Sharing
2024-09-11 18:05:45 -04:00
Johnny
f0456705ca Merge pull request #1046 from itflow-org/network-show-id
Show network ID when editing items
2024-09-11 18:05:32 -04:00
wrongecho
f3e9c9c867 API Tidy
- Remove old client ID queries, these are now built into the API keys. If a key has access to all clients, a client ID can be provided in the query.
- Small fixes to assets URI lookup
- Add read endpoint for vendors
2024-09-11 18:06:45 +01:00
wrongecho
0ad0c2c955 Guest Link Sharing
- Allow links to be emailed to non-contacts by typing their email
- Don't show archived contacts on the dropdown
- Removed unused email send check (handled via queue now)
2024-09-11 17:12:30 +01:00
wrongecho
8df3896f69 Show network ID when editing items
Shows the database object ID when editing networks on the Notes tab, to allow for use in the API.
2024-09-11 11:17:54 +01:00
Johnny
2e202df3ff Merge pull request #1045 from itflow-org/show-db-ids
Show object ID when editing items
2024-09-10 21:30:46 -04:00
Johnny
e8c27e9234 Merge pull request #1043 from itflow-org/email-send-tidy
Email Send - Tidy
2024-09-10 21:25:07 -04:00
Johnny
c863b8b033 Merge pull request #1042 from itflow-org/rm-stripe-client-pays
Stripe - Client pays removal
2024-09-10 21:22:33 -04:00
Johnny
9a53f65cdf Merge pull request #1041 from itflow-org/next-num
Ticket next number should not be lower than the last ticket number
2024-09-10 21:18:55 -04:00
Johnny
deb9ae0065 Merge pull request #1040 from itflow-org/tickets-export
Add resolved date to ticket export csv
2024-09-10 21:18:40 -04:00
wrongecho
586f0f1c57 Show object ID when editing items
Shows the database object ID when editing on the Notes tab, to allow for use in the API.
Needs further work as we move things to dynamic modals for editing.
2024-09-10 23:04:12 +01:00
wrongecho
517e8d42f0 Email Send - Tidy
- Enhance error logging in cron_mail_queue.php
- Prevent invalid sender addresses
- Prevent potential SQL injections in the sender name (admin settings and should be sanitized before being sent to queue anyway)
2024-09-10 22:34:20 +01:00
wrongecho
549868e3bf Stripe - Client pays removal
- Complete removal of client paying Stripe fees feature
- Add PHP error logging to the Stripe payment process
2024-09-10 20:26:16 +01:00
wrongecho
9e4f9cbd74 Ticket next number should not be lower than the last ticket number to prevent collisions 2024-09-10 19:20:06 +01:00
wrongecho
ce1fc04468 Add resolved date to ticket export csv 2024-09-10 19:14:47 +01:00
wrongecho
24cc593162 Add resolved date to ticket export csv 2024-09-10 19:13:13 +01:00
johnnyq
760f07e665 Removed old comment 2024-09-09 18:06:59 -04:00
johnnyq
05b50519b1 Remove the hidden form name for bulk merge and just leave the id 2024-09-09 17:55:08 -04:00
johnnyq
27dbbbb660 Fixed Bulk Merge issues by renaming ticket_id name var in bulk merge modal 2024-09-09 17:49:53 -04:00
Johnny
765850b22f Merge pull request #1038 from itflow-org/csrf
Enforce CSRF for post/asset and post/account
2024-09-09 13:14:28 -04:00
wrongecho
a10ff7963a Update README.md
Add supporters to readme
2024-09-09 10:41:18 +01:00
wrongecho
64684e1248 Enforce CSRF for post/asset and post/account
Tiny bit of tidying
2024-09-08 22:52:38 +01:00
Johnny
d1410ef967 Merge pull request #1037 from itflow-org/tech-loc-perms
Allow techs to manage locations
2024-09-07 12:05:11 -04:00
Johnny
6cbc4c584e Merge pull request #1035 from itflow-org/document-portal-visibility
Add ability to choose whether document is visible in client portal
2024-09-07 11:35:06 -04:00
wrongecho
6b850553cc Allow techs to manage locations 2024-09-07 12:25:19 +01:00
wrongecho
43d6847126 Fix images in docs not showing in client portal 2024-09-07 11:51:27 +01:00
wrongecho
40c400240f Add ability to choose whether document is visible in client portal 2024-09-07 11:21:36 +01:00
Johnny
c20f9942f1 Merge pull request #1034 from itflow-org/add-db-docs-client-visible
Docs - DB Structure to hide from client portal
2024-09-06 22:08:48 -04:00
johnnyq
903bd47f5a Allow Bulk Adding tickets to a Project from the Main Tickets Listing Page 2024-09-06 18:44:53 -04:00
johnnyq
09f2072d27 Add Client Field to Project Tickets, combine Ticket Number and Subject to 1 column 2024-09-06 18:18:41 -04:00
johnnyq
fdd8faf46a Included the Project Prefix and Number in Project Details 2024-09-06 18:08:55 -04:00
johnnyq
99c6321fbb Do not require Client for Projects, allow to add multiple tickets at once when adding tickets to a project 2024-09-06 17:53:35 -04:00
wrongecho
7edf03f79f Add DB Structure that will allow hiding specific docs from the client portal 2024-09-06 22:12:20 +01:00
johnnyq
b605f62175 In client overview Expiring / Expired / Retiring / Retired Asset links now point to the asset details page when clicked 2024-09-06 16:05:33 -04:00
johnnyq
cf535372f5 Show most recent activity first in client overview 2024-09-06 15:55:55 -04:00
johnnyq
4f0c7c5bf7 Added within context to the upcoming expire select box 2024-09-06 15:41:35 -04:00
johnnyq
9dfc7d35cc In the client overview allow the widget Expiring in Days to be Selectable with 7 30 and 90 Day Options 2024-09-06 15:39:00 -04:00
johnnyq
96c59422ea Added Cerificates Expiring/Expired and created a seperate card for expired items under client overview 2024-09-06 15:15:10 -04:00
johnnyq
25bc1d9055 Update Client Overview to Show Recents ASC not DESC so most recent shows first and do not show already Expired Items, will reseve that for a new card 2024-09-06 14:54:46 -04:00
Johnny
68458e49f2 Merge pull request #1033 from itflow-org/en-whitelabel-pt1
Add ITFlow attribution to client portal (1/2)
2024-09-06 14:19:48 -04:00
johnnyq
65f72665ad Update All Assets Report to be more like client assets 2024-09-06 14:18:00 -04:00
wrongecho
208d6cadc4 Add ITFlow attribution to client portal (1/2) 2024-09-06 18:53:48 +01:00
johnnyq
1130c17196 Added purchase date, warranty expire to show addiitonal columns in client assets 2024-09-06 13:26:17 -04:00
johnnyq
41276b55f0 Feature: Custom Links on main side nav 2024-09-05 17:08:43 -04:00
johnnyq
6879300fe8 DB Structure Update for Custom Links 2024-09-05 16:23:35 -04:00
Johnny
d890a27731 Merge pull request #1031 from itflow-org/portal-certs-domains
Portal - allow clients to see certs/domains
2024-09-05 14:24:06 -04:00
Johnny
0185452cf5 Merge pull request #1030 from itflow-org/portal-contact-add
Portal - allow adding contacts
2024-09-05 14:23:52 -04:00
Johnny
323224bc85 Merge pull request #1028 from itflow-org/whitelabel
Initial implementation of whitelabelling (disabled)
2024-09-05 14:23:43 -04:00
Johnny
fa7c99fcc5 Merge pull request #1027 from ssteeltm/fix-paging-hidden
fix pagination hidden
2024-09-05 14:19:26 -04:00
wrongecho
f2c15b4650 Portal - allow clients to see certs/domains 2024-09-05 17:56:42 +01:00
wrongecho
54c8d6d74a Portal - allow adding contacts 2024-09-05 17:26:28 +01:00
wrongecho
91fb4b663a Merge pull request #1029 from itflow-org/portal-updates
Portal - allow editing client contacts
2024-09-05 15:48:46 +01:00
wrongecho
726aaac56a Portal - allow editing client contacts, few tweaks to header incl session notifications 2024-09-05 15:44:06 +01:00
wrongecho
92681a86b3 Portal - allow editing client contacts, few tweaks to header incl session notifications 2024-09-05 15:21:05 +01:00
wrongecho
766813a326 Portal - allow editing client contacts, few tweaks to header incl session notifications 2024-09-05 15:19:52 +01:00
wrongecho
7827522b40 Portal - allow editing client contacts, few tweaks to header incl session notifications 2024-09-05 15:19:17 +01:00
wrongecho
49fddd4f1e Portal - allow editing client contacts, few tweaks to header incl session notifications 2024-09-05 15:16:11 +01:00
wrongecho
a23005babe Portal - show client contacts 2024-09-05 14:05:51 +01:00
wrongecho
3d16431d32 Initial implementation of whitelabelling 2024-09-05 10:44:50 +01:00
wrongecho
4458c87463 Initial implementation of whitelabelling 2024-09-05 10:31:18 +01:00
johnnyq
34b9e2978a Added Physical Location to the additonal asset columns option 2024-09-04 19:39:06 -04:00
johnnyq
1a359a207f Show Additional Columns in Assets 2024-09-04 19:20:32 -04:00
Hugo Sampaio
bb12b02099 Update pagination.php
makes more sense 5 because its the minimum page to set
2024-09-04 18:03:39 -03:00
Hugo Sampaio
b3e6039ec5 fix pagination hidden
fix pagination hidden, when number of rows is smaller than 10
2024-09-04 17:37:20 -03:00
Johnny
0f6ed69008 Merge pull request #1025 from itflow-org/export-validation
Hide export function when module is empty
2024-09-04 11:43:08 -04:00
Marcus Hill
f433535a8b Hide export function when module is empty 2024-09-04 08:52:08 +01:00
Johnny
5b496ff1ac Merge pull request #1024 from itflow-org/rep-tck-by-client
Enhance tickets by client report
2024-09-03 23:27:40 -04:00
Johnny
cebb6e2dd1 Merge pull request #1023 from itflow-org/ticketing-disable-modals-resolved
Do not load most edit modals if ticket is closed, as the data doesn't need to be changed
2024-09-03 23:27:26 -04:00
Johnny
16b08afa75 Merge pull request #1022 from itflow-org/client-export-log
Log when client pack is exported to PDF
2024-09-03 23:27:12 -04:00
Johnny
397765032c Merge pull request #1021 from itflow-org/hide-export-null
Hide the Export function when there are no records
2024-09-03 23:27:01 -04:00
Johnny
3ecd05b963 Merge pull request #1020 from itflow-org/logging-credentials
Log when users navigate to the credentials page for a client
2024-09-03 23:26:16 -04:00
Johnny
281bdcbaf9 Merge pull request #1019 from itflow-org/hide-debug-logins
Logins - Hide debug
2024-09-03 23:25:52 -04:00
Marcus Hill
91db3e2f37 Enhance tickets by client report
Enhancements ot the tickets by client report
- Breakdown tickets by priority (low/med/high)
- Breakdown stats per month, in addition to the existing per-year breakdown
2024-09-03 21:49:52 +01:00
Marcus Hill
d9668f3086 Do not load most edit modals if ticket is closed. 2024-08-30 23:15:48 +01:00
Marcus Hill
00e4e8a24b Log when client pack is exported to PDF 2024-08-30 23:05:04 +01:00
Marcus Hill
aeeac12f11 Log when client pack is exported to PDF 2024-08-30 23:04:20 +01:00
Marcus Hill
cf322b17bc Hide the Export function when there are no records (locations, tickets, vendors) 2024-08-30 22:57:58 +01:00
Marcus Hill
78eead24f7 Log when users navigate to the credentials page for a client 2024-08-30 22:49:18 +01:00
Marcus Hill
a59a6ce2b1 Check that a credential is shared before attempting to display the details to prevent debug error messages 2024-08-30 22:45:03 +01:00
Johnny
8ddb450f6f Merge pull request #1016 from itflow-org/resolved-ticket-report
Change ticket by client report to report on resolved, not closed tickets
2024-08-29 15:34:31 -04:00
Johnny
b42a4db6ca Merge pull request #1015 from itflow-org/rm-legacy-fetchdomainexpiration
Remove the old function for fetching domain expiration
2024-08-29 15:34:21 -04:00
wrongecho
437067fcc7 Change ticket by client report to report on resolved not closed tickets 2024-08-29 20:16:43 +01:00
wrongecho
75846adc28 Remove the old function for fetching domain expiration 2024-08-29 19:42:53 +01:00
wrongecho
ed446e18b5 Merge pull request #1013 from itflow-org/update-show-branch
Show name of branch you are on in admin update
2024-08-29 19:24:19 +01:00
wrongecho
b7d1503044 Show name of branch you are on in admin update 2024-08-29 19:21:33 +01:00
Johnny
d700289671 Merge pull request #1012 from itflow-org/assets-report-custom-columns
All asset report - custom columns
2024-08-28 18:47:46 -04:00
Johnny
99b5758839 Merge pull request #1011 from itflow-org/ticket-unbilled-perms
Bugfix: Unbilled tickets perms
2024-08-28 18:46:58 -04:00
Johnny
af62ba8b89 Merge pull request #1010 from itflow-org/asset-purchase-ordering
Re-order asset purchase and install date fields to make more sense
2024-08-28 18:46:47 -04:00
Johnny
ddf936c859 Merge pull request #1009 from itflow-org/client-perms-rectickets-projects
Bugfix: Client Access Permissions
2024-08-28 18:45:44 -04:00
wrongecho
64997acaa5 All asset report - custom columns
Created a new version of the all asset report allowing custom columns to be used
2024-08-28 23:25:03 +01:00
wrongecho
7739b31bb5 Bugfix: Remove two role checks on unbilled ticket report that prevents any non-admins viewing it 2024-08-28 22:21:02 +01:00
wrongecho
11005fef58 Re-order asset purchase and install date fields to make more sense 2024-08-28 22:11:04 +01:00
wrongecho
26d6737468 Bugfix: Client Access Permissions
Fix bug that allows users to view recurring tickets and projects they shouldn't have access to
2024-08-28 20:17:41 +01:00
johnnyq
a4a110f1e7 Show Red Badge Count next to client domains if Domain is expired or expires within 5 days 2024-08-27 20:40:12 -04:00
johnnyq
3eb6ee57fb Fix Contact Bulk Actions, removed required fields from Bulk Mail since its all under 1 big form you cant have required fields 2024-08-27 12:05:45 -04:00
johnnyq
27a9697542 Temporary diabled Bulk Ticket Merge in the Main Ticket view as it was not allowing a tech to be assigned from that view 2024-08-25 22:49:54 -04:00
Johnny
d05c5b7ca2 Merge pull request #1007 from itflow-org/api-logins-tweak
Tweak credentials read api
2024-08-25 15:31:01 -04:00
wrongecho
ec0e1c395c Tweak credentials read api 2024-08-25 20:29:14 +01:00
Johnny
c0c810764a Merge pull request #1006 from itflow-org/bulk-merge
Add bulk merge ticket feature
2024-08-25 15:20:43 -04:00
Johnny
442681a49a Merge pull request #1005 from itflow-org/debug-db-info
Debug - clarify database engine
2024-08-25 15:20:24 -04:00
Johnny
6e3dcc0237 Merge pull request #1004 from itflow-org/bugfix-ticket-client-access-perms
Tickets - Client access permissions bugfix
2024-08-25 15:20:10 -04:00
Johnny
21a31a1fe1 Merge pull request #1002 from itflow-org/api-logins
Allow decrypting logins/credentials via the API
2024-08-25 15:18:34 -04:00
wrongecho
f964d8245b Add bulk merge ticket feature 2024-08-25 19:10:06 +01:00
wrongecho
c69655a5bb Add bulk merge ticket feature 2024-08-25 19:06:57 +01:00
wrongecho
4cfa4c6e85 Debug - clarify database engine 2024-08-25 17:53:34 +01:00
wrongecho
573e2340df Fix a bug that allows technicians to view tickets they shouldn't have access to 2024-08-25 15:32:40 +01:00
wrongecho
24ff6f5c84 WIP: Allow decrypting logins/credentials via the API 2024-08-25 12:45:18 +01:00
wrongecho
9ef3099495 WIP: Allow decrypting logins/credentials via the API 2024-08-25 12:32:21 +01:00
wrongecho
d37bdcdbcb WIP: Allow decrypting logins/credentials via the API 2024-08-25 12:31:15 +01:00
johnnyq
2202f31a61 fix 2024-08-24 20:08:14 -04:00
johnnyq
26e12e1edb More UI/UX updates to the ticket reply bar 2024-08-24 20:07:06 -04:00
johnnyq
1bf80d3b15 Use TimeAgo for Ticket Created At column, use tooltip to show real date and time 2024-08-24 19:28:07 -04:00
johnnyq
f0086c8844 More Ticket Details UI/UX use btn-toolbar class instead of btn-group for the header action button this allows padding and rounding of both edges of the button, decreased the bottom padding of the ticket reply card, updated the billable status 2024-08-24 18:55:54 -04:00
johnnyq
9a3b42c623 More UI/UX Reduced the Padding in the Ticket Details Header to make more room, Use TimeAgo and tooltips for the exact times, updated the Ticket Subject display, made the Submit button green instead of primary to offset all the primary buttons, also updated other button to reduce the distraction of orimary and secondary buttons 2024-08-24 18:34:05 -04:00
johnnyq
0ea2e78c78 More UI/UX Work to ticket details 2024-08-24 18:11:57 -04:00
johnnyq
9afab6e5e5 Removed the Dark Outline border on the side cards in ticket details 2024-08-24 17:59:41 -04:00
johnnyq
ed315c3979 UI/UX Updates to the Ticket Details Header 2024-08-24 17:57:05 -04:00
johnnyq
7168cffba7 Ticket Details UI/UX Removed Prepend icon to tasks and removed the fa-fw for the checkmark next to add task 2024-08-24 16:40:01 -04:00
johnnyq
08b94dcae4 Bump TinyMCE from 7.1.1 to 7.3.0 2024-08-24 16:36:29 -04:00
johnnyq
918c202e83 Remove Dup AI Reword Button 2024-08-24 16:29:01 -04:00
johnnyq
d9299e8e28 Fix AI Reword Button, removed Status Icon 2024-08-24 16:24:14 -04:00
johnnyq
bdd7c7e993 UI/UX Updates to Ticket Details, Reduce the start, pause timer and reset button and use pause and play icons instead, use block buttons for Type of Response 2024-08-24 16:14:40 -04:00
johnnyq
a152a4a1a0 Update Ticket Details Page, remove the non working selectable comment type ad wrapped the Ticket Reply in a card body 2024-08-24 15:58:45 -04:00
johnnyq
2e0841abb3 Do not show Outstanding Balance table if no outstanding invoices exist 2024-08-24 15:06:35 -04:00
johnnyq
b14da05b17 Add more prominant Highlight of the current invoice being viewed 2024-08-24 14:57:23 -04:00
johnnyq
dd017da140 Several UX/UI Updates to Guest Invoice, Added Account Balance to the Top Right, removed Invoice History as this should be viewed via the client portal. Update the wording for Previous unpaid invoices to Outstanding Invoices, added invoice counts, reduced margin and padding in invoice tables, reworded Pay Online to Pay Now 2024-08-24 14:47:27 -04:00
johnnyq
8f5854c76e Add Full Account Balance on Guest Invoice View 2024-08-24 14:11:16 -04:00
johnnyq
04f33ac375 Add Tooltips with expire time for shared links 2024-08-24 13:36:55 -04:00
johnnyq
5588ad953e Show if a Credential, Document or File is Shared by a Link, added a new status column 2024-08-24 13:30:01 -04:00
johnnyq
374ca2a89b Fix New client Link in Dashboard 2024-08-23 18:31:54 -04:00
johnnyq
d9b8b12c17 Reworked tooltips 2024-08-23 18:27:20 -04:00
johnnyq
9225efdc9e Added Tooltips to Deactivate Action and Type under shared Links 2024-08-23 18:17:41 -04:00
johnnyq
a10b9bf93a Removed Company Name prepended to invoice email subjects as this name should be in the From Email Name Example CompanyName Billing or Just CompanyName 2024-08-23 17:49:23 -04:00
johnnyq
436b10c577 Updated the Shared items box UI/UX on Client overview 2024-08-23 17:29:03 -04:00
johnnyq
b583e7f8c9 Update Text from light to dark for warning badges on client nav 2024-08-23 16:40:47 -04:00
johnnyq
e1cac4556a Rounded out the top navbar notification count badge 2024-08-23 16:33:35 -04:00
johnnyq
6d7ffdd133 Updated Admin and Account Icons in the user drop down menu 2024-08-23 16:11:47 -04:00
johnnyq
0556f0b9a4 Moved Admin Section from side nav to User Drop Down at the top 2024-08-23 16:09:34 -04:00
johnnyq
37ddf87ef0 Removed Client ID from the Side Nav as its hidden in a popover on the client name in the client header 2024-08-23 16:01:31 -04:00
johnnyq
5ef9d76a3c Removed Shared Items from the side menu and merged them inot client overview 2024-08-23 15:59:03 -04:00
johnnyq
d35b9ee161 Removed Client Audit log, now located under Recent under client Overview can click View More to see the main audit log if your an admin also added client filter to the main audit log 2024-08-23 15:43:50 -04:00
johnnyq
58ec9121a0 Moved Bulk Email from the side Menu to a contact Bulk Action, Also removed Client Statement as it did not work and payments covers that already this frees up 2 menu spaces on the client side nav 2024-08-23 15:21:15 -04:00
wrongecho
a6113dc371 WIP: Allow decrypting logins/credentials via the API 2024-08-22 18:22:20 +01:00
wrongecho
0c60ecc329 WIP: Allow decrypting logins/credentials via the API 2024-08-22 17:46:58 +01:00
wrongecho
d0ade72e6e Merge pull request #1003 from itflow-org/bulk-resolve-bugfix
Bugfix: Bulk close should actually be bulk resolve
2024-08-19 21:58:11 +01:00
wrongecho
d43cd0398e Bugfix: Bulk close should actually be bulk resolve 2024-08-19 21:45:03 +01:00
johnnyq
d803895f08 Remove the HTML line breaks in error output as the console is text only 2024-08-19 16:33:19 -04:00
johnnyq
85f2e8c244 Fix Cron Mail Ticket Parser script: It will now check if the ITFlow folder is created and subscribed before moving the mail 2024-08-19 16:24:45 -04:00
wrongecho
63feff03d2 Initial WIP: Allow decrypting logins/credentials via the API 2024-08-19 21:23:43 +01:00
Johnny
82a123a63d Merge pull request #1001 from itflow-org/cred-fix
Bugfix: credentials
2024-08-19 15:16:39 -04:00
Johnny
0e8e8416f5 Merge pull request #1000 from itflow-org/bugfix-resolved-tickets
Bugfix: Resolved ticket counts
2024-08-19 15:15:55 -04:00
wrongecho
3f772f5a2f Bugfix: credentials
Fix an edge-case bug causing the user_encryption_session_key session cookie to not be set due to error output (when display PHP errors in browser is enabled). This means login credentials are still encrypted but cannot be decrypted properly by other users.
Prevent users creating new credentials if they do not have the correct cookie set.
2024-08-19 19:56:12 +01:00
wrongecho
d17b75b7bd Bugfix: Resolved ticket counts
Prevent resolved tickets showing up in unassigned ticket / my ticket counts
2024-08-19 18:57:20 +01:00
Johnny
86e3f377ab Merge pull request #999 from itflow-org/rec-ticket-accounting-bugfix
Recurring tickets bugfix
2024-08-18 12:56:05 -04:00
Johnny
e60ca0f978 Merge pull request #998 from itflow-org/ticketing-update
Ticketing updates - guest view & resolved vs closed
2024-08-18 12:31:13 -04:00
wrongecho
f605f581cb Recurring tickets bugfix
Fix bug preventing ticket subject/content being shown when accounting module is disabled.
Think this is due to the dynamic modals - fix for now is just to hide the billable div from the user.
2024-08-18 16:11:32 +01:00
wrongecho
0025503ff8 Ticketing updates - guest view & resolved vs closed
- Swap autclose for resolved to allow temporarily re-opening resolved tickets for 72 hrs after closure
- Add guest view URL for tickets
2024-08-17 23:42:39 +01:00
wrongecho
ad9b69ae10 Remove extra php closing tag 2024-08-17 23:34:23 +01:00
wrongecho
d80334a7cf Ticketing updates - guest view & resolved vs closed
- Swap autclose for resolved to allow temporarily re-opening resolved tickets for 72 hrs after closure
- Add guest view URL for tickets
2024-08-17 23:24:15 +01:00
wrongecho
0b801b24ac Merge pull request #997 from itflow-org/wrongecho-db-update-small-fix
Correct database update logic to ensure future updates work properly
2024-08-16 13:06:20 +01:00
wrongecho
05e2b51ada Correct database update logic to ensure future updates work properly 2024-08-16 13:05:04 +01:00
Johnny
d9316233bb Merge pull request #993 from itflow-org/portal-docs-show-current
Only show most current version of a document in the client portal
2024-08-15 20:14:57 -04:00
Johnny
08f9f137c0 Merge pull request #996 from itflow-org/tickets-tasks
Tickets & Tasks
2024-08-15 20:14:34 -04:00
wrongecho
ccdfd96f56 Tickets & Tasks
- Add ability to un-complete/undo a completed task
- Require CSRF verification when deleting tickets and tasks
2024-08-15 23:52:25 +01:00
wrongecho
786fc0a369 Only show most current version of a document in the client portal 2024-08-15 21:45:20 +01:00
Johnny
26d36e6f66 Merge pull request #992 from itflow-org/tck-eml-parse-anonymous
Add unknown/anonymous email to ticket parsing
2024-08-13 17:00:31 -04:00
Johnny
f32fd01e47 Merge pull request #991 from itflow-org/asset-client-tfr
Add move/transfer assets between clients
2024-08-13 16:58:51 -04:00
wrongecho
90e95a76b7 Add anonymous email parsing
Add option to allow unknown/anonymous email parsing for unknown contacts/domains.
This will be disabled by default due to the potential for spam, but can be turned on in the settings if required.
2024-08-10 22:39:47 +01:00
wrongecho
d6f30b83f8 Add anonymous email parsing
Add option to allow unknown/anonymous email parsing for unknown contacts/domains.
This will be disabled by default due to the potential for spam, but can be turned on in the settings if required.
2024-08-10 22:35:52 +01:00
wrongecho
8fb50275ac Add move/transfer assets
Add ability to move / transfer assets between clients. Moving an asset involves the asset being archived and then re-created under the new client with most of the same information.

Information about the old & new asset is stored in the audit logs and within the asset notes. Information from the audit logs is accessible via a new History tab on the asset, subject to audit log retention.
2024-08-10 20:51:57 +01:00
wrongecho
3d3492ef27 Add move/transfer assets
Add ability to move / transfer assets between clients. Moving an asset involves the asset being archived and then re-created under the new client with most of the same information.

Information about the old & new asset is stored in the audit logs and within the asset notes. Information from the audit logs is accessible via a new History tab on the asset, subject to audit log retention.
2024-08-10 20:46:59 +01:00
wrongecho
b732e08aff Merge pull request #990 from itflow-org/wrongecho-patch-2-assets
Update ajax.php - Assets > Asset logging
2024-08-10 12:23:46 +01:00
wrongecho
9c0dfd8b48 Update php-lint.yml - bump to 9.4.1 2024-08-10 12:21:43 +01:00
wrongecho
693156c902 Update ajax.php - Assets > Asset logging
Adjust logging for asset changes so they are logged as type 'asset' not 'assets', to match existing logging
2024-08-10 12:17:31 +01:00
wrongecho
4185c2830d Merge pull request #989 from itflow-org/wrongecho-patch-1
Update client_rack_edit_modal.php
2024-08-08 05:36:23 +01:00
wrongecho
9e19943cf7 Update client_rack_edit_modal.php
Adjust rack units max on edit modal too
2024-08-08 05:35:22 +01:00
Johnny
a3ebf0845f Merge pull request #988 from itflow-org/file-delete-bugfix
Client files bugfix
2024-07-31 17:25:31 -04:00
Johnny
2e61c7e72b Merge pull request #987 from itflow-org/rem-header-js
Remove old reference to js/header_timers.js
2024-07-31 17:25:12 -04:00
Johnny
6c50722b14 Merge pull request #986 from itflow-org/wrongecho-rack-patch
Adjust max rack size to 70U
2024-07-31 17:25:02 -04:00
Marcus Hill
cfb13a0c18 Client files bugfix
- Hide delete button for techs as they do not have this permission
- Remove unused exclude_condition var
2024-07-31 22:06:17 +01:00
Marcus Hill
de5ae4bbc3 Remove old reference to js/header_timers.js as this file no longer exists 2024-07-31 21:46:15 +01:00
wrongecho
2b83fe5796 Update client_rack_add_modal.php
Adjust max rack size to 70U
2024-07-30 16:07:37 +01:00
Johnny
cc0de316ab Merge pull request #984 from ssteeltm/credentials-filter-asset_location
filter locations on credentials
2024-07-23 22:06:18 -04:00
Johnny
708dea24ef Merge pull request #985 from ssteeltm/master
fix Order by IP on assets listing
2024-07-23 22:05:46 -04:00
Hugo Sampaio
6d45e93ad9 fix Order by IP
fixes the ordering by ip, after the new change of Interfaces
2024-07-22 13:05:23 -03:00
Hugo Sampaio
79fdc979cf Update client_logins.php
Filter for Locations, based on Asset Location, if its related.
2024-07-22 09:50:41 -03:00
Johnny
f769081bf9 Merge pull request #982 from ssteeltm/client-id-tooltip
client-id-tooltip
2024-07-16 19:54:14 -04:00
Hugo Sampaio
83da33432c Update client_side_nav.php 2024-07-12 10:53:11 -03:00
Hugo Sampaio
de49c8dba1 client-id-tooltip 2024-07-12 10:42:24 -03:00
johnnyq
dcc0d77dd4 Added Client ID in the client listing and client top header 2024-07-09 15:26:07 -04:00
johnnyq
50bdeae79d Fix Invalid Var in Add License 2024-07-09 14:30:23 -04:00
johnnyq
53550e5092 Updated Client Export Fields, and added Client Import along with download client sample file 2024-07-05 15:31:01 -04:00
Johnny
cf7a900e1a Merge pull request #981 from git-kup/master
Update invoice.php
2024-07-02 23:08:50 -04:00
git-kup
eead1328ef Update invoice.php
fixed typo payed to paid
2024-07-02 17:37:34 -04:00
Johnny
afaaa5895c Merge pull request #980 from ssteeltm/uri-dropdown
uri dropdown
2024-07-02 12:50:23 -04:00
Hugo Sampaio
4e5fd048f7 uri dropdown 2024-07-02 10:34:56 -03:00
Johnny
2fa07e4e46 Merge pull request #976 from itflow-org/log-cleanup
Add audit log cleanup/retention period to cron
2024-07-01 21:54:27 -04:00
Johnny
5818a57b9f Merge pull request #977 from itflow-org/debugging-help
Debug assistance (admin_debug.php)
2024-07-01 21:53:51 -04:00
wrongecho
b6f1e0203c Merge pull request #979 from ssteeltm/Asset-URI-link-duplicate
Update client_asset_details.php
2024-07-01 18:22:47 +01:00
Hugo Sampaio
8881cd30ff Update client_asset_details.php 2024-07-01 12:01:35 -03:00
Marcus Hill
af6740d898 Debug assistance
Clarify Apache/PHP error log location in debug/setup
Include app version, cron and timezone in debug page
2024-06-30 12:31:59 +01:00
Marcus Hill
8db9822f63 Add audit log cleanup/retention period to cron
Audit logs will be automatically cleaned up after 90 days (new installs) or 7 years (existing installs). This is configurable in Settings > Security.
2024-06-30 11:51:39 +01:00
johnnyq
cc38c642c5 Added back the old cron ticket email parser as legacy_cront_ticket_email_parser.php and added back the old libraries php-mime-mail-parser in plugins note if you recently installed itflow within the last 2 weeks you will need to install and enable the php libraries php-imap and php-mailparse if you decide to use the legacy mailer 2024-06-29 13:40:47 -04:00
johnnyq
f133981b52 Remove the UTF7 to 8 Encoding as it broke Thunderbird email parsing, somehow Roundcube webmail was fine 2024-06-28 17:21:43 -04:00
johnnyq
6bdfe1b713 Add Function to convert message text from UTF7 to UTF8 possibly fix the Google Issue not sure, we need further testing 2024-06-28 13:52:50 -04:00
johnnyq
fc82dc705e Add Payment Method and Reference to Payment Receipts 2024-06-28 12:20:20 -04:00
johnnyq
c27f9fd6a9 Set Charset to UTF-8 to avoid encoding issues on some mail servers 2024-06-28 11:39:34 -04:00
johnnyq
97c2928830 Remove Duplicate Line of Code to connect to IMAP Server and find inbox 2024-06-28 11:25:58 -04:00
johnnyq
f57cf5cb91 Fix Plain Text Emails not showing in ticket replies by converting plain text emails to HTML for displaying 2024-06-27 18:50:37 -04:00
johnnyq
95fd0344c0 Fixed ticket Email processing showing array() 2024-06-27 17:23:45 -04:00
johnnyq
1c618892cc Removed WebKlex PHP-IMAP Dependency in post as it was spewing errors for people running older version of php below 8.2 - note this is still required for Mail Parser to work 2024-06-27 01:10:00 -04:00
johnnyq
5b3c6f4272 Better Handling of HTML Reply ticket emails, reduce the spacing trim out extra spaces reduce the line height etc 2024-06-26 13:14:16 -04:00
johnnyq
30bd685dea Final path fix 2024-06-25 16:02:22 -04:00
johnnyq
f7b75bb150 fix 2024-06-25 15:54:19 -04:00
johnnyq
6456dfcc67 Fix Autoloader location for WEbklex imap 2024-06-25 15:51:51 -04:00
johnnyq
b0c5d43867 Remove the reliance on php-imap extension to test imap connection in setting. Also removed the check for php-imap in the mai, parser as we use fully rely on webklex 2024-06-25 15:48:56 -04:00
johnnyq
40866e34e2 Remove the function to check if php-mailparse is installed. Its not needed and was causing breaing issues and is an unessesary check 2024-06-25 15:28:01 -04:00
johnnyq
39ff97e9dd Restore option to share a password accidentally got wiped out when adding archive unarchive functions 2024-06-25 11:44:19 -04:00
johnnyq
fbd220c5e3 Add Global Bulk Mail back to the Admin nav side bar, seemed to have gotten lost when we updated the menu 2024-06-25 09:37:49 -04:00
Johnny
897dcb179a Merge pull request #975 from ssteeltm/tickets_tasks-progress-bar
small adjustment to show 0 completed tasks
2024-06-24 10:59:14 -04:00
Hugo Sampaio
1542a89922 small adjustment to show 0 completed tasks 2024-06-24 09:54:44 -03:00
johnnyq
0c10b863b5 Use rounded badge for priority in client tickets to match 2024-06-23 00:16:41 -04:00
johnnyq
ee5e6d157d Update Cron Ticket Email Parser script to take in account of multiple variations of the word inbox 2024-06-22 13:45:39 -04:00
Johnny
1b937a0e7d Merge pull request #974 from ssteeltm/master
Update client_file_link_asset_modal.php
2024-06-18 22:30:59 -04:00
johnnyq
ea77c7567d Updated UI badge element to use yes and no for billable tickets 2024-06-17 17:38:05 -04:00
johnnyq
46ab6a696d Assure a Primary network interface gets added with the import of assets. Also check to see if a primary interface is present when editing an interface 2024-06-17 14:43:35 -04:00
johnnyq
84366cc1b9 Small UI Comment Cleanup of dashboard 2024-06-16 12:31:45 -04:00
johnnyq
55eff7ce45 Client Racks UI Cleanup Move the Rack Data to a table instead of using dd and dl 2024-06-16 12:17:05 -04:00
johnnyq
3d6d6a0e22 UI Cleanup Move the the from and to Unit to one row when adding a device 2024-06-16 12:08:59 -04:00
johnnyq
9d40ef1776 Racks: Exclude Assets in the the add device drop downlist that are already in anopther rack 2024-06-14 18:07:43 -04:00
johnnyq
aca5a1ee54 Remove Rack Photo on deletion and do not remove rack_units as the DB is set to cacade delete these 2024-06-14 17:44:29 -04:00
johnnyq
5ba0315a42 Feature: You can add and remove linked devices and customer devices to the rack units 2024-06-14 17:22:16 -04:00
Hugo Sampaio
88896d3cdf Update client_file_link_asset_modal.php
small adjustment to allow link an asset in any files. Before this it was limiting to link only one file, dont displaying it in assets listing for other files
2024-06-14 15:13:18 -03:00
johnnyq
92e594ee32 Updated Budget UI to include card header and made a view only option for budget 2024-06-14 13:41:16 -04:00
johnnyq
70dc64f05d Updated Budget to now include easy updating and creating and viewing Yearly budgets in one POST 2024-06-14 13:13:28 -04:00
johnnyq
5352416dbe Added backend archive, unarchive, delete capaiblities for racks 2024-06-13 17:12:34 -04:00
johnnyq
17feb98ec7 Added Client Network / Server Rack Documentation to the UI More to come 2024-06-13 17:06:09 -04:00
johnnyq
1efe403422 Added Asset Photo to Asset Details Side bar 2024-06-13 14:51:09 -04:00
johnnyq
6da19c3e6f Fix Physical Locatiin not showing on edit Asset 2024-06-13 14:47:48 -04:00
johnnyq
e3c39e473f Fixes on Image Uploading for assets 2024-06-13 14:31:46 -04:00
johnnyq
16c2fbf6d1 Added Asset Photo and Asset Physical Location to the UI 2024-06-13 13:54:21 -04:00
johnnyq
3288cb6dc2 DB Structure Update to make room for Rack and Patch Panel Documentation along with adding Asset Photo and Asset Physical Location DB Fields 2024-06-13 12:40:37 -04:00
johnnyq
b37cfdf677 Fix API Asset interface relationship 2024-06-12 18:06:04 -04:00
johnnyq
2edd39c16d Remove the vendor directory in .gitignore as these dependencies are needed for php-imap 2024-06-12 16:15:10 -04:00
johnnyq
779527cf6a Migrated away from PHP Mail Parser to the new WebKlex PHP IMAP Mail Parser this will open the way to support OAUTH2 for Mail servers such as Microsoft 365 and Google Workspaces 2024-06-12 15:39:52 -04:00
johnnyq
d64a7ce31e Fix Client Services to include interfaces 2024-06-11 23:32:09 -04:00
johnnyq
836e1a3199 Updated Asset API to include its assets 2024-06-11 23:00:57 -04:00
johnnyq
b25d21b8bf Delete Asset Interfaces related to client assets when deleting a client 2024-06-11 22:39:03 -04:00
johnnyq
3eb81e5954 Fix Network Select under client assets 2024-06-11 21:51:54 -04:00
johnnyq
1e241a9232 Quick Fix 2024-06-11 21:46:45 -04:00
johnnyq
41ac390173 MAJOR Feature Update - Backup before updating Migrated Asset Network info to a seperate table to allow for multiple interfaces per asset 2024-06-11 21:36:03 -04:00
johnnyq
a1613ddceb Up Max Client Abbreviation length from 5 to 6 2024-06-11 13:45:19 -04:00
johnnyq
0a7fd1471a Move All Domains from main side nav to Reports under Overview header 2024-06-11 12:09:00 -04:00
johnnyq
32df0369e2 Added IPv6 Field to Contact Details 2024-06-10 23:57:03 -04:00
johnnyq
fc6ec8dd03 Added IPv6 field for Assets 2024-06-10 22:10:18 -04:00
johnnyq
2ce36cb14f Added Bulk Edit Category, Archive, Unarchive and Delete to Products 2024-06-10 17:26:43 -04:00
johnnyq
655f1230c2 Added Export Products CSV 2024-06-10 15:53:26 -04:00
Johnny
ff1ec30775 Merge pull request #973 from wrongecho/ticket-parse-save-original-mail
Email to ticket parsing - Save the original email
2024-06-10 11:28:33 -04:00
Johnny
7135747b7d Merge pull request #972 from wrongecho/2fa-6char
2FA tweaks
2024-06-10 11:28:11 -04:00
Marcus Hill
041cbe15fa Email to ticket parsing - Save the original email
When creating a new ticket, save the original email in a .eml format and attach it to the ticket.

This will be useful for situations when you want to reply to the original thread but don't have access to the inbox. We could add this to all received emails if there is interest?
2024-06-09 21:34:54 +01:00
Marcus Hill
3dcd04a724 2FA
- Set the 2FA number input field to only accept 6 characters max
- Revoke existing remember-me tokens when 2FA is re-enabled
2024-06-09 12:57:42 +01:00
johnnyq
51710f886c Added Category Drop Down Select and Archive Query to Products 2024-06-08 21:00:14 -04:00
johnnyq
674f4cd6db Fix Padding for Client Documents 2024-06-08 19:31:24 -04:00
johnnyq
fb16ecd0c6 Added Bulk Archive, unarchive support to domains 2024-06-08 19:17:06 -04:00
johnnyq
64c5cbda52 Added Bulk Archive, UnArchive and Delete support to client vendors 2024-06-08 18:49:18 -04:00
johnnyq
e8715979d5 Optimized Show/Unshow Archive Button Logic 2024-06-08 17:14:08 -04:00
johnnyq
2032fe43d4 Added Bulk Delete to Archived Contacts 2024-06-08 16:20:28 -04:00
johnnyq
ee30b0b197 Added Bulk Archive, Unarchive, Delete actions to to logins 2024-06-08 16:00:29 -04:00
johnnyq
0d8333c7ab Add Bulk Actions to Locations 2024-06-08 14:49:26 -04:00
johnnyq
eb7fe5708a Fix Bulk actions in client recurring tickets 2024-06-08 13:38:08 -04:00
Johnny
0af4a7ac1e Merge pull request #971 from wrongecho/ticket-report-fix
Bugfix: Ticket report - average time to close
2024-06-08 12:46:58 -04:00
Marcus Hill
c06c240e2a Bugfix: Ticket report - average time to close 2024-06-08 07:32:41 +01:00
johnnyq
551146d3e2 btn-lg 2024-06-07 20:46:36 -04:00
johnnyq
a17fbcfc1d Fix Update 2024-06-07 20:45:33 -04:00
johnnyq
02445811fa Added locaiton drop down filter to contacts 2024-06-07 20:40:35 -04:00
johnnyq
86cd618b03 Add Force Update Button 2024-06-07 20:36:18 -04:00
johnnyq
f1b28a6f14 Fix Archive var check for contacts and assets 2024-06-07 18:52:54 -04:00
johnnyq
a44a76db28 Added the option to bulk remove contact tags 2024-06-07 18:44:21 -04:00
johnnyq
e920ccc5e4 Force upper case on client abbreviations 2024-06-07 18:31:53 -04:00
johnnyq
24022eca55 Added Definable Client Abbreviation 2024-06-07 18:18:42 -04:00
johnnyq
b229349d8c Added / ID to Username field under credentials 2024-06-07 18:01:25 -04:00
johnnyq
fb4c1e828f Fix Some Undefined Vars PHP Errors 2024-06-07 17:57:02 -04:00
johnnyq
c2b7d03c22 Added Payment Method and Account Dropdown Filters to Payments 2024-06-07 16:48:57 -04:00
johnnyq
1070449450 Added User, log type, and log action Dropdown Filter to audit logs 2024-06-07 16:32:45 -04:00
johnnyq
a742c9596e Moved Exports into the the new drop downs to match consistency 2024-06-07 15:59:22 -04:00
johnnyq
01b3d53683 Feature: Ability to Bulk Assign Additional tags to Many Contacts 2024-06-06 20:19:58 -04:00
johnnyq
474e9525c4 Add Bulk Archive and Unarchive to contacts 2024-06-06 17:54:12 -04:00
johnnyq
a35a28cf7d Added Bulk Archive and Unarchive to Assets 2024-06-06 17:25:25 -04:00
johnnyq
1522f5414a Ability to Unarchive contacts and assets 2024-06-06 16:51:08 -04:00
johnnyq
94ba05271f Allow Invoices to be exportable, move export expense modal out of the record loop 2024-06-06 13:49:50 -04:00
johnnyq
10f1d39b2a Fix In Comntat Details Contact must belong to the client 2024-06-06 13:18:50 -04:00
johnnyq
71bad025cc Fix Ticket Subject under client contact details showing 0 2024-06-06 13:01:51 -04:00
johnnyq
5e6b79fce5 Added DataTables JS Plugin tested functionality for client contact details 2024-06-06 13:00:14 -04:00
johnnyq
965c16c19d Fix broken Clients when restricting user client access 2024-06-06 12:06:26 -04:00
johnnyq
40ccbb5627 Update GetDomainExpiry Function to return proper null if Expire is not found, updated the logic 2024-06-06 02:30:12 -04:00
Johnny
dfda4d1101 Merge pull request #969 from ssteeltm/asset-view-files
show related Files on Asset View
2024-06-04 21:23:00 -04:00
Johnny
61a95dbd59 Merge pull request #968 from ssteeltm/file-link-assets
link file to assets
2024-06-04 18:30:47 -04:00
johnnyq
d20e462652 Mimicked UI for Client Perms to USer and Device Licneses under Licenses 2024-06-04 16:36:39 -04:00
johnnyq
21019ba471 Add Checkbox that will select all / de-select all Client Restriction permissions in add/edit user 2024-06-04 16:05:49 -04:00
Hugo Sampaio
49436fae3b rename description
hability to also rename description
2024-06-04 16:40:33 -03:00
johnnyq
0aea143049 Update wording for Restrict Client Access 2024-06-04 15:18:44 -04:00
johnnyq
e5cab12633 Updated UI for Restrict Client Access 2024-06-04 15:11:13 -04:00
Hugo Sampaio
87069b7ebb forgoten modal identifier 2024-06-04 15:55:57 -03:00
johnnyq
254715ddc6 Rework User client Access Restriction UI for add and edit user. Moved from multi Select Box to Individual checkboxs 2024-06-04 14:52:20 -04:00
Hugo Sampaio
3b07caadb7 show related Files on Asset View
initial work on showing related files when in asset view
2024-06-04 15:45:57 -03:00
Hugo Sampaio
3023c48771 link file to assets
provides hability to add link on Files to Assets, so later we can show this related files on Asset View
2024-06-04 15:03:53 -03:00
johnnyq
8bc7c849ef Feature: Added the ability to edit the order of the tasks this is not the best solution but works we recommend setting them in orders of 5 or 10 so there is wiggle room to add tasks in between 2024-06-03 19:36:16 -04:00
johnnyq
1076ffb5f7 Feature Ability to Edit Task names under Ticket Templates 2024-06-03 19:15:59 -04:00
johnnyq
9f73b13dcf Dont show Template or Client Vendors under Vendor Select in Expenses Filter 2024-06-03 18:12:57 -04:00
johnnyq
5b594813c4 Feature: Add Advanced Filter Vendor and Category under Expenses 2024-06-03 16:28:45 -04:00
johnnyq
20795c2816 Feature: Add Advanced Filter for Account From and Account To under transfers 2024-06-03 16:13:01 -04:00
johnnyq
acfd5e8d54 Was missing a few more regexes in get domain expiry 2024-06-02 17:05:53 -04:00
johnnyq
738c83378c Forgot to add a pattern for expires on 2024-06-02 16:41:20 -04:00
johnnyq
56b0eafe2b re-push out new domain expiry lookup 2024-06-02 16:32:42 -04:00
johnnyq
e2b700cdcd Revert new Domain lookup 2024-06-02 13:15:41 -04:00
johnnyq
13764da199 Updated domain lookup function to include TLDs of and time formats to match the python script 2024-06-02 13:07:33 -04:00
johnnyq
84653cb57a Created new PHP function to use the local whois binary to get the expire date of a domain 2024-06-02 12:38:47 -04:00
johnnyq
b47f543534 Ticket Events now shows everything logged in the ticket by auditing logs 2024-06-01 20:04:37 -04:00
johnnyq
6107e0436f Added Eye ball Icon to System Calendar to toggle system calendars 2024-06-01 18:55:24 -04:00
johnnyq
c573687fa1 Feature: Calendar Names and Colors can now be edited 2024-06-01 18:48:06 -04:00
johnnyq
851542bcc1 Added Side nav for calendars, pending more updates 2024-06-01 18:09:59 -04:00
johnnyq
e04a9d1f09 Added All Domain view to main side nav 2024-06-01 17:12:15 -04:00
johnnyq
c0207aa9ec Remove the Arrow Icon Next to the client in client listing 2024-06-01 16:54:44 -04:00
johnnyq
1fa043b1d7 Bumped TinyMCE Editor from 7.0 to 7.1.1 2024-06-01 16:21:46 -04:00
johnnyq
307cc709d4 Fix Merging Ticket where the merging ticket HTML would be lost during the merge to the another ticket 2024-06-01 16:15:38 -04:00
johnnyq
18d94cb33d Add Revision history to the bottom of each document 2024-06-01 15:54:53 -04:00
johnnyq
5edec23234 Convert document details to 4 Space indent instead of 2 2024-06-01 15:32:14 -04:00
johnnyq
a064d26c10 Fix Creating Document from a template where is would not set the document_parent causing new documents to display revisions that dont exist 2024-06-01 15:24:30 -04:00
johnnyq
3621912398 Keep Admin Menu Nav Highlighted when going deeper into an item 2024-06-01 15:07:47 -04:00
johnnyq
64499fa734 Also Delete Location Tags when a Client is deleted 2024-06-01 14:39:14 -04:00
johnnyq
ba23142843 Remove repeated delete client tags query when client is deleted 2024-06-01 14:35:35 -04:00
johnnyq
dfe61fb426 Delete Contact Tags when a Client is deleted 2024-06-01 14:34:28 -04:00
johnnyq
2ab7a44f6e Feature: Add Contact Tags Support 2024-06-01 14:25:51 -04:00
johnnyq
565f8162a4 Feature: Clients and Locations can now be searchable with multiple tags selected 2024-05-31 18:18:41 -04:00
johnnyq
8d87672b49 Tidy Tickets Collapse 2024-05-31 17:39:09 -04:00
johnnyq
0770c701b5 Continue to Show Advanced Search in Tickets Filter if assigned to is selected 2024-05-31 17:36:19 -04:00
johnnyq
ecbeb12990 Fix broken page over the shortened tag query in client details and ticket details.php 2024-05-31 16:51:52 -04:00
johnnyq
a7376fe08d DB Update Shorten Client Tag Fields and add Delete Client Tags to Delete Client and cleanup clients query 2024-05-31 16:46:50 -04:00
johnnyq
5347429d58 Remove Unessesary Syntax from locaiton tag Query 2024-05-31 16:27:04 -04:00
johnnyq
89d9ec73ad Feature Added Location Tags 2024-05-31 16:13:55 -04:00
johnnyq
63f740e22f Move total time worked to 3rd column in ticket details 2024-05-30 19:42:08 -04:00
johnnyq
eab3bf226c Add Company Name to the Browser title in guest viewing sessions such as guest_invoice, guest_quote etc 2024-05-30 19:29:33 -04:00
johnnyq
7db9a7de73 Fix Telemetry check 2024-05-30 18:57:33 -04:00
johnnyq
14c814c5b8 Made Public Comment and Email Default Selected option 2024-05-30 16:45:20 -04:00
johnnyq
2149a33bd5 Added Email Client to ticket details, Public Comment does not email the client or watchers anything, but can view it in the ticker portal 2024-05-30 16:36:38 -04:00
johnnyq
237ba1dd20 Removed Custom CSS for ticket was able to make work with CSS Library bootstrap, asjusted spacing and layout of ticket response controls, 2024-05-30 15:35:02 -04:00
johnnyq
8c007ea7b1 Calculate more ticket response counts 2024-05-30 15:05:13 -04:00
johnnyq
f091d94282 Ticket Response UI Update Public Comment and Internal Note work now, added Events and Tasks to the Responses stil WIP there 2024-05-30 14:53:49 -04:00
johnnyq
db5ec8912a More UI Updates to ticket comments 2024-05-30 13:56:30 -04:00
johnnyq
7eb6c2ac7f Initial rework on UI for public comments, private notes and ticket events 2024-05-30 13:49:52 -04:00
johnnyq
dfca3a04a1 DB Structure Dumnp for billable options 2024-05-29 17:56:59 -04:00
johnnyq
1d19b72229 Added Billable Recurring Tickets, UI: changed the Billable option to switch. Added ticket settings option to automatically mark new tickets as billable 2024-05-29 17:55:39 -04:00
johnnyq
c389c68883 Default Tickets to not billable and add Billable option to Create Ticket 2024-05-27 13:46:17 -04:00
Johnny
1c5cb0123c Merge pull request #965 from wrongecho/ticket-categories
Ticket categories
2024-05-27 12:58:50 -04:00
Johnny
a3f72b7d93 Merge pull request #966 from wrongecho/calendar-start-day
Calendar start day
2024-05-27 12:58:14 -04:00
Marcus Hill
fbc87572e9 Calendar start day
Allow customising the calendar to start on a Monday instead of Sunday
2024-05-26 23:38:50 +01:00
Marcus Hill
159c1d78a0 Ticket categories
Add basic support for categorising tickets (e.g. Software/Network)
2024-05-26 22:49:57 +01:00
johnnyq
5210fae3ec Fix 2024-05-26 15:55:46 -04:00
Johnny
f177045432 Merge pull request #964 from wrongecho/user-roles-initial
User roles - Initial
2024-05-26 15:42:24 -04:00
Marcus Hill
e820ffec6b User roles
Move the default user roles into the database to make way for custom roles & permissions
2024-05-26 18:37:37 +01:00
wrongecho
c4fd3f7422 Merge pull request #962 from wrongecho/bugfix-ticker-timer-since-removal-open-tickets
Bugfix - Ticket time tracking
2024-05-26 17:09:24 +01:00
Marcus Hill
c969897389 Ticket time tracking
Bugfix for ticket time tracking as this was broken since the open ticket timer was removed
2024-05-26 17:09:04 +01:00
Marcus Hill
059a5516fc Ticket time tracking
Bugfix for ticket time tracking as this was broken since the open ticket timer was removed
2024-05-26 17:05:42 +01:00
wrongecho
f1037975a7 Merge pull request #961 from wrongecho/qr-code-fix
2FA QR Codes
2024-05-26 16:36:36 +01:00
Marcus Hill
2b006af52d 2FA QR Codes
Move away from the Google Charts API for generating QR codes as this is currently broken and not a security best practice.
2024-05-26 16:29:35 +01:00
Marcus Hill
8b1ba7028e 2FA QR Codes
Move away from the Google Charts API for generating QR codes as this is currently broken and not a security best practice.
2024-05-26 16:08:06 +01:00
johnnyq
c02d6d4cf0 Add Recurring Tickets NextDate to the Calendars 2024-05-21 13:33:53 -04:00
Johnny
85a1c5e795 Merge pull request #960 from wrongecho/2fa-token-cookie-time
Set 2FA Remember-me cookie expiry
2024-05-20 23:49:13 -04:00
Marcus Hill
cabc7e8c8b Set 2FA Remember-me cookie expiry to number of days the token should be valid for
Currently, the token is only valid for 2 days (86400 seconds = 24 hrs, multiplied by 2). This PR adjusts the cookie expiry date to the number of days configured that tokens are cleared after. This should help ensure users are not prompted for 2FA every few days, even if they've set a longer interval.
2024-05-17 23:26:22 +01:00
Johnny
579482c780 Merge pull request #958 from ssteeltm/client_logins-uri-ellipsis
client_logins uri limit with ellipsis
2024-05-17 16:26:49 -04:00
Hugo Sampaio
a96b3a30bd Update client_logins.php 2024-05-17 16:14:46 -03:00
Hugo Sampaio
4782892c8a using truncate function 2024-05-17 15:55:13 -03:00
Johnny
b78b62081c Merge pull request #959 from ssteeltm/tickets_tasks-progress-bar
Tickets tasks progress bar
2024-05-17 14:31:55 -04:00
Hugo Sampaio
aef2cde9d2 Update client_logins.php 2024-05-16 11:14:20 -03:00
Hugo Sampaio
d1aab02721 tasks table header 2024-05-16 11:04:25 -03:00
Hugo Sampaio
d4da95a6f1 show bar on html 2024-05-16 11:01:34 -03:00
Hugo Sampaio
edf9371ffa show tasks progress bar on tickets view 2024-05-16 11:00:04 -03:00
Hugo Sampaio
067d674c16 client_logins uri limit with ellipsis
limits long uri that may break lines in table
2024-05-16 10:48:41 -03:00
johnnyq
abc936d753 Update the AI prompt to style with html formatting 2024-05-15 10:47:27 -04:00
johnnyq
5b38a562bb Update the AI prompt to reword 2024-05-15 10:44:04 -04:00
johnnyq
cddd9b4977 Removed the AI Prompt as it did not always work correctly 2024-05-15 10:40:15 -04:00
Johnny
b2d529e783 Merge pull request #956 from ssteeltm/notification-updates
Display notification when update is available
2024-05-14 21:23:13 -04:00
Johnny
b8a4f0f10f Merge pull request #957 from ssteeltm/docs-files-search-recursive
search in all folders when in root (docs/files)
2024-05-14 21:20:59 -04:00
Hugo Sampaio
1242bd31c9 wrong folder id names 2024-05-13 17:28:53 -03:00
Hugo Sampaio
9e758b1edd only when search 2024-05-13 17:26:23 -03:00
Hugo Sampaio
cdf4767590 search in all folders when in root
Enable search recursive/all folders when in / (root).

In the future will be nice to have this as an advanced search.

reference:
https://forum.itflow.org/d/850-search-documents-recursive
2024-05-13 12:19:11 -03:00
Hugo Sampaio
352fbd852e typos 2024-05-13 11:22:57 -03:00
Hugo Sampaio
13a45c81a0 Display notification when update is available 2024-05-13 11:12:52 -03:00
johnnyq
bd12319422 Limit User access to restricted clients under global search 2024-05-12 13:54:34 -04:00
johnnyq
ff4628465c Quote Copy, Make Client a required field 2024-05-10 21:57:22 -04:00
johnnyq
d202c7684a Feature: Allow copying a quote from one client to another 2024-05-10 21:56:13 -04:00
johnnyq
3e7f57f64a Add contact primary to the API edit ^Cd create 2024-05-10 14:27:04 -04:00
johnnyq
9876c33d2e Client Access: Allow to select Client Access Restrictions for existing users 2024-05-10 14:01:20 -04:00
johnnyq
85bf412f53 Client Access: Allow to select Client Access Restrictions for new users 2024-05-10 13:42:42 -04:00
johnnyq
fa064962a9 Update logic denyed access to log it and redirect back with a toast indicating no access to client 2024-05-10 13:16:42 -04:00
johnnyq
e16dce190f Added logic to the inc_all_client.php file to deny access to users with client access permissions set 2024-05-10 13:05:32 -04:00
johnnyq
5f7ca75d1f Use try instead so script doesnt break if user_permissions table doesnt exist 2024-05-10 12:32:46 -04:00
johnnyq
2832f0eb33 Fix if Tables doesnt exist dont break script 2024-05-10 12:28:31 -04:00
johnnyq
ce0c394d3f Feature: User Client Access Permissions logic has been added, next up is the defining access via user managment 2024-05-10 12:25:38 -04:00
johnnyq
a41eede52f DB update for the upcoming user client restricted access permissions 2024-05-10 11:34:25 -04:00
Johnny
3b8f36e8f3 Merge pull request #954 from ssteeltm/phone-mask-option
Phone mask option
2024-05-10 11:06:24 -04:00
Johnny
2f3263cc64 Merge pull request #955 from ssteeltm/master
num active clients on menu
2024-05-10 11:03:19 -04:00
Hugo Sampaio
4779e8f923 add file ext .unf
https://forum.itflow.org/d/835-allow-file-type

added .unf for unifi backup file
2024-05-06 13:42:11 -03:00
Hugo Sampaio
ec94071167 num active clients on menu
show number of active clients um side menu
2024-05-06 13:25:30 -03:00
Hugo Sampaio
b1efb76b3b Update functions.php
handle phone_mask option
2024-05-06 11:31:38 -03:00
Hugo Sampaio
e677292875 update db
update db to store phone mask option
2024-05-06 10:44:52 -03:00
Hugo Sampaio
6c4235bdeb phone mask config
prepare phone mask config
2024-05-06 10:27:47 -03:00
Johnny
de7d68b659 Merge pull request #953 from wrongecho/hide-open-tickets-timer
Hide the running open ticket tracker as this feature is being removed
2024-05-05 14:30:21 -04:00
Johnny
c471228e6a Merge pull request #952 from wrongecho/report-tickets-time
Add total time worked to 'Tickets by client' report
2024-05-05 14:30:11 -04:00
Johnny
4069dc9cdc Merge pull request #951 from wrongecho/debug-assistance
Debugging help
2024-05-05 14:30:00 -04:00
Johnny
0f6a781638 Merge pull request #950 from wrongecho/cert-checks-custom-ports
Certificate checks - Allow custom ports
2024-05-05 14:29:51 -04:00
Johnny
aca1a13104 Merge pull request #948 from ssteeltm/master
Enable URL Recovery from logout
2024-05-05 14:29:40 -04:00
Hugo Sampaio
76a34dea8f Merge branch 'itflow-org:master' into master 2024-05-04 19:25:50 -03:00
Hugo Sampaio
5280620c6d Update login.php If standard 2024-05-04 19:25:10 -03:00
Hugo Sampaio
17eb51bd54 Update check_login.php If standard 2024-05-04 19:23:39 -03:00
Marcus Hill
df66a9625b Hide the running open ticket tracker as this feature is being removed 2024-05-04 21:36:59 +01:00
Marcus Hill
8d5c71f043 Add total time worked to 'Tickets by client' report 2024-05-04 21:32:03 +01:00
Marcus Hill
cd668241a6 Debugging help
- Mention the PHP error log on the setup & debug pages.
- Restructure the debug page to include the server info before the db structure table
2024-05-04 21:02:33 +01:00
Marcus Hill
43abd177ea Certificate checks - Allow custom ports 2024-05-04 18:04:24 +01:00
Hugo Sampaio
bab66bf769 updated
fixed domain url from config to prevent open redirect issue and encoded uri
2024-05-03 09:34:50 -03:00
wrongecho
c0fc957617 Merge pull request #949 from itflow-org/wrongecho-fileexts
Update file.php - Allow .pages and .numbers files
2024-04-28 20:06:52 +01:00
wrongecho
5f0c363503 Update file.php - Allow .pages and .numbers files 2024-04-28 20:06:08 +01:00
Hugo Sampaio
b8c529c2ec Enable URL Recovery from logout 2024-04-27 09:30:41 -03:00
johnnyq
5f0068a64f Added Advanced Filter by Referral under clients 2024-04-18 21:33:15 -04:00
johnnyq
c1f9ad6ea8 Allow to filter by industry under clients 2024-04-18 21:21:30 -04:00
johnnyq
c5876d2715 Move account selection in advanced Filter 2024-04-18 19:37:06 -04:00
johnnyq
d93caf1eac Cleanup up the side menu of admin / settings to be collapsible headers 2024-04-18 19:05:02 -04:00
johnnyq
7d6b578027 Remove indent for recurrings under client nav 2024-04-18 18:39:13 -04:00
johnnyq
0a5de911e9 Combine Settings and with Admin Side Nav 2024-04-18 18:37:43 -04:00
Johnny
d54780c913 Merge pull request #947 from git-kup/master
Update side_nav.php
2024-04-18 18:29:56 -04:00
git-kup
eb2cc7720e Update side_nav.php
Fix all 3 "Recurring" buttons where not inline with the rest of the buttons in the main side nav. it was slightly indent to the right.
2024-04-18 14:54:43 -04:00
johnnyq
894a4369b3 Fix Timezone always being UTC when sent to the mail queue when scheduling / cancelling tickets 2024-04-17 16:47:10 -04:00
johnnyq
7a2e063bde Fix Broken Reset Password due to incorrect timezone path 2024-04-17 14:05:43 -04:00
johnnyq
888552724a Set Timezone in all places and it needs to be set in and sperated it into a seperate include 2024-04-17 12:53:11 -04:00
johnnyq
7c10bbacd7 Fix not being able to filter tickets by using the search filter 2024-04-16 14:35:08 -04:00
johnnyq
2fd609bb2b Remove Piggy bank icon 2024-04-13 13:59:56 -04:00
johnnyq
7912c99b30 Add Account Selection filter in Expenses 2024-04-13 13:57:14 -04:00
Johnny
59b60e35c2 Merge pull request #945 from wrongecho/addnotice-stripefees-opentickettimer
Add removal notices for Stripe Fees & 'open ticket' time tracker
2024-04-13 13:37:53 -04:00
Johnny
4c02f3dc90 Merge pull request #944 from wrongecho/rec-inv-eml
Per-invoice notifications
2024-04-13 13:37:34 -04:00
Marcus Hill
cfa804b468 Add removal notices for Stripe Fees & 'open ticket' time tracker - these features are to be removed 2024-04-13 17:21:19 +01:00
Marcus Hill
0def06cf40 Add removal notices for Stripe Fees & 'open ticket' time tracker - these features are to be removed 2024-04-13 17:18:49 +01:00
Marcus Hill
a87a79b257 Per-invoice notifications
Hide per-invoice notif setting if invoice notifications are globally disabled
2024-04-13 17:10:10 +01:00
Johnny
a33a91cd95 Merge pull request #943 from wrongecho/ticket-notify-contact-manual-button
Ticket - Notifications
2024-04-13 11:50:04 -04:00
Marcus Hill
1c8b9a3319 Ticket - Notifications
Allow notifying contacts & watchers of a ticket when they are added/updated (#937)
2024-04-13 15:35:06 +01:00
Marcus Hill
2dc8e50ef8 Ticket - Notifications
Allow notifying contacts & watchers of a ticket when they are added/updated (#937)
2024-04-13 15:33:46 +01:00
wrongecho
034c12d6c3 Update README.md
Github readme - Updated bug report and forum roadmap links
2024-04-13 14:06:46 +01:00
johnnyq
c46d35247b Added recurring notification on off to cron 2024-04-12 20:25:05 -04:00
johnnyq
29a83b1e8e Added button to turn Email Notifications off or on on Recurring Invoices 2024-04-12 20:16:54 -04:00
johnnyq
ba66dbf887 Update DB Structure for the addition Email Notify to Recurring Invoices 2024-04-12 19:38:13 -04:00
Johnny
cc9abe5a09 Merge pull request #940 from wrongecho/tck-merge
Tickets - Merging
2024-04-12 19:30:04 -04:00
Johnny
65a3a03801 Merge pull request #939 from wrongecho/rec-invoice-var-name-fix
Client recurring invoice num fix
2024-04-12 19:29:55 -04:00
Marcus Hill
43bd028298 Tickets - Merging
- Fix merging UI not showing ticket status name correctly
- Add ability to move ticket notes and replies to the new parent ticket if desired (sometimes helpful, sometimes not)
2024-04-12 22:26:27 +01:00
Marcus Hill
bdd75f9f95 Client side nav pulls recurring invoice count from num_recurring, not num_recurring_invoices (this is instead used on the main page via inc_all) 2024-04-12 21:39:36 +01:00
wrongecho
453453cf9a Merge pull request #938 from git-kup/patch-1
Update client_overview.php
2024-04-12 21:29:33 +01:00
git-kup
60e067cc9e Update client_overview.php
Remove unpleasant looking elevation of note card in client overview
2024-04-12 15:51:01 -04:00
johnnyq
4ad897d85d Fix Closed Tickets showing up under stale tickets in client Overview 2024-04-12 14:43:53 -04:00
johnnyq
237cc38c60 Remove the recurring link on main tickets as this is on the side nav 2024-04-11 11:18:48 -04:00
johnnyq
f2125dd6d0 Changed the Tickets and Tasks Progress bar colors which have better contrast now 2024-04-10 17:24:34 -04:00
johnnyq
d0ed9fa817 Fix title to only show the session company name no need to nullify_html_entities the title this cause issues with umlaughts if you do 2024-04-10 15:11:09 -04:00
johnnyq
ccab5f9a00 Fix umlauts in settings browser title 2024-04-10 15:05:37 -04:00
johnnyq
b9342c8397 Update Browsers window title to the clients name when in the client section 2024-04-10 14:58:11 -04:00
johnnyq
51e80df71c Moved back Recurring Ticket, Invoices back in client side nav 2024-04-10 14:38:12 -04:00
johnnyq
d8bb6dd4c1 Moved back Recurring Ticket, Invoices and Expense back to the main side nav and added bagdge counters for them. They were just to buried and were used often 2024-04-10 14:06:25 -04:00
johnnyq
610ad04acf Tidy Side Nav 2024-04-10 13:40:38 -04:00
johnnyq
7dff524a19 Client domains: Do not show archived vendors and sort vendor names by name in the select boxes 2024-04-10 13:27:18 -04:00
johnnyq
88a96e3044 Reworked Client Domains, added mail host and dns host, made all the host columns sortable by reworking the logic and optimized the code further 2024-04-10 13:21:45 -04:00
johnnyq
7ca4163552 Ticket Details Update Do not show Invoice Button when Invoiced, do not show billable show Invoiced and the Invoice Number, fixed some padding 2024-04-10 11:27:58 -04:00
johnnyq
f526e908c3 Fix Bug where it doesnt add the tasks from a ticket template, this was due to the removal of task_description 2024-04-08 20:23:23 -04:00
johnnyq
199185a279 Fix Rounding Percents for tasks and tickets 2024-04-08 20:11:40 -04:00
johnnyq
3e14938a53 Add Open Quotes to the Side Nav 2024-04-08 17:35:21 -04:00
johnnyq
a9e5c1ff9c Add Open Invoices, Tickets and Projects Badges to Main Side Nav Bar 2024-04-08 17:22:08 -04:00
johnnyq
e849832f01 Make project number clickable and to view project details 2024-04-08 17:00:50 -04:00
johnnyq
0acd737135 Hide Ticket Close button until all tasks are complete 2024-04-08 16:58:43 -04:00
johnnyq
16fb1467a2 Added Project Prefix and Project Numbering System 2024-04-08 16:48:06 -04:00
johnnyq
f4051fe718 Updated Ticket details to include Tasks Completion Status and Collaborators 2024-04-08 15:58:59 -04:00
johnnyq
ae5f81d9b5 List all the ticket Callaborators in project details currenly it just gets the users that replied to tickets 2024-04-08 15:43:04 -04:00
johnnyq
6435ffde67 Added total time worked for all tickets in project details 2024-04-08 15:19:35 -04:00
johnnyq
ea85094be8 Fixed Bulk Assign Ticket, UI Update on Ticket Details, added Project details to the right pane, moved Client and ticket details along with Assign Ticket to the top Ticket Header 2024-04-08 14:44:35 -04:00
johnnyq
2aefbd9fba DB Dump from last commit 2024-04-08 12:23:05 -04:00
johnnyq
72f96e0ebf Added Project Manager field to projects 2024-04-08 12:22:16 -04:00
johnnyq
d2e11fca61 Remove the Add Contact to a ticket as this can be done at the top 2024-04-07 16:17:27 -04:00
johnnyq
dfb1304bfa When completeing task add a private note to the ticket along with a 5 Min time worked soon will be configurable based off the task 2024-04-07 14:26:37 -04:00
johnnyq
1e85b56d2a Use Plus icon for Adding tickets to Projects 2024-04-07 13:28:28 -04:00
johnnyq
e1312b29e5 Generating a Project with Tickets is now possible by selecting a project template when creating a new project 2024-04-07 13:17:52 -04:00
Johnny
d54bcf9a14 Merge pull request #936 from wrongecho/portal-pw-reset-delay
Client Portal
2024-04-07 11:40:24 -04:00
Johnny
3191ef120e Merge pull request #935 from wrongecho/client-show-archived
Client archiving
2024-04-07 11:39:31 -04:00
Johnny
acc7a7bc97 Merge pull request #934 from wrongecho/portal-sql-tidy
Client Portal - Ticket SQL Tidy
2024-04-07 11:38:19 -04:00
Marcus Hill
7171289f26 Client Portal
- Remove old fake send delay as reset links now go via mail queue
- Small tidy
2024-04-07 10:14:37 +01:00
Marcus Hill
abf01384ca Client archiving
Relates to #510

- Ability to see archived clients
- Ability to un-archive a client
- To help prevent accidents, client deletion button now only shows once the client is archived
2024-04-07 09:52:23 +01:00
Marcus Hill
da3201dbe0 Client Portal - Ticket SQL Tidy
Tidy up the client portal sql for viewing tickets to only grab required fields - #933
2024-04-07 09:15:55 +01:00
johnnyq
d762efd1a6 Try to differentiate Project Template and Project Details 2024-04-06 22:21:15 -04:00
johnnyq
004e2eb69c Make Add Ticket More Prominent in Projects and move it out of the 3 dots 2024-04-06 22:16:40 -04:00
johnnyq
e3ff8854f9 Removed Task Descriptions as the name says it all 2024-04-06 22:07:29 -04:00
johnnyq
e6e6c38db2 UI: Changed Reword to AI Reword and changed color from Primary blue to Secondary Gray so it doesnt get confuged with reply in ticket details 2024-04-06 21:54:59 -04:00
johnnyq
8473ee018f Removed Add Task Modal as this can be added inside the ticket 2024-04-06 21:44:42 -04:00
johnnyq
48ecde6e9b Allow Overriding a ticket templates subject when creating a ticket from template 2024-04-06 20:54:22 -04:00
johnnyq
8d571682cc Cleaned up Contact Add/Edit Relabeled Secure tab to Access and moved Roles to Access Tab ss this is much more suitable 2024-04-06 20:05:53 -04:00
johnnyq
6da826e418 Tidy Update Project and Ticket Templates Deleting functions 2024-04-06 19:05:36 -04:00
johnnyq
f6b87553ac Created new table to allow many to many relationship for Ticket and Project Templates 2024-04-06 18:37:37 -04:00
johnnyq
c17957fe0a Order by the order number then by ticket template name 2024-04-05 18:22:50 -04:00
johnnyq
b22781d2ea Add Ticket Template order under project templates, this will state the execution order when deployed 2024-04-05 18:20:09 -04:00
Johnny
60212b380c Merge pull request #932 from wrongecho/ticket-email-status-fix
Ticket status in emails
2024-04-05 17:01:48 -04:00
Johnny
97cc36e93a Merge pull request #931 from itflow-org/wrongecho-patch-1
Clarify remember me token is for 2fa
2024-04-05 16:52:07 -04:00
johnnyq
dbe5525046 Added the ability to Add ticket templates to project templates and also to remove ticket templates from project templates 2024-04-05 16:50:22 -04:00
Marcus Hill
be01525136 Ticket status in emails
- Fix tickets showing an "unknown" status in client update emails
- Remove old code related to closing tickets, as close is now it's own button
2024-04-05 21:48:57 +01:00
wrongecho
d7a466bde6 Clarify remember me token is for 2fa 2024-04-05 21:27:33 +01:00
johnnyq
5370a70ab8 Renamed Login In the Frontend UI to Credentials to better fit other types of creds like API Keys, WiFi etc, also renamed the password field to password / key 2024-04-05 15:06:42 -04:00
johnnyq
05d979b3d8 Do not allow editing a closed project 2024-04-05 14:19:34 -04:00
johnnyq
048b890465 Added Open and Closed Project button to projects list, renamed complete to close for projects 2024-04-05 14:06:57 -04:00
johnnyq
43c06b8151 Now you can mark a project complete when all Tickets for the project are closed and we now show an open or closed status by the project name 2024-04-05 13:48:50 -04:00
johnnyq
064b37f87e Quick Fix 2024-04-04 19:54:33 -04:00
johnnyq
4824ae8ef8 Make Remmeber Me Token Configurable and default to 3 2024-04-04 19:52:44 -04:00
johnnyq
e1f1122b3e Added more global search parameters to assets like serial, mac, ip, make, model, os, status, type 2024-04-04 14:58:14 -04:00
johnnyq
8ca8f3ef46 Added Files and Recurring Tickets to the Global Search 2024-04-04 14:48:59 -04:00
johnnyq
730c1f4df3 Feature: You can now create a ticket from a ticket template 2024-04-03 15:41:20 -04:00
johnnyq
c8bac996bf Bump TinyMCE from 6.8.2 to 7.0.0 2024-04-02 12:10:33 -04:00
wrongecho
ed87ddc2dd Merge pull request #929 from wrongecho/portal-ticket-list-fix
Client Portal Tickets - Adjust bad SQL query that shows ticket subjects for other contacts
2024-04-02 00:38:48 +01:00
Marcus Hill
bc8f79cdf9 Adjust bad SQL query that allowed contacts to see ticket subjects (but not content) for other contacts 2024-04-02 00:36:55 +01:00
Marcus Hill
2f473c6a03 Adjust bad SQL query that allowed contacts to see ticket subjects (but not content) for other contacts 2024-04-02 00:30:25 +01:00
johnnyq
da2fee7fc6 Fix add project ticket to show all tickets but closed one instead of showing just closed tickets 2024-04-01 17:37:47 -04:00
johnnyq
6d8ab569c9 Add Ticket subject to Add ticket to Project notification and logging 2024-04-01 17:33:36 -04:00
johnnyq
e5e17c669f Made Add Ticket to Project Functionable 2024-04-01 17:21:59 -04:00
johnnyq
365cd79999 No Need for if conditions on a blank due date as it is required 2024-04-01 16:49:08 -04:00
johnnyq
cf71a58526 Make Project Due Date Required Field, Do not require a project Template 2024-04-01 16:45:13 -04:00
johnnyq
f1833e1083 Updated ticket status color capabilities to use multiple color instead of a select few, added activate disable ticket statuses, fixed ticket status Left joins in a few more areas 2024-04-01 16:27:05 -04:00
johnnyq
912e2774f8 Dont display tasks if none are set 2024-03-31 14:19:06 -04:00
johnnyq
9243964242 Tidy Projects UI 2024-03-31 14:17:35 -04:00
johnnyq
b04c2e1232 Added Project due to the UI: 2024-03-31 14:02:48 -04:00
johnnyq
2fa86d9ae7 Update DB Structure to include task order and project due date 2024-03-31 13:55:38 -04:00
johnnyq
3b46f1e6bd Added the ability to Add Ticket and Edit Ticket statuses, disallowed deleting editing system tickets, this is still work in progress 2024-03-31 13:40:31 -04:00
Johnny
dac5fb1284 Merge pull request #928 from wrongecho/login-tidy
Login related tidying
2024-03-30 20:33:36 -04:00
Marcus Hill
d94b9ce7bb Login related tidying
- Feature: Show users their remember-me tokens and allow them to be revoked
- Log when a user generates a remember-me token during sign in
- General refactoring and tidying up
2024-03-30 23:19:50 +00:00
johnnyq
2c22c732e4 Comment out updating undefined statuses 2024-03-30 17:53:30 -04:00
johnnyq
d74c2c6898 New Tciket Status: Update Projects 2024-03-30 17:39:45 -04:00
johnnyq
3fb3f647cf New Tciket Status: Fix Unbilled Ticket Report to use ticket closed at IS NOT NULL 2024-03-30 17:29:38 -04:00
johnnyq
770356ba10 No Need for ticket status name or status id when bulk closing tickets 2024-03-30 17:16:01 -04:00
johnnyq
07892afe24 Fix missing ) in calendar events 2024-03-30 17:02:41 -04:00
johnnyq
5b9cc50bae Allow to search by ticket status name 2024-03-30 16:59:49 -04:00
johnnyq
0a52e3a33d Update Calendar Events use the ticket_scheule field to determine if a ticket is scheduled or not instead of status as scheduled is not a core status 2024-03-30 16:55:11 -04:00
johnnyq
afcb0cffdc Remove Ticket Status display and priority and assigned to from invoice also updated the new ticket status int format 2024-03-30 16:34:14 -04:00
johnnyq
67a045a2b5 New Ticket Status Fix Gobal search 2024-03-30 16:18:39 -04:00
johnnyq
13a1d9d394 New Ticket Status Fix Ticket Listing is asset_Details 2024-03-30 16:08:18 -04:00
johnnyq
f39c380c47 New Ticket Status Correct Ticket Side nav Badges 2024-03-30 15:58:03 -04:00
johnnyq
f99be168cf New Ticket Status Fix dashboard Tickets 2024-03-30 15:55:04 -04:00
johnnyq
b63eddb300 Fix Ticket Close to use the new ticket status INT instead of string 2024-03-30 15:46:02 -04:00
johnnyq
4aad95d380 Add Ticket Closed at time to tickets that were Bulk Closed 2024-03-30 15:28:22 -04:00
johnnyq
b4db5013a3 Fix Bulk Close Ticket not updating the ticket_closed_at field and not using the new status id 2024-03-30 15:20:01 -04:00
johnnyq
387d2733fa Fixes ticket status that did not conform to the current ticket statuses to Open 2024-03-30 15:06:52 -04:00
johnnyq
349a276de2 Merge branch 'master' of github.com:itflow-org/itflow 2024-03-30 14:59:08 -04:00
johnnyq
e177dae237 Created Project template details page and updates Tasks in project details 2024-03-30 14:58:48 -04:00
Johnny
e2f825e5c1 Merge pull request #926 from wrongecho/ticket-statuses
Ticket Statuses from DB
2024-03-30 14:57:46 -04:00
wrongecho
fa777eaf9c Merge pull request #927 from itflow-org/we-template-nav
Update admin_side_nav.php
2024-03-30 09:10:20 +00:00
wrongecho
084dcb782e Update admin_side_nav.php
https://forum.itflow.org/d/785-new-templates-ui-bug-admin
2024-03-30 09:07:32 +00:00
wrongecho
dfa952ab73 Update README.md
Bugs should also go to the forum
2024-03-30 08:27:39 +00:00
Marcus Hill
7df1d419fa Ticket Statuses from DB / use left join instead of a function, hard-code system statuses 2024-03-29 23:20:52 +00:00
Marcus Hill
a961b8aa72 Ticket Statuses from DB / touchups 2024-03-29 12:08:02 +00:00
wrongecho
2e95b7cb6e Merge branch 'master' into ticket-statuses 2024-03-29 11:58:53 +00:00
Marcus Hill
8607198c3e Ticket Statuses from DB / add project id 2024-03-29 11:32:46 +00:00
Marcus Hill
667a93210c Ticket Statuses from DB 2024-03-29 11:22:32 +00:00
johnnyq
78e92ea8d6 Add Project Templates Listing, edit and add, more to come 2024-03-28 22:03:57 -04:00
johnnyq
89a1c5d2d8 Added Ticket Templates and the ability to add Tasks to the template, reworked the ticket details tasks and adding tasks 2024-03-28 21:09:32 -04:00
johnnyq
08fc72ded7 Fix Last Reponse Column under tickets and client tickets use the ticket_reply_created_at instead of ticket_updated_at 2024-03-27 23:12:17 -04:00
johnnyq
ee308453db Dont break when division of 0 occurs 2024-03-27 22:51:20 -04:00
johnnyq
e42c5bc2f5 Major UI Updates to projects, created project details which display project stats tickets and tasks, tickets can be linked to a project, soon will add all users who contributed to a project and some more stats along with a nice timeline from created to deadline 2024-03-27 22:27:56 -04:00
johnnyq
c9724bea0d DB Update task, ticket and project templates added 2024-03-27 19:16:44 -04:00
johnnyq
76cce6ac23 Updated Edit Domain and Certificates to match the tabing in the add modal 2024-03-27 14:53:15 -04:00
johnnyq
2012a80fe5 DB Duimp for the new network fields 2024-03-27 14:21:18 -04:00
johnnyq
8addc4f55c Feature: Added Subnet Mask and primary and secondary DNS change the wording for network to IP / Network in case a single IP needs to be used for example an Internet Connection, Added more newe tabs to the Add/Edit Network so everything fits and is organized 2024-03-27 14:19:32 -04:00
johnnyq
720a4af44e Fixed Missing Invoice Button when ticket is closed 2024-03-27 11:02:45 -04:00
johnnyq
26dc3172e7 Initial Project work on the UI started 2024-03-27 00:26:53 -04:00
johnnyq
6ff740e619 Fix Missing Asset Buttons when selected 2024-03-26 16:31:24 -04:00
johnnyq
0931f60764 Ticket Details Tidy Buttons and Ticket Details 2024-03-26 16:08:32 -04:00
johnnyq
c052850465 Automatic submit when Assign Tech is selected 2024-03-26 15:41:16 -04:00
johnnyq
cdc87562c9 Ticket Details UI Enhancements, Dont display entity cards if no data, Moved Add Entities to the Top Bar along with Invoice and Close Ticket. Combine the Client Details and Assign Card into one card, and Tidy Work 2024-03-26 15:11:57 -04:00
johnnyq
038e7e4a52 Add Task Completion Date and Time Stamp 2024-03-26 14:10:14 -04:00
johnnyq
31184dab62 Moved Tasks Card under Details, Added tje ability to Edit and mark a task complete 2024-03-26 14:06:32 -04:00
johnnyq
c40c204ce1 Use full name in vars 2024-03-25 16:45:34 -04:00
johnnyq
e2733fecb7 Some initial beginnings of task management in tickets, currently you can create and delete them more to come 2024-03-25 16:43:56 -04:00
Marcus Hill
63f35d5760 Ticket Statuses from DB
First swing at this to share my progress, isn't ready to merge yet but would appreciate thoughts
2024-03-24 22:57:21 +00:00
Marcus Hill
9c68a315db Ticket Statuses from DB
First swing at this to share my progress, isn't ready to merge yet but would appreciate thoughts
2024-03-24 22:54:38 +00:00
Marcus Hill
5e63ef9a2a Ticket Statuses from DB
First swing at this to share my progress, isn't ready to merge yet but would appreciate thoughts
2024-03-24 22:36:21 +00:00
Johnny
7702d8c5bf Merge pull request #920 from wrongecho/ticket-cleanup
General ticket updates/cleanup
2024-03-24 10:56:51 -04:00
Johnny
fe644317b6 Merge branch 'master' into ticket-cleanup 2024-03-24 10:56:43 -04:00
Johnny
865c2dcb84 Merge pull request #919 from wrongecho/ticket-status-color
Ticket status colours
2024-03-24 10:54:27 -04:00
Marcus Hill
ccb1bf9b0d General ticket updates/cleanup
- Tickets & Client Tickets: General tidy up, fix broken vars, remove unneeded vars, add comments
- Client Portal: Show assigned agent for open tickets
2024-03-24 11:31:46 +00:00
Marcus Hill
796ba6633e Ticket status colours
Standardize ticket statuses via function
2024-03-24 10:12:02 +00:00
johnnyq
b47aba1d5a Feature: Submit form when drop down are selected everywhere 2024-03-23 17:31:42 -04:00
johnnyq
2afb467503 Feature: Submit form when drop down are selected 2024-03-23 17:16:06 -04:00
johnnyq
1792aaee64 Feature added location to calendar events and created new tab called details in calendar events for description and location 2024-03-23 16:43:42 -04:00
johnnyq
5ebc6ffde8 Feature Added ability to select a ticket location for location based, still need to add more to this functionality 2024-03-23 16:24:40 -04:00
johnnyq
534e02e2c7 Feature: Color ticket rows yellow if Last Response was from a client This will let you know you need to be the next responder 2024-03-23 16:03:52 -04:00
johnnyq
79ea97410e Feature Show who last replied in ticket listings 2024-03-23 15:59:02 -04:00
johnnyq
4d773e895a Tid 2024-03-23 15:24:14 -04:00
johnnyq
df313e5bd6 Tidy removed Help on the Top Nav Bar too much clutter and unnessesary 2024-03-23 15:23:12 -04:00
johnnyq
9e7f50b9eb Feature Add Bulk Cancel and Delete to Mail Queue for mail that are any status other than sent 2024-03-23 15:01:01 -04:00
johnnyq
3cf1b8427c Fix Asset Counts into a better defined count query 2024-03-22 19:01:10 -04:00
johnnyq
ca7cf62098 Do not show all asset button if no assets are found, also get correct count of assets types if location is selected 2024-03-22 18:38:29 -04:00
johnnyq
1d9d9a89ed Feature Added Location filter to assets 2024-03-22 18:09:15 -04:00
johnnyq
8270c8fcc4 Cannot edit driver Fix 2024-03-22 17:16:06 -04:00
johnnyq
cf8b2aa7ad Add eye icon for people viewing tickets 2024-03-22 15:58:25 -04:00
johnnyq
eda78f0927 Moved Ticket Viewing to the top if someone is viwing the ticket the same time you are 2024-03-22 15:44:24 -04:00
johnnyq
3974055bff Missing Div 2024-03-22 15:33:52 -04:00
johnnyq
900df014b7 Do not show Responses if the count is 0 2024-03-22 13:35:48 -04:00
johnnyq
4cfbfb1a73 Improved spae utiliztion in ticket details by Removing the Extra Card on the left and right panes 2024-03-22 13:25:13 -04:00
johnnyq
90156f4f1b Enhanced the UI for document details removed the lists in replacement of divs, remove items to the far right, removed the span buttons and used normal button as it took up too much space 2024-03-22 13:17:47 -04:00
johnnyq
a6a763c24c Move View Queue Message away from a modal as tables tend to break the modal causing distorted view, more ui work for this to come 2024-03-21 18:01:41 -04:00
johnnyq
0c62ce169f Add Pretty content JS function to global search so HTML ticket replies look nicer and fit to width 2024-03-21 17:19:06 -04:00
johnnyq
e34f66f00a Updated Services to use the media css function 2024-03-21 17:12:13 -04:00
johnnyq
1f1197be50 Missing var 2024-03-21 16:16:32 -04:00
johnnyq
7d22f208b8 Enhancement moved to media css for domain listing and added description field 2024-03-21 16:07:54 -04:00
johnnyq
ed20681790 Update Client Vendors to use the new media css function 2024-03-21 15:56:09 -04:00
johnnyq
51dba5ac1a Certificates Enhancement, Use Media CSS, add description create a new tab for notes 2024-03-21 15:46:14 -04:00
johnnyq
5266f126cb Set Timezone in the CRON files as well as the command line PHP doesn't always respect the system timezone 2024-03-21 14:55:54 -04:00
johnnyq
2f4ddd85ca Fix PHP UTC issue, new PHP updates did not not respect System TimeZone 2024-03-21 14:23:16 -04:00
johnnyq
bdf868588e Ability to search by network description 2024-03-20 18:46:34 -04:00
johnnyq
16cfc3e032 Add Description to Networks 2024-03-20 18:44:32 -04:00
johnnyq
ca0eb4f261 Adjust media css listing to use divs instead of <p> tags 2024-03-20 18:11:37 -04:00
johnnyq
5d3e6da38d Removed Extra location name under edit location 2024-03-20 17:46:32 -04:00
johnnyq
bfe7c3098d Fix broken open uri 2024-03-20 17:31:04 -04:00
johnnyq
71c4537263 Client Logins Enhancement: Moved to the new media CSS Class, fixed password reveal would take you to the top of the page, moved open URI to the action bar as a button, fixed password alignment for copy to clipboard, description is now below the login name, made set button to type=button to prevent submits if wrapped in a form 2024-03-20 17:28:09 -04:00
johnnyq
534096f182 Software Licenese / Template Enhancements: Fixed create Software from template, added description, user media css for licenses and templates, reworked the add edit modal, Removed Software Login 2024-03-20 16:54:38 -04:00
johnnyq
845e168942 Updated the rest of wording regarding email being sent to email been queued with a link to the Mail Queuer 2024-03-20 14:22:57 -04:00
johnnyq
c0115a26c5 Group Ticket Replies and only search in ticket reply not ticket subject or ticket details In global search 2024-03-20 13:36:04 -04:00
johnnyq
6790464e90 Do not show DHCP if IP is null under assets 2024-03-20 13:05:10 -04:00
johnnyq
dafdc7a63b Include Client Name in Ticket Replies Global Search 2024-03-20 13:00:50 -04:00
johnnyq
6a3d53fc4b Feature: Added Ticket Replies to Global Search 2024-03-20 12:53:25 -04:00
johnnyq
643144bc5e Name Margin enhancement 2024-03-19 18:14:36 -04:00
johnnyq
1ff614381f UI Enhancement to contact listing now use the media class 2024-03-19 18:10:40 -04:00
johnnyq
a8bacd5acb Give notes a little more space 2024-03-19 17:52:27 -04:00
johnnyq
4c01c472b8 Add UI and logic for location Description, Tweak Location Listing UI to use the media class 2024-03-19 17:48:54 -04:00
johnnyq
b800d52ea9 No Null for Invitation status 2024-03-19 17:12:22 -04:00
johnnyq
4fec8efecd DB Structure Update, added missing Short description fields to several entities, Added Event Attendees Table, Added event location, added db support support to link files with an asset, added db support to allow multiple contacts for a vendors 2024-03-19 17:08:37 -04:00
johnnyq
1a74acfbff Adjust margins in assets 2024-03-19 15:27:39 -04:00
johnnyq
904b87fff6 reduced serial number to just serial 2024-03-19 15:13:42 -04:00
johnnyq
df4f8a518c Add DHCP next to IP if none is given 2024-03-19 15:11:06 -04:00
johnnyq
e426778ac2 Remove Copy IP Button from assets as its not nessessary and was taking up precious space 2024-03-19 15:09:39 -04:00
johnnyq
2320a93f82 Renamed Column headers to increase margin space 2024-03-19 15:03:57 -04:00
johnnyq
76eae92954 UI Use media Class for assets to seperate the icon from the name / description text, moved logins and and remote links to the action column instead of by the asset name also increased right margin of the device icons for top search bar 2024-03-19 15:00:59 -04:00
johnnyq
2c8c275a7e Use bootstrap css media function to properly seperate icon on the left and text on the right for files, Fix Search for files within a folder. 2024-03-19 14:33:21 -04:00
Johnny
294760b50c Merge pull request #917 from wrongecho/guest-sharing-otp
Guest login sharing - OTP
2024-03-17 22:52:54 -04:00
Johnny
0dfca605a8 Merge pull request #916 from wrongecho/assets-and-logins
Assets and Logins
2024-03-17 22:52:29 -04:00
Johnny
aed46a3b21 Merge pull request #915 from wrongecho/contact-pw-generator-bugfix
Bugfix: Contact generated passwords are in quotes
2024-03-17 22:50:19 -04:00
Marcus Hill
f1528b9e95 Guest login sharing - OTP
Bugfix: Fix guests not being able to see the 2FA/TOTP token via the sharing link
https://forum.itflow.org/d/646-shared-login-with-otp
2024-03-17 19:32:49 +00:00
Marcus Hill
6788781ee6 Assets and Logins
- Show asset location when relating it to a login
- Bugfix: Swap login_id for asset_id on client_assets.php, as login_id won't yet be defined
- Bugfix: Don't show archived assets in the login relation modal
2024-03-17 19:19:59 +00:00
Marcus Hill
d29726f63e Bugfix: Contact generated passwords are in quotes
Fixing as per https://forum.itflow.org/d/760-password-generator-include-at-start-and-end
2024-03-17 18:51:56 +00:00
Johnny
064629d499 Merge pull request #914 from wrongecho/smtp-test-wording
Reword SMTP test message to make it clear that messages are queued
2024-03-17 13:42:31 -04:00
Johnny
ba68fe54ab Merge pull request #911 from wrongecho/rec-tck-agent-assign
Ticketing updates
2024-03-17 13:42:18 -04:00
Marcus Hill
678c53a8fb Reword SMTP test message to make it clear that messages are queued 2024-03-17 16:39:03 +00:00
wrongecho
0fd50a33ea Update db.sql
Recurring ticket agent assignment, retrigger checks
2024-03-17 16:26:59 +00:00
wrongecho
43ebb867b2 Merge pull request #912 from itflow-org/wrongecho-db-sql-lint
Create dbsql-lint.yml
2024-03-17 16:24:53 +00:00
wrongecho
73b5a6b0a5 Create dbsql-lint.yml 2024-03-17 16:23:55 +00:00
Marcus Hill
dfce95a67b Recurring tickets bugfixes 2024-03-17 11:57:58 +00:00
Marcus Hill
f9a5ca1ef8 Ticketing updates
- Bugfix: Prevent tickets from being assigned to disabled techs
- Bugfix: Un-assign all open tickets when a tech account is disabled
- Allow auto-assignment of recurring/scheduled tickets to an agent/tech (#901)
- Rework layout of recurring/scheduled ticket modal
2024-03-17 11:09:53 +00:00
johnnyq
cdd16bd460 Add file Description below filename, still need to work on the UI a bit 2024-03-15 18:44:16 -04:00
johnnyq
27a96c2293 Add Important asset, document, file, add file Description to DB Structure 2024-03-15 18:32:42 -04:00
johnnyq
d32925eefc Tidy 2024-03-13 14:03:07 -04:00
johnnyq
07c27eb2f9 Merge branch 'master' of github.com:itflow-org/itflow 2024-03-11 17:51:27 -04:00
johnnyq
79011763db Fix issue where certrain password characters would break writing config.php file which would break the setup also check for valid host 2024-03-11 17:50:48 -04:00
Johnny
a1ccecea9e Merge pull request #908 from wrongecho/guest-sharing-downloads
Guest Sharing - File downloads
2024-03-11 16:49:11 -04:00
Marcus Hill
52685e424b Guest Sharing - File downloads
- Fix a bug where the file name wouldn't be shown to guests in certain situations
- General refactor and tidy of the file download code
2024-03-10 19:06:40 +00:00
Johnny
4b839c8b23 Merge pull request #907 from wrongecho/file-upload-pfx
Allow pfx file uploads
2024-03-10 13:38:04 -04:00
Marcus Hill
c251cc1faf Allow pfx file uploads 2024-03-10 10:48:17 +00:00
johnnyq
a40ec71b0a Fix Broken Test Input Text Reword under AI Settings 2024-03-08 16:11:25 -05:00
johnnyq
5d40f7480b Add Type Button to prevent submit for copy Email in contacts 2024-03-08 12:23:44 -05:00
johnnyq
82012ced62 Use margin instead of br to seperate Last Login Info on users list 2024-03-06 12:06:32 -05:00
johnnyq
a86523bd1b Removed the requirment visual for transer method as its not required 2024-03-05 19:26:16 -05:00
johnnyq
37a4f5cee0 Added Method of Transfer to Transfers frontend, currently uses payment type category and is optional useful to see how the money got transferred 2024-03-05 19:22:05 -05:00
johnnyq
1dfc819660 Add Transfer Method to the Database this will in the method to transfer money from 1 account to another 2024-03-05 18:48:34 -05:00
johnnyq
120348df4d Add _amount 2024-03-05 17:07:51 -05:00
johnnyq
efdef7f6aa Better Descriptive Vars to seperate amounts vs counts in Invoices 2024-03-05 17:05:43 -05:00
johnnyq
5e88664558 Exclude Cancelled 2024-03-05 16:59:21 -05:00
johnnyq
e6192ab5eb Invoice Top Bar Statuses, Get the Real Overdue amout which is to subtract from the partial payments 2024-03-05 16:41:24 -05:00
johnnyq
2d447369b6 UI: Icon updates for income and profit 2024-03-05 16:37:20 -05:00
johnnyq
8719919639 UI: Update Invoices Listing Top Header to include Drafts, Unpaid and Overdue instead of Drafts, Sent, Viewed and Partial 2024-03-05 16:23:05 -05:00
johnnyq
a91352229e Drop asset_login_id as we have login_asset_id to allow 1 asset many logins, also drop the unused many to many asset login table 2024-03-03 13:40:50 -05:00
johnnyq
51248ed841 You can now view all login / passwords for an asset under asset lists and under asset details now 2024-03-03 13:23:52 -05:00
johnnyq
eeb5cece7c Remove SQL Left Join logins for assets as this is causing duplicate assets to appear if more than 1 related login exists, this break viewing login password for each asset, we will handle this a little differently 2024-03-03 13:03:49 -05:00
Johnny
8c51754c6b Merge pull request #900 from wrongecho/ticketing-hide-functions-closed
Ticketing (and Invoicing)
2024-03-02 19:48:55 -05:00
Johnny
cb57a1e86b Merge branch 'master' into ticketing-hide-functions-closed 2024-03-02 19:48:44 -05:00
Johnny
ef14e95adf Merge pull request #902 from wrongecho/ticket-statuses
Ticket States
2024-03-02 19:44:39 -05:00
Marcus Hill
81301388cd Ticket Statuses
Standardize on 5 consistent ticket states:-
- New (Red/Danger)
- Open (Blue/Primary)
- On Hold (Green/Success)
- Auto Close (Dark/black)
- Closed (Dark/black)

Update parts of the app where these have deviated from, as they have not been updated everywhere.
Other states may be configurable in future via custom fields.
2024-03-03 00:22:20 +00:00
Marcus Hill
b9431645d3 Ticket Statuses
Standardize on 5 consistent ticket states:-
- New (Red/Danger)
- Open (Blue/Primary)
- On Hold (Green/Success)
- Auto Close (Dark/black)
- Closed (Dark/black)

Update parts of the app where these have deviated from, as they have not been updated everywhere.
Other states may be configurable in future via custom fields.
2024-03-03 00:13:29 +00:00
Marcus Hill
66e07b0c47 Ticket closure email wording 2024-03-02 18:35:10 +00:00
Marcus Hill
3084e9e0d3 Ticketing (and Invoicing)
- Hide the ability to add/delete watchers when a ticket is closed
- Hide watchers card entirely when tickets are closed, if the ticket had no watchers
- Hide the ability to schedule a ticket when a ticket is closed
- Don't include tickets in an auto-close state in the sidebar ticket counts
- Small edit to the ticket closure wording to account for requests and issues
- Small edits to invoice emails text
2024-03-02 18:31:01 +00:00
wrongecho
f5a6dc2b0a Update FUNDING.yml
Adjust sponsor/donate link on Github
2024-03-02 09:38:49 +00:00
johnnyq
f860d36334 Fix Ticket Notifications via Client Portal 2024-03-01 14:43:50 -05:00
johnnyq
15e729e65a Removed old Remember me token, update revoke remember me function 2024-02-29 15:51:26 -05:00
johnnyq
6641c5c338 Added removed old remmeber me tokens after 48 hours to the cron.php cleanup section 2024-02-29 14:46:02 -05:00
johnnyq
9955ff56f5 Carry over discount amounts when copying a quote or invoice 2024-02-29 14:28:48 -05:00
johnnyq
85cc8c163b Carry over discount amounts from recurring and quotes to invoice, fix force recurring 2024-02-29 14:15:57 -05:00
johnnyq
998a701634 UI: Show assigned contact in asset dropdown select menu in tickets 2024-02-26 16:50:12 -05:00
johnnyq
be5bf1853e Sanitize From Name and From Email Output in bulk mail as its not sanitized when the vars are grabbed from get_settings.php 2024-02-26 15:58:28 -05:00
johnnyq
015ef13c55 Show the From name from System, Billing, Sales and Support Email in Bulk Email from section 2024-02-26 15:51:44 -05:00
johnnyq
18bc7c909e Sort client names ASC not desc for bulk mail 2024-02-26 15:45:11 -05:00
johnnyq
0a088a43c5 UI: Add some bottom margin so when the button is reveals rows dont shift down a few lines 2024-02-26 15:43:20 -05:00
johnnyq
4369b3bd12 Include and sort by client name first in global bulk email 2024-02-26 15:42:03 -05:00
johnnyq
c3c9da0c71 Use the bulk mail function in bulk mailers for standardization, also fix unused vars in smtp settings form 2024-02-26 15:38:00 -05:00
johnnyq
1c50a0e314 UI: Center Aligned Billable under client tickets 2024-02-26 13:08:20 -05:00
johnnyq
0997282077 Fix broken link logs.php to admin_logs.php 2024-02-26 12:28:21 -05:00
Johnny
fe5376c52e Merge pull request #893 from wrongecho/ticket-billable-column
Hide billable tickets when accounting is disabled
2024-02-24 11:19:48 -05:00
Johnny
e1b29df0ee Merge pull request #894 from wrongecho/locations-api
Add locations read api endpoint
2024-02-24 11:19:40 -05:00
Johnny
d318fffc8c Merge pull request #892 from wrongecho/mail-queue
Mail queue & tickets
2024-02-24 11:19:34 -05:00
Johnny
2016275db3 Merge pull request #890 from wrongecho/categories-shortcut-fix
Fix error 404 on categories.php as it is now admin_categories.php
2024-02-24 11:18:54 -05:00
Marcus Hill
54e015b5a5 Add locations read api endpoint 2024-02-24 11:56:18 +00:00
Marcus Hill
78db33c5d5 Hide billable tickets when accounting is disabled 2024-02-24 11:50:13 +00:00
Marcus Hill
1e8fbddcbd Mail queue & tickets
- Allow cancelling emails
- Adjust wording of ticket scheduling emails
2024-02-24 11:06:55 +00:00
johnnyq
da54b125c3 Merge branch 'master' of github.com:itflow-org/itflow 2024-02-23 23:45:06 -05:00
johnnyq
6019a4d1be DB Structure fix 2024-02-23 23:44:49 -05:00
wrongecho
c510eac613 Merge pull request #891 from wrongecho/login-encryption-fix
BUGFIX: Login with and actually decrypt the master encryption key
2024-02-23 21:29:07 +00:00
Marcus Hill
6432ee0486 BUGFIX: Login with and actually decrypt the master encryption key 2024-02-23 21:20:03 +00:00
Marcus Hill
4b730147c0 Fix error 404 on categories.php as it is now admin_categories.php 2024-02-23 20:52:34 +00:00
Johnny
603d677dfd Merge pull request #888 from wrongecho/dns-expiry-null-fix
Domain expiration dates
2024-02-23 12:23:20 -05:00
johnnyq
31184f0db1 Fix Broken DB Update was missing Primary Key declaration 2024-02-22 17:43:08 -05:00
Johnny
46344c962b Merge pull request #886 from twetech/0.1.8.4
Remember Me Tokens, and AI Enhancements
2024-02-22 17:34:10 -05:00
Johnny
f363e7e6fc Merge pull request #887 from Viborg-IT/vendor-link
Update client_vendors.php
2024-02-22 17:29:27 -05:00
Marcus Hill
dae51c9b8b Domain expiration dates - remove debug 2024-02-22 21:52:57 +00:00
Marcus Hill
66dc7e799b Domain expiration dates
- Update logic in post when adding/editing a domain to better account for null values
- Update logic in cron domain refresher to account for null values
- Prevent cron domain refresher getting stuck on a single domain
- Exclude domains with no expiration date from the cron nightly renewal alerts
2024-02-22 21:51:12 +00:00
Nicky Mogensen
30b6f9b6a7 Update client_vendors.php
Added column to quick access a vendors support url
2024-02-22 21:12:10 +01:00
o-psi
5d620d041a Fix user role and other definitions 2024-02-22 12:15:15 -06:00
o-psi
1d4271de36 Merge branch '0.1.8.4' of https://github.com/twetech/itflow into 0.1.8.4 2024-02-22 17:49:11 +00:00
o-psi
3947c3a329 Remove comment 2024-02-22 17:49:08 +00:00
o-psi
28ab569dfc Update Prompt 2024-02-22 17:48:53 +00:00
Andrew Malsbury
d2c33c28a0 Merge pull request #5 from twetech:remember-me-tokens-table
Change remember me tokens to many:many table
2024-02-22 11:46:42 -06:00
o-psi
c2cf0bb448 Change remember me tokens to a many:many table to allow for multiple devices to be remembered. 2024-02-22 17:45:09 +00:00
Andrew Malsbury
e656837d3c Merge branch 'itflow-org:master' into 0.1.8.4 2024-02-22 11:06:49 -06:00
o-psi
06ce12ba47 Update AI prompting 2024-02-21 18:13:10 +00:00
o-psi
b31f1b4c49 add ticket description to AI Query 2024-02-21 11:16:40 -06:00
johnnyq
4fddeb88b7 Fix issue with password managers asking for passwords when migrating away from the assets page 2024-02-20 14:53:32 -05:00
johnnyq
14cb4bb09a set the remember me token from 14 Days to 2 Days or 48 Hours 2024-02-19 15:00:32 -05:00
johnnyq
03bd7f837c Merge branch 'master' of github.com:itflow-org/itflow 2024-02-16 14:53:30 -05:00
johnnyq
703e0f6bb2 Remove Axios as we are not using it 2024-02-16 14:52:57 -05:00
wrongecho
ae80bba5ce Deleting recurring tickets - correctly pull subject/frequency 2024-02-16 12:20:49 +00:00
wrongecho
793a4f9c8e Recurring ticket deletion wording 2024-02-16 12:18:36 +00:00
wrongecho
e6418046aa Fix deleting recurring tickets 2024-02-16 12:15:55 +00:00
johnnyq
2a4efe629f Move Repky buttons and Control on one row removed the Timer Icon just use boxes for time as this is assumed 2024-02-15 18:24:07 -05:00
johnnyq
16a8e3d828 UI: Wrap tickert detail UI into 3 card sections for ease of seperation 2024-02-15 18:19:18 -05:00
johnnyq
66d118c1f2 UI: Wrap Dashboard and Top Controls in seperate cards 2024-02-15 18:05:37 -05:00
johnnyq
b4c50a9cd8 UI: Wrap the Calendar in a card similar to client calendar 2024-02-15 17:59:07 -05:00
Johnny
8e3c490092 Merge pull request #884 from twetech/0.1.8.4
0.1.8.4
2024-02-15 17:56:04 -05:00
o-psi
671cdd9832 Fix filtering to admin bulk mail 2024-02-15 22:16:01 +00:00
o-psi
466fbc03ca Merge branch '0.1.8.4' of https://github.com/twetech/itflow into 0.1.8.4 2024-02-15 22:12:43 +00:00
o-psi
958e808c88 fix links to contacts 2024-02-15 22:12:41 +00:00
o-psi
1ffa918d8e Merge branch '0.1.8.4' of https://github.com/twetech/itflow into 0.1.8.4 2024-02-15 16:09:25 -06:00
o-psi
79157c88ea Fix collections report 2024-02-15 16:09:10 -06:00
o-psi
570b3479a9 Only Special Contacts 2024-02-15 22:08:40 +00:00
o-psi
5d15a7ded9 Merge branch '0.1.8.4' of https://github.com/twetech/itflow into 0.1.8.4 2024-02-15 22:04:57 +00:00
o-psi
633c2f785c Add mass bulk mail 2024-02-15 22:04:54 +00:00
o-psi
9e2f92a92f Fix client statement payments 2024-02-15 15:41:34 -06:00
o-psi
277e91b07e Update Password Gen Function 2024-02-15 21:35:21 +00:00
Johnny
e358230a44 Merge pull request #883 from o-psi/patch-1
Add Zapcal to the readme
2024-02-15 12:19:47 -05:00
Johnny
b8f8cca54c Merge pull request #881 from twetech/0.1.8.3
0.1.8.3 (Calendar Update)
2024-02-15 12:16:51 -05:00
Andrew Malsbury
4db0a68488 Update README.md 2024-02-15 11:00:25 -06:00
Andrew Malsbury
00d4284e7c Merge pull request #4 from twetech/0.1.8.3
Allow canceling scheduled tickets
2024-02-15 10:36:25 -06:00
o-psi
cdf4118b09 Allow canceling scheduled tickets 2024-02-15 16:31:35 +00:00
Andrew Malsbury
f34818425b Merge pull request #3 from twetech/client-recurrings
Make same changes to client pages as main recuring invoices and tickets
2024-02-15 09:53:05 -06:00
o-psi
724540da33 Make same changes to client pages as main recuring invoices and tickets 2024-02-15 15:51:11 +00:00
o-psi
a2f8f8f731 Make script source local, and fix client_events.php 2024-02-15 15:07:12 +00:00
o-psi
767e0ecfd7 Remove old FullCalendar 2024-02-14 22:31:45 +00:00
o-psi
5a926ba205 Remove readme 2024-02-14 22:30:46 +00:00
o-psi
31171405ef Remove excess from FullCalendar 2024-02-14 22:27:25 +00:00
o-psi
09f7f8b1cd Adjust Calendar Spacing 2024-02-14 16:05:40 -06:00
o-psi
f573f0401b More calendar tweaks 2024-02-14 21:55:46 +00:00
o-psi
1f3799ebe3 Update Calendar to Full Calendar 6.1.10 2024-02-14 20:21:19 +00:00
Johnny
20845d72da Merge pull request #880 from wrongecho/logs
Update URL from logs.php to admin_logs.php
2024-02-12 17:55:31 -05:00
Johnny
e2acf07d6c Merge pull request #879 from wrongecho/recurring-tickets-wording
Recurring tickets
2024-02-12 17:55:08 -05:00
Marcus Hill
aee47adf12 Update URL from logs.php to admin_logs.php 2024-02-12 22:25:35 +00:00
Marcus Hill
2c7b65dad2 Recurring tickets
- Reword some areas to better separate recurring and scheduled tickets.
- Fix bulk actions not doing anything due to form name mismatch
2024-02-12 22:17:05 +00:00
Johnny
85f55a629b Merge pull request #878 from wrongecho/scheduling
Ticket scheduling enhancements
2024-02-12 15:00:30 -05:00
Marcus Hill
b64df190ed Ticket scheduling
- Prevent scheduling dates in the past (also for API keys expiry date)
- Correct the ticket URL in the agent email
- Update the onsite value in the database when scheduling a ticket
- Reword the internal note to include a user friendly time and whether the ticket is onsite/remote
2024-02-12 19:52:12 +00:00
Johnny
c207fdd1f5 Merge pull request #877 from wrongecho/ticket-respond-behaviour
Enhance ticket reply button
2024-02-12 13:43:35 -05:00
Marcus Hill
25d242dc86 Enhance ticket reply button
- Better logic on when the button should default to private/public
- Fix the new plane icon not showing when the button was checked/unchecked
2024-02-12 18:10:37 +00:00
johnnyq
ddb8061404 [FEATURE] Added AI Rewording Functionality to Create Ticket, Ticket Reply, Create Document and Edit Document, more to come 2024-02-11 00:13:10 -05:00
johnnyq
48ba4445bf Added LocalAI 2024-02-10 21:25:18 -05:00
johnnyq
a1d642c54b You can now Test AI Rewording Functionality right from the AI Settings Screen 2024-02-10 21:15:05 -05:00
johnnyq
726b023592 Renamed Scheduled Ticket Files to Recurring Ticket and made some more changes inside the files 2024-02-10 17:31:32 -05:00
johnnyq
310e3f0a42 Split Admin Menu and Settings Menu 2024-02-10 17:10:14 -05:00
johnnyq
30d41c523e Add Seperate Menu for Settings will be splitting Admin and Settings 2024-02-10 16:09:05 -05:00
johnnyq
e177fa193a Change more wording from the old scheduled tickets to recurring tickets 2024-02-10 15:48:00 -05:00
johnnyq
3b0b0c37e1 Do a DB Structure Dump 2024-02-10 15:26:40 -05:00
johnnyq
cb26d40090 Added AI Model to the AI settings 2024-02-10 15:24:25 -05:00
johnnyq
d9f7a2d128 Moved Recurring Invoices Inside Invoices and same with Recurring Expenses inside expense to reduce side nav menu bloat similar to recurring tickets 2024-02-10 15:13:52 -05:00
johnnyq
3374a7042a Revert Mail Queue Query Change, update the db structure to include new fields 2024-02-10 14:34:34 -05:00
Johnny
d78b667e0b Merge pull request #875 from twetech/0.1.8.2
0.1.8.2 (Scheduled tickets, and Email Improvements)
2024-02-10 14:30:30 -05:00
Johnny
4e2f107d4c Merge pull request #876 from wrongecho/cert-pull-details-fix
Bugfix: Unable to update certificate details
2024-02-10 13:57:29 -05:00
Marcus Hill
d09082bd18 Bugfix: Unable to update certificate details for existing certificate entries 2024-02-10 13:36:41 +00:00
o-psi
12f6f86581 Update for long tickets 2024-02-10 02:42:37 +00:00
o-psi
5ac03e7086 Merge branch '0.1.8.2' of https://github.com/twetech/itflow into 0.1.8.2 2024-02-09 22:49:52 +00:00
o-psi
2bf0a2aef8 cleanups 2024-02-09 22:49:12 +00:00
o-psi
f0d2f5b02a SonarCloud Cleanups 2024-02-09 16:40:51 -06:00
o-psi
971830ac21 Unassigned filter incorrect 2024-02-09 22:17:09 +00:00
o-psi
34b5e96e5a Update DB and fix Calendar 2024-02-09 22:15:31 +00:00
o-psi
6e14406364 Update Calendar to show past scheduled tickets as different colors based on status. 2024-02-09 22:06:34 +00:00
johnnyq
083d9eadc3 Added Pop Over title to Expense Date to show the TimeStamp that expense was actually created in The Database. Will implement more Title Popovers throughout ITFlow where additional info like that can be useful 2024-02-09 16:29:49 -05:00
o-psi
c72a4a2413 Update ticket scheduled post actions. 2024-02-09 17:10:59 +00:00
johnnyq
f2cba616a4 Added Axios js started testing AI Capabilities in blank.php 2024-02-08 18:47:17 -05:00
o-psi
672e51b21a Update DB to match 2024-02-08 21:41:31 +00:00
Andrew Malsbury
3d3587a525 Merge branch 'master' into 0.1.8.2 2024-02-08 14:34:39 -06:00
o-psi
b3df9fc9f6 Fix email for iCal 2024-02-08 14:16:27 -06:00
o-psi
e2392c3c6c Add iCal functionality 2024-02-08 12:59:36 -06:00
johnnyq
4dae89dabc The option to set the timezone in PHP was disabled to prevent inconsistencies with MariaDB/MySQL, which utilize the system's timezone, Although can still select timezone in the app the system time will overide it. So its best to set timezone on the system itself 2024-02-08 13:01:54 -05:00
johnnyq
919c46c03d Moved Tags on top 2024-02-05 21:55:55 -05:00
johnnyq
717f4d9e1a Fix DB Download to include ITFlow in filename 2024-02-05 21:28:53 -05:00
johnnyq
74fb7931f0 Fix DB Download to include company name and ITFlow 2024-02-05 21:26:23 -05:00
johnnyq
09838f10ed [UI] Setting Nav reorganization, eventually we will split Administration into two side naves one for Administration and one for settings 2024-02-05 21:19:12 -05:00
johnnyq
6f6b56dcfd Update Icon and wording 2024-02-05 21:12:32 -05:00
johnnyq
dc69101624 [Feature] The Start of AI Integration within ITFlow 2024-02-05 21:01:34 -05:00
johnnyq
e7586fcfb5 Update All the bulkSelect Lists to use the new format still need to fix the bulk delete submit button to allow for a confirm 2024-02-05 18:37:43 -05:00
Andrew Malsbury
50b2c3ad6c Merge branch 'itflow-org:master' into 0.1.8.2 2024-02-05 09:18:52 -06:00
Johnny
f8615bf51b Merge pull request #874 from wrongecho/api-clients-create
Api - clients create
2024-02-04 22:21:06 -05:00
Marcus Hill
102481d09f API - Add client create endpoint 2024-02-04 14:51:58 +00:00
Marcus Hill
8a9a4fd97e Bugfix: Prevent preg_replace passing null parameter error when no phone is present 2024-02-04 14:50:38 +00:00
johnnyq
8347edc04e added more days to invoice alert 2024-02-03 18:43:16 -05:00
johnnyq
f97f6ebdb6 Set Item Order to 998 for Late fee so they appear at the bottom of the invoice. Note: Item Order 999 is used for payment gateway fees 2024-02-03 18:31:26 -05:00
johnnyq
877ae71284 Additional wording 2024-02-03 18:13:56 -05:00
johnnyq
a3567af8a1 Added some legal terms to client pays fees and some links to stripe's current pricing 2024-02-03 18:11:48 -05:00
johnnyq
b386cbb170 Client Payment Gateway Fee is added as a line item if client pays fees is on and client chooses online pay this Fixes the negative invoice Balances when client pays fees is enabled 2024-02-03 17:44:48 -05:00
johnnyq
a6a93fd820 Fix client pays fees calculation. I didn't quite understand why the previous formula was used until i read this https://support.stripe.com/questions/passing-the-stripe-fee-on-to-customers 2024-02-03 17:14:48 -05:00
johnnyq
4f4bb56820 update .gitignore to include custom favicon 2024-02-03 14:33:48 -05:00
johnnyq
5d9ab76689 Remove Custom favicon 2024-02-03 14:32:08 -05:00
johnnyq
e9c85297eb Feature: Allow to upload custom fav icon under settings > Theme, icon is limited to .ico format only 2024-02-03 14:30:03 -05:00
johnnyq
01b717615e Added favicon condition everywhere 2024-02-03 13:18:20 -05:00
johnnyq
a5f08af78e Added condition to check if favicon.ico exists in /uploads else use the default 2024-02-03 13:11:04 -05:00
johnnyq
16420f417f Add Default Fav icon for now 2024-02-03 13:02:24 -05:00
johnnyq
505ecb2701 Fix Delete Confirmation for services, missing </div> Tag in add Service was causing it, also tidyed up service code 2024-02-03 12:25:38 -05:00
Andrew Malsbury
c26787b1d2 Merge pull request #2 from twetech/Unbilled-tickets-dashboard
Add unbilled tickets to dashboard if tickets and accounting is on
2024-02-02 13:28:27 -06:00
Andrew Malsbury
23770ac114 Merge pull request #1 from twetech/scheduled-tickets
Scheduled tickets
2024-02-02 12:38:33 -06:00
o-psi
3a74786cc4 Update side_nav.php to highlight "scheduled_tickets.php" as active 2024-02-02 17:42:24 +00:00
o-psi
f71d3d9b19 finish rename scheduled tickets to recurring tickets in UI 2024-02-02 15:08:44 +00:00
o-psi
0ac36f91eb Update recurring expenses icon 2024-02-02 14:40:35 +00:00
o-psi
a6f105e660 Update side_nav.php with recurring tickets link 2024-02-02 14:40:24 +00:00
o-psi
03d3b04bdb Update side_nav.php: Changed label from "Scheduled Tickets" to "Recurring Tickets" 2024-02-02 14:38:25 +00:00
Andrew Malsbury
6c247e0f58 Merge branch '0.1.7' into scheduled-tickets 2024-02-01 21:42:24 -06:00
johnnyq
1303f18218 Tidy 2024-01-31 22:16:21 -05:00
johnnyq
28e7a6b195 Removed Gateway Fee from the baance of Guest View Invoice and displayed it on the Pay Online button, as the client can pay other ways if they decide to not pay online if Client Pays Fees is enabled 2024-01-31 22:11:27 -05:00
johnnyq
1bbb4426f6 Fix Expense being off for Payment Gateway Fee 2024-01-31 21:33:37 -05:00
johnnyq
96ff92d070 Feature: Bulk Edit Category, Client and Account for expenses 2024-01-31 17:09:35 -05:00
johnnyq
19f4e215de feat. Bulk Reply To Tickets including create a private note 2024-01-31 15:24:54 -05:00
johnnyq
7975505823 feat. Updated Bulk Close Ticket to allow for a Private Note instead of public 2024-01-31 14:49:25 -05:00
johnnyq
5818c7fe18 feat. Added Contact Roles to Bulk Actions 2024-01-31 14:23:47 -05:00
johnnyq
dad2a7d376 Update Contact Department wording to also include group changed icon from building to users which is more suitable 2024-01-31 13:56:00 -05:00
johnnyq
00197cef96 feat: Bulk Set Contact Department / Group 2024-01-31 13:53:25 -05:00
johnnyq
da98f84774 Move the MailQueue Action out of the get email loop on close Bulk Tickets this prevent unessessary mysql connections 2024-01-30 16:55:04 -05:00
johnnyq
e524f1ce7c Fix issue with adding slashes to close email config_from_name vars 2024-01-30 16:40:19 -05:00
johnnyq
80fdad81e9 Fix Not being able to Enable Stripe Pay on Updated or new Installs 2024-01-30 16:25:27 -05:00
johnnyq
731b60b07a Feature: Added Bulk Ticket Closure 2024-01-30 16:04:29 -05:00
johnnyq
c6f1a25692 Feature: Added Bulk Set Priority on Tickets 2024-01-30 14:54:00 -05:00
johnnyq
db8ae13135 Feature: Add Bulk Move Folder Action to Client Documents and Files 2024-01-30 14:11:29 -05:00
johnnyq
ff1616de94 Updated Guest Invoice logic so if they payed gateway fee is not shown 2024-01-29 21:56:13 -05:00
johnnyq
e82ba786a5 Added One more code piece from Pull #866 to fix Gateway Fees shown and to fix balance on guest view invoice 2024-01-29 21:17:12 -05:00
johnnyq
007d07d417 Added unbilled ticket wording per Pull Req #866 2024-01-28 15:57:27 -05:00
johnnyq
f8dc67fbf9 Added Gateway Fee to the Guest View Invoice and minor fix for ticket counter per Pull Request #866 also added stripe flat and percent config vars to guest view invoice. Note We do not need to merge Pull #866 as all changes nessessary have been implented manually 2024-01-28 15:55:05 -05:00
johnnyq
5afacf78cf Convert strip Percentage Decimal from decimal vlaue to percentage value on view form and then reconvert from Percent back to Decimal value on POST 2024-01-28 15:23:58 -05:00
johnnyq
9bd924dc67 Only create a Stripe Expense if client pays fee is off, a stripe expense vendor and expense category is selected in settings 2024-01-28 14:54:28 -05:00
johnnyq
063d042378 Update guest_ajax.php with the new stripe vars 2024-01-28 14:45:43 -05:00
johnnyq
56c138fb12 cleanup 2024-01-28 02:08:11 -05:00
johnnyq
3d3bb6a436 Feature: Stripe Payment now logs an expense to the selected account 2024-01-28 01:49:49 -05:00
johnnyq
b986f04a0c Add More Configurable variabled for Stripe including such as Flat Rate and Percent Fees, expense vendor and expense category update guest stripe pay to take advantage of these vars and updated settings 2024-01-28 00:00:28 -05:00
johnnyq
777637277b Fix Issue where if you edited first record that shared the same form input name like location then it would blank out the first record if edited this is fixed by adding bulk_ in front of the form Input names under the bulk modals not sure why this happens but this is the fix 2024-01-27 14:15:18 -05:00
johnnyq
c711db937d Updated Edit Location logic in contacts added Pop Over Title for archived Items in assets and contacts 2024-01-27 14:01:10 -05:00
johnnyq
50b00c5712 Feature: Bulk Edit Contact Phone Number useful where the share an Office Number but have seperate extensions 2024-01-27 13:45:11 -05:00
johnnyq
8b85ae377a Updated the way Archived Items are displayed in asset list view and when editing, this will be standard going forward, added Bulk Set Asset Status, further work on improving the archived logic, assets is pretty much gold standard here now 2024-01-27 13:23:44 -05:00
johnnyq
d8de41d937 Do Not show archived items when copying asset 2024-01-27 11:59:05 -05:00
johnnyq
36e9f8cd3d Add Red X next to Assigned to for Archived Users still palying with this design maybe just make the user text red with a pop over that says archived when hovered 2024-01-27 03:44:32 -05:00
johnnyq
0b7b7e298a Remove unessesary () 2024-01-27 03:35:22 -05:00
johnnyq
d3153a29cb Asset Assignment Do not show all archived users from the date the asset is created instead if an asset has an archive user show that user and all new users 2024-01-27 03:32:30 -05:00
johnnyq
9184fa3ab3 Fix Copy IP to clipboard in Assets missing clipboardjs class 2024-01-27 03:10:54 -05:00
johnnyq
8562906fa6 Prevent Copy to Clipboard button from submitting in assets since we wrapped listings in a form to allow for bulk actions this caused buttons like this to act as submits unless we add type='button' 2024-01-27 03:04:43 -05:00
johnnyq
e139190377 UI: Set IP Column to Text no wrap to prevent the Copy IP Button from wrapping 2024-01-27 02:55:06 -05:00
johnnyq
fe33cfa4e9 UI: Fix the client top head city state postal below the address from being offset by using a font awesome dummy icon 2024-01-27 02:48:31 -05:00
johnnyq
3c28c2b89b Prevent Password Manager from asking to save password for every asset edit / add / bulk submit 2024-01-27 02:16:41 -05:00
johnnyq
7e50634c07 Added Bulk Assign contacts to Assets 2024-01-27 01:56:10 -05:00
johnnyq
1deba6eac5 Added Bulk Assign Location to Assets 2024-01-27 01:41:25 -05:00
johnnyq
ee3087725d Rename inconsistent multi Actions to Bulk Actions 2024-01-27 01:03:18 -05:00
johnnyq
f2719a612e Feature: Bulk Action - Assign Location for contacts 2024-01-26 23:59:24 -05:00
johnnyq
dec2f484ab added - between App Name and Task for ticket assignment email 2024-01-26 22:57:41 -05:00
johnnyq
a197151286 Update email wording on tech notify of assigned tickets 2024-01-26 22:35:40 -05:00
johnnyq
d7a58c01f9 Update bulk assign tech to only notify by one email with all tickets assigned instead of multiple same with notification, updated some wording as well and include a ticket count in the logging email and notification 2024-01-26 22:30:55 -05:00
johnnyq
47d2ad993e Don't show checkboxes next to closed tickets 2024-01-26 21:44:03 -05:00
johnnyq
6dbbb232ed Update Bulk Ticket assign action: Updated button, not notifies newly assigned tech via email and in app notification and now logs properly 2024-01-26 20:21:55 -05:00
johnnyq
fd48d991d9 Feature: Ticket Bulk Actions Assign Tech has been added, still work in progress, update ticket reply added tech notification add logging, do not allow to assign ticket on closed ticket and more refinements 2024-01-26 17:12:57 -05:00
johnnyq
937397e9c0 Allow .vsdx and .drawio diagram files to be uploaded via client files 2024-01-25 12:01:09 -05:00
johnnyq
9ce280d80d Fix Redirect to non-existent page after login when force MFA is enabled 2024-01-24 15:46:30 -05:00
wrongecho
861c8e4252 Merge pull request #873 from braadaaay/master
Spelling corrections in Web UI
2024-01-24 06:23:47 +00:00
Brady Williams
b854e9569b Remove extra "you" in dialog 2024-01-24 17:58:54 +13:00
Brady Williams
07c126db2b Fix Spelling from "wather" to "watcher" 2024-01-24 17:57:05 +13:00
johnnyq
4b6495b01a UI Update for Asset Listing, combined columns to allow for a better display 2024-01-23 16:44:30 -05:00
Johnny
981010b2f7 Merge pull request #871 from wrongecho/logins_js_cleanup
Logins JS Cleanup
2024-01-22 16:37:20 -05:00
Marcus Hill
ba0917e142 Logins JS Cleanup
- Remove old JS
- Standardize generate password JS style to match existing
- Move JS functions to own files
2024-01-22 21:25:21 +00:00
wrongecho
4e0c7230f3 Update README.md
Reword read me contribution section to emphasize proposing features on forum first
2024-01-22 20:47:21 +00:00
johnnyq
9e8c3ed2fd Fix Redirect Link in Stripe Pay 2024-01-22 12:27:47 -05:00
johnnyq
8d2a9bbf60 Fix Broke Guest Pay Invoice via Stripe removed additional ) 2024-01-22 12:17:06 -05:00
johnnyq
ad1ec7d338 Allow to set an optional queue time in bulk mail, update cron_mail_queue.php to only send mail after its queued_at date and time 2024-01-21 15:52:15 -05:00
johnnyq
62fb73875b Updated addToMailQueue Function to allow specifing an optional queue time to schedule outbound mail 2024-01-21 15:27:15 -05:00
johnnyq
9db7947004 Bulk Mail: Make contacts select table responsive 2024-01-21 14:34:45 -05:00
johnnyq
2ee21c3f9a Bulkmail: Use default mail from email and mail from name but still can be changed 2024-01-21 14:25:56 -05:00
johnnyq
782b0cfd96 Bulk Mail: Show dash if title is blank 2024-01-21 14:22:18 -05:00
johnnyq
a8872ae804 Bulk Mail: Don't show contacts that have no email address 2024-01-21 14:18:55 -05:00
johnnyq
413645154d Feature: Add initial basic Bulk Mail Sending capabilities via client section 2024-01-21 14:15:10 -05:00
johnnyq
0ca50bf6de Switch from ~ to -- in signature footer 2024-01-21 00:27:01 -05:00
johnnyq
cb1b6e4231 Fix client portal reset password 2024-01-20 23:37:12 -05:00
johnnyq
bd8c93cb71 Update client portal login reset for the new mail function and made some minor UI / Code changes 2024-01-20 23:28:00 -05:00
johnnyq
623ed33a27 Update Portal UI elements and Mail Functions 2024-01-20 23:11:35 -05:00
johnnyq
3b71e6132e Change Respond icon from check mark to a paper plane in ticket view 2024-01-20 22:08:41 -05:00
johnnyq
493c83e3f1 Added Days over due by to invoice reminders 2024-01-20 21:44:58 -05:00
johnnyq
d390bee0bc Update/Fix Mail Functions in cron.php - sanitize POST vars instead the whole mail subject and body which prevents having a mixed of confusing redundant escaped and unescaped vars 2024-01-20 21:16:28 -05:00
johnnyq
c801e58cc9 Removed redundent get stripe client pays fee as the var is already aquired in beginning 2024-01-20 20:58:53 -05:00
johnnyq
b1fd0fb4aa fixed 2024-01-20 20:56:00 -05:00
johnnyq
00d4f7d66f moved config_stripe_client_pays_fees out of an unnessesary function and moved it to the setup stripe section 2024-01-20 20:54:56 -05:00
johnnyq
3c3e0f5f80 Cleaned up guest_pay_invoice_stripe.php incorrect DB Handling for vars was HTML encoding instead of proper SQL escaping 2024-01-20 20:49:37 -05:00
johnnyq
0cdf49f69a Update/Fix Mail Functions in POST/user.php and ajax.php - sanitize POST vars instead the whole mail subject and body which prevents having a mixed of confusing redundant escaped and unescaped vars 2024-01-20 20:31:46 -05:00
johnnyq
63d4419ff5 Update/Fix Mail Functions in POST/quote.php - sanitize POST vars instead the whole mail subject and body which prevents having a mixed of confusing redundant escaped and unescaped vars also 2024-01-20 20:10:33 -05:00
johnnyq
1479caa8e8 Set Textarea rows from 4 to 5 2024-01-20 19:26:00 -05:00
johnnyq
9d60ccdf3e Updated UI on add/Edit Calendar events 2024-01-20 19:25:15 -05:00
johnnyq
92ccd7de14 Update/Fix Mail Functions in POST/contact.php and event.php - sanitize POST vars instead the whole mail subject and body which prevents having a mixed of confusing redundant escaped and unescaped vars also fixed scheduling calendar events was not working to send an email out 2024-01-20 19:08:51 -05:00
johnnyq
91eff8f9b6 no need to SQL escape , in the emails, so removed the \, escaping in post invoice, ticket and ticket_email_parser 2024-01-20 18:13:47 -05:00
johnnyq
a46e41ce9c Update/Fix Mail Functions in POST/invoice.php - sanitize POST vars instead the whole mail subject and body which prevents having a mixed of confusing redundant escaped and unescaped vars 2024-01-20 17:58:54 -05:00
johnnyq
d3aa2e7239 Only allow A-Za-z- for Ticket Prefix 2024-01-20 16:45:39 -05:00
johnnyq
31d6605647 Updated Closed Ticket Email as well 2024-01-20 15:15:49 -05:00
johnnyq
0a32415b38 Updated ticket mail parser to not escape the entire subject and body of sending emails as this is all done by vars instead 2024-01-20 15:11:07 -05:00
johnnyq
669d2f74ed Update Ticket POST Email body to Use -- instead of ~ for closing signature 2024-01-20 13:49:27 -05:00
johnnyq
5f3b08a543 Fix Mail Array causing duplicate sending 2024-01-20 13:33:54 -05:00
johnnyq
b942bf0e18 Update/Fix Mail Functions in POST/ticket.php - sanitize POST vars instead the whole mail subject and body which prevents having a mixed of confusing redundant escaped and unescaped vars, also fixed watchers where if a watcher was added it would just emai the last watcher selected and skip the main contact and any other watchers selected 2024-01-20 13:18:17 -05:00
johnnyq
a656340c8b Fix mis-spelling sanitize not santize 2024-01-19 19:37:34 -05:00
johnnyq
79175b9e70 Sanitize Ticket Prefix and From Name in Cron Ticket Email Parser 2024-01-19 19:18:26 -05:00
Johnny
d282083f0a Merge pull request #868 from wrongecho/user_profile_fixes
User profile fixes
2024-01-19 19:08:18 -05:00
johnnyq
2f3e26b285 Fix Ticket Settings 2024-01-19 19:01:26 -05:00
Marcus Hill
1fcf559e13 Prevent users setting/hashing an empty password 2024-01-19 23:45:02 +00:00
Marcus Hill
ee68bf10b8 Don't require admin role to edit user profiles (otherwise techs/accountants can't edit their page) 2024-01-19 23:39:15 +00:00
johnnyq
56d0188ccb Fix Oppps 2024-01-19 17:56:04 -05:00
johnnyq
289031b691 Updated Cron Mail Queuer - Removed HTMLPurify and HTML Encoding using HTMLEntities as these are unnessaery and were cuasing extra cpu load and possible data corruption and are passed off to PHPMailer which handles this by default plus recipient email clients should handle XSS as well 2024-01-19 17:39:28 -05:00
johnnyq
9559c11c25 Cleaned up the initial create ticket email, removed customization for now, added some better comments to cron mailer etc 2024-01-19 17:28:17 -05:00
johnnyq
6af48594f6 Added Scheduled Ticket Count 2024-01-19 13:14:57 -05:00
johnnyq
d0dd43bef9 Fixed issue with email failing to send on password updates and email name changes was using the old formatting for the legacy way of sending emails out 2024-01-19 10:31:09 -05:00
o-psi
1ffdce6bbc Add unbilled tickets to dashboard if tickets and accounting is on
otherwise, show recurring invoices.
2024-01-18 22:49:18 +00:00
o-psi
53ad94cc06 Update Database to match 2024-01-18 22:48:20 +00:00
o-psi
13cf4df473 Scheduled Tickets 2024-01-18 19:50:01 +00:00
johnnyq
9bd28b1c56 Update Mail Send Test to use the proper from name when sending a test also show the from name from the select 2024-01-16 22:56:35 -05:00
johnnyq
e07fb9ce50 Expanded timeAgo function to incoude time ahead, added this functionality to client overview 2024-01-15 22:59:39 -05:00
johnnyq
b5e67eb3f6 Add Contact Types to Contact Details Cleanup code in asset details and contact details 2024-01-15 22:18:55 -05:00
johnnyq
cd732b4dd6 Do not allow the deletion of Parent document under revisions, create new function to delete document version and redirect back to the parent document, also delete all versions of the document if deleted from the document list 2024-01-15 21:44:13 -05:00
johnnyq
483bf4bcfd Added more informative notes placeholder for contact as well 2024-01-15 20:06:25 -05:00
johnnyq
73ebfcc233 Made Location notes placeholder offer some better examples like parking and building access then just enter some notes 2024-01-15 19:58:02 -05:00
johnnyq
a113b1390c Allow more space for quick notes 2024-01-15 15:13:03 -05:00
johnnyq
9f1f88b64e Updated breadcrumbs in Asset Details to include clients 2024-01-15 15:10:20 -05:00
johnnyq
717b63855e Updated some icons fr asset details 2024-01-15 15:06:44 -05:00
johnnyq
a11de364c8 Show correct Contact Details when on Asset Details 2024-01-15 14:56:59 -05:00
johnnyq
b1d1e39ab1 Forgot to add contact name under assigned in asset details 2024-01-15 14:44:35 -05:00
johnnyq
53b9d0a5ad Asset Details UI Use card Header for Asset name and description and use just icon for edit 2024-01-15 14:41:35 -05:00
johnnyq
9cd570b603 Updated Asset Details Page to include all the asset values 2024-01-15 14:34:41 -05:00
johnnyq
50002b0783 Added login uri 2, NAT IP and asset URI 2 to the UI, also created new tab in asset network and split form items between assignment and network 2024-01-15 13:50:46 -05:00
johnnyq
d35f1ff7fd Increased the character limit for login uris, added login uri 2 and asset nat ip currently not exposed on the ui 2024-01-15 13:08:46 -05:00
johnnyq
365c790600 Set column width of stales tickets to 4 2024-01-14 22:24:30 -05:00
johnnyq
b7fa80503f Moved Recent Client Activities to the bottom of client overview 2024-01-14 22:22:11 -05:00
johnnyq
62d5adfa9d Added asset location to the client PDF Export 2024-01-14 21:42:39 -05:00
johnnyq
d9a99b8d93 Increase the Asset URI limit from 250 to 500 and added asset URI 2 field for additional Asset URIs 2024-01-14 14:09:15 -05:00
johnnyq
9c5c501f04 Moved Browser Extension specific setting to user prefs 2024-01-13 17:16:21 -05:00
johnnyq
813e8c7e59 Renamed Profile to Account, Added a user Side nav to seperate various user preference entities 2024-01-13 17:15:20 -05:00
johnnyq
b2ad67e26d readed back ticket timer at the top as it broke the counter 2024-01-12 18:41:32 -05:00
johnnyq
625a6cac6c Included WebKlex PHP-IMAP Library in plugins folder to allow for future use when we convert IMAP to allow OAUTH2 2024-01-11 12:51:11 -05:00
johnnyq
9520148d4d Set batch payment button to color default 2024-01-11 12:10:25 -05:00
johnnyq
d25396f19a Rename rec back to recurring on the client side nav 2024-01-11 11:44:00 -05:00
johnnyq
3bb2986c4c Rename rec back to recurring on the side nav 2024-01-11 11:43:05 -05:00
johnnyq
65b73f4120 Fix Force Recurring Invoice updated more delete alerts to be red instead of green 2024-01-11 11:30:23 -05:00
johnnyq
d33d11acd2 Set lock file cront ticket email parser once again from 300 sec aka 5 mins to 180 secs aka 3 mins 2024-01-11 00:34:36 -05:00
johnnyq
a38e62c412 Set lock file cront ticket email parser from 600 sec aka 10 mins to 300 secs aa 5 mins, update telemetry to include website 2024-01-11 00:32:31 -05:00
Johnny
e69317e376 Merge pull request #865 from twetech/v0.1.5
Update to V0.1.5
2024-01-10 21:22:42 -05:00
Andrew Malsbury
b499b52f49 Merge pull request #14 from twetech:unbilled-tickets-report
Adjust filter to only show unbilled
2024-01-10 17:06:52 -06:00
o-psi
3ea326b0ac Adjust filter to only show unbilled 2024-01-10 23:05:42 +00:00
Andrew Malsbury
e30c0a14e5 Merge pull request #13 from twetech:unbilled-tickets-report
Fix increment bug in ticket_unbilled_count
2024-01-10 17:02:20 -06:00
o-psi
691a1bc019 Old Python Habits Die Hard (i++) 2024-01-10 23:01:34 +00:00
Andrew Malsbury
1afc9751e7 Merge branch 'itflow-org:master' into v0.1.5 2024-01-10 16:57:03 -06:00
Andrew Malsbury
aa2b471e0f Merge pull request #12 from twetech:unbilled-tickets-report
Add Unbilled Tickets Report
2024-01-10 16:42:41 -06:00
o-psi
234d5dde09 Remove Creepy smiley 2024-01-10 22:41:48 +00:00
johnnyq
f8757fc2e0 Added back Yearly option under edit Recurring Invoice 2024-01-10 17:41:38 -05:00
o-psi
d7e8e60693 Update message for no tickets. 2024-01-10 22:40:51 +00:00
o-psi
9a649529d2 Refactoring for better readability 2024-01-10 22:33:24 +00:00
o-psi
e1cb9655d7 Add notice if there are no unbilled tickets. 2024-01-10 22:32:21 +00:00
o-psi
d6454427bb Validate Access to unbilled report. 2024-01-10 22:26:56 +00:00
o-psi
59cf07bf49 Update filter to allow for closed and open when looking for unbilled. 2024-01-10 22:23:29 +00:00
o-psi
87f1b9c0be Add filter to Client Tickets 2024-01-10 22:16:40 +00:00
o-psi
b764506f28 Fix bug in client_tickets.php 2024-01-10 22:15:00 +00:00
o-psi
a7ee5737af Add link to tickets screen on unbilled report 2024-01-10 22:12:46 +00:00
o-psi
77d115d1f2 Update report to not have modal. Too many steps for UI. 2024-01-10 22:06:19 +00:00
o-psi
c7c6b08a11 Add Basic Unbilled tickets report 2024-01-10 21:54:43 +00:00
Andrew Malsbury
6bde67f9ad Merge branch 'itflow-org:master' into v0.1.5 2024-01-10 15:38:24 -06:00
Andrew Malsbury
ac405e1eec Merge pull request #11 from twetech:Invoice-add-ticket-modal-update
Improve invoice add ticket modal UI
2024-01-10 15:31:48 -06:00
o-psi
8dad54e450 Update badge color based on status. 2024-01-10 21:25:22 +00:00
o-psi
25c26cc2a6 Fix striped Table 2024-01-10 21:15:25 +00:00
o-psi
6ca277a636 Make table striped 2024-01-10 21:15:12 +00:00
o-psi
cf87a232c4 Invoice add ticket modal UI improvements. 2024-01-10 21:12:23 +00:00
o-psi
945eb7c87a Add Label to add column on invoice add ticket modal 2024-01-10 21:09:07 +00:00
o-psi
4ed2c7923c Change add button to a plus icon 2024-01-10 21:01:56 +00:00
o-psi
e5f8921322 Invoice add ticket modal UI Fix 2024-01-10 20:59:52 +00:00
o-psi
c24aece046 Fix Parenthesis 2024-01-10 20:56:31 +00:00
o-psi
39ba7d83fd Add ticket status to invoice filter. 2024-01-10 20:45:18 +00:00
johnnyq
29be864675 Removed Re: from ticket replies as this is reserved if following an email thread changed back to Ticket update instead 2024-01-10 13:31:56 -05:00
johnnyq
b7894ffd58 Add Missing Send Recurring Invoice Notification Email 2024-01-09 11:58:22 -05:00
johnnyq
02ed6986ec Fix Assets page not loading missing closer } 2024-01-07 12:43:28 -05:00
johnnyq
efdffa1a74 Forgot to do a DB Dump after DB Update well here it is 2024-01-06 16:07:37 -05:00
johnnyq
0948fd4dc6 Added a setting to enable destructive delete, disabled by default must enable it in the DB for now not in the settings DB 1.0.0 has been reached 2024-01-06 16:05:28 -05:00
johnnyq
e260cbf626 Scaled down the action menu under assets to fit the actions for 1 row displays 2024-01-06 15:34:59 -05:00
johnnyq
56d7772e26 Remove Delete option from asset action menu as delete is too destructive, functionality is still there in POST and Allow Tech to Archive Assets as well 2024-01-06 14:31:24 -05:00
johnnyq
6d4584be90 Remove Asset Tickets Modal, Related Documents and Files as this can be viewed in Asset Details Page 2024-01-06 14:27:21 -05:00
johnnyq
1ae6a8d757 Update Collections Report for Round Down to the nearest for Monthes behind and other formatting fixes) 2024-01-06 13:57:55 -05:00
johnnyq
5914996c41 Add Company Website to Guest Sharing footer 2024-01-04 18:39:19 -05:00
johnnyq
74abe28c33 Fix Archiving Ticket Replies 2024-01-03 18:33:09 -05:00
johnnyq
6c9fa7a607 Fix the ticket reponse count to not count archived replies 2024-01-03 18:29:32 -05:00
johnnyq
5c5871ba0d Merge branch 'master' of github.com:itflow-org/itflow 2024-01-03 18:25:42 -05:00
johnnyq
d8edf339c4 Clean up Ticket Printing: When printing a ticket do not show interactive elements 2024-01-03 18:23:39 -05:00
wrongecho
051ce46d37 Update README.md - clarify install and release date 2023-12-31 20:28:48 +00:00
wrongecho
48f0531643 Merge pull request #851 from wrongecho/bugfix-inv-quo-quantity-math
Bugfix: Quote/Invoice quantity 4 digits
2023-12-31 20:09:13 +00:00
Marcus Hill
ef2a33403b Bugfix: Quote/Invoice quantity 4 digits
Perform quote/invoice quantity number formatting after invoice sub-total is calculated to prevent math issues due to comma added for thousands
2023-12-31 20:00:01 +00:00
Johnny
622811302f Merge pull request #850 from wrongecho/notes
Add notes field & multi-select to networks/certs/domains
2023-12-31 12:43:40 -05:00
Marcus Hill
55d716642a Bugfix 2023-12-31 13:02:37 +00:00
Marcus Hill
1b567ee253 Add multi-select to networks, certificates and domains.
Fix multi-select count bug
2023-12-31 12:49:58 +00:00
Marcus Hill
9076012d2a Bugfix Undefined variable: service_created_at 2023-12-31 12:25:12 +00:00
Marcus Hill
224aa00694 Correct comments 2023-12-31 12:05:25 +00:00
Marcus Hill
78f79759dc Correct comments 2023-12-31 12:05:11 +00:00
Marcus Hill
756c3aa7ca Tidy for consistency 2023-12-31 11:20:43 +00:00
Marcus Hill
86b31ada1f Add notes to certs 2023-12-31 11:13:57 +00:00
Marcus Hill
d3b59edfe4 Add notes to domains 2023-12-31 11:13:48 +00:00
Marcus Hill
1a1b4ee810 Add notes to networks; move networks js to its own file 2023-12-31 11:13:24 +00:00
Marcus Hill
114a72424c Add domain_notes database field 2023-12-31 10:34:01 +00:00
johnnyq
938f8bb4ae Wording change on Client Address to Location 2023-12-29 17:27:29 -05:00
johnnyq
3c53caf964 UI: Fix Padding and margin Account Types Header, also send telemetry if config_telemetry detailed in selected 2023-12-29 17:21:03 -05:00
johnnyq
ed42ec9707 By default Collapse Client Top Header unless in Client Overview while in the Client section 2023-12-29 15:14:48 -05:00
Johnny
1a130ac2ab Merge pull request #849 from twetech/v0.1.4
V0.1.4
2023-12-29 14:19:13 -05:00
Johnny
815ef3da6e Merge pull request #848 from twetech/v0.1.3
v0.1.3 (no edits compared to main)
2023-12-29 14:17:19 -05:00
Andrew Malsbury
31dc8965df Merge pull request #10 from twetech:Fix-Guest-View-Partial-Invoices
Fix SQL query in invoices.php
2023-12-29 13:12:15 -06:00
o-psi
35394f3e6f Fix SQL query in invoices.php 2023-12-29 19:11:51 +00:00
o-psi
e7628ad5a6 Fix SQL query in invoices.php 2023-12-29 19:07:22 +00:00
Andrew Malsbury
ae3c52074f Merge branch 'itflow-org:master' into v0.1.4 2023-12-29 13:06:49 -06:00
johnnyq
b2dc9a123c Do not allow archived client contacts to reset their passwords 2023-12-28 22:25:57 -05:00
johnnyq
c4e4dc3a44 Do not allow archived client contacts client portal login access 2023-12-28 22:18:39 -05:00
johnnyq
7c12a716a4 When Archiving a contact remove Important, Billing and Technical Roles along with Blanking out Auth and Hashed Password 2023-12-28 22:14:45 -05:00
johnnyq
e38aad1e61 User Profile UI Spruce up / Cleanup 2023-12-28 20:45:28 -05:00
johnnyq
456545fb62 Settings Formating 2023-12-28 20:23:28 -05:00
johnnyq
bcd0eb69a1 Send Telemetry if is greater than 0 2023-12-28 20:03:08 -05:00
johnnyq
7759f54260 renamed settings alerts to notifications and reworked the notification UI to allow for future growth 2023-12-28 19:52:24 -05:00
Andrew Malsbury
d953540440 Merge pull request #9 from twetech:fix-drafts-on-ticket-invoice
adjust visuals when invoicing tickets.
2023-12-28 16:56:20 -06:00
o-psi
da42f35ff9 adjust visuals when invoicing tickets. 2023-12-28 22:55:43 +00:00
Andrew Malsbury
ae444142c6 Merge pull request #8 from twetech/ticket-add-to-invoice-drafts
Ticket add to invoice drafts
2023-12-28 16:32:28 -06:00
johnnyq
db4fd095d6 Fix Undefined Checkbox POST vars in settings ticket 2023-12-28 14:42:11 -05:00
johnnyq
6d769a5e05 When choosing to share Data via Setup make sure telemetry gets enabled after setup 2023-12-28 14:13:26 -05:00
johnnyq
deb84cc2a8 set Placeholder for Global search from just search to search everywhere 2023-12-28 13:43:24 -05:00
johnnyq
bc9ad24c76 Added badge color light blue 2023-12-27 22:44:24 -05:00
johnnyq
c30d9b4bdf Added theme light blue 2023-12-27 22:43:51 -05:00
johnnyq
4a5b0b9202 Remove Themes, lime dark-gray and light as their text was not very readable 2023-12-27 22:37:47 -05:00
johnnyq
58c7dfe2c8 Fix Client Self Service Password Reset due to new mail queue system change 2023-12-27 22:06:19 -05:00
johnnyq
a966fc9395 Fix Add and Editing Contact passwords because of a commit that change the post name from contact_password to password 2023-12-27 21:51:12 -05:00
johnnyq
c9e92cb3bb Cleaned up cron ticket parser to work better with the new mail queuer 2023-12-27 20:35:23 -05:00
johnnyq
ff5e5f950b Removed unused edit ticket watcher, we handle this differently 2023-12-27 17:47:05 -05:00
johnnyq
d6a7747935 Add Watcher via select of client contacts and can enter manual emails as well 2023-12-27 17:44:17 -05:00
johnnyq
a9dfc0d5fe Add the ability to delete a ticket watcher 2023-12-27 17:21:17 -05:00
johnnyq
a9d49c9785 Spurced up ticket Attachments view in ticket details 2023-12-27 17:02:04 -05:00
johnnyq
51a5b7d79a Moved notification badge number over 3 to allow for 3 numbers without overlapping the bell 2023-12-27 16:36:41 -05:00
johnnyq
220d565544 Commented out open ticket as its still Work IN Progress and not ready for stable 2023-12-27 16:27:42 -05:00
johnnyq
c8b51b01d3 Fix for Scheduled Ticket Umlauts 2023-12-27 16:16:52 -05:00
johnnyq
0fad6727dc Fix missing ; 2023-12-27 15:35:11 -05:00
johnnyq
51754be319 Santized Pre Vars in Cron and remove dup santized code as the new mail queue system now requires input sanitzation 2023-12-27 15:24:38 -05:00
Andrew Malsbury
8a4075a4cd Merge branch 'itflow-org:master' into v0.1.3 2023-12-27 13:27:39 -06:00
Andrew Malsbury
c4bfb314a2 Merge branch 'master' into ticket-add-to-invoice-drafts 2023-12-27 11:29:42 -06:00
Johnny
4e5bc814d5 Merge pull request #846 from wrongecho/contact-api-via-num
Contacts API
2023-12-26 17:46:48 -05:00
johnnyq
52a4963b83 Fix Edit Contact Do not make the contact Password field required as it will not allow to submit form, instead this is handled in POST if the password field is blank then dont create a password 2023-12-26 17:36:54 -05:00
Andrew Malsbury
4689faf518 Merge branch 'itflow-org:master' into v0.1.3 2023-12-26 09:17:05 -06:00
Marcus Hill
f45a5e0b51 Contacts API
Allow looking up contacts via mobile / phone number
2023-12-24 20:05:04 +00:00
Johnny
fa452dbf02 Merge pull request #845 from wrongecho/ticket-tt-gui
Time tracking input field spacing
2023-12-24 00:42:08 -05:00
Marcus Hill
bdb0cc1e38 Time tracking input field spacing
Reduce size of hrs, min, sec input fields
2023-12-23 23:41:51 +00:00
Marcus Hill
e04c681ca5 Time tracking input field spacing
Reduce size of hrs, min, sec input fields
2023-12-23 23:15:20 +00:00
Johnny
29867d6d11 Merge pull request #844 from twetech/delete-tickets-go-to-tickets.php
Redirect to tickets.php after deleting a ticket
2023-12-23 16:07:46 -05:00
Johnny
25087dd85f Merge pull request #843 from twetech/v0.1.2
Update to v0.1.2 of TWETech/ITflow
2023-12-23 16:06:29 -05:00
Andrew Malsbury
16f3cef0f4 Merge pull request #7 from twetech/delete-tickets-go-to-tickets.php
Redirect to tickets.php after deleting a ticket instead of the delete…
2023-12-22 17:22:46 -06:00
o-psi
5ef96f7860 Redirect to tickets.php after deleting a ticket instead of the deleted tickets' page. 2023-12-22 23:20:21 +00:00
Andrew Malsbury
7ecabbaf0d Merge pull request #6 from twetech/ticket-billable-module
Fix typo in accounting module condition
2023-12-22 11:57:43 -06:00
o-psi
5dda94a1ec Fix typo in accounting module condition 2023-12-22 17:45:39 +00:00
Andrew Malsbury
d448562a24 Merge branch 'itflow-org:master' into v0.1.2 2023-12-22 11:34:05 -06:00
Johnny
471e6a9f8f Merge pull request #842 from twetech/ticket-billable-module
Disable ticket billable options in accounting module
2023-12-22 12:33:18 -05:00
Johnny
27b7db63ee Merge pull request #839 from twetech/Create-Payment-Bugfix
Fix email data assignment and select option bug in invoice.php and ticket_invoice_add_modal.php
2023-12-22 12:32:27 -05:00
Andrew Malsbury
0077a03be7 Merge pull request #5 from twetech/Readable-Passwords
Readable passwords
2023-12-22 11:32:09 -06:00
Andrew Malsbury
10b04c79d0 Merge branch 'v0.1.2' into Readable-Passwords 2023-12-22 11:31:36 -06:00
Andrew Malsbury
c8d3f3df69 Merge pull request #4 from twetech/client-replied-warning-badge
Added autoclose to dark
2023-12-22 11:21:41 -06:00
o-psi
77145432ee Added autoclose to dark 2023-12-22 17:19:00 +00:00
Andrew Malsbury
6bceb4b33b Merge pull request #3 from twetech:client-replied-warning-badge
Add ticket status color for "Client-Replied"
2023-12-22 11:17:08 -06:00
o-psi
0535a903ee Add ticket status color for "Client-Replied" 2023-12-22 17:16:26 +00:00
Andrew Malsbury
fc5507272e Merge pull request #2 from twetech/Fix-for-user-IDs-in-tickets
Fix ticket assignment filter bug
2023-12-22 11:09:33 -06:00
o-psi
61a0086514 Fix ticket assignment filter bug 2023-12-22 17:06:48 +00:00
Andrew Malsbury
a6d43d97af Merge pull request #1 from twetech/Fix-for-user-IDs-in-tickets
Fix ticket_assigned_to filter in SQL query
2023-12-22 10:50:11 -06:00
o-psi
eb29f74fab fix error messages in log 2023-12-22 16:25:36 +00:00
o-psi
7709627e5b Accounting module disable ticket billable options 2023-12-22 16:19:51 +00:00
o-psi
17217019d1 Fix typo in variable name and add condition for invoice status 2023-12-22 15:19:00 +00:00
o-psi
dd7131cae1 Fix ticket_assigned_to filter in SQL query 2023-12-22 15:14:56 +00:00
o-psi
87e8f9e042 Fix email data assignment and select option bug in invoice.php and ticket_invoice_add_modal.php 2023-12-22 14:52:02 +00:00
johnnyq
f8702557c8 Remove Trailing slash for config_base_url during setup 2023-12-21 19:18:45 -05:00
johnnyq
da73b6d634 Fixed Client Pays fee not being able to be turned off 2023-12-21 19:13:14 -05:00
johnnyq
11da9ff0d4 Fix Undefined Status Array errors in tickets 2023-12-21 18:59:57 -05:00
johnnyq
435206dded Properly fetch the user dashboard settings 2023-12-21 16:56:02 -05:00
johnnyq
297148bc63 DB Update add User settings to enable / disable Dashboard Items Financial and Technical 2023-12-21 16:36:31 -05:00
johnnyq
d21e5fafca Added Your Tickets to the technical portion of the dashboard 2023-12-21 16:04:07 -05:00
johnnyq
12b8f2e005 Update Year select 2023-12-21 14:20:39 -05:00
johnnyq
5138f84575 Removed financial and technical dashboards in settings default page as these are no merged 2023-12-21 14:05:41 -05:00
johnnyq
6a63335a4a Bump PHPMailer from 6.8.1 to 6.9.1 2023-12-21 13:23:44 -05:00
johnnyq
19a18126de Bump TinyMCE from 6.7.3 to 6.8.2 2023-12-21 13:19:16 -05:00
Johnny
a1be7f2a3c Merge pull request #837 from twetech/Billable-ticket-qol
Quality of Life - Billable Tickets
2023-12-21 13:10:11 -05:00
johnnyq
afc6dd674c Add some more padding and spacing for toggles and Year Select on the dashboard 2023-12-21 13:07:20 -05:00
johnnyq
e639b69db9 Merged All Dashboards into 1 allow you to toggle between show financial and show technical 2023-12-21 13:03:37 -05:00
o-psi
3eaaf73744 Add more billable status functionality 2023-12-21 17:10:15 +00:00
o-psi
f1516b06ee Refactor calculateInvoiceBalance function to sanitizr
This commit refactors the calculateInvoiceBalance function in functions.php. The invoice_id parameter is now properly sanitized using intval() to prevent SQL injection attacks. Additionally, the SQL query for retrieving the invoice and payments data has been formatted for better readability.
2023-12-21 14:37:19 +00:00
johnnyq
70d99d28bf Removed Unused var 2023-12-21 02:40:41 -05:00
johnnyq
08a6d1d9be Update in more places 2023-12-21 02:10:09 -05:00
johnnyq
d6660bff04 Fix sending mail on item sharing 2023-12-21 02:02:40 -05:00
johnnyq
957bbc5f55 Update from name and email in other areas as well 2023-12-21 01:47:24 -05:00
johnnyq
e8a53cbd6a Update new mail queue function to use the proper mail from name and mail from email 2023-12-21 01:37:21 -05:00
johnnyq
cdaca0e06b Update a few var names for the new mail addToMailQueue function 2023-12-21 01:05:59 -05:00
Johnny
a35a6f3ea0 Merge pull request #835 from twetech/ticket_notifications
Notifications for technicians in tickets
2023-12-20 23:45:00 -05:00
Johnny
8ff6271058 Merge pull request #834 from twetech/billable_tickets
Update ticket billing functionality
2023-12-20 23:43:51 -05:00
johnnyq
82ec1408de FEATURE: Added Batch Payment to multiple invoices, currently works by paying the oldest invoices firest this can be accessed through client invoices and will show as long as the client has a balance 2023-12-20 18:47:14 -05:00
o-psi
86d836f3d3 Add vscode to .gitignore 2023-12-19 23:18:11 +00:00
o-psi
999c8ddb40 Add sanitations
Forgot to add in the sanitations.
2023-12-19 23:11:50 +00:00
o-psi
4e142b26e9 Missing "}" after confict resolution 2023-12-19 23:05:56 +00:00
Andrew Malsbury
ae1496adae Merge branch 'master' into ticket_notifications 2023-12-19 17:04:05 -06:00
o-psi
98f731b4d4 Remove any "Send Single Email" declarations except in mail queue.
All emails go through the mail queue, using the addToMailQueue() function.
2023-12-19 23:02:05 +00:00
o-psi
70a9120147 Add notification for ticket replies 2023-12-19 22:39:25 +00:00
o-psi
8b4beacf0e Update MailQueue to use function 2023-12-19 22:36:51 +00:00
johnnyq
77b431cb61 Fix Folder ID for file references 2023-12-18 14:54:49 -05:00
johnnyq
7894efedf0 Related Items under Document Details can be clicked on and opened as a new window link 2023-12-18 14:53:06 -05:00
johnnyq
2d06f923d4 Fix Adding NULL logins when editing license 2023-12-18 14:09:34 -05:00
o-psi
d6f4695a03 removed php shorthand for if statements. 2023-12-18 18:21:36 +00:00
o-psi
ebaa2a084a add readable password generation 2023-12-18 17:34:59 +00:00
o-psi
f0567c1fb7 add password generation functionality 2023-12-18 17:34:39 +00:00
o-psi
e0c8b0c30d Readable Password Function 2023-12-18 17:34:22 +00:00
o-psi
43d7f86d90 Readable Password Ajax 2023-12-18 17:34:11 +00:00
johnnyq
29c7f53b8b Fixed incorrect function in statements should be nullable_htmlentities not nullable_html_entities 2023-12-18 12:08:33 -05:00
Johnny
8e86f19bcc Merge pull request #833 from twetech/statements
Statements
2023-12-18 11:59:09 -05:00
o-psi
25fba91642 Put show modals javascript above pretty content. 2023-12-18 15:27:45 +00:00
o-psi
320d534319 Fixed invoice_url 2023-12-18 14:36:50 +00:00
o-psi
961f97f79a fix database 2023-12-17 20:38:11 +00:00
o-psi
7004d9217d Convert account_id and invoice_id to integers in calculateAccountBalance and calculateInvoiceBalance functions 2023-12-17 20:34:39 +00:00
o-psi
78260a2b4e Updates to mark tickets billable, and keep track of which have been billed. 2023-12-17 20:28:57 +00:00
johnnyq
fc7e67f5d0 Fix missing dot for allow .ps1 files 2023-12-14 12:23:55 -05:00
o-psi
1f46ea79fc Escaped Variables 2023-12-14 15:35:03 +00:00
johnnyq
3b6cfeff73 Add cfg and ps1 to the allow file upload list 2023-12-13 20:59:01 -05:00
o-psi
1a18022cc6 remove debug 2023-12-13 16:21:40 +00:00
o-psi
5d56bb2066 update collections report to include link to statement. 2023-12-13 16:12:23 +00:00
o-psi
5be0f9f934 add calculate invoice balance function 2023-12-13 16:10:08 +00:00
o-psi
8e17dbf5ba Add side nav button for statements 2023-12-13 16:09:42 +00:00
johnnyq
74aa0e829f Fix Invoice Item order in Ticketing, When creating an invoice from a ticket make sure the item added has an item_order of 1 2023-12-09 16:31:28 -05:00
johnnyq
594c8565ce Remove Weekly option when converting an invoice to a recurring invoice 2023-12-09 16:17:19 -05:00
johnnyq
72e448e4f0 Item Ordering Fix for Copy Quote or Invoice, Recurring Invoice to Invoice Cron, Force Recurring, Invoice to Recurring. It was not carrying over the item order on these tasks causing item ordering to break 2023-12-09 16:12:31 -05:00
johnnyq
3b7fe290af Removed Weekly option for Recurring Invoices soon will add Quarterly and Bi Annually 2023-12-09 15:24:41 -05:00
johnnyq
b6bc13ddd4 Removed Action Column on Client Tickets similar to the previous commit regarding Global Tickets 2023-12-09 15:08:32 -05:00
johnnyq
dccec2d5f5 Removed actions column from tickets as edit ticket and Delete should be done within the ticket itself, however you can still change priotity and assigned to within the list view. This makes a tremendous impact on performance as ticket details wont need loaded for each row Soon we will impelment bulk actions 2023-12-09 15:04:30 -05:00
Johnny
0eaf9febeb Merge pull request #830 from stehled/master
Fix domain edit for .eu and other domains.
2023-12-06 08:44:03 -05:00
Johnny
aad7b21b24 Merge pull request #831 from twetech/master
Fix for guest pay stripe with fees
2023-12-06 08:43:28 -05:00
o-psi
0aa08dac83 Fix for guest pay stripe with fees 2023-12-04 21:44:31 +00:00
Eduard Stehlík
f47c5cca84 Fix domain edit for .eu and other domains. 2023-12-04 18:40:53 +01:00
johnnyq
7d0813a163 Opps forgot to dump DB when remember_me_token was added causing remember_me on new installs to fail 2023-12-01 11:53:30 -05:00
Johnny
469c8aa501 Merge pull request #828 from wrongecho/quote-fix
Bugfix: Quotes to invoice item ordering
2023-11-30 12:50:15 -05:00
Johnny
d36dca508f Merge pull request #829 from twetech/stripe-pays-fees-undeclared-variable
Fix undeclared variable on Guest Online Pay
2023-11-30 12:50:01 -05:00
o-psi
a74bd5ade1 Fix undeclared variable on Guest Online Pay 2023-11-30 16:29:29 +00:00
Marcus Hill
a0a4e5524a Bugfix: Quotes to invoice item ordering
- Fix item ordering not working for invoices generated from quotes
- Other small quote bugfixes
2023-11-29 21:36:03 +00:00
Johnny
5772146d14 Merge pull request #827 from wrongecho/loc-primary
Bugfix: New locations are set as the primary
2023-11-25 14:14:41 -05:00
Johnny
59aeb1e976 Merge pull request #826 from wrongecho/admin-settings-csrf
Require CSRF token to edit more admin settings
2023-11-25 14:07:31 -05:00
Johnny
e50fbd76ae Merge pull request #824 from wrongecho/disable-personal-dash-link
Temporarily disable the personal dashboard link to prevent confusion
2023-11-25 13:34:25 -05:00
Johnny
e261651370 Merge pull request #823 from wrongecho/agent-email-key
Include login key in agent invitation email
2023-11-25 13:34:10 -05:00
Johnny
0196e86c16 Merge pull request #822 from wrongecho/client-tickets-default-open
Ticketing updates
2023-11-25 13:33:55 -05:00
Marcus Hill
fe369a4078 Bugfix: New locations are set as the primary
Bugfix: Every time you add a new location, it is marked as the primary location in the modal by default as the location_primary variable is overwritten with each iteration of a location.
This PR defaults to no location being the primary, to avoid unnecessarily overwriting the primary location.

Future work: Re-add fixed logic used to determine if a primary location is missing
2023-11-25 18:31:05 +00:00
Marcus Hill
8068cb6081 Require CSRF token to edit more admin settings - thanks again to @stehled 2023-11-25 18:15:25 +00:00
wrongecho
51ac53dc50 Merge pull request #825 from wrongecho/csrf-stripe
Require CSRF token to edit Stripe settings - thanks to @stehled
2023-11-25 16:39:14 +00:00
Marcus Hill
432488eca3 Require CSRF token to edit Stripe settings - thanks to @stehled 2023-11-25 16:36:05 +00:00
wrongecho
3158353921 Update first-interaction.yml
Bump to 1.2.0 to see if this fixes
2023-11-25 14:37:10 +00:00
Marcus Hill
55b35d16f1 Temporarily disable the personal dashboard link to prevent confusion as it is not yet in use 2023-11-25 14:31:09 +00:00
Marcus Hill
48c381ac2d Include login key in agent invitation email 2023-11-25 12:12:45 +00:00
Marcus Hill
c0eb94efc3 Ticketing updates
- Client ticket view now defaults to showing Open tickets
- Client ticket view now has ability to quick filter between open/closed tickets
- Don't render modals for closed tickets (~6x performance boost 0.030 seconds before vs 0.005 seconds after) (we really need dynamic modals for ticketing!)
2023-11-25 11:29:08 +00:00
wrongecho
c1d0a2368d Merge pull request #821 from twetech/Fix-collections-link
Fix link to client overview in collections
2023-11-25 10:31:35 +00:00
Andrew Malsbury
5653518f50 Merge branch 'master' into Fix-collections-link 2023-11-22 12:22:57 -06:00
Andrew Malsbury
fe86d3982c Fix the link to client overvier in collections 2023-11-22 18:18:17 +00:00
Andrew Malsbury
d90280011f Revert "Add scheduled ticket end date field"
This reverts commit d81a04a1d4.
2023-11-22 17:45:01 +00:00
Andrew Malsbury
d81a04a1d4 Add scheduled ticket end date field 2023-11-22 17:44:43 +00:00
Johnny
2adb500612 Merge pull request #819 from twetech/fix-collections-formatting
Add missing currency variable
2023-11-22 11:47:24 -05:00
Johnny
d19706e0c9 Merge pull request #818 from twetech/Fix-new-trips-modal-for-trips.php
Fix-new-trips-modal-for-trips.php
2023-11-22 11:47:05 -05:00
Andrew Malsbury
61f6735ceb added missing currency variable 2023-11-22 16:31:14 +00:00
Andrew Malsbury
7c93a073b2 fix option 2023-11-22 15:01:49 +00:00
Andrew Malsbury
dc04deaada Fix new trip on trips.php 2023-11-22 15:00:42 +00:00
johnnyq
b3c37b6c5f Added ability revoke a users Remember Me Token from the users listing 2023-11-21 18:28:42 -05:00
johnnyq
41ba04b881 Spacing Tidy 2023-11-21 17:37:30 -05:00
johnnyq
90bb9499d5 Moved Remember Me to the Enter MFA Screen Only 2023-11-21 17:36:45 -05:00
Johnny
be10ac0b46 Merge pull request #817 from twetech/remove-gateway-fees-from-client-invoice
Remove Stripe fee from main invoice display
2023-11-21 17:00:34 -05:00
Andrew Malsbury
6ce72e7cc1 Remove Stripe fee from main invoice display 2023-11-21 21:57:04 +00:00
Johnny
c95060727c Merge pull request #816 from twetech/collections-report
Add collections report
2023-11-21 16:55:35 -05:00
johnnyq
a01269ccea Updated Tax Rate to be a floatval instead of a intval 2023-11-21 16:51:05 -05:00
johnnyq
c1d6220e6a Added Tax Name and Rate to the products listing 2023-11-21 16:34:26 -05:00
johnnyq
48177e4250 Updated Quote and Recurring to Automatically select the Tax based off the product tax 2023-11-21 16:17:17 -05:00
johnnyq
3ec2e79e91 Attempt to automatically select Tax based off the products tax code in invoices, it works just doesnt update the select box to show selected 2023-11-21 16:06:12 -05:00
johnnyq
1f9c6578d5 Sanitize each Status in Array 2023-11-21 15:41:03 -05:00
johnnyq
3749cbfca1 Updated multiple ticket status selection 2023-11-21 15:22:38 -05:00
Andrew Malsbury
73e14c164b Add collections report 2023-11-21 19:03:38 +00:00
johnnyq
900ec75303 Reverted Multi Status Select using select2 in Ticket filtering as it broke existing filtering 2023-11-21 12:36:37 -05:00
Johnny
5c89e9849b Merge pull request #813 from twetech/fix-balance-sheet
Redo Balance Sheet Report
2023-11-21 11:57:03 -05:00
Johnny
af7ef5cf20 Merge pull request #814 from twetech/fix-ticket-query
Update Array for ticket Query
2023-11-21 11:55:58 -05:00
Andrew Malsbury
c28727f9a7 Update Array 2023-11-21 16:27:10 +00:00
Andrew Malsbury
230e649e2c Redo Balance Sheet Report 2023-11-21 16:04:41 +00:00
johnnyq
f18bb340bf Keep the Remember Me checkbox selected upon inital submit 2023-11-20 21:18:35 -05:00
johnnyq
0d6c58f1d0 Added Remember Me option by checking this you wont have to enter your MFA for up to 14 days on the device 2023-11-20 20:49:33 -05:00
johnnyq
dcd5103819 Hide Financial Reports, Financial Dashboard, Client Portal Invoices/Quotes of Accounting module is disabled, also included the settings into the client portal, so all settings vars are easily accessable within the portal 2023-11-20 17:20:49 -05:00
johnnyq
ed625b2d98 Fix Client Side Menu Wording 2023-11-20 17:00:04 -05:00
Johnny
26b439554b Merge pull request #810 from twetech/client-pays-fees
Enable passing stripe fee to clients
2023-11-20 16:49:16 -05:00
Johnny
a997896c46 Merge pull request #812 from wrongecho/comment-maintenance-unused
Hide currently unused "Maintenance" from Settings side navbar
2023-11-20 12:33:07 -05:00
Johnny
e9881ff32c Merge pull request #811 from wrongecho/cron-schd-tickets-agent-notif
Scheduled tickets - New ticket notifs + bugfix
2023-11-20 12:32:50 -05:00
Johnny
774531836a Merge pull request #809 from twetech/tax-report
Add functions for retrieving setting values and calculating taxes
2023-11-20 12:24:36 -05:00
Johnny
208f55fad2 Merge pull request #806 from twetech/add-client-replied-to-ticket-status-sort
Add Client-Replied and update select2 statuses in ticket sort dropdown
2023-11-20 12:23:34 -05:00
Andrew Malsbury
88392d0dea Add Stripe fee calculation to guest_ajax.php and
guest_view_invoice.php
2023-11-20 16:42:29 +00:00
Andrew Malsbury
6ab96b3b16 Update settings 2023-11-20 16:42:11 +00:00
johnnyq
02e0692b85 Fix Badge colors not working correctly after custom color tag update 2023-11-19 14:56:49 -05:00
Marcus Hill
b65b8c1c43 Hide currently unused "Maintenance" from Settings side navbar 2023-11-18 12:34:37 +00:00
Marcus Hill
41cfd8d27b Scheduled tickets
- Notify agent DL when scheduled tickets are raised (if configured)

- Bugfix: Ticket numbering if two or more scheduled tickets are raised in the same script execution
- Bugfix: Email processing if a contact replied to a scheduled ticket email (still showing original #--itflow# line rather than ##- Please type your reply above this line -##)
2023-11-18 11:53:24 +00:00
Andrew Malsbury
cc5d274596 Update database version to 0.9.5 and add
config_stripe_client_pays_fees field
2023-11-17 22:44:10 +00:00
Andrew Malsbury
5cfae2520e Add functions for retrieving setting values and
calculating taxes
2023-11-17 21:43:37 +00:00
johnnyq
fe1b8ce88f minor UI update on update 2023-11-17 15:19:48 -05:00
Johnny
75238ce0fb Merge pull request #803 from twetech/See-All-Timers
Add timers modal to see all timers
2023-11-17 14:28:06 -05:00
johnnyq
3781026c79 Commented Out Remember me as it is not feature complete yet 2023-11-17 14:21:41 -05:00
Andrew Malsbury
955b7cc53b Refactor variable declarations to use let instead
of var
2023-11-17 18:30:43 +00:00
Andrew Malsbury
feea83d380 Merge branch 'master' into See-All-Timers 2023-11-17 12:28:20 -06:00
Andrew Malsbury
011bacd1a2 Add ticket timer functionality and clear all
timers button
2023-11-17 18:27:31 +00:00
johnnyq
b1c60fa4d8 Update Categories Create and Edit Modals to take advantage of custom colors 2023-11-16 18:54:49 -05:00
johnnyq
76e348a3a1 Updated UI Create Calendar Modal 2023-11-16 18:42:21 -05:00
johnnyq
2779d6543e Updated Tag Create and Edit Modal UI, added icons, added ability to choose any color 2023-11-16 18:36:22 -05:00
johnnyq
d54a026a33 Wording: Change Passwords to Logins under global search 2023-11-16 18:14:02 -05:00
johnnyq
e8f4c5a672 Fixed Where clause in services 2023-11-16 18:08:21 -05:00
Johnny
8eccdc6b6a Merge pull request #807 from twetech/add-asset-uri-to-ticket-information
Add asset URI to client asset details page
2023-11-16 13:23:51 -05:00
johnnyq
7f7e05873a Bump InputMask from 5.07 to 5.08 2023-11-16 11:31:44 -05:00
johnnyq
b85e045202 Bump PDFMake 0.2.7 to 0.2.8 2023-11-16 11:15:14 -05:00
johnnyq
9cfb9b2f04 Bump JQuery 3.5.1 to 3.7.1 2023-11-16 11:11:47 -05:00
johnnyq
7baceb8c5a Bump TinyMCE from 6.7.0 to 6.7.3 2023-11-16 11:00:46 -05:00
johnnyq
834956624b Reduced the heading font sizes on the the right side ticket details to allow more info to be displayed 2023-11-16 10:40:54 -05:00
johnnyq
32203565a7 UI update for ticket timer, removed the appended H S M to free some clutter 2023-11-16 10:27:14 -05:00
johnnyq
48b153613f Changd Passwords to Logins, made Licenese icon consistent 2023-11-16 00:20:36 -05:00
Andrew Malsbury
41748a03b6 Merge branch 'See-All-Timers' of https://github.com/twetech/itflow into See-All-Timers 2023-11-15 16:30:13 +00:00
Andrew Malsbury
bdda03d8b2 Update ticket link in header_timers.js 2023-11-15 16:30:10 +00:00
Andrew Malsbury
e5752dc335 Add asset URI to client asset details page 2023-11-15 15:32:37 +00:00
Andrew Malsbury
94b4d4aeca Merge branch 'master' into See-All-Timers 2023-11-14 20:00:13 -06:00
Andrew Malsbury
a6a49604a8 Merge branch 'itflow-org:master' into add-client-replied-to-ticket-status-sort 2023-11-14 19:52:02 -06:00
johnnyq
201860798a Fix Ticket Timer to allow for 00 for hour 2023-11-14 18:02:12 -05:00
Andrew Malsbury
35b709fa18 Merge branches 2023-11-14 18:31:30 +00:00
Andrew Malsbury
f01d9d0530 Updated to use prepared statements as 2023-11-14 18:30:18 +00:00
johnnyq
63a4eab8bc Added Pattern Attribute to only allow correct input for the ticket timer 2023-11-14 13:20:51 -05:00
johnnyq
16aff5f634 UI Update to the ticket timer. reworked sizing to be a small input field, set the fields to text instead of numeric as the number updown element was taking up too much space 2023-11-14 13:15:49 -05:00
Andrew Malsbury
4060bea7a6 Add new ticket status and refactor ticket status
filter.
2023-11-14 17:41:30 +00:00
Andrew Malsbury
5657c153be Merge branch 'master' into See-All-Timers 2023-11-14 11:24:26 -06:00
Andrew Malsbury
973307524d Update to fix main screen 2023-11-14 17:23:13 +00:00
Andrew Malsbury
1d401874f3 Update to select2 multiple statuses. 2023-11-14 17:09:43 +00:00
Andrew Malsbury
a0cd266c8b Add Client-Replied to ticket sort dropdown 2023-11-14 15:53:04 +00:00
Johnny
5dfc0d0d2c Merge pull request #802 from twetech/update-timer-when-pending
Time tracking paused when pending
2023-11-13 23:29:15 -05:00
johnnyq
f11ad402e9 Moved the rest of the Import / Export Buttons into the Create and some exports in the Advanced filter button 2023-11-13 20:24:57 -05:00
johnnyq
4a74d7b402 Do not show other Assets if there are none 2023-11-13 19:52:03 -05:00
Johnny
c2a5f02308 Merge pull request #805 from twetech/Fix-for-quotes-and-recurrings
[HOTFIX] Fix editing of recurring and quotes
2023-11-13 14:19:30 -05:00
Andrew Malsbury
cdacb7735c Update to remove 2023-11-13 18:45:31 +00:00
Andrew Malsbury
d837a10013 Fix editing of recurring and quotes 2023-11-13 17:50:42 +00:00
Andrew Malsbury
47fe6fe233 Add timers modal to see all timers 2023-11-12 23:47:44 +00:00
Andrew Malsbury
efb4709519 Time tracking paused when pending 2023-11-12 21:23:06 +00:00
johnnyq
104bbee422 Converted Client Services Multiple Select Boxes to use Select2: 2023-11-10 16:34:21 -05:00
Johnny
9c4d9f14b1 Merge pull request #801 from wrongecho/mail-parse-blank-emails
Mail parse - Handle blank/unexpected emails better
2023-11-09 17:57:52 -05:00
Marcus Hill
0de99fda61 Mail parse - Handle blank/unexpected emails better 2023-11-09 22:18:57 +00:00
johnnyq
f6076ad97a Remove Quick Add Instead redirect them to the categories settings page when plus is clicked 2023-11-09 13:09:38 -05:00
johnnyq
8975fcf2ee Place Advanced filter back on the left final decision was made to do so and I like it 2023-11-09 11:23:45 -05:00
johnnyq
408a596efa Add logging if creating a referral via create client 2023-11-08 23:35:00 -05:00
johnnyq
0103e05093 Ability to create a referral when adding a client 2023-11-08 23:30:44 -05:00
johnnyq
89cbdd1038 Added industry select array 2023-11-08 22:54:33 -05:00
johnnyq
cbf15f4e81 Updated button colors on accept decline quote 2023-11-08 22:28:29 -05:00
johnnyq
88a6fdd36d Start page is a required select box with the option of putting in a custom value 2023-11-08 22:17:51 -05:00
johnnyq
5bd4c32f4d Reorganized Create Software License added multi select2 to assign asset and user licenses 2023-11-08 16:46:15 -05:00
johnnyq
a300248f90 Remove the old add remove ticket watcher js code 2023-11-08 14:38:48 -05:00
johnnyq
7e2d3c4159 Add Function Select2 Multiple Capabilities to add ticket watchers in create client ticket 2023-11-08 14:37:03 -05:00
johnnyq
eb01e4b4d5 Clean up Logic for Client Add and Client Edit Modals, same for trip add copy edit 2023-11-08 13:34:58 -05:00
Johnny
40b6723fac Merge pull request #800 from wrongecho/azure-sso-error-wording
AAD SSO - Wording
2023-11-07 17:28:37 -05:00
johnnyq
3a61b56c6e Fix SQL Syntax error 2023-11-07 16:52:02 -05:00
johnnyq
5d1c283533 Do not show disabled or users that were before the trip creation date 2023-11-07 16:34:32 -05:00
Marcus Hill
51ec92c72e AAD SSO - Wording
Slight change to the error wording when a user doesn't exist in ITFlow as a contact / has the wrong auth method set (blank/local rather than Azure)
2023-11-07 21:18:46 +00:00
johnnyq
afc040bfe6 Updated UI on add / edit Client moved the tagging functionality to using select2 to increase space and merge tags and notes tabs 2023-11-07 16:02:15 -05:00
johnnyq
3f2f405596 Allow Manual Input of Trip Destination or select from client locations, Added Remember me checkbox for future implementation 2023-11-06 19:37:48 -05:00
johnnyq
d2e3c1e12d Fix Domains Icon in Global Search, remove unnessesary > 2023-11-06 17:03:34 -05:00
johnnyq
a9304a3784 Move Calendar under support Move Trips under Finance 2023-11-06 15:25:54 -05:00
johnnyq
c18dbc5985 Rename Events in Client Side Nav to Calendar 2023-11-06 15:22:51 -05:00
johnnyq
91924bc239 Feature: Part 2 - Added Default Hourly rate to settings pane, default to the default hourly rate when adding a client 2023-11-06 15:05:07 -05:00
johnnyq
1f0d2ff1ab Feature: Part 1 - DB Schemea update for Default Hourly Rate 2023-11-06 14:52:01 -05:00
johnnyq
69e9691de9 Remove elevation CSS tag from tickets as this was not consistent and unnessary 2023-11-06 14:43:19 -05:00
johnnyq
76f20225f5 Fix IT Docs not showing, keep assets side nav active when viewing asset details page 2023-11-06 14:38:22 -05:00
johnnyq
c40be56869 Disable Documentation section of Client Side Nav of IT Doclumentation is disabled 2023-11-06 14:33:23 -05:00
johnnyq
a8ee791d64 Allow to set quick notes under asset details 2023-11-06 14:25:55 -05:00
johnnyq
dff4eff5cc Do not show related content in edit service if the entity archived date is greater than when the service was created 2023-11-06 13:46:52 -05:00
johnnyq
167c2a5b43 Remove Document from many to many service_documents table when archiving or deleting a document prevents from showing up under document service relation 2023-11-06 13:27:58 -05:00
johnnyq
11b814b4c8 Do not show archived content when adding a service 2023-11-06 13:19:27 -05:00
johnnyq
43b94ebddc Restored New Quote Functionality under clients this was disabled for debugging but never re-enabled back 2023-11-06 12:44:44 -05:00
Johnny
210530e673 Merge pull request #798 from wrongecho/client-is-lead-fix
Fix undefined client_is_lead errors
2023-11-05 10:49:43 -05:00
Johnny
7044c6bf54 Merge pull request #797 from wrongecho/api-additions
API - Documents
2023-11-05 10:49:30 -05:00
Marcus Hill
ba86af9efa Fix undefined client_is_lead errors
- Defines client_is_lead within the general client include file to prevent the following error filling up logs on almost every page load.
> "PHP Notice: Undefined variable: client_is_lead in itflow/client_edit_modal.php on line 111"
2023-11-05 11:03:49 +00:00
Marcus Hill
573eaf179b API - Documents
- Add create and update methods
2023-11-05 10:42:46 +00:00
wrongecho
a31c012487 Merge pull request #796 from wrongecho/fix-trip-export
Fix trip export to csv
2023-11-05 08:31:16 +00:00
Marcus Hill
7ccd69a26f Fix trip export to csv 2023-11-05 08:24:19 +00:00
Johnny
f7e0f06eb6 Merge pull request #795 from nellistc/globalsearch-domains
Update global search to include client domains
2023-11-03 16:44:50 -04:00
nellistc
7ab032fa3f Update global search, add client to domain search results
Show client name and link to client overview in domain search results
2023-11-04 07:31:21 +11:00
nellistc
008ad76c68 Update global_search.php
add domains to global search results
2023-11-03 18:22:24 +11:00
johnnyq
fbf535444b Updated Quote and Recurring to match invoice UI updates 2023-11-02 16:31:25 -04:00
johnnyq
ef213e34d4 Invoice UI Update: Bolded Due Date, Moved Subtotal to the top added - sign in front of discount, do not subtract the discount from the subtotal as this is reservered for total, do not show tax discount or paid in pdf if they are 0 2023-11-02 16:12:06 -04:00
johnnyq
015d8265e0 Fix Quotes duplicated php start close tags in edit quote discount field 2023-11-02 13:19:13 -04:00
johnnyq
cd99e91ac3 Bold the contact name in client listing 2023-11-01 18:55:41 -04:00
johnnyq
5a7c62c150 Added back number_format() function as there was a way to just remove the commas but keep the decimal place so 290.90 doesnt look like 290.9 2023-11-01 18:16:12 -04:00
johnnyq
572f12eaef Removed num_format(),2 function for pricing and cost fields as it was putting in commas as this is unacceptable for floatvals 2023-11-01 17:51:35 -04:00
johnnyq
5c0ab72d69 Moved creating lock file after all other checks have passed to prevent locking if a certian check has not passed, turned off imap extend log as it could cause mysql errors also remove lock before exiting if cannnot connect to imap 2023-11-01 13:59:35 -04:00
johnnyq
43786a72ab Moved Advanced Filter button to the right for invoices and quotes 2023-10-31 17:24:46 -04:00
johnnyq
7f19ea6c55 Moved Advanced Filter button to the far right toolbar under clients 2023-10-31 17:16:14 -04:00
johnnyq
b26c1b28c3 Show Archived Items for licenses and password and moved import exports to New DropDown 2023-10-31 16:24:59 -04:00
johnnyq
c94c88dc88 Show Archived Items for locations, vendors and assets and moved import exports to New DropDown 2023-10-31 16:16:15 -04:00
johnnyq
be279b4e8d Added more hints between leads and clients under client management 2023-10-31 15:38:40 -04:00
johnnyq
174a8d932f Reworked the sahow Client Leads button to radio style 2023-10-31 15:12:38 -04:00
johnnyq
638d59e1c1 Sort items by item order when exporting invoices or quotes to PDF in app view and guest view 2023-10-31 14:57:45 -04:00
johnnyq
036c687bf8 Fix up item moving on invoice, quotes and recurrung, removed unnessesary tags, re-arranged the arrows to the top rename remove to delete with a trash can as its more proper 2023-10-31 14:51:38 -04:00
johnnyq
8a5f51845c Reworked the Dashboard so only 1 Dashboard shows on the Side nav and now has a top nav to select dasbords, Personal Dashboard coming 2023-10-31 14:22:03 -04:00
johnnyq
4a4924f4f6 Bring back editing of username and password for an asset in the asset details page 2023-10-31 13:30:38 -04:00
johnnyq
365ed3a79a Merged Client Leads into Client Management 2023-10-31 11:03:46 -04:00
Johnny
4ab38b42f8 Merge pull request #794 from twetech/timer-tracking-remember-manual-changes
Update timer to remember manual edits
2023-10-31 10:26:57 -04:00
Andrew Malsbury
fb45bceae5 Update timer to remember manual edits. 2023-10-30 13:22:29 +00:00
Johnny
d4d4d9cd7a Merge pull request #793 from wrongecho/schd-contact
Add ability to edit contact on a scheduled ticket
2023-10-29 13:32:09 -04:00
Marcus Hill
d6cf04b8f2 Codesmell 2023-10-28 14:40:27 +01:00
Marcus Hill
e88d0b1e23 Add ability to edit contact on a scheduled ticket 2023-10-28 14:32:15 +01:00
Johnny
48753e6462 Merge pull request #792 from twetech/update-timer
Timer - Record time even if closed
2023-10-27 20:36:25 -04:00
johnnyq
3c8a026b7c Fixed Cron mail queue and email parser missing ' 2023-10-27 13:05:29 -04:00
Andrew Malsbury
adafd38684 Timer - Record time even if closed 2023-10-26 19:19:46 +00:00
johnnyq
f9d3d3b2f9 Also Added logging to cron mail queue and mail parser when attempting to execute when its already executing by checking to see if the lock file is present 2023-10-25 18:05:19 -04:00
johnnyq
c30e0f7768 Remove Lock files older than 10 Mins aka 600 Secs and log it for Cron Email Parser and Cron Mail Queue 2023-10-25 17:57:35 -04:00
Johnny
87da66b069 Merge pull request #791 from twetech/save-timer-to-local
Save ticket timer to local storage
2023-10-25 17:35:21 -04:00
Johnny
430e148815 Merge pull request #790 from twetech/Discounts-pt-2
Update Quotes and Recurrings with discounts
2023-10-25 17:34:34 -04:00
Johnny
903e9437c4 Merge pull request #789 from twetech/sort-for-quotes-and-invoices
Update for sorts
2023-10-25 17:34:19 -04:00
Johnny
a1e511d8ac Merge pull request #788 from twetech/topnav-notification-fix
Removed useless assignment
2023-10-25 17:34:06 -04:00
Andrew Malsbury
f6cdf5ac51 Added comments because I dont know JavaScript 2023-10-25 19:37:17 +00:00
Andrew Malsbury
a29a97214a Update to keep incrementing while tab is closed 2023-10-25 19:16:07 +00:00
Andrew Malsbury
ea3e1df784 clear local storage when responding 2023-10-25 19:02:23 +00:00
Andrew Malsbury
6a0b291acd Save timer to local Storage 2023-10-25 18:26:33 +00:00
Andrew Malsbury
62d3cab389 Update Quotes and Recurrings with discounts 2023-10-25 17:15:41 +00:00
Andrew Malsbury
79c112b0af Merge branch 'itflow-org:master' into topnav-notification-fix 2023-10-25 09:36:09 -05:00
Andrew Malsbury
5f2a1298a1 Fix quotes screen, and update others for looks. 2023-10-25 14:32:46 +00:00
Andrew Malsbury
85a759f7db Removed useless assignment 2023-10-25 14:07:47 +00:00
Johnny
5faac97491 Merge pull request #785 from o-psi/Update-Timer
Update Timer to stop when in focus
2023-10-24 21:10:48 -04:00
o-psi
53c953b60e Update the timer to stop when focused. 2023-10-24 20:09:07 +00:00
o-psi
6c13773706 Revert "Enhance timer: Pause during input edits"
This reverts commit 2a3156cd59.
2023-10-24 20:08:22 +00:00
o-psi
2a3156cd59 Enhance timer: Pause during input edits 2023-10-24 20:07:10 +00:00
johnnyq
b05e5bb575 Fix Broken cron.php broke as of 10-20-2023 2023-10-23 13:51:16 -04:00
johnnyq
7b94e29aa4 Fix Broken Select2 andDateRangePicker JS Plugins 2023-10-21 22:59:00 -04:00
Johnny
b34fd85ad4 Merge pull request #784 from wrongecho/portal-ticket-attachments
Portal ticket attachments
2023-10-21 16:00:14 -04:00
Johnny
e0f1adb446 Merge pull request #783 from wrongecho/email-to-ticket-extensions
Expand range of allowed file extensions for email to ticket attachments
2023-10-21 15:59:25 -04:00
Johnny
68220cc063 Merge pull request #782 from wrongecho/ticket-assigned-wording
Change modal unassigned wording from "No one" to "Not Assigned"
2023-10-21 15:59:13 -04:00
Johnny
33abf8a9eb Merge pull request #781 from wrongecho/session-timeout-garbage-workaround
Add background ajax query in an attempt to prevent session timeout
2023-10-21 15:59:00 -04:00
Johnny
abc2226b4f Merge pull request #780 from wrongecho/fix-client-page
Fix clients.php page after leads were added
2023-10-21 15:58:37 -04:00
Marcus Hill
31be8034e7 Revert different change covered in separate PR 2023-10-21 15:27:21 +01:00
Marcus Hill
218cdcdc4c Allow contacts to upload attachments when adding ticket replies in portal
- Adds the ability for contacts to add file attachments when posting a ticket reply
- Enhancements to checkFileUpload(): Adjust file reference name generation & bad extension handling
2023-10-21 15:24:15 +01:00
Marcus Hill
7aadad3597 Expand range of allowed file extensions for email to ticket attachments 2023-10-21 14:40:14 +01:00
Marcus Hill
1c6c90845c Change modal unassigned wording from "No one" to "Not Assigned" 2023-10-21 13:01:11 +01:00
Marcus Hill
65168fe702 Add background ajax query in an attempt to prevent session timeout 2023-10-21 12:34:34 +01:00
Marcus Hill
2240f641dc Fix missing variable assignment for client_is_lead 2023-10-21 11:54:41 +01:00
johnnyq
ba9442e6c3 Added Confirmation to Close Ticket in Client Portal - Seperated cofirmation modal to a seperate JS file which is now included in the Client Portal 2023-10-20 19:10:25 -04:00
johnnyq
fcfb162ec8 Enable domain expire alerts and send invoice reminders did not respect their settings it would still execute as long as cron was executing, updated the desription of the options as well 2023-10-20 18:38:48 -04:00
johnnyq
509a955277 Comment out on End Task Logs as it wasnt producing correct information 2023-10-20 17:43:31 -04:00
johnnyq
6db576c80e Update setup so Asset Type Account type can be created before it adds the cash on hand account so it may reference the assets type 2023-10-20 16:42:10 -04:00
Johnny
dd644a39b8 Merge pull request #779 from o-psi/clean-requires-and-includes
Update constructs to not have parenthesis.
2023-10-20 16:32:29 -04:00
johnnyq
7a834b0f5f Update Payments to only show account_type_parent 1 which is assets 2023-10-20 16:27:43 -04:00
o-psi
53c11edc8c Update constructs to not have parenthesis. 2023-10-20 15:25:52 -05:00
Johnny
4080774602 Merge pull request #778 from o-psi/update-di
Update discounts to allow decimals
2023-10-20 16:19:33 -04:00
johnnyq
881f43bdb7 Updated Account Selection under Pay Invoice to show only Asset Accounts which is asset_type_parent = 1 2023-10-20 16:18:06 -04:00
johnnyq
8257fc3193 Updated Accounts Listing to use take adavantage of the new account_type_parent 2023-10-20 16:10:45 -04:00
o-psi
aed411dc45 Update discounts to allow decimals 2023-10-20 15:05:42 -05:00
johnnyq
762dafab7e Updated Account Types liasting and posting to use the new account_type_parent field, also update setup to inset the correct account types into the correct account_type_parent 2023-10-20 15:40:52 -04:00
johnnyq
fcc49c2b40 DB Update: Adds an account_type_parent field to represent the parent type 1 being default and representing Assets, 2 Liabilities, 3 Equity this will be the new way to identify the parent account type instead of using account_type_id min and max values ex 10-19 was Assets, 20-29 was Liabilities, Equity being 30-39. This was improper as the primary key should never be static 2023-10-20 14:56:40 -04:00
Johnny
8b9efb2e6d Merge pull request #777 from o-psi/payments-to-assets-accounts-only
Update Payments to only show Asset Accounts
2023-10-20 12:48:23 -04:00
o-psi
987944f992 Update Payments to only show Asset Accts 2023-10-20 08:33:28 -05:00
Johnny
56b91f3278 Merge pull request #776 from o-psi/discounts
Discounts
2023-10-19 18:34:44 -04:00
Andrew Malsbury
a382092dab Merge branch 'master' into discounts 2023-10-19 17:19:32 -05:00
o-psi
6e6e0d5f71 Update variable definition 2023-10-19 17:03:50 -05:00
o-psi
824db5865b Update Guest View Payment Screen 2023-10-19 17:01:09 -05:00
o-psi
ea1dadf792 update db ver number 2023-10-19 16:34:57 -05:00
Johnny
e379587c06 Merge pull request #772 from o-psi/leads
Leads
2023-10-19 16:41:59 -04:00
o-psi
8bea3f0022 Update Guest View 2023-10-19 14:05:58 -05:00
o-psi
fdaa176486 Post handling for calculating Discounts 2023-10-19 13:56:58 -05:00
o-psi
5317f298dc Add view for discount. 2023-10-19 13:56:26 -05:00
o-psi
541bd9e0ca add discount to model 2023-10-19 13:56:01 -05:00
o-psi
25d2b48542 Add discount to modal, reformat. 2023-10-19 13:54:39 -05:00
o-psi
8182144bdc Update database to have discount field on invoice. 2023-10-19 13:53:53 -05:00
Johnny
6aeefd3d5d Merge pull request #775 from o-psi/update-readme
Default install script doesnt like the oneliner.
2023-10-18 11:43:07 -04:00
Johnny
9806fc9283 Merge pull request #774 from o-psi/Fix-Setup-Page
[Urgent] - Fix Setup Page
2023-10-18 11:42:41 -04:00
o-psi
1296e6b5f0 Default install script doesnt like the oneliner. 2023-10-18 09:38:50 -05:00
o-psi
aae3845b16 removed erroneous 's' 2023-10-18 09:34:28 -05:00
o-psi
f16a175eed fixed intentionallity issue 2023-10-16 23:40:08 -05:00
o-psi
2f9b6d97b9 update post to support leads 2023-10-16 22:52:22 -05:00
o-psi
fa1feba237 add leads to client model 2023-10-16 22:50:21 -05:00
o-psi
44e5b6c2bd add leads to sales 2023-10-16 22:50:09 -05:00
o-psi
0d02c8b855 adjust clients to filter out leads 2023-10-16 22:49:59 -05:00
o-psi
efba7ffc8b make new leads screen to view leads. 2023-10-16 22:49:45 -05:00
o-psi
b19af06dae update edit modal to support leads and modals 2023-10-16 22:49:32 -05:00
o-psi
34db62e8ee Update add modal to support leads and clients 2023-10-16 22:43:48 -05:00
o-psi
4fa186179d DB Updates to support leads functionality 2023-10-16 19:30:31 -05:00
Johnny
de91afe1a0 Merge pull request #771 from o-psi/add-links-in-reports-to-clients
Add link to client in reports
2023-10-16 17:25:22 -04:00
johnnyq
fba1115b0d Fix DB Update database version was set it 0.8.10 which caused it not to update instead chnaged it to 0.9.0. items table also does not exist updated to invoices items for the new sort function redumped DB Structure. 2023-10-16 17:21:21 -04:00
o-psi
cc9dc4e6e7 add link to client overview page 2023-10-16 16:14:15 -05:00
Johnny
d0312e75cb Merge pull request #770 from o-psi/hide-archived-clients
Dont show archived clients in new invoice screens
2023-10-16 17:07:35 -04:00
Johnny
9818c57ecb Merge pull request #769 from o-psi/other-sorts
Sorting Recurring and Quotes
2023-10-16 17:06:42 -04:00
o-psi
4763110267 Dont show archived clients in new invoice screens 2023-10-16 15:53:54 -05:00
Andrew Malsbury
2d061c0163 Merge branch 'master' into other-sorts 2023-10-16 15:40:04 -05:00
Johnny
cce1dc86c2 Merge pull request #768 from o-psi/invoice-sort-1.b
Invoice Sort Updates
2023-10-15 23:39:36 -04:00
o-psi
3c391b9d50 Database Updates to match 2023-10-15 22:26:01 -05:00
o-psi
5221a3676e quote sort logic 2023-10-15 22:14:36 -05:00
o-psi
47db00e90c recurring item sort logic 2023-10-15 22:14:24 -05:00
o-psi
b04dd98370 update sort for recurring 2023-10-15 22:14:03 -05:00
o-psi
0c98d8b45b add logic for recurring 2023-10-15 22:13:51 -05:00
o-psi
5ba0649e4a sort by order 2023-10-15 22:08:19 -05:00
o-psi
64a00551c6 Fix Quote View for Sort 2023-10-15 22:08:04 -05:00
o-psi
e51d0b74a6 Cleaned up logic 2023-10-15 20:01:15 -05:00
o-psi
5f839d8768 Added logic to hide buttons 2023-10-15 20:00:42 -05:00
johnnyq
33c1e72dcc Fix Wrong Timezone var name 2023-10-15 12:15:48 -04:00
Johnny
8d5bda529c Merge pull request #767 from o-psi/unarchive-for-account-types
Updates for account types
2023-10-15 12:09:25 -04:00
o-psi
37399a90ce Added Search 2023-10-15 00:15:00 -05:00
o-psi
845b2397fb Add 'all' button 2023-10-15 00:00:03 -05:00
o-psi
26fc756175 Fixed a bug with not showing unless query given 2023-10-14 23:54:12 -05:00
o-psi
1f3c103032 changed view from long list to broken down by type 2023-10-14 23:34:54 -05:00
o-psi
ab308af4f9 changed number to name 2023-10-14 23:34:31 -05:00
o-psi
68b232e4fd set default per type page 2023-10-14 23:34:14 -05:00
o-psi
56a5e903df added unarchiving to account types post 2023-10-14 23:33:49 -05:00
Johnny
ee7d2e9dba Merge pull request #766 from o-psi/categories_archived
Allow Unarchiving and Deleting Categories.
2023-10-14 21:46:28 -04:00
o-psi
87b4345b87 Updated to use pagination head code. 2023-10-14 19:05:39 -05:00
o-psi
b107eb232c Add archived to table. 2023-10-14 14:11:02 -05:00
o-psi
0a98c4322c Allow unarchiving in Post.php 2023-10-14 14:10:41 -05:00
johnnyq
592e2a80d2 Increment the Database version to take adavantage of the new item ordering under invoices 2023-10-14 13:58:20 -04:00
Johnny
5a21271c45 Merge pull request #765 from o-psi/Localization-Cleanup
Condensed localization to a separate file
2023-10-14 13:54:54 -04:00
Johnny
966a8b0770 Merge pull request #763 from o-psi/add-php-info-to-debug
Expand debug screen with PHPInfo
2023-10-14 13:54:16 -04:00
Johnny
766df19223 Merge pull request #762 from o-psi/Invoice-items-order
Sort invoice items
2023-10-14 13:54:01 -04:00
Johnny
21a5006a43 Merge pull request #761 from o-psi/edit-currnet-expenses-amount-regex
Allow for commas in recurring expense modals
2023-10-14 13:50:56 -04:00
o-psi
ed269e1245 changed to item_order 2023-10-13 22:49:28 -05:00
o-psi
ee8e758a49 Condensed ~1.6 LOC by 50x, and reduced duplication 2023-10-13 22:42:11 -05:00
Andrew Malsbury
29279d0a7e Merge branch 'itflow-org:master' into edit-currnet-expenses-amount-regex 2023-10-13 22:12:03 -05:00
o-psi
08a11cb53e added php info and handling to bottom of debug 2023-10-13 21:56:50 -05:00
o-psi
0270a680a6 update invoices 2023-10-13 20:54:41 -05:00
o-psi
7a6c3ec470 Removed the order_id echo statement for production 2023-10-13 20:48:44 -05:00
o-psi
b4396fe244 post actions for changing sort 2023-10-13 20:13:40 -05:00
o-psi
ffa0226067 add item sort dropdowns 2023-10-13 20:13:28 -05:00
o-psi
097690bfbd add sort to guest view 2023-10-13 20:12:58 -05:00
o-psi
141dad23fe Update database, did not do increment 2023-10-13 20:12:43 -05:00
o-psi
3124ca2777 adjust regedit to allow for commas as thousands 2023-10-13 17:40:06 -05:00
o-psi
00effcf79d remove commas before trying to make a float 2023-10-13 17:39:41 -05:00
Johnny
45acc5866d Merge pull request #760 from o-psi/dashboard-links
Dashboard links
2023-10-13 15:30:47 -04:00
Johnny
604a788112 Merge pull request #759 from o-psi/Assets-Report
Assets report
2023-10-13 15:30:36 -04:00
Johnny
ff424330b4 Merge pull request #758 from o-psi/add-archive-for-account-types
Add archive option for account types
2023-10-13 15:30:06 -04:00
o-psi
b747bd4e9d Make all boxes links 2023-10-13 10:53:20 -05:00
o-psi
157263cf8a Add link to Assets on technical dashboard 2023-10-13 09:58:56 -05:00
o-psi
78032dcf6d Added a report to view all assets by client. 2023-10-13 09:56:38 -05:00
o-psi
37a5100742 Add archive option for account types 2023-10-13 13:57:17 +00:00
Johnny
2f8ee11a77 Merge pull request #757 from o-psi/Update-Documentation-Capitalization
Update Capitalization for Documentation
2023-10-12 18:30:49 -04:00
o-psi
3d31cf0d9d Move support above documentation 2023-10-12 22:03:40 +00:00
o-psi
ab6e8dde00 Update Services location 2023-10-12 22:02:28 +00:00
o-psi
9372ca4bc3 Update Capitalization for DOCUMENTATION 2023-10-12 20:43:26 +00:00
johnnyq
8c56426186 Fixed a layout issue if no previos ticket exists for a selected contact under ticket details 2023-10-12 16:09:31 -04:00
Johnny
5a1b93ae17 Merge pull request #754 from o-psi/fixed2-typo-in-product-logging
Fixed a typo in product logging
2023-10-12 12:57:57 -04:00
Andrew Malsbury
9b7ef4761c Merge branch 'itflow-org:master' into fixed2-typo-in-product-logging 2023-10-12 11:55:07 -05:00
Johnny
df14ac8a83 Merge pull request #753 from o-psi/remove-foreign-key
Remove-foreign-key
2023-10-12 12:54:33 -04:00
o-psi
38c5547307 changed modifyed to modified 2023-10-12 16:54:18 +00:00
o-psi
8bce945a11 Moved accounts back to top, removed accounts type. 2023-10-12 16:49:56 +00:00
Andrew Malsbury
33cd0e89ca Merge branch 'itflow-org:master' into master 2023-10-12 11:40:40 -05:00
Andrew Malsbury
df9f5fb001 Update db.sql 2023-10-12 11:23:38 -05:00
Andrew Malsbury
c7ca89b2e3 Update db.sql 2023-10-12 11:09:26 -05:00
Johnny
63ecb38bb7 Merge pull request #752 from o-psi/fix-account-type-fk
[Urgent] Fix Foreign Key for account types
2023-10-12 12:01:57 -04:00
Andrew Malsbury
aa9163ae98 Merge pull request #1 from o-psi/fix-account-type-fk
fix fk for account types
2023-10-12 10:54:59 -05:00
Andrew Malsbury
befbf457e8 fix fk for account types 2023-10-12 10:22:45 -05:00
wrongecho
448aaa8c1c Merge pull request #751 from o-psi/fix-account-type-default
[Critical] Fix bug introduced in account type update
2023-10-12 15:49:03 +01:00
Andrew Malsbury
6506f64a6e Update db.sql
Fix bug introduced in account type table
2023-10-12 09:27:38 -05:00
Johnny
101488f9f1 Merge pull request #750 from o-psi/Rename-Assets-SideNav-Category
Rename Assets and move documentation and files in
2023-10-11 22:21:09 -04:00
Andrew Malsbury
aaf04f18c5 Rename Assets and move documentation and files in 2023-10-12 02:00:12 +00:00
johnnyq
e6b15a0ff3 Do not Export Archived Data when Exporting client data to a PDF 2023-10-11 17:03:20 -04:00
johnnyq
964ff6740c Fix last commit opps on balance sheet report. use not equal to 0 instead of equal 0 as it will just sum up all the transfers 2023-10-11 15:12:14 -04:00
johnnyq
25751bdd85 Fix Balance sheet report so it doesn't calculate transfers, transfers use the expense and revenue tables as well. To fix this a transfer always has a vendor_id 0 in the expense table and category_id is always 0 for the revenues table, so dont sum those 2023-10-11 15:08:20 -04:00
johnnyq
66c16d6cff Increment Database again to insert the account types for PR #734 Add Balance Sheet report 2023-10-11 14:46:44 -04:00
johnnyq
fb60412686 Increment the Database version as this was missed in PR #734 Add Balance Sheet report 2023-10-11 14:37:27 -04:00
Johnny
c248af81fb Merge pull request #749 from o-psi/remove-gui-custom-fields
Removed gui for custom fields
2023-10-11 14:34:38 -04:00
Johnny
f1e74d926d Merge pull request #748 from o-psi/quote_guest_view
Update guest quote view to make more sense
2023-10-11 14:34:18 -04:00
Johnny
7986a797a7 Merge pull request #747 from o-psi/technical-dashboard-for-admins
Update technical dashboard links.
2023-10-11 14:33:34 -04:00
Johnny
44671d4769 Merge pull request #734 from o-psi/balance-sheet
Add balance sheet report
2023-10-11 14:31:45 -04:00
Andrew Malsbury
ddff9b929d Other PR code snuck in. Still learning git sry 2023-10-11 17:31:15 +00:00
Andrew Malsbury
ce16db9413 removed gui for custom fields 2023-10-11 14:42:22 +00:00
Andrew Malsbury
7e9c22171b Update button logic to disallow on draft... 2023-10-10 22:49:34 +00:00
Andrew Malsbury
533a547622 Update technical dashboard links. 2023-10-10 18:31:01 +00:00
Andrew Malsbury
74e2866a01 Adjusted the type dropdown 2023-10-10 16:52:00 +00:00
Andrew Malsbury
22a072f2b4 Merge branch 'itflow-org:master' into balance-sheet 2023-10-10 08:27:14 -05:00
Andrew Malsbury
7b772cf529 Something is broken with the confirm-link 2023-10-09 23:21:48 +00:00
Andrew Malsbury
96e493df4a Removed a testcase 2023-10-09 23:16:22 +00:00
Andrew Malsbury
4fbf448597 Updated balance sheet to use DB types 2023-10-09 22:15:27 +00:00
Andrew Malsbury
bb559a4bdb Fixed account type not showing by default on edit 2023-10-09 21:42:03 +00:00
Andrew Malsbury
9c099f7f98 Account Types bug 2023-10-09 21:24:31 +00:00
Andrew Malsbury
d5e03f101a fixed what @wrongecho suggested. 2023-10-09 20:39:32 +00:00
Andrew Malsbury
aef4ec0d20 Post handling for add and edit 2023-10-09 20:32:19 +00:00
Andrew Malsbury
31043da039 add more default account types 2023-10-09 20:31:54 +00:00
Andrew Malsbury
e4fc7bca23 New settings menu 2023-10-09 20:31:31 +00:00
Andrew Malsbury
72da87e608 New Settings Screen 2023-10-09 20:31:21 +00:00
Andrew Malsbury
3ef045eea1 New Modal 2023-10-09 20:28:12 +00:00
Andrew Malsbury
a8e03d4660 Switched to DB controlled Account Types 2023-10-09 20:27:53 +00:00
Andrew Malsbury
69272a8800 added account type post handling 2023-10-09 20:27:28 +00:00
Andrew Malsbury
03c8f47cf0 added account types table 2023-10-09 20:27:09 +00:00
Andrew Malsbury
81f34e20d7 Updated Version 2023-10-09 20:26:48 +00:00
Andrew Malsbury
749281a3e8 Switched to DB controlled Account Types 2023-10-09 20:26:36 +00:00
Andrew Malsbury
8b6c909d95 Switched to DB controlled Account Types 2023-10-09 20:26:03 +00:00
Andrew Malsbury
f190e100e8 Switched to DB controlled Account Types 2023-10-09 20:24:54 +00:00
Andrew Malsbury
2ee87f0f66 Switched to DB controlled Account Types 2023-10-09 20:24:49 +00:00
johnnyq
537f18efd2 Fix Incorrect var when setting timezone 2023-10-08 20:03:16 -04:00
johnnyq
43dc95c55a Fix missing </div> in ticket when we tried to fix merge conflicts 2023-10-08 19:59:26 -04:00
Johnny
20602c6f89 Merge pull request #746 from wrongecho/telemetry-small-edits
Telemetry - Fix typo & add polite note
2023-10-08 19:55:56 -04:00
Johnny
ebbe1e18c7 Merge pull request #738 from wrongecho/contact-click-call
Contacts phone numbers - add tel: hyperlink for click-to-call
2023-10-08 19:55:43 -04:00
Johnny
fac9f9502a Merge pull request #736 from wrongecho/ir-agent-force-pw-reset
Add function to reset all user/agent passwords in case of IR
2023-10-08 19:55:30 -04:00
Johnny
dcd17c7556 Merge pull request #735 from wrongecho/contact-details
Contact small edits
2023-10-08 19:55:16 -04:00
Johnny
1f067c17c4 Merge pull request #733 from wrongecho/ticket-update-type-email-match
Ticket updates - Default to internal update if contact is agent
2023-10-08 19:54:19 -04:00
Johnny
edf6e18dc3 Merge branch 'master' into ticket-update-type-email-match 2023-10-08 19:54:14 -04:00
Johnny
d1a627c209 Merge pull request #732 from wrongecho/email-parse-domains
Email parsing for all domains registered under a client
2023-10-08 19:50:44 -04:00
Marcus Hill
22f14cd5e7 Telemetry - Fix typo & add polite note regarding importance of telemetry data 2023-10-08 21:30:15 +01:00
wrongecho
5b49d35f1a Update SECURITY.md
Add placeholder for 1.0
2023-10-08 20:13:42 +01:00
wrongecho
ac51e6a8ad Update SECURITY.md
Reword security policy, include an escalation process (forum private discussion)
2023-10-08 20:09:17 +01:00
wrongecho
f1b017fc46 Merge pull request #737 from o-psi/Update-readme-with-install-script
Update readme with install script
2023-10-08 19:34:39 +01:00
Andrew Malsbury
f241d247be Update oneliner to not save the install file.
Updated oneliner to pipe the script directly to bash.
2023-10-08 13:07:56 -05:00
wrongecho
cd006d0625 Update first-interaction.yml
Refer bugs/features/support to forum
2023-10-08 17:32:21 +01:00
wrongecho
57403e1707 Update bug_report.md
Refer bugs/features/support to forum
2023-10-08 17:29:01 +01:00
wrongecho
0f4f670f9c Update feature_request.md
Refer bugs/features/support to forum
2023-10-08 17:28:56 +01:00
wrongecho
4025cfdcea Update support.md
Refer bugs/features/support to forum
2023-10-08 17:28:53 +01:00
Marcus Hill
623ebc783c Contacts phone numbers - add tel: hyperlink for click-to-call 2023-10-08 13:35:13 +01:00
wrongecho
b9cadd508d Update README.md / Update readme with install script #737 2023-10-08 09:03:25 +01:00
wrongecho
92eabf1e70 Update README.md / Update readme with install script #737 2023-10-08 09:02:18 +01:00
Andrew Malsbury
605eda879d Updated wording 2023-10-08 02:09:26 +00:00
Andrew Malsbury
221a020ec7 Update Readme to suggest install script. 2023-10-08 02:06:54 +00:00
Marcus Hill
45b3311f54 Add function to reset all user/agent passwords in case of IR 2023-10-07 22:44:29 +01:00
Marcus Hill
dff0b689ce Add confirm to anonymise and archive 2023-10-07 20:48:40 +01:00
Marcus Hill
263382073d Contact small edits
- Adjust behaviour when selecting "Send user e-mail with login details?" (show reset link OR prompt user to change password if tech set one)
- Email wording change (remove ITFlow reference and replace with MSP name)
- Show contact PIN in the portal
- Bump password min length to 8 (and enforce on tech side)
- Bugfix undefined send_email value
2023-10-07 20:42:48 +01:00
Andrew Malsbury
1455e20fad Added Total Equities and Liabilities 2023-10-07 18:05:21 +00:00
Andrew Malsbury
6a485a95b4 Allows for negative numbers for credit cards 2023-10-07 17:32:34 +00:00
Andrew Malsbury
3e96751bf0 Bug - Liabilities is showing Assets total 2023-10-07 17:31:55 +00:00
Andrew Malsbury
d63da07122 Updated setup - Cash Account: current asset type 2023-10-07 17:21:31 +00:00
Andrew Malsbury
3a879088ae Add balance sheet to side nav 2023-10-07 16:16:04 +00:00
Andrew Malsbury
5d964c9282 New Balance sheet report screen 2023-10-07 16:15:50 +00:00
Andrew Malsbury
f8bc2ee4b4 Add "account_type" to accounts table 2023-10-07 16:15:02 +00:00
Andrew Malsbury
844a85cee7 Update DB 2023-10-07 16:14:39 +00:00
Andrew Malsbury
29e2e5e0d7 Update DB, and added comments for next new guy. 2023-10-07 16:14:28 +00:00
Andrew Malsbury
bc95bb4e15 Update Accounts screen to show type 2023-10-07 16:13:46 +00:00
Andrew Malsbury
db5eee0ebb Add type dropdown 2023-10-07 16:13:10 +00:00
Andrew Malsbury
ccb67d8e5d Add type dropdown, and update opening balance star 2023-10-07 16:13:00 +00:00
Andrew Malsbury
9551399b08 Update add and edit to accomodate type 2023-10-07 16:11:19 +00:00
Marcus Hill
69eef8220d Ticket update behaviour - Default to internal update when contact email matches the agent email 2023-10-07 16:10:00 +01:00
Marcus Hill
4ac7841882 Email parsing for all domains registered under a client
- Add support for email parsing/contact creation for all domains registered under a client in the domains module, rather than just the client main website.

- Additionally fix domain_created_at bug and move the new ticket auto-reply message to the email queue instead

Future work: Make ticket parsing work with HTML emails (HTML emails break agent notifs)
2023-10-07 15:51:58 +01:00
johnnyq
0c0d89c1a6 do not allow user logged in to edit their own user by clicking on their avatar under users 2023-10-04 23:00:46 -04:00
johnnyq
6760997beb Set Company Timezone properly upon login 2023-10-04 22:38:29 -04:00
johnnyq
f842d2578f Add Software Key to export client pdf 2023-10-04 22:15:35 -04:00
johnnyq
8cfa0e97d4 Allow ticket priority and status to be searchable in main tickets view 2023-10-04 22:02:08 -04:00
johnnyq
b839f188ef Allow Contact name, Vendor name and asset_name to be searchable under both client tickets and the main tickets view 2023-10-04 21:59:05 -04:00
johnnyq
7e595d9436 Fix table offset issue with Assets Listings 2023-10-04 00:38:28 -04:00
Johnny
435c789e7f Merge pull request #731 from wrongecho/password-rotation-report
Client logins/passwords - Add basic password rotation report
2023-10-02 17:55:04 -04:00
Marcus Hill
f49cdf3a35 Client logins/passwords - Add basic password rotation report
This basic report shows you which client login entries have not had their passwords changed/rotated in the last 90 days.
Password rotation is no longer encouraged for users memorising their own passwords. However, password rotation is essential for service/shared accounts commonly used by MSPs in situations where individual accounts aren't available/viable.
2023-10-02 22:24:42 +01:00
johnnyq
7abdf53e9f Add .ovpn files to allow upload file list 2023-10-02 11:44:06 -04:00
Johnny
1e47107ed0 Merge pull request #730 from wrongecho/improve-totp-security
Client logins/passwords - Ajax change + logging
2023-10-01 22:45:05 -04:00
Johnny
51316f8c1d Merge pull request #729 from wrongecho/login-password-changed-at
Client logins/password - Add tracking in DB when passwords are changed
2023-10-01 22:44:50 -04:00
Johnny
e02e5efbec Merge pull request #728 from wrongecho/ticket-notif-spacing
Agent new ticket notifs - add more spacing
2023-10-01 22:44:36 -04:00
Johnny
5cda6156d4 Merge pull request #727 from wrongecho/settings-user-prevent-self-mod
Users - Prevent modifying yourself via users.php, should use profile
2023-10-01 22:44:22 -04:00
Marcus Hill
041fcb5613 Client logins/passwords - Ajax change + logging
A few changes to the credential manager TOTP function:

- The "hover to view" function now sends the login_id to ajax.php, rather than the TOTP secret
- Viewing the TOTP code is now audited in the logs under Login/View TOTP
2023-10-01 16:32:57 +01:00
Marcus Hill
c768034a1b Client logins/password - Add tracking in DB when passwords are changed/rotated 2023-10-01 15:22:42 +01:00
Marcus Hill
526503d786 Agent new ticket notifs - add more spacing 2023-09-30 23:21:30 +01:00
Marcus Hill
d02d2d4e4a Users - Prevent modifying yourself via users.php, should use profile 2023-09-30 20:32:34 +01:00
johnnyq
203ef85997 Show MFA status in user listing 2023-09-30 15:24:46 -04:00
Johnny
f726df8f80 Merge pull request #726 from wrongecho/setup
Small adjustments to setup: add subheadings and links to docs
2023-09-30 14:10:00 -04:00
johnnyq
90ac7042ba Allow Assigning a contact to all assets in some cases where network or servers may be co-managed 2023-09-30 13:52:04 -04:00
wrongecho
67c181b14b Update first-interaction.yml
Mention GNU GPL
2023-09-30 17:41:04 +01:00
Marcus Hill
0bee5956dc Small adjustments to setup: add subheadings and links to docs 2023-09-30 17:07:21 +01:00
Marcus Hill
63ba33afde Small adjustments to setup: add subheadings and links to docs 2023-09-30 17:04:42 +01:00
Johnny
90327a959f Merge pull request #724 from wrongecho/misc-wording-edits
Small wording edits (sharing links, documents, updater)
2023-09-30 11:50:07 -04:00
Johnny
24707e89d5 Merge pull request #725 from wrongecho/fix-client-delete
Fix client delete function
2023-09-30 11:36:59 -04:00
Marcus Hill
33628d81a1 Fix client delete function 2023-09-30 15:42:00 +01:00
Marcus Hill
c3dd9a80b6 Fix client delete function 2023-09-30 15:33:48 +01:00
Marcus Hill
9bb6e0b1c7 Touch-ups 2023-09-30 13:57:48 +01:00
Marcus Hill
2924791538 Codesmell 2023-09-30 13:55:49 +01:00
Marcus Hill
ac5b6c5424 Enhance git fetch error: include error on page if possible 2023-09-30 13:52:46 +01:00
Marcus Hill
05f25b3ebf Enhance git fetch error: include error on page if possible 2023-09-30 13:51:39 +01:00
Marcus Hill
ff161ab47b Small wording edits
- Ajax: Make link sharing text clearer/friendlier, include company name in subject and shared item description in body to help legitimise the message from spam
- Client doc details: Make edit summary text smaller
- Update: Enhance git fetch error wording, mention forum for support
2023-09-30 13:41:41 +01:00
johnnyq
e5e549482c Removed horizontal line on the botton of all the side navs 2023-09-29 22:44:26 -04:00
johnnyq
375d5af974 Fix issue with roundToNearest15 Function would break php if the time worked was empty 2023-09-27 16:01:44 -04:00
johnnyq
f914fbb96f Fix current_version var in cron.php when telemetry is configured this was caused by the cron not know what its working directory was added change to current working directory 2023-09-27 12:15:12 -04:00
johnnyq
f658fe0c6c Fix Close Ticket not showing when accounting module is disabled plus remove some extra markup not needed in ticket.php 2023-09-27 11:50:27 -04:00
johnnyq
31c9a6ad6c Fix invoice ticket price issue for auto price divide client rate into 4 to acommodate 15 Min increments 2023-09-26 18:13:00 -04:00
johnnyq
8ebe7eda03 Changed roundUpTo15 function to just round to the closest 15 2023-09-26 17:59:11 -04:00
johnnyq
d82e6f99ab Reworked how watchers get added and edited 2023-09-26 16:58:46 -04:00
johnnyq
e1ef89a9a4 Added DHCP option to IP Address field 2023-09-26 16:40:24 -04:00
johnnyq
498f9c7209 Changed button text from Show Archived to just Archived 2023-09-26 15:33:22 -04:00
johnnyq
8b3adae49d Dropdown UI fix icon alignment 2023-09-26 15:31:20 -04:00
johnnyq
7848043a40 shorted show_archive to just archived 2023-09-26 15:28:26 -04:00
johnnyq
35055489e5 Added Show Archived Button to contacts, setup logic to work in other List views as well 2023-09-26 15:24:31 -04:00
johnnyq
f8cdb79114 Moved import and export contact to the New Contact button dropdown as its not used as often and clear space for multi action or further search options 2023-09-26 14:56:26 -04:00
johnnyq
477e092b27 Updated client portal ticket details and document detail to use prettyContent js function 2023-09-26 14:28:36 -04:00
johnnyq
51489c2420 Update and move pretty tables function to a seperate js file and also add img-fluid to <img> tags so images dont run off the page and also update ticket details page with prettyContent function 2023-09-26 14:22:58 -04:00
johnnyq
1a5cd14208 Added format tables in document templates 2023-09-26 13:55:59 -04:00
johnnyq
48d8fdd760 Major UI update on Document Details, do not use TinyMCE to display document, created js function to add class table to tables for nicer look. Redesigned the Header 2023-09-26 13:47:18 -04:00
johnnyq
8b403613a8 updated document templates to include created by and other UI updates 2023-09-26 13:17:10 -04:00
johnnyq
f6d032f1d2 Moved Document Templates to settings 2023-09-26 12:55:38 -04:00
johnnyq
c8d1d4d5e1 Restore Client Delete functionality for clients for compliance sake 2023-09-26 12:01:49 -04:00
johnnyq
4adc0c7cd1 Remove destructive client delete from the frontend, still present in the backend, fix the ticket assign to no show active users 2023-09-25 12:20:42 -04:00
johnnyq
6af002122a Remove Relations on document when deleted or archived, added Short description field to summerize document changes or summerize a document, add header to Document Details showing Title, Date Created, Prepared by 2023-09-24 22:29:48 -04:00
johnnyq
26196a18e7 Updated DB Structure in Documentents to allow for created, updated by and document_description 2023-09-24 20:38:42 -04:00
johnnyq
c051afd52c Count the documents in the root folder as well 2023-09-23 19:43:11 -04:00
johnnyq
1218094270 When deactivating Shared Link delete it 2023-09-23 19:16:19 -04:00
johnnyq
0312a5f957 Client Side UI: Removed the black on white on black badge counters they were just to distracting changed it to a more suble light number, also merged side alert badges 2023-09-23 19:11:08 -04:00
johnnyq
51b2f6b4e5 Document Versioning: When opening a versioned document clearly define it is an archive file and the date it was archived at the top of document details 2023-09-23 18:18:03 -04:00
johnnyq
3b59f31d86 Fix Document Versioning not carrying related items 2023-09-23 18:09:43 -04:00
johnnyq
6b22390604 Tweaked Document Versioning logic, this update will update the db to update all exisiting document to update document_parent with the same primary_key ID 2023-09-23 17:57:06 -04:00
johnnyq
8d9f031cab Feature: Document Versioning is here! 2023-09-23 15:54:31 -04:00
johnnyq
61c9c0c8b9 Feature: Automatically calculate tickert to invoice based off time worked rounded up to the near 15 min mark multiplied by Client Rate, Changed all Price, cost fields to use text field with numeric patterns instead of number fields, set pricing to always display 2 decimal spots 2023-09-22 15:19:05 -04:00
johnnyq
1ccaa936ac Removed number type on 2FA input field replaced with text and inputmode='numeric' pattern='[0-9]*' 2023-09-22 12:43:18 -04:00
johnnyq
a8b3b24fba Added Document Revsion placeholder under document details also merged card and card-body div class to reduce indentation better code readability 2023-09-22 12:16:11 -04:00
johnnyq
9aa62a8b36 Add Vendor, asset and watchers now work as a 1 click under ticket details 2023-09-21 20:01:07 -04:00
johnnyq
b9fe774fe6 Reworked Markup code under ticket details, added frontend to change Vendor and asset 2023-09-21 18:50:34 -04:00
johnnyq
ba6e79dc8c Feature: Added Document Rename Modal to Document Listing 2023-09-21 17:03:53 -04:00
johnnyq
0bc10a30e8 Fix issue with login being restricted if HTTPS_ONLY is True and SSL is terminated at a proxy and then forwarded to ITFlow App as HTTP 2023-09-21 12:00:46 -04:00
Johnny
82893c8c72 Merge pull request #720 from wrongecho/start-email-customisation-basics
Ticketing: Custom subject/body example
2023-09-21 01:13:20 -04:00
johnnyq
ee79e43fad Do not count new Clients or Vendors on the dashboard if they were archived 2023-09-20 18:55:38 -04:00
johnnyq
cea210bcea Added asset_uri field to the API 2023-09-20 16:39:55 -04:00
johnnyq
d31127c137 set current code to an intval since its a number only 2023-09-20 14:58:05 -04:00
johnnyq
40d34bb71d Set 2FA Field on login to a number field so it only shows the numbers on a mobile phone 2023-09-20 14:53:07 -04:00
johnnyq
5938925a35 Added an error if accessing ITFlow by HTTP:// and is set to true 2023-09-20 14:51:29 -04:00
johnnyq
150defe815 You can now link files to documents 2023-09-19 23:35:10 -04:00
johnnyq
ca82a567d7 When client replies to a ticket via email update the status to Client-Replied 2023-09-19 18:29:17 -04:00
johnnyq
3bd8842171 Add 2FA code for Login/Password sharing 2023-09-19 18:21:57 -04:00
johnnyq
6bccc61b4a Display Asset Icon in asset Details 2023-09-19 18:00:10 -04:00
johnnyq
f3b949499d Client Assets now link to asset details page when click upon 2023-09-19 17:47:38 -04:00
johnnyq
ff281c923e Further additions to asset_details 2023-09-19 17:43:42 -04:00
johnnyq
5f779c33a2 Started working on a asset details page similar to contact details 2023-09-19 17:18:38 -04:00
johnnyq
f897705135 Fix 3 Letter Client Abbrevation function to remove htmlentity characters to fix ' being replace with a 0 2023-09-19 16:24:41 -04:00
johnnyq
0c0cb2cec9 Added UI support for linking assets, contacts, and licenses to Documents 2023-09-19 15:55:35 -04:00
johnnyq
5d74226762 Fix unlinking lock file 2023-09-19 11:40:11 -04:00
johnnyq
946f8d0b97 Initial start of Maintenance under settings 2023-09-19 11:39:11 -04:00
johnnyq
080a79c59d Fix Replicating email opps 2023-09-19 11:10:51 -04:00
johnnyq
65cf8519d0 Added file locks on the mail queue and ticket parse cron jobs to prevent over runs, reverted last commit back to not marking all messages in ticket parse as read 2023-09-19 10:51:52 -04:00
johnnyq
d56c8a91d1 Fix a possible race condition with duplicating tickets: Revert marking Email body peeking and flag all other emails not matching the ticket parser 2023-09-19 02:13:46 -04:00
johnnyq
5990f2e53a Bump TinyMCE from 6.4.2 to 6.7.0 2023-09-18 20:56:23 -04:00
johnnyq
40ced0f748 Updated the UI for downloading and displaying ticket attachments under ticket replies 2023-09-18 19:14:41 -04:00
johnnyq
f2a3c54ed7 Do not change ticket status upon ticket reply, just update the ticket update timestamp 2023-09-18 18:51:54 -04:00
johnnyq
2e12c3e9c1 UI Fix issue with browser status covering bottom portion of the side navs 2023-09-18 17:12:06 -04:00
johnnyq
a0f46cc049 If no contact selected give option to add one under ticket details 2023-09-18 16:36:35 -04:00
johnnyq
485bb68055 A Ticket Contact is now optional 2023-09-18 16:29:19 -04:00
johnnyq
d713031545 Priority and Contact are now clickable and changeable within ticket details 2023-09-18 15:07:12 -04:00
johnnyq
301d798963 You can now change ticket priority, contact or ticket Assignment by clicking on the element in the ticket listing 2023-09-18 13:23:21 -04:00
johnnyq
6109933f42 Updated Notification titles 2023-09-17 21:26:31 -04:00
johnnyq
827b880b28 Fixed edit scheduled ticket updated shoertenClient function to be even more intelligent 2023-09-17 20:08:41 -04:00
johnnyq
1b90a005e4 Added a php function to intelligently shorten a clients name to 3 characters 2023-09-17 19:49:09 -04:00
johnnyq
0987f3121f fix Pending tickets notification 2023-09-17 19:00:31 -04:00
johnnyq
40aaddd09b Update cron to Create notification of tickets pending assignment 2023-09-17 18:55:44 -04:00
johnnyq
8fa76daf3a Update cron ticket parser to set new ticket status to Pending-Assignment instead of Open 2023-09-17 18:42:17 -04:00
johnnyq
fdc7416ae9 Wording 2023-09-17 18:38:46 -04:00
johnnyq
beaa56dc36 Removed Ticket assignment through edit ticket, has to be done within the ticket itself, properly update the status to assigned and pending-assignment based off whos assigned to the ticket 2023-09-17 18:36:48 -04:00
johnnyq
fed51928c7 Updated Status Badge Colors 2023-09-17 18:10:21 -04:00
johnnyq
b23631226b Updated and added more descriptive Ticket Statuses 2023-09-17 18:06:07 -04:00
johnnyq
dbb28a9a4c Added new ticket status array for better communication and sorting 2023-09-17 17:25:28 -04:00
johnnyq
077fc1cf35 Added additional fields to cvategories for icon support and sub category support 2023-09-17 17:16:20 -04:00
Marcus Hill
2b6be6ba45 Ticketing: Add example logic for how we might allow customised subject/ticket body 2023-09-17 12:00:27 +01:00
wrongecho
d4c71955c6 Merge pull request #718 from ColDog5044/readme-release-update
Update estimated release month in README
2023-09-16 23:21:15 +01:00
johnnyq
6bd2919c18 Do not mark unprocessed email as read 2023-09-15 17:02:07 -04:00
Collin Laney
8e714e7afa Update estimated release month in README
Browsed the ITFlow Forum to find the estimated release month. Changed July to December. https://forum.itflow.org/d/257-v10-roadmap

Keep up the good work
2023-09-14 21:09:23 -04:00
johnnyq
deb5e87630 Tidy Queries and moved client to the ends of each entity in global search 2023-09-12 13:15:07 -04:00
johnnyq
19e9c3eeb5 Added Assets to Global Search 2023-09-12 12:51:00 -04:00
johnnyq
15d433f1d9 Invoice are now searchable via global search 2023-09-12 12:06:02 -04:00
johnnyq
7d1cfc586d Revert last commit invoice quote and recurring were already searchable by its concat prefix and number 2023-09-12 11:31:23 -04:00
johnnyq
878582f7c5 Allow to search via invoice, quote, recurring numbers 2023-09-11 18:46:43 -04:00
johnnyq
43fcf86a41 Fix 2023-09-11 18:22:21 -04:00
johnnyq
3f5c1c270a Fix Certificate Renewals 2023-09-11 18:20:59 -04:00
johnnyq
ba09ea7c67 Opps fix 2023-09-11 16:13:18 -04:00
johnnyq
f44641c5e4 Sort Client tags alphabetically when being show under client details, client listing and ticket details 2023-09-11 16:01:47 -04:00
johnnyq
7561364e91 remove get Cert Expiry date from cron job as its in functions now 2023-09-11 15:32:17 -04:00
johnnyq
9028f219b9 Moved get Cert Expiry date to functions.php 2023-09-11 15:31:43 -04:00
johnnyq
b80d730910 Added Cron task to update Certificate Expiry fields 2023-09-11 15:21:16 -04:00
johnnyq
b77886cc7e Bump PHPMailer from 6.8.0 to 6.8.1 2023-09-11 13:38:57 -04:00
johnnyq
3b645fc5fb Added missing asset description under client details 2023-09-11 13:07:39 -04:00
johnnyq
277c5bad68 Also subscribe the mail folder so it shows up under mail folders 2023-09-10 22:06:22 -04:00
johnnyq
f4963cbc45 Change folder name for ITFlow Proessed mail to ITFlow and put in the root instead of INBOX Folder. Also dont flag all other mail 2023-09-10 21:41:35 -04:00
johnnyq
2c14ae1a76 Added more padding to client overview cards 2023-09-10 20:32:05 -04:00
johnnyq
9753b96fed Fix mismatch of word URI and URL to just URI, fix it to not removed Service:// 2023-09-09 23:57:55 -04:00
johnnyq
bc1e2f1ea4 Updated DB schema with the new asset_uri 2023-09-09 23:43:12 -04:00
johnnyq
747e793e54 Added Asset URI can be used for a remote link 2023-09-09 23:40:18 -04:00
Johnny
be7492ae73 Merge pull request #714 from wrongecho/qr-charts-api
Google Charts - Use HTTPS instead
2023-09-09 14:13:20 -04:00
Johnny
a5fd5a2068 Merge pull request #716 from wrongecho/ticket-api-create
API: Tickets
2023-09-09 14:12:11 -04:00
Marcus Hill
c489a85fc0 API: Tickets
Add Create API endpoint for tickets.

Supported fields:
- Client ID
- Client Contact
- Subject
- Details
- Priority
- Agent assignee
- Vendor ID
- Vendor ticket ref
2023-09-09 15:28:18 +01:00
wrongecho
89d4f85869 Merge pull request #715 from wrongecho/asset-import
Bug fix: Asset import
2023-09-09 12:08:18 +01:00
Marcus Hill
19e159e9fd Bug fix: Asset import 2023-09-09 11:53:12 +01:00
Marcus Hill
a593e4cbbb Use HTTPS instead (eventually to move this into a local library) 2023-09-09 08:33:29 +01:00
johnnyq
6cb3d8f9d0 Truncate Client Name on client side nav 2023-09-08 01:51:29 -04:00
johnnyq
21a60c0619 Added confirm delete on delete contact 2023-09-08 01:15:12 -04:00
johnnyq
3d5c09abd0 Added a mail resend option under mail queuer it reset the the failed count to 3 2023-09-07 19:31:18 -04:00
johnnyq
85c1dede07 Show password field when local is selected for both edit and add contact 2023-09-07 18:18:27 -04:00
johnnyq
420647d481 Seperated domain refresher to seperate cron job this will need to be added manually if you want domain info to be refreshed, did this because sometimes it would break 2023-09-07 17:51:35 -04:00
johnnyq
3c8c173427 Fix Bad column count error upon importing passwords via CSV 2023-09-07 17:10:50 -04:00
johnnyq
6d1420712d Minor UI/UX update on mail settings 2023-09-07 16:46:36 -04:00
johnnyq
5f53082900 Spelling fix 2023-09-07 16:40:52 -04:00
johnnyq
0ae3a7fed1 Added more common net terms 2023-09-07 16:39:17 -04:00
johnnyq
718605dd8c Removed Mail from settings under ticket, invoice and quote settings as this is all configured under mail settings now 2023-09-07 16:28:36 -04:00
johnnyq
7dee46eee9 Changed company icon from a building to a briefcase 2023-09-07 15:50:20 -04:00
johnnyq
3e039f8664 Added Timezone selection under setup 2023-09-07 15:49:04 -04:00
johnnyq
e56d78b0a8 Added timezone selection to localiztion settings 2023-09-07 15:41:01 -04:00
johnnyq
44508cfa7c Moved Company Details settings localiztion settings to its own seperate settings called localiztion 2023-09-07 15:22:16 -04:00
johnnyq
b625400638 Renamed setting side nav to administration more suitable than settings 2023-09-07 15:06:05 -04:00
johnnyq
90b483e424 Moved Calendar, Trips and Reports under More sub heading on side nav 2023-09-07 14:44:36 -04:00
johnnyq
e1e966806c Added Login Description to Contact details to mimic client passwords 2023-09-06 11:23:42 -04:00
johnnyq
725370408c Decreased Content padding for mobile view, also decreased card body content in clients for mobile 2023-09-06 02:11:32 -04:00
johnnyq
903efec1dd When local auth is selected show the password box 2023-09-06 00:49:31 -04:00
johnnyq
747b7de143 Feature: Force MFA Part 3 - Enforce MFA by redirecting users to their user_profile to setup MFA if Force MFA is checked, next up is to lock them there until 2FA is set 2023-09-06 00:08:21 -04:00
johnnyq
17c8a9ab0c FEATURE: Force MFA Part 2 - Added to add, edit user 2023-09-05 23:44:42 -04:00
johnnyq
2a142f1c42 FEATURE: Force MFA Part 1 - DB Structure 2023-09-05 23:23:16 -04:00
johnnyq
8fb211c2dc Keep current view when switching between folders 2023-09-05 23:16:14 -04:00
johnnyq
eb1048ea4a Added Confirmation to Ticket Details Page, Closing ticket archiveing reply deleting etc 2023-09-05 19:04:43 -04:00
johnnyq
54c1befed9 Added Confirmation to Delete and Archiving tasks, also fixed broken trips page 2023-09-05 19:02:52 -04:00
johnnyq
4b368ee5af FEATURE: Confirmation Modal only grab clients initials for client side nav 2023-09-05 18:26:15 -04:00
johnnyq
316afa5603 Top bar is now fixed by default also fixed markup for side top headers 2023-09-05 17:19:02 -04:00
johnnyq
97521d1df7 added more actionable notifications 2023-09-05 16:44:31 -04:00
johnnyq
52b0a17e02 added more actionable notifications 2023-09-05 16:42:33 -04:00
johnnyq
853fbf0ba7 Ticket Notifications now are clickable and will go to the ticket details 2023-09-05 16:23:10 -04:00
johnnyq
7a27e5f6d2 FEATURE: Actionable Notifications Part 1 - Added Notificaiton Action to the DB this will allow notifications to become actionable 2023-09-05 16:12:31 -04:00
johnnyq
b1a9dda896 Ticket update bar Formatting Fix 2023-09-05 15:33:03 -04:00
johnnyq
d978e475bb Removed Closed from the Ticket Dropdown as it was accidenally hit sometimes 2023-09-05 15:31:09 -04:00
johnnyq
a5b034f877 Added Ticket Watchers card to the ticket details side bar 2023-09-05 15:25:25 -04:00
johnnyq
3513173ad0 Dudup Pagination requirement 2023-09-05 14:48:58 -04:00
johnnyq
941cbd37be Add Pagination to File Grid / Thumbnail View 2023-09-05 14:46:51 -04:00
johnnyq
baea5ed997 Fixed issues with ticket notifications 2023-09-05 13:53:42 -04:00
Johnny
d76f864c56 Merge pull request #713 from wrongecho/anonymise-contact-2
Auditing bugfix
2023-09-05 11:45:42 -04:00
Marcus Hill
06c88a0c8f Bug fix: Log entries auditing tickets created by agents now correctly log under the client 2023-09-03 22:09:58 +01:00
Johnny
0c4cded64e Merge pull request #712 from wrongecho/anonymise-contact
Add Anonymize Contact feature
2023-09-03 12:42:33 -04:00
Marcus Hill
b500556403 Add Anonymize Contact feature
- Contact name is redacted
- Contact details are removed
- Contact name/email is redacted from tickets & logs
- Contact is archived
2023-09-03 17:02:42 +01:00
wrongecho
1370ac3d6c Merge pull request #711 from wrongecho/portal-sso-fix
Fix Client Portal AAD SSO Button
2023-08-31 20:24:03 +01:00
Marcus Hill
dd43d8fd26 Adjust Client Portal AAD SSO Button to be HTML rather than Javascript due to CSP blocking inline JS. 2023-08-31 20:20:49 +01:00
johnnyq
81029e4605 Agent Resassign Ticket Email notification now uses the new mail queue system 2023-08-29 14:20:05 -04:00
johnnyq
34a4f27b19 Close Ticket Email notifications now utilize the new mail queue system 2023-08-29 13:23:36 -04:00
johnnyq
353b082f0c Converted Create Ticket Email Notification to the new mail queue system 2023-08-29 12:56:00 -04:00
johnnyq
1e254c9de4 Fix Broken domain listing 2023-08-28 18:23:18 -04:00
johnnyq
0898732ee7 Added more archiving capabilities across the board also dont show delete if folder is not empty, still need to add show archived data 2023-08-28 16:21:09 -04:00
johnnyq
a959f588f3 Updated hopefully everywhere for account so account_archived works properly also do not allow archiving of account if equals online payment account 2023-08-27 17:50:10 -04:00
Johnny
1c5398d85e Merge pull request #709 from wrongecho/new-ticket-notifications
Add notify by email function when a new ticket is created
2023-08-27 15:53:41 -04:00
Johnny
c070a14b0e Merge pull request #708 from wrongecho/link-backup-docs
Link to the backup docs when informing users to perform backups
2023-08-27 11:59:32 -04:00
Marcus Hill
b7108436fd Add notify by email function when a new ticket is created 2023-08-27 12:24:15 +01:00
Marcus Hill
42b5d82e2c Link to the backup docs when informing users to perform backups 2023-08-27 10:08:52 +01:00
Johnny
ac023a1eaa Merge pull request #706 from chandachewe10/master
Copy Updated Currencies from setup.php to get_settings.php
2023-08-26 10:39:07 -04:00
chanda chewe
bfae617d6e Copy Updated Currencies from setup.php to get_settings.php 2023-08-26 14:15:54 +02:00
johnnyq
90a3644eb9 Prepend Re: to ticket reply subject lines 2023-08-25 22:46:02 -04:00
johnnyq
eb98e82505 Remove tag icon top client header 2023-08-25 21:23:10 -04:00
johnnyq
f3c571f4eb Added Border on top of Card headers in Client Top Header 2023-08-25 21:16:35 -04:00
johnnyq
7b4efb4f17 Another Update to client header it does take little more space than the last one but it is collapsable, uncollapsed by default 2023-08-25 20:54:31 -04:00
johnnyq
0cfbe5f9f9 Client Header UI/UX Improvements: Reduced margin and padding, reduced font size in billing and support items, reworked some of the HTML code 2023-08-25 17:43:00 -04:00
johnnyq
38f31f3599 Updated more icons 2023-08-25 15:39:33 -04:00
johnnyq
125bc02323 Changed Zip / Postal to just Postal, chnaged locale to Language with a better icon and do not shot language code during select 2023-08-25 15:11:37 -04:00
Johnny
f6778b5ac1 Merge pull request #705 from chandachewe10/main
Main
2023-08-24 20:56:51 -04:00
johnnyq
6858d1f293 Feature: Vendors can now be linked to documents 2023-08-24 17:03:45 -04:00
chanda chewe
4d563da860 Added single missing quotes to currecies 2023-08-24 21:32:04 +02:00
chanda chewe
3b63290911 Added single missing quotes to currecies 2023-08-24 21:26:33 +02:00
chanda chewe
d931205798 Added single missing quotes to currecies 2023-08-24 21:24:49 +02:00
chanda chewe
2c807f433c Added single missing quotes to currecies 2023-08-24 21:22:14 +02:00
chanda chewe
37ad8cfd7f Added single missing quotes to currecies 2023-08-24 21:18:21 +02:00
chanda chewe
a70f20ff20 Added single missing quotes to currecies 2023-08-24 21:14:20 +02:00
johnnyq
6325301a00 Remove Licene Actions from Contact details this should be modified in licneses also removed the Login link with the asset as this can cause dupelicate assets if more than 1 password is assigned to an asset. This is due to 1 to 1 relation and really needs to be many to many relationship 2023-08-24 14:44:50 -04:00
johnnyq
01164e5415 Fixed Duplicating Licenes issue under client contact details page. This was becuase it was linking logins with licenses so if you had 5 logins for the license it would dupe 5 times. I need to change this code to be many to many relation in future. 2023-08-24 14:33:18 -04:00
johnnyq
597b7575d6 Reworked mail settings to include all mail related thing to be in one spot and easy to understand Also updated test email to test email from each email from address configured 2023-08-24 13:23:03 -04:00
chanda chewe
19e355f1a1 Added Missing Currencies 2023-08-24 10:52:20 +02:00
chanda chewe
2c3ac9d554 Added Missing Currencies 2023-08-24 10:03:44 +02:00
chanda chewe
c79c19bf8d Added Missing Currencies 2023-08-24 09:57:31 +02:00
chanda chewe
549fe8cc05 Added Missing Currencies 2023-08-24 09:37:00 +02:00
chanda chewe
44d84d2273 Added Missing Currencies 2023-08-24 09:25:49 +02:00
chanda chewe
f2a5963d84 Added Missing Currencies 2023-08-24 09:24:46 +02:00
chanda chewe
606307d255 Added Missing Currencies 2023-08-24 09:23:39 +02:00
johnnyq
0377eeb94e Add some padding between search and folders on phones in Client files and documents 2023-08-23 18:17:53 -04:00
johnnyq
12bbfd1db1 Add select2 Class on folder 2023-08-23 18:12:59 -04:00
johnnyq
f88f04edd8 Feature: Added Folder support for files 2023-08-23 18:02:51 -04:00
johnnyq
d200575aec Updated info to include only max 20 files can be uploaded at once 2023-08-23 16:52:57 -04:00
johnnyq
03e6e31f8c Also added 500MB Limit 2023-08-23 16:51:10 -04:00
johnnyq
1083ac88d9 Create some javascript that limits the amount of files to 20 that can be uploaded at once. 2023-08-23 16:48:42 -04:00
johnnyq
811f253470 DB Dump, store file hash in the db 2023-08-23 16:27:59 -04:00
johnnyq
a95b32a57e Upon upload the file contents are not hashed in Sha256 and used for the reference file in the DB 2023-08-23 16:10:15 -04:00
johnnyq
2633477575 Added Commented code to has the file contents itself instead of the name 2023-08-23 16:04:42 -04:00
johnnyq
4ec7c686c3 Updated the checkFileUpload fucntion to use SHA256 instead of MD5 for file reference and check file ext before checking size, also adding some error returns 2023-08-23 15:59:10 -04:00
johnnyq
30a6b3dadf Added a hint about selecting multiple files for upload 2023-08-23 15:50:51 -04:00
johnnyq
0897217357 Major UI / UX enhancements to Client Files. Files are now searchable can select between thumbnail and list view, pagination enabled, file renaming capabilities 2023-08-23 15:43:47 -04:00
johnnyq
037ae820a1 Removed old files upload code 2023-08-23 13:25:22 -04:00
johnnyq
44c4beba1e Feature: You can now upload multiple files at a time in the client files section 2023-08-23 13:24:05 -04:00
johnnyq
8f9753489f Updated contact extention ui 2023-08-23 10:41:14 -04:00
johnnyq
8fdc93ebde Show contact extention in the listing 2023-08-23 10:37:04 -04:00
johnnyq
1cf015c0b7 Use correct icon for mail queue 2023-08-22 18:36:56 -04:00
johnnyq
8402ca99ae Use correct icon for audit logs 2023-08-22 18:34:13 -04:00
johnnyq
c43b22ddd5 Fix initial DB Structure was causing new installs to direct to a non existent page dashboard.php 2023-08-22 18:19:15 -04:00
johnnyq
94e56f6d68 fixed an old unused var in client_locations which was allowing someone to delete a primary location which shouldnt be allowed 2023-08-22 15:48:55 -04:00
johnnyq
715938f367 Update login cred share guest sharing look 2023-08-22 14:19:28 -04:00
johnnyq
e5fea3ab9b Further cleanup of the guest sharing page 2023-08-22 13:55:42 -04:00
johnnyq
b361b3a384 Updated Guest sharing removed irrelevant info such as warnings about this will expire and notes as this will be sent in the pre email message, Removed App name and sharing from the top. Formatted the Style into a card, Added Company Info at the footer 2023-08-22 13:41:04 -04:00
johnnyq
c49ac5eb80 oops fix, added company name to guest share 2023-08-22 13:22:56 -04:00
johnnyq
42e23b6f08 Fix issue with editing client if accounting module was disabled due to the handling of client currency 2023-08-22 12:45:52 -04:00
johnnyq
6231d7b43c Fix logic to always show tech dashboard if accountiong module is disabled 2023-08-22 10:57:21 -04:00
johnnyq
9a7bea6ef9 Fix logic for showing billing column under client Management User role is admin or accountant and Module Accounting / billing is enabled 2023-08-22 10:50:40 -04:00
johnnyq
e31a0269b3 Make Client visible note optional in sharing 2023-08-22 10:15:01 -04:00
johnnyq
7c1cb0f617 Updated Sharing to include Unlimited Time and the option to use 0 for unlimited views 2023-08-22 09:57:57 -04:00
johnnyq
3f9c7fe220 Fixed empty var Last_login 2023-08-21 18:49:42 -04:00
johnnyq
8ef806ed1c Fix php error in users listing while fetching the last log it would return error if empty 2023-08-21 18:39:41 -04:00
johnnyq
9368a3b58d Fix user agent var is guest view 2023-08-21 18:20:27 -04:00
johnnyq
583fe9807d Updated placeholders for SMTP user and pass to inform users to leave blank if no auth is required 2023-08-21 12:25:10 -04:00
johnnyq
2fa442028a Updated sendSingleEmail function to allow for authless email sending 2023-08-21 10:44:54 -04:00
johnnyq
1ed4eeaafc Remove extra bottom margin below error msg on client login 2023-08-20 15:43:39 -04:00
johnnyq
880e1be08c Did the same for client portal login as well center forgot password 2023-08-20 15:30:36 -04:00
johnnyq
1d0e2ad758 Removed some of the right and left padding to allow for larger login messages 2023-08-20 15:27:43 -04:00
johnnyq
709cec8d7e More Icon Updating and matching 2023-08-20 15:06:08 -04:00
johnnyq
2d0fe45898 Enhance the client name font and place an arrow next to client to better indicate client section will be revealed when clicked on 2023-08-19 14:48:40 -04:00
johnnyq
257d3c0c9b UI: Updated icons for the client side nav 2023-08-19 14:34:52 -04:00
johnnyq
b7fcfb90e5 UI: Updated icons in setting nav 2023-08-19 14:21:05 -04:00
johnnyq
ff840bdeb5 UI: Updated some side nav icons that were more suitable for the item 2023-08-19 14:08:26 -04:00
johnnyq
7c3d6fc07a Rename side nav items again as the new names just took too much precious UI space 2023-08-19 14:00:20 -04:00
johnnyq
c3fd6824bf More descriptive naming for the main side navigation menu 2023-08-19 13:50:34 -04:00
johnnyq
c02448dff2 Small UI/UX update used mt-1 for better spaceing than <br> made export an outline button and cleaned up the small font in clients listing page 2023-08-19 13:25:15 -04:00
johnnyq
3652e9da08 sort recent tickets by created date 2023-08-19 00:45:00 -04:00
johnnyq
c89dbb4df3 Properly format category name for HTML Displaying in budget 2023-08-18 20:37:41 -04:00
johnnyq
78de89271c Create Budget report 2023-08-18 20:36:23 -04:00
johnnyq
94a3a3fa0e Var Fix 2023-08-18 20:07:28 -04:00
johnnyq
35b3c844ad New Dashboard stat for recurring Invoice added for selected year 2023-08-18 20:06:07 -04:00
johnnyq
d4510ddafb Fix Number of clients added on dashboard not directing to the right page when clicked 2023-08-18 19:53:37 -04:00
johnnyq
c7e981646f Show recurring Monthly expenses on the dashboard 2023-08-18 19:48:54 -04:00
johnnyq
47753f4419 Fix wrong vars in budget 2023-08-18 19:36:44 -04:00
johnnyq
b1aa8d3a91 Feature Budget working need to add some more features down the line 2023-08-18 19:34:20 -04:00
johnnyq
adf313f183 Feature - Budgets - Part 1 - DB Structure Created 2023-08-18 18:21:25 -04:00
johnnyq
258287ae0c Fix Export Clients removed extra space in delimiter 2023-08-18 17:37:01 -04:00
johnnyq
4a36efce38 Fix issue with document not showing when sending a shared Link 2023-08-18 16:58:29 -04:00
johnnyq
0672063ddd Fix Incorrect var in mail_queue.php 2023-08-18 16:35:54 -04:00
johnnyq
169f542039 Show Alerts and Defaults in settings if module accounting is disabled 2023-08-18 16:26:36 -04:00
johnnyq
cd27decb37 Fix issue when sending shared links it was using the ticket_from_email_address instead of the generic Email address programmed in settings > Mail > SMTP > Mail from Email 2023-08-18 16:11:57 -04:00
johnnyq
5e88bd4b37 Fix Opps 2023-08-18 15:37:35 -04:00
johnnyq
0d497163fe Feature: Login Message now complete can be set in settings > security 2023-08-18 15:35:31 -04:00
johnnyq
b987782adb Feature - Login Message Part 1 - DB Structure 2023-08-18 15:07:39 -04:00
johnnyq
d7ab2b2fec Fix issue with umlaught characters causing the contact name not to display properly in ticket details 2023-08-17 21:04:18 -04:00
johnnyq
ed9cb5c997 Split Mail Settings into 2 form sections, one for SMTP and one IMAP 2023-08-17 20:54:54 -04:00
johnnyq
ce2ba6d3d2 Feature: Records per page is now user specific and persists with logout/login sessions 2023-08-17 19:42:42 -04:00
johnnyq
94caee4aa6 Updated all expirations within 90 days in client overview, stale tickets now use the updated date and not created date and now only show tickets that havent been updated within 3 days as stale, added descriptors to the client overview cards 2023-08-17 16:46:57 -04:00
johnnyq
7d06be0946 Feature - Recurring Expenses - Cron Completed, project finished 2023-08-17 16:03:52 -04:00
johnnyq
3ee38c3fdd Feature - Recurring Expenses - Phase 3 - Completed POST Logic and create edit modals 2023-08-17 15:08:25 -04:00
johnnyq
7527b6d6f8 Feature: Recurring Expenses - Part - Added Side Menu and Listing code 2023-08-16 18:31:52 -04:00
johnnyq
ba9c80cd7d Feature: Recurring Expenses - Part 1 - Initial DB Structure Created 2023-08-16 17:56:32 -04:00
johnnyq
a207e0bc9a Fix Pagination Record select not showing the full number on Chromium based Browsers, fixed up pagination for Mobile view as well 2023-08-16 15:18:59 -04:00
johnnyq
04e22a60ec Fixed Importing Passwords was missing the uri insert field Fixes #704 2023-08-16 14:47:25 -04:00
johnnyq
d9dbe718bd Allow the reuse of colors in tags 2023-08-16 14:37:35 -04:00
johnnyq
2915d7a1b7 Replicated reworked tags code logic under client details and ticket details 2023-08-16 14:07:25 -04:00
johnnyq
86c36e08ab client tag cleanup in add and edit modal 2023-08-16 13:56:35 -04:00
johnnyq
514b5348cb For Client Tags If no icon is present use a tag icon 2023-08-16 13:48:57 -04:00
johnnyq
67de80c97e Cleaned up client tags display logic 2023-08-16 13:47:14 -04:00
johnnyq
b2a154e97a Client Tags are now clicklable within the clients listing page to filter down based on tag 2023-08-16 13:37:50 -04:00
johnnyq
1d277da73c DB Structure Dump to include config_start_page 2023-08-16 13:24:45 -04:00
johnnyq
fda0d203ed Feature: Added Start Page functionality 2023-08-16 13:23:30 -04:00
johnnyq
f93dc32241 Removed the requirement for SMTP username and password since the IP can used as a trusted SMTP relay 2023-08-15 17:48:10 -04:00
johnnyq
7fd795e9fb Added Software Licences expiring within 30 days to client overview 2023-08-15 17:40:02 -04:00
johnnyq
43f016f70f Allow Extra file extentions to be uploaded, increased file upload hard limit in code from 20MB to 500MB 2023-08-09 16:38:53 -04:00
johnnyq
850c3f7942 Fix grammar on share link email 2023-08-07 15:28:03 -04:00
johnnyq
cc80d41964 Cleaned up the watchers Modals 2023-08-03 19:36:02 -04:00
johnnyq
427ed8e57b Replying to a ticket through the ITFLow interface it will also email the watchers 2023-08-03 18:28:17 -04:00
johnnyq
0aedf95892 Removed watcher_created_at field as its irrelevant 2023-08-03 18:08:06 -04:00
johnnyq
dd46c5bcab Ticket watchers can now be add and deleted 2023-08-03 18:03:39 -04:00
johnnyq
76b0954d25 Reissue Previous Fix 2023-08-03 00:37:42 -04:00
johnnyq
73ac6cb8aa Fix issue where recurring invoices that were not sent didnt show up in all recurring invoices 2023-08-03 00:30:00 -04:00
johnnyq
653fa01ecc Fixed issue with scheduled tickets breaking CRON removed invalid character, More work on Ticket Watchers 2023-08-02 16:36:39 -04:00
johnnyq
173230d250 FEATURE - Ticket Watcher - Added Dynamic Add/Remove Watchers Form under new ticket contacts tab 2023-08-01 13:49:15 -04:00
johnnyq
b6dc255f8d FEATURE - Ticket Watchers - Initial Commit for DB Structure for ticker wathers 2023-08-01 13:03:58 -04:00
johnnyq
8511cdd1fe Added the Ability to Toggle the Ticket Timer Pause / Play 2023-07-31 14:30:37 -04:00
johnnyq
2bd6b11f03 Fix Ticket Timer for editing a ticket response / reply 2023-07-31 14:09:12 -04:00
johnnyq
336805e16b Fix Ticket Timer for users that user 12 Hour AM/FM Format, converted from time field to text added icon for timer representation 2023-07-31 14:06:47 -04:00
johnnyq
b195da0f6e Add Move to Folder Option in documents list view 2023-07-31 13:39:58 -04:00
johnnyq
86bf7801e4 Removed Default Todays Date in Add Copy Refund Expense 2023-07-31 13:13:23 -04:00
johnnyq
e26fe1551f Add some facial expression to the update to date 2023-07-25 23:39:39 -04:00
johnnyq
7fe8aafcac Update Latest Updates Wording 2023-07-25 23:29:49 -04:00
johnnyq
2e77999b92 Vendor Templates now has checkboxes for the fields you would like to update globally meaning all clients using that vendor template make it easier for only updating a few fields globally instead of them all like unique fields such as account number or pin 2023-07-21 20:34:02 -04:00
johnnyq
cff56f6507 Update Debug to include all table stats and current DB Version 2023-07-20 17:38:35 -04:00
johnnyq
bd9b5bdc2f Hopefully fixed an issue during initial setup after entering DB credentials and writing the config.php files. This was possible due to a rac condition where intially ITflow install checks to see if it can write config.php to currect directory by actually writing a config.php file then deleting it. This could sometimes interfere with the creation of the config.php file in the next step 2023-07-17 14:33:43 -04:00
johnnyq
956a18b9bb USe Current Timezone and not UTC 0 when calculating 1 hour increments when adding calendar events fixes #567 2023-07-15 16:22:33 -04:00
johnnyq
e09c9cadb5 Added Expire Date field to Quotes also Do not show Guests Accept or Decline if Date is Expired 2023-07-15 15:33:08 -04:00
johnnyq
313191aeb2 On Recurring Invoice List Frequency column should be displayed after Amount which make more sense when reading it 2023-07-13 17:23:18 -04:00
johnnyq
67f5de1170 Fix accidentally zeroed out edit ticket modal 2023-07-13 17:09:08 -04:00
johnnyq
46f7960cd0 Fix issue where primary contact is not being automatically selected when creating a new ticket under client this was due to how we changed the way primary contacts are stored in the Database - Also added display of the contact title and if they are primary or technical. Also Sort Primary first then technical under ticket add or edit -- see here https://forum.itflow.org/d/207-tickets-broke-again 2023-07-13 15:04:14 -04:00
johnnyq
8fa7449084 Fix Creating Scheduled Tickets under Main Scheduled Tickets - Was assigning the primary contact the old way changed it to the new way 2023-07-12 16:32:34 -04:00
johnnyq
c5eb4bddd2 Fix Creating Ticket under Main Ticket - Was assigning the primary contact the old way changed it to the new way 2023-07-12 16:21:42 -04:00
johnnyq
cb20894fc0 Fixed Centering footer for Guest viewing invoices and quotes 2023-07-11 13:47:13 -04:00
johnnyq
13ebb6c627 Late fees will be applied if enabled as a seperate line item on each over due invoice. The late fees will be applied every 30 days after the initial overdue invoice this is done by running cron.php daily 2023-07-11 13:25:37 -04:00
johnnyq
bb16c4b7b8 Feature: Late Fees can now be assessed to unpaid invoices 2023-07-11 11:40:53 -04:00
johnnyq
eb1e792e77 Only Show Monthly Recurring based off the year selected and all previous years 2023-07-10 16:01:53 -04:00
johnnyq
bec2156fa2 Combine Montly Recurring and Yearly Recurring to together to create a new monthly recurring 2023-07-09 12:25:42 -04:00
johnnyq
1bacabc72b Prevent duplicate sort, order and page GET VARs in the URL when Clicking to Sort a field or Clicking a page number. We now unset the GET VAR arrays before recreating the URL GET Strings 2023-07-08 14:40:00 -04:00
johnnyq
e7572c9e8f Rename vars sb to sort, o to order, p to page. This makes the code easier to understand and brings consistency 2023-07-08 12:34:28 -04:00
johnnyq
8213ef1e24 Updated .gitignore added .gitkeep files to HTMLPurifier Cache Directories as git ignore empty folders - fixes https://forum.itflow.org/d/197-actual-answer-to-customer-in-email-is-missing/6 2023-07-07 18:57:45 -04:00
johnnyq
473cf14610 Sort logins marked important always first 2023-07-07 16:50:22 -04:00
johnnyq
c916e249bd Fix Viewing Invoices and Quotes from Client Portal in Edge Browser reversed the slashes from backslashes to forward slashes - see https://forum.itflow.org/d/198-customers-unable-to-view-invoices-client-portal-using-edge 2023-07-07 16:45:48 -04:00
johnnyq
9baf64964a Fixed Umlaughts in email subject with the new Mail Queue System 2023-07-06 15:25:10 -04:00
johnnyq
6ea31adb99 Removed Old Duplicate code for reply tickets as it was using the queue method and the old method 2023-07-06 15:09:52 -04:00
Johnny
b54a388c15 Merge pull request #702 from haymaker/imap-credentials
Feature update: add credentials for IMAP
2023-07-06 14:47:51 -04:00
Haymaker
0633107514 update db migration statements - somehow missed in prev commit 2023-07-05 22:35:34 -04:00
Haymaker
aa984b92ef add credentials for imap 2023-07-04 18:52:00 -04:00
johnnyq
448da5f393 Moved Ticket Replies to the new Mail Queue 2023-07-04 15:00:41 -04:00
johnnyq
12d1fc5cb8 Added HTML Line Breaks after Ticket Reply 2023-07-04 13:32:31 -04:00
johnnyq
379529c6af Fix Regression issue when replying to a ticket via the web app the content doesnt show in the email body see https://forum.itflow.org/d/197-actual-answer-to-customer-in-email-is-missing 2023-07-04 13:08:53 -04:00
johnnyq
7f2f9a3c9e Fix Regression Global Search 2023-07-03 21:56:19 -04:00
johnnyq
9d39ad2628 Fix broken calendar events due to the new contact_primary field being moved 2023-07-03 20:34:15 -04:00
johnnyq
9d7d78473f Removed primary_contact and primary_location from the clients table 2023-07-03 20:23:29 -04:00
johnnyq
a5100ea187 Update the remaining logic to take advantage of the moved contact_primary and contact_location fields 2023-07-03 20:16:39 -04:00
johnnyq
85c19e36c6 Updated client listing logic to work with the new contact_primary and location_primary vars 2023-07-03 18:12:26 -04:00
johnnyq
86ef22dfc9 Copy primary_contact and primary_location enties over to thier respecting tables through a DB update 2023-07-03 17:59:12 -04:00
johnnyq
957b5b583c Sort primary location at the top always 2023-07-03 17:41:43 -04:00
johnnyq
567c01ce3f Update logic for adding and editing primary location 2023-07-03 17:40:14 -04:00
johnnyq
18274d532e When Adding new client add contact as important as well, when assigning a new contact as primary contact label them as important updated the logic add and edit logic to include the new field primary contact field under contacts 2023-07-03 17:31:37 -04:00
johnnyq
70a080a24e Always Sort primary contact at the top and Important Contacts under the primary contact following normal contacts 2023-07-03 16:50:52 -04:00
johnnyq
b12e3677bd DB Structure Update This is the beginnings to move primary_contact and primary_location fields out of the clients table and into their respectable table. Created the fields in contacts and locations, next is to write SQL query to migrate and then update pieces of the codes in the App 2023-07-03 16:40:45 -04:00
johnnyq
66ec189fae removed - 2023-07-03 16:20:28 -04:00
johnnyq
457bc7d471 Feature - Accounting: Added option in account transfer to add selectable payments to transfer notes which is useful to keep track what checks were deposited in a bank transaction such as a deposit as most banks don't display each check in a deposit. 2023-07-03 16:18:01 -04:00
johnnyq
cf494a2f4e Removed Edit Modal Fucntion within document listing, it was causing documents listing to slow with large documents. Still can be edited when clicked into the document 2023-07-02 14:12:43 -04:00
Johnny
335ff27e06 Merge pull request #701 from wrongecho/post-split-1
Separate post.php into sub-module files
2023-07-02 13:49:04 -04:00
Marcus Hill
f6c4e72c86 Fix some codesmells 2023-07-02 15:07:50 +01:00
Marcus Hill
ebecdd3da2 Post.php - Separate 9k lines into separate files by sub-modules (e.g. ticket, invoice, expense) for easier development and troubleshooting 2023-07-02 14:56:12 +01:00
johnnyq
1f29d68ad5 Updated client Documents to use folder icon on the side nav and header. Update Date Format as well 2023-07-01 13:33:42 -04:00
Johnny
2b871e06f0 Merge pull request #700 from wrongecho/cron-ticket-closed-replies
Ticket parser: Better handle clients replying to closed tickets
2023-06-26 19:42:29 -04:00
Marcus Hill
0240d316e7 Ticket parser: Better handle clients replying to closed tickets 2023-06-24 22:10:06 +01:00
johnnyq
1ad1b35101 Mail Queue support added for sending welcome email to contact 2023-06-22 21:51:03 -04:00
johnnyq
7ddff0421a Mail Queue support added to Manual Quote Emailing 2023-06-22 21:28:20 -04:00
johnnyq
149db0e715 Mail Queue support added to adding payment to invoice 2023-06-22 20:54:38 -04:00
johnnyq
76c82128d9 Cleanup send invoie logic 2023-06-22 15:09:57 -04:00
johnnyq
2d0458a2f3 Fix some formatting and additonal white space before contact name in Ticket Details part 2 2023-06-22 11:05:24 -04:00
johnnyq
6ccbe67b59 Fix some formatting and additonal white space before contact name in Ticket Details 2023-06-22 10:57:14 -04:00
johnnyq
682407ad64 Trim white space before and after when adding password to a contact 2023-06-22 10:29:27 -04:00
johnnyq
db9c102f53 Trim white space before and after username and password and before encrypting when adding a client password 2023-06-22 10:23:44 -04:00
johnnyq
9d86c41bcb Added With payments of 600 or more text to vendor expense report 2023-06-21 16:28:42 -04:00
johnnyq
d15eabfee4 Rewrite Expenses by Vendor Report to combine SQL queries into one and sort highest first and add the all years option 2023-06-21 16:25:43 -04:00
johnnyq
e2923304ea Show hint on income for clients report with payments of 600 or more 2023-06-21 16:07:01 -04:00
johnnyq
ab67929a22 Add All Years Option to Income by Clients Report 2023-06-21 16:03:56 -04:00
johnnyq
a67a925868 Another SQL Attempt to fix Client Balance calc 2023-06-21 15:47:19 -04:00
johnnyq
db4c823fc8 Fix Report for Client Balance Query 2023-06-21 15:36:36 -04:00
johnnyq
d3b446706b Modified Report Client with a Balance to Sort Highest Balance First 2023-06-21 15:26:16 -04:00
johnnyq
0c7fbda127 Added Report Clients with a Balance 2023-06-21 15:22:17 -04:00
johnnyq
090ecf2e80 Fixed issue when hovering over a created calendar event the cursor does not change to a finger 2023-06-21 14:47:25 -04:00
johnnyq
b883b31194 Label Top 5 2023-06-21 14:21:56 -04:00
johnnyq
b39f115dd1 Only show Top 5 in the following Doughnut charts: Income and Exp By Cat, and Vendor Expense lump everything else into others if more than 5 cats exist this prevents the graphs from overflowing if you have 10 or 100s of vendors expense cats or income cats 2023-06-21 14:18:20 -04:00
johnnyq
4d90327c79 Created Mail Queue Logs / Viewer in settings, enabled manual send invoice to use the new queue system, now it logs the Email ID so you can reference it in the Queue to see if it sent, also do not send mail to blank billing contact emails 2023-06-21 12:09:32 -04:00
johnnyq
c6afe0b3cf Removed uneeded logging with the mail queue start and end logs 2023-06-20 20:50:55 -04:00
johnnyq
53f05a9469 Update the email status to sending before actually sending to prevent duplicate or more 2023-06-20 20:45:10 -04:00
johnnyq
63100d7cee Remove unessessary date vars and re-enable cron key check for the new cron mailer 2023-06-20 20:37:20 -04:00
johnnyq
8b372c20e0 Update new cron email queuer script to resend failed mail every 30 mins for each failed attempt up 4 attempts 2023-06-20 20:34:29 -04:00
johnnyq
72bc5b41be Added additonal DB field to mail queue for send attempts failed_at timestamp and status along with recipient to name 2023-06-20 19:54:18 -04:00
johnnyq
05f41d1798 Update email sent at field only if the email was sent 2023-06-20 19:37:42 -04:00
johnnyq
6f0505d7e9 cron process mail queue created, now need to convert some of the code over to use the new mail queuer system 2023-06-20 19:34:34 -04:00
johnnyq
75dd00c98c Shortened the document detail and contact detail breadcrumbs to show the root level being the client 2023-06-19 19:15:23 -04:00
johnnyq
bc4607fdb4 Sort Important Contacts first 2023-06-19 19:10:16 -04:00
johnnyq
d1876e829c Added asset description to the API for create and update 2023-06-19 16:34:44 -04:00
Johnny
2c7f6b1127 Merge pull request #699 from wrongecho/login-enhancements
Login page enhancements
2023-06-19 16:29:54 -04:00
Marcus Hill
7f5e63e518 Fix undefined error for company name 2023-06-17 16:16:10 +01:00
Marcus Hill
a966bf0282 Adjust content security policy 2023-06-17 16:13:02 +01:00
Marcus Hill
95cd0ebdc8 Adjust CSP 2023-06-17 16:01:15 +01:00
Marcus Hill
57dab27169 Login page enhancements
- Default to secure cookies (in case var is not defined in config.php)
- Enable content security policy
- Return HTTP 401 response code for invalid username/password combinations
2023-06-17 15:09:01 +01:00
Johnny
8a33a45d20 Merge pull request #698 from wrongecho/fix-braces
Functions.php - IP checker - braces
2023-06-14 19:17:46 -04:00
johnnyq
14b2c48b24 Fix a Syntax err 2023-06-14 19:09:05 -04:00
johnnyq
25f85486d4 Client Portal can now be enabled or disabled in settings > Modules > Enable Client Portal, it is enabled by default 2023-06-14 19:07:39 -04:00
johnnyq
8085f7cd90 User client Rate for price by default for Invoice Ticket 2023-06-14 18:44:24 -04:00
johnnyq
32c9a933ea Invoice Ticket design update, Added functionality for vendor ticket number, asset, login description and contact pin codes 2023-06-14 18:39:24 -04:00
johnnyq
cdbff0d7f6 Updated DB Structure to include asset_description, login_description, contact_pin and a table for the new email_queuing system 2023-06-14 16:59:01 -04:00
Marcus Hill
2c53faddd4 Add curly braces around if statement, adjust to exit for consistency 2023-06-13 20:36:32 +01:00
johnnyq
1b0aaf4d27 Update Document details to use TinyMCE Readonly mode on display. Add Print Button. UI Updates etc 2023-06-06 18:48:19 -04:00
johnnyq
c1ff4f6855 Add link to Telemetry Information to our docs page on the telemetry settings section of ITFlow 2023-06-06 12:21:22 -04:00
johnnyq
1db519d820 Updated Tickets to use timeAgo function along with stand DateTime 2023-06-05 12:38:25 -04:00
johnnyq
f64ab630fd Added TimeAgo Function to convert mysql DataTime to a human readable time like 2 weeks ago similar to other apps like facebook do it. Added to function to Recent Activity under client overview 2023-06-05 12:25:39 -04:00
johnnyq
ca61556c4f Updated Client Overview Removed Recently updated and replaced with recent 8 logs, updated padding and card size per element 2023-06-05 12:11:24 -04:00
johnnyq
40da8a2e69 Bold Important Passwords 2023-06-03 21:49:33 -04:00
johnnyq
6519913eed Bold Important Contacts 2023-06-03 21:47:57 -04:00
johnnyq
cb2b846418 New Tickets that have not been updated now have their whole rows bolded 2023-06-03 21:43:46 -04:00
Johnny
ad7133ddb8 Merge pull request #695 from wrongecho/recently-updated
Client Overview - Enhance Recently Updated section
2023-06-03 20:15:02 -04:00
Johnny
bc4d626a9e Merge pull request #694 from wrongecho/enable-login-key
Enable login key code
2023-06-03 20:14:50 -04:00
johnnyq
4e075b9762 Merge branch 'master' of github.com:itflow-org/itflow 2023-06-03 20:13:37 -04:00
johnnyq
48a660094c Updated setup to wotk with the automatically generated cron key used in the itflow install script 2023-06-03 20:13:17 -04:00
Marcus Hill
82056aee64 Codesmells 2023-06-03 22:00:52 +01:00
Marcus Hill
d86b5d8992 Client Overview - Enhance Recently Updated section
- Move the asset warranty expiring and stale ticket queries out of inc_all_client.php and into client_overview.php, there is no need to load this data on every page load - just for the overview
- Show recently updated documents (in addition to contacts/vendors)
- General tidy
2023-06-03 21:58:34 +01:00
wrongecho
acbc935519 client_login_add_modal.php - capitalize 'software' 2023-06-03 21:24:54 +01:00
Marcus Hill
1175cc4ade Enable login key code (see #680) 2023-06-03 21:04:43 +01:00
johnnyq
39b4bce09e Revert Tidy UI design as it was not very copy paste friendly 2023-05-31 16:59:14 -04:00
johnnyq
f2e518e745 Tidy UI for debug 2023-05-31 16:42:52 -04:00
johnnyq
76d426f793 Add WebServer version 2023-05-31 13:43:15 -04:00
johnnyq
0c9f50fbda Tidy debug 2023-05-31 13:37:43 -04:00
johnnyq
386eb0c382 Added Installed Modules, Database stats such as Number Tables, fields, rows and db size, php, mysql and OS Versions, along with upload directory stats including file count and size 2023-05-31 13:31:03 -04:00
johnnyq
eb99807214 Added Debug report under settings currently only reports Database structure differences between Git Master Repo db.sql and current database structure of the installed instance 2023-05-31 12:43:12 -04:00
johnnyq
689c52ae3e Added select2 class on share with 2023-05-25 17:39:15 -04:00
johnnyq
d3281ecd18 Updated Share Model to have an Expire selection instead of selecting a date and time, also share link will now email a chosen contact that has a valid email with the secure link, along with notifications when link is clicked. The Link now adds the https:// in the beginning for easy copy paste 2023-05-25 17:35:09 -04:00
johnnyq
29dd0f6dee Fix issue under client tickets listing where contact name would appear incorrectly 2023-05-25 15:52:27 -04:00
johnnyq
9449a87a1f Strip Out http and https in domains, vendors and passwords 2023-05-22 10:39:50 -04:00
johnnyq
96d39a328f Remove old multi-company code causing breakage. Closes #689 thanks @Heart1010 2023-05-22 10:30:36 -04:00
Johnny
80fa93626a Merge pull request #688 from wrongecho/client-website-remove-protocol-regex
Add regex to remove http:// or https:// from client_website
2023-05-21 22:43:26 -04:00
wrongecho
20a65089b6 Update invoice_payment_add_modal.php
Tidy spacing
2023-05-20 20:34:20 +01:00
wrongecho
e8b5c881fe Update invoice.php
Tidy spacing
2023-05-20 20:31:12 +01:00
wrongecho
7d3f4fefbf Update functions.php
Tidy spacing
2023-05-20 20:27:37 +01:00
wrongecho
6c84b8edca Update expense_add_modal.php
Tidy spacing
2023-05-20 20:22:20 +01:00
wrongecho
a8f3b0fed1 Update custom_field_edit_modal.php
Tidy spacing
2023-05-20 20:21:23 +01:00
wrongecho
9fd57cef43 Update cron_ticket_email_parser.php
Codesmell
2023-05-20 20:20:05 +01:00
wrongecho
e650b7938e Update client_software_add_modal.php
Tidy
2023-05-20 20:18:15 +01:00
wrongecho
6673f27cec Update client_software_add_from_template_modal.php
Tidy
2023-05-20 20:16:30 +01:00
wrongecho
54911769c6 Update ajax.php
Tidy spacing
2023-05-20 19:50:48 +01:00
wrongecho
337bd27ee8 Update contact.php
Tidy spacing
2023-05-20 19:49:25 +01:00
wrongecho
eb2c42f4a3 Update cron_ticket_email_parser.php
Remove attachments to-do item as completed.
2023-05-20 19:47:33 +01:00
Marcus Hill
d0fa30d476 Add regex to remove http:// or https:// from client_website #684 2023-05-20 18:49:21 +01:00
Johnny
0abc6b384c Merge pull request #686 from bhopkins0/patch-2
Security enchancement for getIP() function
2023-05-20 11:30:49 -04:00
wrongecho
c63b965807 Merge pull request #687 from wrongecho/fix-leftover-vulnerable-code
Remove leftover SQL-injection vulnerable code
2023-05-20 15:36:03 +01:00
Marcus Hill
cea954008f Remove SQL-injection vulnerable code in this file that was previously fixed in inc_all_client.php 2023-05-20 15:33:46 +01:00
Brent Hopkins
23f7866c8f Increased security for getIP() function 2023-05-18 05:41:06 -05:00
johnnyq
c403380562 Sort Recurring Next Date ASC instead of DESC, add missing select2 class to select inputs 2023-05-17 12:04:12 -04:00
johnnyq
11eb104383 Fix carriage return and new lines in reply emails see https://forum.itflow.org/d/169-carriage-return-and-line-feeds-showing-in-ticket-email 2023-05-16 11:07:24 -04:00
wrongecho
a60a9456f0 Merge pull request #685 from wrongecho/rev-679
Ticket.php: Revert PR 679
2023-05-15 21:44:53 +01:00
Marcus Hill
0144132649 Ticket.php: revert PR 679
- Hide previous ticket count for now as this doesn't work as intended
2023-05-15 21:40:59 +01:00
johnnyq
77fb0e008f Stack Contact infosuch as phone, mobile and email for contacts on one column as these don't need tp be sortable and will make room for more detail columns to be sortable 2023-05-15 14:24:11 -04:00
johnnyq
1f580fc638 Updated README to exclude SummerNote and include TinyMCE 2023-05-15 13:33:40 -04:00
johnnyq
0b1b551df5 Remove SummerNote Code we have replaced this with TinyMCE 2023-05-15 13:32:21 -04:00
Johnny
0649931797 Merge pull request #683 from wrongecho/ticket-button-wording
Ticket.php
2023-05-15 13:29:15 -04:00
Marcus Hill
02ced0dbbd Fix codesmell 2023-05-14 20:19:07 +01:00
Marcus Hill
1057481039 Ticket.php
- Change wording of ticket 'Respond' button to 'Add note' if reply is internal
- Fix TinyMCE not loading under certain circumstances
- Correct varname 'prefix' to 'ticket_prefix' in reply alert message
2023-05-14 20:16:04 +01:00
wrongecho
eb4c5cbf34 Merge pull request #682 from wrongecho/master
Code tidy - ticket.php
2023-05-14 19:50:14 +01:00
Marcus Hill
40a8c6d723 Tidy 2023-05-14 19:48:29 +01:00
wrongecho
994d2fa5e4 Update README.md
Bump 1.0 release to July. Clarify security note to match docs.
2023-05-14 07:57:22 +01:00
Johnny
8861243792 Merge pull request #679 from aftechro/patch-11
Update ticket.php
2023-05-14 00:25:21 -04:00
Johnny
ee913da18f Merge pull request #680 from wrongecho/login-get-param
Add database structure for 'login key' protection concept
2023-05-14 00:24:16 -04:00
Johnny
9e91066a09 Merge pull request #681 from wrongecho/cron-email-invoice
Cron - Send invoices to all billing contacts + primary
2023-05-14 00:23:52 -04:00
AFTECH.RO
4183583ef5 Update ticket.php
changed the sql for previous ticket to prevent XSS attacks.
2023-05-13 23:30:33 +01:00
Marcus Hill
c2b6591cda Cron - Send invoices to all billing contacts + primary 2023-05-13 23:10:36 +01:00
wrongecho
d2d1b25e32 Update guest_pay_invoice_stripe.php
Rem comment re multi-company
2023-05-13 22:44:39 +01:00
Marcus Hill
5d6d7e389e Add database structure for 'login key' protection concept 2023-05-13 21:49:09 +01:00
AFTECH.RO
ffe4061429 Update ticket.php
Hide Previous ticket if none exists
2023-05-13 09:42:48 +01:00
AFTECH.RO
052d418bad Update ticket.php
Re-make of Related tickets (total open and closed) and contact card, showing previous ticket and status of it. Also, made the contact mobile and contact phone clickable (tel:$contact_phone)
2023-05-13 02:30:34 +01:00
Johnny
a79baae2a8 Merge pull request #677 from wrongecho/domain-expire-quotes
Fix domain registrar/webhost update not working
2023-05-12 18:51:34 -04:00
Marcus Hill
b281a19e6b Fix domain registrar/webhost update not working
- Quote the expiry field when updating a domain
- Better handle no web host being set
2023-05-12 23:26:39 +01:00
johnnyq
e67a75805c Fix: Authenticated users can craft a POST request to delete any file on the webserver. Thank you @
bhopkins0
2023-05-12 15:24:57 -04:00
johnnyq
51ee479130 oops fix replaced the actualy function with nullable 2023-05-11 18:34:06 -04:00
johnnyq
37fb696e63 Replace the remaining php files with nullable_htmlentites() 2023-05-11 18:27:48 -04:00
johnnyq
ccf0d3ab77 Replace all instances of htmlentities() with the new function nullable_htmlentities() thanks @bhopkins0 2023-05-11 18:23:36 -04:00
Johnny
f136a915b4 Merge pull request #676 from bhopkins0/patch-1
Add function to use htmlentities without deprecated error
2023-05-11 18:05:12 -04:00
Johnny
b1dfbada0c Merge pull request #675 from bhopkins0/master
Fixed clients.php blank page
2023-05-11 18:02:24 -04:00
Brent Hopkins
019050ba82 Add function to use htmlentities without deprecated error 2023-05-11 16:37:21 -05:00
Brent Hopkins
cdd2a31217 Update MySQL query 2023-05-11 16:07:05 -05:00
Brent Hopkins
9de9dcd1b3 Add client_tags.client_tag_tag_id to GROUP BY 2023-05-11 02:43:58 -05:00
Johnny
1e9c822033 Merge pull request #674 from bhopkins0/master
Fix "My Tickets" button CSS
2023-05-11 01:27:35 -04:00
Brent Hopkins
d1fc5c3c99 Change button look 2023-05-10 21:35:48 -05:00
johnnyq
8b89ba31db Fix Raise ticket under client portal another regression when we moved to TinyMCE. Expanded Document view to container width 2023-05-10 11:50:55 -04:00
johnnyq
cf0205ba21 Tidy Portal Header 2023-05-09 16:37:32 -04:00
johnnyq
901b51a18e Merge branch 'master' of github.com:itflow-org/itflow 2023-05-09 15:51:15 -04:00
johnnyq
485510a3ce Fix Create Ticket not submitting due to TinyMCE not respecting required fields in the textarea form inputs, removed the required fields for now 2023-05-09 15:50:26 -04:00
wrongecho
0665ec5701 Update bug_report.md
Add security notice to bug report
2023-05-09 20:30:07 +01:00
wrongecho
ad5743f176 Update support.md
Adjust security link
2023-05-09 20:28:29 +01:00
johnnyq
6f6ae476a9 Added comment in pagination_head.php regarding issue #673 2023-05-09 15:22:02 -04:00
johnnyq
8d666abc40 Tidy 2023-05-09 15:13:44 -04:00
johnnyq
163f14e791 Fixed Escaping issue with sortby unfortuantly with order_by mysql_escape is not enough and must also be filtered with a preg_replace Thanks @tdragon6 2023-05-09 15:12:39 -04:00
johnnyq
cb0366b9f7 Fix XSS in expenses and trips export CSV modal Thanks @tdragon 2023-05-09 12:11:42 -04:00
johnnyq
09ff8b710b Enable browser spell checker for TinyMCE 2023-05-09 00:31:09 -04:00
johnnyq
043a9cfa0a Fixed Ticket Reply currently an issue where required fields using TinyMCE wont POST looking into it 2023-05-08 22:15:23 -04:00
johnnyq
eb3decb4da Enabled TinyMCE for mobile users as well 2023-05-08 21:25:06 -04:00
johnnyq
c3a711d75d More TinyMCE in more places 2023-05-08 19:53:42 -04:00
johnnyq
01a37cb1e1 Replace Summernote WYSIWYG with TinyMCE 2023-05-08 18:44:00 -04:00
johnnyq
018f52eb67 Revert for now added HTML Purify to client tickets as well 2023-05-08 14:38:42 -04:00
johnnyq
eb9a8000b1 Fix Rendering issues with tickets editing because ticket client_tickets and ticket all share the same edit modal which already uses htmlentites to prevent xss but so it doesnt conflict with htmlpurify in ticket details we decided to split the vars to ticket_details and ticket_details_edit which is unfilter initially but gets filtered in the modals 2023-05-08 13:52:43 -04:00
johnnyq
9887fc4a19 Removed HTML Purify on tickets.php and use htmlentities instead to mimic client_tickets.php was causing some rendering issues when you goto edit a ticket under client tickets tested for XSS all tests came back clean 2023-05-08 13:24:43 -04:00
johnnyq
5ee78ef1f3 When deleting quote from the client or global list view redirect quote delete back to the correct corresponsing list view also make Delete Quote Functional on quote details 2023-05-08 12:37:05 -04:00
Johnny
53e0ebdbf6 Merge pull request #672 from wrongecho/portal-modules
Client Portal - quotes & docs
2023-05-08 11:35:34 -04:00
Johnny
226d3ffeb2 Merge pull request #671 from wrongecho/ticket-auto-close-2
Ticket autoclose:
2023-05-08 11:35:14 -04:00
Marcus Hill
db6b88edd3 Codesmell 2023-05-08 10:54:40 +01:00
Marcus Hill
0e062081cb Client Portal
- Allow primary + accounting/billing contacts to see quotes
- Allow primary + technical contacts to see docs
2023-05-08 10:50:53 +01:00
Marcus Hill
3a83a701b5 Ticket autoclose: Clarify auto-close help wording; only show as ticket status option if enabled 2023-05-08 09:43:46 +01:00
johnnyq
03e0dd8f5e Initial DB Structure for Projects and Tasks with Ticket and Client Linkage 2023-05-07 21:43:20 -04:00
johnnyq
93d4f3ebce You can now set the number of hours before a ticket is automatically closed if autoclose is set 2023-05-07 21:09:18 -04:00
johnnyq
37b375c1d9 Remove cruft 2023-05-07 20:47:15 -04:00
johnnyq
78695208b7 Fix custom Fields DB Structure Remove Unique Indexes change defaut type TEXT to text Added Add edit Delete Read for custom fields 2023-05-07 20:46:09 -04:00
johnnyq
0f758c5901 Finished DB Structure for the coming new feature custom fields 2023-05-07 19:45:55 -04:00
johnnyq
ac51f0cb72 Add Quick link to docs.itflow.org on the top bar 2023-05-02 14:58:35 -04:00
johnnyq
072c2f9e14 Fix cron stating cron key is always invalid 2023-05-02 13:45:23 -04:00
johnnyq
a0da341114 Updated initial db structure for installation 2023-05-02 12:36:18 -04:00
johnnyq
3f2f663b7b Check to see if args is set 2023-05-01 16:56:29 -04:00
johnnyq
f7ee489293 BREAKING CRON CHANGES: must generate a cron key before using cron. Cron will need updated like so php /full/path/to/cron.php [KEY] and same with cron_ticket_parse.php 2023-05-01 16:51:20 -04:00
Johnny
8110b0ffa7 Merge pull request #668 from wrongecho/portal-rem-company
Remove reference to non-existent company_id field in contacts table
2023-05-01 11:52:33 -04:00
Johnny
07ac69a528 Merge pull request #667 from wrongecho/ticket-auto-close
Add auto close ticket feature
2023-05-01 11:52:20 -04:00
Johnny
fc1eb4cd69 Merge pull request #666 from wrongecho/email-invoice
Send invoices to all billing contacts + primary
2023-05-01 11:51:13 -04:00
Marcus Hill
bf45c58ed1 Remove reference to non-existent company_id field in contacts table 2023-05-01 14:01:23 +01:00
Marcus Hill
dc2293c8dd Add auto close ticket feature 2023-05-01 02:02:45 +01:00
Marcus Hill
588206d79d When sending invoices manually, send to all billing contacts instead of just primary contact 2023-05-01 00:06:11 +01:00
johnnyq
8cf1bd8911 Set Working directory of cron parser upon initializtion which fixes relative path issue when adding attachments to tickets 2023-04-30 13:28:00 -04:00
Johnny
c11b3d5987 Merge pull request #665 from wrongecho/email-ticket-attachments
Email ticket attachments
2023-04-30 12:43:42 -04:00
Marcus Hill
0a9af8f2e0 Ticket attachments (email)
Email to ticket parser: Add support for email attachments
2023-04-30 10:52:25 +01:00
Marcus Hill
a3d8f5ab48 Ticket attachments (email)
Email to ticket parser: Add support for email attachments
2023-04-30 10:52:15 +01:00
Johnny
ab1582fe3a Merge pull request #664 from wrongecho/csp-initial-test
CSP - Client Portal Test
2023-04-30 00:35:08 -04:00
Marcus Hill
0340b080ad CSP - Client Portal Test
Add initial content security policy trial/test to some client portal pages
2023-04-29 19:39:42 +01:00
Johnny
a3353593db Merge pull request #663 from wrongecho/ticket-edit-strip-html
Sanitize ticket details output in main edit modal
2023-04-29 11:30:33 -04:00
Marcus Hill
c5966961da Sanitize ticket details output in main edit modal 2023-04-29 12:34:14 +01:00
wrongecho
ca0024feb9 Merge pull request #661 from wrongecho/email-ticketing-updates
Update documentation links on cron tickets
2023-04-29 10:03:11 +01:00
Marcus Hill
8247362891 Update documentation links 2023-04-29 09:52:53 +01:00
johnnyq
c5c4813f47 Update Links referencing the new documentation URLs 2023-04-28 19:53:23 -04:00
johnnyq
e54de2bb73 Feature: Users can now be exported to a CSV file 2023-04-24 17:03:01 -04:00
johnnyq
53b7f7d1d5 Feature: Client CSV Exportation 2023-04-24 16:48:47 -04:00
johnnyq
7fed50eb73 Updated all Export CSV to Modals with export disclaimer 2023-04-23 16:12:18 -04:00
johnnyq
541d1dd667 Add precautionary warning when exporting CSV data, still need to add modals for client data 2023-04-23 14:27:45 -04:00
johnnyq
53092fe9ca Updated Ticket email / replies with ##- Please type your reply above this line -## 2023-04-17 16:15:22 -04:00
johnnyq
c20f19568d Update ticket to require the body field to mimic the same function as edit ticket 2023-04-16 10:49:15 -04:00
Johnny
d0dae015a6 Merge pull request #658 from itflow-org/wrongecho-email-rm-beta
Remove beta from email ticket parsing
2023-04-15 22:47:55 -04:00
wrongecho
a765459b43 Update settings_ticket.php 2023-04-15 20:15:24 +01:00
wrongecho
515ea739de Remove (beta) from email ticket parsing 2023-04-15 19:52:47 +01:00
johnnyq
b784c48120 Opps Fix 2023-04-12 16:48:35 -04:00
Johnny
880b2fccb5 Merge pull request #657 from wrongecho/client-tax-fix
Fix client_tax_id_number variable name in edit modal
2023-04-12 16:47:15 -04:00
Marcus Hill
bc4e744384 Fix client_tax_id_number variable name in edit modal 2023-04-12 21:21:56 +01:00
johnnyq
f127719cbe Added new Field Client Tax ID Number, currently only vieable on the client top head, and under edit. It is also searchable 2023-04-11 16:20:48 -04:00
johnnyq
d27c83ab66 Fix Mail Parser, inserting \r \n 2023-04-11 11:23:19 -04:00
johnnyq
ca6e3c229e Remove a lingering D under transfers 2023-04-10 17:32:21 -04:00
Johnny
eb49233d20 Merge pull request #656 from wrongecho/ticketing-0423
Ticketing Updates - Change client
2023-04-10 15:17:07 -04:00
Johnny
1c6ff4f4f6 Merge pull request #655 from wrongecho/api-multi-select
Add multi-select/bulk deletion for API keys
2023-04-10 15:16:50 -04:00
Marcus Hill
a26f3087fc Change client - fix code smell 2023-04-10 19:13:31 +01:00
Marcus Hill
c55d2a8cda Add ticket_source field for future use (agent/portal/email) 2023-04-10 18:58:06 +01:00
Marcus Hill
2f19967a0d Comment ticket_created_by 2023-04-10 18:55:42 +01:00
Marcus Hill
1aa33585a0 Ticketing - add ability to change client 2023-04-10 18:52:23 +01:00
Marcus Hill
8d97feeb54 Add ticket_source field for future use (agent/portal/email) 2023-04-10 16:37:03 +01:00
Marcus Hill
4db390d72b Add multi-select/bulk deletion for API keys 2023-04-10 12:32:05 +01:00
wrongecho
2373718be6 Bump 1.0 release from Mar/Apr to Apr/May 2023-04-10 11:52:38 +01:00
wrongecho
8e44518faa Update old broken docs link to DocuWiki homepage 2023-04-10 11:51:28 +01:00
Johnny
21fc20645b Merge pull request #654 from wrongecho/dynamic-modals
Convert quote edit modal to be dynamically populated
2023-04-09 23:35:23 -04:00
Marcus Hill
5f79931787 Dynamic modals: codesmell 2023-04-09 20:14:15 +01:00
Marcus Hill
bdf74e77ba Convert quote edit modal to be dynamically populated 2023-04-09 20:10:19 +01:00
Johnny
6287a7ce3d Merge pull request #653 from wrongecho/files-logging
Enhance logging for file uploads/deletes
2023-04-09 13:28:20 -04:00
Marcus Hill
0e0c06eebf File logging - codesmell fix 2023-04-09 13:18:14 +01:00
Marcus Hill
e66e896904 Enhance logging for file uploads/deletes 2023-04-09 13:14:46 +01:00
Johnny
f63cd120c6 Merge pull request #652 from wrongecho/confirm-file-delete
Client file deletion
2023-04-08 20:36:58 -04:00
Johnny
f07bff116b Merge pull request #651 from wrongecho/fix-file-upload-auto-name
Bufix: Fix client file uploads
2023-04-08 20:35:14 -04:00
Marcus Hill
04dad13ad3 Client file deletion
- Add file delete confirmation modal
- Change file deletes to POST not GET requests in post.php as they are state changing
- Require CSRF validation for file deletes
2023-04-08 21:59:54 +01:00
Marcus Hill
9f25b436d6 Fix client file upload not automatically naming files or showing image previews 2023-04-08 20:48:55 +01:00
johnnyq
c2b25cbf7d Fix Recurring Invoice syntax 2023-04-06 16:44:11 -04:00
johnnyq
a5d9bd7abe Convert CSS to nl2br() functions where nessesessaery to interept new lines into html code, Tidy Code remove depreciated <center> Tags 2023-04-05 15:20:07 -04:00
johnnyq
74768d6801 Transfer Notes now render new lines in the list view 2023-04-05 14:53:52 -04:00
johnnyq
d43c2f2d06 FEATURE: Added Transfer notes to the transfers list and also made notes searchable and sortable 2023-04-05 14:41:43 -04:00
johnnyq
26aa63917f Only select used fields on SQL Query for Edit Add Refund and copy queries to reduce the SQL Load on large expense tables 2023-04-03 19:18:32 -04:00
johnnyq
a3e45d632f Merge branch 'master' of github.com:itflow-org/itflow 2023-04-03 19:08:52 -04:00
johnnyq
230efc83dd Feature: Added Optional Client Field to Expenses to track your expenses to the client 2023-04-03 19:08:37 -04:00
Johnny
9f30de408c Merge pull request #650 from meltyness/totpfix
fixes #477
2023-03-28 21:47:54 -04:00
root
67c72400f8 Fixed logic incompatibility between AJAX handler and base32 object usage convention. 2023-03-28 17:30:19 -05:00
johnnyq
c544dc4a2a New Feature: Added Hourly Rate to Client 2023-03-28 15:29:54 -04:00
johnnyq
1e2535359a Update Global Search Documents to reference actual document 2023-03-23 16:57:06 -04:00
Johnny
36b6347b66 Merge pull request #649 from XVicarious/patch-1
Fix #648
2023-03-22 23:51:12 -04:00
Brian Maurer
341644ba01 Fix #648 2023-03-22 21:16:13 -04:00
johnnyq
201db36c24 Moved more edit add vars to models 2023-03-21 21:18:12 -04:00
johnnyq
3202bceddd Set File Size to 20MB 2023-03-21 13:00:50 -04:00
johnnyq
035be88e72 Moved the remaining upload logics to use the checkFileUpload() Function 2023-03-21 12:53:01 -04:00
Johnny
0f1f324162 Merge pull request #647 from wrongecho/ticket-colours
tickets.php - Rename unused ticket_status_display to ticket_status_color
2023-03-19 12:26:09 -04:00
johnnyq
899b38d84b Fix another 0000-00-00 to NULL 2023-03-19 12:21:13 -04:00
Marcus Hill
6ac7843ee9 Tidy spacing 2023-03-19 16:00:55 +00:00
Marcus Hill
3718987f50 tickets.php - Rename unused ticket_status_display to ticket_status_color 2023-03-19 15:53:10 +00:00
johnnyq
b7e59aa023 Revert the UI update on drop notifications didnt look right too much code 2023-03-18 16:29:32 -04:00
johnnyq
52faf2fac9 Spruce up the Dropdown Notifications UI 2023-03-18 16:22:43 -04:00
johnnyq
d05aa0b829 When clicking on a notificaiton on the dropdown instead of dismissing it takes you to the client page if specified otherwise its an empty click, updated some entity_id for notifications in cron.php 2023-03-18 15:36:19 -04:00
johnnyq
a9c90a0c6a Opps Add db.sql back 2023-03-18 15:21:45 -04:00
johnnyq
1dc52ecc4f Added new field to notifications called entity_id which will reference an item related to the notificaiton so it can be clicked on to go directly to the entity under notifications 2023-03-18 15:17:45 -04:00
johnnyq
427c51b728 Bump phpMailer from 6.7.1 to 6.8.0 2023-03-18 12:44:55 -04:00
johnnyq
4a2d76b056 Fix https://forum.itflow.org/d/111-umlauts-are-replaced-in-the-subjects - Removed array_map htmlentities which wasnt needed since we are passing AJAX data over which is already formated properly 2023-03-18 12:29:23 -04:00
johnnyq
99eaaa71c4 Fix #646 Thanks @Heart1010 2023-03-16 12:39:07 -04:00
johnnyq
3f028e8560 Fix Broken API due to incorrect named function https://forum.itflow.org/d/119-api-broken 2023-03-14 18:59:43 -04:00
johnnyq
37e21e963b Add summernote WYSIWYG function to Raising a ticket as we sanitize outout with HTMLPurify 2023-03-13 20:06:36 -04:00
johnnyq
748041cd5d Fix issue relating to forum post https://forum.itflow.org/d/118-users-cant-raise-tickets due to mis-spelled function 2023-03-13 19:51:52 -04:00
johnnyq
1c9461c075 Added client_id to both notifications and logging when send invoice emails 2023-03-13 16:30:02 -04:00
johnnyq
f7f9135428 Added entity_id to logging when sending invoice emails 2023-03-13 16:26:12 -04:00
johnnyq
924159dfcb Wrong var sent for logging email address during invoice sends 2023-03-13 16:23:39 -04:00
johnnyq
76f02c46a8 Use htmlpurify to show client shared document, Clean up some formatting in guest item view, fixed Invoice and Quote not logging the client who view them this was a regression from the company removal 2023-03-13 15:45:12 -04:00
johnnyq
9d053dcc91 Undo Query need to rethink this one 2023-03-12 15:49:01 -04:00
johnnyq
89c4811aa6 Combined balance, reccuring monthly and paid to date to the clients query so now they can be sortable with less queries 2023-03-12 15:39:22 -04:00
johnnyq
e1cbd12f2e Updated Git Ignore to ignore HTMLPurify cache Remove HTMLPurify generated Cruft 2023-03-12 11:31:10 -04:00
johnnyq
7543bfc8bc Remove HTMLPurify generated Cruft 2023-03-12 11:28:10 -04:00
johnnyq
6a660a5429 Removed Ticket created at as this is done automatically at the DB level 2023-03-12 11:26:47 -04:00
johnnyq
f5175ff6e7 Remove HTMLPurify generated Cruft 2023-03-12 11:02:35 -04:00
johnnyq
58d058e62c Added Summernote WYSIWYG to client portal 2023-03-12 11:02:09 -04:00
johnnyq
c9dfb1ef6a Remove HTMLPurify generated Cruft 2023-03-12 10:49:17 -04:00
johnnyq
d37c3f0251 Rework htmlpurify function in client portal to properly santizie the output instead of the input Fix broken client avatar in client portal 2023-03-12 10:48:45 -04:00
johnnyq
c9143ec3c0 Remove HTMLPurify generated Cruft 2023-03-12 10:13:56 -04:00
johnnyq
fd6a8284c4 Fixed padding under client scheduled tickets, Removed HTMLPurify under schedueld tickets post as it is not needed and seems to be taken care of by the javascript modal 2023-03-12 10:13:03 -04:00
Johnny
ef6e294acc Merge pull request #644 from wrongecho/small-fixes-post-company-edits
Small fixes post company edits
2023-03-12 09:55:52 -04:00
Marcus Hill
e9ac93085d Fix typo 2023-03-12 10:12:53 +00:00
Marcus Hill
e2d4552e6e Re-indent & remove a random 'h' 2023-03-12 09:30:07 +00:00
johnnyq
20dbe285e8 Remove HTML Entity Decode from the HTML Purifier as this is not needed now 2nd attempt in ticket replies 2023-03-11 21:48:30 -05:00
johnnyq
4eeb2fdffa Remove Cruft 2023-03-11 21:47:36 -05:00
johnnyq
16b20c0bfa Remove HTML Entity Decode from the HTML Purifier as this is not needed now 2023-03-11 21:47:11 -05:00
johnnyq
af46738427 Only use HTMLPurify Library on Output only and SQL sanitize for input 2023-03-11 21:42:47 -05:00
johnnyq
6ecca50541 Garbage Remove 2023-03-11 21:25:08 -05:00
johnnyq
b5ae7b3d86 Used HTMLPUrify to Purify the output of Tickets, Documents, Document Templates. Removed Redundant htmlentities in edit document edit ticket etc, Removed Company ID from Document Template Details 2023-03-11 21:24:35 -05:00
johnnyq
00b9391de4 Remove Company_id from Document_details.php 2023-03-11 20:57:58 -05:00
johnnyq
8fcc43d1fb Fixed broken Online Payments Settings Page due to a regression 2023-03-11 19:34:30 -05:00
johnnyq
6a92b132bf Missing } 2023-03-11 19:15:53 -05:00
johnnyq
6a435157c1 Another try to make sure config.php is written before going further 2023-03-11 19:11:34 -05:00
johnnyq
709516853a Remove company_id fields in Setup no longer used also rework writing the config file 2023-03-11 18:50:18 -05:00
johnnyq
8308b47295 Fix missing user_id var in Setup, removed sleep(2) as it did not fix the issues where config.php was not written instead used an if condition to check to see if config.php is written before going further 2023-03-11 18:35:15 -05:00
johnnyq
e2f2960830 Fix regression that caused company setup to break because of a no longer used DB table, also attempt to check if config.php exists before moving onto the user step as sometimes during setuo it does not write the config.php file 2023-03-11 18:23:20 -05:00
johnnyq
a889f7d879 Add back api/v1/assets/read.php somehow got wiped during the big update also added the ability to query asset by MAC address 2023-03-11 17:15:46 -05:00
johnnyq
0ad86ab053 Fix Company File Upload Regression 2023-03-11 17:02:53 -05:00
johnnyq
48fe49cf77 BREAKING CHANGES - MAKE FULL BACKUP BEFORE PROCEEDING - Requires Manual Intervention on files see Forum Post Make sure you run the Database update directly after update. This Removes Multi-Company Functionality. Fixes issues with Reponsive tables and bunch of other UI and small Fixes 2023-03-11 16:16:46 -05:00
wrongecho
75da31d991 Merge pull request #643 from wrongecho/master
Documents
2023-03-11 20:05:53 +00:00
Marcus Hill
90bba73aac Documents
- Properly escape HTML in the edit modal
- Tidy
2023-03-11 19:55:38 +00:00
wrongecho
4344a4fcca Update ticket_reply_edit_modal.php
Sanitize any potential HTML output in ticket reply edit modal to summernote editor
2023-03-06 21:12:58 +00:00
johnnyq
b9112ddded tidy 2023-03-05 20:33:05 -05:00
johnnyq
a711bed38c Add sme more htmlemtities for consistency 2023-03-05 20:06:42 -05:00
wrongecho
9a3266190c Merge pull request #642 from wrongecho/stricter-input-validation-theme-tags
Add stronger input validation/output escaping
2023-03-05 19:31:22 +00:00
Marcus Hill
2210ad9f3e Add stronger input validation/output escaping for theme, tags and categories vars 2023-03-05 19:25:24 +00:00
Marcus Hill
feb0267002 Add stronger input validation/output escaping for theme, tags and categories vars 2023-03-05 19:13:48 +00:00
Johnny
ff18e704c8 Merge pull request #641 from wrongecho/cert-multi-select
Add bulk actions (delete) for client certificates.
2023-03-05 11:58:09 -05:00
johnnyq
cdf97ec83b Fix clients being duplicated when multiple tags are assigned to them 2023-03-05 11:40:20 -05:00
Marcus Hill
1c18599372 Add bulk actions (delete) for client certificates. 2023-03-05 16:20:09 +00:00
johnnyq
5640a22c18 Remove some more log created at and updated at as the DB does this for us 2023-03-04 16:17:29 -05:00
johnnyq
c0af8e8eab Add '' to the date vars under API assets if not empty so they dont error out when inserted into the DB 2023-03-04 16:13:38 -05:00
johnnyq
e01dea2fd0 Fix Assets API Missing $ on var and use NULL instead of 0000-00-00 when inserting into the DB similar to POST 2023-03-04 15:58:34 -05:00
johnnyq
426b07a093 Fix issue with ulauts in the subject field of tickets opened using email parser. Removed htmlentities on subject replaced with the new inputSanitize See https://forum.itflow.org/d/111-umlauts-are-replaced-in-the-subjects 2023-03-03 12:14:29 -05:00
johnnyq
7228d8b6e6 Fix #640 2023-03-02 16:20:03 -05:00
johnnyq
7445cf1910 oops somehow dahsboard_technical got removed put it back 2023-03-01 16:28:11 -05:00
johnnyq
e42095a85e Tidy code 2023-03-01 16:26:41 -05:00
johnnyq
45b686dafc Fix issue with cron not sending recurring emails due to a misspelling 2023-03-01 14:09:58 -05:00
johnnyq
5114c1acc9 Fix possible Setup bug where it sometimes doesnt create the config.php and moves on. The hopeful fix is after creating config.php, sleep for 2 seconds which will wait for the file to be written fully to the filesystem before moving ahead. This issue could arrise with slow disks 2023-03-01 11:16:53 -05:00
johnnyq
b7c855a67d Fix #639 2023-03-01 11:07:56 -05:00
johnnyq
b2deebfa42 Reverted still causing issues with duplicate clients 2023-03-01 01:11:25 -05:00
johnnyq
58e08c1e60 Still getting dupes in clients with multiple tags redid the query 2023-03-01 01:09:14 -05:00
johnnyq
d50397f291 Add back additional Groupby in Client oops 2023-03-01 01:03:40 -05:00
johnnyq
373df5c4d1 Merge branch 'master' of github.com:itflow-org/itflow 2023-03-01 00:59:30 -05:00
johnnyq
3783fcfef6 Converting 0000-00-00 date values to NULL as this is best practice and compitible with MySQL 2023-03-01 00:59:14 -05:00
johnnyq
1a5bffd2e0 Updated the client inc to remove date 0000-00-00 format to fix issue with MySQL 2023-02-28 23:52:20 -05:00
johnnyq
99dc294145 rewrite income by client report SQL query to join as a single query instead of multiple
;
2023-02-28 23:04:25 -05:00
johnnyq
47dbd46bf3 rewrite the Recurring Incpome by Client report into 1 Query instead of multiple 2023-02-28 22:41:24 -05:00
johnnyq
94c020f689 Fix issue clients listing being broken with MySQL server due to not specifiying all non aggregate columns be in the GROUP BY Field, this was not an issue with mariaDB 2023-02-28 22:15:09 -05:00
johnnyq
e14fe2474c Updated Multi Action UI and some logic 2023-02-28 20:16:07 -05:00
johnnyq
cdfb61b294 Added a helper if no tags exist when attempting to add them to a client, Added some santizeInput tags to API 2023-02-28 11:58:08 -05:00
johnnyq
2acb5e0b7b Possible fix for MYSQL Date not handling 0000-00-00 2023-02-27 12:35:41 -05:00
johnnyq
a79e4b496c Fix regression in client listing which broke searching between dates 2023-02-27 12:26:46 -05:00
johnnyq
18a8122d4c Merge branch 'master' of github.com:itflow-org/itflow 2023-02-26 22:39:54 -05:00
johnnyq
fdb34b2613 Toyed with the idea of showing Which Column is being sorted and if its ASC or DESC in dismissed notifications 2023-02-26 22:39:34 -05:00
johnnyq
fbc30248de Toyed with the idea of showing Which Column is being sorted and if its ASC or DESC in dismissed notifications 2023-02-26 22:37:30 -05:00
johnnyq
0269f416a5 Toyed with the idea of showing Which Column is being sorted and if its ASC or DESC in dismissed notifications 2023-02-26 22:36:12 -05:00
Johnny
b9b383cbd2 Merge pull request #631 from wrongecho/532-remove-add-company
Remove ability to add new companies
2023-02-26 21:58:07 -05:00
Marcus Hill
8de76fdded Remove ability to add new companies
As part of the ongoing removal of the multi-company feature, this PR/commit removes the ability to add new companies in settings.
2023-02-25 21:53:20 +00:00
5079 changed files with 538219 additions and 101943 deletions

20
.editorconfig Normal file
View File

@@ -0,0 +1,20 @@
# Editor defaults for ITFlow - see CONTRIBUTING.md ("Style")
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
[*.md]
trim_trailing_whitespace = false
# Vendored - do not reformat
[libs/**]
indent_style = unset
indent_size = unset
trim_trailing_whitespace = false
insert_final_newline = false

44
.gitattributes vendored Normal file
View File

@@ -0,0 +1,44 @@
# ITFlow line-ending policy
#
# Everything ITFlow ships is LF in the repository and LF in the working tree.
# Contributors on Windows get LF too - this is deliberate. ITFlow is deployed
# to Linux/Apache and edited over sftp/ssh as often as it is cloned, so a
# checkout must be byte-identical everywhere.
* text=auto eol=lf
# Explicit for the file types we author, so nothing depends on git's guess.
*.php text eol=lf
*.js text eol=lf
*.css text eol=lf
*.html text eol=lf
*.sql text eol=lf
*.md text eol=lf
*.json text eol=lf
*.yml text eol=lf
*.xsd text eol=lf
*.svg text eol=lf
*.txt text eol=lf
*.ini text eol=lf
.htaccess text eol=lf
# Binary assets: never touched, never diffed as text.
*.png binary
*.gif binary
*.jpg binary
*.jpeg binary
*.webp binary
*.ico binary
*.icc binary
*.woff binary
*.woff2 binary
*.ttf binary
*.eot binary
*.crt binary
*.ser binary
*.z binary
# Vendored third-party code is preserved byte-for-byte as shipped upstream.
# Per CONTRIBUTING.md libs/ is never edited in place - it is replaced wholesale -
# so normalizing it here would create spurious diffs on the next library update.
libs/** -text

2
.github/FUNDING.yml vendored
View File

@@ -1 +1 @@
custom: ["https://www.paypal.com/donate/?business=QP4U384PMVBMU&no_recurring=0&item_name=Help+support+the+development+of+ITFlow&currency_code=USD"]
custom: ["https://services.itflow.org"]

View File

@@ -1,32 +1,23 @@
---
name: Bug report
about: Something not working quite right? Create a report to help us improve!
title: ''
labels: ''
about: Please report bugs on the Forum @ https://forum.itflow.org/t/bug
title: 'Please report bugs on the Forum'
labels: Support
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
We're now using GitHub Issues exclusively for development.
-
**Can you reproduce this on the demo at demo.itflow.org**
Yes/No/NA
Going forward, GitHub Issues will be used to track confirmed bugs & planned features via Github Projects. This allows us to keep GitHub clean & tidy, whilst maintaining an active and relaxed community experience on the Forum.
**Are you on the latest available version of ITFlow, with an up-to-date database structure?**
Yes/No
Please raise bugs on the forum @ https://forum.itflow.org/t/bug. Make sure to mention whether you can replicate the bug on demo.itflow.org.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
4. See error
Thanks,
**Expected behavior**
A clear and concise description of what you expected to happen, if not obvious.
The ITFlow team :)
**Screenshots**
If applicable, add screenshots to help explain your problem.
--
**Additional context**
Add any other context about the problem here.
To privately discuss a security issue, please see https://github.com/itflow-org/itflow/security

View File

@@ -1,16 +1,25 @@
---
name: Feature request
about: Please discuss new features on the Forum @ https://forum.itflow.org/t/features
title: ''
title: 'Please discuss new features on the Forum'
labels: Support
assignees: ''
---
We're now using GitHub just to track features we're definitely planning to implement (and bugs!).
We're now using GitHub Issues exclusively for development.
-
Please discuss new feature requests on the forum @ https://forum.itflow.org/t/features. This allows us to gather interest & feedback on the features people feel are most important, whilst keeping GitHub cleaner and more about the code.
Going forward, GitHub Issues will be used to track confirmed bugs & planned features via Github Projects. This allows us to keep GitHub clean & tidy, whilst maintaining an active and relaxed community experience on the Forum.
New feature requests here will be closed.
Please discuss new feature requests on the forum @ https://forum.itflow.org/t/features. When creating discussions, try to imagine how your proposed feature would also benefit other users.
Thanks :)
All new feature requests raised here will be closed, unless agreed otherwise.
Thanks,
The ITFlow team :)
--
To privately discuss a security issue, please see https://github.com/itflow-org/itflow/security

View File

@@ -1,18 +1,25 @@
---
name: Support
about: Please visit the Forum or Discord for support
title: ''
about: Please request support on the Forum @ https://forum.itflow.org/t/support
title: 'Please visit the Forum for support'
labels: Support
assignees: ''
---
Please visit the Forum or Discord for support
We're now using GitHub Issues exclusively for development.
-
Forum - https://forum.itflow.org/
Going forward, GitHub Issues will be used to track confirmed bugs & planned features via Github Projects. This allows us to keep GitHub clean & tidy, whilst maintaining an active and relaxed community experience on the Forum.
Discord - https://discord.gg/ZjCcBzTUDr
Please use the forum for support queries/issues: https://forum.itflow.org/t/support
All new support requests raised here will be closed.
Thanks,
The ITFlow team :)
--
To discuss a security issue, please see: https://i.imgur.com/P03o0Sy.png
To privately discuss a security issue, please see https://github.com/itflow-org/itflow/security

37
.github/workflows/dbsql-lint.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
name: SQL Syntax Check for db.sql
on:
pull_request:
paths:
- 'db.sql'
jobs:
syntax_check:
name: Check db.sql SQL Syntax
runs-on: ubuntu-latest
services:
mariadb:
image: mariadb:latest
ports:
- "3306:3306"
env:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MARIADB_USER: user
MARIADB_PASSWORD: password
MARIADB_DATABASE: itfsyntaxdb
options: >-
--health-cmd="healthcheck.sh --connect --innodb_initialized"
--health-interval=10s
--health-timeout=5s
--health-retries=3
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Import & Lint db.sql
run: mysql --host 127.0.0.1 -uuser -ppassword itfsyntaxdb < db.sql
- name: Show imported tables
run: mysql --host 127.0.0.1 -uuser -ppassword itfsyntaxdb -e "show tables;"

View File

@@ -10,18 +10,20 @@ jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1.1.1
- uses: actions/first-interaction@v1.2.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: |
Hello & Welcome! :)
Thanks for taking the time to get in touch. We'll review this issue shortly.
Thanks for taking the time to get in touch.
Whilst you're waiting, please feel free to check out the [forum](https://forum.itflow.org).
We ask that all bugs/feature/support requests are raised via the [forum](https://forum.itflow.org). We'll be in touch shortly to confirm.
pr-message: |
Hello & Welcome! :)
Thanks for taking the time to help improve ITFlow. We're excited to review your contributions - we'll review this PR as soon as we can!
Whilst you're waiting, please feel free to check out the [forum](https://forum.itflow.org).
Just so you know, all contributions to ITFlow are licensed under the GNU GPL. By contributing you grant us a perpetual & irrevocable license to include your work in ITFlow.

View File

@@ -12,4 +12,4 @@ jobs:
- uses: actions/checkout@v2
- name: Check PHP syntax errors
uses: overtrue/phplint@4.1.0
uses: overtrue/phplint@9.4.1

48
.gitignore vendored
View File

@@ -1,17 +1,57 @@
node_modules
config.php
uploads/favicon.ico
uploads/clients/*
!uploads/clients/index.php
uploads/custom/*
!uploads/custom/index.php
uploads/documents/*
!uploads/documents/index.php
uploads/document_templates/*
!uploads/document_templates/index.php
uploads/expenses/*
!uploads/expenses/index.php
uploads/recurring_tickets/*
!uploads/recurring_tickets/index.php
uploads/settings/*
!uploads/settings/index.php
uploads/users/*
!uploads/users/index.php
uploads/tmp/*
!uploads/tmp/index.php
backups/*
!backups/index.php
!backups/.htaccess
.idea/*
!uploads/tmp/.htaccess
uploads/backups/*
!uploads/backups/index.php
!uploads/backups/.htaccess
uploads/tickets/*
!uploads/tickets/index.php
uploads/ticket_templates/*
!uploads/ticket_templates/index.php
.idea/*
plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/HTML/*
!plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/HTML/.gitkeep
plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/URI/*
!plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/URI/.gitkeep
plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/CSS/*
!plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/CSS/.gitkeep
.vscode/settings.json
admin/custom/*
!admin/custom/readme.php
agent/custom/*
!agent/custom/readme.php
client/custom/*
!client/custom/readme.php
guest/custom/*
!guest/custom/readme.php
cron/custom/*
!cron/custom/readme.php
scripts/custom/*
!scripts/custom/readme.php
setup/custom/*
!setup/custom/readme.php
api/v1/custom/*
!api/v1/custom/readme.php
.zed
*.patch

2
.htaccess Normal file
View File

@@ -0,0 +1,2 @@
# Prevent access to .git, .github, and config.php
RedirectMatch 401 ^/(\.git|\.github|config\.php)

1257
CHANGELOG.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
the forums / Discord.
the forums.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the

298
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,298 @@
# Contributing to ITFlow
Thanks for your interest in contributing! ITFlow is intentionally simple: plain procedural PHP, MySQL via `mysqli`, and vanilla Bootstrap/AdminLTE. There is no framework, no ORM, no template engine, and no build step. If you can read a PHP file top to bottom, you can read ITFlow.
That simplicity comes with a trade-off: **safety and correctness depend on following conventions at every call site.** This document is the list of those conventions. Read it once, fully, before opening a PR — most review feedback we give is a restatement of something on this page.
---
## Quick start (development)
1. Clone the repo into a webroot served by Apache/PHP 8.x with the `mysqli`.
2. Create a MySQL/MariaDB database and browse to `/setup/` — or import `db.sql` directly.
3. Rename/skip setup as prompted; `config.php` is generated at the root (and is gitignored).
There is no `composer install` or `npm install` step. All third-party libraries are vendored in `/libs/`. This is deliberate — ITFlow is distributed as "unzip and go" — so **never add a runtime Composer/npm dependency**. If a new library is truly needed, discuss it in an issue first; if accepted, it gets vendored into `/libs/`.
---
## Architecture map
| Path | Purpose |
|---|---|
| `agent/` | The main technician-facing app. Most feature work happens here. |
| `admin/` | Settings, configuration, roles, mail, migrations. Admin-only. |
| `client/` | The logged-in client portal (contacts of a client). |
| `guest/` | Unauthenticated flows via URL keys (view/pay invoice, view quote/ticket, view shared credentials/files/documents). |
| `api/v1/` | Key-authenticated JSON CRUD API, one directory per module. |
| `cron/` | Scheduled jobs. `cron.php` is the dispatcher and the only entry in the crontab; everything else in the directory is a job it runs, with `cron/includes/` for the parts only cron uses. See [Cron](#cron). |
| `functions.php` + `functions/` | Shared helper functions, split into topical files (`sanitize.php`, `auth.php`, `logging.php`, …) loaded by `functions.php`. New helpers go in the topical file that matches their concern. |
| `includes/` (root) | **Shared** across portals: session/auth bootstrap, DB, layout partials. |
| `post/` (root) | **Shared** POST handlers (logout, misc). |
| `modals/` (root) | **Shared** modals used by both agent and admin. |
| `js/`, `css/` (root) | Shared front-end assets (portals also have their own). |
| `libs/` | Vendored third-party libraries. Never edit these; update them wholesale. |
| `setup/` | First-run installer. |
| `scripts/` | Helper/utility scripts — `setup_cli.php`, `update_cli.php`, `restore_cli.php`. CLI only; the directory denies web access. |
Rule of thumb: **root-level `includes/`, `post/`, `modals/`, `js/`, `css/` are shared code; everything inside a portal directory is scoped to that portal.**
### `custom/` directories
`agent/`, `admin/`, `client/`, `guest/`, and `cron/` each contain a `custom/` directory. These are hook points for site-specific code that survives updates. `triggerCustomAction($trigger, $entity_id)` fires named triggers (e.g. `ticket_resolve`) into `custom/custom_action_handler.php` if one exists. Core code should **call** `triggerCustomAction()` at meaningful events but never depend on anything inside `custom/`.
---
## Request lifecycle (how a page works)
**Read pages** (`agent/tickets.php`, etc.) start by requiring an `inc_all*.php` from the portal's `includes/`. That chain loads, in order: `config.php``functions.php` (a loader that pulls in the topical helper files under `functions/` — security, sanitize, auth, logging, etc.) → `check_login.php` (auth) → header/nav/layout partials. It also establishes the implicit globals every page relies on: `$mysqli`, `$session_user_id`, `$session_name`, and — on client-scoped pages via `inc_all_client.php``$client_id` (already `intval()`'d).
If your code "can't find" a variable, check which include chain the page uses before adding a query. The variable probably already exists.
**Write actions** go through the portal's `post.php` dispatcher, which:
1. Requires config, functions, and the login check.
2. Defines the constant `FROM_POST_HANDLER`.
3. Loads the handler files in `post/` (excluding `*_model.php`).
Every handler file must start with:
```php
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
```
Handlers are a series of independent blocks, one per action:
```php
if (isset($_POST['edit_ticket_priority'])) {
validateCSRFToken($_POST['csrf_token']);
enforceUserPermission('module_support', 2);
// ... fetch, check client access, act, log, notify, redirect
}
```
**Copy the nearest existing block as your starting point** — but understand every line you copy. The next section explains why each one is there.
### The `_model.php` pattern
Files named `agent/post/*_model.php` hold shared field collection/sanitization logic used by both the create and edit blocks of a module (e.g. `asset_model.php` is included by both `add_asset` and `edit_asset`). If create and edit share more than a couple of fields, use this pattern rather than duplicating. Model files carry the same `FROM_POST_HANDLER` guard and are excluded from the dispatcher's auto-load.
**`_model.php` is a reserved suffix.** The exclusion is a filename match, so a *handler* named `*_model.php` is silently never loaded — its form posts, nothing claims the request, and the user gets a blank page with no error anywhere. This is what happened to `admin/post/ai_model.php`, which is why the AI Models handler is now `admin/post/ai_models.php`. Name entity handlers around the suffix (`ai_models.php`, `users.php`, `api_keys.php`).
A POST that reaches the end of `admin/post.php` or `agent/post.php` without a handler claiming it is logged to App Logs as a `Request` warning, which is the fastest way to spot this class of mistake.
---
## Cron
One crontab entry runs everything:
```
* * * * * php /path/to/itflow/cron/cron.php >/dev/null
```
`cron/cron.php` is a dispatcher. It wakes every minute, works out which scripts in `cron/` are due, and requires them into its own process. Adding a job is a new script in `cron/` plus an entry in `includes/cron_jobs.php`. The crontab never changes again.
That registry is the only thing that decides **which** scripts can run, and the schedule in it is only a default: it seeds the job's `cron_jobs` row the first time the dispatcher meets the job, and from then on the row is what runs, because Maintenance > Cron writes to it. The database therefore holds **when and whether**, never **what** — a row naming a script that is not in the registry is ignored, so nothing that reaches the database can point the dispatcher at an arbitrary file. Keep it that way.
Run Now in the admin UI does not execute anything in the web request: these scripts are CLI-only and some take minutes, so the button sets `cron_job_run_now` and the next dispatch picks it up, through the same lock and claim as a scheduled run.
Due-ness is recorded in the `cron_jobs` table rather than matched against the clock, so a job whose minute was missed — machine down, previous run still going — runs at the next opportunity instead of being skipped for the day. A job is claimed *before* it runs, not after: a run that dies half way through is not repeated, which matters because `nightly_tasks.php` generates invoices and charges cards. Each job is also locked individually for the length of its own run (`cron/includes/cron_lock.php`), so a long or hung job holds up only itself — the next minute's dispatch picks up everything else in a second process.
Because the jobs share one PHP process, job code has three rules:
1. **Never `exit()` or `die()`.** It ends the whole cycle and every job after it. Use `cronJobStop($message, $exit_code)` instead: it exits when the script was run directly and unwinds back to the dispatcher when it wasn't, so both paths behave as they always have.
2. **Never declare a function or class another job might declare.** Two jobs each declaring the same helper is a fatal `Cannot redeclare` the moment they share a process. Shared helpers belong in `functions/`.
3. **Be safe to run twice in one day.** The dispatcher's lock stops overlap, but nothing stops a repeat: an admin presses Run Now after the scheduled pass, or a schedule is misconfigured. Work selected by a date match (`... = CURDATE()`) fires again on every run of that day unless something records that it happened — nightly's late fees and overdue reminders guard on the history rows they write. A job whose work cannot be made repeat-safe declares `'interval_safe' => false` in `includes/cron_jobs.php`, which locks it to the daily schedule in Maintenance > Cron and in the dispatcher.
4. **Set what you read.** One global scope and one set of `require_once` includes are shared across the cycle — a job's own `require_once "../config.php"` is a no-op if an earlier job already loaded it, and any variable an earlier job left behind is still there. Do not rely on the state a fresh process would have given you.
A job can also ship switched off with `'enabled' => 0` in the registry. The row is seeded disabled and stays that way until somebody turns it on in Maintenance > Cron. Use it for work an install should opt into rather than inherit silently from an upgrade — `backup` ships this way, because a full backup can be gigabytes a night.
### The master switch
`config_enable_cron` is a second, coarser switch that sits above the per-job ones. It is **not** enforced by the dispatcher — every job checks it in its own header and stops itself with `cronJobStop()`. A new job has to make that check too; one that skips it keeps running on an install that believes cron is off, which is exactly the trap `ticket_email_parser` and `ticket_sla` sat in until 26.08.
Be precise about what it does, because it is easy to oversell. It is **not** a guard on restored data: a full backup dumps the `settings` table, so a restored copy comes back with `config_enable_cron = 1` alongside every enabled `cron_jobs` row, exactly as production had them. What it gives you is one reversible bit — the fastest way to stop an install acting on live data once you have noticed, and the only way to stop everything without editing seven rows.
That last part is the reason it is not redundant with `cron_job_enabled`. Turning the switch off and back on returns you to exactly the configuration you had. Sweeping all seven rows off and back on does not: `backup` ships `'enabled' => 0`, so the sweep quietly turns on nightly backups nobody asked for, along with anything else that was deliberately disabled.
It defaults to `0`. That is a weaker guard than it looks — an install with no crontab entry runs nothing whatever the switch says, so the entry is the real gate — but it does mean adding the crontab line to a half-configured install is not enough on its own to start emailing. Both setup paths name the step on the way out.
## Backups
`functions/backup.php` is the whole engine, and all three entry points go through it: Maintenance > Backup, `cron/backup.php`, and `scripts/restore_cli.php`. Nothing else should dump, zip, or import a database.
Archives are AES-256 encrypted zips. The key is one value per install, generated on first use and appended to `config.php`**never** the database and **never** the file name. That is the point: a backup that leaks cannot be opened with anything the backup itself contains, and a URL or an access log never carries the key. The 32 random characters in the file name are an unguessable path component, nothing more. Note that `unzip`, Windows Explorer and the macOS Archive Utility cannot read AES zips; 7-Zip, WinZip, PeaZip and Keka can.
The web tier never builds an archive in the request. It writes a `Pending` row and `cron/backup.php` does the work, because a dump of a real install outlives `request_terminate_timeout` and `set_time_limit()` does not help. Same reasoning as Run Now.
Two rules for anything touching restore:
1. **Validate before you destroy.** The key is checked and the archive unpacked before a single table is dropped, and the live database is dumped to a rollback file first. If the import fails the rollback goes back in. `mysqli` throws rather than returning false under PHP 8.1's default report mode, so every statement in the import path is wrapped — an uncaught throw there leaves an install with no database at all.
2. **The archive does not get to decide what our guards say.** A restore wipes `uploads/`, and an archive is allowed to contain a `.htaccess`. `backupAssertUploadsGuards()` rewrites ours afterwards unconditionally, and the backup storage directory is preserved through the wipe so a restore cannot destroy every other archive on the box.
Retention lives in `nightly_tasks.php`, never in the backup job, so a failed backup cannot delete the archive it was supposed to replace. It never removes the newest complete backup, and an archive on disk with no row is **adopted** rather than deleted — after a restore the `backups` table is the old one, so everything made since looks unknown.
Setup's restore step closes itself once the `users` table has rows, whatever `config.php` says. It used to default `$config_enable_setup` to `1` when the flag was absent, which fails the wrong way: the flag is only appended at the end of a successful install, so an install abandoned in between left an unauthenticated endpoint that dropped every table, imported an arbitrary archive, and rewrote `uploads/` including the `.htaccess` that stops PHP running there.
Every script in `cron/` still runs standalone (`php cron/mail_queue.php`) and still takes its own lock when it does, so anything can be run by hand for testing.
---
## Security rules (non-negotiable)
ITFlow does not use prepared statements or an ORM; queries are built as strings. That works **only** if every value is neutralized before interpolation. The rules:
### 1. Every value interpolated into SQL is cast or sanitized. No exceptions.
- **Integers** (IDs, flags, counts): `intval($_POST['ticket_id'])`. Interpolate unquoted.
- **Strings**: `escapeSql($_POST['subject'])`. This normalizes encoding to UTF-8, then runs `strip_tags()`, `trim()`, and `mysqli_real_escape_string()`. Because it relies on SQL escaping, the value **must be placed inside quotes in the query** (`'$subject'`). An escaped string interpolated without quotes is still injectable.
- **Values read back from the database** get the same treatment before reuse in another query (you will see `escapeSql($row['ticket_prefix'])` throughout — this is why).
- **`logAudit()`, `appNotify()`, `logHistory()` and `logTicketHistory()` are queries too.** They interpolate their `$description` / `$details` / `$status` arguments straight into an `INSERT` — the SQL is just hidden inside the helper. A DB-read value passed into one of them (`logAudit("Asset", "Delete", "$asset_name ...", ...)`) must be `escapeSql`'d first, exactly as if you had written the `INSERT` by hand. This is easy to miss precisely because the call doesn't *look* like a query. Note that `escapeHtml()` is **not** a substitute here: it encodes `'` and `"` so it happens to block a quote-breakout, but it leaves backslashes untouched, so a value ending in `\` still escapes the closing quote. All four sinks now trim an odd trailing backslash as a backstop, but the value still owes `escapeSql` — the guard is defence-in-depth, not the fix.
If you write a query and even one variable in it skipped these, that is a SQL injection. This is the single most common review rejection.
**Fetch helpers return raw values — you escape them.** `getFieldById()` and `getTicketStatusName()` hand back exactly what is in the column. Escaping is the call site's job, the same as any other row you read:
```php
$client_name = escapeSql(getFieldById('clients', $client_id, 'client_name')); // into a query
$client_name = escapeHtml(getFieldById('clients', $client_id, 'client_name')); // into a page
$client_id = intval(getFieldById('tickets', $ticket_id, 'ticket_client_id')); // an id
```
Both helpers used to escape internally, via an `$escape_method` argument. It went badly: most call sites wrapped them in `escapeSql()` anyway and got a double-escaped value, so a client named `O'Brien` came back as `O\'Brien` and the backslash reached export filenames, PDF headings, flash messages and — on the user restore path — the database itself. A value that is already safe cannot be made safer, only wrong.
### 2. Every state-changing action validates CSRF.
`validateCSRFToken()` is the first line of every action block. It takes no argument — it reads `csrf_token` from `$_POST`, then `$_GET`, itself, so the same call covers form posts and link-style actions. (The signature still accepts an explicit token for callers that need one, but no call site in the tree passes one; use the bare form.) Forms and action links must include the token; copy how existing modals do it.
### 3. Every action enforces permissions.
`enforceUserPermission('module_x', level)` where level is `1` = read, `2` = write, `3` = full/delete. Current modules: `module_client`, `module_support`, `module_sales`, `module_financial`, `module_credential`, `module_reporting`. Read pages enforce level 1; create/edit enforce 2; destructive actions enforce 3. CSV/PDF exports are reads — gate them with the bare one-argument form, e.g. `enforceUserPermission('module_sales')`.
Two portals are gated differently, which is why their handlers look like they are missing the call:
- **Admin.** `admin/post.php` only loads anything in `admin/post/` when `$session_is_admin` is set, so admin handlers inherit the gate from the dispatcher and do not call `enforceUserPermission()` themselves.
- **Client portal.** `client/post.php` is a single file of action blocks rather than a dispatcher, and gates on the contact's own capabilities with `enforceContactCan('accounting'|'contacts'|'itdoc')`.
Everywhere else — anything under `agent/post/` — the call belongs in the block.
### 4. Client scoping is enforced, not assumed.
A user can be restricted to a subset of clients through `user_client_permissions`. Enforcing that has two halves, and a page usually needs both.
**One record — `enforceClientAccess()`.** After loading a record, call it (optionally with the record's client ID) so technicians restricted to specific clients cannot touch other clients' data by editing an ID in the URL. Look at how `resolve_ticket` does it.
**A list — `clientScopeSql()`.** Any query returning more than one row appends the fragment for that resource's own client column:
```php
$sql = mysqli_query($mysqli, "SELECT expense_id, expense_date, expense_amount, expense_description
FROM expenses
WHERE expense_archived_at IS NULL
" . clientScopeSql('expense_client_id') . "
ORDER BY expense_date DESC");
```
It returns `" AND ..."` or `""`, so it needs a `WHERE` to hang off — add `WHERE 1=1` if the query has no other condition. It is column-aware and takes an alias fine (`clientScopeSql('t.ticket_client_id')`). The API calls the same helper through the `apiClientScopeSql()` wrapper.
Scope on the resource's **own** column, not on a joined `clients.client_id`. Joining `clients` just to scope makes the filter depend on the join: with a `LEFT JOIN`, a row whose client column is `0` produces `NULL`, and `NULL IN (...)` is neither true nor false, so the row silently vanishes. If the query joins `clients` for `client_name`, keep the join for that — but still scope on the owning column.
**Records with no client (`0`) stay visible to restricted users.** `clientScopeSql()` emits `IN (0,...)` deliberately. Client restrictions partition *client* data, and a record belonging to no client is not any client's data to withhold. Do not hand-roll a variant that drops the `0` — the tree had accumulated several before this helper existed, disagreeing with each other, and reconciling them is what surfaced the inconsistency.
### 5. Escape on output.
Anything rendered into HTML goes through `escapeHtml()`. `escapeSql()` on the way in is **not** output escaping — data can enter the DB through other paths (API, email parser, older versions).
In practice the escaping happens **where the row is read, not where it is echoed**. A page or modal fetches its row and assigns each field through `escapeHtml()` once, then echoes the resulting variable raw:
```php
$row = mysqli_fetch_assoc($sql);
$asset_id = intval($row['asset_id']); // ints: intval, not escapeHtml
$asset_name = escapeHtml($row['asset_name']);
...
<strong><?php echo $asset_name; ?></strong>
```
Follow that pattern. Escaping at the echo instead would double-escape a value that is already safe, and mixing the two is how fields get missed. If you introduce a view variable that does not come from a row, escape it at assignment so the rule still holds at the top of the file.
A value that arrives through a fetch helper rather than a row read follows the same rule — `escapeHtml(getFieldById(...))` at the assignment, not at the echo. See rule 1.
Rich-text fields (TinyMCE content) are the exception and have their own handling; follow the existing pattern for the specific field rather than inventing one.
### 6. No shell-outs. No `eval`.
The project has deliberately moved off `shell_exec`/`exec` in favor of native PHP — `dns_get_record()` instead of `dig`, RDAP instead of `whois`, and so on. **Do not add new shell execution or `eval`.** PRs introducing either will be declined.
A handful of legacy call sites survive, all of them wrapping `git` or `which` in the self-update and diagnostics paths: `admin/debug.php`, `admin/update.php`, `admin/post/update.php`, `admin/post/backup.php`, `cron/cron.php`, `functions/app.php`, `scripts/update_cli.php`, `setup/index.php`. They are on the list to be replaced with direct `.git` file reads; treat them as debt, not as precedent.
### 7. Report vulnerabilities privately.
Per [SECURITY.md](SECURITY.md) — never in a public issue.
---
## Conventions
**Only technician-entered time is time worked.** `ticket_replies.ticket_reply_time_worked` is billable labour and feeds ticket totals, the technician and client time reports, project totals, invoicing and the API. A reply the *system* writes — assignment, priority change, merge, close, invoice/quote created, schedule edited, task completed or reopened — is an audit trail, not work, and records `'00:00:00'`. Only a value the technician actually typed goes in that column. Task completion estimates are planning information and stay on the task; they are never converted into time worked. `agent/ticket.php` hides the clock badge on a reply whose time is exactly `00:00:00`, so a zero renders as no time rather than as "0m".
**Database naming.** Every column is prefixed with the singular name of the entity it belongs to: `tickets.ticket_id`, `tickets.ticket_subject`, `clients.client_name`. This makes JOIN results unambiguous, so a `SELECT *` across joins is never *wrong*. New tables must follow it.
**Select the columns you use, not `*`.** Unambiguous is not the same as cheap. `SELECT *` across three joined tables fetches every column of all three, including the `*_notes` and `*_details` TEXT columns, and throws away whatever the page never renders. A search result list that shows five fields was pulling sixty. List the columns instead:
```php
$sql = mysqli_query($mysqli, "SELECT ticket_id, ticket_prefix, ticket_number, ticket_subject, client_name
FROM tickets
LEFT JOIN clients ON ticket_client_id = client_id
WHERE ticket_archived_at IS NULL
" . clientScopeSql('ticket_client_id') . "");
```
Two things follow from that:
- A query whose result only feeds `mysqli_num_rows()` needs no columns at all — write `SELECT 1`. Do not select a primary key "just in case": if the query joins two tables that both carry that column name, an unqualified `SELECT ticket_template_id` is an ambiguous-column error.
- Keep the join even when no column of the joined table survives into the `SELECT`, if the join is doing work — supplying a `WHERE` term, an `ORDER BY`, or the client column you scope on. Dropping a join is a separate decision from trimming the column list.
The trade is real and worth stating: `SELECT *` picks up new columns for free, an explicit list does not. Add a column to a table and every query that needs it must be updated by hand, and the failure mode is a blank field or a PHP 8 undefined-key warning rather than an error. That is the price of not fetching data nobody reads, and the project has decided to pay it on anything that loops or touches a TEXT column.
The exception is `api/v1/*/read.php`. Those endpoints hand the whole row to `read_output.php`, which serialises it straight into the JSON response — there the row *is* the output contract, so `SELECT *` is correct and trimming it would silently drop fields from every consumer.
The prefix is the entity name, which is usually but not always the singular of the table name. Where a table is named for its container rather than its row, the prefix follows the row: `calendar_events``event_*`, `asset_interfaces``interface_*`, `invoice_items` / `quote_items``item_*`, `rack_units``unit_*`, `user_roles``role_*`, `product_stock``stock_*`. Pick the prefix your columns will read best as and use it for every column in the table.
Two standing exceptions: junction tables (`client_tags`, `service_assets`, …) carry the two parent FK names unprefixed, and `settings` / `user_settings` use `config_*` / `user_config_*`.
**Schema changes require two edits in one PR:**
1. `db.sql` — so fresh installs get the new schema.
2. `admin/database_updates/<x.y.z>.php` — a new file named for the version it upgrades **to**, containing only the queries that apply the change. Migrations are sequential and rolling-release; never edit a historical file.
That is the whole job. `LATEST_DATABASE_VERSION` is derived from the highest-numbered filename in `admin/database_updates/`, and the runner (`admin/database_updates.php`) steps `config_current_database_version` after each file succeeds — so there is no constant to bump and no version-bump query to write. Each migration file needs the standard `defined('FROM_DB_UPDATER') || die(...)` guard at the top; copy an existing file's header.
A single update run applies every pending migration in order, stopping at the first failure with the version left at the last file that completed, so a re-run resumes at the one that broke.
**After acting, log and notify.** State changes call `logAudit($type, $action, $description, $client_id, $entity_id)` for the audit trail. User-facing events may also call `appNotify()`. Fire `triggerCustomAction()` where a site might reasonably want a hook. Then call `flashAlert($message, $type)` and `redirect()` (defaults to the referer) rather than setting session keys or `header()` manually.
**Function names (post-rename).** Helpers were renamed for clarity in 2026; the old names **no longer exist** — code calling them fatals. If you're rebasing an old PR or following an old tutorial, translate: `sanitizeInput``escapeSql`, `nullable_htmlentities``escapeHtml`, `logAction``logAudit`, `flash_alert``flashAlert`, `customAction``triggerCustomAction`, `encryptLoginEntry`/`decryptLoginEntry``encryptCredentialEntry`/`decryptCredentialEntry`, `strtoAZaz09``toAlphanumeric`, `fetchUpdates``checkForUpdates`, `sanitize_url``escapeUrl`.
One removed **variable** deserves its own warning: the old `$access_permission_query` global is gone, replaced by `clientScopeSql()` (security rule 4). Unlike a removed function, it does not fatal — an undefined variable interpolates as an empty string, so a rebased query keeps running with **no client scoping at all**. Grep for it before rebasing anything that touches a list query.
**Helpers that fetch data return it raw.** If you add a `getXById()`-style helper, return the column value untouched and let callers escape it (security rule 1). Validating what the helper interpolates into its *own* query — table and column names, the id — is still the helper's job; that is query construction, not output escaping, and the two are not the same thing.
**Bulk vs. single actions.** If you change the behavior of a single action (e.g. resolving a ticket), check whether a `bulk_*` counterpart exists and update it too. They are currently parallel implementations and drift between them is a known bug source.
**UI.** Bootstrap 4 / AdminLTE, modals per-module under `<portal>/modals/<module>/`, DataTables for lists, monospace styling for technical data (IPs, serials, keys) and proportional for human text. Match the page you're standing in.
**Modals post to the portal you are standing in, not the one they live in.** Modal forms use `action="post.php"`, which the browser resolves against the *page* URL, not the modal's own path. A modal under `admin/modals/` that an agent page opens by relative path therefore submits to `agent/post.php` and is handled by `agent/post/`, not `admin/post/`. If you reuse a modal across portals, every portal that can open it needs a handler that accepts the same field set — otherwise fields are silently dropped on one side.
**Style.** Procedural PHP, 4-space indentation, LF line endings, code and comments in English. Match the surrounding code rather than importing a personal style. Don't reformat code you aren't changing — it buries the real diff.
Line endings and indentation are enforced by `.gitattributes` and `.editorconfig` at the repo root, so an editor that respects EditorConfig needs no configuration. `.gitattributes` marks `libs/` as `-text`: vendored code is preserved byte-for-byte as shipped upstream and must never be normalized, or the next wholesale library update turns into an unreviewable diff.
---
## Pull requests
- **Small, focused diffs.** One feature or one fix per PR. Never mix relocation/reformatting with logic changes — split them into separate commits or PRs so each is reviewable on its own.
- Describe **what** and **why**, and note any schema changes prominently.
- CI runs PHP lint and db.sql lint; SonarCloud scans for security issues. Green checks are required but not sufficient — the conventions above are checked by human review.
- Test your change against a real install: fresh setup from `db.sql` **and** an upgrade via `database_updates.php` if you touched schema.
- For anything larger than a bug fix, **open an issue first** and discuss the approach. ITFlow's roadmap favors incremental modernization of the existing PHP codebase; large rewrites, framework introductions, and new runtime dependencies are out of scope.
## Getting help
Ask in the community forum linked from the README. When in doubt about a convention, find the closest existing example in the codebase and follow it — consistency beats novelty here.

116
README.md
View File

@@ -3,15 +3,10 @@
<!-- PROJECT SHIELDS -->
[![Contributors][contributors-shield]][contributors-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![Commits][commit-shield]][commit-url]
[![GPL License][license-shield]][license-url]
<!-- PROJECT LOGO -->
<div align="center">
<!-- <a href="https://github.com/itflow-org/itflow">
<img src="images/logo.png" alt="Logo" width="80" height="80">
</a> -->
<h3 align="center">ITFlow</h3>
@@ -21,18 +16,20 @@
<br />
<a href="https://demo.itflow.org"><strong>View demo</strong></a>
<br />
Username: <b>demo@demo</b> | Password: <b>demo</b>
Username: <b>demo@demo.com</b> | Password: <b>demo</b>
<br />
<br />
<a href="https://itflow.org/index.php?page=About">About</a>
<a href="https://itflow.org/#about">About</a>
·
<a href="https://itflow.org/docs.php">Docs</a>
<a href="https://docs.itflow.org">Docs</a>
·
<a href="https://forum.itflow.org/">Forum</a>
·
<a href="https://github.com/itflow-org/itflow/issues">Report Bug</a>
<a href="https://forum.itflow.org/t/bug">Report Bug</a>
·
<a href="https://forum.itflow.org/t/features">Request Feature</a>
<a href="https://forum.itflow.org/t/features">Suggest Feature</a>
·
<a href="https://github.com/itflow-org/itflow/security/policy">Security</a>
</p>
</div>
@@ -45,99 +42,66 @@
### The Problem
- You're a busy MSP with 101 things to do.
- Information about your clients is unorganised and unstructured: scattered in random tickets or folders - when you do eventually find it, it's out of date.
- For some issues, you spend longer looking for the relevant documentation than actually working the ticket.
- On top of the technical day to day, you also have to take care of the financial side of the business - consistent pricing, quotes/invoicing, and accounting.
- You're a small but busy managed service provider with 101 things to do. Information about your clients is unorganised, unstructured and outdated.
- For some work, you seem to spend longer looking for the relevant documentation than actually working on the issue/project.
- MSP tools can be expensive, with recurring licensing costs adding up quickly.
- On top of the technical day-to-day, you also have to take care of the financial side of the business - consistent pricing, quotes/invoicing, and accounting.
### The Solution: ITFlow
- ITFlow consolidates common MSP needs (documentation, ticketing, and accounting) into one system
- ITFlow consolidates common MSP needs (documentation, ticketing and billing) into one unified, free platform that you control.
### In Beta
* This project is in beta with many ongoing changes. Updates may unintentionally introduce bugs/security issues.
* Whilst we are confident the code is safe, nothing in life is 100% safe or risk-free. Use your best judgement before deciding to store highly confidential information in ITFlow.
* We are hoping to have a stable 1.0 release by April/May 2023.
## Getting Started
<!-- BUILT WITH -->
### Built With
### Self Hosting
- The best installation method is to use the [install script](https://docs.itflow.org/installation_script) on Ubuntu/Debian. See the [video](https://www.youtube.com/watch?v=kKz9NOU_1XE) walk through.
```
wget -O itflow_install.sh https://github.com/itflow-org/itflow-install-script/raw/main/itflow_install.sh
bash itflow_install.sh
```
- Other manual installation methods are available in the [docs](https://docs.itflow.org/installation).
* Backend / PHP libs
* PHP
* MariaDB
* PHPMailer
* HTML Purifier
* PHP Mime Mail Parser
* CSS
* Bootstrap
* AdminLTE
* fontawesome
* JS Libraries
* chart.js
* moments.js
* jQuery
* pdfmake
* Select2
* SummerNote
* FullCalendar.io
<!-- GETTING STARTED -->
## Getting Started / Installation
ITFlow is self-hosted. There is a full installation guide in the [docs](https://wiki.itflow.org/doku.php?id=wiki:installation), but the main steps are:
1. Install a LAMP stack (Linux, Apache, MariaDB, PHP)
```sh
sudo apt install git apache2 php libapache2-mod-php php-intl php-imap php-mailparse php-mysqli php-curl mariadb-server
```
2. Clone the repo
```sh
git clone https://github.com/itflow-org/itflow.git /var/www/html
```
3. Create a MariaDB Database
4. Point your browser to your HTTPS web server to begin setup
### Managed Hosting
- If you'd prefer, we can [host ITFlow for you](https://services.itflow.org/hosting.php) (coming soon).
<!-- FEATURES -->
## Key Features
* Client documentation - assets, contacts, domains, docs, files, passwords, and more
* Accounting / Billing - finance dashboard, quotes, invoices, accounting, expenses, etc
* Client Portal - self service quote/invoice/ticket management for clients
* Alerting - account balance, invoices, domain/SSL renewals
* Completely free & open-source alternative to ITGlue and Hudu
* Client documentation - assets, contacts, domains, docs/files, passwords, tickets, and more
* Billing - quotes, invoices and expenses, with Stripe integration for online payments
* Alerting - domain and SSL expiry/renewals
* Client Portal - self service quote, invoice, and ticket management for clients
<!-- ROADMAP -->
## Roadmap / Future to-do
* Comprehensive API to allow custom third party integration
* CalDAV to integrate with 3rd party calendars
* CardDAV to integrate with 3rd party Address books
* Recent caller toast alerts to click and bring up the clients account right away
* FIDO2 WebAuthn Support for passwordless auth (TPM Fingerprint), (USB Hardware keys such as Yubikey)
See the [forum](https://forum.itflow.org/d/11-road-map) and the [open issues](https://github.com/itflow-org/itflow/issues) for a full list of proposed features & known issues.
We track the implementation of confirmed features and bugs via [TaskFlow](https://tasks.dev.itflow.org/tasks.php). Use the [forum](https://forum.itflow.org) to suggest new features or report bugs.
<!-- CONTRIBUTING -->
## Support & Contributions
### Forum
For help using ITFlow, feature requests, and general ideas / discussions please use the community [forum](https://forum.itflow.org).
For bugs, please raise an [issue](https://github.com/itflow-org/itflow/issues).
For help using ITFlow, bugs, feature suggestions, and other general ideas or discussions, please use the community [forum](https://forum.itflow.org).
### Contributing
If you are able to make a contribution that would make ITFlow better, please fork the repo and create a pull request. Please make sure you're following our [code standards](https://wiki.itflow.org/doku.php?id=wiki:code_standards).
For large changes / new features, please discuss the issue with other contributors first.
We have temporarily paused PRs from the community.
#### Contributors
<a href="https://github.com/itflow-org/itflow/graphs/contributors">
<img src="https://contrib.rocks/image?repo=itflow-org/itflow" />
</a>
<!-- LICENSE -->
## License
### Supporters
Were incredibly grateful to the organizations and individuals who [sponsor](https://services.itflow.org) the project - a big thank you to:
- CompuMatter
- F1 for HELP
- digiBandit
## License
ITFlow is distributed "as is" under the GPL License, WITHOUT WARRANTY OF ANY KIND. See [`LICENSE`](https://github.com/itflow-org/itflow/blob/master/LICENSE) for details.
## Security
* We've had a stable release of the project since Jan 2025.
* Whilst we are confident in the safety of the code, no system is risk-free. Nearly all software has bugs. Use your best judgement before storing highly confidential information in ITFlow.
* If you have a security concern, privately report it [here](https://github.com/itflow-org/itflow/security/policy).
<!-- MARKDOWN LINKS & IMAGES -->
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->

View File

@@ -1,23 +1,26 @@
# Security Policy
## In Beta
## **Please do NOT report security concerns/vulnerabilities publicly**
ITFlow is currently in beta and is a work in progress.
**ITFlow stores important information, so we take security seriously**
**We take security seriously.** Whilst we are confident the code is safe, nothing in life is 100% safe or risk-free. You should use your best judgment before entering confidential information into the app.
We attempt to follow security best practices where possible, including [automated code scanning](https://sonarcloud.io/component_measures?id=itflow-org_itflow&metric=security_rating&view=list).
- Whilst we are confident in the safety of the code, no system is risk-free. Nearly all software has bugs.
- Use your best judgement before storing highly confidential information in ITFlow.
- We attempt to follow security best practices where possible, including automated code scanning.
## Supported Versions
We operate a rolling release model. Any bug fixes will be released into latest version of ITFlow, so you must stay up-to-date.
| Version | Supported |
| ------- | ------------------ |
| Beta | :white_check_mark: |
|---------| ------------------ |
| 26.09 | :white_check_mark: |
## Reporting a Vulnerability
**<ins>Please do not report security vulnerabilities through public GitHub issues.</ins>**
If you have discovered a security issue, please [report it](https://github.com/itflow-org/itflow/security/advisories/new) to us in as much detail as possible, so we can fix it. You should expect to receive an initial acknowledgement within 72 hours.
## Reporting a Vulnerability via GitHub Security Advisories
**Security contact: [GitHub Security Advisories](https://github.com/itflow-org/itflow/security/advisories/new)**
If you have discovered a security issue, please **[report it](https://github.com/itflow-org/itflow/security/advisories/new)** to us so we can fix it.
You should expect to receive an initial acknowledgement within 7 days. If you don't receive any feedback, we may have missed the initial email from GitHub (we're human!). Please raise a forum discussion quoting ONLY the assigned GHSA ref.
Note: Please don't submit AI slop. AI can be useful for drafting and research, but you are responsible for reviewing and validating anything you submit. We reserve the right to restrict repository access if you repeatedly ignore this requirement.

View File

@@ -1,61 +0,0 @@
<div class="modal" id="addAccountModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content bg-dark">
<div class="modal-header">
<h5 class="modal-title"><i class="fa fa-fw fa-piggy-bank mr-2"></i>New Account</h5>
<button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<form action="post.php" method="post" autocomplete="off">
<div class="modal-body bg-white">
<div class="form-group">
<label>Account Name <strong class="text-danger">*</strong></label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-piggy-bank"></i></span>
</div>
<input type="text" class="form-control" name="name" placeholder="Account name" required autofocus>
</div>
</div>
<div class="form-group">
<label>Opening Balance</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-dollar-sign"></i></span>
</div>
<input type="number" class="form-control" step="0.01" min="0" name="opening_balance" placeholder="Opening Balance" required>
</div>
</div>
<div class="form-group">
<label>Currency <strong class="text-danger">*</strong></label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-money-bill"></i></span>
</div>
<select class="form-control select2" name="currency_code" required>
<option value="">- Currency -</option>
<?php foreach ($currencies_array as $currency_code => $currency_name) { ?>
<option <?php if ($session_company_currency == $currency_code) { echo "selected"; } ?> value="<?php echo $currency_code; ?>"><?php echo "$currency_code - $currency_name"; ?></option>
<?php } ?>
</select>
</div>
</div>
<div class="form-group">
<label>Notes</label>
<textarea class="form-control" rows="5" placeholder="Enter some notes" name="notes"></textarea>
</div>
</div>
<div class="modal-footer bg-white">
<button type="submit" name="add_account" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create</button>
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
</div>
</form>
</div>
</div>
</div>

View File

@@ -1,37 +0,0 @@
<div class="modal" id="editAccountModal<?php echo $account_id; ?>" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content bg-dark">
<div class="modal-header">
<h5 class="modal-title"><i class="fa fa-fw fa-piggy-bank mr-2"></i>Editing account: <strong><?php echo $account_name; ?></strong></h5>
<button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<form action="post.php" method="post" autocomplete="off">
<input type="hidden" name="account_id" value="<?php echo $account_id; ?>">
<div class="modal-body bg-white">
<div class="form-group">
<label>Account Name <strong class="text-danger">*</strong></label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-piggy-bank"></i></span>
</div>
<input type="text" class="form-control" name="name" value="<?php echo $account_name; ?>" placeholder="Account name" required>
</div>
</div>
<div class="form-group">
<label>Notes</label>
<textarea class="form-control" rows="5" placeholder="Enter some notes" name="notes"><?php echo $account_notes; ?></textarea>
</div>
</div>
<div class="modal-footer bg-white">
<button type="submit" name="edit_account" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button>
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
</div>
</form>
</div>
</div>
</div>

View File

@@ -1,114 +0,0 @@
<?php
// Default Column Sortby Filter
$sb = "account_name";
$o = "ASC";
require_once("inc_all.php");
//Rebuild URL
$url_query_strings_sb = http_build_query(array_merge($_GET, array('sb' => $sb, 'o' => $o)));
$sql = mysqli_query(
$mysqli,
"SELECT SQL_CALC_FOUND_ROWS * FROM accounts
WHERE account_name LIKE '%$q%' AND company_id = $session_company_id
ORDER BY $sb $o LIMIT $record_from, $record_to"
);
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<div class="card card-dark">
<div class="card-header py-2">
<h3 class="card-title mt-2"><i class="fa fa-fw fa-piggy-bank mr-2"></i>Accounts</h3>
<div class="card-tools">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addAccountModal"><i class="fas fa-plus mr-2"></i>New Account</button>
</div>
</div>
<div class="card-body">
<form autocomplete="off">
<div class="input-group">
<input type="search" class="form-control col-md-4" name="q" value="<?php if (isset($q)) { echo stripslashes(htmlentities($q)); } ?>" placeholder="Search Accounts">
<div class="input-group-append">
<button class="btn btn-primary"><i class="fa fa-search"></i></button>
</div>
</div>
</form>
<hr>
<div class="table-responsive">
<table class="table table-striped table-borderless table-hover">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=account_name&o=<?php echo $disp; ?>">Name</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=account_currency_code&o=<?php echo $disp; ?>">Currency</a></th>
<th class="text-right">Balance</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_array($sql)) {
$account_id = intval($row['account_id']);
$account_name = htmlentities($row['account_name']);
$opening_balance = floatval($row['opening_balance']);
$account_currency_code = htmlentities($row['account_currency_code']);
$account_notes = htmlentities($row['account_notes']);
$sql_payments = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS total_payments FROM payments WHERE payment_account_id = $account_id");
$row = mysqli_fetch_array($sql_payments);
$total_payments = floatval($row['total_payments']);
$sql_revenues = mysqli_query($mysqli, "SELECT SUM(revenue_amount) AS total_revenues FROM revenues WHERE revenue_account_id = $account_id");
$row = mysqli_fetch_array($sql_revenues);
$total_revenues = floatval($row['total_revenues']);
$sql_expenses = mysqli_query($mysqli, "SELECT SUM(expense_amount) AS total_expenses FROM expenses WHERE expense_account_id = $account_id");
$row = mysqli_fetch_array($sql_expenses);
$total_expenses = floatval($row['total_expenses']);
$balance = $opening_balance + $total_payments + $total_revenues - $total_expenses;
?>
<tr>
<td><a class="text-dark" href="#" data-toggle="modal" data-target="#editAccountModal<?php echo $account_id; ?>"><?php echo $account_name; ?></a></td>
<td><?php echo $account_currency_code; ?></td>
<td class="text-right"><?php echo numfmt_format_currency($currency_format, $balance, $account_currency_code); ?></td>
<td>
<div class="dropdown dropleft text-center">
<button class="btn btn-secondary btn-sm" type="button" data-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editAccountModal<?php echo $account_id; ?>">
<i class="fas fa-fw fa-edit mr-2"></i>Edit
</a>
<?php if ($balance == 0) { //Cannot Archive an Account until it reaches 0 Balance ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="post.php?archive_account=<?php echo $account_id; ?>">
<i class="fas fa-fw fa-archive mr-2"></i>Archive
</a>
<?php } ?>
</div>
</div>
</td>
</tr>
<?php
include("account_edit_modal.php");
}
?>
</tbody>
</table>
</div>
<?php require_once("pagination.php"); ?>
</div>
</div>
<?php
require_once("account_add_modal.php");
require_once("footer.php");

127
admin/ai_models.php Normal file
View File

@@ -0,0 +1,127 @@
<?php
// Default Column Sortby Filter
$sort = "ai_model_name";
$order = "ASC";
require_once "includes/inc_all_admin.php";
$sql = mysqli_query($mysqli, "SELECT SQL_CALC_FOUND_ROWS ai_model_id, ai_model_name, ai_model_prompt, ai_model_use_case, ai_provider_id,
ai_provider_name FROM ai_models LEFT JOIN ai_providers ON ai_model_ai_provider_id = ai_provider_id
WHERE ai_model_name LIKE '%$q%' OR ai_provider_name LIKE '%$q%'
ORDER BY $sort $order LIMIT $record_from, $record_to");
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<ol class="breadcrumb d-print-none">
<li class="breadcrumb-item">
<a href="/admin">Admin</a>
</li>
<li class="breadcrumb-item">
<a href="ai_providers.php">AI Providers</a>
</li>
<li class="breadcrumb-item active">AI Models</li>
</ol>
<div class="card">
<div class="card-header bg-dark py-2">
<h3 class="card-title mt-2"><i class="fas fa-fw fa-robot me-2"></i>AI Models</h3>
<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/ai/ai_model_add.php"><i class="fas fa-plus me-2"></i>Add Model</button>
</div>
</div>
<div class="card-header py-3">
<form autocomplete="off">
<div class="row g-2 align-items-center">
<div class="col-md-4">
<div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(escapeHtml($q)); } ?>" placeholder="Search AI Models">
<button class="btn btn-primary"><i class="fa fa-search"></i></button>
</div>
</div>
</div>
</form>
</div>
<div class="table-responsive-sm">
<table class="table table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<th class="ps-3">
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=ai_model_name&order=<?= $disp ?>">
Model <?php if ($sort == 'ai_model_name') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=ai_provider_name&order=<?= $disp ?>">
Provider <?php if ($sort == 'ai_provider_name') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=ai_model_use_case&order=<?= $disp ?>">
Use Case<?php if ($sort == 'ai_model_use_case') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark">Prompt</a>
</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($sql)) {
$provider_id = intval($row['ai_provider_id']);
$provider_name = escapeHtml($row['ai_provider_name']);
$model_id = intval($row['ai_model_id']);
$model_name = escapeHtml($row['ai_model_name']);
$use_case = escapeHtml($row['ai_model_use_case']);
$prompt = nl2br(escapeHtml($row['ai_model_prompt']));
?>
<tr>
<td class="ps-3">
<a class="text-dark text-bold ajax-modal" href="#"
data-modal-url="modals/ai/ai_model_edit.php?id=<?= $model_id ?>">
<?= $model_name ?>
</a>
</td>
<td><?= $provider_name ?></td>
<td><?= $use_case ?></td>
<td><?= $prompt ?></td>
<td>
<div class="dropdown dropstart text-center">
<button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item ajax-modal" href="#"
data-modal-url="modals/ai/ai_model_edit.php?id=<?= $model_id ?>">
<i class="fas fa-fw fa-edit me-2"></i>Edit
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger confirm-link" href="post.php?delete_ai_model=<?= $model_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash me-2"></i>Delete
</a>
</div>
</div>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<?php require_once "../includes/filter_footer.php"; ?>
</div>
<?php
require_once "../includes/footer.php";

118
admin/ai_providers.php Normal file
View File

@@ -0,0 +1,118 @@
<?php
// Default Column Sortby Filter
$sort = "ai_provider_name";
$order = "ASC";
require_once "includes/inc_all_admin.php";
$sql = mysqli_query($mysqli, "SELECT SQL_CALC_FOUND_ROWS ai_provider_api_key, ai_provider_api_url, ai_provider_id, ai_provider_name FROM ai_providers
WHERE ai_provider_name LIKE '%$q%' OR ai_provider_api_url LIKE '%$q%'
ORDER BY $sort $order LIMIT $record_from, $record_to");
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<div class="card">
<div class="card-header bg-dark py-2">
<h3 class="card-title mt-2"><i class="fas fa-fw fa-robot me-2"></i>AI Providers</h3>
<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/ai/ai_provider_add.php"><i class="fas fa-plus me-2"></i>Add Provider</button>
</div>
</div>
<div class="card-header py-3">
<form autocomplete="off">
<div class="row g-2 align-items-center">
<div class="col-md-4">
<div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(escapeHtml($q)); } ?>" placeholder="Search AI Providers">
<button class="btn btn-primary"><i class="fa fa-search"></i></button>
</div>
</div>
</div>
</form>
</div>
<div class="table-responsive-sm">
<table class="table table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<th class="ps-3">
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=ai_provider_name&order=<?= $disp ?>">
Provider <?php if ($sort == 'ai_provider_name') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=ai_provider_api_url&order=<?= $disp ?>">
URL <?php if ($sort == 'ai_provider_api_url') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=ai_provider_api_key&order=<?= $disp ?>">
Key <?php if ($sort == 'ai_provider_api_key') { echo $order_icon; } ?>
</a>
</th>
<th class="text-center">
<a class="text-dark">Models</a>
</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($sql)) {
$provider_id = intval($row['ai_provider_id']);
$provider_name = escapeHtml($row['ai_provider_name']);
$url = escapeHtml($row['ai_provider_api_url']);
$key = escapeHtml($row['ai_provider_api_key']);
$row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('ai_model_id') AS ai_model_count FROM ai_models WHERE ai_model_ai_provider_id = $provider_id"));
$ai_model_count = intval($row['ai_model_count']);
?>
<tr>
<td class="ps-3">
<a class="text-dark text-bold ajax-modal" href="#"
data-modal-url="modals/ai/ai_provider_edit.php?id=<?= $provider_id ?>">
<?= $provider_name ?>
</a>
</td>
<td><?= $url ?></td>
<td><?= $key ?></td>
<td class="text-center">
<a class="badge bg-dark rounded-pill p-2" href="ai_models.php"><?= $ai_model_count ?></a>
<td>
<div class="dropdown dropstart text-center">
<button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item ajax-modal" href="#"
data-modal-url="modals/ai/ai_provider_edit.php?id=<?= $provider_id ?>">
<i class="fas fa-fw fa-edit me-2"></i>Edit
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger confirm-link" href="post.php?delete_ai_provider=<?= $provider_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash me-2"></i>Delete
</a>
</div>
</div>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<?php require_once "../includes/filter_footer.php"; ?>
</div>
<?php
require_once "../includes/footer.php";

169
admin/api_keys.php Normal file
View File

@@ -0,0 +1,169 @@
<?php
// Default Column Sortby Filter
$sort = "api_key_name";
$order = "ASC";
require_once "includes/inc_all_admin.php";
$sql = mysqli_query(
$mysqli,
"SELECT SQL_CALC_FOUND_ROWS api_key_created_at, api_key_expire, api_key_id, api_key_name, api_key_secret, user_name FROM api_keys
LEFT JOIN users on api_key_user_id = user_id
WHERE (api_key_name LIKE '%$q%')
ORDER BY $sort $order LIMIT $record_from, $record_to"
);
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<div class="card">
<div class="card-header bg-dark py-2">
<h3 class="card-title mt-2"><i class="fas fa-fw fa-key me-2"></i>API Keys</h3>
<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/api/api_key_add.php"><i class="fas fa-plus me-2"></i>New API Key</button>
</div>
</div>
<div class="card-header py-3">
<form autocomplete="off">
<div class="row g-2 align-items-center">
<div class="col-md-4">
<div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(escapeHtml($q)); } ?>" placeholder="Search keys">
<button class="btn btn-primary"><i class="fa fa-search"></i></button>
</div>
</div>
<div class="col-md-8">
<div class="btn-group float-end">
<div class="dropdown ms-2" id="bulkActionButton" hidden>
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown">
<i class="fas fa-fw fa-layer-group me-2"></i>Bulk Action (<span id="selectedCount">0</span>)
</button>
<div class="dropdown-menu">
<button class="dropdown-item text-danger text-bold"
type="submit" form="bulkActions" name="bulk_delete_api_keys">
<i class="fas fa-fw fa-trash me-2"></i>Delete
</button>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="table-responsive-sm">
<form id="bulkActions" action="post.php" method="post">
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
<table class="table table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<td class="checkbox-column border-end">
<div class="form-check">
<input class="form-check-input" id="selectAllCheckbox" type="checkbox" onclick="checkAll(this)">
</div>
</td>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=api_key_name&order=<?= $disp ?>">
Name <?php if ($sort == 'api_key_name') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=api_key_user_id&order=<?= $disp ?>">
User <?php if ($sort == 'api_key_user_id') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=api_key_secret&order=<?= $disp ?>">
Secret <?php if ($sort == 'api_key_secret') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=api_key_created_at&order=<?= $disp ?>">
Created <?php if ($sort == 'api_key_created_at') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=api_key_expire&order=<?= $disp ?>">
Expires <?php if ($sort == 'api_key_expire') { echo $order_icon; } ?>
</a>
</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($sql)) {
$api_key_id = intval($row['api_key_id']);
$api_key_name = escapeHtml($row['api_key_name']);
$api_key_secret = escapeHtml("************" . substr($row['api_key_secret'], -4));
$api_key_created_at = escapeHtml($row['api_key_created_at']);
$api_key_expire = escapeHtml($row['api_key_expire']);
if ($api_key_expire < date("Y-m-d H:i:s")) {
$api_key_expire = $api_key_expire . " (Expired)";
}
$api_key_user = !empty($row['user_name']) ? escapeHtml($row['user_name']) : "<i>None</i>";
?>
<tr>
<td class="checkbox-column bg-light border-end">
<div class="form-check">
<input class="form-check-input bulk-select" type="checkbox" name="api_key_ids[]" value="<?= $api_key_id ?>">
</div>
</td>
<td class="text-bold"><?= $api_key_name ?></td>
<td><?= $api_key_user ?></td>
<td><?= $api_key_secret ?></td>
<td><?= $api_key_created_at ?></td>
<td><?= $api_key_expire ?></td>
<td>
<div class="dropdown dropstart text-center">
<button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item ajax-modal" href="#" data-modal-url="modals/api/api_key_edit.php?id=<?= $api_key_id ?>">
<i class="fas fa-fw fa-edit me-2"></i>Edit
</a>
<?php if ($api_key_expire > date("Y-m-d H:i:s")) { ?>
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?revoke_api_key=<?= $api_key_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-times me-2"></i>Revoke
</a>
<?php } ?>
<?php if ($api_key_expire < date("Y-m-d H:i:s")) { ?>
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?delete_api_key=<?= $api_key_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-times me-2"></i>Delete
</a>
<?php } ?>
</div>
</div>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</form>
</div>
<?php require_once "../includes/filter_footer.php"; ?>
</div>
<script src="../js/bulk_actions.js"></script>
<?php
require_once "../includes/footer.php";

170
admin/app_logs.php Normal file
View File

@@ -0,0 +1,170 @@
<?php
// Default Column Sortby Filter
$sort = "app_log_id";
$order = "DESC";
require_once "includes/inc_all_admin.php";
// Log Type Filter
if (isset($_GET['type']) & !empty($_GET['type'])) {
$log_type_query = "AND (app_log_type = '" . escapeSql($_GET['type']) . "')";
$type_filter = escapeHtml($_GET['type']);
} else {
// Default - any
$log_type_query = '';
$type_filter = '';
}
// Log Category Filter
if (isset($_GET['category']) & !empty($_GET['catergory'])) {
$log_category_query = "AND (app_log_category = '" . escapeSql($_GET['category']) . "')";
$category_filter = escapeHtml($_GET['category']);
} else {
// Default - any
$log_category_query = '';
$category_filter = '';
}
$sql = mysqli_query(
$mysqli,
"SELECT SQL_CALC_FOUND_ROWS app_log_category, app_log_created_at, app_log_details, app_log_id, app_log_type FROM app_logs
WHERE (app_log_type LIKE '%$q%' OR app_log_category LIKE '%$q%' OR app_log_details LIKE '%$q%')
AND DATE(app_log_created_at) BETWEEN '$dtf' AND '$dtt'
$log_type_query
$log_category_query
ORDER BY $sort $order LIMIT $record_from, $record_to"
);
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<div class="card">
<div class="card-header bg-dark py-2">
<h3 class="card-title"><i class="fas fa-fw fa-history me-2"></i>App Logs</h3>
</div>
<div class="card-header py-3">
<form autocomplete="off">
<div class="row g-2 align-items-end">
<div class="col-sm-4">
<div>
<div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(escapeHtml($q)); } ?>" placeholder="Search app logs">
<button class="btn btn-secondary" type="button" data-bs-toggle="collapse" data-bs-target="#advancedFilter"><i class="fas fa-filter"></i></button>
<button class="btn btn-primary"><i class="fa fa-search"></i></button>
</div>
</div>
</div>
<div class="col-sm-2">
<div>
<select class="form-select select2" name="type" onchange="this.form.submit()">
<option value="">- All Types -</option>
<?php
$sql_types_filter = mysqli_query($mysqli, "SELECT DISTINCT app_log_type FROM app_logs ORDER BY app_log_type ASC");
while ($row = mysqli_fetch_assoc($sql_types_filter)) {
$log_type = escapeHtml($row['app_log_type']);
?>
<option <?php if ($type_filter == $log_type) { echo "selected"; } ?>><?= $log_type ?></option>
<?php
}
?>
</select>
</div>
</div>
<div class="col-sm-2">
<div>
<select class="form-select select2" name="category" onchange="this.form.submit()">
<option value="">- All Categories -</option>
<?php
$sql_categories_filter = mysqli_query($mysqli, "SELECT DISTINCT app_log_category FROM app_logs ORDER BY app_log_category ASC");
while ($row = mysqli_fetch_assoc($sql_categories_filter)) {
$log_category = escapeHtml($row['app_log_category']);
?>
<option <?php if ($category_filter == $log_category) { echo "selected"; } ?>><?= $log_category ?></option>
<?php
}
?>
</select>
</div>
</div>
</div>
<div class="collapse mt-3 <?php if (isset($_GET['dtf']) && $_GET['dtf'] !== '1970-01-01') { echo "show"; } ?>" id="advancedFilter">
<div class="row g-3">
<div class="col-md-3">
<div>
<label class="form-label">Date range</label>
<input type="text" id="dateFilter" class="form-control" autocomplete="off">
<input type="hidden" name="canned_date" id="canned_date" value="<?= escapeHtml($_GET['canned_date']) ?? '' ?>">
<input type="hidden" name="dtf" id="dtf" value="<?= escapeHtml($dtf ?? '') ?>">
<input type="hidden" name="dtt" id="dtt" value="<?= escapeHtml($dtt ?? '') ?>">
</div>
</div>
</div>
</div>
</form>
</div>
<div class="table-responsive-sm">
<table class="table table-sm table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<th class="ps-3">
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=app_log_created_at&order=<?= $disp ?>">
Timestamp <?php if ($sort == 'app_log_created_at') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=app_log_type&order=<?= $disp ?>">
Type <?php if ($sort == 'app_log_type') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=app_log_category&order=<?= $disp ?>">
Category <?php if ($sort == 'app_log_category') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=app_log_details&order=<?= $disp ?>">
Details <?php if ($sort == 'app_log_details') { echo $order_icon; } ?>
</a>
</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($sql)) {
$log_id = intval($row['app_log_id']);
$log_type = escapeHtml($row['app_log_type']);
$log_category = escapeHtml($row['app_log_category']);
$log_details = escapeHtml($row['app_log_details']);
$log_created_at = escapeHtml($row['app_log_created_at']);
?>
<tr>
<td class="font-monospace ps-3"><?= $log_created_at ?></td>
<td><?= $log_type ?></td>
<td><?= $log_category ?></td>
<td><?= $log_details ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<?php require_once "../includes/filter_footer.php";
?>
</div>
<?php
require_once "../includes/footer.php";

288
admin/audit_logs.php Normal file
View File

@@ -0,0 +1,288 @@
<?php
// Default Column Sortby Filter
$sort = "log_id";
$order = "DESC";
require_once "includes/inc_all_admin.php";
// User Filter
if (isset($_GET['user']) & !empty($_GET['user'])) {
$user_query = 'AND (log_user_id = ' . intval($_GET['user']) . ')';
$user_filter = intval($_GET['user']);
} else {
// Default - any
$user_query = '';
$user_filter = '';
}
// Client Filter
if (isset($_GET['client']) & !empty($_GET['client'])) {
$client_query = 'AND (log_client_id = ' . intval($_GET['client']) . ')';
$client_filter = intval($_GET['client']);
} else {
// Default - any
$client_query = '';
$client_filter = '';
}
// Log Type Filter
if (isset($_GET['type']) & !empty($_GET['type'])) {
$log_type_query = "AND (log_type = '" . escapeSql($_GET['type']) . "')";
$type_filter = escapeHtml($_GET['type']);
} else {
// Default - any
$log_type_query = '';
$type_filter = '';
}
// Log Action Filter
if (isset($_GET['action']) & !empty($_GET['action'])) {
$log_action_query = "AND (log_action = '" . escapeSql($_GET['action']) . "')";
$action_filter = escapeHtml($_GET['action']);
} else {
// Default - any
$log_action_query = '';
$action_filter = '';
}
/*
* The date filter is a half-open range rather than DATE(log_created_at) BETWEEN
* ... - wrapping the column in a function makes the comparison non-sargable, so
* KEY log_created_at could never be used and every page view scanned the whole
* table. '< dtt + 1 day' keeps the end date inclusive, which BETWEEN on a bare
* DATETIME would not: '2026-08-28' alone means midnight, and would drop that
* day's rows.
*/
$sql = mysqli_query(
$mysqli,
"SELECT SQL_CALC_FOUND_ROWS client_id, client_name, log_action, log_created_at, log_description, log_entity_id, log_id,
log_ip, log_type, log_user_agent, user_id, user_name FROM logs
LEFT JOIN users ON log_user_id = user_id
LEFT JOIN clients ON log_client_id = client_id
WHERE (log_type LIKE '%$q%' OR log_action LIKE '%$q%' OR log_description LIKE '%$q%' OR log_ip LIKE '%$q%' OR log_user_agent LIKE '%$q%' OR user_name LIKE '%$q%' OR client_name LIKE '%$q%')
AND log_created_at >= '$dtf 00:00:00' AND log_created_at < DATE_ADD('$dtt', INTERVAL 1 DAY)
$user_query
$client_query
$log_type_query
$log_action_query
ORDER BY $sort $order LIMIT $record_from, $record_to"
);
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<div class="card">
<div class="card-header bg-dark py-2">
<h3 class="card-title"><i class="fas fa-fw fa-history me-2"></i>Audit Logs</h3>
</div>
<div class="card-header py-3">
<form autocomplete="off">
<div class="row g-2 align-items-end">
<div class="col-sm-4">
<div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(escapeHtml($q)); } ?>" placeholder="Search audit logs">
<button class="btn btn-secondary" type="button" data-bs-toggle="collapse" data-bs-target="#advancedFilter"><i class="fas fa-filter"></i></button>
<button class="btn btn-primary"><i class="fa fa-search"></i></button>
</div>
</div>
<div class="col-sm-2">
<div class="input-group">
<select class="form-select select2" name="client" onchange="this.form.submit()">
<option value="">- All Clients -</option>
<?php
$sql_clients_filter = mysqli_query($mysqli, "SELECT client_id, client_name FROM clients ORDER BY client_name ASC");
while ($row = mysqli_fetch_assoc($sql_clients_filter)) {
$client_id = intval($row['client_id']);
$client_name = escapeHtml($row['client_name']);
?>
<option <?php if ($client_filter == $client_id) { echo "selected"; } ?> value="<?= $client_id ?>"><?= $client_name ?></option>
<?php
}
?>
</select>
</div>
</div>
<div class="col-sm-2">
<div class="input-group">
<select class="form-select select2" name="user" onchange="this.form.submit()">
<option value="">- All Users -</option>
<?php
$sql_users_filter = mysqli_query($mysqli, "SELECT user_id, user_name FROM users ORDER BY user_name ASC");
while ($row = mysqli_fetch_assoc($sql_users_filter)) {
$user_id = intval($row['user_id']);
$user_name = escapeHtml($row['user_name']);
?>
<option <?php if ($user_filter == $user_id) { echo "selected"; } ?> value="<?= $user_id ?>"><?= $user_name ?></option>
<?php
}
?>
</select>
</div>
</div>
<div class="col-sm-2">
<div class="input-group">
<select class="form-select select2" name="type" onchange="this.form.submit()">
<option value="">- All Types -</option>
<?php
$sql_types_filter = mysqli_query($mysqli, "SELECT DISTINCT log_type FROM logs ORDER BY log_type ASC");
while ($row = mysqli_fetch_assoc($sql_types_filter)) {
$log_type = escapeHtml($row['log_type']);
?>
<option <?php if ($type_filter == $log_type) { echo "selected"; } ?>><?= $log_type ?></option>
<?php
}
?>
</select>
</div>
</div>
<div class="col-sm-2">
<div class="input-group">
<select class="form-select select2" name="action" onchange="this.form.submit()">
<option value="">- All Actions -</option>
<?php
$sql_actions_filter = mysqli_query($mysqli, "SELECT DISTINCT log_action FROM logs ORDER BY log_action ASC");
while ($row = mysqli_fetch_assoc($sql_actions_filter)) {
$log_action = escapeHtml($row['log_action']);
?>
<option <?php if ($action_filter == $log_action) { echo "selected"; } ?>><?= $log_action ?></option>
<?php
}
?>
</select>
</div>
</div>
</div>
<div class="collapse mt-3 <?php if (isset($_GET['dtf']) && $_GET['dtf'] !== '1970-01-01') { echo"show"; } ?>" id="advancedFilter">
<div class="row g-3">
<div class="col-md-3">
<div>
<label class="form-label">Date range</label>
<input type="text" id="dateFilter" class="form-control" autocomplete="off">
<input type="hidden" name="canned_date" id="canned_date" value="<?= escapeHtml($_GET['canned_date']) ?? '' ?>">
<input type="hidden" name="dtf" id="dtf" value="<?= escapeHtml($dtf ?? '') ?>">
<input type="hidden" name="dtt" id="dtt" value="<?= escapeHtml($dtt ?? '') ?>">
</div>
</div>
</div>
</div>
</form>
</div>
<div class="table-responsive-sm">
<table class="table table-sm table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?> text-nowrap">
<tr>
<th class="ps-3">
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=log_created_at&order=<?= $disp ?>">
Timestamp <?php if ($sort == 'log_created_at') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=user_name&order=<?= $disp ?>">
User <?php if ($sort == 'user_name') { echo $order_icon; } ?>
</a>
</th>
<?php if (empty($client)) { ?>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=client_name&order=<?= $disp ?>">
Client <?php if ($sort == 'client_name') { echo $order_icon; } ?>
</a>
</th>
<?php } ?>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=log_type&order=<?= $disp ?>">
Type <?php if ($sort == 'log_type') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=log_action&order=<?= $disp ?>">
Action <?php if ($sort == 'log_action') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=log_description&order=<?= $disp ?>">
Description <?php if ($sort == 'log_description') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=log_ip&order=<?= $disp ?>">
IP Address <?php if ($sort == 'log_ip') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=log_user_agent&order=<?= $disp ?>">
User Agent <?php if ($sort == 'log_user_agent') { echo $order_icon; } ?>
</a>
</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($sql)) {
$log_id = intval($row['log_id']);
$log_type = escapeHtml($row['log_type']);
$log_action = escapeHtml($row['log_action']);
$log_description = escapeHtml($row['log_description']);
$log_ip = escapeHtml($row['log_ip']);
$log_user_agent = escapeHtml($row['log_user_agent']);
$log_user_os = getOS($log_user_agent);
$log_user_browser = getWebBrowser($log_user_agent);
$log_created_at = escapeHtml($row['log_created_at']);
$user_id = intval($row['user_id']);
$user_name = escapeHtml($row['user_name']);
if (empty($user_name)) {
$user_name_display = "-";
} else {
$user_name_display = $user_name;
}
$client_name = escapeHtml($row['client_name']);
$client_id = intval($row['client_id']);
if (empty($client_name)) {
$client_name_display = "-";
} else {
$client_name_display = "<a href='../agent/client_overview.php?client_id=$client_id'>$client_name</a>";
}
$log_entity_id = intval($row['log_entity_id']);
?>
<tr>
<td class="font-monospace ps-3"><?= $log_created_at ?></td>
<td><?= $user_name_display ?></td>
<?php if(empty($client)) { ?>
<td><?= $client_name_display ?></td>
<?php } ?>
<td><?= $log_type ?></td>
<td><?= $log_action ?></td>
<td><?= $log_description ?></td>
<td class="font-monospace"><?= $log_ip ?></td>
<td><?= "$log_user_os<div class='text-secondary'>$log_user_browser</div>" ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<?php require_once "../includes/filter_footer.php";
?>
</div>
<?php
require_once "../includes/footer.php";

291
admin/backup.php Normal file
View File

@@ -0,0 +1,291 @@
<?php
require_once "includes/inc_all_admin.php";
$backup_key = backupEncryptionKey();
$backup_dir = backupStorageDir();
$row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT config_enable_cron, config_cron_last_dispatch_at, config_backup_retention_days, config_backup_retention_count, config_backup_cron_type FROM settings WHERE company_id = 1"));
$config_enable_cron = intval($row['config_enable_cron']);
$cron_last_dispatch_at = $row['config_cron_last_dispatch_at'];
$config_backup_retention_days = intval($row['config_backup_retention_days']);
$config_backup_retention_count = intval($row['config_backup_retention_count']);
$config_backup_cron_type = $row['config_backup_cron_type'];
// Same heartbeat rule as Maintenance > Cron - archives are built by the dispatcher, so a dead
// crontab means the buttons below queue work that never runs
$cron_is_running = $cron_last_dispatch_at !== null && (time() - strtotime($cron_last_dispatch_at)) < 300;
$backup_job = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT cron_job_enabled, cron_job_daily_at FROM cron_jobs WHERE cron_job_name = 'backup'"));
$backups = mysqli_query($mysqli, "SELECT backup_created_at, backup_error, backup_id, backup_size, backup_source, backup_status,
backup_type FROM backups ORDER BY backup_created_at DESC LIMIT 100");
$pending_count = intval(mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT(*) AS c FROM backups WHERE backup_status IN ('Pending','Running')"))['c']);
?>
<?php
// Shown once, immediately after an export, then dropped - it must not survive a refresh
if (!empty($_SESSION['backup_master_key_reveal'])) {
$master_key_reveal = $_SESSION['backup_master_key_reveal'];
unset($_SESSION['backup_master_key_reveal']);
?>
<div class="alert alert-warning">
<h5><i class="fas fa-fw fa-key me-2"></i>Master encryption key</h5>
<p class="mb-2">Shown once. Refreshing this page will not show it again.</p>
<input type="text" class="form-control font-monospace" value="<?= escapeHtml($master_key_reveal) ?>" readonly onclick="this.select();">
</div>
<?php } ?>
<?php if ($backup_key === '') { ?>
<div class="alert alert-danger">
<h5><i class="fas fa-fw fa-exclamation-triangle me-2"></i>No backup encryption key</h5>
ITFlow could not write a backup encryption key to <strong>config.php</strong>, so it cannot produce an encrypted backup.
Make config.php writable by the web server user and reload this page, or add a line like
<code>$config_backup_key = '&lt;32 random characters&gt;';</code> to it yourself.
</div>
<?php } ?>
<?php if (!$cron_is_running) { ?>
<div class="alert alert-danger">
<h5><i class="fas fa-fw fa-exclamation-triangle me-2"></i>Cron is not running</h5>
Backups are built by the cron dispatcher, not by your browser. Until cron is running, anything you
start here will sit in the queue. See <a href="cron.php">Maintenance &gt; Cron</a>.
</div>
<?php } elseif ($config_enable_cron == 0) { ?>
<div class="alert alert-warning">
<i class="fas fa-fw fa-exclamation-circle me-2"></i>Cron is switched off in
<a href="cron.php">Maintenance &gt; Cron</a>.
</div>
<?php } ?>
<div class="card card-dark mb-3">
<div class="card-header py-3">
<h3 class="card-title"><i class="fas fa-fw fa-cloud-upload-alt me-2"></i>Create a Backup</h3>
</div>
<div class="card-body">
<?php if ($pending_count > 0) { ?>
<div class="alert alert-info">
<i class="fas fa-fw fa-spinner me-2"></i><strong><?= $pending_count ?></strong> backup<?= $pending_count == 1 ? ' is' : 's are' ?>
queued or building. You will get a notification when ready - this page does not refresh itself.
</div>
<?php } ?>
<div class="row">
<div class="col-md-4 mb-3">
<div class="border rounded p-3 h-100 text-center">
<i class="fas fa-fw fa-3x fa-box-open text-dark mb-3"></i>
<h5>Full Backup</h5>
<p class="text-muted small">The database and everything in the uploads folder. This is the one to keep.</p>
<a class="btn btn-primary <?= $backup_key === '' ? 'disabled' : '' ?>" href="post.php?queue_backup=full&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-play me-2"></i>Start
</a>
</div>
</div>
<div class="col-md-4 mb-3">
<div class="border rounded p-3 h-100 text-center">
<i class="fas fa-fw fa-3x fa-database text-dark mb-3"></i>
<h5>Database Only</h5>
<p class="text-muted small">Just the SQL dump. Much smaller and much quicker, but no attachments or documents.</p>
<a class="btn btn-primary <?= $backup_key === '' ? 'disabled' : '' ?>" href="post.php?queue_backup=database&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-play me-2"></i>Start
</a>
</div>
</div>
<div class="col-md-4 mb-3">
<div class="border rounded p-3 h-100 text-center">
<i class="fas fa-fw fa-3x fa-key text-dark mb-3"></i>
<h5>Master Key</h5>
<p class="text-muted small">The credential vault key. Only needed if every user password is lost - a normal restore recovers the vault on its own.</p>
<button type="button" class="btn btn-secondary" data-bs-toggle="modal" data-bs-target="#masterKeyModal">
<i class="fas fa-fw fa-key me-2"></i>Export
</button>
</div>
</div>
</div>
</div>
</div>
<div class="card card-dark mb-3">
<div class="card-header py-3">
<h3 class="card-title"><i class="fas fa-fw fa-archive me-2"></i>Backups</h3>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-striped table-borderless mb-0">
<thead class="text-dark">
<tr>
<th>Type</th>
<th>Created</th>
<th>Size</th>
<th>Source</th>
<th>Status</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<?php if (mysqli_num_rows($backups) === 0) { ?>
<tr><td colspan="6" class="text-center text-muted py-4">No backups yet.</td></tr>
<?php } ?>
<?php while ($backup = mysqli_fetch_assoc($backups)) {
$backup_id = intval($backup['backup_id']);
$status = $backup['backup_status'];
$badge = 'secondary';
if ($status === 'Complete') { $badge = 'success'; }
if ($status === 'Failed') { $badge = 'danger'; }
if ($status === 'Missing') { $badge = 'warning'; }
if ($status === 'Running' || $status === 'Pending') { $badge = 'info'; }
?>
<tr>
<td><?= escapeHtml(backupTypeLabel($backup['backup_type'])) ?></td>
<td><?= escapeHtml($backup['backup_created_at']) ?></td>
<td><?= $backup['backup_size'] > 0 ? escapeHtml(backupFormatBytes($backup['backup_size'])) : '-' ?></td>
<td><?= escapeHtml($backup['backup_source']) ?></td>
<td>
<span class="badge text-bg-<?= $badge ?>"><?= escapeHtml($status) ?></span>
<?php if (!empty($backup['backup_error'])) { ?>
<br><small class="text-danger"><?= escapeHtml($backup['backup_error']) ?></small>
<?php } ?>
</td>
<td class="text-end">
<?php if ($status === 'Complete') { ?>
<a class="btn btn-sm btn-primary" href="backup_download.php?backup_id=<?= $backup_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-download"></i>
</a>
<?php } ?>
<a class="btn btn-sm btn-danger confirm-link" href="post.php?delete_backup=<?= $backup_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash"></i>
</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
<div class="card card-dark mb-3">
<div class="card-header py-3">
<h3 class="card-title"><i class="fas fa-fw fa-lock me-2"></i>Encryption Key</h3>
</div>
<div class="card-body">
<div class="alert alert-warning mb-3">
<i class="fas fa-fw fa-exclamation-triangle me-2"></i>
<strong>Write this down and keep it somewhere other than this server.</strong>
Every backup is encrypted with it, and without it a backup cannot be restored - not by you,
not by anyone. It is stored in config.php and never in the database, which is what stops a
stolen backup from carrying its own key.
</div>
<?php if ($backup_key !== '') { ?>
<div class="input-group">
<input type="text" class="form-control font-monospace" value="<?= escapeHtml($backup_key) ?>" readonly onclick="this.select();">
<button class="btn btn-secondary" type="button" onclick="navigator.clipboard.writeText('<?= escapeHtml($backup_key) ?>');">
<i class="fas fa-fw fa-copy"></i>
</button>
</div>
<?php } ?>
<p class="text-muted small mt-3 mb-0">
Archives are AES-256 encrypted zips. <strong>7-Zip, WinZip, PeaZip and Keka</strong> can open them with this key.
The <code>unzip</code> command, Windows Explorer and the macOS Archive Utility cannot - they do not support AES.
</p>
</div>
</div>
<div class="card card-dark mb-3">
<div class="card-header py-3">
<h3 class="card-title"><i class="fas fa-fw fa-clock me-2"></i>Scheduled Backups &amp; Retention</h3>
</div>
<div class="card-body">
<form action="post.php" method="POST" autocomplete="off">
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
<div class="row g-2">
<div class="mb-3 col-md-4">
<label>Scheduled backup type</label>
<select class="form-select" name="config_backup_cron_type">
<option <?= $config_backup_cron_type === 'full' ? 'selected' : '' ?> value="full">Full Backup</option>
<option <?= $config_backup_cron_type === 'database' ? 'selected' : '' ?> value="database">Database Only</option>
</select>
</div>
<div class="mb-3 col-md-4">
<label>Keep backups for (days)</label>
<input type="number" class="form-control" name="config_backup_retention_days" min="0" value="<?= intval($config_backup_retention_days) ?>">
<small class="text-muted">0 disables age-based deletion.</small>
</div>
<div class="mb-3 col-md-4">
<label>Keep at most (per type)</label>
<input type="number" class="form-control" name="config_backup_retention_count" min="1" value="<?= intval($config_backup_retention_count) ?>">
<small class="text-muted">Counted separately for each type. The newest of each is never deleted.</small>
</div>
</div>
<button type="submit" name="edit_backup_settings" class="btn btn-primary"><i class="fas fa-fw fa-check me-2"></i>Save</button>
</form>
<hr>
<p class="mb-0">
<?php if (!empty($backup_job) && intval($backup_job['cron_job_enabled']) === 1) { ?>
<i class="fas fa-fw fa-check text-success me-2"></i>Scheduled backups run daily at
<strong><?= escapeHtml(substr((string)$backup_job['cron_job_daily_at'], 0, 5)) ?></strong>.
<?php } else { ?>
<i class="fas fa-fw fa-times text-danger me-2"></i>Scheduled backups are switched off.
<?php } ?>
Turn them on or change the time in <a href="cron.php">Maintenance &gt; Cron</a>.
</p>
<p class="text-muted small mt-2 mb-0">
Old backups are removed by the nightly job, never by the backup itself, so a failed nightly
cannot delete an archive that was never replaced.
</p>
</div>
</div>
<div class="card card-dark">
<div class="card-header py-3">
<h3 class="card-title"><i class="fas fa-fw fa-undo me-2"></i>Restoring</h3>
</div>
<div class="card-body">
<p>Restoring replaces the database and the uploads folder with what is in the archive. It cannot be done from here, on purpose - a running install is the wrong place to be dropping its own tables from a browser.</p>
<p class="mb-2"><strong>From the command line</strong> - the only option that works for large backups:</p>
<pre class="bg-dark text-white p-2"><?= escapeHtml("php " . dirname(__DIR__) . "/scripts/restore_cli.php --file=/path/to/backup.zip") ?></pre>
<p class="mb-0"><strong>From a browser</strong>, on a fresh install only, the setup wizard has a restore step at <code>/setup</code>. Once an install has users, that step closes itself.</p>
</div>
</div>
<div class="modal" id="masterKeyModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="fas fa-fw fa-key me-2"></i>Export Master Key</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<form action="post.php" method="POST" autocomplete="off">
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
<div class="modal-body">
<div class="alert alert-warning">
This key decrypts every credential in this install. It is shown on screen and is not written anywhere.
</div>
<div class="mb-3">
<label>Confirm your account password</label>
<input type="password" class="form-control" name="password" autocomplete="new-password" required>
</div>
</div>
<div class="modal-footer">
<button type="submit" name="backup_master_key" class="btn btn-primary"><i class="fas fa-fw fa-key me-2"></i>Show Master Key</button>
</div>
</form>
</div>
</div>
</div>
<?php
require_once "../includes/footer.php";

61
admin/backup_download.php Normal file
View File

@@ -0,0 +1,61 @@
<?php
/*
* ITFlow - GET /admin/backup_download.php
* Streams a backup archive to an administrator
*
* Deliberately NOT agent/file.php: that gates on module_client and resolves paths under
* uploads/clients/<id>/, which would hand a full database dump to any agent with client
* read access. A backup is an admin artifact and gets an admin-only path of its own.
*/
require_once "../config.php";
require_once "../functions.php";
require_once "../includes/check_login.php";
enforceAdminPermission();
validateCSRFToken();
if (!isset($_GET['backup_id'])) {
http_response_code(400);
exit("Backup ID required");
}
$backup_id = intval($_GET['backup_id']);
$sql = mysqli_query($mysqli, "SELECT backup_file_name FROM backups WHERE backup_id = $backup_id AND backup_status = 'Complete' LIMIT 1");
if (mysqli_num_rows($sql) !== 1) {
http_response_code(404);
exit("Backup not found");
}
$row = mysqli_fetch_assoc($sql);
$file_path = backupResolvePath($row['backup_file_name']);
if ($file_path === false || !is_file($file_path)) {
mysqli_query($mysqli, "UPDATE backups SET backup_status = 'Missing' WHERE backup_id = $backup_id");
http_response_code(404);
exit("Backup file is no longer on disk");
}
$file_name = basename($file_path);
logAudit("Backup", "Download", ($session_name ?? 'Unknown User') . " downloaded backup " . escapeSql($file_name));
mysqli_query($mysqli, "UPDATE backups SET backup_downloaded_at = NOW() WHERE backup_id = $backup_id");
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=\"$file_name\"");
header("Content-Length: " . filesize($file_path));
header("X-Content-Type-Options: nosniff");
header("Cache-Control: private, no-store");
header("Pragma: no-cache");
// Clear output buffers so a multi-gigabyte archive streams instead of loading into memory
while (ob_get_level()) {
ob_end_clean();
}
readfile($file_path);
exit;

134
admin/canned_responses.php Normal file
View File

@@ -0,0 +1,134 @@
<?php
// Default Column Sortby Filter
$sort = "canned_response_name";
$order = "ASC";
require_once "includes/inc_all_admin.php";
/*
* A canned response either belongs to one ticket category or, with category id 0, offers
* itself on every ticket. The LEFT JOIN is what puts the category name on the row; a
* response whose category was deleted since falls back to the general case below.
*/
$sql = mysqli_query(
$mysqli,
"SELECT SQL_CALC_FOUND_ROWS canned_response_id, canned_response_name, canned_response_body,
canned_response_category_id, category_name
FROM canned_responses
LEFT JOIN categories ON canned_response_category_id = category_id AND category_type = 'Ticket'
WHERE (canned_response_name LIKE '%$q%' OR canned_response_body LIKE '%$q%')
AND canned_response_archived_at IS NULL
ORDER BY $sort $order
LIMIT $record_from, $record_to"
);
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<div class="card">
<div class="card-header bg-dark py-2">
<h3 class="card-title mt-2"><i class="fas fa-fw fa-comment-dots me-2"></i>Canned Responses</h3>
<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/canned_response/canned_response_add.php" data-modal-size="lg"><i class="fas fa-plus me-2"></i>New Canned Response</button>
</div>
</div>
<div class="card-header py-3">
<form autocomplete="off">
<div class="row g-2 align-items-center">
<div class="col-md-4">
<div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if(isset($q)){ echo stripslashes(escapeHtml($q)); } ?>" placeholder="Search Canned Responses">
<button class="btn btn-dark"><i class="fa fa-search"></i></button>
</div>
</div>
<div class="col-md-8">
</div>
</div>
</form>
</div>
<div class="table-responsive-sm">
<table class="table table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<th class="ps-3">
<a class="text-secondary" href="?<?= $url_query_strings_sort ?>&sort=canned_response_name&order=<?= $disp ?>">
Response <?php if ($sort == 'canned_response_name') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-secondary" href="?<?= $url_query_strings_sort ?>&sort=category_name&order=<?= $disp ?>">
Ticket Category <?php if ($sort == 'category_name') { echo $order_icon; } ?>
</a>
</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php
while($row = mysqli_fetch_assoc($sql)){
$canned_response_id = intval($row['canned_response_id']);
$canned_response_name = escapeHtml($row['canned_response_name']);
$canned_response_category_id = intval($row['canned_response_category_id']);
$canned_response_category_name = escapeHtml($row['category_name']);
// The body is HTML from TinyMCE. This is a preview, not a render - tags
// are stripped rather than escaped so the column reads as the sentence
// the agent will actually be inserting
$canned_response_preview = escapeHtml(mb_strimwidth(trim(html_entity_decode(strip_tags($row['canned_response_body']), ENT_QUOTES, 'UTF-8')), 0, 120, '...'));
?>
<tr>
<td class="ps-3">
<div class="d-flex">
<i class="fa fa-fw fa-2x fa-comment-dots me-3"></i>
<div class="flex-grow-1">
<div>
<a class="ajax-modal" href="#" data-modal-url="modals/canned_response/canned_response_edit.php?id=<?= $canned_response_id ?>" data-modal-size="lg">
<?= $canned_response_name ?>
</a>
</div>
<div><small class="text-secondary"><?= $canned_response_preview ?></small></div>
</div>
</div>
</td>
<td>
<?php if ($canned_response_category_id && $canned_response_category_name) { ?>
<span class="badge bg-secondary"><?= $canned_response_category_name ?></span>
<?php } else { ?>
<span class="badge bg-dark">All ticket categories</span>
<?php } ?>
</td>
<td>
<div class="dropdown dropstart text-center">
<button class="btn btn-secondary btn-sm" data-bs-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item ajax-modal" href="#" data-modal-url="modals/canned_response/canned_response_edit.php?id=<?= $canned_response_id ?>" data-modal-size="lg">
<i class="fas fa-fw fa-edit me-2"></i>Edit
</a>
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?delete_canned_response=<?= $canned_response_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash me-2"></i>Delete
</a>
</div>
</div>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php require_once "../includes/filter_footer.php";
?>
</div>
<?php
require_once "../includes/footer.php";

217
admin/categories.php Normal file
View File

@@ -0,0 +1,217 @@
<?php
// Default Column Sortby Filter
$sort = "category_name";
$order = "ASC";
require_once "includes/inc_all_admin.php";
if (isset($_GET['category'])) {
$category = escapeSql($_GET['category']);
} else {
$category = "Expense";
}
$sql = mysqli_query(
$mysqli,
"SELECT SQL_CALC_FOUND_ROWS category_color, category_description, category_id, category_name FROM categories
WHERE category_name LIKE '%$q%'
AND category_type = '$category'
AND category_$archive_query
ORDER BY $sort $order LIMIT $record_from, $record_to"
);
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
// Category types shown in the left nav
$category_types = [
'Expense' => ['label' => 'Expense', 'icon' => 'fa-shopping-cart'],
'Income' => ['label' => 'Income', 'icon' => 'fa-hand-holding-usd'],
'Referral' => ['label' => 'Referral', 'icon' => 'fa-share-alt'],
'Ticket' => ['label' => 'Ticket', 'icon' => 'fa-life-ring'],
'network_interface' => ['label' => 'Network Interface', 'icon' => 'fa-ethernet'],
'asset_status' => ['label' => 'Asset Status', 'icon' => 'fa-heartbeat'],
'software_type' => ['label' => 'Software Type', 'icon' => 'fa-cube'],
'rack_type' => ['label' => 'Rack Type', 'icon' => 'fa-server'],
'contact_note_type' => ['label' => 'Contact Note Type', 'icon' => 'fa-address-book'],
'asset_note_type' => ['label' => 'Asset Note Type', 'icon' => 'fa-desktop'],
];
// Label for the selected type, falling back for anything not in the map
$category_label = $category_types[$category]['label'] ?? ucwords(str_replace('_', ' ', $category));
// Row count per type for the nav badges, respecting the archived view
$category_type_counts = [];
$sql_category_type_counts = mysqli_query(
$mysqli,
"SELECT category_type, COUNT(category_id) AS category_type_count FROM categories
WHERE category_$archive_query
GROUP BY category_type"
);
while ($row = mysqli_fetch_assoc($sql_category_type_counts)) {
$category_type_counts[$row['category_type']] = intval($row['category_type_count']);
}
// Archived nav item toggles the view while holding the selected type/search
$archive_toggle_query = $_GET;
unset($archive_toggle_query['page']);
$archive_toggle_query['category'] = $category;
if ($archived) {
unset($archive_toggle_query['archived']);
} else {
$archive_toggle_query['archived'] = 1;
}
$archive_toggle_url = '?' . http_build_query($archive_toggle_query);
?>
<div class="card card-dark">
<div class="card-header py-2">
<h3 class="card-title mt-2"><i class="fa fa-fw fa-list-ul me-2"></i>
<?= escapeHtml($category_label) ?> Categories
</h3>
<?php
if (!isset($_GET['archived'])) {
?>
<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/category/category_add.php?category=<?= escapeHtml($category) ?>"><i
class="fas fa-plus me-2"></i>New <?= escapeHtml($category_label) ?> Category</button>
</div>
<?php
}
?>
</div>
<div class="card-body">
<div class="row">
<!-- Category types -->
<div class="col-md-3 border-end mb-3">
<ul class="nav nav-pills flex-column bg-light">
<?php foreach ($category_types as $category_type => $category_type_details) { ?>
<li class="nav-item">
<a class="nav-link<?php if ($category == $category_type) {
echo ' active';
} ?>" href="?category=<?= urlencode($category_type) ?>">
<i class="fa fa-fw <?= $category_type_details['icon'] ?> me-2"></i><?= escapeHtml($category_type_details['label']) ?>
<span class="badge rounded-pill bg-dark float-end mt-1"><?= $category_type_counts[$category_type] ?? 0 ?></span>
</a>
</li>
<?php } ?>
</ul>
</div>
<!-- Categories -->
<div class="col-md-9">
<form autocomplete="off">
<input type="hidden" name="category" value="<?= escapeHtml($category) ?>">
<?php if ($archived) { ?>
<input type="hidden" name="archived" value="1">
<?php } ?>
<div class="row">
<div class="col-sm-6 mb-2">
<div class="input-group">
<input type="search" class="form-control" name="q"
value="<?php if (isset($q)) {
echo stripslashes(escapeHtml($q));
} ?>"
placeholder="Search <?= escapeHtml($category_label) ?> Categories ">
<button class="btn btn-primary"><i class="fa fa-search"></i></button>
</div>
</div>
<div class="col-sm-6 mb-2">
<a href="<?= $archive_toggle_url ?>"
class="btn float-end <?php if ($archived) {
echo 'btn-primary';
} else {
echo 'btn-default';
} ?>"><i
class="fas fa-fw fa-archive me-2"></i>Archived</a>
</div>
</div>
</form>
<hr>
<div class="table-responsive-sm">
<table class="table table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=category_name&order=<?= $disp ?>">
Name <?php if ($sort == 'category_name') { echo $order_icon; } ?>
</a>
</th>
<th>Color</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($sql)) {
$category_id = intval($row['category_id']);
$category_name = escapeHtml($row['category_name']);
$category_description = escapeHtml($row['category_description']);
$category_color = escapeHtml($row['category_color']);
?>
<tr>
<td>
<a class="text-dark ajax-modal" href="#"
data-modal-url="modals/category/category_edit.php?id=<?= $category_id ?>">
<?= $category_name ?>
<div><small class="text-secondary"><?= $category_description ?></small></div>
</a>
</td>
<td><i class="fa fa-3x fa-circle" style="color:<?= $category_color ?>;"></i></td>
<td>
<div class="dropdown dropstart text-center">
<button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<?php
if ($archived) {
?>
<a class="dropdown-item text-info confirm-link"
href="post.php?restore_category=<?= $category_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-redo me-2"></i>Restore
</a>
<a class="dropdown-item text-danger confirm-link"
href="post.php?delete_category=<?= $category_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash me-2"></i>Delete
</a>
<?php
} else {
?>
<a class="dropdown-item ajax-modal" href="#"
data-modal-url="modals/category/category_edit.php?id=<?= $category_id ?>">
<i class="fas fa-fw fa-edit me-2"></i>Edit
</a>
<a class="dropdown-item text-danger confirm-link"
href="post.php?archive_category=<?= $category_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-archive me-2"></i>Archive
</a>
<?php
}
?>
</div>
</div>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php require_once "../includes/filter_footer.php"; ?>
</div>
<?php
require_once "../includes/footer.php";

View File

@@ -0,0 +1,160 @@
<?php
// Default Column Sort by Filter
$sort = "contract_template_name";
$order = "ASC";
require_once "includes/inc_all_admin.php";
// Search query
$sql = mysqli_query(
$mysqli,
"SELECT SQL_CALC_FOUND_ROWS * FROM contract_templates
WHERE contract_template_name LIKE '%$q%' OR contract_template_type LIKE '%$q%'
OR contract_template_description LIKE '%$q%'
ORDER BY $sort $order LIMIT $record_from, $record_to"
);
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<div class="card">
<div class="card-header bg-dark py-2">
<h3 class="card-title mt-2"><i class="fa fa-fw fa-file-contract me-2"></i>Contract Templates</h3>
<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/contract_template/contract_template_add.php" data-modal-size="lg">
<i class="fas fa-plus me-2"></i>New Template
</button>
</div>
</div>
<div class="card-header py-3">
<form autocomplete="off">
<div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(escapeHtml($q)); } ?>" placeholder="Search templates">
<button class="btn btn-secondary"><i class="fa fa-search"></i></button>
</div>
</form>
</div>
<div class="table-responsive-sm">
<table class="table table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<th class="ps-3">
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_name&order=<?= $disp ?>">
Template Name <?php if ($sort == 'contract_template_name') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_type&order=<?= $disp ?>">
Type <?php if ($sort == 'contract_template_type') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_renewal_frequency&order=<?= $disp ?>">
Update Frequency <?php if ($sort == 'contract_template_renewal_frequency') { echo $order_icon; } ?>
</a>
</th>
<th>SLA (L/M/H Response)</th>
<th>SLA (L/M/H Resolution)</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_rate_standard&order=<?= $disp ?>">
Hourly Rate <?php if ($sort == 'contract_template_rate_standard') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_rate_after_hours&order=<?= $disp ?>">
After Hours Rate <?php if ($sort == 'contract_template_rate_after_hours') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_support_hours&order=<?= $disp ?>">
Support Hours <?php if ($sort == 'contract_template_support_hours') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_net_terms&order=<?= $disp ?>">
Net Terms <?php if ($sort == 'contract_template_net_terms') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_created_at&order=<?= $disp ?>">
Created <?php if ($sort == 'contract_template_created_at') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=contract_template_updated_at&order=<?= $disp ?>">
Updated <?php if ($sort == 'contract_template_updated_at') { echo $order_icon; } ?>
</a>
</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($sql)) {
$id = intval($row['contract_template_id']);
$name = escapeHtml($row['contract_template_name']);
$type = escapeHtml($row['contract_template_type']);
$freq = escapeHtml($row['contract_template_renewal_frequency']);
$sla_low_resp = escapeHtml($row['contract_template_sla_low_response_time']);
$sla_med_resp = escapeHtml($row['contract_template_sla_medium_response_time']);
$sla_high_resp = escapeHtml($row['contract_template_sla_high_response_time']);
$sla_low_res = escapeHtml($row['contract_template_sla_low_resolution_time']);
$sla_med_res = escapeHtml($row['contract_template_sla_medium_resolution_time']);
$sla_high_res = escapeHtml($row['contract_template_sla_high_resolution_time']);
$hourly_rate = escapeHtml($row['contract_template_rate_standard']);
$after_hours = escapeHtml($row['contract_template_rate_after_hours']);
$support_hours = escapeHtml($row['contract_template_support_hours']);
$net_terms = escapeHtml($row['contract_template_net_terms']);
$created = escapeHtml($row['contract_template_created_at']);
$updated = escapeHtml($row['contract_template_updated_at']);
?>
<tr>
<td class="ps-3">
<a class="text-bold ajax-modal" href="#"
data-modal-size="xl"
data-modal-url="modals/contract_template/contract_template_edit.php?id=<?= $id ?>">
<i class="fas fa-fw fa-file-alt text-dark"></i> <?= $name ?>
</a>
<div class="mt-1 text-secondary"><?= escapeHtml($row['contract_template_description']) ?></div>
</td>
<td><?= $type ?></td>
<td><?= $freq ?></td>
<td><?= "$sla_low_resp / $sla_med_resp / $sla_high_resp" ?></td>
<td><?= "$sla_low_res / $sla_med_res / $sla_high_res" ?></td>
<td><?= $hourly_rate ?></td>
<td><?= $after_hours ?></td>
<td><?= $support_hours ?></td>
<td><?= $net_terms ?></td>
<td><?= $created ?></td>
<td><?= $updated ?></td>
<td>
<div class="dropdown dropstart text-center">
<button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item ajax-modal" href="#"
data-modal-size="xl"
data-modal-url="modals/contract_template/contract_template_edit.php?id=<?= $id ?>">
<i class="fas fa-fw fa-edit me-2"></i>Edit
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger text-bold" href="post.php?delete_contract_template=<?= $id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash me-2"></i>Delete
</a>
</div>
</div>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php require_once "../includes/filter_footer.php"; ?>
</div>
<?php require_once "../includes/footer.php"; ?>

208
admin/cron.php Normal file
View File

@@ -0,0 +1,208 @@
<?php
require_once "includes/inc_all_admin.php";
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/cron_jobs.php';
$row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT config_enable_cron, config_cron_last_dispatch_at FROM settings WHERE company_id = 1"));
$config_enable_cron = intval($row['config_enable_cron']);
$cron_last_dispatch_at = $row['config_cron_last_dispatch_at'];
// The dispatcher writes its heartbeat before it runs anything, so anything older than a few
// minutes means the crontab entry itself is missing or failing - a different problem from a
// job that is disabled or erroring, and the one people spend the longest not finding.
$cron_is_running = $cron_last_dispatch_at !== null && (time() - strtotime($cron_last_dispatch_at)) < 300;
$cron_command = "* * * * * php " . dirname(__DIR__) . "/cron/cron.php >/dev/null";
// Registry order is dispatch order, so the table reads the way the cycle runs
$cron_jobs = [];
foreach (cronJobRegistry() as $job) {
$cron_jobs[$job['name']] = $job;
$cron_jobs[$job['name']]['row'] = null;
}
$sql = mysqli_query($mysqli, "SELECT cron_job_daily_at, cron_job_enabled, cron_job_id, cron_job_interval_minutes,
cron_job_last_duration, cron_job_last_error, cron_job_last_error_at, cron_job_last_run_at, cron_job_last_status,
cron_job_name, cron_job_run_now, cron_job_schedule FROM cron_jobs");
while ($job_row = mysqli_fetch_assoc($sql)) {
if (isset($cron_jobs[$job_row['cron_job_name']])) {
$cron_jobs[$job_row['cron_job_name']]['row'] = $job_row;
}
}
?>
<div class="card card-dark">
<div class="card-header py-3">
<h3 class="card-title"><i class="fas fa-fw fa-clock me-2"></i>Cron</h3>
</div>
<div class="card-body">
<?php if (!$cron_is_running) { ?>
<div class="alert alert-danger">
<h5><i class="fas fa-fw fa-exclamation-triangle me-2"></i>Cron is not running</h5>
ITFlow last heard from cron <strong><?= escapeHtml(strtolower(cronJobTimeAgo($cron_last_dispatch_at))) ?></strong>.
Nothing below will run - no mail is being sent, no email is being turned into tickets, and invoices are not being generated.
Add this line to the crontab of the user that owns the ITFlow files:
<pre class="bg-dark text-white p-2 mt-2 mb-0"><?= escapeHtml($cron_command) ?></pre>
</div>
<?php } else { ?>
<div class="alert alert-success">
<i class="fas fa-fw fa-check me-2"></i>Cron last checked in <strong><?= escapeHtml(strtolower(cronJobTimeAgo($cron_last_dispatch_at))) ?></strong>.
<span class="text-muted ms-2"><?= escapeHtml($cron_command) ?></span>
</div>
<?php } ?>
<?php if ($config_enable_cron == 0) { ?>
<div class="alert alert-warning">
<div class="float-end">
<a class="btn btn-sm btn-warning" href="post.php?enable_cron=1&amp;csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-power-off me-2"></i>Turn cron on
</a>
</div>
<h5><i class="fas fa-fw fa-exclamation-circle me-2"></i>Cron is switched off</h5>
The dispatcher is running, but every job below stops itself immediately while this is off -
no mail is sent, no email becomes a ticket, and nothing is invoiced.
</div>
<?php } else { ?>
<p class="text-muted">
<small>
<i class="fas fa-fw fa-power-off me-1"></i>The master switch is <strong>on</strong>. Turning it off
stops every job at once without touching their schedules, which is what you want on a restored
backup or a staging clone - those come up with every job enabled and will otherwise email clients
and charge cards. Switching back on returns you to exactly this configuration.
<a href="post.php?disable_cron=1&amp;csrf_token=<?= $_SESSION['csrf_token'] ?>">Turn cron off</a>.
</small>
</p>
<?php } ?>
<div class="table-responsive-sm">
<table class="table table-borderless table-hover">
<thead class="text-secondary">
<tr>
<th>Job</th>
<th>Schedule</th>
<th>Last Run</th>
<th>Duration</th>
<th>Status</th>
<th>Next Run</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php foreach ($cron_jobs as $job) {
$job_row = $job['row'];
// A job the dispatcher has not met yet has no row. It gets one on the next
// pass, seeded from the schedule in the registry, so show that meanwhile.
$cron_job_id = $job_row ? intval($job_row['cron_job_id']) : 0;
$enabled = $job_row ? intval($job_row['cron_job_enabled']) : 1;
$schedule = $job_row ? $job_row['cron_job_schedule'] : $job['schedule'];
$interval_minutes = $job_row ? intval($job_row['cron_job_interval_minutes']) : intval($job['interval_minutes'] ?? 1);
$daily_at = $job_row ? $job_row['cron_job_daily_at'] : ($job['daily_at'] ?? null);
$run_now = $job_row ? intval($job_row['cron_job_run_now']) : 0;
$last_run_at = $job_row ? $job_row['cron_job_last_run_at'] : null;
$last_duration = $job_row ? $job_row['cron_job_last_duration'] : null;
$last_status = $job_row ? $job_row['cron_job_last_status'] : null;
$last_error = $job_row ? $job_row['cron_job_last_error'] : null;
$last_error_at = $job_row ? $job_row['cron_job_last_error_at'] : null;
$next_run = $job_row ? cronJobNextRun($job_row) : null;
if ($run_now) {
$status_badge = '<span class="badge bg-warning text-dark">Queued</span>';
} elseif ($last_status === 'Running') {
$status_badge = '<span class="badge bg-info text-dark">Running</span>';
} elseif ($last_status === 'Completed') {
$status_badge = '<span class="badge bg-success">Completed</span>';
} elseif ($last_status === 'Failed') {
$status_badge = '<span class="badge bg-danger">Failed</span>';
} elseif ($last_status !== null) {
$status_badge = '<span class="badge bg-secondary">Stopped</span>';
} else {
$status_badge = '<span class="badge bg-light text-dark">Never run</span>';
}
?>
<tr class="<?= $enabled ? '' : 'text-muted' ?>">
<td>
<strong><?= escapeHtml($job['label']) ?></strong>
<?php if (!$enabled) { ?><span class="badge bg-secondary ms-1">Disabled</span><?php } ?>
<br><small class="text-secondary"><?= escapeHtml($job['description']) ?></small>
<br><small class="text-muted"><code>cron/<?= escapeHtml($job['script']) ?></code></small>
</td>
<td><?= escapeHtml(cronJobScheduleDescription($schedule, $interval_minutes, $daily_at)) ?></td>
<td>
<?= escapeHtml(cronJobTimeAgo($last_run_at)) ?>
<?php if ($last_run_at) { ?><br><small class="text-muted"><?= escapeHtml(date('M j, g:i A', strtotime($last_run_at))) ?></small><?php } ?>
</td>
<td><?= $last_duration === null ? '-' : escapeHtml($last_duration) . 's' ?></td>
<td>
<?= $status_badge ?>
<?php if ($last_status !== null && $last_status !== 'Running' && strlen($last_status) > 9) { ?>
<br><small class="text-muted"><?= escapeHtml($last_status) ?></small>
<?php } ?>
</td>
<td><?= $next_run === null ? '-' : escapeHtml(cronJobTimeAgo($next_run)) ?></td>
<td class="text-center">
<div class="dropdown dropstart text-center">
<button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="dropdown">
<i class="fas fa-ellipsis-v"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item <?= $cron_job_id === 0 ? 'disabled' : '' ?>" href="post.php?run_cron_job=<?= $cron_job_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-play me-2"></i>Run Now
</a>
<button class="dropdown-item ajax-modal <?= $cron_job_id === 0 ? 'disabled' : '' ?>" type="button" data-toggle="ajax-modal"
data-modal-url="modals/cron/cron_edit.php?id=<?= $cron_job_id ?>">
<i class="fas fa-fw fa-edit me-2"></i>Edit Schedule
</button>
<?php if ($enabled) { ?>
<a class="dropdown-item text-danger" href="post.php?disable_cron_job=<?= $cron_job_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-pause me-2"></i>Disable
</a>
<?php } else { ?>
<a class="dropdown-item text-success" href="post.php?enable_cron_job=<?= $cron_job_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-play-circle me-2"></i>Enable
</a>
<?php } ?>
</div>
</div>
</td>
</tr>
<?php if (!empty($last_error)) { ?>
<tr>
<td colspan="7" class="pt-0">
<div class="alert alert-danger mb-0 py-2">
<div class="float-end">
<a class="text-danger" href="post.php?clear_cron_error=<?= $cron_job_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>" title="Dismiss">
<i class="fas fa-fw fa-times"></i>
</a>
</div>
<strong><i class="fas fa-fw fa-exclamation-triangle me-2"></i>Last error</strong>
<small class="text-muted ms-2"><?= escapeHtml(cronJobTimeAgo($last_error_at)) ?></small>
<div class="mt-1"><small><?= escapeHtml($last_error) ?></small></div>
</div>
</td>
</tr>
<?php } ?>
<?php } ?>
</tbody>
</table>
</div>
<p class="text-muted mb-0">
<small>
<i class="fas fa-fw fa-info-circle me-1"></i>Run Now does not start the job in your browser - it asks the
dispatcher to pick it up on its next pass, so a job starts within a minute and still runs on the command
line with the same locking as a scheduled run. Detailed per-job output is in
<a href="app_logs.php">App Logs</a>.
</small>
</p>
</div>
</div>
<?php require_once "../includes/footer.php"; ?>

8
admin/custom/readme.php Normal file
View File

@@ -0,0 +1,8 @@
<?php
/*
- Custom Pages -
If you wish to add custom pages to ITFlow, add them to this directory"
Link to Documentation for File Directory Structure and examples
*/

143
admin/custom_links.php Normal file
View File

@@ -0,0 +1,143 @@
<?php
// Default Column Sortby Filter
$sort = "custom_link_name";
$order = "ASC";
require_once "includes/inc_all_admin.php";
$sql = mysqli_query(
$mysqli,
"SELECT SQL_CALC_FOUND_ROWS custom_link_icon, custom_link_id, custom_link_location, custom_link_name,
custom_link_new_tab, custom_link_order, custom_link_uri FROM custom_links
WHERE custom_link_name LIKE '%$q%'
ORDER BY $sort $order LIMIT $record_from, $record_to"
);
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?>
<div class="card">
<div class="card-header bg-dark py-2">
<h3 class="card-title mt-2"><i class="fas fa-fw fa-external-link-alt me-2"></i>Custom Links</h3>
<div class="card-tools">
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/custom_link/custom_link_add.php"><i class="fas fa-plus me-2"></i>New Link</button>
</div>
</div>
<div class="card-header py-3">
<form autocomplete="off">
<div class="row g-2 align-items-center">
<div class="col-md-4">
<div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(escapeHtml($q)); } ?>" placeholder="Search Links">
<button class="btn btn-primary"><i class="fa fa-search"></i></button>
</div>
</div>
</div>
</form>
</div>
<div class="table-responsive-sm">
<table class="table table-striped table-borderless table-hover mb-0">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr>
<th class="ps-3">
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=custom_link_name&order=<?= $disp ?>">
Name <?php if ($sort == 'custom_link_name') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=custom_link_order&order=<?= $disp ?>">
Order <?php if ($sort == 'custom_link_order') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=custom_link_uri&order=<?= $disp ?>">
URI / <span class="text-secondary">New Tab</span> <?php if ($sort == 'custom_link_uri') { echo $order_icon; } ?>
</a>
</th>
<th>
<a class="text-dark" href="?<?= $url_query_strings_sort ?>&sort=custom_link_location&order=<?= $disp ?>">
Location <?php if ($sort == 'custom_link_location') { echo $order_icon; } ?>
</a>
</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($sql)) {
$custom_link_id = intval($row['custom_link_id']);
$custom_link_name = escapeHtml($row['custom_link_name']);
$custom_link_uri = escapeHtml($row['custom_link_uri']);
$custom_link_icon = escapeHtml($row['custom_link_icon']);
$custom_link_new_tab = intval($row['custom_link_new_tab']);
if ($custom_link_new_tab == 1 ) {
$custom_link_new_tab_display = "<i class='fas fa-fw fa-checkmark'></i>";
} else {
$custom_link_new_tab_display = "";
}
$custom_link_order = intval($row['custom_link_order']);
if ($custom_link_order == 0 ) {
$custom_link_order_display = "-";
} else {
$custom_link_order_display = $custom_link_order;
}
$custom_link_location = intval($row['custom_link_location']);
if ($custom_link_location == 1) {
$custom_link_location_display = "Main Side Nav";
} elseif ($custom_link_location == 2) {
$custom_link_location_display = "Top Nav";
} elseif ($custom_link_location == 3) {
$custom_link_location_display = "Client Portal Nav";
} elseif ($custom_link_location == 4) {
$custom_link_location_display = "Admin Nav";
} elseif ($custom_link_location == 5) {
$custom_link_location_display = "Reports Nav";
}
?>
<tr>
<td class="ps-3">
<a class="ajax-modal" href="#"
data-modal-url="modals/custom_link/custom_link_edit.php?id=<?= $custom_link_id ?>">
<i class="fa fa-fw fa-<?= $custom_link_icon ?> me-2"></i><?= $custom_link_name ?>
</a>
</td>
<td><?= $custom_link_order_display ?></td>
<td><?= "$custom_link_uri $custom_link_new_tab_display" ?></td>
<td><?= $custom_link_location_display ?></td>
<td>
<div class="dropdown dropstart text-center">
<button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item ajax-modal" href="#" data-modal-url="modals/custom_link/custom_link_edit.php?id=<?= $custom_link_id ?>">
<i class="fas fa-fw fa-edit me-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=<?= $custom_link_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-trash me-2"></i>Delete
</a>
</div>
</div>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<?php require_once "../includes/filter_footer.php"; ?>
</div>
<?php
require_once "../includes/footer.php";

View File

@@ -0,0 +1,69 @@
<?php
/*
* ITFlow
* Applies pending database migrations from admin/database_updates/
* Used in conjunction with database_version.php
*
* Each file in admin/database_updates/ is named for the database version it
* upgrades TO (e.g. 2.4.5.php contains the queries that bring 2.4.4 to 2.4.5).
* This runner applies every file newer than the current database version, in
* order, and bumps config_current_database_version after each one - so a
* single run brings the database all the way to the latest version.
*
* To add a migration: create admin/database_updates/<new version>.php - that
* is the whole job. The latest version is derived from the directory listing
* (see includes/database_version.php) and this runner handles the version
* bump, so there is no constant to update and no bump query to remember.
*/
// Check if our database versions are defined
// If undefined, the file is probably being accessed directly rather than called via update_cli.php
if (!defined("LATEST_DATABASE_VERSION") || !defined("CURRENT_DATABASE_VERSION") || !isset($mysqli)) {
echo "Cannot access this file directly.";
exit();
}
// Migration files include-guard against this constant
define("FROM_DB_UPDATER", true);
// Outputs for the caller (update_cli.php)
$database_updates_applied = []; // Versions successfully applied this run
$database_updates_error = null; // "version: error message" if a migration failed
// Collect and order the migration files by version (glob sorts alphabetically,
// which would put 2.4.10 before 2.4.9 - version_compare gets it right)
$database_update_files = [];
foreach (glob(__DIR__ . "/database_updates/*.php") as $file) {
$version = basename($file, ".php");
if (preg_match('/^\d+(\.\d+)+$/', $version)) {
$database_update_files[$version] = $file;
}
}
uksort($database_update_files, "version_compare");
// Apply everything newer than the current database version, in order
// (CURRENT_DATABASE_VERSION is a constant frozen at page load, so track progress in a variable)
$database_current_version = CURRENT_DATABASE_VERSION;
foreach ($database_update_files as $version => $file) {
if (version_compare($version, $database_current_version, "<=")) {
continue;
}
try {
require $file;
} catch (Throwable $e) {
// Stop here - config_current_database_version still points at the last
// completed migration, so a re-run resumes at this file
$database_updates_error = "$version: " . $e->getMessage();
error_log("ITFlow database update to version $version failed: " . $e->getMessage());
break;
}
// Migration succeeded - bump the database version
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '" . escapeSql($version) . "'");
$database_current_version = $version;
$database_updates_applied[] = $version;
}

View File

@@ -0,0 +1,184 @@
<?php
/*
* ITFlow - Database update to version 2.0.0 (from 1.9.9)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "RENAME TABLE `logins` TO `credentials`");
mysqli_query($mysqli, "
ALTER TABLE `credentials`
CHANGE COLUMN `login_id` `credential_id` INT(11) NOT NULL AUTO_INCREMENT,
CHANGE COLUMN `login_name` `credential_name` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
CHANGE COLUMN `login_description` `credential_description` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
CHANGE COLUMN `login_category` `credential_category` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
CHANGE COLUMN `login_uri` `credential_uri` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
CHANGE COLUMN `login_uri_2` `credential_uri_2` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
CHANGE COLUMN `login_username` `credential_username` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
CHANGE COLUMN `login_password` `credential_password` VARBINARY(200) NULL DEFAULT NULL,
CHANGE COLUMN `login_otp_secret` `credential_otp_secret` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
CHANGE COLUMN `login_note` `credential_note` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
CHANGE COLUMN `login_important` `credential_important` TINYINT(1) NOT NULL DEFAULT '0',
CHANGE COLUMN `login_created_at` `credential_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(),
CHANGE COLUMN `login_updated_at` `credential_updated_at` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(),
CHANGE COLUMN `login_archived_at` `credential_archived_at` DATETIME NULL DEFAULT NULL,
CHANGE COLUMN `login_accessed_at` `credential_accessed_at` DATETIME NULL DEFAULT NULL,
CHANGE COLUMN `login_password_changed_at` `credential_password_changed_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP(),
CHANGE COLUMN `login_folder_id` `credential_folder_id` INT(11) NOT NULL DEFAULT '0',
CHANGE COLUMN `login_contact_id` `credential_contact_id` INT(11) NOT NULL DEFAULT '0',
CHANGE COLUMN `login_asset_id` `credential_asset_id` INT(11) NOT NULL DEFAULT '0',
CHANGE COLUMN `login_client_id` `credential_client_id` INT(11) NOT NULL DEFAULT '0'
");
// Rename table contact_logins to contact_credentials
mysqli_query($mysqli, "RENAME TABLE `contact_logins` TO `contact_credentials`");
// Alter contact_credentials table and change login_id to credential_id
mysqli_query($mysqli, "
ALTER TABLE `contact_credentials`
CHANGE COLUMN `login_id` `credential_id` INT(11) NOT NULL
");
// Clean up orphaned contact_id rows in contact_credentials
mysqli_query($mysqli, "
DELETE FROM `contact_credentials`
WHERE `contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
// Clean up orphaned credential_id rows in contact_credentials
mysqli_query($mysqli, "
DELETE FROM `contact_credentials`
WHERE `credential_id` NOT IN (SELECT `credential_id` FROM `credentials`);
");
// Add foreign keys to contact_credentials
mysqli_query($mysqli, "
ALTER TABLE `contact_credentials`
ADD FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`credential_id`) REFERENCES `credentials`(`credential_id`) ON DELETE CASCADE
");
// Rename table service_logins to service_credentials
mysqli_query($mysqli, "RENAME TABLE `service_logins` TO `service_credentials`");
// Alter service_credentials table and change login_id to credential_id
mysqli_query($mysqli, "
ALTER TABLE `service_credentials`
CHANGE COLUMN `login_id` `credential_id` INT(11) NOT NULL
");
// Clean up orphaned service_id rows in service_credentials
mysqli_query($mysqli, "
DELETE FROM `service_credentials`
WHERE `service_id` NOT IN (SELECT `service_id` FROM `services`);
");
// Clean up orphaned credential_id rows in service_credentials
mysqli_query($mysqli, "
DELETE FROM `service_credentials`
WHERE `credential_id` NOT IN (SELECT `credential_id` FROM `credentials`);
");
// Add foreign keys to service_credentials
mysqli_query($mysqli, "
ALTER TABLE `service_credentials`
ADD FOREIGN KEY (`service_id`) REFERENCES `services`(`service_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`credential_id`) REFERENCES `credentials`(`credential_id`) ON DELETE CASCADE
");
// Rename table software_logins to software_credentials
mysqli_query($mysqli, "RENAME TABLE `software_logins` TO `software_credentials`");
// Alter software_credentials table and change login_id to credential_id
mysqli_query($mysqli, "
ALTER TABLE `software_credentials`
CHANGE COLUMN `login_id` `credential_id` INT(11) NOT NULL
");
// Clean up orphaned software_id rows in software_credentials
mysqli_query($mysqli, "
DELETE FROM `software_credentials`
WHERE `software_id` NOT IN (SELECT `software_id` FROM `software`);
");
// Clean up orphaned credential_id rows in software_credentials
mysqli_query($mysqli, "
DELETE FROM `software_credentials`
WHERE `credential_id` NOT IN (SELECT `credential_id` FROM `credentials`);
");
// Add foreign keys to software_credentials
mysqli_query($mysqli, "
ALTER TABLE `software_credentials`
ADD FOREIGN KEY (`software_id`) REFERENCES `software`(`software_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`credential_id`) REFERENCES `credentials`(`credential_id`) ON DELETE CASCADE
");
// Rename table vendor_logins to vendor_credentials
mysqli_query($mysqli, "RENAME TABLE `vendor_logins` TO `vendor_credentials`");
// Alter vendor_credentials table and change login_id to credential_id
mysqli_query($mysqli, "
ALTER TABLE `vendor_credentials`
CHANGE COLUMN `login_id` `credential_id` INT(11) NOT NULL
");
// Clean up orphaned vendor_id rows in vendor_credentials
mysqli_query($mysqli, "
DELETE FROM `vendor_credentials`
WHERE `vendor_id` NOT IN (SELECT `vendor_id` FROM `vendors`);
");
// Clean up orphaned credential_id rows in vendor_credentials
mysqli_query($mysqli, "
DELETE FROM `vendor_credentials`
WHERE `credential_id` NOT IN (SELECT `credential_id` FROM `credentials`);
");
// Add foreign keys to vendor_credentials
mysqli_query($mysqli, "
ALTER TABLE `vendor_credentials`
ADD FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`vendor_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`credential_id`) REFERENCES `credentials`(`credential_id`) ON DELETE CASCADE
");
// Rename table login_tags to credential_tags
mysqli_query($mysqli, "RENAME TABLE `login_tags` TO `credential_tags`");
// Alter credential_tags table and change login_id to credential_id
mysqli_query($mysqli, "
ALTER TABLE `credential_tags`
CHANGE COLUMN `login_id` `credential_id` INT(11) NOT NULL
");
// Clean up orphaned tag_id rows in credential_tags
mysqli_query($mysqli, "
DELETE FROM `credential_tags`
WHERE `tag_id` NOT IN (SELECT `tag_id` FROM `tags`);
");
// Clean up orphaned credential_id rows in credential_tags
mysqli_query($mysqli, "
DELETE FROM `credential_tags`
WHERE `credential_id` NOT IN (SELECT `credential_id` FROM `credentials`);
");
// Add foreign keys to credential_tags
mysqli_query($mysqli, "
ALTER TABLE `credential_tags`
ADD FOREIGN KEY (`tag_id`) REFERENCES `tags`(`tag_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`credential_id`) REFERENCES `credentials`(`credential_id`) ON DELETE CASCADE
");
// Create asset_credentials table with foreign keys
mysqli_query($mysqli, "
CREATE TABLE `asset_credentials` (
`credential_id` INT(11) NOT NULL,
`asset_id` INT(11) NOT NULL,
PRIMARY KEY (`credential_id`, `asset_id`),
FOREIGN KEY (`credential_id`) REFERENCES `credentials`(`credential_id`) ON DELETE CASCADE,
FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
)
");

View File

@@ -0,0 +1,15 @@
<?php
/*
* ITFlow - Database update to version 2.0.1 (from 2.0.0)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
//Dropping patch panel as a patch panel can be documented as an asset with interfaces.
mysqli_query($mysqli, "DROP TABLE `patch_panel_ports`");
mysqli_query($mysqli, "DROP TABLE `patch_panels`");
mysqli_query($mysqli, "RENAME TABLE `events` TO `calendar_events`");
mysqli_query($mysqli, "RENAME TABLE `event_attendees` TO `calendar_event_attendees`");

View File

@@ -0,0 +1,153 @@
<?php
/*
* ITFlow - Database update to version 2.0.2 (from 2.0.1)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Clean up orphaned data before adding foreign keys
// Clean up orphaned asset_custom_asset_id rows in asset_custom
mysqli_query($mysqli, "
DELETE FROM `asset_custom`
WHERE `asset_custom_asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Add foreign key to asset_custom
mysqli_query($mysqli, "
ALTER TABLE `asset_custom`
ADD FOREIGN KEY (`asset_custom_asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
");
// Clean up orphaned asset_id rows in asset_documents
mysqli_query($mysqli, "
DELETE FROM `asset_documents`
WHERE `asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Clean up orphaned document_id rows in asset_documents
mysqli_query($mysqli, "
DELETE FROM `asset_documents`
WHERE `document_id` NOT IN (SELECT `document_id` FROM `documents`);
");
// Add foreign keys to asset_documents
mysqli_query($mysqli, "
ALTER TABLE `asset_documents`
ADD FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`document_id`) REFERENCES `documents`(`document_id`) ON DELETE CASCADE
");
// Clean up orphaned asset_id rows in asset_files
mysqli_query($mysqli, "
DELETE FROM `asset_files`
WHERE `asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Clean up orphaned file_id rows in asset_files
mysqli_query($mysqli, "
DELETE FROM `asset_files`
WHERE `file_id` NOT IN (SELECT `file_id` FROM `files`);
");
// Add foreign keys to asset_files
mysqli_query($mysqli, "
ALTER TABLE `asset_files`
ADD FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE
");
// Clean up orphaned asset_history_asset_id rows in asset_history
mysqli_query($mysqli, "
DELETE FROM `asset_history`
WHERE `asset_history_asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Add foreign key to asset_history
mysqli_query($mysqli, "
ALTER TABLE `asset_history`
ADD FOREIGN KEY (`asset_history_asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
");
// Clean up orphaned interface_asset_id rows in asset_interfaces
mysqli_query($mysqli, "
DELETE FROM `asset_interfaces`
WHERE `interface_asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Add foreign key to asset_interfaces
mysqli_query($mysqli, "
ALTER TABLE `asset_interfaces`
ADD FOREIGN KEY (`interface_asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
");
// Clean up orphaned asset_note_asset_id rows in asset_notes
mysqli_query($mysqli, "
DELETE FROM `asset_notes`
WHERE `asset_note_asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Add foreign key to asset_notes
mysqli_query($mysqli, "
ALTER TABLE `asset_notes`
ADD FOREIGN KEY (`asset_note_asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
");
// Clean up orphaned contact_id rows in contact_assets
mysqli_query($mysqli, "
DELETE FROM `contact_assets`
WHERE `contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
// Clean up orphaned asset_id rows in contact_assets
mysqli_query($mysqli, "
DELETE FROM `contact_assets`
WHERE `asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Add foreign keys to contact_assets
mysqli_query($mysqli, "
ALTER TABLE `contact_assets`
ADD FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
");
// Clean up orphaned service_id rows in service_assets
mysqli_query($mysqli, "
DELETE FROM `service_assets`
WHERE `service_id` NOT IN (SELECT `service_id` FROM `services`);
");
// Clean up orphaned asset_id rows in service_assets
mysqli_query($mysqli, "
DELETE FROM `service_assets`
WHERE `asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Add foreign keys to service_assets
mysqli_query($mysqli, "
ALTER TABLE `service_assets`
ADD FOREIGN KEY (`service_id`) REFERENCES `services`(`service_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
");
// Clean up orphaned software_id rows in software_assets
mysqli_query($mysqli, "
DELETE FROM `software_assets`
WHERE `software_id` NOT IN (SELECT `software_id` FROM `software`);
");
// Clean up orphaned asset_id rows in software_assets
mysqli_query($mysqli, "
DELETE FROM `software_assets`
WHERE `asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Add foreign keys to software_assets
mysqli_query($mysqli, "
ALTER TABLE `software_assets`
ADD FOREIGN KEY (`software_id`) REFERENCES `software`(`software_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
");

View File

@@ -0,0 +1,31 @@
<?php
/*
* ITFlow - Database update to version 2.0.3 (from 2.0.2)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Clean up orphans
mysqli_query($mysqli, "
DELETE FROM `calendar_event_attendees`
WHERE `attendee_event_id` NOT IN (SELECT `event_id` FROM `calendar_events`);
");
mysqli_query($mysqli, "
DELETE FROM `calendar_events`
WHERE `event_calendar_id` NOT IN (SELECT `calendar_id` FROM `calendars`);
");
// Add foreign key to calendar_event_attendees
mysqli_query($mysqli, "
ALTER TABLE `calendar_event_attendees`
ADD FOREIGN KEY (`attendee_event_id`) REFERENCES `calendar_events`(`event_id`) ON DELETE CASCADE
");
// Add foreign key to calendar_events
mysqli_query($mysqli, "
ALTER TABLE `calendar_events`
ADD FOREIGN KEY (`event_calendar_id`) REFERENCES `calendars`(`calendar_id`) ON DELETE CASCADE
");

View File

@@ -0,0 +1,20 @@
<?php
/*
* ITFlow - Database update to version 2.0.4 (from 2.0.3)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Clean up orphaned history
mysqli_query($mysqli, "
DELETE FROM `certificate_history`
WHERE `certificate_history_certificate_id` NOT IN (SELECT `certificate_id` FROM `certificates`);
");
// Add foreign key certificate history
mysqli_query($mysqli, "
ALTER TABLE `certificate_history`
ADD FOREIGN KEY (`certificate_history_certificate_id`) REFERENCES `certificates`(`certificate_id`) ON DELETE CASCADE
");

View File

@@ -0,0 +1,364 @@
<?php
/*
* ITFlow - Database update to version 2.0.5 (from 2.0.4)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Clean up orphaned history
mysqli_query($mysqli, "
DELETE FROM `client_notes`
WHERE `client_note_client_id` NOT IN (SELECT `client_id` FROM `clients`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `client_notes`
ADD FOREIGN KEY (`client_note_client_id`) REFERENCES `clients`(`client_id`) ON DELETE CASCADE
");
// Clean up orphaned history
mysqli_query($mysqli, "
DELETE FROM `client_tags`
WHERE `client_id` NOT IN (SELECT `client_id` FROM `clients`);
");
// Clean up orphaned history
mysqli_query($mysqli, "
DELETE FROM `client_tags`
WHERE `tag_id` NOT IN (SELECT `tag_id` FROM `tags`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `client_tags`
ADD FOREIGN KEY (`client_id`) REFERENCES `clients`(`client_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`tag_id`) REFERENCES `tags`(`tag_id`) ON DELETE CASCADE
");
//Contact Assets
// Clean up orphaned history
mysqli_query($mysqli, "
DELETE FROM `contact_assets`
WHERE `contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
mysqli_query($mysqli, "
DELETE FROM `contact_assets`
WHERE `asset_id` NOT IN (SELECT `asset_id` FROM `assets`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `contact_assets`
ADD FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
");
// Contact Documents
// Clean up orphaned history
mysqli_query($mysqli, "
DELETE FROM `contact_documents`
WHERE `contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
mysqli_query($mysqli, "
DELETE FROM `contact_documents`
WHERE `document_id` NOT IN (SELECT `document_id` FROM `documents`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `contact_documents`
ADD FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`document_id`) REFERENCES `documents`(`document_id`) ON DELETE CASCADE
");
// contact_files
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `contact_files`
WHERE `contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
mysqli_query($mysqli, "
DELETE FROM `contact_files`
WHERE `file_id` NOT IN (SELECT `file_id` FROM `files`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `contact_files`
ADD FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE
");
// contact_notes
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `contact_notes`
WHERE `contact_note_contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `contact_notes`
ADD FOREIGN KEY (`contact_note_contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE
");
// contact_tags
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `contact_tags`
WHERE `contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
mysqli_query($mysqli, "
DELETE FROM `contact_tags`
WHERE `tag_id` NOT IN (SELECT `tag_id` FROM `tags`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `contact_tags`
ADD FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`tag_id`) REFERENCES `tags`(`tag_id`) ON DELETE CASCADE
");
// document_files
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `document_files`
WHERE `document_id` NOT IN (SELECT `document_id` FROM `documents`);
");
mysqli_query($mysqli, "
DELETE FROM `document_files`
WHERE `file_id` NOT IN (SELECT `file_id` FROM `files`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `document_files`
ADD FOREIGN KEY (`document_id`) REFERENCES `documents`(`document_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE
");
// domain_history
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `domain_history`
WHERE `domain_history_domain_id` NOT IN (SELECT `domain_id` FROM `domains`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `domain_history`
ADD FOREIGN KEY (`domain_history_domain_id`) REFERENCES `domains`(`domain_id`) ON DELETE CASCADE
");
// location_tags
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `location_tags`
WHERE `location_id` NOT IN (SELECT `location_id` FROM `locations`);
");
mysqli_query($mysqli, "
DELETE FROM `location_tags`
WHERE `tag_id` NOT IN (SELECT `tag_id` FROM `tags`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `location_tags`
ADD FOREIGN KEY (`location_id`) REFERENCES `locations`(`location_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`tag_id`) REFERENCES `tags`(`tag_id`) ON DELETE CASCADE
");
// quote_files
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `quote_files`
WHERE `quote_id` NOT IN (SELECT `quote_id` FROM `quotes`);
");
mysqli_query($mysqli, "
DELETE FROM `quote_files`
WHERE `file_id` NOT IN (SELECT `file_id` FROM `files`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `quote_files`
ADD FOREIGN KEY (`quote_id`) REFERENCES `quotes`(`quote_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE
");
// service_certificates
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `service_certificates`
WHERE `service_id` NOT IN (SELECT `service_id` FROM `services`);
");
mysqli_query($mysqli, "
DELETE FROM `service_certificates`
WHERE `certificate_id` NOT IN (SELECT `certificate_id` FROM `certificates`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `service_certificates`
ADD FOREIGN KEY (`service_id`) REFERENCES `services`(`service_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`certificate_id`) REFERENCES `certificates`(`certificate_id`) ON DELETE CASCADE
");
// service_contacts
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `service_contacts`
WHERE `service_id` NOT IN (SELECT `service_id` FROM `services`);
");
mysqli_query($mysqli, "
DELETE FROM `service_contacts`
WHERE `contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `service_contacts`
ADD FOREIGN KEY (`service_id`) REFERENCES `services`(`service_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE
");
// service_documents
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `service_documents`
WHERE `service_id` NOT IN (SELECT `service_id` FROM `services`);
");
mysqli_query($mysqli, "
DELETE FROM `service_documents`
WHERE `document_id` NOT IN (SELECT `document_id` FROM `documents`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `service_documents`
ADD FOREIGN KEY (`service_id`) REFERENCES `services`(`service_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`document_id`) REFERENCES `documents`(`document_id`) ON DELETE CASCADE
");
// service_domains
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `service_domains`
WHERE `service_id` NOT IN (SELECT `service_id` FROM `services`);
");
mysqli_query($mysqli, "
DELETE FROM `service_domains`
WHERE `domain_id` NOT IN (SELECT `domain_id` FROM `domains`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `service_domains`
ADD FOREIGN KEY (`service_id`) REFERENCES `services`(`service_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`domain_id`) REFERENCES `domains`(`domain_id`) ON DELETE CASCADE
");
// service_vendors
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `service_vendors`
WHERE `service_id` NOT IN (SELECT `service_id` FROM `services`);
");
mysqli_query($mysqli, "
DELETE FROM `service_vendors`
WHERE `vendor_id` NOT IN (SELECT `vendor_id` FROM `vendors`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `service_vendors`
ADD FOREIGN KEY (`service_id`) REFERENCES `services`(`service_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`vendor_id`) ON DELETE CASCADE
");
// software_contacts
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `software_contacts`
WHERE `software_id` NOT IN (SELECT `software_id` FROM `software`);
");
mysqli_query($mysqli, "
DELETE FROM `software_contacts`
WHERE `contact_id` NOT IN (SELECT `contact_id` FROM `contacts`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `software_contacts`
ADD FOREIGN KEY (`software_id`) REFERENCES `software`(`software_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE
");
// software_documents
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `software_documents`
WHERE `software_id` NOT IN (SELECT `software_id` FROM `software`);
");
mysqli_query($mysqli, "
DELETE FROM `software_documents`
WHERE `document_id` NOT IN (SELECT `document_id` FROM `documents`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `software_documents`
ADD FOREIGN KEY (`software_id`) REFERENCES `software`(`software_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`document_id`) REFERENCES `documents`(`document_id`) ON DELETE CASCADE
");
// software_files
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `software_files`
WHERE `software_id` NOT IN (SELECT `software_id` FROM `software`);
");
mysqli_query($mysqli, "
DELETE FROM `software_files`
WHERE `file_id` NOT IN (SELECT `file_id` FROM `files`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `software_files`
ADD FOREIGN KEY (`software_id`) REFERENCES `software`(`software_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE
");
// vendor_documents
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `vendor_documents`
WHERE `vendor_id` NOT IN (SELECT `vendor_id` FROM `vendors`);
");
mysqli_query($mysqli, "
DELETE FROM `vendor_documents`
WHERE `document_id` NOT IN (SELECT `document_id` FROM `documents`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `vendor_documents`
ADD FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`vendor_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`document_id`) REFERENCES `documents`(`document_id`) ON DELETE CASCADE
");
// vendor_files
// Clean up orphaned rows
mysqli_query($mysqli, "
DELETE FROM `vendor_files`
WHERE `vendor_id` NOT IN (SELECT `vendor_id` FROM `vendors`);
");
mysqli_query($mysqli, "
DELETE FROM `vendor_files`
WHERE `file_id` NOT IN (SELECT `file_id` FROM `files`);
");
// Add foreign key
mysqli_query($mysqli, "
ALTER TABLE `vendor_files`
ADD FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`vendor_id`) ON DELETE CASCADE,
ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE
");

View File

@@ -0,0 +1,36 @@
<?php
/*
* ITFlow - Database update to version 2.0.6 (from 2.0.5)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// CONVERT All tables TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
$tables = [
'accounts', 'api_keys', 'app_logs', 'asset_credentials', 'asset_custom', 'asset_documents',
'asset_files', 'asset_history', 'asset_interface_links', 'asset_interfaces', 'asset_notes', 'assets',
'auth_logs', 'budget', 'calendar_event_attendees', 'calendar_events', 'calendars', 'categories',
'certificate_history', 'certificates', 'client_notes', 'client_stripe', 'client_tags', 'clients',
'companies', 'contact_assets', 'contact_credentials', 'contact_documents', 'contact_files', 'contact_notes',
'contact_tags', 'contacts', 'credential_tags', 'credentials', 'custom_fields', 'custom_links',
'custom_values', 'document_files', 'documents', 'domain_history', 'domains', 'email_queue', 'expenses',
'files', 'folders', 'history', 'invoice_items', 'invoices', 'location_tags', 'locations', 'logs',
'modules', 'networks', 'notifications', 'payments', 'products', 'project_template_ticket_templates',
'project_templates', 'projects', 'quote_files', 'quotes', 'rack_units', 'racks', 'records',
'recurring_expenses', 'recurring_invoices', 'recurring_payments', 'recurring_ticket_assets', 'recurring_tickets',
'remember_tokens', 'revenues', 'service_assets', 'service_certificates', 'service_contacts', 'service_credentials',
'service_documents', 'service_domains', 'service_vendors', 'services', 'settings', 'shared_items',
'software', 'software_assets', 'software_contacts', 'software_credentials', 'software_documents', 'software_files',
'tags', 'task_templates', 'tasks', 'taxes', 'ticket_assets', 'ticket_attachments', 'ticket_history', 'ticket_replies',
'ticket_statuses', 'ticket_templates', 'ticket_views', 'ticket_watchers', 'tickets', 'transfers', 'trips',
'user_client_permissions', 'user_role_permissions', 'user_roles', 'user_settings', 'users', 'vendor_credentials',
'vendor_documents', 'vendor_files', 'vendors'
];
foreach ($tables as $table) {
$sql = "ALTER TABLE `$table` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;";
mysqli_query($mysqli, $sql);
}

View File

@@ -0,0 +1,11 @@
<?php
/*
* ITFlow - Database update to version 2.0.7 (from 2.0.6)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Fix service_domains to yse InnoDB instead of MyISAM
mysqli_query($mysqli, "ALTER TABLE service_domains ENGINE = InnoDB;");

View File

@@ -0,0 +1,10 @@
<?php
/*
* ITFlow - Database update to version 2.0.8 (from 2.0.7)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_hash`");

View File

@@ -0,0 +1,12 @@
<?php
/*
* ITFlow - Database update to version 2.0.9 (from 2.0.8)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_has_thumbnail`");
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_has_preview`");
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_asset_id`");

View File

@@ -0,0 +1,19 @@
<?php
/*
* ITFlow - Database update to version 2.1.0 (from 2.0.9)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `contacts` ADD `contact_phone_country_code` VARCHAR(10) DEFAULT 1 AFTER `contact_email`");
mysqli_query($mysqli, "ALTER TABLE `contacts` ADD `contact_mobile_country_code` VARCHAR(10) DEFAULT 1 AFTER `contact_extension`");
mysqli_query($mysqli, "ALTER TABLE `locations` ADD `location_phone_country_code` VARCHAR(10) DEFAULT 1 AFTER `location_zip`");
mysqli_query($mysqli, "ALTER TABLE `locations` ADD `location_phone_extension` VARCHAR(10) DEFAULT NULL AFTER `location_phone`");
mysqli_query($mysqli, "ALTER TABLE `locations` ADD `location_fax_country_code` VARCHAR(10) DEFAULT 1 AFTER `location_phone_extension`");
mysqli_query($mysqli, "ALTER TABLE `vendors` ADD `vendor_phone_country_code` VARCHAR(10) DEFAULT 1 AFTER `vendor_contact_name`");
mysqli_query($mysqli, "ALTER TABLE `companies` ADD `company_phone_country_code` VARCHAR(10) DEFAULT 1 AFTER `company_country`");

View File

@@ -0,0 +1,10 @@
<?php
/*
* ITFlow - Database update to version 2.1.1 (from 2.1.0)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `user_settings` ADD `user_config_signature` TEXT DEFAULT NULL AFTER `user_config_calendar_first_day`");

View File

@@ -0,0 +1,10 @@
<?php
/*
* ITFlow - Database update to version 2.1.2 (from 2.1.1)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `settings` DROP `config_phone_mask`");

View File

@@ -0,0 +1,36 @@
<?php
/*
* ITFlow - Database update to version 2.1.3 (from 2.1.2)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Update country_code to NULL for `contacts` table
mysqli_query($mysqli, "ALTER TABLE `contacts` MODIFY `contact_phone_country_code` VARCHAR(10) DEFAULT NULL");
mysqli_query($mysqli, "ALTER TABLE `contacts` MODIFY `contact_mobile_country_code` VARCHAR(10) DEFAULT NULL");
// Update country_code to NULL for `locations` table
mysqli_query($mysqli, "ALTER TABLE `locations` MODIFY `location_phone_country_code` VARCHAR(10) DEFAULT NULL");
mysqli_query($mysqli, "ALTER TABLE `locations` MODIFY `location_fax_country_code` VARCHAR(10) DEFAULT NULL");
// Update country_code to NULL for `vendors` table
mysqli_query($mysqli, "ALTER TABLE `vendors` MODIFY `vendor_phone_country_code` VARCHAR(10) DEFAULT NULL");
// Update country_code to NULL for `companies` table
mysqli_query($mysqli, "ALTER TABLE `companies` MODIFY `company_phone_country_code` VARCHAR(10) DEFAULT NULL");
// Set country_code to NULL for `contacts` table
mysqli_query($mysqli, "UPDATE `contacts` SET `contact_phone_country_code` = NULL");
mysqli_query($mysqli, "UPDATE `contacts` SET `contact_mobile_country_code` = NULL");
// Set country_code to NULL for `locations` table
mysqli_query($mysqli, "UPDATE `locations` SET `location_phone_country_code` = NULL");
mysqli_query($mysqli, "UPDATE `locations` SET `location_fax_country_code` = NULL");
// Set country_code to NULL for `vendors` table
mysqli_query($mysqli, "UPDATE `vendors` SET `vendor_phone_country_code` = NULL");
// Set country_code to NULL for `companies` table
mysqli_query($mysqli, "UPDATE `companies` SET `company_phone_country_code` = NULL");

View File

@@ -0,0 +1,11 @@
<?php
/*
* ITFlow - Database update to version 2.1.4 (from 2.1.3)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `client_stripe` ADD `stripe_pm_details` VARCHAR(200) DEFAULT NULL AFTER `stripe_pm`");
mysqli_query($mysqli, "ALTER TABLE `client_stripe` ADD `stripe_pm_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `stripe_pm_details`");

View File

@@ -0,0 +1,13 @@
<?php
/*
* ITFlow - Database update to version 2.1.5 (from 2.1.4)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_ticket_timer_autostart` TINYINT(1) NOT NULL DEFAULT '0' AFTER `config_ticket_default_billable`");
mysqli_query($mysqli, "ALTER TABLE `tickets` ADD `ticket_due_at` DATETIME DEFAULT NULL AFTER `ticket_updated_at`");
mysqli_query($mysqli, "ALTER TABLE `companies` ADD `company_tax_id` VARCHAR(200) DEFAULT NULL AFTER `company_currency`");
mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_invoice_show_tax_id` TINYINT(1) NOT NULL DEFAULT '0' AFTER `config_invoice_paid_notification_email`");

View File

@@ -0,0 +1,27 @@
<?php
/*
* ITFlow - Database update to version 2.1.6 (from 2.1.5)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "CREATE TABLE `document_versions` (
`document_version_id` INT(11) NOT NULL AUTO_INCREMENT,
`document_version_name` VARCHAR(200) NOT NULL,
`document_version_description` TEXT DEFAULT NULL,
`document_version_content` LONGTEXT NOT NULL,
`document_version_created_by` INT(11) DEFAULT 0,
`document_version_created_at` DATETIME NOT NULL,
`document_version_document_id` INT(11) NOT NULL,
PRIMARY KEY (`document_version_id`)
)");
// Delete all Current Document Versions
mysqli_query($mysqli, "
DELETE FROM `documents`
WHERE `document_parent` > 0 AND `document_parent` != `document_id`
");
mysqli_query($mysqli, "ALTER TABLE `documents` DROP `document_parent`");

View File

@@ -0,0 +1,52 @@
<?php
/*
* ITFlow - Database update to version 2.1.7 (from 2.1.6)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "CREATE TABLE `document_templates` (
`document_template_id` INT(11) NOT NULL AUTO_INCREMENT,
`document_template_name` VARCHAR(200) NOT NULL,
`document_template_description` TEXT DEFAULT NULL,
`document_template_content` LONGTEXT NOT NULL,
`document_template_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`document_template_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
`document_template_archived_at` DATETIME NULL DEFAULT NULL,
`document_template_created_by` INT(11) NOT NULL DEFAULT 0,
`document_template_updated_by` INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`document_template_id`)
)");
// Copy Document Templates over to new document templates table
mysqli_query($mysqli, "
INSERT INTO document_templates (
document_template_name,
document_template_description,
document_template_content,
document_template_created_at,
document_template_updated_at,
document_template_archived_at,
document_template_created_by,
document_template_updated_by
)
SELECT
document_name,
document_description,
document_content,
document_created_at,
document_updated_at,
document_archived_at,
document_created_by,
document_updated_by
FROM
documents
WHERE
document_template = 1
");
mysqli_query($mysqli, "DELETE FROM documents WHERE document_template = 1");
mysqli_query($mysqli, "ALTER TABLE `documents` DROP `document_template`");

View File

@@ -0,0 +1,57 @@
<?php
/*
* ITFlow - Database update to version 2.1.8 (from 2.1.7)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "CREATE TABLE `software_templates` (
`software_template_id` INT(11) NOT NULL AUTO_INCREMENT,
`software_template_name` VARCHAR(200) NOT NULL,
`software_template_description` TEXT DEFAULT NULL,
`software_template_version` VARCHAR(200) DEFAULT NULL,
`software_template_type` VARCHAR(200) NOT NULL,
`software_template_license_type` VARCHAR(200) DEFAULT NULL,
`software_template_notes` TEXT DEFAULT NULL,
`software_template_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`software_template_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
`software_template_archived_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`software_template_id`)
)");
// Copy software Templates over to new software templates table
mysqli_query($mysqli, "
INSERT INTO software_templates (
software_template_name,
software_template_description,
software_template_version,
software_template_type,
software_template_license_type,
software_template_notes,
software_template_created_at,
software_template_updated_at,
software_template_archived_at
)
SELECT
software_name,
software_description,
software_version,
software_type,
software_license_type,
software_notes,
software_created_at,
software_updated_at,
software_archived_at
FROM
software
WHERE
software_template = 1
");
mysqli_query($mysqli, "DELETE FROM software WHERE software_template = 1");
mysqli_query($mysqli, "ALTER TABLE `software` DROP `software_template`");
mysqli_query($mysqli, "ALTER TABLE `software` DROP `software_template_id`");

View File

@@ -0,0 +1,76 @@
<?php
/*
* ITFlow - Database update to version 2.1.9 (from 2.1.8)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "CREATE TABLE `vendor_templates` (
`vendor_template_id` INT(11) NOT NULL AUTO_INCREMENT,
`vendor_template_name` VARCHAR(200) NOT NULL,
`vendor_template_description` VARCHAR(200) DEFAULT NULL,
`vendor_template_contact_name` VARCHAR(200) DEFAULT NULL,
`vendor_template_phone_country_code` VARCHAR(10) DEFAULT NULL,
`vendor_template_phone` VARCHAR(200) DEFAULT NULL,
`vendor_template_extension` VARCHAR(200) DEFAULT NULL,
`vendor_template_email` VARCHAR(200) DEFAULT NULL,
`vendor_template_website` VARCHAR(200) DEFAULT NULL,
`vendor_template_hours` VARCHAR(200) DEFAULT NULL,
`vendor_template_sla` VARCHAR(200) DEFAULT NULL,
`vendor_template_code` VARCHAR(200) DEFAULT NULL,
`vendor_template_account_number` VARCHAR(200) DEFAULT NULL,
`vendor_template_notes` TEXT DEFAULT NULL,
`vendor_template_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`vendor_template_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
`vendor_template_archived_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`vendor_template_id`)
)");
// Copy Vendor Templates over to new vendor templates table
mysqli_query($mysqli, "
INSERT INTO vendor_templates (
vendor_template_name,
vendor_template_description,
vendor_template_contact_name,
vendor_template_phone_country_code,
vendor_template_phone,
vendor_template_extension,
vendor_template_email,
vendor_template_website,
vendor_template_hours,
vendor_template_sla,
vendor_template_code,
vendor_template_account_number,
vendor_template_notes,
vendor_template_created_at,
vendor_template_updated_at,
vendor_template_archived_at
)
SELECT
vendor_name,
vendor_description,
vendor_contact_name,
vendor_phone_country_code,
vendor_phone,
vendor_extension,
vendor_email,
vendor_website,
vendor_hours,
vendor_sla,
vendor_code,
vendor_account_number,
vendor_notes,
vendor_created_at,
vendor_updated_at,
vendor_archived_at
FROM
vendors
WHERE
vendor_template = 1
");
mysqli_query($mysqli, "DELETE FROM vendors WHERE vendor_template = 1");
mysqli_query($mysqli, "ALTER TABLE `vendors` DROP `vendor_template`");

View File

@@ -0,0 +1,10 @@
<?php
/*
* ITFlow - Database update to version 2.2.0 (from 2.1.9)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `companies` MODIFY `company_currency` VARCHAR(200) DEFAULT 'USD'");

View File

@@ -0,0 +1,10 @@
<?php
/*
* ITFlow - Database update to version 2.2.1 (from 2.2.0)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `tickets` ADD `ticket_quote_id` INT(11) NOT NULL DEFAULT 0 AFTER `ticket_asset_id`");

View File

@@ -0,0 +1,34 @@
<?php
/*
* ITFlow - Database update to version 2.2.2 (from 2.2.1)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "CREATE TABLE `ai_providers` (
`ai_provider_id` INT(11) NOT NULL AUTO_INCREMENT,
`ai_provider_name` VARCHAR(200) NOT NULL,
`ai_provider_api_url` VARCHAR(200) NOT NULL,
`ai_provider_api_key` VARCHAR(200) DEFAULT NULL,
`ai_provider_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ai_provider_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ai_provider_id`)
)");
mysqli_query($mysqli, "
CREATE TABLE `ai_models` (
`ai_model_id` INT(11) NOT NULL AUTO_INCREMENT,
`ai_model_name` VARCHAR(200) NOT NULL,
`ai_model_prompt` TEXT DEFAULT NULL,
`ai_model_use_case` VARCHAR(200) DEFAULT NULL,
`ai_model_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ai_model_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
`ai_model_ai_provider_id` INT(11) NOT NULL,
PRIMARY KEY (`ai_model_id`),
FOREIGN KEY (`ai_model_ai_provider_id`)
REFERENCES `ai_providers`(`ai_provider_id`)
ON DELETE CASCADE
)
");

View File

@@ -0,0 +1,62 @@
<?php
/*
* ITFlow - Database update to version 2.2.3 (from 2.2.2)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "CREATE TABLE `payment_methods` (
`payment_method_id` INT(11) NOT NULL AUTO_INCREMENT,
`payment_method_name` VARCHAR(200) NOT NULL,
`payment_method_description` VARCHAR(250) DEFAULT NULL,
`payment_method_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`payment_method_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`payment_method_id`)
)");
mysqli_query($mysqli, "CREATE TABLE `payment_providers` (
`payment_provider_id` INT(11) NOT NULL AUTO_INCREMENT,
`payment_provider_name` VARCHAR(200) NOT NULL,
`payment_provider_description` VARCHAR(250) DEFAULT NULL,
`payment_provider_public_key` VARCHAR(250) DEFAULT NULL,
`payment_provider_private_key` VARCHAR(250) DEFAULT NULL,
`payment_provider_threshold` DECIMAL(15,2) DEFAULT NULL,
`payment_provider_active` TINYINT(1) NOT NULL DEFAULT 1,
`payment_provider_account` INT(11) NOT NULL,
`payment_provider_expense_vendor` INT(11) NOT NULL DEFAULT 0,
`payment_provider_expense_category` INT(11) NOT NULL DEFAULT 0,
`payment_provider_expense_percentage_fee` DECIMAL(4,4) DEFAULT NULL,
`payment_provider_expense_flat_fee` DECIMAL(15,2) DEFAULT NULL,
`payment_provider_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`payment_provider_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`payment_provider_id`)
)");
mysqli_query($mysqli, "CREATE TABLE `client_saved_payment_methods` (
`saved_payment_id` INT(11) NOT NULL AUTO_INCREMENT,
`saved_payment_provider_method` VARCHAR(200) NOT NULL,
`saved_payment_description` VARCHAR(200) DEFAULT NULL,
`saved_payment_client_id` INT(11) NOT NULL,
`saved_payment_provider_id` INT(11) NOT NULL,
`saved_payment_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`saved_payment_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`saved_payment_id`),
FOREIGN KEY (`saved_payment_client_id`) REFERENCES clients(`client_id`) ON DELETE CASCADE,
FOREIGN KEY (`saved_payment_provider_id`) REFERENCES payment_providers(`payment_provider_id`) ON DELETE CASCADE
)");
mysqli_query($mysqli, "CREATE TABLE `client_payment_provider` (
`client_id` INT(11) NOT NULL,
`payment_provider_id` INT(11) NOT NULL,
`payment_provider_client` VARCHAR(200) NOT NULL,
`client_payment_provider_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`client_id`, `payment_provider_id`),
FOREIGN KEY (`client_id`) REFERENCES clients(`client_id`) ON DELETE CASCADE,
FOREIGN KEY (`payment_provider_id`) REFERENCES payment_providers(`payment_provider_id`) ON DELETE CASCADE
)");
mysqli_query($mysqli, "ALTER TABLE `recurring_payments` ADD `recurring_payment_saved_payment_id` INT(11) DEFAULT NULL AFTER `recurring_payment_recurring_invoice_id`");
mysqli_query($mysqli, "ALTER TABLE `recurring_payments` ADD CONSTRAINT `fk_recurring_saved_payment` FOREIGN KEY (`recurring_payment_saved_payment_id`) REFERENCES `client_saved_payment_methods`(`saved_payment_id`) ON DELETE CASCADE");

View File

@@ -0,0 +1,34 @@
<?php
/*
* ITFlow - Database update to version 2.2.4 (from 2.2.3)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "CREATE TABLE `credits` (
`credit_id` INT(11) NOT NULL AUTO_INCREMENT,
`credit_amount` DECIMAL(15,2) NOT NULL,
`credit_reference` VARCHAR(250) DEFAULT NULL,
`credit_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`credit_created_by` INT(11) NOT NULL,
`credit_expire_at` DATE DEFAULT NULL,
`credit_client_id` INT(11) NOT NULL,
PRIMARY KEY (`credit_id`)
)");
mysqli_query($mysqli, "ALTER TABLE `invoices` ADD `invoice_credit_amount` DECIMAL(15,2) NOT NULL DEFAULT 0.00 AFTER `invoice_discount_amount`");
mysqli_query($mysqli, "CREATE TABLE `discount_codes` (
`discount_code_id` INT(11) NOT NULL AUTO_INCREMENT,
`discount_code_description` VARCHAR(250) DEFAULT NULL,
`discount_code_amount` DECIMAL(15,2) NOT NULL,
`discount_code` VARCHAR(200) NOT NULL,
`discount_code_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`discount_code_created_by` INT(11) NOT NULL,
`discount_code_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
`discount_code_archived_at` DATETIME NULL DEFAULT NULL,
`discount_code_expire_at` DATE DEFAULT NULL,
PRIMARY KEY (`discount_code_id`)
)");

View File

@@ -0,0 +1,10 @@
<?php
/*
* ITFlow - Database update to version 2.2.5 (from 2.2.4)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_theme_dark` TINYINT(1) NOT NULL DEFAULT 0 AFTER `config_theme`");

View File

@@ -0,0 +1,10 @@
<?php
/*
* ITFlow - Database update to version 2.2.6 (from 2.2.5)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `assets` ADD `asset_uri_client` VARCHAR(500) NULL DEFAULT NULL AFTER `asset_uri_2`");

View File

@@ -0,0 +1,16 @@
<?php
/*
* ITFlow - Database update to version 2.2.7 (from 2.2.6)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `credits` DROP `credit_reference`");
mysqli_query($mysqli, "ALTER TABLE `credits` ADD `credit_type` ENUM('prepaid', 'manual', 'refund', 'promotion', 'usage') NOT NULL DEFAULT 'manual' AFTER `credit_amount`");
mysqli_query($mysqli, "ALTER TABLE `credits` ADD `credit_note` TEXT NULL DEFAULT NULL AFTER `credit_type`");
mysqli_query($mysqli, "ALTER TABLE `credits` ADD `credit_invoice_id` INT(11) NULL DEFAULT NULL AFTER `credit_expire_at`");
mysqli_query($mysqli, "ALTER TABLE `credits` ADD INDEX (`credit_client_id`)");
mysqli_query($mysqli, "ALTER TABLE `credits` ADD INDEX (`credit_invoice_id`)");
mysqli_query($mysqli, "ALTER TABLE `credits` ADD INDEX (`credit_created_at`)");

View File

@@ -0,0 +1,11 @@
<?php
/*
* ITFlow - Database update to version 2.2.8 (from 2.2.7)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `user_settings` ADD `user_config_theme_dark` TINYINT(1) NOT NULL DEFAULT 0 AFTER `user_config_signature`");
mysqli_query($mysqli, "ALTER TABLE `settings` DROP `config_theme_dark`");

View File

@@ -0,0 +1,23 @@
<?php
/*
* ITFlow - Database update to version 2.2.9 (from 2.2.8)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `products` ADD `product_type` ENUM('service', 'product') NOT NULL DEFAULT 'service' AFTER `product_name`");
mysqli_query($mysqli, "ALTER TABLE `products` ADD `product_code` VARCHAR(200) DEFAULT NULL AFTER `product_description`");
mysqli_query($mysqli, "ALTER TABLE `products` ADD `product_location` VARCHAR(250) DEFAULT NULL AFTER `product_code`");
mysqli_query($mysqli, "CREATE TABLE `product_stock` (
`stock_id` INT(11) NOT NULL AUTO_INCREMENT,
`stock_qty` INT(11) NOT NULL,
`stock_note` TEXT DEFAULT NULL,
`stock_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`stock_expense_id` INT(11) DEFAULT NULL,
`stock_item_id` INT(11) DEFAULT NULL,
`stock_product_id` INT(11) NOT NULL,
PRIMARY KEY (`stock_id`)
)");

View File

@@ -0,0 +1,84 @@
<?php
/*
* ITFlow - Database update to version 2.3.0 (from 2.2.9)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Migrate Stripe Settings over to new Tables
// Get Current Stripe Settings
$sql_stripe_settings = mysqli_query($mysqli, "SELECT * FROM settings WHERE company_id = 1");
$row = mysqli_fetch_assoc($sql_stripe_settings);
$config_stripe_enable = intval($row['config_stripe_enable']);
if ($config_stripe_enable === 1) {
$config_stripe_publishable = mysqli_real_escape_string($mysqli, $row['config_stripe_publishable']);
$config_stripe_secret = mysqli_real_escape_string($mysqli, $row['config_stripe_secret']);
$config_stripe_account = intval($row['config_stripe_account']);
$config_stripe_expense_vendor = intval($row['config_stripe_expense_vendor']);
$config_stripe_expense_category = intval($row['config_stripe_expense_category']);
$config_stripe_percentage_fee = floatval($row['config_stripe_percentage_fee']);
$config_stripe_flat_fee = floatval($row['config_stripe_flat_fee']);
mysqli_query($mysqli,"INSERT INTO payment_providers SET
payment_provider_name = 'Stripe',
payment_provider_public_key = '$config_stripe_publishable',
payment_provider_private_key = '$config_stripe_secret',
payment_provider_account = $config_stripe_account,
payment_provider_expense_vendor = $config_stripe_expense_vendor,
payment_provider_expense_category = $config_stripe_expense_category,
payment_provider_expense_percentage_fee = $config_stripe_percentage_fee,
payment_provider_expense_flat_fee = $config_stripe_flat_fee"
);
$provider_id = mysqli_insert_id($mysqli);
// Migrate Clients and Payment Method over
$sql_stripe_clients = mysqli_query($mysqli, "SELECT * FROM client_stripe WHERE stripe_pm IS NOT NULL AND stripe_pm != ''");
while ($row = mysqli_fetch_assoc($sql_stripe_clients)) {
$client_id = intval($row['client_id']);
$stripe_id = mysqli_real_escape_string($mysqli, $row['stripe_id']);
$stripe_pm = mysqli_real_escape_string($mysqli, $row['stripe_pm']);
$stripe_pm_details = mysqli_real_escape_string($mysqli, $row['stripe_pm_details'] ?? 'Saved Card');
mysqli_query($mysqli,"INSERT INTO client_payment_provider SET
client_id = $client_id,
payment_provider_id = $provider_id,
payment_provider_client = '$stripe_id'"
);
mysqli_query($mysqli,"INSERT INTO client_saved_payment_methods SET
saved_payment_provider_method = '$stripe_pm',
saved_payment_description = '$stripe_pm_details',
saved_payment_client_id = $client_id,
saved_payment_provider_id = $provider_id"
);
}
}
// Get Stripe provider id
$res = mysqli_query($mysqli, "
SELECT payment_provider_id
FROM payment_providers
WHERE payment_provider_name = 'Stripe'
ORDER BY payment_provider_id DESC
LIMIT 1
");
$stripe = mysqli_fetch_assoc($res);
$stripe_provider_id = intval($stripe['payment_provider_id']);
// Correct mapping: RP -> Recurring Invoice -> Client -> Client's Stripe saved method
mysqli_query($mysqli, "
UPDATE recurring_payments rp
INNER JOIN recurring_invoices ri
ON ri.recurring_invoice_id = rp.recurring_payment_recurring_invoice_id
INNER JOIN client_saved_payment_methods spm
ON spm.saved_payment_client_id = ri.recurring_invoice_client_id
AND spm.saved_payment_provider_id = $stripe_provider_id
SET
rp.recurring_payment_method = 'Credit Card',
rp.recurring_payment_saved_payment_id = spm.saved_payment_id
WHERE rp.recurring_payment_method = 'Stripe'
");

View File

@@ -0,0 +1,17 @@
<?php
/*
* ITFlow - Database update to version 2.3.1 (from 2.3.0)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Migrate Payment Methods from Categories Table to new payment_methods table
$sql_categories = mysqli_query($mysqli, "SELECT category_name FROM categories WHERE category_type = 'Payment Method' AND category_name != 'Stripe' AND category_archived_at IS NULL");
while ($row = mysqli_fetch_assoc($sql_categories)) {
$category_name = escapeSql($row['category_name']);
mysqli_query($mysqli,"INSERT INTO payment_methods SET payment_method_name = '$category_name'");
}

View File

@@ -0,0 +1,31 @@
<?php
/*
* ITFlow - Database update to version 2.3.2 (from 2.3.1)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Delete all Recurring Payments that are Stripe
mysqli_query($mysqli, "DELETE FROM recurring_payments WHERE recurring_payment_method = 'Stripe'");
// Delete Stripe Specific ITFlow Client Stripe Client Relationship Table
mysqli_query($mysqli, "DROP TABLE client_stripe");
// Delete Unused Stripe and AI Settings now in their own tables
mysqli_query($mysqli, "ALTER TABLE `settings`
DROP `config_stripe_enable`,
DROP `config_stripe_publishable`,
DROP `config_stripe_secret`,
DROP `config_stripe_account`,
DROP `config_stripe_expense_vendor`,
DROP `config_stripe_expense_category`,
DROP `config_stripe_percentage_fee`,
DROP `config_stripe_flat_fee`,
DROP `config_ai_enable`,
DROP `config_ai_provider`,
DROP `config_ai_model`,
DROP `config_ai_url`,
DROP `config_ai_api_key`
");

View File

@@ -0,0 +1,18 @@
<?php
/*
* ITFlow - Database update to version 2.3.3 (from 2.3.2)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE settings
ADD `config_imap_provider` ENUM('standard_imap','google_oauth','microsoft_oauth') NULL DEFAULT NULL AFTER `config_mail_from_name`,
ADD `config_mail_oauth_client_id` VARCHAR(255) NULL AFTER `config_imap_provider`,
ADD `config_mail_oauth_client_secret` VARCHAR(255) NULL AFTER `config_mail_oauth_client_id`,
ADD `config_mail_oauth_tenant_id` VARCHAR(255) NULL AFTER `config_mail_oauth_client_secret`,
ADD `config_mail_oauth_refresh_token` TEXT NULL AFTER `config_mail_oauth_tenant_id`,
ADD `config_mail_oauth_access_token` TEXT NULL AFTER `config_mail_oauth_refresh_token`,
ADD `config_mail_oauth_access_token_expires_at` DATETIME NULL AFTER `config_mail_oauth_access_token`
");

View File

@@ -0,0 +1,12 @@
<?php
/*
* ITFlow - Database update to version 2.3.4 (from 2.3.3)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE settings
ADD `config_smtp_provider` ENUM('standard_smtp','google_oauth','microsoft_oauth') NULL DEFAULT NULL AFTER `config_start_page`
");

View File

@@ -0,0 +1,37 @@
<?php
/*
* ITFlow - Database update to version 2.3.5 (from 2.3.4)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Add Software Keys
mysqli_query($mysqli, "CREATE TABLE `software_keys` (
`software_key_id` INT(11) NOT NULL AUTO_INCREMENT,
`software_key` VARCHAR(400) NOT NULL,
`software_key_software_id` INT(11) NOT NULL,
PRIMARY KEY (`software_key_id`),
FOREIGN KEY (`software_key_software_id`) REFERENCES `software`(`software_id`) ON DELETE CASCADE
)");
// Software Key Assignments to Contacts
mysqli_query($mysqli, "CREATE TABLE `software_key_contact_assignments` (
`software_key_id` INT(11) NOT NULL,
`contact_id` INT(11) NOT NULL,
`software_key_assigned_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`software_key_id`, `contact_id`),
FOREIGN KEY (`software_key_id`) REFERENCES `software_keys`(`software_key_id`) ON DELETE CASCADE,
FOREIGN KEY (`contact_id`) REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE
)");
// Software Key Assignments to Assets
mysqli_query($mysqli, "CREATE TABLE `software_key_asset_assignments` (
`software_key_id` INT(11) NOT NULL,
`asset_id` INT(11) NOT NULL,
`software_key_assigned_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`software_key_id`, `asset_id`),
FOREIGN KEY (`software_key_id`) REFERENCES `software_keys`(`software_key_id`) ON DELETE CASCADE,
FOREIGN KEY (`asset_id`) REFERENCES `assets`(`asset_id`) ON DELETE CASCADE
)");

View File

@@ -0,0 +1,11 @@
<?php
/*
* ITFlow - Database update to version 2.3.6 (from 2.3.5)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `settings` CHANGE `config_smtp_provider` `config_smtp_provider` VARCHAR(200) DEFAULT NULL");
mysqli_query($mysqli, "ALTER TABLE `settings` CHANGE `config_imap_provider` `config_imap_provider` VARCHAR(200) DEFAULT NULL");

View File

@@ -0,0 +1,84 @@
<?php
/*
* ITFlow - Database update to version 2.3.7 (from 2.3.6)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Create New Contract Templates Table
mysqli_query($mysqli, "CREATE TABLE `contract_templates` (
`contract_template_id` INT(11) AUTO_INCREMENT PRIMARY KEY,
`contract_template_name` VARCHAR(255) NOT NULL,
`contract_template_description` TEXT NULL DEFAULT NULL,
`contract_template_type` VARCHAR(50) NULL DEFAULT NULL,
`contract_template_sla_low_response_time` INT(11) NULL DEFAULT NULL,
`contract_template_sla_low_resolution_time` INT(11) NULL DEFAULT NULL,
`contract_template_sla_medium_response_time` INT(11) NULL DEFAULT NULL,
`contract_template_sla_medium_resolution_time` INT(11) NULL DEFAULT NULL,
`contract_template_sla_high_response_time` INT(11) NULL DEFAULT NULL,
`contract_template_sla_high_resolution_time` INT(11) NULL DEFAULT NULL,
`contract_template_rate_standard` DECIMAL(10,2) NULL DEFAULT NULL,
`contract_template_rate_after_hours` DECIMAL(10,2) NULL DEFAULT NULL,
`contract_template_net_terms` VARCHAR(50) NULL DEFAULT NULL,
`contract_template_support_hours` VARCHAR(100) NULL DEFAULT NULL,
`contract_template_renewal_frequency` VARCHAR(50) NULL DEFAULT NULL,
`contract_template_details` TEXT NULL DEFAULT NULL,
`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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
// Create New Contracts Table
mysqli_query($mysqli, "CREATE TABLE `contracts` (
`contract_id` INT(11) AUTO_INCREMENT PRIMARY KEY,
`contract_name` VARCHAR(255) NOT NULL,
`contract_status` VARCHAR(50) NOT NULL,
`contract_type` VARCHAR(50) NOT NULL,
`contract_sla_low_response_time` INT(11) NULL DEFAULT NULL,
`contract_sla_low_resolution_time` INT(11) NULL DEFAULT NULL,
`contract_sla_medium_response_time` INT(11) NULL DEFAULT NULL,
`contract_sla_medium_resolution_time` INT(11) NULL DEFAULT NULL,
`contract_sla_high_response_time` INT(11) NULL DEFAULT NULL,
`contract_sla_high_resolution_time` INT(11) NULL DEFAULT NULL,
`contract_details` TEXT NULL DEFAULT NULL,
`contract_client_id` INT(11) NULL DEFAULT NULL,
`contract_client_name` VARCHAR(255) NULL DEFAULT NULL,
`contract_client_address` TEXT NULL DEFAULT NULL,
`contract_client_email` VARCHAR(255) NULL DEFAULT NULL,
`contract_client_phone` VARCHAR(100) NULL DEFAULT NULL,
`contract_contact_name` VARCHAR(255) NULL DEFAULT NULL,
`contract_contact_signature` TEXT NULL DEFAULT NULL,
`contract_contact_signature_date` DATETIME NULL DEFAULT NULL,
`contract_agent_name` VARCHAR(255) NULL DEFAULT NULL,
`contract_agent_signature` TEXT NULL DEFAULT NULL,
`contract_agent_signature_date` DATETIME NULL DEFAULT NULL,
`contract_rate_standard` DECIMAL(10,2) NULL DEFAULT NULL,
`contract_rate_after_hours` DECIMAL(10,2) NULL DEFAULT NULL,
`contract_net_terms` VARCHAR(50) NULL DEFAULT NULL,
`contract_support_hours` VARCHAR(100) NULL DEFAULT NULL,
`contract_start_date` DATE NULL DEFAULT NULL,
`contract_end_date` DATE NULL DEFAULT NULL,
`contract_renewal_frequency` VARCHAR(50) NULL DEFAULT NULL,
`contract_created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
`contract_updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
`contract_archived_at` DATETIME NULL DEFAULT NULL,
FOREIGN KEY (`contract_client_id`) REFERENCES `clients`(`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

View File

@@ -0,0 +1,24 @@
<?php
/*
* ITFlow - Database update to version 2.3.8 (from 2.3.7)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
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;
");

View File

@@ -0,0 +1,23 @@
<?php
/*
* ITFlow - Database update to version 2.3.9 (from 2.3.8)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "
CREATE TABLE `task_approvals` (
`approval_id` int(11) NOT NULL AUTO_INCREMENT,
`approval_scope` enum('client','internal') NOT NULL,
`approval_type` enum('any','technical','billing','specific') NOT NULL,
`approval_required_user_id` int(11) DEFAULT NULL,
`approval_status` enum('pending','approved','declined') NOT NULL,
`approval_created_by` int(11) NOT NULL,
`approval_approved_by` varchar(255) DEFAULT NULL,
`approval_url_key` varchar(200) NOT NULL,
`approval_task_id` int(11) NOT NULL,
PRIMARY KEY (`approval_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");

View File

@@ -0,0 +1,43 @@
<?php
/*
* ITFlow - Database update to version 2.4.0 (from 2.3.9)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `clients` ADD `client_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `client_notes`");
mysqli_query($mysqli, "ALTER TABLE `locations` ADD `location_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `location_notes`");
mysqli_query($mysqli, "ALTER TABLE `vendors` ADD `vendor_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `vendor_notes`");
mysqli_query($mysqli, "ALTER TABLE `software` ADD `software_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `software_notes`");
mysqli_query(
$mysqli,
"ALTER TABLE `credentials`
CHANGE `credential_important` `credential_favorite`
TINYINT(1) NOT NULL DEFAULT 0
AFTER `credential_note`"
);
mysqli_query($mysqli, "ALTER TABLE `assets` DROP `asset_important`");
mysqli_query($mysqli, "ALTER TABLE `assets` ADD `asset_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `asset_notes`");
mysqli_query($mysqli, "ALTER TABLE `documents` DROP `document_important`");
mysqli_query($mysqli, "ALTER TABLE `documents` ADD `document_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `document_client_visible`");
mysqli_query($mysqli, "ALTER TABLE `racks` ADD `rack_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `rack_notes`");
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_important`");
mysqli_query($mysqli, "ALTER TABLE `files` ADD `file_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `file_mime_type`");
mysqli_query($mysqli, "ALTER TABLE `networks` ADD `network_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `network_notes`");
mysqli_query($mysqli, "ALTER TABLE `domains` ADD `domain_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `domain_notes`");
mysqli_query($mysqli, "ALTER TABLE `certificates` ADD `certificate_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `certificate_notes`");
mysqli_query($mysqli, "ALTER TABLE `services` ADD `service_favorite` TINYINT(1) NOT NULL DEFAULT '0' AFTER `service_notes`");

View File

@@ -0,0 +1,50 @@
<?php
/*
* ITFlow - Database update to version 2.4.1 (from 2.4.0)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
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;
");

View File

@@ -0,0 +1,97 @@
<?php
/*
* ITFlow - Database update to version 2.4.2 (from 2.4.1)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// 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`
");

View File

@@ -0,0 +1,21 @@
<?php
/*
* ITFlow - Database update to version 2.4.3 (from 2.4.2)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
mysqli_query($mysqli, "ALTER TABLE `categories` ADD `category_description` VARCHAR(255) DEFAULT NULL AFTER `category_name`");
mysqli_query($mysqli, "ALTER TABLE `categories` ADD `category_order` INT(11) NOT NULL DEFAULT 0 AFTER `category_icon`");
// Create network_interfaces
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Ethernet', category_type = 'network_interface', category_order = 1"); // 1
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'SFP', category_type = 'network_interface', category_order = 2"); // 2
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'SFP+', category_type = 'network_interface', category_order = 3"); // 3
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'QSFP28', category_type = 'network_interface', category_order = 4"); // 4
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'QSFP-DD', category_type = 'network_interface', category_order = 5"); // 5
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Coaxial', category_type = 'network_interface', category_order = 6"); // 6
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Fiber', category_type = 'network_interface', category_order = 7"); // 7
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'WiFi', category_type = 'network_interface', category_order = 8"); // 8

View File

@@ -0,0 +1,42 @@
<?php
/*
* ITFlow - Database update to version 2.4.4 (from 2.4.3)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Asset Status
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Ready to Deploy', category_description = 'Asset is configured and ready to be assigned', category_type = 'asset_status', category_order = 1"); // 1
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Deployed', category_description = 'Asset is actively in use and assigned to a client or location', category_type = 'asset_status', category_order = 2"); // 2
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Out for Repair', category_description = 'Asset has been sent out for servicing or repair', category_type = 'asset_status', category_order = 3"); // 3
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Lost', category_description = 'Asset location is unknown and cannot be accounted for', category_type = 'asset_status', category_order = 4"); // 4
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Stolen', category_description = 'Asset has been reported stolen', category_type = 'asset_status', category_order = 5"); // 5
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Retired', category_description = 'Asset has been decommissioned and is no longer in service', category_type = 'asset_status', category_order = 6"); // 6
// Contact note types
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Call', category_description = 'Phone call with a client or contact', category_icon = 'fa-phone-alt', category_type = 'contact_note_type', category_order = 1"); // 1
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Email', category_description = 'Email correspondence with a client or contact', category_icon = 'fa-envelope', category_type = 'contact_note_type', category_order = 2"); // 2
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Meeting', category_description = 'Scheduled meeting with a client or contact', category_icon = 'fa-handshake', category_type = 'contact_note_type', category_order = 3"); // 3
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'In Person', category_description = 'In person visit or on-site interaction', category_icon = 'fa-people-arrows', category_type = 'contact_note_type', category_order = 4"); // 4
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Note', category_description = 'General note or internal comment', category_icon = 'fa-sticky-note', category_type = 'contact_note_type', category_order = 5"); // 5
// Rack Types
mysqli_query($mysqli, "INSERT INTO categories SET category_name = '2-Post Open Frame', category_description = 'Two-post open frame rack for patch panels and lightweight equipment', category_type = 'rack_type', category_order = 1"); // 1
mysqli_query($mysqli, "INSERT INTO categories SET category_name = '4-Post Open Frame', category_description = 'Four-post open frame rack for servers and heavier equipment', category_type = 'rack_type', category_order = 2"); // 2
mysqli_query($mysqli, "INSERT INTO categories SET category_name = '4-Post Enclosed Cabinet', category_description = 'Four-post enclosed cabinet with doors and sides for secure equipment housing', category_type = 'rack_type', category_order = 3"); // 3
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Wall-Mount Open', category_description = 'Open frame rack mounted directly to a wall for small deployments', category_type = 'rack_type', category_order = 4"); // 4
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Wall-Mount Enclosed', category_description = 'Enclosed cabinet rack mounted to a wall with a locking door', category_type = 'rack_type', category_order = 5"); // 5
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Other', category_description = 'Rack type does not fit any standard category', category_type = 'rack_type', category_order = 6"); // 6
// Software Types
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Software as a Service (SaaS)', category_description = 'Cloud-hosted software accessed via a web browser or API', category_type = 'software_type', category_order = 1"); // 1
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Productivity Suite', category_description = 'Bundled office and collaboration tools such as Microsoft 365 or Google Workspace', category_type = 'software_type', category_order = 2"); // 2
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Web Application', category_description = 'Application hosted on a web server and accessed through a browser', category_type = 'software_type', category_order = 3"); // 3
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Desktop Application', category_description = 'Application installed and run locally on a workstation or laptop', category_type = 'software_type', category_order = 4"); // 4
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Mobile Application', category_description = 'Application installed and run on a mobile device or tablet', category_type = 'software_type', category_order = 5"); // 5
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Security Software', category_description = 'Software providing antivirus, endpoint protection, or security monitoring', category_type = 'software_type', category_order = 6"); // 6
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'System Software', category_description = 'Low-level software managing hardware resources and system operations', category_type = 'software_type', category_order = 7"); // 7
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Operating System', category_description = 'Core software managing hardware and providing a platform for applications', category_type = 'software_type', category_order = 8"); // 8
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Other', category_description = 'Software type does not fit any standard category', category_type = 'software_type', category_order = 9"); // 9

View File

@@ -0,0 +1,11 @@
<?php
/*
* ITFlow - Database update to version 2.4.5 (from 2.4.4)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Gateway fee expense now uses the actual fee from Stripe's balance transaction
mysqli_query($mysqli, "ALTER TABLE `payment_providers` DROP `payment_provider_expense_percentage_fee`, DROP `payment_provider_expense_flat_fee`");

View File

@@ -0,0 +1,11 @@
<?php
/*
* ITFlow - Database update to version 2.4.6 (from 2.4.5)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Add Allow Deny Client Access to the Enforce Client Permissions
mysqli_query($mysqli, "ALTER TABLE `user_client_permissions` ADD COLUMN `permission_type` ENUM('allow','deny') NOT NULL DEFAULT 'allow'");

View File

@@ -0,0 +1,18 @@
<?php
/*
* ITFlow - Database update to version 2.4.7 (from 2.4.6)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// API keys now run as a user and inherit that user's RBAC (module / operation / client).
// Existing keys predate this and can't be safely mapped to a user, so they are removed
// and must be recreated with an owning user.
mysqli_query($mysqli, "DELETE FROM api_keys");
// Tie keys to a user; client access now derives from that user, so the old per-key
// client scope is removed.
mysqli_query($mysqli, "ALTER TABLE `api_keys` ADD COLUMN `api_key_user_id` INT(11) NOT NULL DEFAULT 0");
mysqli_query($mysqli, "ALTER TABLE `api_keys` DROP COLUMN `api_key_client_id`");

View File

@@ -0,0 +1,16 @@
<?php
/*
* ITFlow - Database update to version 2.4.8 (from 2.4.7)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// The login lockout queries run on every login POST and filter the logs table by
// a 10 minute window. With only PRIMARY KEY (log_id) that is a full scan of a
// table that grows with every action in the app, which an attacker can trigger
// once per request. Indexing log_created_at bounds both lockout queries to the
// recent rows, and also speeds up the nightly log purge in cron.php, which had
// the same problem.
mysqli_query($mysqli, "ALTER TABLE `logs` ADD INDEX `log_created_at` (`log_created_at`)");

View File

@@ -0,0 +1,59 @@
<?php
/*
* ITFlow - Database update to version 2.5.0 (from 2.4.8)
* Included by admin/database_updates.php - do not access directly
*
* (2.4.9 was briefly used by the reverted refunds change - skipping that
* number so instances that applied it before the revert still pick this up)
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Ticket SLAs. slas holds the response/resolution targets and
// sla_assignments maps a client + priority to an SLA (client 0 rows are
// the global default, an assignment pointing at SLA 0 is an explicit "no
// SLA" override). SLAs are optional - with no assignments defined, nothing
// in the app changes behaviour.
mysqli_query($mysqli, "CREATE TABLE `sla_assignments` (
`sla_assignment_id` int(11) NOT NULL AUTO_INCREMENT,
`sla_assignment_client_id` int(11) NOT NULL DEFAULT 0,
`sla_assignment_priority` varchar(200) NOT NULL,
`sla_assignment_sla_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`sla_assignment_id`),
UNIQUE KEY `sla_assignment_client_priority` (`sla_assignment_client_id`,`sla_assignment_priority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
mysqli_query($mysqli, "CREATE TABLE `slas` (
`sla_id` int(11) NOT NULL AUTO_INCREMENT,
`sla_name` varchar(200) NOT NULL,
`sla_description` varchar(500) DEFAULT NULL,
`sla_response_minutes` int(11) NOT NULL,
`sla_resolution_minutes` int(11) DEFAULT NULL,
`sla_created_at` datetime NOT NULL DEFAULT current_timestamp(),
`sla_archived_at` datetime DEFAULT NULL,
PRIMARY KEY (`sla_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
// SLA targets are computed once at write time and stored on the ticket, so
// the ticket list and cron/ticket_sla.php only ever compare datetimes. The
// due date indexes bound the cron's every-minute scans the same way the
// 2.4.8 logs index bounded the login lockout queries.
mysqli_query($mysqli, "ALTER TABLE `tickets`
ADD COLUMN `ticket_sla_id` int(11) NOT NULL DEFAULT 0 AFTER `ticket_status`,
ADD COLUMN `ticket_response_due_at` datetime DEFAULT NULL AFTER `ticket_first_response_at`,
ADD COLUMN `ticket_resolution_due_at` datetime DEFAULT NULL AFTER `ticket_response_due_at`,
ADD COLUMN `ticket_response_sla_met` tinyint(1) DEFAULT NULL AFTER `ticket_resolution_due_at`,
ADD COLUMN `ticket_resolution_sla_met` tinyint(1) DEFAULT NULL AFTER `ticket_response_sla_met`,
ADD COLUMN `ticket_response_sla_alert_stage` tinyint(1) NOT NULL DEFAULT 0 AFTER `ticket_resolution_sla_met`,
ADD COLUMN `ticket_resolution_sla_alert_stage` tinyint(1) NOT NULL DEFAULT 0 AFTER `ticket_response_sla_alert_stage`,
ADD INDEX `ticket_response_due_at` (`ticket_response_due_at`),
ADD INDEX `ticket_resolution_due_at` (`ticket_resolution_due_at`)");
// Business hours + SLA notification settings
mysqli_query($mysqli, "ALTER TABLE `settings`
ADD COLUMN `config_business_days` varchar(20) NOT NULL DEFAULT '1,2,3,4,5' AFTER `config_timezone`,
ADD COLUMN `config_business_hours_start` time NOT NULL DEFAULT '09:00:00' AFTER `config_business_days`,
ADD COLUMN `config_business_hours_end` time NOT NULL DEFAULT '17:00:00' AFTER `config_business_hours_start`,
ADD COLUMN `config_sla_warning_percent` tinyint(3) NOT NULL DEFAULT 75 AFTER `config_business_hours_end`,
ADD COLUMN `config_sla_notification_email` varchar(200) DEFAULT NULL AFTER `config_sla_warning_percent`");

View File

@@ -0,0 +1,41 @@
<?php
/*
* ITFlow - Database update to version 2.5.1 (from 2.5.0)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// SLA pausing. sla_history records the intervals during which a ticket's
// resolution clock was actually running - one open row (ended_at NULL) per
// running ticket. Statuses flagged below stop the clock, and the ticket's
// resolution due date is recomputed from the remaining budget on resume.
mysqli_query($mysqli, "CREATE TABLE `sla_history` (
`sla_history_id` int(11) NOT NULL AUTO_INCREMENT,
`sla_history_started_at` datetime NOT NULL,
`sla_history_ended_at` datetime DEFAULT NULL,
`sla_history_minutes` int(11) DEFAULT NULL,
`sla_history_ticket_id` int(11) NOT NULL,
PRIMARY KEY (`sla_history_id`),
KEY `sla_history_ticket_id` (`sla_history_ticket_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
// Which statuses pause the resolution clock. Nothing pauses by default, so
// SLA behaviour is unchanged until an admin opts a status in.
mysqli_query($mysqli, "ALTER TABLE `ticket_statuses`
ADD COLUMN `ticket_status_pauses_sla` tinyint(1) NOT NULL DEFAULT 0 AFTER `ticket_status_active`");
// Backfill an open interval for every ticket already running a resolution
// clock, anchored at creation. Without this their consumed time would read
// as zero and the first pause/resume would hand back the full budget.
mysqli_query($mysqli, "INSERT INTO sla_history (sla_history_started_at, sla_history_ticket_id)
SELECT ticket_created_at, ticket_id
FROM tickets
LEFT JOIN slas ON ticket_sla_id = sla_id
WHERE ticket_sla_id > 0
AND sla_resolution_minutes > 0
AND ticket_resolution_due_at IS NOT NULL
AND ticket_resolved_at IS NULL
AND ticket_closed_at IS NULL
AND ticket_archived_at IS NULL");

View File

@@ -0,0 +1,32 @@
<?php
/*
* ITFlow - Database update to version 2.5.2 (from 2.5.1)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Resolving a ticket from the kanban board or the client portal recorded
// the resolution timestamp but never judged the resolution SLA, so those
// tickets carry a target, a resolution time and no verdict. They read as
// still-in-flight and are left out of SLA reporting entirely.
//
// Both timestamps were stored, so the verdict is simply recomputed from
// them. Only rows with no verdict at all are touched - anything already
// judged keeps the answer it was given at the time.
mysqli_query($mysqli, "UPDATE tickets
SET ticket_resolution_sla_met = (ticket_resolved_at <= ticket_resolution_due_at)
WHERE ticket_sla_id > 0
AND ticket_resolution_due_at IS NOT NULL
AND ticket_resolved_at IS NOT NULL
AND ticket_resolution_sla_met IS NULL");
// Same repair on the response track, for any ticket whose first response
// was recorded without the verdict being written alongside it
mysqli_query($mysqli, "UPDATE tickets
SET ticket_response_sla_met = (ticket_first_response_at <= ticket_response_due_at)
WHERE ticket_sla_id > 0
AND ticket_response_due_at IS NOT NULL
AND ticket_first_response_at IS NOT NULL
AND ticket_response_sla_met IS NULL");

View File

@@ -0,0 +1,19 @@
<?php
/*
* ITFlow - Database update to version 2.5.3 (from 2.5.2)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Asset note types
// The asset_notes table itself already ships in db.sql (and picked up its
// foreign key back in 2.0.2) - it was simply never wired to a UI, so the
// only thing missing for multiple notes per asset is the type list
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Maintenance', category_description = 'Routine or scheduled maintenance performed on the asset', category_icon = 'fa-tools', category_type = 'asset_note_type', category_order = 1"); // 1
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Repair', category_description = 'Repair work or hardware replacement', category_icon = 'fa-wrench', category_type = 'asset_note_type', category_order = 2"); // 2
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Configuration', category_description = 'Configuration or settings change made to the asset', category_icon = 'fa-sliders-h', category_type = 'asset_note_type', category_order = 3"); // 3
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Upgrade', category_description = 'Hardware or software upgrade', category_icon = 'fa-arrow-circle-up', category_type = 'asset_note_type', category_order = 4"); // 4
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Inspection', category_description = 'Physical inspection or audit of the asset', category_icon = 'fa-clipboard-check', category_type = 'asset_note_type', category_order = 5"); // 5
mysqli_query($mysqli, "INSERT INTO categories SET category_name = 'Note', category_description = 'General note or internal comment', category_icon = 'fa-sticky-note', category_type = 'asset_note_type', category_order = 6"); // 6

View File

@@ -0,0 +1,16 @@
<?php
/*
* ITFlow - Database update to version 2.5.4 (from 2.5.3)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Recurring tickets can now carry a ticket template. The template's subject
// and details are copied into the recurring ticket when it is picked, so the
// link exists for one reason only: to stamp the template's task list onto
// every ticket the schedule raises. 0 means no template, matching the other
// optional relations on this table.
mysqli_query($mysqli, "ALTER TABLE `recurring_tickets`
ADD COLUMN `recurring_ticket_ticket_template_id` int(11) NOT NULL DEFAULT 0 AFTER `recurring_ticket_asset_id`");

View File

@@ -0,0 +1,24 @@
<?php
/*
* ITFlow - Database update to version 2.5.5 (from 2.5.4)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Backfill guest URL keys. Every path that raises a ticket generates one
// except the recurring block in cron.php, which omitted the column - so
// every ticket the nightly schedule has ever created carries no key. The
// guest view matches on ticket_url_key, so those tickets cannot be opened
// from the "View ticket" link in reply and task-approval emails. It fails
// closed rather than open (NULL never matches), so this is a broken link
// rather than an exposure, but the links stay broken until a key exists.
$sql_tickets_without_url_key = mysqli_query($mysqli, "SELECT ticket_id FROM tickets WHERE ticket_url_key IS NULL OR ticket_url_key = ''");
while ($row = mysqli_fetch_assoc($sql_tickets_without_url_key)) {
$ticket_id = intval($row['ticket_id']);
$url_key = randomString(32);
mysqli_query($mysqli, "UPDATE tickets SET ticket_url_key = '$url_key' WHERE ticket_id = $ticket_id");
}

View File

@@ -0,0 +1,34 @@
<?php
/*
* ITFlow - Database update to version 2.5.6 (from 2.5.5)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Recurring tickets now own their task list rather than reading the linked
// ticket template at every run. The template still fills the list in when it
// is picked, but the list can then be edited per schedule - which is only
// meaningful if the edits are what the run actually reads.
mysqli_query($mysqli, "CREATE TABLE `recurring_ticket_tasks` (
`recurring_ticket_task_id` int(11) NOT NULL AUTO_INCREMENT,
`recurring_ticket_task_name` varchar(255) NOT NULL,
`recurring_ticket_task_order` int(11) NOT NULL DEFAULT 0,
`recurring_ticket_task_completion_estimate` int(11) NOT NULL DEFAULT 0,
`recurring_ticket_task_recurring_ticket_id` int(11) NOT NULL,
PRIMARY KEY (`recurring_ticket_task_id`),
KEY `recurring_ticket_task_recurring_ticket_id` (`recurring_ticket_task_recurring_ticket_id`),
CONSTRAINT `recurring_ticket_tasks_ibfk_1` FOREIGN KEY (`recurring_ticket_task_recurring_ticket_id`) REFERENCES `recurring_tickets` (`recurring_ticket_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
// Copy each linked template's current tasks onto the schedule that links it, so
// every existing recurring ticket keeps raising exactly the tasks it raises
// today. Without this the switch to an owned list would silently produce
// taskless tickets on the next run.
mysqli_query($mysqli, "INSERT INTO recurring_ticket_tasks
(recurring_ticket_task_name, recurring_ticket_task_order, recurring_ticket_task_completion_estimate, recurring_ticket_task_recurring_ticket_id)
SELECT task_template_name, task_template_order, task_template_completion_estimate, recurring_ticket_id
FROM recurring_tickets
INNER JOIN task_templates ON task_template_ticket_template_id = recurring_ticket_ticket_template_id
WHERE recurring_ticket_ticket_template_id > 0");

View File

@@ -0,0 +1,16 @@
<?php
/*
* ITFlow - Database update to version 2.5.7 (from 2.5.6)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Queued mail can now carry file attachments. The column holds a JSON manifest
// of app-root-relative paths and display names rather than file contents, so
// the queue table stays small and the files stay in uploads/ where the ticket
// attachment endpoints already serve them from. It is scrubbed on delivery
// alongside the body, like email_cal_str.
mysqli_query($mysqli, "ALTER TABLE `email_queue`
ADD COLUMN `email_attachments` text DEFAULT NULL AFTER `email_cal_str`");

View File

@@ -0,0 +1,27 @@
<?php
/*
* ITFlow - Database update to version 2.5.8 (from 2.5.7)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Calendars can now be published as a read-only ICS feed for Google Calendar,
// Nextcloud and any other subscription client. The key is stored in cleartext,
// matching invoice_url_key and shared_items.item_key - hashing it would buy
// nothing here (anyone holding the database already holds the events the key
// grants access to) and would make the URL impossible to re-copy for a second
// device without breaking every existing subscriber.
//
// The UNIQUE key is on a nullable column, so unshared calendars all keep NULL.
// The column is explicitly utf8mb4_bin: the table default is utf8mb4_general_ci,
// which compares case-insensitively, and the key alphabet is mixed-case
// base64url - a _ci column would throw away entropy on lookup and make the
// UNIQUE index blind to case.
mysqli_query($mysqli, "ALTER TABLE `calendars`
ADD COLUMN `calendar_feed_key` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL AFTER `calendar_color`,
ADD COLUMN `calendar_feed_busy_only` tinyint(1) NOT NULL DEFAULT 0 AFTER `calendar_feed_key`,
ADD COLUMN `calendar_feed_created_at` datetime DEFAULT NULL AFTER `calendar_feed_busy_only`,
ADD COLUMN `calendar_feed_accessed_at` datetime DEFAULT NULL AFTER `calendar_feed_created_at`,
ADD UNIQUE KEY `calendar_feed_key` (`calendar_feed_key`)");

View File

@@ -0,0 +1,28 @@
<?php
/*
* ITFlow - Database update to version 2.5.9 (from 2.5.8)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Events can now be marked all-day explicitly. Until now calendar_events had
// no all-day column at all - FullCalendar inferred it from a start value with
// no time component, which meant a genuine midnight appointment was
// indistinguishable from an all-day event.
mysqli_query($mysqli, "ALTER TABLE `calendar_events`
ADD COLUMN `event_all_day` tinyint(1) NOT NULL DEFAULT 0 AFTER `event_end`");
// Backfill using the same rule the calendar already rendered by, so existing
// events keep displaying exactly as they do today: a midnight start, and
// either no end or a midnight end.
mysqli_query($mysqli, "UPDATE `calendar_events`
SET `event_all_day` = 1
WHERE TIME(`event_start`) = '00:00:00'
AND (`event_end` IS NULL OR TIME(`event_end`) = '00:00:00')");
// Corrects the collation on installs that already applied 2.5.8 before the
// column was pinned to utf8mb4_bin. Harmless to re-run.
mysqli_query($mysqli, "ALTER TABLE `calendars`
MODIFY COLUMN `calendar_feed_key` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL");

View File

@@ -0,0 +1,26 @@
<?php
/*
* ITFlow - Database update to version 2.6.0 (from 2.5.9)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// cron/cron.php is now a dispatcher: it runs every minute and decides which of the
// scripts in cron/ are due, so the crontab only needs one line. That decision needs
// somewhere durable to record when each job last ran - a job whose minute was missed
// has to be picked up at the next opportunity rather than skipped, and one that is
// half way through must not be started again.
//
// Rows are created by the dispatcher the first time it sees a job, so adding a job
// later needs a line in cron.php and nothing here.
mysqli_query($mysqli, "CREATE TABLE IF NOT EXISTS `cron_jobs` (
`cron_job_id` int(11) NOT NULL AUTO_INCREMENT,
`cron_job_name` varchar(200) NOT NULL,
`cron_job_last_run_at` datetime DEFAULT NULL,
`cron_job_last_finished_at` datetime DEFAULT NULL,
`cron_job_last_status` varchar(200) DEFAULT NULL,
PRIMARY KEY (`cron_job_id`),
UNIQUE KEY `cron_job_name` (`cron_job_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");

View File

@@ -0,0 +1,32 @@
<?php
/*
* ITFlow - Database update to version 2.6.1 (from 2.6.0)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// The cron dispatcher's schedule moves out of code and into the database so it can be
// managed from Maintenance > Cron. The registry in includes/cron_jobs.php still decides
// which scripts exist and seeds these columns the first time it meets a job; from then
// on the row is what runs. Nothing here can name a script - a row whose job is not in
// the registry is ignored.
mysqli_query($mysqli, "ALTER TABLE `cron_jobs`
ADD COLUMN `cron_job_enabled` tinyint(1) NOT NULL DEFAULT 1 AFTER `cron_job_name`,
ADD COLUMN `cron_job_schedule` varchar(200) NOT NULL DEFAULT 'Interval' AFTER `cron_job_enabled`,
ADD COLUMN `cron_job_interval_minutes` int(11) NOT NULL DEFAULT 1 AFTER `cron_job_schedule`,
ADD COLUMN `cron_job_daily_at` time DEFAULT NULL AFTER `cron_job_interval_minutes`,
ADD COLUMN `cron_job_run_now` tinyint(1) NOT NULL DEFAULT 0 AFTER `cron_job_daily_at`");
// Duration is here to make a job that is quietly getting slower visible before it starts
// overrunning its own interval.
mysqli_query($mysqli, "ALTER TABLE `cron_jobs`
ADD COLUMN `cron_job_last_duration` decimal(10,2) DEFAULT NULL AFTER `cron_job_last_finished_at`,
ADD COLUMN `cron_job_last_error` text DEFAULT NULL AFTER `cron_job_last_status`,
ADD COLUMN `cron_job_last_error_at` datetime DEFAULT NULL AFTER `cron_job_last_error`");
// Written by the dispatcher every minute before it runs anything, so the admin page can
// tell "no job happened to be due" apart from "the crontab entry is missing".
mysqli_query($mysqli, "ALTER TABLE `settings`
ADD COLUMN `config_cron_last_dispatch_at` datetime DEFAULT NULL");

View File

@@ -0,0 +1,38 @@
<?php
/*
* ITFlow - Database update to version 2.6.2 (from 2.6.1)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Two things, both about rows that already existed before 2.6.1 ran.
//
// 2.6.1 added the schedule columns but could not set them, so those rows took the column
// defaults - every minute - which is wrong for three jobs and harmful for the nightly run,
// whose overdue invoice reminders re-send on every pass. The registry in
// includes/cron_jobs.php only ever seeds a row it is creating, so it cannot fix them.
//
// The domain refresher also moves onto the nightly schedule here, which is why it is
// matched at either of the intervals it may be sitting on: 1 from the column default, or 5
// if it was already put back by hand.
//
// Only rows still carrying one of those shipped values are touched, so a schedule someone
// has deliberately changed is left alone. Deliberately hardcoded rather than read from the
// registry: a migration has to keep meaning the same thing years from now, whatever that
// file says by then.
mysqli_query($mysqli, "UPDATE `cron_jobs`
SET `cron_job_schedule` = 'Daily', `cron_job_daily_at` = '03:00:00'
WHERE `cron_job_name` = 'nightly_tasks'
AND `cron_job_schedule` = 'Interval' AND `cron_job_interval_minutes` = 1");
mysqli_query($mysqli, "UPDATE `cron_jobs`
SET `cron_job_schedule` = 'Daily', `cron_job_daily_at` = '03:30:00'
WHERE `cron_job_name` = 'certificate_refresher'
AND `cron_job_schedule` = 'Interval' AND `cron_job_interval_minutes` = 1");
mysqli_query($mysqli, "UPDATE `cron_jobs`
SET `cron_job_schedule` = 'Daily', `cron_job_daily_at` = '04:00:00'
WHERE `cron_job_name` = 'domain_refresher'
AND `cron_job_schedule` = 'Interval' AND `cron_job_interval_minutes` IN (1, 5)");

View File

@@ -0,0 +1,13 @@
<?php
/*
* ITFlow - Database update to version 2.6.3 (from 2.6.2)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Add Indexes to Ticket Replies foreign key to ticket_id and same with Attachment Fixes a slow down issue with many Replies with large bodies.
mysqli_query($mysqli, "ALTER TABLE ticket_replies ADD INDEX (ticket_reply_ticket_id, ticket_reply_archived_at)");
mysqli_query($mysqli, "ALTER TABLE ticket_attachments ADD INDEX (ticket_attachment_reply_id)");

View File

@@ -0,0 +1,38 @@
<?php
/*
* ITFlow - Database update to version 2.6.4 (from 2.6.3)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// Backup catalogue - one row per archive produced, so the app knows what exists
// without trusting a directory listing
mysqli_query($mysqli, "CREATE TABLE IF NOT EXISTS `backups` (
`backup_id` int(11) NOT NULL AUTO_INCREMENT,
`backup_type` varchar(20) NOT NULL DEFAULT 'full',
`backup_file_name` varchar(255) NOT NULL,
`backup_size` bigint(20) NOT NULL DEFAULT 0,
`backup_sha256` varchar(64) DEFAULT NULL,
`backup_status` varchar(20) NOT NULL DEFAULT 'Pending',
`backup_error` text DEFAULT NULL,
`backup_source` varchar(20) NOT NULL DEFAULT 'Manual',
`backup_created_by` varchar(200) DEFAULT NULL,
`backup_created_at` datetime NOT NULL DEFAULT current_timestamp(),
`backup_completed_at` datetime DEFAULT NULL,
`backup_downloaded_at` datetime DEFAULT NULL,
PRIMARY KEY (`backup_id`),
KEY `backup_status_created` (`backup_status`, `backup_created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
// Retention and what the scheduled backup produces
mysqli_query($mysqli, "ALTER TABLE settings ADD COLUMN IF NOT EXISTS `config_backup_retention_days` int(11) NOT NULL DEFAULT 30");
mysqli_query($mysqli, "ALTER TABLE settings ADD COLUMN IF NOT EXISTS `config_backup_retention_count` int(11) NOT NULL DEFAULT 5");
mysqli_query($mysqli, "ALTER TABLE settings ADD COLUMN IF NOT EXISTS `config_backup_cron_type` varchar(20) NOT NULL DEFAULT 'full'");
// Seed the scheduled backup job. The dispatcher would create this row itself the first
// time it sees the job, but seeding it here means the schedule is right on an install
// that already has cron_jobs rows - the every-minute default bit us once already.
mysqli_query($mysqli, "INSERT IGNORE INTO cron_jobs SET cron_job_name = 'backup', cron_job_enabled = 0, cron_job_schedule = 'Daily', cron_job_daily_at = '02:00'");

View File

@@ -0,0 +1,26 @@
<?php
/*
* ITFlow - Database update to version 2.6.5 (from 2.6.4)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// credential_password was inherited as VARBINARY(200) when 2.0.0 renamed login_password.
// What it actually stores is a 16-char IV followed by base64 AES-128-CBC ciphertext -
// pure ASCII, the same shape as credential_username (varchar(500)) and
// users.user_specific_encryption_ciphertext (varchar(200)). Nothing compares, indexes,
// sorts or searches on the column, so binary semantics were never buying anything.
//
// The width was the real problem: base64 expands ~1.37x, so 200 bytes capped the
// cleartext at 127 chars while the credential form offered 350. Anything longer
// overflowed and errored the save. varchar(500) matches credential_username and makes
// 350 the correct form limit for both fields.
// Widen while still binary first. If the charset conversion below fails on an install
// with unexpected bytes, the column is at least already wide enough and the app keeps
// working - varbinary(500) holds the same values just fine.
mysqli_query($mysqli, "ALTER TABLE `credentials` MODIFY `credential_password` varbinary(500) DEFAULT NULL");
mysqli_query($mysqli, "ALTER TABLE `credentials` MODIFY `credential_password` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL");

View File

@@ -0,0 +1,19 @@
<?php
/*
* ITFlow - Database update to version 2.6.6 (from 2.6.5)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// config_invoice_overdue_reminders never did anything. Both setup paths seeded it with
// '1,3,7' and two files read it, but the only line that would have used it was commented
// out in the nightly job - the reminder schedule is a hardcoded array. The read in
// includes/load_global_settings.php also ran intval() over a comma-separated string, so
// the global was 1 whatever the column said.
//
// Nothing in the app has ever written to it either, so no install has a value worth
// keeping and there is nothing to migrate anywhere.
mysqli_query($mysqli, "ALTER TABLE `settings` DROP COLUMN IF EXISTS `config_invoice_overdue_reminders`");

View File

@@ -0,0 +1,18 @@
<?php
/*
* ITFlow - Database update to version 2.6.7 (from 2.6.6)
* Included by admin/database_updates.php - do not access directly
*/
defined('FROM_DB_UPDATER') || die("Direct file access is not allowed");
// The AI endpoints used to send a hardcoded temperature (0.5, or 0.3 for ticket
// summaries). Newer OpenAI models accept nothing but their own default and reject
// the request outright, which surfaced as "Failed to get a response from the AI API".
//
// Temperature is now per-model and optional: NULL means don't send the parameter
// at all, which is the setting that works on every provider. Existing rows get
// NULL so they stop sending it.
mysqli_query($mysqli, "ALTER TABLE `ai_models` ADD COLUMN IF NOT EXISTS `ai_model_temperature` decimal(3,2) DEFAULT NULL AFTER `ai_model_use_case`");

Some files were not shown because too many files have changed in this diff Show More