stage #1
18
.gitignore
vendored
18
.gitignore
vendored
@@ -26,4 +26,22 @@ xcustom/*
|
|||||||
!xcustom/readme.php
|
!xcustom/readme.php
|
||||||
post/xcustom
|
post/xcustom
|
||||||
!post/xcustom/readme.php
|
!post/xcustom/readme.php
|
||||||
|
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
|
.zed
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
191
CHANGELOG.md
191
CHANGELOG.md
@@ -2,6 +2,197 @@
|
|||||||
|
|
||||||
This file documents all notable changes made to ITFlow.
|
This file documents all notable changes made to ITFlow.
|
||||||
|
|
||||||
|
## [25.10.1]
|
||||||
|
- Deprecation Notice: `/scripts/cron_mail_queue.php` , `/scripts/cron_ticket_email_parser.php` , `/scripts/cron.php` `/scripts/cron_domain_refresher.php`, `/scripts/cron_certificate_refresher.php` are being phased out. Please transition to `/cron/mail_queue.php` , `/cron/ticket_email_parser.php`, `/cron/cron.php`, `/cron/domain_refresher.php`, `/cron/certificate_refresher.php` These older scripts will be removed in the November 25.11 release—update accordingly. 25.10.1 installs have the script already configured.
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- Fix regression missing custom Favicon.
|
||||||
|
- Update SMTP and IMAP provider to allow for empty strings, empty means disabled.
|
||||||
|
- Fix Client portal Microsoft SSO Logins.
|
||||||
|
- Fix regression in Vendor Templates.
|
||||||
|
- Fix refression in some broken links from user to agent.
|
||||||
|
- Fix Project edit.
|
||||||
|
- Prevent open redirects upon agent login.
|
||||||
|
- Fix regression on switching to Webklex IMAP to allow for no SSL/TLS in IMAP.
|
||||||
|
- Fix Setup Redirect not behaving properly when setup hasnt been performed.
|
||||||
|
- Added Server Document Root Var to several includes, headers, footers files to allow includes from deeper directory strutures such as the new custom directories.
|
||||||
|
- Fix edit contact in contact details.
|
||||||
|
- Add .htaccess to /cron/.
|
||||||
|
|
||||||
|
### Added / Changed
|
||||||
|
- Support for HTML Signatures.
|
||||||
|
- Add Edit Project Functionality in a ticket.
|
||||||
|
- Added more custom locations: /cron/custom/, /scripts/custom/, /api/v1/custom/, /setup/custom/.
|
||||||
|
- Copied `/scripts/cron.php` `/scripts/cron_domain_refresher.php`, `/scripts/cron_certificate_refresher.php` to `/cron/cron.php`, `/cron/domain_refresher.php`, `/cron/certificate_refresher.php`. See Above!
|
||||||
|
- Signatures is now handled in post ticket reply on Public Comments only.
|
||||||
|
|
||||||
|
## [25.10]
|
||||||
|
|
||||||
|
### Breaking Changes
|
||||||
|
- Renamed `/user/` directory to `/agent/`.
|
||||||
|
- Deprecation Notice: `/scripts/cron_mail_queue.php` and `/scripts/cron_ticket_email_parser.php` are being phased out. Please transition to `/cron/mail_queue.php` and `/cron/ticket_email_parser.php`. These older scripts will be removed in the November release—update accordingly. New Installs via the script will have this already configured.
|
||||||
|
- Custom is working now. Custom code should be placed in /admin/custom/ , /agent/custom/ , /client/custom/ /guest/custom/
|
||||||
|
We will provide example code with directory structure for each custom directory a week after this release.
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- Resolved issue with "Restore from Setup" not functioning correctly.
|
||||||
|
- Corrected asset name display in logs and flash messages when editing an asset in a ticket.
|
||||||
|
- Fixed Payment Provider Threshold not being applied.
|
||||||
|
- Fixed issue where Threshold setting was not saving properly.
|
||||||
|
- Various minor fixes for Payment Provider issues.
|
||||||
|
- Removed leads from the client selection list in the "New Ticket" modal.
|
||||||
|
- Fixed issues with the MFA modal.
|
||||||
|
- Resolved MFA enforcement bugs.
|
||||||
|
- Fixed KeepAlive functionality to maintain user sessions longer.
|
||||||
|
- Fixed multiple broken links caused by the `/user/` to `/agent/` path migration.
|
||||||
|
- Fixed Custom code directories.
|
||||||
|
|
||||||
|
### Added / Changed
|
||||||
|
- Removed "ACH" as a payment method; added "Bank Transfer" instead.
|
||||||
|
- Replaced relative paths with absolute paths for web assets.
|
||||||
|
- Tickets can now be resolved via the API.
|
||||||
|
- Added a filter for Archived Users and an option to restore them.
|
||||||
|
- Introduced a modal when archiving users, allowing reassignment of open and recurring tickets to another agent.
|
||||||
|
- Improved logic for determining the index/root page.
|
||||||
|
- Added "Assigned Agent" column for recurring tickets.
|
||||||
|
- Introduced "Additional Assets" option when editing assets in tickets; modal now uses the updated AJAX method.
|
||||||
|
- Added Gibraltar to the list of supported countries.
|
||||||
|
- Added Custom Link Option for the Admin Nav.
|
||||||
|
- Added Custom Link Option for the Reports Nav.
|
||||||
|
|
||||||
|
### Other notes
|
||||||
|
- Major releases will happen on the first week of every Month.
|
||||||
|
|
||||||
|
|
||||||
|
## [25.09.2]
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- Fix Payment Method Select box in Revenue.
|
||||||
|
- Remove Extra Feeback Wording When Invoice Sends.
|
||||||
|
- Updated all CSV exports to use escape parameters.
|
||||||
|
- Fix Missing First row on Asset interface export.
|
||||||
|
- Fix Edit User not working due to incorrect modal footer path.
|
||||||
|
- Fix Add Certificate breaking due spelling on function.
|
||||||
|
- Update all CSV Exports to include company name or client name depending on when its being exported from.
|
||||||
|
- Introduced new function sanitize_filename and implmented it in all exports.
|
||||||
|
- Spruced up UI/UX Saved Paymented section in Client Portal.
|
||||||
|
- Fix add Payment Link in client portal recurring invoice section.
|
||||||
|
- Better Logic handling for default page redirect.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
- Introduced new Beta mail parser cron using webklex imap library instead of php-imap as this is deprecated --Not Enabled on existing installs, only new installs.
|
||||||
|
- Introduced Beta support for OAUTH2 Authentication for Microsoft 365 and Google Workspaces for both incoming ticket parsing and outgoing email but must use new mail parser and mail queue for this to work, and requires changing the cron jobs: scripts/cron_mail_queue.php to cron/mail_queue.php and scripts/cron_ticket_email_parser.php to cron/ticket_email_parser.php.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [25.09.1]
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- **Web Installer**: Resolved issue with broken installer caused by incorrect database schema file name.
|
||||||
|
- Hide the "Add Credit" button as the feature is not fully implemented yet.
|
||||||
|
- Corrected long invoice/quote notes that were overlapping with the footer in PDF exports.
|
||||||
|
- Fixed AI settings not appearing in the Admin Menu when the Billing module was disabled.
|
||||||
|
- Enabled wrapping of client tags when they are too long.
|
||||||
|
- Fixed an issue where AI was not functioning correctly.
|
||||||
|
- Removed extra spacing between the contact name and icon in the Ticket Details contact card.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
- Redesigned **AI Ticket Summary**, now divided into 3 sections: Main Issue, Actions Taken, and Resolution/Next Steps.
|
||||||
|
- Updated the **AI Ticket Summary** prompt to include ticket status, reply author, source, category, and priority.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [25.09]
|
||||||
|
|
||||||
|
***BACK UP*** before updating.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Breaking Changes and Notes
|
||||||
|
- We strongly recommend updating from the command line, however if performed via the webui and after performed it will return a 404. thats normal as the directory structure has changed, just close your browser then log back in then go back to update to perform the many database updates.
|
||||||
|
- This is a major release with significant changes. While the community has done a great job identifying bugs, some may still remain — continued testing is encouraged.
|
||||||
|
- All AI settings will be **reset** and must be reconfigured using the new AI provider backend.
|
||||||
|
- The `xcustom` directory has been renamed to `custom`. All custom libraries and post-processing scripts should now be placed here.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Added / Changed
|
||||||
|
- Numerous UI improvements and refinements across the application.
|
||||||
|
- Enhanced visual clarity by thickening the left border on ticket comments to help identify comment types.
|
||||||
|
- Ticket details UI redesigned to use less space at the top of the screen.
|
||||||
|
- Introduced tracking for the **first response date/time** on tickets.
|
||||||
|
- New reporting feature: **Average time to first response** on tickets.
|
||||||
|
- Stripe integration rebuilt using the new **payment provider backend**.
|
||||||
|
- Clients can now save and manage **multiple payment methods**.
|
||||||
|
- Support for selecting saved cards for **recurring invoices** in both the client and agent portals.
|
||||||
|
- Initial database structure and logic added for **credit management** (feature not yet enabled).
|
||||||
|
- Major **backend directory restructuring**.
|
||||||
|
- Introduced **stock/inventory management**, including a stock ledger backend.
|
||||||
|
- Stock quantities now update automatically when invoice items are added or removed.
|
||||||
|
- Invoice autocomplete now includes: **name, description, price, tax, stock levels**, and links `product_id` to `item_id`.
|
||||||
|
- Added a **category filter** to invoices.
|
||||||
|
- Linked stock to related expenses.
|
||||||
|
- New product fields: **location, code, and type**.
|
||||||
|
- Products now separated into two types: **Service** and **Product**.
|
||||||
|
- **Dark mode** introduced.
|
||||||
|
- Projects: Now support linking **closed tickets**.
|
||||||
|
- Clients: Added bulk actions for tags, referral source, industry, hourly rate, email, archive, and restore.
|
||||||
|
- Invoices: Bulk action added to **assign categories**.
|
||||||
|
- Assets: New `client_uri` field, visible in both the agent and client portals.
|
||||||
|
- Client Portal: Clients can now **select an asset** during ticket creation.
|
||||||
|
- Client Portal: Company logo now **displays in the header**.
|
||||||
|
- Client Portal: Dashboard cards are now **clickable** for more detail.
|
||||||
|
- Assets: Option added to include **MAC Address** in additional columns.
|
||||||
|
- Asset Interface: Bulk actions added — set DHCP, network type, and delete.
|
||||||
|
- API:
|
||||||
|
- Added `/location` endpoint.
|
||||||
|
- Ticket content now supports **HTML formatting**.
|
||||||
|
- New option to filter and display **500 records per page** in the footer.
|
||||||
|
- Payment methods are now treated as a **separate entity** instead of being grouped under categories.
|
||||||
|
- Updated libraries:
|
||||||
|
- **TinyMCE**
|
||||||
|
- **Chart.js** (major upgrade)
|
||||||
|
- **DataTables**
|
||||||
|
- **Bootstrap**
|
||||||
|
- **FullCalendar**
|
||||||
|
- **php-stripe**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Several security vulnerabilities patched.
|
||||||
|
- Ticket status is no longer updated when scheduling.
|
||||||
|
- Client Portal: Tech contacts can no longer edit their own details.
|
||||||
|
- Fixed overlapping logo issue in Invoice/Quote PDF exports.
|
||||||
|
- Refactored `check_login.php` into multiple files for modular login functionality.
|
||||||
|
- Removed redundant logging comments for redirects.
|
||||||
|
- Renamed `get_settings.php` to `load_global_settings.php`.
|
||||||
|
- Simplified syntax for `ajax-modal` and updated usage throughout the app.
|
||||||
|
- Fixed issue where primary contact text wasn’t displaying.
|
||||||
|
- Corrected client **Net Terms** display.
|
||||||
|
- Fixed logic for recurring expense **next run date**.
|
||||||
|
- Resolved broken **IMAP test button**.
|
||||||
|
- Archived clients can no longer log into the portal.
|
||||||
|
- Searching closed tickets no longer reverts to open tickets.
|
||||||
|
- Fixed project search filter not showing completed projects.
|
||||||
|
- Fixed issue where company logo was not being removed correctly.
|
||||||
|
- Resolved API bugs:
|
||||||
|
- Default rate and net terms.
|
||||||
|
- Contact location.
|
||||||
|
- Document endpoint.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Developer Updates
|
||||||
|
- Replaced legacy code with newer functions like `redirect()`, `getFieldById()`, and `flash_alert()`.
|
||||||
|
- Significantly improved performance of queries used for filter selection boxes.
|
||||||
|
|
||||||
|
|
||||||
|
## [25.06.1]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed a regression in setup causing it to crash and never complete, due to missing default for currency.
|
||||||
|
|
||||||
## [25.06]
|
## [25.06]
|
||||||
|
|
||||||
### Breaking CHANGES
|
### Breaking CHANGES
|
||||||
|
|||||||
108
admin/ai_model.php
Normal file
108
admin/ai_model.php
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Default Column Sortby Filter
|
||||||
|
$sort = "ai_model_name";
|
||||||
|
$order = "ASC";
|
||||||
|
|
||||||
|
require_once "includes/inc_all_admin.php";
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM ai_models LEFT JOIN ai_providers ON ai_model_ai_provider_id = ai_provider_id ORDER BY $sort $order");
|
||||||
|
|
||||||
|
$num_rows = mysqli_num_rows($sql);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="card card-dark">
|
||||||
|
<div class="card-header py-2">
|
||||||
|
<h3 class="card-title mt-2"><i class="fas fa-fw fa-robot mr-2"></i>AI Models</h3>
|
||||||
|
<div class="card-tools">
|
||||||
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addAIModelModal"><i class="fas fa-plus mr-2"></i>Add Model</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive-sm">
|
||||||
|
<table class="table table-striped table-borderless table-hover">
|
||||||
|
<thead class="text-dark <?php if ($num_rows == 0) { echo "d-none"; } ?>">
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=ai_model_name&order=<?php echo $disp; ?>">
|
||||||
|
Model <?php if ($sort == 'ai_model_name') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=ai_provider_name&order=<?php echo $disp; ?>">
|
||||||
|
Provider <?php if ($sort == 'ai_provider_name') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=ai_model_use_case&order=<?php echo $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_array($sql)) {
|
||||||
|
$provider_id = intval($row['ai_provider_id']);
|
||||||
|
$provider_name = nullable_htmlentities($row['ai_provider_name']);
|
||||||
|
$model_id = intval($row['ai_model_id']);
|
||||||
|
$model_name = nullable_htmlentities($row['ai_model_name']);
|
||||||
|
$use_case = nullable_htmlentities($row['ai_model_use_case']);
|
||||||
|
$prompt = nl2br(nullable_htmlentities($row['ai_model_prompt']));
|
||||||
|
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a class="text-dark text-bold ajax-modal" href="#"
|
||||||
|
data-modal-url="modals/ai/ai_model_edit.php?id=<?= $model_id ?>">
|
||||||
|
<?php echo $model_name; ?>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td><?php echo $provider_name; ?></td>
|
||||||
|
<td><?php echo $use_case; ?></td>
|
||||||
|
<td><?php echo $prompt; ?></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 ajax-modal" href="#"
|
||||||
|
data-modal-url="modals/ai/ai_model_edit.php?id=<?= $model_id ?>">
|
||||||
|
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<a class="dropdown-item text-danger confirm-link" href="post.php?delete_ai_model=<?php echo $model_id; ?>&csrf_token=<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<i class="fas fa-fw fa-trash mr-2"></i>Delete
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($num_rows == 0) {
|
||||||
|
echo "<h3 class='text-secondary mt-3' style='text-align: center'>No Records Here</h3>";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once "modals/ai/ai_model_add.php";
|
||||||
|
require_once "../includes/footer.php";
|
||||||
109
admin/ai_provider.php
Normal file
109
admin/ai_provider.php
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Default Column Sortby Filter
|
||||||
|
$sort = "ai_provider_name";
|
||||||
|
$order = "ASC";
|
||||||
|
|
||||||
|
require_once "includes/inc_all_admin.php";
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM ai_providers ORDER BY $sort $order");
|
||||||
|
|
||||||
|
$num_rows = mysqli_num_rows($sql);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="card card-dark">
|
||||||
|
<div class="card-header py-2">
|
||||||
|
<h3 class="card-title mt-2"><i class="fas fa-fw fa-robot mr-2"></i>AI Providers</h3>
|
||||||
|
<div class="card-tools">
|
||||||
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addAIProviderModal"><i class="fas fa-plus mr-2"></i>Add Provider</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive-sm">
|
||||||
|
<table class="table table-striped table-borderless table-hover">
|
||||||
|
<thead class="text-dark <?php if ($num_rows == 0) { echo "d-none"; } ?>">
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=ai_provider_name&order=<?php echo $disp; ?>">
|
||||||
|
Provider <?php if ($sort == 'ai_provider_name') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=ai_provider_api_url&order=<?php echo $disp; ?>">
|
||||||
|
URL <?php if ($sort == 'ai_provider_api_url') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=ai_provider_api_key&order=<?php echo $disp; ?>">
|
||||||
|
Key <?php if ($sort == 'ai_provider_api_key') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark">Models</a>
|
||||||
|
</th>
|
||||||
|
<th class="text-center">Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
while ($row = mysqli_fetch_array($sql)) {
|
||||||
|
$provider_id = intval($row['ai_provider_id']);
|
||||||
|
$provider_name = nullable_htmlentities($row['ai_provider_name']);
|
||||||
|
$url = nullable_htmlentities($row['ai_provider_api_url']);
|
||||||
|
$key = nullable_htmlentities($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>
|
||||||
|
<a class="text-dark text-bold ajax-modal" href="#"
|
||||||
|
data-modal-url="modals/ai/ai_provider_edit.php?id=<?= $provider_id ?>">
|
||||||
|
<?php echo $provider_name; ?>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td><?php echo $url; ?></td>
|
||||||
|
<td><?php echo $key; ?></td>
|
||||||
|
<td><?php echo $ai_model_count; ?></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 ajax-modal" href="#"
|
||||||
|
data-modal-url="modals/ai/ai_provider_edit.php?id=<?= $provider_id ?>">
|
||||||
|
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<a class="dropdown-item text-danger confirm-link" href="post.php?delete_ai_provider=<?php echo $provider_id; ?>&csrf_token=<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<i class="fas fa-fw fa-trash mr-2"></i>Delete
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($num_rows == 0) {
|
||||||
|
echo "<h3 class='text-secondary mt-3' style='text-align: center'>No Records Here</h3>";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once "modals/ai/ai_provider_add.php";
|
||||||
|
require_once "../includes/footer.php";
|
||||||
@@ -162,15 +162,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<?php require_once "includes/filter_footer.php";
|
<?php require_once "../includes/filter_footer.php";
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/bulk_actions.js"></script>
|
<script src="../js/bulk_actions.js"></script>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "modals/admin_api_key_add_modal.php";
|
require_once "modals/api/api_key_add.php";
|
||||||
|
|
||||||
require_once "includes/footer.php";
|
require_once "../includes/footer.php";
|
||||||
|
|
||||||
@@ -183,10 +183,10 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<?php require_once "includes/filter_footer.php";
|
<?php require_once "../includes/filter_footer.php";
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "includes/footer.php";
|
require_once "../includes/footer.php";
|
||||||
@@ -266,7 +266,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
if (empty($client_name)) {
|
if (empty($client_name)) {
|
||||||
$client_name_display = "-";
|
$client_name_display = "-";
|
||||||
} else {
|
} else {
|
||||||
$client_name_display = "<a href='client_overview.php?client_id=$client_id'>$client_name</a>";
|
$client_name_display = "<a href='../agent/client_overview.php?client_id=$client_id'>$client_name</a>";
|
||||||
}
|
}
|
||||||
$log_entity_id = intval($row['log_entity_id']);
|
$log_entity_id = intval($row['log_entity_id']);
|
||||||
|
|
||||||
@@ -292,11 +292,11 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<?php require_once "includes/filter_footer.php";
|
<?php require_once "../includes/filter_footer.php";
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "includes/footer.php";
|
require_once "../includes/footer.php";
|
||||||
|
|
||||||
@@ -34,5 +34,5 @@ require_once "includes/inc_all_admin.php";
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "includes/footer.php";
|
require_once "../includes/footer.php";
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
if (!isset($_GET['archived'])) {
|
if (!isset($_GET['archived'])) {
|
||||||
?>
|
?>
|
||||||
<div class="card-tools">
|
<div class="card-tools">
|
||||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addCategoryModal"><i
|
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/category/category_add.php?category=<?= nullable_htmlentities($category) ?>"><i
|
||||||
class="fas fa-plus mr-2"></i>New <?php echo nullable_htmlentities($category); ?> Category</button>
|
class="fas fa-plus mr-2"></i>New <?php echo nullable_htmlentities($category); ?> Category</button>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
@@ -77,13 +77,6 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
} else {
|
} else {
|
||||||
echo 'btn-default';
|
echo 'btn-default';
|
||||||
} ?>">Referral</a>
|
} ?>">Referral</a>
|
||||||
<a href="?category=Payment Method"
|
|
||||||
class="btn <?php if ($category == 'Payment Method') {
|
|
||||||
echo 'btn-primary';
|
|
||||||
} else {
|
|
||||||
echo 'btn-default';
|
|
||||||
} ?>">Payment
|
|
||||||
Method</a>
|
|
||||||
<a href="?category=Ticket"
|
<a href="?category=Ticket"
|
||||||
class="btn <?php if ($category == 'Ticket') {
|
class="btn <?php if ($category == 'Ticket') {
|
||||||
echo 'btn-primary';
|
echo 'btn-primary';
|
||||||
@@ -126,11 +119,8 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
?>
|
?>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a class="text-dark" href="#"
|
<a class="text-dark ajax-modal" href="#"
|
||||||
data-toggle="ajax-modal"
|
data-modal-url="modals/category/category_edit.php?id=<?= $category_id ?>">
|
||||||
data-ajax-url="ajax/ajax_category_edit.php"
|
|
||||||
data-ajax-id="<?php echo $category_id; ?>"
|
|
||||||
>
|
|
||||||
<?php echo $category_name; ?>
|
<?php echo $category_name; ?>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
@@ -155,11 +145,8 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
<?php
|
<?php
|
||||||
} else {
|
} else {
|
||||||
?>
|
?>
|
||||||
<a class="dropdown-item" href="#"
|
<a class="dropdown-item ajax-modal" href="#"
|
||||||
data-toggle="ajax-modal"
|
data-modal-url="modals/category/category_edit.php?id=<?= $category_id ?>">
|
||||||
data-ajax-url="ajax/ajax_category_edit.php"
|
|
||||||
data-ajax-id="<?php echo $category_id; ?>"
|
|
||||||
>
|
|
||||||
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-item text-danger confirm-link"
|
<a class="dropdown-item text-danger confirm-link"
|
||||||
@@ -183,11 +170,10 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<?php require_once "includes/filter_footer.php";
|
<?php require_once "../includes/filter_footer.php";
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "modals/admin_category_add_modal.php";
|
require_once "../includes/footer.php";
|
||||||
require_once "includes/footer.php";
|
|
||||||
8
admin/custom/readme.php
Normal file
8
admin/custom/readme.php
Normal 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
|
||||||
|
*/
|
||||||
@@ -96,16 +96,17 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
$custom_link_location_display = "Top Nav";
|
$custom_link_location_display = "Top Nav";
|
||||||
} elseif ($custom_link_location == 3) {
|
} elseif ($custom_link_location == 3) {
|
||||||
$custom_link_location_display = "Client Portal Nav";
|
$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>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a href="#"
|
<a class="ajax-modal" href="#"
|
||||||
data-toggle="ajax-modal"
|
data-modal-url="modals/custom_link/custom_link_edit.php?id=<?= $custom_link_id ?>">
|
||||||
data-ajax-url="ajax/ajax_custom_link_edit.php"
|
|
||||||
data-ajax-id="<?php echo $custom_link_id; ?>"
|
|
||||||
>
|
|
||||||
<i class="fa fa-fw fa-<?php echo $custom_link_icon; ?> mr-2"></i><?php echo $custom_link_name;?>
|
<i class="fa fa-fw fa-<?php echo $custom_link_icon; ?> mr-2"></i><?php echo $custom_link_name;?>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
@@ -118,7 +119,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
<i class="fas fa-ellipsis-h"></i>
|
<i class="fas fa-ellipsis-h"></i>
|
||||||
</button>
|
</button>
|
||||||
<div class="dropdown-menu">
|
<div class="dropdown-menu">
|
||||||
<a class="dropdown-item" href="#" data-toggle="ajax-modal" data-ajax-url="ajax/ajax_custom_link_edit.php" data-ajax-id="<?php echo $custom_link_id; ?>">
|
<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 mr-2"></i>Edit
|
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
@@ -138,11 +139,11 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<?php require_once "includes/filter_footer.php";
|
<?php require_once "../includes/filter_footer.php";
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "modals/admin_custom_link_add_modal.php";
|
require_once "modals/custom_link/custom_link_add.php";
|
||||||
require_once "includes/footer.php";
|
require_once "../includes/footer.php";
|
||||||
@@ -2776,7 +2776,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
//Dropping patch panel as a patch panel can be documented as an asset with interfaces.
|
//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_panel_ports`");
|
||||||
mysqli_query($mysqli, "DROP TABLE `patch_panels`");
|
mysqli_query($mysqli, "DROP TABLE `patch_panels`");
|
||||||
|
|
||||||
mysqli_query($mysqli, "RENAME TABLE `events` TO `calendar_events`");
|
mysqli_query($mysqli, "RENAME TABLE `events` TO `calendar_events`");
|
||||||
mysqli_query($mysqli, "RENAME TABLE `event_attendees` TO `calendar_event_attendees`");
|
mysqli_query($mysqli, "RENAME TABLE `event_attendees` TO `calendar_event_attendees`");
|
||||||
|
|
||||||
@@ -2957,7 +2957,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
ALTER TABLE `calendar_events`
|
ALTER TABLE `calendar_events`
|
||||||
ADD FOREIGN KEY (`event_calendar_id`) REFERENCES `calendars`(`calendar_id`) ON DELETE CASCADE
|
ADD FOREIGN KEY (`event_calendar_id`) REFERENCES `calendars`(`calendar_id`) ON DELETE CASCADE
|
||||||
");
|
");
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.3'");
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.3'");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2974,7 +2974,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
ALTER TABLE `certificate_history`
|
ALTER TABLE `certificate_history`
|
||||||
ADD FOREIGN KEY (`certificate_history_certificate_id`) REFERENCES `certificates`(`certificate_id`) ON DELETE CASCADE
|
ADD FOREIGN KEY (`certificate_history_certificate_id`) REFERENCES `certificates`(`certificate_id`) ON DELETE CASCADE
|
||||||
");
|
");
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.4'");
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.4'");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3335,14 +3335,14 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
ADD FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`vendor_id`) ON DELETE CASCADE,
|
ADD FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`vendor_id`) ON DELETE CASCADE,
|
||||||
ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE
|
ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE
|
||||||
");
|
");
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.5'");
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.5'");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CURRENT_DATABASE_VERSION == '2.0.5') {
|
if (CURRENT_DATABASE_VERSION == '2.0.5') {
|
||||||
|
|
||||||
// CONVERT All tables TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
|
// CONVERT All tables TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
|
||||||
|
|
||||||
$tables = [
|
$tables = [
|
||||||
'accounts', 'api_keys', 'app_logs', 'asset_credentials', 'asset_custom', 'asset_documents',
|
'accounts', 'api_keys', 'app_logs', 'asset_credentials', 'asset_custom', 'asset_documents',
|
||||||
'asset_files', 'asset_history', 'asset_interface_links', 'asset_interfaces', 'asset_notes', 'assets',
|
'asset_files', 'asset_history', 'asset_interface_links', 'asset_interfaces', 'asset_notes', 'assets',
|
||||||
@@ -3381,14 +3381,14 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CURRENT_DATABASE_VERSION == '2.0.7') {
|
if (CURRENT_DATABASE_VERSION == '2.0.7') {
|
||||||
|
|
||||||
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_hash`");
|
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_hash`");
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.8'");
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.8'");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CURRENT_DATABASE_VERSION == '2.0.8') {
|
if (CURRENT_DATABASE_VERSION == '2.0.8') {
|
||||||
|
|
||||||
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_has_thumbnail`");
|
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_has_preview`");
|
||||||
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_asset_id`");
|
mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_asset_id`");
|
||||||
@@ -3397,7 +3397,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CURRENT_DATABASE_VERSION == '2.0.9') {
|
if (CURRENT_DATABASE_VERSION == '2.0.9') {
|
||||||
|
|
||||||
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_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 `contacts` ADD `contact_mobile_country_code` VARCHAR(10) DEFAULT 1 AFTER `contact_extension`");
|
||||||
|
|
||||||
@@ -3425,7 +3425,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CURRENT_DATABASE_VERSION == '2.1.2') {
|
if (CURRENT_DATABASE_VERSION == '2.1.2') {
|
||||||
|
|
||||||
// Update country_code to NULL for `contacts` table
|
// 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_phone_country_code` VARCHAR(10) DEFAULT NULL");
|
||||||
mysqli_query($mysqli, "ALTER TABLE `contacts` MODIFY `contact_mobile_country_code` VARCHAR(10) DEFAULT NULL");
|
mysqli_query($mysqli, "ALTER TABLE `contacts` MODIFY `contact_mobile_country_code` VARCHAR(10) DEFAULT NULL");
|
||||||
@@ -3460,7 +3460,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
if (CURRENT_DATABASE_VERSION == '2.1.3') {
|
if (CURRENT_DATABASE_VERSION == '2.1.3') {
|
||||||
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_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`");
|
mysqli_query($mysqli, "ALTER TABLE `client_stripe` ADD `stripe_pm_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `stripe_pm_details`");
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.4'");
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.4'");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3670,13 +3670,375 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) {
|
|||||||
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.9'");
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.9'");
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (CURRENT_DATABASE_VERSION == '2.1.9') {
|
if (CURRENT_DATABASE_VERSION == '2.1.9') {
|
||||||
// // Insert queries here required to update to DB version 2.2.0
|
mysqli_query($mysqli, "ALTER TABLE `companies` MODIFY `company_currency` VARCHAR(200) DEFAULT 'USD'");
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.0'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.0') {
|
||||||
|
mysqli_query($mysqli, "ALTER TABLE `tickets` ADD `ticket_quote_id` INT(11) NOT NULL DEFAULT 0 AFTER `ticket_asset_id`");
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.1'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.1') {
|
||||||
|
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
|
||||||
|
)
|
||||||
|
");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.2'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.2') {
|
||||||
|
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");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.3'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.3') {
|
||||||
|
|
||||||
|
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`)
|
||||||
|
)");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.4'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.4') {
|
||||||
|
mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_theme_dark` TINYINT(1) NOT NULL DEFAULT 0 AFTER `config_theme`");
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.5'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.5') {
|
||||||
|
mysqli_query($mysqli, "ALTER TABLE `assets` ADD `asset_uri_client` VARCHAR(500) NULL DEFAULT NULL AFTER `asset_uri_2`");
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.6'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.6') {
|
||||||
|
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`)");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.7'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.7') {
|
||||||
|
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`");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.8'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.8') {
|
||||||
|
|
||||||
|
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`)
|
||||||
|
)");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.9'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.2.9') {
|
||||||
|
// 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_array($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_array($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'
|
||||||
|
");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.0'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.3.0') {
|
||||||
|
// Migrate Payment Methods from Categories Table to new payment_methods table
|
||||||
|
$sql_categories = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Payment Method' AND category_name != 'Stripe' AND category_archived_at IS NULL");
|
||||||
|
|
||||||
|
while ($row = mysqli_fetch_array($sql_categories)) {
|
||||||
|
$category_name = sanitizeInput($row['category_name']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"INSERT INTO payment_methods SET payment_method_name = '$category_name'");
|
||||||
|
}
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.1'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.3.1') {
|
||||||
|
|
||||||
|
// 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`
|
||||||
|
");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.2'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.3.2') {
|
||||||
|
|
||||||
|
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`
|
||||||
|
");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.3'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.3.3') {
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "ALTER TABLE settings
|
||||||
|
ADD `config_smtp_provider` ENUM('standard_smtp','google_oauth','microsoft_oauth') NULL DEFAULT NULL AFTER `config_start_page`
|
||||||
|
");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.4'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.3.4') {
|
||||||
|
|
||||||
|
// 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
|
||||||
|
)");
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.5'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CURRENT_DATABASE_VERSION == '2.3.5') {
|
||||||
|
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");
|
||||||
|
mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.6'");
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (CURRENT_DATABASE_VERSION == '2.3.5') {
|
||||||
|
// // Insert queries here required to update to DB version 2.3.5
|
||||||
// // Then, update the database to the next sequential version
|
// // Then, update the database to the next sequential version
|
||||||
// mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.0'");
|
// mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.6'");
|
||||||
// }
|
// }
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Up-to-date
|
// Up-to-date
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once "includes/inc_all_admin.php";
|
require_once "includes/inc_all_admin.php";
|
||||||
require_once "includes/database_version.php";
|
require_once "../includes/database_version.php";
|
||||||
require_once "config.php";
|
require_once "../config.php";
|
||||||
|
|
||||||
$checks = [];
|
$checks = [];
|
||||||
|
|
||||||
@@ -53,6 +53,7 @@ $extensions = [
|
|||||||
'php-curl' => 'curl',
|
'php-curl' => 'curl',
|
||||||
'php-mbstring' => 'mbstring',
|
'php-mbstring' => 'mbstring',
|
||||||
'php-gd' => 'gd',
|
'php-gd' => 'gd',
|
||||||
|
'php-zip' => 'zip',
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($extensions as $name => $ext) {
|
foreach ($extensions as $name => $ext) {
|
||||||
@@ -245,7 +246,7 @@ $filePermissions[] = [
|
|||||||
$uploadsStats = [];
|
$uploadsStats = [];
|
||||||
|
|
||||||
// Define the uploads directory path
|
// Define the uploads directory path
|
||||||
$uploadsDir = __DIR__ . '/uploads'; // Adjust the path if needed
|
$uploadsDir = __DIR__ . '/../uploads'; // Adjust the path if needed
|
||||||
|
|
||||||
if (is_dir($uploadsDir)) {
|
if (is_dir($uploadsDir)) {
|
||||||
// Function to recursively count files and calculate total size
|
// Function to recursively count files and calculate total size
|
||||||
@@ -348,7 +349,7 @@ if ($tablesResult) {
|
|||||||
$dbComparison = [];
|
$dbComparison = [];
|
||||||
|
|
||||||
// Path to the db.sql file
|
// Path to the db.sql file
|
||||||
$dbSqlFile = __DIR__ . '/db.sql';
|
$dbSqlFile = __DIR__ . '/../db.sql';
|
||||||
|
|
||||||
if (file_exists($dbSqlFile)) {
|
if (file_exists($dbSqlFile)) {
|
||||||
// Read the db.sql file
|
// Read the db.sql file
|
||||||
@@ -765,5 +766,5 @@ $mysqli->close();
|
|||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once "includes/footer.php";
|
require_once "../includes/footer.php";
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a class="text-bold" href="admin_document_template_details.php?document_template_id=<?php echo $document_template_id; ?>"><i class="fas fa-fw fa-file-alt text-dark"></i> <?php echo $document_template_name; ?></a>
|
<a class="text-bold" href="document_template_details.php?document_template_id=<?php echo $document_template_id; ?>"><i class="fas fa-fw fa-file-alt text-dark"></i> <?php echo $document_template_name; ?></a>
|
||||||
<div class="mt-1 text-secondary"><?php echo $document_template_description; ?></div>
|
<div class="mt-1 text-secondary"><?php echo $document_template_description; ?></div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -93,12 +93,9 @@
|
|||||||
<i class="fas fa-ellipsis-h"></i>
|
<i class="fas fa-ellipsis-h"></i>
|
||||||
</button>
|
</button>
|
||||||
<div class="dropdown-menu">
|
<div class="dropdown-menu">
|
||||||
<a class="dropdown-item" href="#"
|
<a class="dropdown-item ajax-modal" href="#"
|
||||||
data-toggle="ajax-modal"
|
|
||||||
data-modal-size="xl"
|
data-modal-size="xl"
|
||||||
data-ajax-url="ajax/ajax_document_template_edit.php"
|
data-modal-url="modals/document_template/document_template_edit.php?id=<?= $document_template_id ?>">
|
||||||
data-ajax-id="<?php echo $document_template_id; ?>"
|
|
||||||
>
|
|
||||||
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
@@ -120,12 +117,12 @@
|
|||||||
</table>
|
</table>
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
<?php require_once "includes/filter_footer.php"; ?>
|
<?php require_once "../includes/filter_footer.php"; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php require_once "modals/admin_document_template_add_modal.php"; ?>
|
<?php require_once "modals/document_template/document_template_add.php"; ?>
|
||||||
<?php require_once "includes/footer.php"; ?>
|
<?php require_once "../includes/footer.php"; ?>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
@@ -4,7 +4,7 @@ require_once "includes/inc_all_admin.php";
|
|||||||
|
|
||||||
|
|
||||||
//Initialize the HTML Purifier to prevent XSS
|
//Initialize the HTML Purifier to prevent XSS
|
||||||
require "plugins/htmlpurifier/HTMLPurifier.standalone.php";
|
require "../plugins/htmlpurifier/HTMLPurifier.standalone.php";
|
||||||
|
|
||||||
$purifier_config = HTMLPurifier_Config::createDefault();
|
$purifier_config = HTMLPurifier_Config::createDefault();
|
||||||
$purifier_config->set('Cache.DefinitionImpl', null); // Disable cache by setting a non-existent directory or an invalid one
|
$purifier_config->set('Cache.DefinitionImpl', null); // Disable cache by setting a non-existent directory or an invalid one
|
||||||
@@ -29,13 +29,13 @@ $document_template_updated_at = nullable_htmlentities($row['document_template_up
|
|||||||
|
|
||||||
<ol class="breadcrumb d-print-none">
|
<ol class="breadcrumb d-print-none">
|
||||||
<li class="breadcrumb-item">
|
<li class="breadcrumb-item">
|
||||||
<a href="clients.php">Home</a>
|
<a href="../">Home</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="breadcrumb-item">
|
<li class="breadcrumb-item">
|
||||||
<a href="admin_user.php">Admin</a>
|
<a href="users.php">Admin</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="breadcrumb-item">
|
<li class="breadcrumb-item">
|
||||||
<a href="admin_document_template.php">Document Templates</a>
|
<a href="document_template.php">Document Templates</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="breadcrumb-item active"><i class="fas fa-file mr-2"></i><?php echo $document_template_name; ?></li>
|
<li class="breadcrumb-item active"><i class="fas fa-file mr-2"></i><?php echo $document_template_name; ?></li>
|
||||||
</ol>
|
</ol>
|
||||||
@@ -46,12 +46,9 @@ $document_template_updated_at = nullable_htmlentities($row['document_template_up
|
|||||||
<h3 class="card-title mt-2"><i class="fa fa-fw fa-file mr-2"></i><?php echo $document_template_name; ?></h3>
|
<h3 class="card-title mt-2"><i class="fa fa-fw fa-file mr-2"></i><?php echo $document_template_name; ?></h3>
|
||||||
|
|
||||||
<div class="card-tools">
|
<div class="card-tools">
|
||||||
<button type="button" class="btn btn-primary"
|
<button type="button" class="btn btn-primary ajax-modal"
|
||||||
data-toggle="ajax-modal"
|
|
||||||
data-modal-size="xl"
|
data-modal-size="xl"
|
||||||
data-ajax-url="ajax/ajax_document_template_edit.php"
|
data-modal-url="modals/document_template/document_template_edit.php?id=<?= $document_template_id ?>">
|
||||||
data-ajax-id="<?php echo $document_template_id; ?>"
|
|
||||||
>
|
|
||||||
<i class="fas fa-edit mr-2"></i>Edit
|
<i class="fas fa-edit mr-2"></i>Edit
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -61,7 +58,7 @@ $document_template_updated_at = nullable_htmlentities($row['document_template_up
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/pretty_content.js"></script>
|
<script src="../js/pretty_content.js"></script>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "includes/footer.php";
|
require_once "../includes/footer.php";
|
||||||
@@ -13,7 +13,7 @@ require_once "includes/inc_all_admin.php";
|
|||||||
<h4>Client Portal SSO via Microsoft Entra</h4>
|
<h4>Client Portal SSO via Microsoft Entra</h4>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Identity Provider <small class='text-secondary'>(Currently only works with Microsft Entra)</small></label>
|
<label>Identity Provider <small class='text-secondary'>(Currently only works with Microsoft Entra ID/AAD)</small></label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text"><i class="fa fa-fw fa-fingerprint"></i></span>
|
<span class="input-group-text"><i class="fa fa-fw fa-fingerprint"></i></span>
|
||||||
@@ -55,4 +55,4 @@ require_once "includes/inc_all_admin.php";
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php require_once "includes/footer.php";
|
<?php require_once "../includes/footer.php";
|
||||||
16
admin/includes/inc_all_admin.php
Normal file
16
admin/includes/inc_all_admin.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/config.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/functions.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/check_login.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/page_title.php';
|
||||||
|
if (!isset($session_is_admin) || !$session_is_admin) {
|
||||||
|
exit(WORDING_ROLECHECK_FAILED . "<br>Tell your admin: Your role does not have admin access.");
|
||||||
|
}
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/top_nav.php';
|
||||||
|
require_once 'includes/side_nav.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/inc_wrapper.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/inc_alert_feedback.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/filter_header.php';
|
||||||
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/app_version.php';
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- Main Sidebar Container -->
|
<!-- Main Sidebar Container -->
|
||||||
<aside class="main-sidebar sidebar-dark-<?php echo nullable_htmlentities($config_theme); ?> d-print-none">
|
<aside class="main-sidebar sidebar-dark-<?php echo nullable_htmlentities($config_theme); ?> d-print-none">
|
||||||
<a class="brand-link pb-1 mt-1" href="clients.php">
|
<a class="brand-link pb-1 mt-1" href="/agent/<?php echo $config_start_page ?>">
|
||||||
<p class="h6">
|
<p class="h6">
|
||||||
<i class="nav-icon fas fa-arrow-left ml-3 mr-2"></i>
|
<i class="nav-icon fas fa-arrow-left ml-3 mr-2"></i>
|
||||||
<span class="brand-text">
|
<span class="brand-text">
|
||||||
@@ -16,19 +16,19 @@
|
|||||||
<ul class="nav nav-pills nav-sidebar flex-column mt-2" data-widget="treeview" data-accordion="false">
|
<ul class="nav nav-pills nav-sidebar flex-column mt-2" data-widget="treeview" data-accordion="false">
|
||||||
<!-- ACCESS Section -->
|
<!-- ACCESS Section -->
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_user.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "admin_user.php") {echo "active";} ?>">
|
<a href="users.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "users.php") {echo "active";} ?>">
|
||||||
<i class="nav-icon fas fa-users"></i>
|
<i class="nav-icon fas fa-users"></i>
|
||||||
<p>Users</p>
|
<p>Users</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_role.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "admin_role.php") {echo "active";} ?>">
|
<a href="roles.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "roles.php") {echo "active";} ?>">
|
||||||
<i class="nav-icon fas fa-user-shield"></i>
|
<i class="nav-icon fas fa-user-shield"></i>
|
||||||
<p>Roles</p>
|
<p>Roles</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_api.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "admin_api.php") {echo "active";} ?>">
|
<a href="api_keys.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "api_keys.php") {echo "active";} ?>">
|
||||||
<i class="nav-icon fas fa-key"></i>
|
<i class="nav-icon fas fa-key"></i>
|
||||||
<p>API Keys</p>
|
<p>API Keys</p>
|
||||||
</a>
|
</a>
|
||||||
@@ -36,35 +36,66 @@
|
|||||||
<li class="nav-header">TAGS & CATEGORIES</li>
|
<li class="nav-header">TAGS & CATEGORIES</li>
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_tag.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_tag.php' ? 'active' : ''); ?>">
|
<a href="tag.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'tag.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-tags"></i>
|
<i class="nav-icon fas fa-tags"></i>
|
||||||
<p>Tags</p>
|
<p>Tags</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_category.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_category.php' ? 'active' : ''); ?>">
|
<a href="category.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'category.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-list-ul"></i>
|
<i class="nav-icon fas fa-list-ul"></i>
|
||||||
<p>Categories</p>
|
<p>Categories</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php if ($config_module_enable_accounting) { ?>
|
<?php if ($config_module_enable_accounting) { ?>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_tax.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_tax.php' ? 'active' : ''); ?>">
|
<a href="tax.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'tax.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-balance-scale"></i>
|
<i class="nav-icon fas fa-balance-scale"></i>
|
||||||
<p>Taxes</p>
|
<p>Taxes</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="payment_method.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'payment_method.php' ? 'active' : ''); ?>">
|
||||||
|
<i class="nav-icon fas fa-hand-holding-usd"></i>
|
||||||
|
<p>Payment Methods</p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="payment_provider.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'payment_provider.php' ? 'active' : ''); ?>">
|
||||||
|
<i class="nav-icon far fa-credit-card"></i>
|
||||||
|
<p>Payment Providers</p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="saved_payment_method.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'saved_payment_method.php' ? 'active' : ''); ?>">
|
||||||
|
<i class="nav-icon far fa-credit-card"></i>
|
||||||
|
<p>Saved Payments</p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="ai_provider.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'ai_provider.php' ? 'active' : ''); ?>">
|
||||||
|
<i class="nav-icon fas fa-robot"></i>
|
||||||
|
<p>AI Providers</p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="ai_model.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'ai_model.php' ? 'active' : ''); ?>">
|
||||||
|
<i class="nav-icon fas fa-robot"></i>
|
||||||
|
<p>AI Models</p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
<?php if ($config_module_enable_ticketing) { ?>
|
<?php if ($config_module_enable_ticketing) { ?>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_ticket_status.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_ticket_status.php' ? 'active' : ''); ?>">
|
<a href="ticket_status.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'ticket_status.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-info-circle"></i>
|
<i class="nav-icon fas fa-info-circle"></i>
|
||||||
<p>Ticket Statuses</p>
|
<p>Ticket Statuses</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_custom_link.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_custom_link.php' ? 'active' : ''); ?>">
|
<a href="custom_link.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'custom_link.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-external-link-alt"></i>
|
<i class="nav-icon fas fa-external-link-alt"></i>
|
||||||
<p>Custom Links</p>
|
<p>Custom Links</p>
|
||||||
</a>
|
</a>
|
||||||
@@ -74,31 +105,31 @@
|
|||||||
<li class="nav-header">TEMPLATES</li>
|
<li class="nav-header">TEMPLATES</li>
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_project_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['admin_project_template.php', 'admin_project_template_details.php']) ? 'active' : ''); ?>">
|
<a href="project_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['project_template.php', 'project_template_details.php']) ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-project-diagram"></i>
|
<i class="nav-icon fas fa-project-diagram"></i>
|
||||||
<p>Project Templates</p>
|
<p>Project Templates</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_ticket_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['admin_ticket_template.php', 'admin_ticket_template_details.php']) ? 'active' : ''); ?>">
|
<a href="ticket_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['ticket_template.php', 'ticket_template_details.php']) ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-life-ring"></i>
|
<i class="nav-icon fas fa-life-ring"></i>
|
||||||
<p>Ticket Templates</p>
|
<p>Ticket Templates</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_vendor_template.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_vendor_template.php' ? 'active' : ''); ?>">
|
<a href="vendor_template.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'vendor_template.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-building"></i>
|
<i class="nav-icon fas fa-building"></i>
|
||||||
<p>Vendor Templates</p>
|
<p>Vendor Templates</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_software_template.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_software_template.php' ? 'active' : ''); ?>">
|
<a href="software_template.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'software_template.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-rocket"></i>
|
<i class="nav-icon fas fa-rocket"></i>
|
||||||
<p>License Templates</p>
|
<p>License Templates</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_document_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['admin_document_template.php', 'admin_document_template_details.php']) ? 'active' : ''); ?>">
|
<a href="document_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['document_template.php', 'document_template_details.php']) ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-file"></i>
|
<i class="nav-icon fas fa-file"></i>
|
||||||
<p>Document Templates</p>
|
<p>Document Templates</p>
|
||||||
</a>
|
</a>
|
||||||
@@ -108,44 +139,44 @@
|
|||||||
<li class="nav-header">MAINTENANCE</li>
|
<li class="nav-header">MAINTENANCE</li>
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_mail_queue.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_mail_queue.php' ? 'active' : ''); ?>">
|
<a href="mail_queue.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'mail_queue.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-mail-bulk"></i>
|
<i class="nav-icon fas fa-mail-bulk"></i>
|
||||||
<p>Mail Queue</p>
|
<p>Mail Queue</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_audit_log.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_audit_log.php' ? 'active' : ''); ?>">
|
<a href="audit_log.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'audit_log.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-history"></i>
|
<i class="nav-icon fas fa-history"></i>
|
||||||
<p>Audit Logs</p>
|
<p>Audit Logs</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_app_log.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_app_log.php' ? 'active' : ''); ?>">
|
<a href="app_log.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'app_log.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-history"></i>
|
<i class="nav-icon fas fa-history"></i>
|
||||||
<p>App Logs</p>
|
<p>App Logs</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_backup.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_backup.php' ? 'active' : ''); ?>">
|
<a href="backup.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'backup.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-cloud-upload-alt"></i>
|
<i class="nav-icon fas fa-cloud-upload-alt"></i>
|
||||||
<p>Backup</p>
|
<p>Backup</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_debug.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_debug.php' ? 'active' : ''); ?>">
|
<a href="debug.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'debug.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-bug"></i>
|
<i class="nav-icon fas fa-bug"></i>
|
||||||
<p>Debug</p>
|
<p>Debug</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_update.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_update.php' ? 'active' : ''); ?>">
|
<a href="update.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'update.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-download"></i>
|
<i class="nav-icon fas fa-download"></i>
|
||||||
<p>Update</p>
|
<p>Update</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- SETTINGS Section -->
|
<!-- SETTINGS Section -->
|
||||||
<li class="nav-item has-treeview mt-2 <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['admin_settings_company.php', 'admin_settings_localization.php', 'admin_settings_theme.php', 'admin_settings_security.php', 'admin_settings_mail.php', 'admin_settings_notification.php', 'admin_settings_default.php', 'admin_settings_invoice.php', 'admin_settings_quote.php', 'admin_settings_online_payment.php', 'admin_settings_online_payment_clients.php', 'admin_settings_project.php', 'admin_settings_ticket.php', 'admin_settings_ai.php', 'admin_identity_provider.php', 'admin_settings_telemetry.php', 'admin_settings_module.php']) ? 'menu-open' : ''); ?>">
|
<li class="nav-item has-treeview mt-2 <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['settings_company.php', 'settings_localization.php', 'settings_theme.php', 'settings_security.php', 'settings_mail.php', 'settings_notification.php', 'settings_default.php', 'settings_invoice.php', 'settings_quote.php', 'settings_online_payment.php', 'settings_online_payment_clients.php', 'settings_project.php', 'settings_ticket.php', 'settings_ai.php', 'identity_provider.php', 'settings_telemetry.php', 'settings_module.php']) ? 'menu-open' : ''); ?>">
|
||||||
<a href="#" class="nav-link">
|
<a href="#" class="nav-link">
|
||||||
<p>
|
<p>
|
||||||
SETTINGS
|
SETTINGS
|
||||||
@@ -154,118 +185,128 @@
|
|||||||
</a>
|
</a>
|
||||||
<ul class="nav nav-treeview">
|
<ul class="nav nav-treeview">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_company.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_company.php' ? 'active' : ''); ?>">
|
<a href="settings_company.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_company.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fa fa-briefcase"></i>
|
<i class="nav-icon fa fa-briefcase"></i>
|
||||||
<p>Company Details</p>
|
<p>Company Details</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_localization.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_localization.php' ? 'active' : ''); ?>">
|
<a href="settings_localization.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_localization.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fa fa-globe"></i>
|
<i class="nav-icon fa fa-globe"></i>
|
||||||
<p>Localization</p>
|
<p>Localization</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_theme.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_theme.php' ? 'active' : ''); ?>">
|
<a href="settings_theme.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_theme.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fa fa-paint-brush"></i>
|
<i class="nav-icon fa fa-paint-brush"></i>
|
||||||
<p>Theme</p>
|
<p>Theme</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_security.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_security.php' ? 'active' : ''); ?>">
|
<a href="settings_security.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_security.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-shield-alt"></i>
|
<i class="nav-icon fas fa-shield-alt"></i>
|
||||||
<p>Security</p>
|
<p>Security</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_mail.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_mail.php' ? 'active' : ''); ?>">
|
<a href="settings_mail.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_mail.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon far fa-envelope"></i>
|
<i class="nav-icon far fa-envelope"></i>
|
||||||
<p>Mail</p>
|
<p>Mail</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_notification.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_notification.php' ? 'active' : ''); ?>">
|
<a href="settings_notification.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_notification.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon far fa-bell"></i>
|
<i class="nav-icon far fa-bell"></i>
|
||||||
<p>Notifications</p>
|
<p>Notifications</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_default.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_default.php' ? 'active' : ''); ?>">
|
<a href="settings_default.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_default.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-cogs"></i>
|
<i class="nav-icon fas fa-cogs"></i>
|
||||||
<p>Defaults</p>
|
<p>Defaults</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php if ($config_module_enable_accounting) { ?>
|
<?php if ($config_module_enable_accounting) { ?>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_invoice.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_invoice.php' ? 'active' : ''); ?>">
|
<a href="settings_invoice.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_invoice.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-file-invoice"></i>
|
<i class="nav-icon fas fa-file-invoice"></i>
|
||||||
<p>Invoice</p>
|
<p>Invoice</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_quote.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_quote.php' ? 'active' : ''); ?>">
|
<a href="settings_quote.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_quote.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-comment-dollar"></i>
|
<i class="nav-icon fas fa-comment-dollar"></i>
|
||||||
<p>Quote</p>
|
<p>Quote</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
|
||||||
<a href="admin_settings_online_payment.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_online_payment.php' ? 'active' : ''); ?>">
|
|
||||||
<i class="nav-icon far fa-credit-card"></i>
|
|
||||||
<p>Online Payment</p>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<?php if ($config_stripe_enable) { ?>
|
|
||||||
<li class="nav-item">
|
|
||||||
<a href="admin_settings_online_payment_clients.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_online_payment_clients.php' ? 'active' : ''); ?>">
|
|
||||||
<i class="nav-icon far fa-credit-card"></i>
|
|
||||||
<p>Payment/Stripe Clients</p>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<?php } ?>
|
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if ($config_module_enable_ticketing) { ?>
|
<?php if ($config_module_enable_ticketing) { ?>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_project.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_project.php' ? 'active' : ''); ?>">
|
<a href="settings_project.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_project.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-project-diagram"></i>
|
<i class="nav-icon fas fa-project-diagram"></i>
|
||||||
<p>Project</p>
|
<p>Project</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_ticket.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_ticket.php' ? 'active' : ''); ?>">
|
<a href="settings_ticket.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_ticket.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-life-ring"></i>
|
<i class="nav-icon fas fa-life-ring"></i>
|
||||||
<p>Ticket</p>
|
<p>Ticket</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<li class="nav-item">
|
|
||||||
<a href="admin_settings_ai.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_ai.php' ? 'active' : ''); ?>">
|
|
||||||
<i class="nav-icon fas fa-robot"></i>
|
|
||||||
<p>AI</p>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<!-- Currently the only integration is the client portal SSO -->
|
<!-- Currently the only integration is the client portal SSO -->
|
||||||
<?php if ($config_client_portal_enable) { ?>
|
<?php if ($config_client_portal_enable) { ?>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_identity_provider.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_identity_provider.php' ? 'active' : ''); ?>">
|
<a href="identity_provider.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'identity_provider.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-fingerprint"></i>
|
<i class="nav-icon fas fa-fingerprint"></i>
|
||||||
<p>Identity Provider</p>
|
<p>Identity Provider</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_telemetry.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_telemetry.php' ? 'active' : ''); ?>">
|
<a href="settings_telemetry.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_telemetry.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-satellite-dish"></i>
|
<i class="nav-icon fas fa-satellite-dish"></i>
|
||||||
<p>Telemetry</p>
|
<p>Telemetry</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin_settings_module.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'admin_settings_module.php' ? 'active' : ''); ?>">
|
<a href="settings_module.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'settings_module.php' ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-cube"></i>
|
<i class="nav-icon fas fa-cube"></i>
|
||||||
<p>Modules</p>
|
<p>Modules</p>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$sql_custom_links = mysqli_query($mysqli, "SELECT * FROM custom_links
|
||||||
|
WHERE custom_link_location = 4 AND custom_link_archived_at IS NULL
|
||||||
|
ORDER BY custom_link_order ASC, custom_link_name ASC"
|
||||||
|
);
|
||||||
|
|
||||||
|
while ($row = mysqli_fetch_array($sql_custom_links)) {
|
||||||
|
$custom_link_name = nullable_htmlentities($row['custom_link_name']);
|
||||||
|
$custom_link_uri = sanitize_url($row['custom_link_uri']);
|
||||||
|
$custom_link_icon = nullable_htmlentities($row['custom_link_icon']);
|
||||||
|
$custom_link_new_tab = intval($row['custom_link_new_tab']);
|
||||||
|
if ($custom_link_new_tab == 1) {
|
||||||
|
$target = "target='_blank' rel='noopener noreferrer'";
|
||||||
|
} else {
|
||||||
|
$target = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="<?php echo $custom_link_uri; ?>" <?php echo $target; ?> class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == basename($custom_link_uri)) { echo "active"; } ?>">
|
||||||
|
<i class="fas fa-<?php echo $custom_link_icon; ?> nav-icon"></i>
|
||||||
|
<p><?php echo $custom_link_name; ?></p>
|
||||||
|
<i class="fas fa-angle-right nav-icon float-right"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<!-- /.sidebar-menu -->
|
<!-- /.sidebar-menu -->
|
||||||
4
admin/index.php
Normal file
4
admin/index.php
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
header('Location: users.php');
|
||||||
|
|
||||||
@@ -174,12 +174,9 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
<td><?php echo $email_status_display; ?></td>
|
<td><?php echo $email_status_display; ?></td>
|
||||||
<td><?php echo $email_attempts; ?></td>
|
<td><?php echo $email_attempts; ?></td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a class="btn btn-sm btn-secondary" href="#"
|
<a class="btn btn-sm btn-secondary ajax-modal" href="#"
|
||||||
data-toggle = "ajax-modal"
|
data-modal-size="lg"
|
||||||
data-modal-size = "lg"
|
data-modal-url="modals/mail_queue/mail_queue_message_view.php?id=<?= $email_id ?>">
|
||||||
data-ajax-url = "ajax/ajax_admin_mail_queue_message_view.php"
|
|
||||||
data-ajax-id = "<?php echo $email_id; ?>"
|
|
||||||
>
|
|
||||||
<i class="fas fa-fw fa-eye"></i>
|
<i class="fas fa-fw fa-eye"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
@@ -205,11 +202,11 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php require_once "includes/filter_footer.php"; ?>
|
<?php require_once "../includes/filter_footer.php"; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/bulk_actions.js"></script>
|
<script src="../js/bulk_actions.js"></script>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "includes/footer.php";
|
require_once "../includes/footer.php";
|
||||||
73
admin/modals/ai/ai_model_add.php
Normal file
73
admin/modals/ai/ai_model_add.php
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<div class="form-group">
|
||||||
|
<div class="modal" id="addAIModelModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-robot mr-2"></i>Add AI Model</h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Provider <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-robot"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="provider" required>
|
||||||
|
<option value="">- Select an AI Provider -</option>
|
||||||
|
<?php
|
||||||
|
$sql_ai_providers = mysqli_query($mysqli, "SELECT * FROM ai_providers");
|
||||||
|
while ($row = mysqli_fetch_array($sql_ai_providers)) {
|
||||||
|
$ai_provider_id = intval($row['ai_provider_id']);
|
||||||
|
$ai_provider_name = nullable_htmlentities($row['ai_provider_name']);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<option value="<?php echo $ai_provider_id; ?>"><?php echo $ai_provider_name; ?></option>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Model 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-robot"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="model" placeholder="ex gpt-4">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Use Case <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-th-list"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="use_case">
|
||||||
|
<option>General</option>
|
||||||
|
<option>Tickets</option>
|
||||||
|
<option>Documentation</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control" rows="8" name="prompt" placeholder="Enter a model prompt:"></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="add_ai_model" 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>
|
||||||
90
admin/modals/ai/ai_model_edit.php
Normal file
90
admin/modals/ai/ai_model_edit.php
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
|
$model_id = intval($_GET['id']);
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM ai_models WHERE ai_model_id = $model_id LIMIT 1");
|
||||||
|
|
||||||
|
$row = mysqli_fetch_array($sql);
|
||||||
|
$ai_model_ai_provider_id = intval($row['ai_model_ai_provider_id']);
|
||||||
|
$model_id = intval($row['ai_model_id']);
|
||||||
|
$model_name = nullable_htmlentities($row['ai_model_name']);
|
||||||
|
$use_case = nullable_htmlentities($row['ai_model_use_case']);
|
||||||
|
$prompt = nullable_htmlentities($row['ai_model_prompt']);
|
||||||
|
|
||||||
|
// Generate the HTML form content using output buffering.
|
||||||
|
ob_start();
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-robot mr-2"></i>Editing: <strong><?php echo $model_name; ?></strong></h5>
|
||||||
|
<button type="button" class="close text-light" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<input type="hidden" name="model_id" value="<?php echo $model_id; ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Provider <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-robot"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="provider" required>
|
||||||
|
<option value="">- Select an AI Provider -</option>
|
||||||
|
<?php
|
||||||
|
$sql_ai_providers = mysqli_query($mysqli, "SELECT * FROM ai_providers");
|
||||||
|
while ($row = mysqli_fetch_array($sql_ai_providers)) {
|
||||||
|
$ai_provider_id = intval($row['ai_provider_id']);
|
||||||
|
$ai_provider_name = nullable_htmlentities($row['ai_provider_name']);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<option <?php if ($ai_provider_id = $ai_model_ai_provider_id) { echo "selected"; } ?> value="<?php echo $ai_provider_id; ?>"><?php echo $ai_provider_name; ?></option>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Model 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-robot"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="model" value="<?php echo $model_name; ?>" placeholder="ex gpt-4">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Use Case <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-th-list"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="use_case">
|
||||||
|
<option <?php if ($use_case == 'General') { echo "selected"; } ?>>General</option>
|
||||||
|
<option <?php if ($use_case == 'Tickets') { echo "selected"; } ?>>Tickets</option>
|
||||||
|
<option <?php if ($use_case == 'Documentation') { echo "selected"; } ?>>Documentation</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control" rows="8" name="prompt" placeholder="Enter a model prompt:"><?php echo $prompt; ?></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="edit_ai_model" 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>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_footer.php';
|
||||||
54
admin/modals/ai/ai_provider_add.php
Normal file
54
admin/modals/ai/ai_provider_add.php
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<div class="form-group">
|
||||||
|
<div class="modal" id="addAIProviderModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-robot mr-2"></i>New AI Provider</h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Provider 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-robot"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="provider" placeholder="ex OpenAI">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>URL <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-globe"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="url" class="form-control" name="url" placeholder="ex https://ai.company.ext/api">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>API Key</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-key"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="api_key" placeholder="Enter API key here">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="add_ai_provider" 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>
|
||||||
69
admin/modals/ai/ai_provider_edit.php
Normal file
69
admin/modals/ai/ai_provider_edit.php
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
|
$provider_id = intval($_GET['id']);
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM ai_providers WHERE ai_provider_id = $provider_id LIMIT 1");
|
||||||
|
|
||||||
|
$row = mysqli_fetch_array($sql);
|
||||||
|
$provider_name = nullable_htmlentities($row['ai_provider_name']);
|
||||||
|
$url = nullable_htmlentities($row['ai_provider_api_url']);
|
||||||
|
$key = nullable_htmlentities($row['ai_provider_api_key']);
|
||||||
|
|
||||||
|
// Generate the HTML form content using output buffering.
|
||||||
|
ob_start();
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-robot mr-2"></i>Editing: <strong><?php echo $provider_name; ?></strong></h5>
|
||||||
|
<button type="button" class="close text-light" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<input type="hidden" name="provider_id" value="<?php echo $provider_id; ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Provider 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-robot"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="provider" value="<?php echo $provider_name; ?>" placeholder="ex OpenAI">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>URL <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-globe"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="url" class="form-control" name="url" value="<?php echo $url; ?>" placeholder="ex https://ai.company.ext/api">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>API Key</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-key"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="api_key" value="<?php echo $key; ?>" placeholder="Enter API key here">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="edit_ai_provider" 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>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -4,15 +4,15 @@ $decryptPW = randomString(160);
|
|||||||
?>
|
?>
|
||||||
<div class="modal" id="addApiKeyModal" tabindex="-1">
|
<div class="modal" id="addApiKeyModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-key mr-2"></i>New Key</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-key mr-2"></i>New Key</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<ul class="nav nav-pills nav-justified mb-3">
|
<ul class="nav nav-pills nav-justified mb-3">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
@@ -111,7 +111,7 @@ $decryptPW = randomString(160);
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_api_key" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create</button>
|
<button type="submit" name="add_api_key" 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="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
48
admin/modals/category/category_add.php
Normal file
48
admin/modals/category/category_add.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
|
$category = nullable_htmlentities($_GET['category']);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-list-ul mr-2"></i>New <strong><?= nullable_htmlentities($category) ?></strong> Category</h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="type" value="<?php echo ($category); ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>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-list-ul"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="name" placeholder="Category name" maxlength="200" required autofocus>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Color <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-paint-brush"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="color" class="form-control col-3" name="color" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="add_category" 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>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$category_id = intval($_GET['id']);
|
$category_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ $category_type = nullable_htmlentities($row['category_type']);
|
|||||||
// Generate the HTML form content using output buffering.
|
// Generate the HTML form content using output buffering.
|
||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-list-ul mr-2"></i>Editing category: <strong><?php echo $category_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-list-ul mr-2"></i>Editing category: <strong><?php echo $category_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -23,7 +23,7 @@ ob_start();
|
|||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="category_id" value="<?php echo $category_id; ?>">
|
<input type="hidden" name="category_id" value="<?php echo $category_id; ?>">
|
||||||
<input type="hidden" name="type" value="<?php echo $category_type; ?>">
|
<input type="hidden" name="type" value="<?php echo $category_type; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -46,11 +46,11 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_category" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_category" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="createCustomFieldModal" tabindex="-1">
|
<div class="modal" id="createCustomFieldModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-th-list mr-2"></i>Create <?php echo nullable_htmlentities($table); ?> field</h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-th-list mr-2"></i>Create <?php echo nullable_htmlentities($table); ?> field</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="table" value="<?php echo nullable_htmlentities($table); ?>">
|
<input type="hidden" name="table" value="<?php echo nullable_htmlentities($table); ?>">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Label <strong class="text-danger">*</strong></label>
|
<label>Label <strong class="text-danger">*</strong></label>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="create_custom_field" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create</button>
|
<button type="submit" name="create_custom_field" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="editCustomFieldModal<?php echo $custom_field_id; ?>" tabindex="-1">
|
<div class="modal" id="editCustomFieldModal<?php echo $custom_field_id; ?>" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-th-list mr-2"></i>Editing custom field: <strong><?php echo $custom_field_label; ?></strong></h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-th-list mr-2"></i>Editing custom field: <strong><?php echo $custom_field_label; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="custom_field_id" value="<?php echo $custom_field_id; ?>">
|
<input type="hidden" name="custom_field_id" value="<?php echo $custom_field_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Label <strong class="text-danger">*</strong></label>
|
<label>Label <strong class="text-danger">*</strong></label>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_custom_field" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_custom_field" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="addLinkModal" tabindex="-1">
|
<div class="modal" id="addLinkModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-external-link-alt mr-2"></i>New Custom Link</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-external-link-alt mr-2"></i>New Custom Link</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -66,12 +66,14 @@
|
|||||||
<option value="1">Main Side Nav</option>
|
<option value="1">Main Side Nav</option>
|
||||||
<option value="2">Top Nav (Icon Required)</option>
|
<option value="2">Top Nav (Icon Required)</option>
|
||||||
<option value="3">Client Portal Nav</option>
|
<option value="3">Client Portal Nav</option>
|
||||||
|
<option value="4">Admin Nav</option>
|
||||||
|
<option value="5">Reports Nav</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_custom_link" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
<button type="submit" name="add_custom_link" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$custom_link_id = intval($_GET['id']);
|
$custom_link_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ $custom_link_location = intval($row['custom_link_location']);
|
|||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-external-link-alt mr-2"></i>Editing link: <strong><?php echo $custom_link_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-external-link-alt mr-2"></i>Editing link: <strong><?php echo $custom_link_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -27,7 +27,7 @@ ob_start();
|
|||||||
|
|
||||||
<input type="hidden" name="custom_link_id" value="<?php echo $custom_link_id; ?>">
|
<input type="hidden" name="custom_link_id" value="<?php echo $custom_link_id; ?>">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -81,19 +81,21 @@ ob_start();
|
|||||||
<span class="input-group-text"><i class="fa fa-fw fa-home"></i></span>
|
<span class="input-group-text"><i class="fa fa-fw fa-home"></i></span>
|
||||||
</div>
|
</div>
|
||||||
<select class="form-control select2" name="location" required>
|
<select class="form-control select2" name="location" required>
|
||||||
<option value="1" <?php if ($custom_link_location == 1) { echo "selected"; } ?> >Main Side Nav</option>
|
<option value="1" <?php if ($custom_link_location === 1) { echo "selected"; } ?> >Main Side Nav</option>
|
||||||
<option value="2" <?php if ($custom_link_location == 2) { echo "selected"; } ?> >Top Nav (Icon Required)</option>
|
<option value="2" <?php if ($custom_link_location === 2) { echo "selected"; } ?> >Top Nav (Icon Required)</option>
|
||||||
<option value="3" <?php if ($custom_link_location == 3) { echo "selected"; } ?> >Client Portal Nav</option>
|
<option value="3" <?php if ($custom_link_location === 3) { echo "selected"; } ?> >Client Portal Nav</option>
|
||||||
|
<option value="4" <?php if ($custom_link_location === 4) { echo "selected"; } ?> >Admin Nav</option>
|
||||||
|
<option value="5" <?php if ($custom_link_location === 5) { echo "selected"; } ?> >Reports Nav</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_custom_link" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_custom_link" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,21 +1,19 @@
|
|||||||
<div class="modal" id="addDocumentTemplateModal" tabindex="-1">
|
<div class="modal" id="addDocumentTemplateModal" tabindex="-1">
|
||||||
<div class="modal-dialog modal-xl">
|
<div class="modal-dialog modal-xl">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-file-alt mr-2"></i>Creating Document Template</h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-file-alt mr-2"></i>Creating Document Template</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" class="form-control" name="name" placeholder="Template name" maxlength="200">
|
<input type="text" class="form-control" name="name" placeholder="Template name" maxlength="200">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php if ($config_ai_enable == 1) { ?>
|
|
||||||
<!-- Prompt for AI -->
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Enter a prompt for the type of IT documentation you want to generate:</label>
|
<label>Enter a prompt for the type of IT documentation you want to generate:</label>
|
||||||
<div class="input-group mb-3">
|
<div class="input-group mb-3">
|
||||||
@@ -27,7 +25,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
<!-- TinyMCE Content -->
|
<!-- TinyMCE Content -->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -40,7 +37,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
|
|
||||||
<button type="submit" name="add_document_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create</button>
|
<button type="submit" name="add_document_template" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$document_template_id = intval($_GET['id']);
|
$document_template_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ $document_template_content = nullable_htmlentities($row['document_template_conte
|
|||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-file-alt mr-2"></i>Editing template: <strong><?php echo $document_template_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-file-alt mr-2"></i>Editing template: <strong><?php echo $document_template_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -22,7 +22,7 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="document_template_id" value="<?php echo $document_template_id; ?>">
|
<input type="hidden" name="document_template_id" value="<?php echo $document_template_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" class="form-control" name="name" maxlength="200" value="<?php echo $document_template_name; ?>" placeholder="Name" required>
|
<input type="text" class="form-control" name="name" maxlength="200" value="<?php echo $document_template_name; ?>" placeholder="Name" required>
|
||||||
@@ -37,11 +37,11 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_document_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_document_template" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
if (!isset($session_is_admin) || !$session_is_admin) {
|
if (!isset($session_is_admin) || !$session_is_admin) {
|
||||||
exit(WORDING_ROLECHECK_FAILED . "<br>Tell your admin: Your role does not have admin access.");
|
exit(WORDING_ROLECHECK_FAILED . "<br>Tell your admin: Your role does not have admin access.");
|
||||||
@@ -9,7 +9,7 @@ if (!isset($session_is_admin) || !$session_is_admin) {
|
|||||||
$email_id = intval($_GET['id']);
|
$email_id = intval($_GET['id']);
|
||||||
|
|
||||||
//Initialize the HTML Purifier to prevent XSS
|
//Initialize the HTML Purifier to prevent XSS
|
||||||
require "../plugins/htmlpurifier/HTMLPurifier.standalone.php";
|
require "../../../plugins/htmlpurifier/HTMLPurifier.standalone.php";
|
||||||
|
|
||||||
$purifier_config = HTMLPurifier_Config::createDefault();
|
$purifier_config = HTMLPurifier_Config::createDefault();
|
||||||
$purifier_config->set('Cache.DefinitionImpl', null); // Disable cache by setting a non-existent directory or an invalid one
|
$purifier_config->set('Cache.DefinitionImpl', null); // Disable cache by setting a non-existent directory or an invalid one
|
||||||
@@ -43,13 +43,13 @@ if ($email_status == 0) {
|
|||||||
// Generate the HTML form content using output buffering.
|
// Generate the HTML form content using output buffering.
|
||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class='fas fa-fw fa-envelope-open mr-2'></i><strong><?php echo $email_subject; ?></strong></h5>
|
<h5 class="modal-title"><i class='fas fa-fw fa-envelope-open mr-2'></i><strong><?php echo $email_subject; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-light" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-1">
|
<div class="col-md-1">
|
||||||
<span class="text-secondary">From:</span>
|
<span class="text-secondary">From:</span>
|
||||||
@@ -73,7 +73,7 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="../js/pretty_content.js"></script>
|
<script src="../../js/pretty_content.js"></script>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
37
admin/modals/payment_method/payment_method_add.php
Normal file
37
admin/modals/payment_method/payment_method_add.php
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<div class="modal" id="addPaymentMethodModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-credit-card mr-2"></i>Creating: <strong>Payment Method</strong></h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>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-credit-card"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="name" placeholder="Payment method name" maxlength="200" required autofocus>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control" rows="3" name="description" placeholder="Enter a description..."></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="add_payment_method" 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>
|
||||||
51
admin/modals/payment_method/payment_method_edit.php
Normal file
51
admin/modals/payment_method/payment_method_edit.php
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
|
$payment_method_id = intval($_GET['id']);
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM payment_methods WHERE payment_method_id = $payment_method_id LIMIT 1");
|
||||||
|
|
||||||
|
$row = mysqli_fetch_array($sql);
|
||||||
|
$payment_method_id = intval($row['payment_method_id']);
|
||||||
|
$payment_method_name = nullable_htmlentities($row['payment_method_name']);
|
||||||
|
$payment_method_description = nullable_htmlentities($row['payment_method_description']);
|
||||||
|
|
||||||
|
// Generate the HTML form content using output buffering.
|
||||||
|
ob_start();
|
||||||
|
?>
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-credit-card mr-2"></i>Editing: <strong><?php echo $payment_method_name; ?></strong></h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>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-credit-card"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="name" value="<?php echo $payment_method_name; ?>" placeholder="Payment method name" maxlength="200" required autofocus>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control" rows="3" name="description" placeholder="Enter a description..."><?php echo $payment_method_description; ?></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="edit_payment_method" 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>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_footer.php';
|
||||||
103
admin/modals/payment_provider/payment_provider_add.php
Normal file
103
admin/modals/payment_provider/payment_provider_add.php
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<div class="form-group">
|
||||||
|
<div class="modal" id="addPaymentProviderModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-credit-card mr-2"></i>Add Payment Provider</h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="alert alert-info">
|
||||||
|
An income account named after the provider will always be created and used for income of paid invoices.<br>
|
||||||
|
If "Enable Expense" option is enabled, a matching vendor will also be automatically created for expense tracking. Additionally, an expense category named "Payment Processing" will be created.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Provider <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-credit-card"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="provider">
|
||||||
|
<option>Stripe</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Publishable key <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-eye"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="public_key" placeholder="Publishable API Key (pk_...)">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Secret key <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-key"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="private_key" placeholder="Secret API Key (sk_...)">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Threshold</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-shopping-cart"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" inputmode="numeric" pattern="[0-9]*\.?[0-9]{0,2}" name="threshold" placeholder="1000.00">
|
||||||
|
</div>
|
||||||
|
<small class="form-text text-muted">Will not show as an option at Checkout if invoice amount is above this number, 0 disables the threshold check.</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="custom-control custom-switch">
|
||||||
|
<input type="checkbox" class="custom-control-input" name="enable_expense" checked value="1" id="enableExpenseSwitch">
|
||||||
|
<label class="custom-control-label" for="enableExpenseSwitch">Enable Expense</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Percentage Fee to expense</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-percent"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" inputmode="numeric" pattern="[0-9]*\.?[0-9]{0,2}" name="percentage_fee" placeholder="Enter Percentage">
|
||||||
|
</div>
|
||||||
|
<small class="form-text text-muted">See <a href="https://stripe.com/pricing" target="_blank">here <i class="fas fa-fw fa-external-link-alt"></i></a> for the latest Stripe Fees.</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Flat Fee to expense</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-shopping-cart"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" inputmode="numeric" pattern="[0-9]*\.?[0-9]{0,3}" name="flat_fee" placeholder="0.030">
|
||||||
|
</div>
|
||||||
|
<small class="form-text text-muted">See <a href="https://stripe.com/pricing" target="_blank">here <i class="fas fa-fw fa-external-link-alt"></i></a> for the latest Stripe Fees.</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="add_payment_provider" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Add</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>
|
||||||
107
admin/modals/payment_provider/payment_provider_edit.php
Normal file
107
admin/modals/payment_provider/payment_provider_edit.php
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
|
$provider_id = intval($_GET['id']);
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM payment_providers WHERE payment_provider_id = $provider_id LIMIT 1");
|
||||||
|
|
||||||
|
$row = mysqli_fetch_array($sql);
|
||||||
|
$provider_name = nullable_htmlentities($row['payment_provider_name']);
|
||||||
|
$public_key = nullable_htmlentities($row['payment_provider_public_key']);
|
||||||
|
$private_key = nullable_htmlentities($row['payment_provider_private_key']);
|
||||||
|
$account_id = nullable_htmlentities($row['payment_provider_account']);
|
||||||
|
$threshold = floatval($row['payment_provider_threshold']);
|
||||||
|
$vendor_id = nullable_htmlentities($row['payment_provider_expense_vendor']);
|
||||||
|
$category_id = nullable_htmlentities($row['payment_provider_expense_category']);
|
||||||
|
$percent_fee = floatval($row['payment_provider_expense_percentage_fee']) * 100;
|
||||||
|
$flat_fee = floatval($row['payment_provider_expense_flat_fee']);
|
||||||
|
|
||||||
|
// Generate the HTML form content using output buffering.
|
||||||
|
ob_start();
|
||||||
|
?>
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-credit-card mr-2"></i>Editing: <strong><?php echo $provider_name; ?></strong></h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<input type="hidden" name="provider_id" value="<?php echo $provider_id; ?>">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Publishable key <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-eye"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="public_key" placeholder="Publishable API Key (pk_...)" value="<?php echo $public_key; ?>">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Secret key <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-key"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="private_key" placeholder="Secret API Key (sk_...)" value="<?php echo $private_key; ?>">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Threshold</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-shopping-cart"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" inputmode="numeric" pattern="[0-9]*\.?[0-9]{0,2}" name="threshold" placeholder="1000.00" value="<?php echo $threshold; ?>">
|
||||||
|
</div>
|
||||||
|
<small class="form-text text-muted">Will not show as an option at Checkout if above this number</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="custom-control custom-switch">
|
||||||
|
<input type="checkbox" class="custom-control-input" name="enable_expense" <?php if ($vendor_id) { echo "checked"; } ?> value="1" id="enableEditExpenseSwitch">
|
||||||
|
<label class="custom-control-label" for="enableEditExpenseSwitch">Enable Expense</label>
|
||||||
|
</div>
|
||||||
|
<small>(Category: Payment Processing -- Vendor: <?php echo $provider_name; ?></small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Percentage Fee to expense</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-percent"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" inputmode="numeric" pattern="[0-9]*\.?[0-9]{0,2}" name="percentage_fee" value="<?php echo $percent_fee; ?>" placeholder="Enter Percentage">
|
||||||
|
</div>
|
||||||
|
<small class="form-text text-muted">See <a href="https://stripe.com/pricing" target="_blank">here <i class="fas fa-fw fa-external-link-alt"></i></a> for the latest Stripe Fees.</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Flat Fee to expense</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-shopping-cart"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" inputmode="numeric" pattern="[0-9]*\.?[0-9]{0,3}" name="flat_fee" value="<?php echo $flat_fee; ?>" placeholder="0.030">
|
||||||
|
</div>
|
||||||
|
<small class="form-text text-muted">See <a href="https://stripe.com/pricing" target="_blank">here <i class="fas fa-fw fa-external-link-alt"></i></a> for the latest Stripe Fees.</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="edit_payment_provider" 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>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="addProjectTemplateModal" tabindex="-1">
|
<div class="modal" id="addProjectTemplateModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-project-diagram mr-2"></i>Creating Project Template</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-project-diagram mr-2"></i>Creating Project Template</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Project Template Name <strong class="text-danger">*</strong></label>
|
<label>Project Template Name <strong class="text-danger">*</strong></label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_project_template" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
<button type="submit" name="add_project_template" class="btn btn-primary text-bold"><i class="fas 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="editProjectTemplateModal<?php echo $project_template_id; ?>" tabindex="-1">
|
<div class="modal" id="editProjectTemplateModal<?php echo $project_template_id; ?>" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-project-diagram mr-2"></i>Editing Project Template: <strong><?php echo $project_template_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-project-diagram mr-2"></i>Editing Project Template: <strong><?php echo $project_template_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="project_template_id" value="<?php echo $project_template_id; ?>">
|
<input type="hidden" name="project_template_id" value="<?php echo $project_template_id; ?>">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Project Template Name <strong class="text-danger">*</strong></label>
|
<label>Project Template Name <strong class="text-danger">*</strong></label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_project_template" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
<button type="submit" name="edit_project_template" class="btn btn-primary text-bold"><i class="fas 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="addProjectTemplateTicketTemplateModal" tabindex="-1">
|
<div class="modal" id="addProjectTemplateTicketTemplateModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-life-ring mr-2"></i>Adding Ticket Template</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-life-ring mr-2"></i>Adding Ticket Template</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="project_template_id" value="<?php echo $project_template_id; ?>">
|
<input type="hidden" name="project_template_id" value="<?php echo $project_template_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Ticket Template <strong class="text-danger">*</strong></label>
|
<label>Ticket Template <strong class="text-danger">*</strong></label>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_ticket_template_to_project_template" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Add</button>
|
<button type="submit" name="add_ticket_template_to_project_template" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Add</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="addRoleModal" tabindex="-1">
|
<div class="modal" id="addRoleModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-user-shield mr-2"></i>Add new role</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-user-shield mr-2"></i>Add new role</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||||
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_role" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
<button type="submit" name="add_role" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$role_id = intval($_GET['id']);
|
$role_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ if (empty($user_names_string)) {
|
|||||||
// Generate the HTML form content using output buffering.
|
// Generate the HTML form content using output buffering.
|
||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-user-shield mr-2"></i>Editing role:
|
<h5 class="modal-title"><i class="fas fa-fw fa-user-shield mr-2"></i>Editing role:
|
||||||
<strong><?php echo $role_name; ?></strong></h5>
|
<strong><?php echo $role_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
@@ -45,7 +45,7 @@ ob_start();
|
|||||||
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||||
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
<input type="hidden" name="role_id" value="<?php echo $role_id; ?>">
|
<input type="hidden" name="role_id" value="<?php echo $role_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<ul class="nav nav-pills nav-justified mb-3">
|
<ul class="nav nav-pills nav-justified mb-3">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
@@ -143,11 +143,11 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_role" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_role" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
<div class="modal" id="addSoftwareTemplateModal" tabindex="-1">
|
<div class="modal" id="addSoftwareTemplateModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-cube mr-2"></i>New License Template</h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-cube mr-2"></i>New License Template</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Template Name <strong class="text-danger">*</strong></label>
|
<label>Template Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
<textarea class="form-control" rows="8" placeholder="Enter some notes" name="notes"></textarea>
|
<textarea class="form-control" rows="8" placeholder="Enter some notes" name="notes"></textarea>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_software_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create</button>
|
<button type="submit" name="add_software_template" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$software_template_id = intval($_GET['id']);
|
$software_template_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ $software_notes = nullable_htmlentities($row['software_template_notes']);
|
|||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-cube mr-2"></i>Editing template: <strong><?php echo $software_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-cube mr-2"></i>Editing template: <strong><?php echo $software_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -25,7 +25,7 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="software_template_id" value="<?php echo $software_template_id; ?>">
|
<input type="hidden" name="software_template_id" value="<?php echo $software_template_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Template Name <strong class="text-danger">*</strong></label>
|
<label>Template Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -89,11 +89,11 @@ ob_start();
|
|||||||
<textarea class="form-control" rows="8" placeholder="Enter some notes" name="notes"><?php echo $software_notes; ?></textarea>
|
<textarea class="form-control" rows="8" placeholder="Enter some notes" name="notes"><?php echo $software_notes; ?></textarea>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_software_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_software_template" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
94
admin/modals/tag/tag_add.php
Normal file
94
admin/modals/tag/tag_add.php
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
|
$type_display = '';
|
||||||
|
|
||||||
|
if (isset($_GET['type'])) {
|
||||||
|
$type = intval($_GET['type']);
|
||||||
|
|
||||||
|
if ($type === 1) {
|
||||||
|
$type_display = "Client";
|
||||||
|
} elseif($type === 2) {
|
||||||
|
$type_display = "Location";
|
||||||
|
} elseif ($type === 3) {
|
||||||
|
$type_display = "Contact";
|
||||||
|
} elseif ($type === 4) {
|
||||||
|
$type_display = "Credential";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fas fa-fw fa-tag mr-2"></i>New <strong><?= $type_display ?></strong> Tag</h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="type" value="<?php echo $type; ?>">
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>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-tag"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="name" placeholder="Tag name" maxlength="200" required autofocus>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php if (isset($_GET['type'])) { ?>
|
||||||
|
|
||||||
|
<input type="hidden" name="type" value="<?= $type ?>">
|
||||||
|
|
||||||
|
<?php } else { ?>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Type <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-th"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="type" required>
|
||||||
|
<option value="">- Type -</option>
|
||||||
|
<option value="1">Client Tag</option>
|
||||||
|
<option value="2">Location Tag</option>
|
||||||
|
<option value="3">Contact Tag</option>
|
||||||
|
<option value="4">Credential Tag</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Color <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-paint-brush"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="color" class="form-control col-3" name="color" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Icon</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-image"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control" name="icon" placeholder="Icon ex handshake">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="add_tag" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
||||||
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$tag_id = intval($_GET['id']);
|
$tag_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ $tag_icon = nullable_htmlentities($row['tag_icon']);
|
|||||||
// Generate the HTML form content using output buffering.
|
// Generate the HTML form content using output buffering.
|
||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-tag mr-2"></i>Editing tag: <strong><?php echo $tag_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-tag mr-2"></i>Editing tag: <strong><?php echo $tag_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -23,7 +23,7 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="tag_id" value="<?php echo $tag_id; ?>">
|
<input type="hidden" name="tag_id" value="<?php echo $tag_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -72,11 +72,11 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_tag" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_tag" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="addTaxModal" tabindex="-1">
|
<div class="modal" id="addTaxModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header text-white">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-balance-scale mr-2"></i>New Tax</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-balance-scale mr-2"></i>New Tax</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
<input type="text" class="form-control" name="name" placeholder="Tax name" maxlength="200" required autofocus>
|
<input type="text" class="form-control" name="name" placeholder="Tax name" maxlength="200" required autofocus>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<input type="number" min="0" step="any" class="form-control col-md-4" name="percent">
|
<input type="number" min="0" step="any" class="form-control col-md-4" name="percent">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_tax" class="btn btn-primary text-bold"><i class="fa fa-check mr- 2"></i>Create</button>
|
<button type="submit" name="add_tax" 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="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$tax_id = intval($_GET['id']);
|
$tax_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ $tax_percent = floatval($row['tax_percent']);
|
|||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-balance-scale mr-2"></i>Editing tax: <strong><?php echo $tax_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-balance-scale mr-2"></i>Editing tax: <strong><?php echo $tax_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -23,7 +23,7 @@ ob_start();
|
|||||||
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
<input type="hidden" name="tax_id" value="<?php echo $tax_id; ?>">
|
<input type="hidden" name="tax_id" value="<?php echo $tax_id; ?>">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -36,11 +36,11 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_tax" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_tax" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="addTicketStatusModal" tabindex="-1">
|
<div class="modal" id="addTicketStatusModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-info-circle mr-2"></i>New Ticket Status</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-info-circle mr-2"></i>New Ticket Status</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_ticket_status" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
<button type="submit" name="add_ticket_status" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$ticket_status_id = intval($_GET['id']);
|
$ticket_status_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ $ticket_status_active = intval($row['ticket_status_active']);
|
|||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-info-circle mr-2"></i>Editing Ticket Status: <strong><?php echo $ticket_status_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-info-circle mr-2"></i>Editing Ticket Status: <strong><?php echo $ticket_status_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -23,7 +23,7 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="ticket_status_id" value="<?php echo $ticket_status_id; ?>">
|
<input type="hidden" name="ticket_status_id" value="<?php echo $ticket_status_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -69,11 +69,11 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_ticket_status" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_ticket_status" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
<div class="modal" id="addTicketTemplateModal" tabindex="-1">
|
<div class="modal" id="addTicketTemplateModal" tabindex="-1">
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-life-ring mr-2"></i>Creating Ticket Template</h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-life-ring mr-2"></i>Creating Ticket Template</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Template Name <strong class="text-danger">*</strong></label>
|
<label>Template Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<textarea class="form-control tinymceTicket<?php if($config_ai_enable) { echo "AI"; } ?>" name="details"></textarea>
|
<textarea class="form-control tinymceTicket" name="details"></textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_ticket_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create</button>
|
<button type="submit" name="add_ticket_template" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<div class="modal" id="editTicketTemplateModal" tabindex="-1">
|
<div class="modal" id="editTicketTemplateModal" tabindex="-1">
|
||||||
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-life-ring mr-2"></i>Editing Ticket Template: <?php echo $ticket_template_name; ?></h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-life-ring mr-2"></i>Editing Ticket Template: <?php echo $ticket_template_name; ?></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="ticket_template_id" value="<?php echo $ticket_template_id; ?>">
|
<input type="hidden" name="ticket_template_id" value="<?php echo $ticket_template_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Template Name <strong class="text-danger">*</strong></label>
|
<label>Template Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<textarea class="form-control tinymceTicket<?php if($config_ai_enable) { echo "AI"; } ?>" name="details"><?php echo $ticket_template_details; ?></textarea>
|
<textarea class="form-control tinymceTicket" name="details"><?php echo $ticket_template_details; ?></textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_ticket_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_ticket_template" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$task_template_id = intval($_GET['id']);
|
$task_template_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ ob_start();
|
|||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fa fa-fw fa-tasks mr-2"></i>Editing task</h5>
|
<h5 class="modal-title"><i class="fa fa-fw fa-tasks mr-2"></i>Editing task</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -26,7 +26,7 @@ ob_start();
|
|||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="task_template_id" value="<?php echo $task_template_id; ?>">
|
<input type="hidden" name="task_template_id" value="<?php echo $task_template_id; ?>">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong></label>
|
||||||
@@ -50,7 +50,7 @@ ob_start();
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_ticket_template_task" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_ticket_template_task" 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>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -59,4 +59,4 @@ ob_start();
|
|||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="addUserModal" tabindex="-1">
|
<div class="modal" id="addUserModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-user-plus mr-2"></i>New User</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-user-plus mr-2"></i>New User</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||||
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<ul class="nav nav-pills nav-justified mb-3">
|
<ul class="nav nav-pills nav-justified mb-3">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_user" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
<button type="submit" name="add_user" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
83
admin/modals/user/user_archive.php
Normal file
83
admin/modals/user/user_archive.php
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
|
$user_id = intval($_GET['id']);
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM users WHERE users.user_id = $user_id LIMIT 1");
|
||||||
|
|
||||||
|
$row = mysqli_fetch_array($sql);
|
||||||
|
$user_name = nullable_htmlentities($row['user_name']);
|
||||||
|
$user_email = nullable_htmlentities($row['user_email']);
|
||||||
|
$user_avatar = nullable_htmlentities($row['user_avatar']);
|
||||||
|
$user_initials = nullable_htmlentities(initials($user_name));
|
||||||
|
|
||||||
|
$sql_related_tickets = mysqli_query($mysqli, "SELECT * FROM tickets
|
||||||
|
WHERE ticket_assigned_to = $user_id AND ticket_resolved_at IS NULL AND ticket_closed_at IS NULL");
|
||||||
|
|
||||||
|
$ticket_count = mysqli_num_rows($sql_related_tickets);
|
||||||
|
|
||||||
|
// Related Recurring Tickets Query
|
||||||
|
$sql_related_recurring_tickets = mysqli_query($mysqli, "SELECT * FROM recurring_tickets WHERE recurring_ticket_assigned_to = $user_id");
|
||||||
|
|
||||||
|
$recurring_ticket_count = mysqli_num_rows($sql_related_recurring_tickets);
|
||||||
|
|
||||||
|
// Generate the HTML form content using output buffering.
|
||||||
|
ob_start();
|
||||||
|
?>
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fas fa-fw fa-user-slash mr-2"></i>Archiving user:
|
||||||
|
<strong><?php echo $user_name; ?></strong></h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<input type="hidden" name="user_id" value="<?php echo $user_id; ?>">
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
|
||||||
|
<center class="mb-3">
|
||||||
|
<?php if (!empty($user_avatar)) { ?>
|
||||||
|
<img class="img-fluid" src="<?php echo "../uploads/users/$user_id/$user_avatar"; ?>">
|
||||||
|
<?php } else { ?>
|
||||||
|
<span class="fa-stack fa-4x">
|
||||||
|
<i class="fa fa-circle fa-stack-2x text-secondary"></i>
|
||||||
|
<span class="fa fa-stack-1x text-white"><?php echo $user_initials; ?></span>
|
||||||
|
</span>
|
||||||
|
<?php } ?>
|
||||||
|
</center>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Reassign <?= $ticket_count ?> Open Tickets and <?= $recurring_ticket_count ?> Recurring Tickets To:</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-user"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="ticket_assign" required>
|
||||||
|
<option value="0">No one</option>
|
||||||
|
<?php
|
||||||
|
$sql_users = mysqli_query($mysqli, "SELECT * FROM users WHERE user_type = 1 AND user_archived_at IS NULL");
|
||||||
|
while ($row = mysqli_fetch_array($sql_users)) {
|
||||||
|
$user_id_select = intval($row['user_id']);
|
||||||
|
$user_name_select = nullable_htmlentities($row['user_name']);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<option value="<?= $user_id_select ?>"><?= $user_name_select ?></option>
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="archive_user" class="btn btn-danger text-bold"><i class="fas fa-archive mr-2"></i>Archive</button>
|
||||||
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once "../../../includes/modal_footer.php";
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$user_id = intval($_GET['id']);
|
$user_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ while ($row = mysqli_fetch_assoc($user_client_access_sql)) {
|
|||||||
// Generate the HTML form content using output buffering.
|
// Generate the HTML form content using output buffering.
|
||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-user-edit mr-2"></i>Editing user:
|
<h5 class="modal-title"><i class="fas fa-fw fa-user-edit mr-2"></i>Editing user:
|
||||||
<strong><?php echo $user_name; ?></strong></h5>
|
<strong><?php echo $user_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
@@ -38,7 +38,7 @@ ob_start();
|
|||||||
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||||
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
<input type="hidden" name="user_id" value="<?php echo $user_id; ?>">
|
<input type="hidden" name="user_id" value="<?php echo $user_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<ul class="nav nav-pills nav-justified mb-3">
|
<ul class="nav nav-pills nav-justified mb-3">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
@@ -57,7 +57,7 @@ ob_start();
|
|||||||
|
|
||||||
<center class="mb-3">
|
<center class="mb-3">
|
||||||
<?php if (!empty($user_avatar)) { ?>
|
<?php if (!empty($user_avatar)) { ?>
|
||||||
<img class="img-fluid" src="<?php echo "uploads/users/$user_id/$user_avatar"; ?>">
|
<img class="img-fluid" src="<?php echo "../uploads/users/$user_id/$user_avatar"; ?>">
|
||||||
<?php } else { ?>
|
<?php } else { ?>
|
||||||
<span class="fa-stack fa-4x">
|
<span class="fa-stack fa-4x">
|
||||||
<i class="fa fa-circle fa-stack-2x text-secondary"></i>
|
<i class="fa fa-circle fa-stack-2x text-secondary"></i>
|
||||||
@@ -194,11 +194,11 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="edit_user" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
<button type="submit" name="edit_user" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once "../../../includes/modal_footer.php";
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
<div class="modal" id="exportUserModal" tabindex="-1">
|
<div class="modal" id="exportUserModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-download mr-2"></i>Export Users to CSV</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-download mr-2"></i>Export Users to CSV</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="export_users_csv" class="btn btn-primary text-bold"><i class="fas fa-fw fa-download mr-2"></i>Download CSV</button>
|
<button type="submit" name="export_users_csv" class="btn btn-primary text-bold"><i class="fas fa-fw fa-download mr-2"></i>Download CSV</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="userInviteModal" tabindex="-1">
|
<div class="modal" id="userInviteModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-user-plus"></i>Invite User</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-user-plus"></i>Invite User</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||||
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Email <strong class="text-danger">*</strong></label>
|
<label>Email <strong class="text-danger">*</strong></label>
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="invite_user" class="btn btn-primary text-bold"><i class="fas fa-paper-plane mr-2"></i>Send Invite</button>
|
<button type="submit" name="invite_user" class="btn btn-primary text-bold"><i class="fas fa-paper-plane mr-2"></i>Send Invite</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
87
admin/modals/user/user_restore.php
Normal file
87
admin/modals/user/user_restore.php
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
|
$user_id = intval($_GET['id']);
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM users WHERE user_id = $user_id AND user_archived_at IS NOT NULL LIMIT 1");
|
||||||
|
|
||||||
|
$row = mysqli_fetch_array($sql);
|
||||||
|
$user_name = str_replace(" (archived)", "", $row['user_name']); //Removed (archived) from user_name
|
||||||
|
$user_name = nullable_htmlentities($user_name);
|
||||||
|
$user_email = nullable_htmlentities($row['user_email']);
|
||||||
|
$user_avatar = nullable_htmlentities($row['user_avatar']);
|
||||||
|
$user_initials = initials($user_name);
|
||||||
|
$user_role_id = intval($row['user_role_id']);
|
||||||
|
|
||||||
|
// Generate the HTML form content using output buffering.
|
||||||
|
ob_start();
|
||||||
|
?>
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fas fa-fw fa-redo-alt mr-2"></i>Restoring user:
|
||||||
|
<strong><?php echo $user_name; ?></strong></h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<input type="hidden" name="user_id" value="<?php echo $user_id; ?>">
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
|
||||||
|
<center class="mb-3">
|
||||||
|
<?php if (!empty($user_avatar)) { ?>
|
||||||
|
<img class="img-fluid" src="<?php echo "../uploads/users/$user_id/$user_avatar"; ?>">
|
||||||
|
<?php } else { ?>
|
||||||
|
<span class="fa-stack fa-4x">
|
||||||
|
<i class="fa fa-circle fa-stack-2x text-secondary"></i>
|
||||||
|
<span class="fa fa-stack-1x text-white"><?php echo $user_initials; ?></span>
|
||||||
|
</span>
|
||||||
|
<?php } ?>
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Set a New Password</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-lock"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="password" class="form-control" data-toggle="password" name="new_password"
|
||||||
|
placeholder="Enter a new password" autocomplete="new-password" required>
|
||||||
|
<div class="input-group-append">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-eye"></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Role <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-user-shield"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="role" required>
|
||||||
|
<?php
|
||||||
|
$sql_user_roles = mysqli_query($mysqli, "SELECT * FROM user_roles WHERE role_archived_at IS NULL");
|
||||||
|
while ($row = mysqli_fetch_array($sql_user_roles)) {
|
||||||
|
$role_id = intval($row['role_id']);
|
||||||
|
$role_name = nullable_htmlentities($row['role_name']);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<option <?php if ($role_id == $user_role_id) {echo "selected";} ?> value="<?php echo $role_id; ?>"><?php echo $role_name; ?></option>
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="restore_user" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Restore</button>
|
||||||
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once "../../../includes/modal_footer.php";
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="modal" id="addVendorTemplateModal" tabindex="-1">
|
<div class="modal" id="addVendorTemplateModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-building mr-2"></i>New Vendor Template</h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-building mr-2"></i>New Vendor Template</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
<input type="hidden" name="client_id" value="<?php if (isset($_GET['client_id'])) { echo $client_id; } else { echo 0; } ?>">
|
<input type="hidden" name="client_id" value="<?php if (isset($_GET['client_id'])) { echo $client_id; } else { echo 0; } ?>">
|
||||||
|
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<ul class="nav nav-pills nav-justified mb-3">
|
<ul class="nav nav-pills nav-justified mb-3">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" name="add_vendor_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create Template</button>
|
<button type="submit" name="add_vendor_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create Template</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once '../includes/ajax_header.php';
|
require_once '../../../includes/modal_header.php';
|
||||||
|
|
||||||
$vendor_template_id = intval($_GET['id']);
|
$vendor_template_id = intval($_GET['id']);
|
||||||
|
|
||||||
@@ -10,7 +10,8 @@ $vendor_name = nullable_htmlentities($row['vendor_template_name']);
|
|||||||
$vendor_description = nullable_htmlentities($row['vendor_template_description']);
|
$vendor_description = nullable_htmlentities($row['vendor_template_description']);
|
||||||
$vendor_account_number = nullable_htmlentities($row['vendor_template_account_number']);
|
$vendor_account_number = nullable_htmlentities($row['vendor_template_account_number']);
|
||||||
$vendor_contact_name = nullable_htmlentities($row['vendor_template_contact_name']);
|
$vendor_contact_name = nullable_htmlentities($row['vendor_template_contact_name']);
|
||||||
$vendor_phone = formatPhoneNumber($row['vendor_template_phone']);
|
$vendor_phone_country_code = intval($row['vendor_template_phone_country_code']);
|
||||||
|
$vendor_phone = formatPhoneNumber($row['vendor_template_phone'], $vendor_phone_country_code);
|
||||||
$vendor_extension = nullable_htmlentities($row['vendor_template_extension']);
|
$vendor_extension = nullable_htmlentities($row['vendor_template_extension']);
|
||||||
$vendor_email = nullable_htmlentities($row['vendor_template_email']);
|
$vendor_email = nullable_htmlentities($row['vendor_template_email']);
|
||||||
$vendor_website = nullable_htmlentities($row['vendor_template_website']);
|
$vendor_website = nullable_htmlentities($row['vendor_template_website']);
|
||||||
@@ -23,7 +24,7 @@ $vendor_notes = nullable_htmlentities($row['vendor_template_notes']);
|
|||||||
ob_start();
|
ob_start();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header bg-dark">
|
||||||
<h5 class="modal-title"><i class="fas fa-fw fa-building mr-2"></i>Editing vendor template: <strong><?php echo $vendor_name; ?></strong></h5>
|
<h5 class="modal-title"><i class="fas fa-fw fa-building mr-2"></i>Editing vendor template: <strong><?php echo $vendor_name; ?></strong></h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
@@ -31,7 +32,7 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="vendor_template_id" value="<?php echo $vendor_template_id; ?>">
|
<input type="hidden" name="vendor_template_id" value="<?php echo $vendor_template_id; ?>">
|
||||||
<div class="modal-body bg-white">
|
<div class="modal-body">
|
||||||
|
|
||||||
<ul class="nav nav-pills nav-justified mb-3">
|
<ul class="nav nav-pills nav-justified mb-3">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
@@ -133,17 +134,20 @@ ob_start();
|
|||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text"><i class="fa fa-fw fa-phone"></i></span>
|
<span class="input-group-text"><i class="fa fa-fw fa-phone"></i></span>
|
||||||
</div>
|
</div>
|
||||||
|
<input type="tel" class="form-control col-2" name="phone_country_code" placeholder="+" maxlength="4" value="<?php echo $vendor_phone_country_code; ?>">
|
||||||
<input type="tel" class="form-control" name="phone" value="<?php echo $vendor_phone; ?>">
|
<input type="tel" class="form-control" name="phone" value="<?php echo $vendor_phone; ?>">
|
||||||
<div class="input-group-append">
|
|
||||||
<div class="input-group-text">
|
|
||||||
<input type="checkbox" name="global_update_vendor_phone" value="1">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<input type="text" class="form-control" name="extension" placeholder="Prompts" maxlength="200" value="<?php echo $vendor_extension; ?>">
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control" name="extension" placeholder="Prompts" maxlength="200" value="<?php echo $vendor_extension; ?>">
|
||||||
|
<div class="input-group-append">
|
||||||
|
<div class="input-group-text">
|
||||||
|
<input type="checkbox" name="global_update_vendor_phone" value="1">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -240,11 +244,11 @@ ob_start();
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer">
|
||||||
<button type="submit" class="btn btn-primary text-bold" name="edit_vendor_template"><i class="fa fa-check mr-2"></i>Update Template</button>
|
<button type="submit" class="btn btn-primary text-bold" name="edit_vendor_template"><i class="fa fa-check mr-2"></i>Update Template</button>
|
||||||
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once "../includes/ajax_footer.php";
|
require_once '../../../includes/modal_footer.php';
|
||||||
102
admin/payment_method.php
Normal file
102
admin/payment_method.php
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Default Column Sortby Filter
|
||||||
|
$sort = "payment_method_name";
|
||||||
|
$order = "ASC";
|
||||||
|
|
||||||
|
require_once "includes/inc_all_admin.php";
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM payment_methods ORDER BY $sort $order");
|
||||||
|
|
||||||
|
$num_rows = mysqli_num_rows($sql);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="card card-dark">
|
||||||
|
<div class="card-header py-2">
|
||||||
|
<h3 class="card-title mt-2"><i class="fas fa-fw fa-credit-card mr-2"></i>Payment Methods</h3>
|
||||||
|
<div class="card-tools">
|
||||||
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addPaymentMethodModal"><i class="fas fa-plus mr-2"></i>Add Payment Method</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive-sm">
|
||||||
|
<table class="table table-striped table-borderless table-hover">
|
||||||
|
<thead class="text-dark <?php if ($num_rows == 0) { echo "d-none"; } ?>">
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=payment_method_name&order=<?php echo $disp; ?>">
|
||||||
|
Method <?php if ($sort == 'payment_method_name') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=payment_method_description&order=<?php echo $disp; ?>">
|
||||||
|
Description <?php if ($sort == 'payment_method_description') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=payment_method_created_at&order=<?php echo $disp; ?>">
|
||||||
|
Created at <?php if ($sort == 'payment_method_created_at') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th class="text-center">Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
while ($row = mysqli_fetch_array($sql)) {
|
||||||
|
$payment_method_id = intval($row['payment_method_id']);
|
||||||
|
$payment_method_name = nullable_htmlentities($row['payment_method_name']);
|
||||||
|
$payment_method_description = nullable_htmlentities($row['payment_method_description']);
|
||||||
|
$payment_method_created_at = nullable_htmlentities($row['payment_method_created_at']);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a class="text-dark text-bold ajax-modal" href="#"
|
||||||
|
data-modal-url="modals/payment_method/payment_method_edit.php?id=<?= $payment_method_id ?>">
|
||||||
|
<?php echo $payment_method_name; ?>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td><?php echo $payment_method_description; ?></td>
|
||||||
|
<td><?php echo $payment_method_created_at; ?></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 ajax-modal" href="#"
|
||||||
|
data-modal-url="modals/payment_method/payment_method_edit.php?id=<?= $payment_method_id ?>">
|
||||||
|
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<a class="dropdown-item text-danger confirm-link" href="post.php?delete_payment_method=<?php echo $payment_method_id; ?>&csrf_token=<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<i class="fas fa-fw fa-trash mr-2"></i>Delete
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($num_rows == 0) {
|
||||||
|
echo "<h3 class='text-secondary mt-3' style='text-align: center'>No Records Here</h3>";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once "modals/payment_method/payment_method_add.php";
|
||||||
|
require_once "../includes/footer.php";
|
||||||
139
admin/payment_provider.php
Normal file
139
admin/payment_provider.php
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Default Column Sortby Filter
|
||||||
|
$sort = "payment_provider_name";
|
||||||
|
$order = "ASC";
|
||||||
|
|
||||||
|
require_once "includes/inc_all_admin.php";
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "SELECT * FROM payment_providers
|
||||||
|
LEFT JOIN accounts ON payment_provider_account = account_id
|
||||||
|
LEFT JOIN vendors ON payment_provider_expense_vendor = vendor_id
|
||||||
|
LEFT JOIN categories ON payment_provider_expense_category = category_id
|
||||||
|
ORDER BY $sort $order"
|
||||||
|
);
|
||||||
|
|
||||||
|
$num_rows = mysqli_num_rows($sql);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="card card-dark">
|
||||||
|
<div class="card-header py-2">
|
||||||
|
<h3 class="card-title mt-2"><i class="fas fa-fw fa-credit-card mr-2"></i>Payment Providers</h3>
|
||||||
|
<div class="card-tools">
|
||||||
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addPaymentProviderModal"><i class="fas fa-plus mr-2"></i>Add Provider</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive-sm">
|
||||||
|
<table class="table table-striped table-borderless table-hover">
|
||||||
|
<thead class="text-dark <?php if ($num_rows == 0) { echo "d-none"; } ?>">
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=payment_provider_name&order=<?php echo $disp; ?>">
|
||||||
|
Provider <?php if ($sort == 'payment_provider_name') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=account_name&order=<?php echo $disp; ?>">
|
||||||
|
Expense / Income Account <?php if ($sort == 'account_name') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=payment_provider_threshold&order=<?php echo $disp; ?>">
|
||||||
|
Threshold <?php if ($sort == 'payment_provider_threshold') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=vendor_name&order=<?php echo $disp; ?>">
|
||||||
|
Expense Vendor <?php if ($sort == 'vendor_name') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark" href="?<?php echo $url_query_strings_sort; ?>&sort=category_name&order=<?php echo $disp; ?>">
|
||||||
|
Expense Category <?php if ($sort == 'category_name') { echo $order_icon; } ?>
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark">Expensed Fee</a>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<a class="text-dark">Saved Payment Methods</a>
|
||||||
|
</th>
|
||||||
|
<th class="text-center">Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
while ($row = mysqli_fetch_array($sql)) {
|
||||||
|
$provider_id = intval($row['payment_provider_id']);
|
||||||
|
$provider_name = nullable_htmlentities($row['payment_provider_name']);
|
||||||
|
$provider_description = nullable_htmlentities($row['payment_provider_description']);
|
||||||
|
$account_name = nullable_htmlentities($row['account_name']);
|
||||||
|
$threshold = floatval($row['payment_provider_threshold']);
|
||||||
|
$vendor_name = nullable_htmlentities($row['vendor_name']);
|
||||||
|
$category = nullable_htmlentities($row['category_name']);
|
||||||
|
$percent_fee = floatval($row['payment_provider_expense_percentage_fee']) * 100;
|
||||||
|
$flat_fee = floatval($row['payment_provider_expense_flat_fee']);
|
||||||
|
|
||||||
|
$row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('saved_payment_id') AS saved_payment_count FROM client_saved_payment_methods WHERE saved_payment_provider_id = $provider_id"));
|
||||||
|
$saved_payment_count = intval($row['saved_payment_count']);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a class="text-dark text-bold ajax-modal" href="#"
|
||||||
|
data-modal-url="modals/payment_provider/payment_provider_edit.php?id=<?= $provider_id ?>">
|
||||||
|
<?php echo $provider_name; ?>
|
||||||
|
</a>
|
||||||
|
<span class="text-secondary"><?php echo $provider_description; ?></span>
|
||||||
|
</td>
|
||||||
|
<td><?php echo $account_name; ?></td>
|
||||||
|
<td><?php echo numfmt_format_currency($currency_format, $threshold, $session_company_currency); ?></td>
|
||||||
|
<td><?php echo $vendor_name; ?></td>
|
||||||
|
<td><?php echo $category; ?></td>
|
||||||
|
<td><?php echo $percent_fee; ?>% + <?php echo numfmt_format_currency($currency_format, $flat_fee, $session_company_currency); ?></td>
|
||||||
|
<td><?php echo $saved_payment_count; ?></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 ajax-modal" href="#"
|
||||||
|
data-modal-url="modals/payment_provider/payment_provider_edit.php?id=<?= $provider_id ?>">
|
||||||
|
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<!-- <a class="dropdown-item text-danger confirm-link" href="post.php?disable_payment_provider=--><?php //echo $provider_id; ?><!--&csrf_token=--><?php //echo $_SESSION['csrf_token'] ?><!--">-->
|
||||||
|
<!-- <i class="fas fa-fw fa-thumbs-down mr-2"></i>Disable-->
|
||||||
|
<!-- </a>-->
|
||||||
|
<!-- <a class="dropdown-item text-danger confirm-link" href="post.php?delete_payment_provider=--><?php //echo $provider_id; ?><!--&csrf_token=--><?php //echo $_SESSION['csrf_token'] ?><!--">-->
|
||||||
|
<!-- <i class="fas fa-fw fa-trash mr-2"></i>Delete-->
|
||||||
|
<!-- </a>-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($num_rows == 0) {
|
||||||
|
echo "<h3 class='text-secondary mt-3' style='text-align: center'>No Records Here</h3>";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once "modals/payment_provider/payment_provider_add.php";
|
||||||
|
require_once "../includes/footer.php";
|
||||||
42
admin/post.php
Normal file
42
admin/post.php
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ITFlow - Admin GET/POST request handler
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once "../config.php";
|
||||||
|
require_once "../functions.php";
|
||||||
|
require_once "../includes/check_login.php";
|
||||||
|
|
||||||
|
// Define a variable that we can use to only allow running post files via inclusion (prevents people/bots poking them)
|
||||||
|
define('FROM_POST_HANDLER', true);
|
||||||
|
|
||||||
|
// Determine which files we should load
|
||||||
|
|
||||||
|
// Parse URL & get the path
|
||||||
|
$path = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH);
|
||||||
|
|
||||||
|
// Get the base name (the page name)
|
||||||
|
$module = explode(".", basename($path))[0];
|
||||||
|
|
||||||
|
// Strip off any _details bits
|
||||||
|
$module = str_ireplace('_details', '', $module);
|
||||||
|
|
||||||
|
// Dynamically load admin-related module POST logic
|
||||||
|
if (isset($session_is_admin) && $session_is_admin) {
|
||||||
|
// As (almost) every admin setting is only changed from 1 page, we can dynamically load the relevant logic inside this single admin check IF statement
|
||||||
|
// To add a new admin POST request handler, add a file named after the admin page
|
||||||
|
// e.g. changes made on the page http://itflow/admin_ticket_statues.php will load the page admin/post/admin_ticket_statues.php to handle the changes
|
||||||
|
|
||||||
|
include_once "post/$module.php";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Logout is the same for user and admin
|
||||||
|
require_once "../post/logout.php";
|
||||||
|
|
||||||
|
// TODO: Find a home for these
|
||||||
|
|
||||||
|
require_once "../post/ai.php";
|
||||||
|
require_once "../post/misc.php";
|
||||||
|
|
||||||
65
admin/post/ai_model.php
Normal file
65
admin/post/ai_model.php
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ITFlow - GET/POST request handler for AI Models ('ai_model')
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
|
if (isset($_POST['add_ai_model'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$provider_id = intval($_POST['provider']);
|
||||||
|
$model = sanitizeInput($_POST['model']);
|
||||||
|
$prompt = sanitizeInput($_POST['prompt']);
|
||||||
|
$use_case = sanitizeInput($_POST['use_case']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"INSERT INTO ai_models SET ai_model_name = '$model', ai_model_prompt = '$prompt', ai_model_use_case = '$use_case', ai_model_ai_provider_id = $provider_id");
|
||||||
|
|
||||||
|
$ai_model_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
|
logAction("AI Model", "Create", "$session_name created AI Model $model");
|
||||||
|
|
||||||
|
flash_alert("AI Model <strong>$model</strong> created");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['edit_ai_model'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$model_id = intval($_POST['model_id']);
|
||||||
|
$model = sanitizeInput($_POST['model']);
|
||||||
|
$prompt = sanitizeInput($_POST['prompt']);
|
||||||
|
$use_case = sanitizeInput($_POST['use_case']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"UPDATE ai_models SET ai_model_name = '$model', ai_model_prompt = '$prompt', ai_model_use_case = '$use_case' WHERE ai_model_id = $model_id");
|
||||||
|
|
||||||
|
logAction("AI Model", "Edit", "$session_name edited AI Model $model");
|
||||||
|
|
||||||
|
flash_alert("AI Model <strong>$model</strong> edited");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_GET['delete_ai_model'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_GET['csrf_token']);
|
||||||
|
|
||||||
|
$model_id = intval($_GET['delete_ai_model']);
|
||||||
|
|
||||||
|
$model_name = sanitizeInput(getFieldById('ai_models', $model_id, 'ai_model_name'));
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"DELETE FROM ai_models WHERE ai_model_id = $model_id");
|
||||||
|
|
||||||
|
logAction("AI Model", "Delete", "$session_name deleted AI Model $model_name");
|
||||||
|
|
||||||
|
flash_alert("AI Model <strong>$model_name</strong> deleted", 'error');
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
65
admin/post/ai_provider.php
Normal file
65
admin/post/ai_provider.php
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ITFlow - GET/POST request handler for AI Providers ('ai_provider')
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
|
if (isset($_POST['add_ai_provider'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$provider = sanitizeInput($_POST['provider']);
|
||||||
|
$url = sanitizeInput($_POST['url']);
|
||||||
|
$model = sanitizeInput($_POST['model']);
|
||||||
|
$api_key = sanitizeInput($_POST['api_key']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"INSERT INTO ai_providers SET ai_provider_name = '$provider', ai_provider_api_url = '$url', ai_provider_api_key = '$api_key'");
|
||||||
|
|
||||||
|
$ai_provider_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
|
logAction("AI Provider", "Create", "$session_name created AI Provider $provider");
|
||||||
|
|
||||||
|
flash_alert("AI Model <strong>$provider</strong> created");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['edit_ai_provider'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$provider_id = intval($_POST['provider_id']);
|
||||||
|
$provider = sanitizeInput($_POST['provider']);
|
||||||
|
$url = sanitizeInput($_POST['url']);
|
||||||
|
$api_key = sanitizeInput($_POST['api_key']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"UPDATE ai_providers SET ai_provider_name = '$provider', ai_provider_api_url = '$url', ai_provider_api_key = '$api_key' WHERE ai_provider_id = $provider_id");
|
||||||
|
|
||||||
|
logAction("AI Provider", "Edit", "$session_name edited AI Provider $provider");
|
||||||
|
|
||||||
|
flash_alert("AI Model <strong>$provider</strong> edited");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_GET['delete_ai_provider'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_GET['csrf_token']);
|
||||||
|
|
||||||
|
$provider_id = intval($_GET['delete_ai_provider']);
|
||||||
|
|
||||||
|
$provider_name = sanitizeInput(getFieldById('ai_providers', $provider_id, 'ai_provider_name'));
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"DELETE FROM ai_providers WHERE ai_provider_id = $provider_id");
|
||||||
|
|
||||||
|
logAction("AI Provider", "Delete", "$session_name deleted AI Provider $provider_name", 'error');
|
||||||
|
|
||||||
|
flash_alert("AI Provider <strong>$provider_name</strong> deleted", 'error');
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -23,12 +23,11 @@ if (isset($_POST['add_api_key'])) {
|
|||||||
|
|
||||||
$api_key_id = mysqli_insert_id($mysqli);
|
$api_key_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("API Key", "Create", "$session_name created API key $name set to expire on $expire", $client_id, $api_key_id);
|
logAction("API Key", "Create", "$session_name created API key $name set to expire on $expire", $client_id, $api_key_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "API Key <strong>$name</strong> created";
|
flash_alert("API Key <strong>$name</strong> created");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,13 +44,11 @@ if (isset($_GET['delete_api_key'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"DELETE FROM api_keys WHERE api_key_id = $api_key_id");
|
mysqli_query($mysqli,"DELETE FROM api_keys WHERE api_key_id = $api_key_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("API Key", "Delete", "$session_name deleted API key $name", $client_id);
|
logAction("API Key", "Delete", "$session_name deleted API key $name", $client_id);
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("API Key <strong>$name</strong> deleted", 'error');
|
||||||
$_SESSION['alert_message'] = "API Key <strong>$name</strong> deleted";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,18 +72,16 @@ if (isset($_POST['bulk_delete_api_keys'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli, "DELETE FROM api_keys WHERE api_key_id = $api_key_id");
|
mysqli_query($mysqli, "DELETE FROM api_keys WHERE api_key_id = $api_key_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("API Key", "Delete", "$session_name deleted API key $name", $client_id);
|
logAction("API Key", "Delete", "$session_name deleted API key $name", $client_id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("API Key", "Bulk Delete", "$session_name deleted $count API key(s)");
|
logAction("API Key", "Bulk Delete", "$session_name deleted $count API key(s)");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Deleted <strong>$count</strong> API keys(s)", 'error');
|
||||||
$_SESSION['alert_message'] = "Deleted <strong>$count</strong> API keys(s)";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,9 +6,10 @@
|
|||||||
|
|
||||||
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
require_once "includes/app_version.php";
|
require_once "../includes/app_version.php";
|
||||||
|
|
||||||
if (isset($_GET['download_backup'])) {
|
if (isset($_GET['download_backup'])) {
|
||||||
|
|
||||||
validateCSRFToken($_GET['csrf_token']);
|
validateCSRFToken($_GET['csrf_token']);
|
||||||
|
|
||||||
$timestamp = date('YmdHis');
|
$timestamp = date('YmdHis');
|
||||||
@@ -122,7 +123,7 @@ if (isset($_GET['download_backup'])) {
|
|||||||
file_put_contents($sqlFile, $sqlContent);
|
file_put_contents($sqlFile, $sqlContent);
|
||||||
|
|
||||||
// === 4. Zip the uploads folder
|
// === 4. Zip the uploads folder
|
||||||
$zipFolder("uploads", $uploadsZip);
|
$zipFolder("../uploads", $uploadsZip);
|
||||||
|
|
||||||
// === 5. Create version.txt
|
// === 5. Create version.txt
|
||||||
$commitHash = trim(shell_exec('git log -1 --format=%H')) ?: 'N/A';
|
$commitHash = trim(shell_exec('git log -1 --format=%H')) ?: 'N/A';
|
||||||
@@ -175,7 +176,7 @@ if (isset($_GET['download_backup'])) {
|
|||||||
fclose($fp);
|
fclose($fp);
|
||||||
|
|
||||||
logAction("System", "Backup Download", "$session_name downloaded full backup.");
|
logAction("System", "Backup Download", "$session_name downloaded full backup.");
|
||||||
$_SESSION['alert_message'] = "Full backup downloaded.";
|
flash_alert("Full backup downloaded.");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,10 +193,8 @@ if (isset($_POST['backup_master_key'])) {
|
|||||||
if (password_verify($password, $row['user_password'])) {
|
if (password_verify($password, $row['user_password'])) {
|
||||||
$site_encryption_master_key = decryptUserSpecificKey($row['user_specific_encryption_ciphertext'], $password);
|
$site_encryption_master_key = decryptUserSpecificKey($row['user_specific_encryption_ciphertext'], $password);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Master Key", "Download", "$session_name retrieved the master encryption key");
|
logAction("Master Key", "Download", "$session_name retrieved the master encryption key");
|
||||||
|
|
||||||
// App Notify
|
|
||||||
appNotify("Master Key", "$session_name retrieved the master encryption key");
|
appNotify("Master Key", "$session_name retrieved the master encryption key");
|
||||||
|
|
||||||
echo "==============================";
|
echo "==============================";
|
||||||
@@ -204,13 +203,11 @@ if (isset($_POST['backup_master_key'])) {
|
|||||||
echo "<br>==============================";
|
echo "<br>==============================";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Log the failure
|
|
||||||
logAction("Master Key", "Download", "$session_name attempted to retrieve the master encryption key but failed");
|
logAction("Master Key", "Download", "$session_name attempted to retrieve the master encryption key but failed");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Incorrect password.", 'error');
|
||||||
$_SESSION['alert_message'] = "Incorrect password.";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8,35 +8,33 @@ defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
|||||||
|
|
||||||
if (isset($_POST['add_category'])) {
|
if (isset($_POST['add_category'])) {
|
||||||
|
|
||||||
require_once 'post/admin/admin_category_model.php';
|
require_once 'category_model.php';
|
||||||
|
|
||||||
mysqli_query($mysqli,"INSERT INTO categories SET category_name = '$name', category_type = '$type', category_color = '$color'");
|
mysqli_query($mysqli,"INSERT INTO categories SET category_name = '$name', category_type = '$type', category_color = '$color'");
|
||||||
|
|
||||||
$category_id = mysqli_insert_id($mysqli);
|
$category_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Category", "Create", "$session_name created category $type $name", 0, $category_id);
|
logAction("Category", "Create", "$session_name created category $type $name", 0, $category_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Category $type <strong>$name</strong> created";
|
flash_alert("Category $type <strong>$name</strong> created");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['edit_category'])) {
|
if (isset($_POST['edit_category'])) {
|
||||||
|
|
||||||
require_once 'post/admin/admin_category_model.php';
|
require_once 'category_model.php';
|
||||||
|
|
||||||
$category_id = intval($_POST['category_id']);
|
$category_id = intval($_POST['category_id']);
|
||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE categories SET category_name = '$name', category_type = '$type', category_color = '$color' WHERE category_id = $category_id");
|
mysqli_query($mysqli,"UPDATE categories SET category_name = '$name', category_type = '$type', category_color = '$color' WHERE category_id = $category_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Category", "Edit", "$session_name edited category $type $name", 0, $category_id);
|
logAction("Category", "Edit", "$session_name edited category $type $name", 0, $category_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Category $type <strong>$name</strong> edited";
|
flash_alert("Category $type <strong>$name</strong> edited");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,13 +50,11 @@ if (isset($_GET['archive_category'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE categories SET category_archived_at = NOW() WHERE category_id = $category_id");
|
mysqli_query($mysqli,"UPDATE categories SET category_archived_at = NOW() WHERE category_id = $category_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Category", "Archive", "$session_name archived category $category_type $category_name", 0, $category_id);
|
logAction("Category", "Archive", "$session_name archived category $category_type $category_name", 0, $category_id);
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Category $category_type <strong>$category_name</strong> archived", 'error');
|
||||||
$_SESSION['alert_message'] = "Category $category_type <strong>$category_name</strong> archived";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,12 +70,11 @@ if (isset($_GET['unarchive_category'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE categories SET category_archived_at = NULL WHERE category_id = $category_id");
|
mysqli_query($mysqli,"UPDATE categories SET category_archived_at = NULL WHERE category_id = $category_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Category", "Unarchive", "$session_name unarchived category $category_type $category_name", 0, $category_id);
|
logAction("Category", "Unarchive", "$session_name unarchived category $category_type $category_name", 0, $category_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Category $category_type <strong>$category_name</strong> unarchived";
|
flash_alert("Category $category_type <strong>$category_name</strong> unarchived");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,12 +90,10 @@ if (isset($_GET['delete_category'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"DELETE FROM categories WHERE category_id = $category_id");
|
mysqli_query($mysqli,"DELETE FROM categories WHERE category_id = $category_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Category", "Delete", "$session_name deleted category $category_type $category_name");
|
logAction("Category", "Delete", "$session_name deleted category $category_type $category_name");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Category $category_type <strong>$category_name</strong> deleted", 'error');
|
||||||
$_SESSION['alert_message'] = "Category $category_type <strong>$category_name</strong> deleted";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@ defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
|||||||
|
|
||||||
if(isset($_POST['create_custom_field'])){
|
if(isset($_POST['create_custom_field'])){
|
||||||
|
|
||||||
require_once 'post/admin/admin_custom_field_model.php';
|
require_once 'custom_field_model.php';
|
||||||
|
|
||||||
$table = sanitizeInput($_POST['table']);
|
$table = sanitizeInput($_POST['table']);
|
||||||
|
|
||||||
@@ -16,48 +16,42 @@ if(isset($_POST['create_custom_field'])){
|
|||||||
|
|
||||||
$custom_field_id = mysqli_insert_id($mysqli);
|
$custom_field_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Custom Field", "Create", "$session_name created custom field $label", 0, $custom_field_id);
|
logAction("Custom Field", "Create", "$session_name created custom field $label", 0, $custom_field_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Custom field <strong>$label</strong> created";
|
flash_alert("Custom field <strong>$label</strong> created");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($_POST['edit_custom_field'])){
|
if(isset($_POST['edit_custom_field'])){
|
||||||
|
|
||||||
require_once 'post/admin/admin_custom_field_model.php';
|
require_once 'custom_field_model.php';
|
||||||
|
|
||||||
$custom_field_id = intval($_POST['custom_field_id']);
|
$custom_field_id = intval($_POST['custom_field_id']);
|
||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE custom_fields SET custom_field_label = '$label', custom_field_type = '$type' WHERE custom_field_id = $custom_field_id");
|
mysqli_query($mysqli,"UPDATE custom_fields SET custom_field_label = '$label', custom_field_type = '$type' WHERE custom_field_id = $custom_field_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Custom Field", "Edit", "$session_name edited custom field $label", 0, $custom_field_id);
|
logAction("Custom Field", "Edit", "$session_name edited custom field $label", 0, $custom_field_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Custom field <strong>$label</strong> edited";
|
flash_alert("Custom field <strong>$label</strong> edited");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($_GET['delete_custom_field'])){
|
if(isset($_GET['delete_custom_field'])){
|
||||||
|
|
||||||
$custom_field_id = intval($_GET['delete_custom_field']);
|
$custom_field_id = intval($_GET['delete_custom_field']);
|
||||||
|
|
||||||
// Get Custom Field Label for logging
|
$label = sanitizeInput(getFieldById('custom_fields', $custom_field_id, 'custom_field_label'));
|
||||||
$sql = mysqli_query($mysqli,"SELECT custom_field_label FROM custom_fields WHERE custom_field_id = $custom_field_id");
|
|
||||||
$row = mysqli_fetch_array($sql);
|
|
||||||
$custom_field_label = sanitizeInput($row['custom_field_label']);
|
|
||||||
|
|
||||||
mysqli_query($mysqli,"DELETE FROM custom_fields WHERE custom_field_id = $custom_field_id");
|
mysqli_query($mysqli,"DELETE FROM custom_fields WHERE custom_field_id = $custom_field_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Custom Field", "Delete", "$session_name deleted custom field $label");
|
logAction("Custom Field", "Delete", "$session_name deleted custom field $label");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Custom field <strong>$label</strong> deleted", 'error');
|
||||||
$_SESSION['alert_message'] = "Custom field <strong>$label</strong> deleted";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,12 +19,11 @@ if (isset($_POST['add_custom_link'])) {
|
|||||||
|
|
||||||
$custom_link_id = mysqli_insert_id($mysqli);
|
$custom_link_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Custom Link", "Create", "$session_name created custom link $name -> $uri", 0, $custom_link_id);
|
logAction("Custom Link", "Create", "$session_name created custom link $name -> $uri", 0, $custom_link_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Custom link <strong>$name</strong> created";
|
flash_alert("Custom link <strong>$name</strong> created");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,16 +39,16 @@ if (isset($_POST['edit_custom_link'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE custom_links SET custom_link_name = '$name', custom_link_uri = '$uri', custom_link_new_tab = $new_tab, custom_link_icon = '$icon', custom_link_order = $order, custom_link_location = $location WHERE custom_link_id = $custom_link_id");
|
mysqli_query($mysqli,"UPDATE custom_links SET custom_link_name = '$name', custom_link_uri = '$uri', custom_link_new_tab = $new_tab, custom_link_icon = '$icon', custom_link_order = $order, custom_link_location = $location WHERE custom_link_id = $custom_link_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Custom Link", "Edit", "$session_name edited custom link $name -> $uri", 0, $custom_link_id);
|
logAction("Custom Link", "Edit", "$session_name edited custom link $name -> $uri", 0, $custom_link_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Custom Link <strong>$name</strong> edited";
|
flash_alert("Custom Link <strong>$name</strong> edited");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET['delete_custom_link'])) {
|
if (isset($_GET['delete_custom_link'])) {
|
||||||
|
|
||||||
$custom_link_id = intval($_GET['delete_custom_link']);
|
$custom_link_id = intval($_GET['delete_custom_link']);
|
||||||
|
|
||||||
// Get Custom Link name and uri for logging
|
// Get Custom Link name and uri for logging
|
||||||
@@ -60,12 +59,10 @@ if (isset($_GET['delete_custom_link'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"DELETE FROM custom_links WHERE custom_link_id = $custom_link_id");
|
mysqli_query($mysqli,"DELETE FROM custom_links WHERE custom_link_id = $custom_link_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Custom Link", "Delete", "$session_name deleted custom link $custom_link_name -> $custom_link_uri");
|
logAction("Custom Link", "Delete", "$session_name deleted custom link $custom_link_name -> $custom_link_uri");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Custom Link <strong>$name</strong> deleted", 'error');
|
||||||
$_SESSION['alert_message'] = "Custom Link <strong>$name</strong> deleted";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -10,17 +10,15 @@ if (isset($_POST['add_document_template'])) {
|
|||||||
$description = sanitizeInput($_POST['description']);
|
$description = sanitizeInput($_POST['description']);
|
||||||
$content = mysqli_real_escape_string($mysqli,$_POST['content']);
|
$content = mysqli_real_escape_string($mysqli,$_POST['content']);
|
||||||
|
|
||||||
// Document create query
|
|
||||||
mysqli_query($mysqli,"INSERT INTO document_templates SET document_template_name = '$name', document_template_description = '$description', document_template_content = '$content', document_template_created_by = $session_user_id");
|
mysqli_query($mysqli,"INSERT INTO document_templates SET document_template_name = '$name', document_template_description = '$description', document_template_content = '$content', document_template_created_by = $session_user_id");
|
||||||
|
|
||||||
$document_template_id = mysqli_insert_id($mysqli);
|
$document_template_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Document Template", "Create", "$session_name created document template $name", 0, $document_template_id);
|
logAction("Document Template", "Create", "$session_name created document template $name", 0, $document_template_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Document template <strong>$name</strong> created";
|
flash_alert("Document template <strong>$name</strong> created");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,12 +32,11 @@ if (isset($_POST['edit_document_template'])) {
|
|||||||
// Document edit query
|
// Document edit query
|
||||||
mysqli_query($mysqli,"UPDATE document_templates SET document_template_name = '$name', document_template_description = '$description', document_template_content = '$content', document_template_updated_by = $session_user_id WHERE document_template_id = $document_template_id");
|
mysqli_query($mysqli,"UPDATE document_templates SET document_template_name = '$name', document_template_description = '$description', document_template_content = '$content', document_template_updated_by = $session_user_id WHERE document_template_id = $document_template_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Document Template", "Edit", "$session_name edited document template $name", 0, $document_template_id);
|
logAction("Document Template", "Edit", "$session_name edited document template $name", 0, $document_template_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Document Template <strong>$name</strong> edited";
|
flash_alert("Document Template <strong>$name</strong> edited");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,19 +44,14 @@ if (isset($_GET['delete_document_template'])) {
|
|||||||
|
|
||||||
$document_template_id = intval($_GET['delete_document_template']);
|
$document_template_id = intval($_GET['delete_document_template']);
|
||||||
|
|
||||||
// Get Document Template Name for logging
|
$document_template_name = sanitizeInput(getFieldById('document_templates', $document_template_id, 'document_template_name'));
|
||||||
$sql = mysqli_query($mysqli,"SELECT document_template_name FROM document_templates WHERE document_template_id = $document_template_id");
|
|
||||||
$row = mysqli_fetch_array($sql);
|
|
||||||
$document_template_name = sanitizeInput($row['document_template_name']);
|
|
||||||
|
|
||||||
mysqli_query($mysqli,"DELETE FROM document_templates WHERE document_template_id = $document_template_id");
|
mysqli_query($mysqli,"DELETE FROM document_templates WHERE document_template_id = $document_template_id");
|
||||||
|
|
||||||
//Logging
|
|
||||||
logAction("Document Template", "Delete", "$session_name deleted document template $document_template_name");
|
logAction("Document Template", "Delete", "$session_name deleted document template $document_template_name");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Document Template <strong>$document_template_name</strong> deleted", 'error');
|
||||||
$_SESSION['alert_message'] = "Document Template <strong>$document_template_name</strong> deleted";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,10 @@ if (isset($_POST['edit_identity_provider'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_azure_client_id = '$azure_client_id', config_azure_client_secret = '$azure_client_secret' WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_azure_client_id = '$azure_client_id', config_azure_client_secret = '$azure_client_secret' WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited identity provider settings");
|
logAction("Settings", "Edit", "$session_name edited identity provider settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Identity Provider Settings updated";
|
flash_alert("Identity Provider Settings updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,12 +8,11 @@ if (isset($_GET['send_failed_mail'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE email_queue SET email_status = 0, email_attempts = 3 WHERE email_id = $email_id");
|
mysqli_query($mysqli,"UPDATE email_queue SET email_status = 0, email_attempts = 3 WHERE email_id = $email_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Email", "Send", "$session_name attempted to force send email id: $email_id in the mail queue", 0, $email_id);
|
logAction("Email", "Send", "$session_name attempted to force send email id: $email_id in the mail queue", 0, $email_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Email Force Sent, give it a minute to resend";
|
flash_alert("Email Force Sent, give it a minute to resend");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,13 +22,11 @@ if (isset($_GET['cancel_mail'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE email_queue SET email_status = 2, email_attempts = 99, email_failed_at = NOW() WHERE email_id = $email_id");
|
mysqli_query($mysqli,"UPDATE email_queue SET email_status = 2, email_attempts = 99, email_failed_at = NOW() WHERE email_id = $email_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Email", "Send", "$session_name canceled send email id: $email_id in the mail queue", 0, $email_id);
|
logAction("Email", "Send", "$session_name canceled send email id: $email_id in the mail queue", 0, $email_id);
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Email cancelled and marked as failed.", 'error');
|
||||||
$_SESSION['alert_message'] = "Email cancelled and marked as failed.";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,19 +44,18 @@ if (isset($_POST['bulk_cancel_emails'])) {
|
|||||||
$email_id = intval($email_id);
|
$email_id = intval($email_id);
|
||||||
mysqli_query($mysqli,"UPDATE email_queue SET email_status = 2, email_attempts = 99, email_failed_at = NOW() WHERE email_id = $email_id");
|
mysqli_query($mysqli,"UPDATE email_queue SET email_status = 2, email_attempts = 99, email_failed_at = NOW() WHERE email_id = $email_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Email", "Cancel", "$session_name cancelled email id: $email_id in the mail queue", 0, $email_id);
|
logAction("Email", "Cancel", "$session_name cancelled email id: $email_id in the mail queue", 0, $email_id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Email", "Bulk Cancel", "$session_name cancelled $count email(s) in the mail queue");
|
logAction("Email", "Bulk Cancel", "$session_name cancelled $count email(s) in the mail queue");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Cancelled <strong>$count</strong> email(s)";
|
flash_alert("Cancelled <strong>$count</strong> email(s)", 'error');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['bulk_delete_emails'])) {
|
if (isset($_POST['bulk_delete_emails'])) {
|
||||||
@@ -76,18 +72,16 @@ if (isset($_POST['bulk_delete_emails'])) {
|
|||||||
$email_id = intval($email_id);
|
$email_id = intval($email_id);
|
||||||
mysqli_query($mysqli,"DELETE FROM email_queue WHERE email_id = $email_id");
|
mysqli_query($mysqli,"DELETE FROM email_queue WHERE email_id = $email_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Email", "Delete", "$session_name deleted email id: $email_id from the mail queue");
|
logAction("Email", "Delete", "$session_name deleted email id: $email_id from the mail queue");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Email", "Bulk Delete", "$session_name deleted $count email(s) from the mail queue");
|
logAction("Email", "Bulk Delete", "$session_name deleted $count email(s) from the mail queue");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Deleted <strong>$count</strong> email(s)", 'error');
|
||||||
$_SESSION['alert_message'] = "Deleted <strong>$count</strong> email(s)";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
58
admin/post/payment_method.php
Normal file
58
admin/post/payment_method.php
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ITFlow - GET/POST request handler for AI Providers ('ai_providers')
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
|
if (isset($_POST['add_payment_method'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$name = sanitizeInput($_POST['name']);
|
||||||
|
$description = sanitizeInput($_POST['description']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"INSERT INTO payment_methods SET payment_method_name = '$name', payment_method_description = '$description'");
|
||||||
|
|
||||||
|
logAction("Payment Method", "Create", "$session_name created Payment Method $name");
|
||||||
|
|
||||||
|
flash_alert("Payment Method <strong>$name</strong> created");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['edit_payment_method'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$payment_method_id = intval($_POST['payment_method_id']);
|
||||||
|
$name = sanitizeInput($_POST['name']);
|
||||||
|
$description = sanitizeInput($_POST['description']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"UPDATE payment_methods SET payment_method_name = '$name', payment_method_description = '$description' WHERE payment_method_id = $payment_method_id");
|
||||||
|
|
||||||
|
logAction("Payment Method", "Edit", "$session_name edited Payment Method $name");
|
||||||
|
|
||||||
|
flash_alert("Payment Method <strong>$name</strong> edited");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_GET['delete_payment_method'])) {
|
||||||
|
|
||||||
|
$payment_method_id = intval($_GET['delete_payment_method']);
|
||||||
|
|
||||||
|
$payment_method_name = sanitizeInput(getFieldById('payment_methods', $payment_method_is, 'payment_method_name'));
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"DELETE FROM payment_methods WHERE payment_method_id = $payment_method_id");
|
||||||
|
|
||||||
|
logAction("Payment Method", "Delete", "$session_name deleted Payment Method $payment_method_name");
|
||||||
|
|
||||||
|
flash_alert("Payment Method <strong>$payment_method_name</strong> deleted", 'error');
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
115
admin/post/payment_provider.php
Normal file
115
admin/post/payment_provider.php
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ITFlow - GET/POST request handler for AI Providers ('ai_providers')
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
|
if (isset($_POST['add_payment_provider'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$provider = sanitizeInput($_POST['provider']);
|
||||||
|
$public_key = sanitizeInput($_POST['public_key']);
|
||||||
|
$private_key = sanitizeInput($_POST['private_key']);
|
||||||
|
$threshold = floatval($_POST['threshold']);
|
||||||
|
$enable_expense = intval($_POST['enable_expense'] ?? 0);
|
||||||
|
$percentage_fee = floatval($_POST['percentage_fee']) / 100 ?? 0;
|
||||||
|
$flat_fee = floatval($_POST['flat_fee']) ?? 0;
|
||||||
|
|
||||||
|
// Check to ensure provider isn't added twice
|
||||||
|
$sql = "SELECT 1 FROM payment_providers WHERE payment_provider_name = '$provider' LIMIT 1";
|
||||||
|
$result = mysqli_query($mysqli, $sql);
|
||||||
|
if (mysqli_num_rows($result) > 0) {
|
||||||
|
flash_alert("Payment Provider <strong>$provider</strong> already exists", 'error');
|
||||||
|
redirect();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for Stripe Account, if not create it
|
||||||
|
$sql_account = mysqli_query($mysqli,"SELECT account_id FROM accounts WHERE account_name = '$provider' AND account_archived_at IS NULL LIMIT 1");
|
||||||
|
if (mysqli_num_rows($sql_account) == 0) {
|
||||||
|
$account_id = mysqli_insert_id($mysqli);
|
||||||
|
} else {
|
||||||
|
$row = mysqli_fetch_array($sql_account);
|
||||||
|
$account_id = intval($row['account_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expense defaults
|
||||||
|
$category_id = 0;
|
||||||
|
$vendor_id = 0;
|
||||||
|
|
||||||
|
if ($enable_expense) {
|
||||||
|
// Category
|
||||||
|
$sql_category = mysqli_query($mysqli,"SELECT category_id FROM categories WHERE category_name = 'Payment Processing' AND category_type = 'Expense' AND category_archived_at IS NULL LIMIT 1");
|
||||||
|
if (mysqli_num_rows($sql_category) == 0) {
|
||||||
|
mysqli_query($mysqli,"INSERT INTO categories SET category_name = 'Processing Fee', category_type = 'Payment Processing', category_color = 'gray'");
|
||||||
|
$category_id = mysqli_insert_id($mysqli);
|
||||||
|
} else {
|
||||||
|
$row = mysqli_fetch_array($sql_category);
|
||||||
|
$category_id = intval($row['category_id']);
|
||||||
|
}
|
||||||
|
// Vendor
|
||||||
|
$sql_vendor = mysqli_query($mysqli,"SELECT vendor_id FROM vendors WHERE vendor_name = '$provider' AND vendor_client_id = 0 AND vendor_archived_at IS NULL LIMIT 1");
|
||||||
|
if (mysqli_num_rows($sql_vendor) == 0) {
|
||||||
|
mysqli_query($mysqli,"INSERT INTO vendors SET vendor_name = '$provider', vendor_description = 'Payment Processor Provider', vendor_client_id = 0");
|
||||||
|
$vendor_id = mysqli_insert_id($mysqli);
|
||||||
|
} else {
|
||||||
|
$row = mysqli_fetch_array($sql_vendor);
|
||||||
|
$vendor_id = intval($row['vendor_id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"INSERT INTO payment_providers SET payment_provider_name = '$provider', payment_provider_public_key = '$public_key', payment_provider_private_key = '$private_key', payment_provider_threshold = $threshold, payment_provider_account = $account_id, payment_provider_expense_vendor = $vendor_id, payment_provider_expense_category = $category_id, payment_provider_expense_percentage_fee = $percentage_fee, payment_provider_expense_flat_fee = $flat_fee");
|
||||||
|
|
||||||
|
$provider_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
|
logAction("Payment Provider", "Create", "$session_name created AI Provider $provider");
|
||||||
|
|
||||||
|
flash_alert("Payment provider <strong>$provider</strong> created");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['edit_payment_provider'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$provider_id = intval($_POST['provider_id']);
|
||||||
|
$description = sanitizeInput($_POST['description']);
|
||||||
|
$public_key = sanitizeInput($_POST['public_key']);
|
||||||
|
$private_key = sanitizeInput($_POST['private_key']);
|
||||||
|
$threshold = floatval($_POST['threshold']);
|
||||||
|
$enable_expense = intval($_POST['enable_expense'] ?? 0);
|
||||||
|
$percentage_fee = floatval($_POST['percentage_fee']) / 100;
|
||||||
|
$flat_fee = floatval($_POST['flat_fee']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"UPDATE payment_providers SET payment_provider_public_key = '$public_key', payment_provider_private_key = '$private_key', payment_provider_threshold = $threshold, payment_provider_expense_percentage_fee = $percentage_fee, payment_provider_expense_flat_fee = $flat_fee WHERE payment_provider_id = $provider_id");
|
||||||
|
|
||||||
|
logAction("Payment Provider", "Edit", "$session_name edited Payment Provider $provider");
|
||||||
|
|
||||||
|
flash_alert("Payment Provider <strong>$provider</strong> edited");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_GET['delete_payment_provider'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_GET['csrf_token']);
|
||||||
|
|
||||||
|
$provider_id = intval($_GET['delete_payment_provider']);
|
||||||
|
|
||||||
|
$provider_name = sanitizeInput(getFieldById('payment_providers', $provider_id, 'provider_name'));
|
||||||
|
|
||||||
|
// Delete provider
|
||||||
|
mysqli_query($mysqli,"DELETE FROM payment_providers WHERE payment_provider_id = $provider_id");
|
||||||
|
|
||||||
|
logAction("Payment Provider", "Delete", "$session_name deleted Payment Provider $provider_name");
|
||||||
|
|
||||||
|
flash_alert("Payment Provider <strong>$provider_name</strong> deleted", 'error');
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,12 +11,11 @@ if (isset($_POST['add_project_template'])) {
|
|||||||
|
|
||||||
$project_template_id = mysqli_insert_id($mysqli);
|
$project_template_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Project Template", "Create", "$session_name created project template $name", 0, $project_template_id);
|
logAction("Project Template", "Create", "$session_name created project template $name", 0, $project_template_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Project Template <strong>$name</strong> created";
|
flash_alert("Project Template <strong>$name</strong> created");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,12 +27,12 @@ if (isset($_POST['edit_project_template'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE project_templates SET project_template_name = '$name', project_template_description = '$description' WHERE project_template_id = $project_template_id");
|
mysqli_query($mysqli, "UPDATE project_templates SET project_template_name = '$name', project_template_description = '$description' WHERE project_template_id = $project_template_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Project Template", "Edit", "$session_name edited project template $name", 0, $project_template_id);
|
logAction("Project Template", "Edit", "$session_name edited project template $name", 0, $project_template_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Project Template <strong>$name</strong> edited";
|
flash_alert("Project Template <strong>$name</strong> edited");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['edit_ticket_template_order'])) {
|
if (isset($_POST['edit_ticket_template_order'])) {
|
||||||
@@ -44,7 +43,8 @@ if (isset($_POST['edit_ticket_template_order'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE project_template_ticket_templates SET ticket_template_order = $order WHERE ticket_template_id = $ticket_template_id AND project_template_id = $project_template_id");
|
mysqli_query($mysqli, "UPDATE project_template_ticket_templates SET ticket_template_order = $order WHERE ticket_template_id = $ticket_template_id AND project_template_id = $project_template_id");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['add_ticket_template_to_project_template'])) {
|
if (isset($_POST['add_ticket_template_to_project_template'])) {
|
||||||
@@ -55,12 +55,12 @@ if (isset($_POST['add_ticket_template_to_project_template'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli, "INSERT INTO project_template_ticket_templates SET project_template_id = $project_template_id, ticket_template_id = $ticket_template_id, ticket_template_order = $order");
|
mysqli_query($mysqli, "INSERT INTO project_template_ticket_templates SET project_template_id = $project_template_id, ticket_template_id = $ticket_template_id, ticket_template_order = $order");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Project Template", "Edit", "$session_name added ticket template to project_template", 0, $project_template_id);
|
logAction("Project Template", "Edit", "$session_name added ticket template to project_template", 0, $project_template_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Ticket template added";
|
flash_alert("Ticket template added");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['remove_ticket_template_from_project_template'])) {
|
if (isset($_POST['remove_ticket_template_from_project_template'])) {
|
||||||
@@ -71,34 +71,29 @@ if (isset($_POST['remove_ticket_template_from_project_template'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli, "DELETE FROM project_template_ticket_templates WHERE project_template_id = $project_template_id AND ticket_template_id = $ticket_template_id");
|
mysqli_query($mysqli, "DELETE FROM project_template_ticket_templates WHERE project_template_id = $project_template_id AND ticket_template_id = $ticket_template_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Project Template", "Edit", "$session_name removed ticket template from project template", 0, $project_template_id);
|
logAction("Project Template", "Edit", "$session_name removed ticket template from project template", 0, $project_template_id);
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Ticket template removed", 'error');
|
||||||
$_SESSION['alert_message'] = "Ticket template removed";
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET['delete_project_template'])) {
|
if (isset($_GET['delete_project_template'])) {
|
||||||
|
|
||||||
$project_template_id = intval($_GET['delete_project_template']);
|
$project_template_id = intval($_GET['delete_project_template']);
|
||||||
|
|
||||||
// Get project template name
|
$project_template_name = sanitizeInput(getFieldById('project_templates', $project_template_id, 'project_template_name'));
|
||||||
$sql = mysqli_query($mysqli, "SELECT * FROM project_templates WHERE project_template_id = $project_template_id");
|
|
||||||
$row = mysqli_fetch_array($sql);
|
|
||||||
$project_template_name = sanitizeInput($row['project_template_name']);
|
|
||||||
|
|
||||||
mysqli_query($mysqli, "DELETE FROM project_templates WHERE project_template_id = $project_template_id");
|
mysqli_query($mysqli, "DELETE FROM project_templates WHERE project_template_id = $project_template_id");
|
||||||
|
|
||||||
// Remove Associated Ticket Templates
|
// Remove Associated Ticket Templates
|
||||||
mysqli_query($mysqli, "DELETE FROM project_template_ticket_templates WHERE project_template_id = $project_template_id");
|
mysqli_query($mysqli, "DELETE FROM project_template_ticket_templates WHERE project_template_id = $project_template_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Project Template", "Delete", "$session_name deleted project template $project_template_name and its associated ticket templates and tasks");
|
logAction("Project Template", "Delete", "$session_name deleted project template $project_template_name and its associated ticket templates and tasks");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Project Template <strong>$project_template_name</strong> and its associated ticket templates and tasks deleted", 'error');
|
||||||
$_SESSION['alert_message'] = "Project Template <strong>$project_template_name</strong> and its associated ticket templates and tasks deleted";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -18,12 +18,11 @@ if (isset($_POST['add_role'])) {
|
|||||||
|
|
||||||
$role_id = mysqli_insert_id($mysqli);
|
$role_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("User Role", "Create", "$session_name created user role $name", 0, $role_id);
|
logAction("User Role", "Create", "$session_name created user role $name", 0, $role_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "User Role <strong$name</strong> created";
|
flash_alert("User Role <strong$name</strong> created");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,8 +30,7 @@ if (isset($_POST['edit_role'])) {
|
|||||||
|
|
||||||
validateCSRFToken($_POST['csrf_token']);
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
// Update role metadata
|
$role_id = intval($_POST['role_id']);
|
||||||
$role_id = sanitizeInput($_POST['role_id']);
|
|
||||||
$name = sanitizeInput($_POST['role_name']);
|
$name = sanitizeInput($_POST['role_name']);
|
||||||
$description = sanitizeInput($_POST['role_description']);
|
$description = sanitizeInput($_POST['role_description']);
|
||||||
$admin = intval($_POST['role_is_admin']);
|
$admin = intval($_POST['role_is_admin']);
|
||||||
@@ -53,12 +51,12 @@ if (isset($_POST['edit_role'])) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("User Role", "Edit", "$session_name edited user role $name", 0, $role_id);
|
logAction("User Role", "Edit", "$session_name edited user role $name", 0, $role_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "User Role <strong>$name</strong> edited";
|
flash_alert("User Role <strong>$name</strong> edited");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET['archive_role'])) {
|
if (isset($_GET['archive_role'])) {
|
||||||
@@ -71,19 +69,19 @@ if (isset($_GET['archive_role'])) {
|
|||||||
$sql_role_user_count = mysqli_query($mysqli, "SELECT COUNT(user_id) FROM users WHERE user_role_id = $role_id AND user_archived_at IS NULL");
|
$sql_role_user_count = mysqli_query($mysqli, "SELECT COUNT(user_id) FROM users WHERE user_role_id = $role_id AND user_archived_at IS NULL");
|
||||||
$role_user_count = mysqli_fetch_row($sql_role_user_count)[0];
|
$role_user_count = mysqli_fetch_row($sql_role_user_count)[0];
|
||||||
if ($role_user_count != 0) {
|
if ($role_user_count != 0) {
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Role must not in use to archive it", 'error');
|
||||||
$_SESSION['alert_message'] = "Role must not in use to archive it";
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE user_roles SET role_archived_at = NOW() WHERE role_id = $role_id");
|
mysqli_query($mysqli, "UPDATE user_roles SET role_archived_at = NOW() WHERE role_id = $role_id");
|
||||||
|
|
||||||
// Logging
|
$role_name = sanitizeInput(getFieldById('roles', $role_id, 'role_name'));
|
||||||
$role_details = mysqli_fetch_array(mysqli_query($mysqli, "SELECT role_name FROM user_roles WHERE role_id = $role_id LIMIT 1"));
|
|
||||||
$role_name = sanitizeInput($role_details['role_name']);
|
|
||||||
logAction("User Role", "Archive", "$session_name archived user role $role_name", 0, $role_id);
|
logAction("User Role", "Archive", "$session_name archived user role $role_name", 0, $role_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "User Role archived";
|
flash_alert("User Role <strong>$role_name</strong> archived", 'error');
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
70
admin/post/saved_payment_method.php
Normal file
70
admin/post/saved_payment_method.php
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
|
if (isset($_GET['delete_saved_payment'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_GET['csrf_token']);
|
||||||
|
|
||||||
|
$saved_payment_id = intval($_GET['delete_saved_payment']);
|
||||||
|
|
||||||
|
$sql = mysqli_query($mysqli, "
|
||||||
|
SELECT
|
||||||
|
client_saved_payment_methods.saved_payment_id,
|
||||||
|
client_saved_payment_methods.saved_payment_client_id,
|
||||||
|
client_saved_payment_methods.saved_payment_provider_id,
|
||||||
|
client_saved_payment_methods.saved_payment_provider_method,
|
||||||
|
client_saved_payment_methods.saved_payment_description,
|
||||||
|
client_payment_provider.payment_provider_client,
|
||||||
|
payment_providers.payment_provider_name,
|
||||||
|
payment_providers.payment_provider_private_key
|
||||||
|
FROM client_saved_payment_methods
|
||||||
|
LEFT JOIN client_payment_provider
|
||||||
|
ON client_payment_provider.client_id = client_saved_payment_methods.saved_payment_client_id
|
||||||
|
AND client_payment_provider.payment_provider_id = client_saved_payment_methods.saved_payment_provider_id
|
||||||
|
LEFT JOIN payment_providers
|
||||||
|
ON payment_providers.payment_provider_id = client_saved_payment_methods.saved_payment_provider_id
|
||||||
|
WHERE client_saved_payment_methods.saved_payment_id = $saved_payment_id"
|
||||||
|
);
|
||||||
|
|
||||||
|
$row = mysqli_fetch_array($sql);
|
||||||
|
$client_id = intval($row['saved_payment_client_id']);
|
||||||
|
$provider_id = intval($row['saved_payment_provider_id']);
|
||||||
|
$payment_provider_name = nullable_htmlentities($row['payment_provider_name']);
|
||||||
|
$saved_payment_description = nullable_htmlentities($row['saved_payment_description']);
|
||||||
|
$provider_client = nullable_htmlentities($row['payment_provider_client']);
|
||||||
|
$payment_method = $row['saved_payment_provider_method'];
|
||||||
|
|
||||||
|
$private_key = $row['payment_provider_private_key'];
|
||||||
|
|
||||||
|
// Separate logic for each Payment Provider
|
||||||
|
if ($payment_provider_name == 'Stripe') {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Initialize stripe
|
||||||
|
require_once 'plugins/stripe-php/init.php';
|
||||||
|
$stripe = new \Stripe\StripeClient($private_key);
|
||||||
|
|
||||||
|
// Detach PM
|
||||||
|
$stripe->paymentMethods->detach($payment_method, []);
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$error = $e->getMessage();
|
||||||
|
error_log("Stripe payment error - encountered exception when removing payment method info for $payment_method: $error");
|
||||||
|
logApp("Stripe", "error", "Exception removing payment method for $payment_method: $error");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove payment method from ITFlow
|
||||||
|
mysqli_query($mysqli, "DELETE FROM client_saved_payment_methods WHERE saved_payment_id = $saved_payment_id");
|
||||||
|
|
||||||
|
// SQL Cascade delete will Remove All Associated Auto Payment Methods on recurring invoices in the recurring payments table.
|
||||||
|
|
||||||
|
logAction("Payment Provider", "Update", "$session_name deleted saved payment method $saved_payment_description (PM: $payment_method)", $client_id);
|
||||||
|
|
||||||
|
flash_alert("Payment method <strong>$saved_payment_description</strong> removed", 'error');
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -18,11 +18,10 @@ if (isset($_POST['edit_ai_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_ai_enable = $ai_enable, config_ai_provider = '$provider', config_ai_model = '$model', config_ai_url = '$url', config_ai_api_key = '$api_key' WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_ai_enable = $ai_enable, config_ai_provider = '$provider', config_ai_model = '$model', config_ai_url = '$url', config_ai_api_key = '$api_key' WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited AI settings");
|
logAction("Settings", "Edit", "$session_name edited AI settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "AI Settings updated";
|
flash_alert("AI Settings updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -28,13 +28,13 @@ if (isset($_POST['edit_company'])) {
|
|||||||
$file_tmp_path = $_FILES['file']['tmp_name'];
|
$file_tmp_path = $_FILES['file']['tmp_name'];
|
||||||
|
|
||||||
// directory in which the uploaded file will be moved
|
// directory in which the uploaded file will be moved
|
||||||
$upload_file_dir = "uploads/settings/";
|
$upload_file_dir = "../uploads/settings/";
|
||||||
$dest_path = $upload_file_dir . $new_file_name;
|
$dest_path = $upload_file_dir . $new_file_name;
|
||||||
|
|
||||||
move_uploaded_file($file_tmp_path, $dest_path);
|
move_uploaded_file($file_tmp_path, $dest_path);
|
||||||
|
|
||||||
// Delete old file
|
// Delete old file
|
||||||
unlink("uploads/settings/$existing_file_name");
|
unlink("../uploads/settings/$existing_file_name");
|
||||||
|
|
||||||
// Set Logo
|
// Set Logo
|
||||||
mysqli_query($mysqli,"UPDATE companies SET company_logo = '$new_file_name' WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE companies SET company_logo = '$new_file_name' WHERE company_id = 1");
|
||||||
@@ -44,12 +44,11 @@ if (isset($_POST['edit_company'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE companies SET company_name = '$name', company_address = '$address', company_city = '$city', company_state = '$state', company_zip = '$zip', company_country = '$country', company_phone_country_code = '$phone_country_code', company_phone = '$phone', company_email = '$email', company_website = '$website', company_tax_id = '$tax_id' WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE companies SET company_name = '$name', company_address = '$address', company_city = '$city', company_state = '$state', company_zip = '$zip', company_country = '$country', company_phone_country_code = '$phone_country_code', company_phone = '$phone', company_email = '$email', company_website = '$website', company_tax_id = '$tax_id' WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited company details");
|
logAction("Settings", "Edit", "$session_name edited company details");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Company <strong>$name</strong> edited";
|
flash_alert("Company <strong>$name</strong> edited");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,14 +58,14 @@ if (isset($_GET['remove_company_logo'])) {
|
|||||||
$row = mysqli_fetch_array($sql);
|
$row = mysqli_fetch_array($sql);
|
||||||
$company_logo = $row['company_logo']; // FileSystem Operation Logo is already sanitized
|
$company_logo = $row['company_logo']; // FileSystem Operation Logo is already sanitized
|
||||||
|
|
||||||
unlink("uploads/settings/$company_logo");
|
unlink("../uploads/settings/$company_logo");
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"UPDATE companies SET company_logo = NULL WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name deleted company logo");
|
logAction("Settings", "Edit", "$session_name deleted company logo");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Removed company logo", 'error');
|
||||||
$_SESSION['alert_message'] = "Removed company logo";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,10 +19,10 @@ if (isset($_POST['edit_default_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_start_page = '$start_page', config_default_expense_account = $expense_account, config_default_payment_account = $payment_account, config_default_payment_method = '$payment_method', config_default_expense_payment_method = '$expense_payment_method', config_default_transfer_from_account = $transfer_from_account, config_default_transfer_to_account = $transfer_to_account, config_default_calendar = $calendar, config_default_net_terms = $net_terms, config_default_hourly_rate = $hourly_rate WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_start_page = '$start_page', config_default_expense_account = $expense_account, config_default_payment_account = $payment_account, config_default_payment_method = '$payment_method', config_default_expense_payment_method = '$expense_payment_method', config_default_transfer_from_account = $transfer_from_account, config_default_transfer_to_account = $transfer_to_account, config_default_calendar = $calendar, config_default_net_terms = $net_terms, config_default_hourly_rate = $hourly_rate WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited default settings");
|
logAction("Settings", "Edit", "$session_name edited default settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Default settings edited";
|
flash_alert("Default settings edited");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
}
|
}
|
||||||
@@ -21,11 +21,10 @@ if (isset($_POST['edit_invoice_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_invoice_prefix = '$config_invoice_prefix', config_invoice_next_number = $config_invoice_next_number, config_invoice_footer = '$config_invoice_footer', config_invoice_show_tax_id = $config_invoice_show_tax_id, config_invoice_late_fee_enable = $config_invoice_late_fee_enable, config_invoice_late_fee_percent = $config_invoice_late_fee_percent, config_invoice_paid_notification_email = '$config_invoice_paid_notification_email', config_recurring_invoice_prefix = '$config_recurring_invoice_prefix', config_recurring_invoice_next_number = $config_recurring_invoice_next_number WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_invoice_prefix = '$config_invoice_prefix', config_invoice_next_number = $config_invoice_next_number, config_invoice_footer = '$config_invoice_footer', config_invoice_show_tax_id = $config_invoice_show_tax_id, config_invoice_late_fee_enable = $config_invoice_late_fee_enable, config_invoice_late_fee_percent = $config_invoice_late_fee_percent, config_invoice_paid_notification_email = '$config_invoice_paid_notification_email', config_recurring_invoice_prefix = '$config_recurring_invoice_prefix', config_recurring_invoice_next_number = $config_recurring_invoice_next_number WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited invoice settings");
|
logAction("Settings", "Edit", "$session_name edited invoice settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Invoice Settings edited";
|
flash_alert("Invoice Settings edited");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -14,11 +14,10 @@ if (isset($_POST['edit_localization'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_timezone = '$timezone' WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_timezone = '$timezone' WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited localization settings");
|
logAction("Settings", "Edit", "$session_name edited localization settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Company localization updated";
|
flash_alert("Company localization updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
186
admin/post/settings_mail.php
Normal file
186
admin/post/settings_mail.php
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
|
if (isset($_POST['edit_mail_smtp_settings'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$config_smtp_provider = sanitizeInput($_POST['config_smtp_provider']);
|
||||||
|
$config_smtp_host = sanitizeInput($_POST['config_smtp_host']);
|
||||||
|
$config_smtp_port = intval($_POST['config_smtp_port'] ?? 0);
|
||||||
|
$config_smtp_encryption = sanitizeInput($_POST['config_smtp_encryption']);
|
||||||
|
$config_smtp_username = sanitizeInput($_POST['config_smtp_username']);
|
||||||
|
$config_smtp_password = sanitizeInput($_POST['config_smtp_password']);
|
||||||
|
|
||||||
|
// Shared OAuth fields
|
||||||
|
$config_mail_oauth_client_id = sanitizeInput($_POST['config_mail_oauth_client_id']);
|
||||||
|
$config_mail_oauth_client_secret = sanitizeInput($_POST['config_mail_oauth_client_secret']);
|
||||||
|
$config_mail_oauth_tenant_id = sanitizeInput($_POST['config_mail_oauth_tenant_id']);
|
||||||
|
$config_mail_oauth_refresh_token = sanitizeInput($_POST['config_mail_oauth_refresh_token']);
|
||||||
|
$config_mail_oauth_access_token = sanitizeInput($_POST['config_mail_oauth_access_token']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "
|
||||||
|
UPDATE settings SET
|
||||||
|
config_smtp_provider = '$config_smtp_provider',
|
||||||
|
config_smtp_host = '$config_smtp_host',
|
||||||
|
config_smtp_port = $config_smtp_port,
|
||||||
|
config_smtp_encryption = '$config_smtp_encryption',
|
||||||
|
config_smtp_username = '$config_smtp_username',
|
||||||
|
config_smtp_password = '$config_smtp_password',
|
||||||
|
config_mail_oauth_client_id = '$config_mail_oauth_client_id',
|
||||||
|
config_mail_oauth_client_secret = '$config_mail_oauth_client_secret',
|
||||||
|
config_mail_oauth_tenant_id = '$config_mail_oauth_tenant_id',
|
||||||
|
config_mail_oauth_refresh_token = '$config_mail_oauth_refresh_token',
|
||||||
|
config_mail_oauth_access_token = '$config_mail_oauth_access_token'
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
logAction("Settings", "Edit", "$session_name edited SMTP settings");
|
||||||
|
|
||||||
|
flash_alert("SMTP Mail Settings updated");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['edit_mail_imap_settings'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$config_imap_provider = sanitizeInput($_POST['config_imap_provider']);
|
||||||
|
$config_imap_host = sanitizeInput($_POST['config_imap_host']);
|
||||||
|
$config_imap_port = intval($_POST['config_imap_port'] ?? 0);
|
||||||
|
$config_imap_encryption = sanitizeInput($_POST['config_imap_encryption']);
|
||||||
|
$config_imap_username = sanitizeInput($_POST['config_imap_username']);
|
||||||
|
$config_imap_password = sanitizeInput($_POST['config_imap_password']);
|
||||||
|
|
||||||
|
// Shared OAuth fields
|
||||||
|
$config_mail_oauth_client_id = sanitizeInput($_POST['config_mail_oauth_client_id']);
|
||||||
|
$config_mail_oauth_client_secret = sanitizeInput($_POST['config_mail_oauth_client_secret']);
|
||||||
|
$config_mail_oauth_tenant_id = sanitizeInput($_POST['config_mail_oauth_tenant_id']);
|
||||||
|
$config_mail_oauth_refresh_token = sanitizeInput($_POST['config_mail_oauth_refresh_token']);
|
||||||
|
$config_mail_oauth_access_token = sanitizeInput($_POST['config_mail_oauth_access_token']);
|
||||||
|
|
||||||
|
mysqli_query($mysqli, "
|
||||||
|
UPDATE settings SET
|
||||||
|
config_imap_provider = '$config_imap_provider',
|
||||||
|
config_imap_host = '$config_imap_host',
|
||||||
|
config_imap_port = $config_imap_port,
|
||||||
|
config_imap_encryption = '$config_imap_encryption',
|
||||||
|
config_imap_username = '$config_imap_username',
|
||||||
|
config_imap_password = '$config_imap_password',
|
||||||
|
config_mail_oauth_client_id = '$config_mail_oauth_client_id',
|
||||||
|
config_mail_oauth_client_secret = '$config_mail_oauth_client_secret',
|
||||||
|
config_mail_oauth_tenant_id = '$config_mail_oauth_tenant_id',
|
||||||
|
config_mail_oauth_refresh_token = '$config_mail_oauth_refresh_token',
|
||||||
|
config_mail_oauth_access_token = '$config_mail_oauth_access_token'
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
logAction("Settings", "Edit", "$session_name edited IMAP settings");
|
||||||
|
|
||||||
|
flash_alert("IMAP Mail Settings updated");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['edit_mail_from_settings'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$config_mail_from_email = sanitizeInput(filter_var($_POST['config_mail_from_email'], FILTER_VALIDATE_EMAIL));
|
||||||
|
$config_mail_from_name = sanitizeInput(preg_replace('/[^a-zA-Z0-9\s]/', '', $_POST['config_mail_from_name']));
|
||||||
|
|
||||||
|
$config_invoice_from_email = sanitizeInput(filter_var($_POST['config_invoice_from_email'], FILTER_VALIDATE_EMAIL));
|
||||||
|
$config_invoice_from_name = sanitizeInput(preg_replace('/[^a-zA-Z0-9\s]/', '', $_POST['config_invoice_from_name']));
|
||||||
|
|
||||||
|
$config_quote_from_email = sanitizeInput(filter_var($_POST['config_quote_from_email'], FILTER_VALIDATE_EMAIL));
|
||||||
|
$config_quote_from_name = sanitizeInput(preg_replace('/[^a-zA-Z0-9\s]/', '', $_POST['config_quote_from_name']));
|
||||||
|
|
||||||
|
$config_ticket_from_email = sanitizeInput(filter_var($_POST['config_ticket_from_email'], FILTER_VALIDATE_EMAIL));
|
||||||
|
$config_ticket_from_name = sanitizeInput(preg_replace('/[^a-zA-Z0-9\s]/', '', $_POST['config_ticket_from_name']));
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"UPDATE settings SET config_mail_from_email = '$config_mail_from_email', config_mail_from_name = '$config_mail_from_name', config_invoice_from_email = '$config_invoice_from_email', config_invoice_from_name = '$config_invoice_from_name', config_quote_from_email = '$config_quote_from_email', config_quote_from_name = '$config_quote_from_name', config_ticket_from_email = '$config_ticket_from_email', config_ticket_from_name = '$config_ticket_from_name' WHERE company_id = 1");
|
||||||
|
|
||||||
|
logAction("Settings", "Edit", "$session_name edited mail from settings");
|
||||||
|
|
||||||
|
flash_alert("Mail From Settings updated");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['test_email_smtp'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
$test_email = intval($_POST['test_email']);
|
||||||
|
|
||||||
|
if($test_email == 1) {
|
||||||
|
$email_from = sanitizeInput($config_mail_from_email);
|
||||||
|
$email_from_name = sanitizeInput($config_mail_from_name);
|
||||||
|
} elseif ($test_email == 2) {
|
||||||
|
$email_from = sanitizeInput($config_invoice_from_email);
|
||||||
|
$email_from_name = sanitizeInput($config_invoice_from_name);
|
||||||
|
} elseif ($test_email == 3) {
|
||||||
|
$email_from = sanitizeInput($config_quote_from_email);
|
||||||
|
$email_from_name = sanitizeInput($config_quote_from_name);
|
||||||
|
} else {
|
||||||
|
$email_from = sanitizeInput($config_ticket_from_email);
|
||||||
|
$email_from_name = sanitizeInput($config_ticket_from_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
$email_to = sanitizeInput($_POST['email_to']);
|
||||||
|
$subject = "Test email from ITFlow";
|
||||||
|
$body = "This is a test email from ITFlow. If you are reading this, it worked!";
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
[
|
||||||
|
'from' => $email_from,
|
||||||
|
'from_name' => $email_from_name,
|
||||||
|
'recipient' => $email_to,
|
||||||
|
'recipient_name' => 'Chap',
|
||||||
|
'subject' => $subject,
|
||||||
|
'body' => $body
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
$mail = addToMailQueue($data);
|
||||||
|
|
||||||
|
if ($mail === true) {
|
||||||
|
flash_alert("Test email queued! <a class='text-bold text-light' href='admin_mail_queue.php'>Check Admin > Mail queue</a>");
|
||||||
|
} else {
|
||||||
|
flash_alert("Failed to add test mail to queue", 'error');
|
||||||
|
}
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['test_email_imap'])) {
|
||||||
|
|
||||||
|
validateCSRFToken($_POST['csrf_token']);
|
||||||
|
|
||||||
|
// Setup your IMAP connection parameters
|
||||||
|
$hostname = "{" . $config_imap_host . ":" . $config_imap_port . "/" . $config_imap_encryption . "/novalidate-cert}INBOX";
|
||||||
|
$username = $config_imap_username;
|
||||||
|
$password = $config_imap_password;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$inbox = @imap_open($hostname, $username, $password);
|
||||||
|
|
||||||
|
if ($inbox) {
|
||||||
|
imap_close($inbox);
|
||||||
|
flash_alert("Connected successfully");
|
||||||
|
} else {
|
||||||
|
throw new Exception(imap_last_error());
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
flash_alert("<strong>IMAP connection failed:</strong> " . $e->getMessage(), 'error');
|
||||||
|
}
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -19,11 +19,10 @@ if (isset($_POST['edit_module_settings'])) {
|
|||||||
mysqli_query($mysqli, "UPDATE settings SET config_whitelabel_enabled = 0, config_whitelabel_key = '' WHERE company_id = 1");
|
mysqli_query($mysqli, "UPDATE settings SET config_whitelabel_enabled = 0, config_whitelabel_key = '' WHERE company_id = 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited module settings");
|
logAction("Settings", "Edit", "$session_name edited module settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Module Settings updated";
|
flash_alert("Module Settings updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -14,11 +14,10 @@ if (isset($_POST['edit_notification_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_send_invoice_reminders = $config_send_invoice_reminders, config_recurring_auto_send_invoice = $config_recurring_auto_send_invoice, config_enable_cron = $config_enable_cron, config_enable_alert_domain_expire = $config_enable_alert_domain_expire, config_ticket_client_general_notifications = $config_ticket_client_general_notifications WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_send_invoice_reminders = $config_send_invoice_reminders, config_recurring_auto_send_invoice = $config_recurring_auto_send_invoice, config_enable_cron = $config_enable_cron, config_enable_alert_domain_expire = $config_enable_alert_domain_expire, config_ticket_client_general_notifications = $config_ticket_client_general_notifications WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited notification settings");
|
logAction("Settings", "Edit", "$session_name edited notification settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Notification Settings updated";
|
flash_alert("Notification Settings updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -17,15 +17,14 @@ if (isset($_POST['edit_online_payment_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_stripe_enable = $config_stripe_enable, config_stripe_publishable = '$config_stripe_publishable', config_stripe_secret = '$config_stripe_secret', config_stripe_account = $config_stripe_account, config_stripe_expense_vendor = $config_stripe_expense_vendor, config_stripe_expense_category = $config_stripe_expense_category, config_stripe_percentage_fee = $config_stripe_percentage_fee, config_stripe_flat_fee = $config_stripe_flat_fee WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_stripe_enable = $config_stripe_enable, config_stripe_publishable = '$config_stripe_publishable', config_stripe_secret = '$config_stripe_secret', config_stripe_account = $config_stripe_account, config_stripe_expense_vendor = $config_stripe_expense_vendor, config_stripe_expense_category = $config_stripe_expense_category, config_stripe_percentage_fee = $config_stripe_percentage_fee, config_stripe_flat_fee = $config_stripe_flat_fee WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited online payment settings");
|
logAction("Settings", "Edit", "$session_name edited online payment settings");
|
||||||
|
|
||||||
if ($config_stripe_enable && $config_stripe_account == 0) {
|
if ($config_stripe_enable && $config_stripe_account == 0) {
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Stripe payment account must be specified!", 'error');
|
||||||
$_SESSION['alert_message'] = "Stripe payment account must be specified!";
|
|
||||||
} else {
|
} else {
|
||||||
$_SESSION['alert_message'] = "Online Payment Settings updated";
|
flash_alert("Online Payment Settings updated");
|
||||||
}
|
}
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,12 +3,12 @@
|
|||||||
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
if (isset($_GET['stripe_remove_pm'])) {
|
if (isset($_GET['stripe_remove_pm'])) {
|
||||||
|
|
||||||
validateCSRFToken($_GET['csrf_token']);
|
validateCSRFToken($_GET['csrf_token']);
|
||||||
|
|
||||||
if (!$config_stripe_enable) {
|
if (!$config_stripe_enable) {
|
||||||
$_SESSION['alert_message'] = "Stripe not enabled";
|
flash_alert("Stripe not enabled", 'error');
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$client_id = intval($_GET['client_id']);
|
$client_id = intval($_GET['client_id']);
|
||||||
@@ -16,7 +16,7 @@ if (isset($_GET['stripe_remove_pm'])) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Initialize stripe
|
// Initialize stripe
|
||||||
require_once 'plugins/stripe-php/init.php';
|
require_once '../plugins/stripe-php/init.php';
|
||||||
$stripe = new \Stripe\StripeClient($config_stripe_secret);
|
$stripe = new \Stripe\StripeClient($config_stripe_secret);
|
||||||
|
|
||||||
// Detach PM
|
// Detach PM
|
||||||
@@ -39,14 +39,16 @@ if (isset($_GET['stripe_remove_pm'])) {
|
|||||||
mysqli_query($mysqli, "DELETE FROM recurring_payments WHERE recurring_payment_method = 'Stripe' AND recurring_payment_recurring_invoice_id = $recurring_invoice_id");
|
mysqli_query($mysqli, "DELETE FROM recurring_payments WHERE recurring_payment_method = 'Stripe' AND recurring_payment_recurring_invoice_id = $recurring_invoice_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging & Redirect
|
|
||||||
logAction("Stripe", "Update", "$session_name deleted saved Stripe payment method (PM: $payment_method)", $client_id);
|
logAction("Stripe", "Update", "$session_name deleted saved Stripe payment method (PM: $payment_method)", $client_id);
|
||||||
$_SESSION['alert_message'] = "Payment method removed";
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
flash_alert("Payment method removed", 'error');
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET['stripe_reset_customer'])) {
|
if (isset($_GET['stripe_reset_customer'])) {
|
||||||
|
|
||||||
validateCSRFToken($_GET['csrf_token']);
|
validateCSRFToken($_GET['csrf_token']);
|
||||||
|
|
||||||
$client_id = intval($_GET['client_id']);
|
$client_id = intval($_GET['client_id']);
|
||||||
@@ -62,9 +64,10 @@ if (isset($_GET['stripe_reset_customer'])) {
|
|||||||
mysqli_query($mysqli, "DELETE FROM recurring_payments WHERE recurring_payment_method = 'Stripe' AND recurring_payment_recurring_invoice_id = $recurring_invoice_id");
|
mysqli_query($mysqli, "DELETE FROM recurring_payments WHERE recurring_payment_method = 'Stripe' AND recurring_payment_recurring_invoice_id = $recurring_invoice_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Stripe", "Delete", "$session_name reset Stripe settings for client", $client_id);
|
logAction("Stripe", "Delete", "$session_name reset Stripe settings for client", $client_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Reset client Stripe settings";
|
flash_alert("Reset client Stripe settings", 'error');
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
}
|
redirect();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,11 +11,10 @@ if (isset($_POST['edit_project_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_project_prefix = '$config_project_prefix', config_project_next_number = $config_project_next_number WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_project_prefix = '$config_project_prefix', config_project_next_number = $config_project_next_number WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited project settings");
|
logAction("Settings", "Edit", "$session_name edited project settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Project Settings updated";
|
flash_alert("Project Settings updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -16,11 +16,10 @@ if (isset($_POST['edit_quote_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_quote_prefix = '$config_quote_prefix', config_quote_next_number = $config_quote_next_number, config_quote_footer = '$config_quote_footer', config_quote_notification_email = '$config_quote_notification_email' WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_quote_prefix = '$config_quote_prefix', config_quote_next_number = $config_quote_next_number, config_quote_footer = '$config_quote_footer', config_quote_notification_email = '$config_quote_notification_email' WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited Quote settings");
|
logAction("Settings", "Edit", "$session_name edited Quote settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Quote Settings updated";
|
flash_alert("Quote Settings updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,10 +19,10 @@ if (isset($_POST['edit_security_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_login_message = '$config_login_message', config_login_key_required = '$config_login_key_required', config_login_key_secret = '$config_login_key_secret', config_login_remember_me_expire = $config_login_remember_me_expire, config_log_retention = $config_log_retention WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_login_message = '$config_login_message', config_login_key_required = '$config_login_key_required', config_login_key_secret = '$config_login_key_secret', config_login_remember_me_expire = $config_login_remember_me_expire, config_log_retention = $config_log_retention WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited security settings");
|
logAction("Settings", "Edit", "$session_name edited security settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Security settings updated";
|
flash_alert("Security settings updated");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
}
|
}
|
||||||
@@ -10,11 +10,10 @@ if (isset($_POST['edit_telemetry_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_telemetry = $config_telemetry WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_telemetry = $config_telemetry WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited telemetry settings");
|
logAction("Settings", "Edit", "$session_name edited telemetry settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Telemetry Settings updated";
|
flash_alert("Telemetry Settings updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -10,12 +10,12 @@ if (isset($_POST['edit_theme_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_theme = '$theme' WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_theme = '$theme' WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
logAction("Settings", "Edit", "$session_name edited theme settings $dark_mode");
|
||||||
logAction("Settings", "Edit", "$session_name edited theme settings");
|
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Changed theme to <strong>$theme</strong>";
|
flash_alert("Changed theme to <strong>$theme</strong>");
|
||||||
|
|
||||||
|
redirect();
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['edit_favicon_settings'])) {
|
if (isset($_POST['edit_favicon_settings'])) {
|
||||||
@@ -28,12 +28,12 @@ if (isset($_POST['edit_favicon_settings'])) {
|
|||||||
$file_tmp_path = $_FILES['file']['tmp_name'];
|
$file_tmp_path = $_FILES['file']['tmp_name'];
|
||||||
|
|
||||||
// Delete old file
|
// Delete old file
|
||||||
if(file_exists("uploads/favicon.ico")) {
|
if(file_exists("../uploads/favicon.ico")) {
|
||||||
unlink("uploads/favicon.ico");
|
unlink("../uploads/favicon.ico");
|
||||||
}
|
}
|
||||||
|
|
||||||
// directory in which the uploaded file will be moved
|
// directory in which the uploaded file will be moved
|
||||||
$upload_file_dir = "uploads/";
|
$upload_file_dir = "../uploads/";
|
||||||
//Force File Name
|
//Force File Name
|
||||||
$new_file_name = "favicon.ico";
|
$new_file_name = "favicon.ico";
|
||||||
$dest_path = $upload_file_dir . $new_file_name;
|
$dest_path = $upload_file_dir . $new_file_name;
|
||||||
@@ -42,11 +42,10 @@ if (isset($_POST['edit_favicon_settings'])) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name changed the favicon");
|
logAction("Settings", "Edit", "$session_name changed the favicon");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Favicon Updated";
|
flash_alert("Favicon Updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -21,11 +21,10 @@ if (isset($_POST['edit_ticket_settings'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_ticket_prefix = '$config_ticket_prefix', config_ticket_next_number = $config_ticket_next_number, config_ticket_email_parse = $config_ticket_email_parse, config_ticket_email_parse_unknown_senders = $config_ticket_email_parse_unknown_senders, config_ticket_autoclose_hours = $config_ticket_autoclose_hours, config_ticket_new_ticket_notification_email = '$config_ticket_new_ticket_notification_email', config_ticket_default_billable = $config_ticket_default_billable, config_ticket_default_view = $config_ticket_default_view, config_ticket_moving_columns = $config_ticket_moving_columns, config_ticket_ordering = $config_ticket_ordering, config_ticket_timer_autostart = $config_ticket_timer_autostart WHERE company_id = 1");
|
mysqli_query($mysqli,"UPDATE settings SET config_ticket_prefix = '$config_ticket_prefix', config_ticket_next_number = $config_ticket_next_number, config_ticket_email_parse = $config_ticket_email_parse, config_ticket_email_parse_unknown_senders = $config_ticket_email_parse_unknown_senders, config_ticket_autoclose_hours = $config_ticket_autoclose_hours, config_ticket_new_ticket_notification_email = '$config_ticket_new_ticket_notification_email', config_ticket_default_billable = $config_ticket_default_billable, config_ticket_default_view = $config_ticket_default_view, config_ticket_moving_columns = $config_ticket_moving_columns, config_ticket_ordering = $config_ticket_ordering, config_ticket_timer_autostart = $config_ticket_timer_autostart WHERE company_id = 1");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Settings", "Edit", "$session_name edited ticket settings");
|
logAction("Settings", "Edit", "$session_name edited ticket settings");
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Ticket Settings updated";
|
flash_alert("Ticket Settings updated");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -17,12 +17,11 @@ if (isset($_POST['add_software_template'])) {
|
|||||||
|
|
||||||
$software_template_id = mysqli_insert_id($mysqli);
|
$software_template_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Software Template", "Create", "$session_name created software template $name", 0, $software_template_id);
|
logAction("Software Template", "Create", "$session_name created software template $name", 0, $software_template_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Software template <strong>$name</strong> created";
|
flash_alert("Software template <strong>$name</strong> created");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,12 +37,11 @@ if (isset($_POST['edit_software_template'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE software_templates SET software_template_name = '$name', software_template_version = '$version', software_template_description = '$description', software_template_type = '$type', software_template_license_type = '$license_type', software_template_notes = '$notes' WHERE software_template_id = $software_template_id");
|
mysqli_query($mysqli,"UPDATE software_templates SET software_template_name = '$name', software_template_version = '$version', software_template_description = '$description', software_template_type = '$type', software_template_license_type = '$license_type', software_template_notes = '$notes' WHERE software_template_id = $software_template_id");
|
||||||
|
|
||||||
// Logging
|
|
||||||
logAction("Software Template", "Edit", "$session_name edited software template $name", 0, $software_template_id);
|
logAction("Software Template", "Edit", "$session_name edited software template $name", 0, $software_template_id);
|
||||||
|
|
||||||
$_SESSION['alert_message'] = "Software template <strong>$name</strong> edited";
|
flash_alert("Software template <strong>$name</strong> edited");
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,12 +56,10 @@ if (isset($_GET['delete_software_template'])) {
|
|||||||
|
|
||||||
mysqli_query($mysqli,"DELETE FROM software_templates WHERE software_template_id = $software_template_id");
|
mysqli_query($mysqli,"DELETE FROM software_templates WHERE software_template_id = $software_template_id");
|
||||||
|
|
||||||
//Logging
|
|
||||||
logAction("Software Template", "Delete", "$session_name deleted software template $software_template_name");
|
logAction("Software Template", "Delete", "$session_name deleted software template $software_template_name");
|
||||||
|
|
||||||
$_SESSION['alert_type'] = "error";
|
flash_alert("Software Template <strong>$software_template_name</strong> deleted", 'error');
|
||||||
$_SESSION['alert_message'] = "Software Template <strong>$software_template_name</strong> deleted";
|
|
||||||
|
|
||||||
header("Location: " . $_SERVER["HTTP_REFERER"]);
|
redirect();
|
||||||
|
|
||||||
}
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user