Mods-for-HESK-Netsyms/install/database-validation.php

290 lines
15 KiB
PHP
Raw Normal View History

2016-11-06 22:00:56 -05:00
<?php
define('IN_SCRIPT', 1);
define('HESK_PATH', '../');
2016-11-06 22:00:56 -05:00
require(HESK_PATH . 'install/install_functions.inc.php');
require(HESK_PATH . 'hesk_settings.inc.php');
hesk_dbConnect();
?>
<html>
<head>
<title>Mods For HESK Database Validation</title>
<link href="<?php echo HESK_PATH; ?>hesk_style.css?<?php echo HESK_NEW_VERSION; ?>" type="text/css" rel="stylesheet"/>
2016-11-06 22:00:56 -05:00
<link href="<?php echo HESK_PATH; ?>css/bootstrap.css?v=<?php echo $hesk_settings['hesk_version']; ?>"
type="text/css" rel="stylesheet"/>
<link href="<?php echo HESK_PATH; ?>css/bootstrap-theme.css?v=<?php echo $hesk_settings['hesk_version']; ?>"
type="text/css" rel="stylesheet"/>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
<link href="<?php echo HESK_PATH; ?>css/hesk_newStyle.css" type="text/css" rel="stylesheet"/>
2016-11-06 22:00:56 -05:00
<script src="<?php echo HESK_PATH; ?>js/jquery-1.10.2.min.js"></script>
<script language="Javascript" type="text/javascript" src="<?php echo HESK_PATH; ?>js/bootstrap.min.js"></script>
<script language="Javascript" type="text/javascript"
src="<?php echo HESK_PATH; ?>js/modsForHesk-javascript.js"></script>
</head>
<body>
<div class="headersm">Mods for HESK Database Validation</div>
<div class="container">
<div class="page-header">
<h1>Mods for HESK Database Validation</h1>
<p>The database validation tool will check your database setup to ensure that everything is set up correctly.
2017-01-03 22:16:04 -05:00
As of this time, the database validator assumes you are running the latest version of Mods for HESK (<?php echo MODS_FOR_HESK_NEW_VERSION; ?>)</p>
</div>
<div class="panel panel-success" id="all-good" style="display: none">
<div class="panel-heading">
2017-10-20 13:07:01 -04:00
<h4>Success</h4>
2017-01-03 22:16:04 -05:00
</div>
<div class="panel-body text-center">
<i class="fa fa-check-circle fa-4x" style="color: green"></i><br>
<h4>Your database is valid</h4>
</div>
</div>
<div class="panel panel-danger" id="not-good" style="display: none">
<div class="panel-heading">
2017-10-20 13:07:01 -04:00
<h4>Failure</h4>
2017-01-03 22:16:04 -05:00
</div>
<div class="panel-body text-center">
<i class="fa fa-times-circle fa-4x" style="color: red"></i><br>
<h4>One or more columns / tables are not properly configured in your database. Please open a topic at the
<a href="http://developers.phpjunkyard.com/viewforum.php?f=19" target="_blank">PHP Junkyard Forums</a> with this information for assistance.</h4>
</div>
2016-11-06 22:00:56 -05:00
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4>Results</h4>
</div>
<table class="table table-striped">
<thead>
<tr>
<th>Database Change</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<?php
2017-01-03 22:16:04 -05:00
$all_good = true;
2016-11-06 22:10:25 -05:00
output_header_row('1.0.0 - 1.3.x');
2017-01-03 22:16:04 -05:00
$all_good = run_table_check('statuses');
2017-10-18 22:00:00 -04:00
$all_good &= run_column_check('statuses', 'ID');
$all_good &= run_column_check('statuses', 'TextColor');
$all_good &= run_column_check('statuses', 'IsNewTicketStatus');
$all_good &= run_column_check('statuses', 'IsClosed');
$all_good &= run_column_check('statuses', 'IsClosedByClient');
$all_good &= run_column_check('statuses', 'IsCustomerReplyStatus');
$all_good &= run_column_check('statuses', 'IsStaffClosedOption');
$all_good &= run_column_check('statuses', 'IsStaffReopenedStatus');
$all_good &= run_column_check('statuses', 'IsDefaultStaffReplyStatus');
$all_good &= run_column_check('statuses', 'LockedTicketStatus');
2016-11-06 22:10:25 -05:00
output_header_row('1.5.0');
2017-10-18 22:00:00 -04:00
$all_good &= run_column_check('users', 'active');
$all_good &= run_column_check('users', 'notify_note_unassigned');
2016-11-06 22:10:25 -05:00
output_header_row('1.6.0');
2017-10-18 22:00:00 -04:00
$all_good &= run_table_check('settings');
2016-11-06 22:10:25 -05:00
output_header_row('1.7.0');
2017-10-18 22:00:00 -04:00
$all_good &= run_table_check('verified_emails');
$all_good &= run_table_check('pending_verification_emails');
$all_good &= run_table_check('stage_tickets');
output_header_row('2.2.0');
$all_good &= run_column_check('statuses', 'IsAutocloseOption');
$all_good &= run_column_check('statuses', 'Closable');
2016-11-06 22:10:25 -05:00
output_header_row('2.3.0');
2017-10-18 22:00:00 -04:00
$all_good &= run_column_check('service_messages', 'icon');
$all_good &= run_column_check('statuses', 'Key');
$all_good &= run_column_check('tickets', 'latitude');
$all_good &= run_column_check('tickets', 'longitude');
$all_good &= run_column_check('stage_tickets', 'latitude');
$all_good &= run_column_check('stage_tickets', 'longitude');
$all_good &= run_column_check('categories', 'manager');
$all_good &= run_column_check('users', 'permission_template');
$all_good &= run_table_check('permission_templates');
$all_good &= run_column_check('permission_templates', 'id');
$all_good &= run_column_check('permission_templates', 'name');
$all_good &= run_column_check('permission_templates', 'heskprivileges');
$all_good &= run_column_check('permission_templates', 'categories');
2016-11-06 22:10:25 -05:00
output_header_row('2.4.0');
2017-10-18 22:00:00 -04:00
$all_good &= run_table_check('quick_help_sections');
$all_good &= run_column_check('quick_help_sections', 'id');
$all_good &= run_column_check('quick_help_sections', 'location');
$all_good &= run_column_check('quick_help_sections', 'show');
$all_good &= run_table_check('text_to_status_xref');
$all_good &= run_column_check('text_to_status_xref', 'id');
$all_good &= run_column_check('text_to_status_xref', 'language');
$all_good &= run_column_check('text_to_status_xref', 'text');
$all_good &= run_column_check('text_to_status_xref', 'status_id');
$all_good &= run_column_check('statuses', 'sort');
$all_good &= run_column_check('attachments', 'download_count');
$all_good &= run_column_check('kb_attachments', 'download_count');
$all_good &= run_column_check('tickets', 'html');
$all_good &= run_column_check('stage_tickets', 'html');
$all_good &= run_column_check('replies', 'html');
2016-11-06 22:10:25 -05:00
output_header_row('2.5.0');
2017-10-18 22:00:00 -04:00
$all_good &= run_column_check('tickets', 'user_agent');
$all_good &= run_column_check('tickets', 'screen_resolution_width');
$all_good &= run_column_check('tickets', 'screen_resolution_height');
$all_good &= run_column_check('stage_tickets', 'user_agent');
$all_good &= run_column_check('stage_tickets', 'screen_resolution_width');
$all_good &= run_column_check('stage_tickets', 'screen_resolution_height');
2016-11-06 22:10:25 -05:00
output_header_row('2.6.0');
2017-10-18 22:00:00 -04:00
$all_good &= run_table_check('logging');
$all_good &= run_column_check('logging', 'id');
$all_good &= run_column_check('logging', 'username');
$all_good &= run_column_check('logging', 'message');
$all_good &= run_column_check('logging', 'severity');
$all_good &= run_column_check('logging', 'location');
$all_good &= run_column_check('logging', 'timestamp');
$all_good &= run_table_check('user_api_tokens');
$all_good &= run_column_check('user_api_tokens', 'id');
$all_good &= run_column_check('user_api_tokens', 'user_id');
$all_good &= run_column_check('user_api_tokens', 'token');
$all_good &= run_table_check('temp_attachment');
$all_good &= run_column_check('temp_attachment', 'id');
$all_good &= run_column_check('temp_attachment', 'file_name');
$all_good &= run_column_check('temp_attachment', 'saved_name');
$all_good &= run_column_check('temp_attachment', 'size');
$all_good &= run_column_check('temp_attachment', 'type');
$all_good &= run_column_check('temp_attachment', 'date_uploaded');
$all_good &= run_table_check('calendar_event');
$all_good &= run_column_check('calendar_event', 'id');
$all_good &= run_column_check('calendar_event', 'start');
$all_good &= run_column_check('calendar_event', 'end');
$all_good &= run_column_check('calendar_event', 'all_day');
$all_good &= run_column_check('calendar_event', 'name');
$all_good &= run_column_check('calendar_event', 'location');
$all_good &= run_column_check('calendar_event', 'comments');
$all_good &= run_column_check('calendar_event', 'category');
$all_good &= run_table_check('calendar_event_reminder');
$all_good &= run_column_check('calendar_event_reminder', 'id');
$all_good &= run_column_check('calendar_event_reminder', 'user_id');
$all_good &= run_column_check('calendar_event_reminder', 'event_id');
$all_good &= run_column_check('calendar_event_reminder', 'amount');
$all_good &= run_column_check('calendar_event_reminder', 'unit');
$all_good &= run_column_check('calendar_event_reminder', 'email_sent');
$all_good &= run_column_check('tickets', 'due_date');
$all_good &= run_column_check('tickets', 'overdue_email_sent');
$all_good &= run_column_check('categories', 'usage');
$all_good &= run_column_check('users', 'notify_overdue_unassigned');
$all_good &= run_column_check('users', 'default_calendar_view');
2016-11-06 22:10:25 -05:00
output_header_row('2.6.2');
2017-10-18 22:00:00 -04:00
$all_good &= run_column_check('stage_tickets', 'due_date');
$all_good &= run_column_check('stage_tickets', 'overdue_email_sent');
2017-06-01 12:38:03 -04:00
output_header_row('3.1.0');
2017-10-18 22:00:00 -04:00
$all_good &= run_column_check('categories', 'background_color');
$all_good &= run_column_check('categories', 'foreground_color');
$all_good &= run_column_check('categories', 'display_border_outline');
$all_good &= run_column_check('logging', 'stack_trace');
$all_good &= run_table_check('custom_nav_element');
$all_good &= run_column_check('custom_nav_element', 'id');
$all_good &= run_column_check('custom_nav_element', 'image_url');
$all_good &= run_column_check('custom_nav_element', 'font_icon');
$all_good &= run_column_check('custom_nav_element', 'place');
$all_good &= run_column_check('custom_nav_element', 'url');
$all_good &= run_column_check('custom_nav_element', 'sort');
$all_good &= run_table_check('custom_nav_element_to_text');
$all_good &= run_column_check('custom_nav_element_to_text', 'id');
$all_good &= run_column_check('custom_nav_element_to_text', 'nav_element_id');
$all_good &= run_column_check('custom_nav_element_to_text', 'language');
$all_good &= run_column_check('custom_nav_element_to_text', 'text');
$all_good &= run_column_check('custom_nav_element_to_text', 'subtext');
$all_good &= run_setting_check('admin_navbar_background');
$all_good &= run_setting_check('admin_navbar_background_hover');
$all_good &= run_setting_check('admin_navbar_text');
$all_good &= run_setting_check('admin_navbar_text_hover');
$all_good &= run_setting_check('admin_navbar_brand_background');
$all_good &= run_setting_check('admin_navbar_brand_background_hover');
$all_good &= run_setting_check('admin_navbar_brand_text');
$all_good &= run_setting_check('admin_navbar_brand_text_hover');
$all_good &= run_setting_check('admin_sidebar_background');
$all_good &= run_setting_check('admin_sidebar_background_hover');
$all_good &= run_setting_check('admin_sidebar_text');
$all_good &= run_setting_check('admin_sidebar_text_hover');
$all_good &= run_setting_check('admin_sidebar_font_weight');
$all_good &= run_setting_check('admin_sidebar_header_background');
$all_good &= run_setting_check('admin_sidebar_header_text');
output_header_row('3.2.0');
$all_good &= run_table_check('audit_trail');
$all_good &= run_table_check('audit_trail_to_replacement_values');
$all_good &= run_column_check('categories', 'mfh_description');
$all_good &= run_column_check('custom_fields', 'mfh_description');
2017-10-18 22:00:00 -04:00
$all_good &= run_setting_check('migrationNumber');
2017-01-03 22:16:04 -05:00
if ($all_good) {
echo "<script>$('#all-good').show()</script>";
} else {
echo "<script>$('#not-good').show()</script>";
}
2016-11-06 22:00:56 -05:00
?>
</tbody>
</table>
</div>
</div>
</body>
</html>
<?php
function run_setting_check($setting_name) {
global $hesk_settings;
2017-06-22 12:04:29 +00:00
$res = run_check("SELECT 1 FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "settings` WHERE `Key` = '{$setting_name}'");
$all_good = hesk_dbNumRows($res) > 0;
output_result('<b>Setting Exists</b>: ' . $setting_name, $all_good);
return $all_good !== false;
}
2016-11-06 22:00:56 -05:00
function run_table_check($table_name) {
2017-01-03 22:16:04 -05:00
return run_column_check($table_name, '1');
2016-11-06 22:00:56 -05:00
}
function run_column_check($table_name, $column_name) {
global $hesk_settings;
if ($column_name == '1') {
2017-01-03 22:16:04 -05:00
$all_good = run_check('SELECT ' . $column_name . ' FROM `' . $hesk_settings['db_pfix'] . $table_name . '` LIMIT 1');
2016-11-06 22:00:56 -05:00
output_result('<b>Table Exists</b>: ' . $table_name,
2017-01-03 22:16:04 -05:00
$all_good);
2016-11-06 22:00:56 -05:00
} else {
2017-06-01 12:38:03 -04:00
$all_good = run_check('SELECT `' . $column_name . '` FROM `' . $hesk_settings['db_pfix'] . $table_name . '` LIMIT 1');
2016-11-06 22:00:56 -05:00
output_result('<b>Column Exists</b>: ' . $table_name . '.' . $column_name,
2017-01-03 22:16:04 -05:00
$all_good);
2016-11-06 22:00:56 -05:00
}
2017-01-03 22:16:04 -05:00
return $all_good !== false;
2016-11-06 22:00:56 -05:00
}
function run_check($sql) {
global $hesk_last_query;
global $hesk_db_link;
if (function_exists('mysqli_connect')) {
if (!$hesk_db_link && !hesk_dbConnect()) {
return false;
}
$hesk_last_query = $sql;
return @mysqli_query($hesk_db_link, $sql);
} else {
if (!$hesk_db_link && !hesk_dbConnect()) {
return false;
}
$hesk_last_query = $sql;
return $res = @mysql_query($sql, $hesk_db_link);
}
}
function output_result($change_title, $success) {
$css_color = 'green';
$text = '<span data-toggle="tooltip" title="This looks good!"><i class="fa fa-check-circle"></i> Success</span>';
if (!$success) {
$css_color = 'red';
$text = '<span data-toggle="tooltip" title="Oh no! Something isn\'t right."><i class="fa fa-times-circle"></i> Failure</span>';
}
$formatted_text = sprintf('<tr><td>%s</td><td style="color: %s">%s</td></tr>', $change_title, $css_color, $text);
echo $formatted_text;
2016-11-06 22:10:25 -05:00
}
function output_header_row($text) {
echo '<tr><td colspan="2" style="font-size: 1.2em"><i class="fa fa-chevron-right"></i> ' . $text . '</td></tr>';
2016-11-06 22:00:56 -05:00
}