4 Commits

24 changed files with 510 additions and 649 deletions

View File

@@ -1,5 +1,5 @@
OpenDRS - Online Discrepancy Reporting System OpenDRS - Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -146,8 +146,10 @@ Changelog
in a trusted environment where anybody on the network can in a trusted environment where anybody on the network can
create/edit writeups and search the database, with a login required create/edit writeups and search the database, with a login required
for everything else. for everything else.
- On the View Open Writeups and View All Writeups pages, replaced the - On the View All Writeups pages, replaced the "Last 7 days" and
"Last 30 days" button with a dropdown with more options. "Last 30 days" buttons with a dropdown with more options, including
future dates so that OpenDRS can be more useful for things like
preventive maintenance.
- Changed the global font to a sans-serif font. - Changed the global font to a sans-serif font.
- For Raspberry Pi: - For Raspberry Pi:
- Removed the Raspberry Pi terminal setup from OpenDRS. Setting up - Removed the Raspberry Pi terminal setup from OpenDRS. Setting up
@@ -168,3 +170,46 @@ Changelog
"View Open Writeups" page. "View Open Writeups" page.
- Removed open, closed, and deferred constant definitions from common.php - Removed open, closed, and deferred constant definitions from common.php
since only one was ever used, and that in only one place. since only one was ever used, and that in only one place.
1.4.3 - 2025-02-27
- Poorly documented changes in the previous three versions resulted
in confusion about when the date range selection dropdown should
appear on the View Open Writeups and View All Writeups pages.
Since the View Open Writeups page seemed redundant (all that info
was available on the View All Writeups page) removed the View
Open Writeups page entirely. The writeups page now shows all
writeups for the selected date range, or today if no dates are
specified.
1.4.4 - 2025-12-10
- Fixed bug in writeupdetail.php that emerged with installation on a
system using MariaDB-10.11.14. A fatal error occurred when
trying to insert a null value into the action_reason field of
the writeups table (you left the action reason dropdown blank).
Previous versions just left it as is without complaint.
1.4.5 - 2025-12-16
- Various problems were noted resulting from php's use of UTC as the
default timezone. Now, on installation or upgrade, the installer
gets the correct timezone from the system and sets it as a php
option in a .htaccess file in the install location. This solves
multiple problems and allows today's date and the current time
to be determined from the php date() function as part of the
settings.php once per page load instead of having to query the
database multiple times per page load. Also added the option to
allow apache to read the .htaccess file to the <Directory>
section of the application's conf file in
/etc/apache2/conf-available
- Renamed the installer's opendrs-update.sh script to files_update.sh
to align with the standardized installation process used by
other applications.
- Changed the install.sh script to align with the standardized
installation process used by other applications.
1.4.6 - 2026-02-06
- Fixed bug in group_detail() function in common.php where the link
members were being sorted by linkid instead of writeupid. This
caused the group writeup table to be ordered based on when the
writeup was added to the group instead of in the logical writeup
order.

View File

@@ -2,7 +2,7 @@
/* /*
boilerplate.php boilerplate.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */

View File

@@ -69,7 +69,7 @@ CREATE TABLE `config` (
LOCK TABLES `config` WRITE; LOCK TABLES `config` WRITE;
/*!40000 ALTER TABLE `config` DISABLE KEYS */; /*!40000 ALTER TABLE `config` DISABLE KEYS */;
INSERT INTO `config` VALUES INSERT INTO `config` VALUES
(1,'drs_version','1.4.0','1.4.0'), (1,'drs_version','1.4.6','1.4.6'),
(5,'app_name','OpenDRS - Discrepancy Reporting System','OpenDRS Discrepancy Reporting System'), (5,'app_name','OpenDRS - Discrepancy Reporting System','OpenDRS Discrepancy Reporting System'),
(6,'banner','1','1'), (6,'banner','1','1'),
(7,'background_color','0B3144','0B3144'), (7,'background_color','0B3144','0B3144'),

35
database-update.sh Normal file
View File

@@ -0,0 +1,35 @@
#!/bin/bash
# database-update.sh
# OpenLog Online Logbook
# Copyright (C) 2026 Rod Wright
# SPDX-License-Identifier: GPL-2.0
if [[ $1 == "" ]]
then
echo "This script requires a mysql options file, but none was specified. Aborting."
exit 1
fi
mysql_opt_file=$1
if [[ ! -f $mysql_opt_file ]]
then
echo "The mysql options file specified does not exist. Aborting."
exit 1
fi
margs="--defaults-extra-file=$mysql_opt_file"
# ---------- version x.x.x ----------
# Nothing to be done for versions prior to 1.4.5
# -----------------------------------
# ---------- version 1.4.5 ----------
# Nothing to be done
# -----------------------------------
# ---------- version 1.4.6 ----------
# Nothing to be done
# -----------------------------------

View File

@@ -261,3 +261,23 @@ UPDATE config SET value="1.4.1",defaultvalue="1.4.1" WHERE name="drs_version";
UPDATE config SET value="1.4.2",defaultvalue="1.4.2" WHERE name="drs_version"; UPDATE config SET value="1.4.2",defaultvalue="1.4.2" WHERE name="drs_version";
-- -------------------------------------- -- --------------------------------------
-- ---------- version 1.4.3 -------------
-- Update version number
UPDATE config SET value="1.4.3",defaultvalue="1.4.3" WHERE name="drs_version";
-- --------------------------------------
-- ---------- version 1.4.4 -------------
-- Update version number
UPDATE config SET value="1.4.4",defaultvalue="1.4.4" WHERE name="drs_version";
-- --------------------------------------
-- ---------- version 1.4.5 -------------
-- Update version number
UPDATE config SET value="1.4.5",defaultvalue="1.4.5" WHERE name="drs_version";
-- --------------------------------------
-- ---------- version 1.4.6 -------------
-- Update version number
UPDATE config SET value="1.4.6",defaultvalue="1.4.6" WHERE name="drs_version";
-- --------------------------------------

View File

@@ -3,7 +3,7 @@
/* /*
db.php db.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
@@ -14,6 +14,7 @@
** DO NOT EDIT ** ** DO NOT EDIT **
************************************************************************ ************************************************************************
*/ */
$appname="APPNAME";
$dbname="DBNAME"; $dbname="DBNAME";
$username="DBUSER"; $username="DBUSER";
$dbpass="DBPASS"; $dbpass="DBPASS";
@@ -26,7 +27,7 @@ function dberrmsg($dbname) {
</head> </head>
<body> <body>
Could not connect to the $dbname database. Please ensure the MySQL server is running. If this is Could not connect to the $dbname database. Please ensure the MySQL server is running. If this is
the first time you have used OpenMTS, please consult the INSTALL file included in the distribution. the first time you have used $appname, please consult the INSTALL file included in the distribution.
</body> </body>
</html> </html>
"; ";

View File

@@ -1,5 +1,5 @@
OpenDRS - Online Discrepancy Reporting System OpenDRS - Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -170,3 +170,45 @@ Changelog
"View Open Writeups" page. "View Open Writeups" page.
- Removed open, closed, and deferred constant definitions from common.php - Removed open, closed, and deferred constant definitions from common.php
since only one was ever used, and that in only one place. since only one was ever used, and that in only one place.
1.4.3 - 2025-02-27
- Poorly documented changes in the previous three versions resulted
in confusion about when the date range selection dropdown should
appear on the View Open Writeups and View All Writeups pages.
Since the View Open Writeups page seemed redundant (all that info
was available on the View All Writeups page) removed the View
Open Writeups page entirely. The writeups page now shows all
writeups for the selected date range, or today if no dates are
specified.
1.4.4 - 2025-12-10
- Fixed bug in writeupdetail.php that emerged with installation on a
system using MariaDB-10.11.14. A fatal error occurred when
trying to insert a null value into the action_reason field of
the writeups table (you left the action reason dropdown blank).
Previous versions just left it as is without complaint.
1.4.5 - 2025-12-16
- Various problems were noted resulting from php's use of UTC as the
default timezone. Now, on installation or upgrade, the installer
gets the correct timezone from the system and sets it as a php
option in a .htaccess file in the install location. This solves
multiple problems and allows today's date and the current time
to be determined from the php date() function as part of the
settings.php once per page load instead of having to query the
database multiple times per page load. Also added the option to
allow apache to read the .htaccess file to the <Directory>
section of the application's conf file in
/etc/apache2/conf-available
- Renamed the installer's opendrs-update.sh script to files_update.sh
to align with the standardized installation process used by
other applications.
- Changed the install.sh script to align with the standardized
installation process used by other applications.
1.4.6 - 2026-02-06
- Fixed bug in group_detail() function in common.php where the link
members were being sorted by linkid instead of writeupid. This
caused the group writeup table to be ordered based on when the
writeup was added to the group instead of in the logical writeup
order.

View File

@@ -2,7 +2,7 @@
/* /*
about.php about.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
@@ -79,7 +79,7 @@ echo "
OpenDRS $drs_version Discrepancy Reporting System OpenDRS $drs_version Discrepancy Reporting System
</h3><br> </h3><br>
<p>This program is licensed under the terms of the <a href=\"gpl.php\">GNU General Public License</a>. Click on the link <p>This program is licensed under the terms of the <a href=\"gpl.php\">GNU General Public License</a>. Click on the link
or see the LICENSE file in the distribution to read it. OpenDRS is Copyright (C) 2024 by Rod Wright. or see the LICENSE file in the distribution to read it. OpenDRS is Copyright (C) 2025 by Rod Wright.
</p> </p>
<p> <p>
OpenDRS is a simple online maintenance tracking/discrepancy reporting application. It allows anyone with a web browser to create, OpenDRS is a simple online maintenance tracking/discrepancy reporting application. It allows anyone with a web browser to create,

View File

@@ -2,7 +2,7 @@
/* /*
changelog.php changelog.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */

View File

@@ -2,7 +2,7 @@
/* /*
common.php common.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
@@ -383,8 +383,7 @@ function sidemenu($printable=true) {
echo " echo "
<br> <br>
<table style=\"table-layout:fixed;width:210px;\" bgcolor=\"#$mbgcolor\" border=\"1\" width=\"100%\"> <table style=\"table-layout:fixed;width:210px;\" bgcolor=\"#$mbgcolor\" border=\"1\" width=\"100%\">
<tr><td align=\"center\"><a href=\"writeups.php\" title=\"View open writeups\">View Open Writeups</a></td></tr> <tr><td align=\"center\"><a href=\"writeups.php\" title=\"View writeups\">View Writeups</a></td></tr>
<tr><td align=\"center\"><a href=\"writeups.php?view=1\" title=\"View all writeups for a date range\">View All Writeups</a></td></tr>
<tr><td align=\"center\"><a href=\"groups.php\" title=\"View writeup groups\">Writeup Groups</a></td></tr> <tr><td align=\"center\"><a href=\"groups.php\" title=\"View writeup groups\">Writeup Groups</a></td></tr>
<tr><td align=\"center\"><a href=\"search.php\">Search Writeups</a></td></tr> <tr><td align=\"center\"><a href=\"search.php\">Search Writeups</a></td></tr>
</table> </table>
@@ -786,7 +785,7 @@ function group_detail($groupid,$role=false,$mode="view",$selection="none") {
"; ";
} }
$writeup_qry=mysqli_query($drs_db,"select writeupid from links where linkgroup=$groupid"); $writeup_qry=mysqli_query($drs_db,"select writeupid from links where linkgroup=$groupid order by writeupid asc");
while ($writeup=mysqli_fetch_row($writeup_qry)) { while ($writeup=mysqli_fetch_row($writeup_qry)) {
// get writeup data // get writeup data
$writeupdata=mysqli_fetch_assoc(mysqli_query($drs_db,"select * from writeups where id={$writeup[0]}")); $writeupdata=mysqli_fetch_assoc(mysqli_query($drs_db,"select * from writeups where id={$writeup[0]}"));

View File

@@ -2,7 +2,7 @@
/* /*
config.php config.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */

View File

@@ -2,7 +2,7 @@
/* /*
create.php create.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
@@ -93,9 +93,6 @@ framework("begin","$appname","New Writeup",$print);
// ******** begin database manipulation ******** // ******** begin database manipulation ********
// determine today's date and make it the default
$today=date("Y-m-d");
$now=date("H:i:s");
if (!isset($report_date) || $report_date=="automatic") $report_date=$today; if (!isset($report_date) || $report_date=="automatic") $report_date=$today;
if (!isset($report_time) || $report_time=="automatic") $report_time=$now; if (!isset($report_time) || $report_time=="automatic") $report_time=$now;
@@ -133,7 +130,7 @@ echo "<br>";
// display the form // display the form
if (isset($create)) { if (isset($create)) {
if ($discrepancy_text!=NULL && $reported_by!=NULL) { if ($discrepancy_text!=NULL && $reported_by!=NULL) {
format_message(0,"<strong>Writeup created.</strong> You may create another writeup or <a href=\"writeups.php\">return to Open Writeups page.</a>"); format_message(0,"<strong>Writeup created.</strong> You may create another writeup or <a href=\"writeups.php\">return to View Writeups page.</a>");
$preserve=false; $preserve=false;
} }
if ($device==NULL) { if ($device==NULL) {

View File

@@ -2,7 +2,7 @@
/* /*
dbadmin.php dbadmin.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */

View File

@@ -2,7 +2,7 @@
/* /*
gpl.php gpl.php
OpenMTS Online Maintenance Tracking System OpenMTS Online Maintenance Tracking System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */

View File

@@ -2,7 +2,7 @@
/* /*
groups.php groups.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
@@ -113,10 +113,6 @@ framework("begin","$appname","Writeup Groups",$print);
// ******** begin database manipulation ******** // ******** begin database manipulation ********
// determine today's date and make it the default
$today=date("Y-m-d");
$now=date("H:i:s");
// get max report date from writeups table, validate input dates/times and set defaults // get max report date from writeups table, validate input dates/times and set defaults
$maxrepdate_qry=mysqli_query($drs_db,"select max(report_date) from writeups"); $maxrepdate_qry=mysqli_query($drs_db,"select max(report_date) from writeups");
$maxrepdate=mysqli_fetch_row($maxrepdate_qry)[0]; $maxrepdate=mysqli_fetch_row($maxrepdate_qry)[0];

View File

@@ -2,7 +2,7 @@
/* /*
login.php login.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */

View File

@@ -2,7 +2,7 @@
/* /*
profile.php profile.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */

View File

@@ -2,7 +2,7 @@
/* /*
search.php search.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
@@ -38,10 +38,10 @@ if (array_key_exists('exportcsv',$_REQUEST)) {
$exportcsv=true; $exportcsv=true;
$csv_filename="{$appname}_Search_Results_" . date("Y-m-d_His") . ".csv"; $csv_filename="{$appname}_Search_Results_" . date("Y-m-d_His") . ".csv";
// disable caching // disable caching
$now = gmdate("D, d M Y H:i:s"); $lastmodified = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate"); header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT"); header("Last-Modified: {$lastmodified} GMT");
// force download // force download
header("Content-Type: application/force-download"); header("Content-Type: application/force-download");

View File

@@ -2,11 +2,15 @@
/* /*
settings.php settings.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
// determine today's date and time and assign them to variables
$today = date("Y-m-d");
$now = date("H:i:s");
$sttl=mysqli_fetch_row(mysqli_query($drs_db,"select value from config where name=\"session_ttl_days\""))[0]; $sttl=mysqli_fetch_row(mysqli_query($drs_db,"select value from config where name=\"session_ttl_days\""))[0];
$ostype=strtoupper(substr(php_uname('s'), 0, 3)); $ostype=strtoupper(substr(php_uname('s'), 0, 3));
if ($ostype == 'WIN') { if ($ostype == 'WIN') {

View File

@@ -2,7 +2,7 @@
/* /*
writeupdetail.php writeupdetail.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
@@ -97,9 +97,6 @@ framework("begin","$appname","Writeup Detail",$print);
// ******** begin database manipulation ******** // ******** begin database manipulation ********
// determine today's date and make it the default
$today=date("Y-m-d");
$now=date("H:i:s");
if ($usersave) { if ($usersave) {
// user parameters // user parameters
@@ -146,6 +143,7 @@ elseif ($techsave) {
$clean_action_text=mysqli_real_escape_string($drs_db,$action_text); $clean_action_text=mysqli_real_escape_string($drs_db,$action_text);
// update the record in writeups // update the record in writeups
if ($action_reason=='') $action_reason=0;
mysqli_query($drs_db,"update writeups set status=\"$status\",action_by=\"$action_by\",action_date=\"$action_date\",action_time=\"$action_time\",action_reason=\"$action_reason\",action_text=\"$clean_action_text\" where id=\"$id\""); mysqli_query($drs_db,"update writeups set status=\"$status\",action_by=\"$action_by\",action_date=\"$action_date\",action_time=\"$action_time\",action_reason=\"$action_reason\",action_text=\"$clean_action_text\" where id=\"$id\"");
} }
} }

View File

@@ -2,7 +2,7 @@
/* /*
writeups.php writeups.php
OpenDRS Online Discrepancy Reporting System OpenDRS Online Discrepancy Reporting System
Copyright (C) 2024 Rod Wright Copyright (C) 2026 Rod Wright
SPDX-License-Identifier: GPL-2.0 SPDX-License-Identifier: GPL-2.0
*/ */
@@ -51,8 +51,6 @@ extract($incoming, EXTR_SKIP);
* end_date * end_date
* showtoday * showtoday
* showyesterday * showyesterday
* show7day
* show30day
* showdays * showdays
* viewtype * viewtype
* togroup * togroup
@@ -73,128 +71,6 @@ if ($print) {
$role=dblookup($drs_db,"users","id","role",$userid); $role=dblookup($drs_db,"users","id","role",$userid);
// define local functions // define local functions
function opentable($incoming,$start_date,$end_date,$print,$drs_db,$viewtype="summary") {
// grab some important global variables
global $device_term;
global $discovered_term, $discovered_term_short, $disc_drop_data;
global $functional_term, $functional_term_short;
global $functional_yes, $functional_no;
global $functional_yes_short, $functional_no_short;
// show date range selector
echo "
<form method=post action=\"writeups.php\">
";
if ($print) {
echo "
Open writeups between&nbsp;&nbsp; $start_date and $end_date
";
} else {
echo "
<input type=\"submit\" name=\"showtoday\" value=\"Today\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"submit\" name=\"showyesterday\" value=\"Yesterday\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"submit\" name=\"show7day\" value=\"Last 7 Days\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"submit\" name=\"show30day\" value=\"Last 30 Days\"><br><br>
";
}
echo "
</form>
";
$writeup=mysqli_query($drs_db,"select * from writeups where status=1 and report_date between \"$start_date\" and \"$end_date\" order by report_date desc,report_time desc");
if (mysqli_num_rows($writeup)) {
$now=date("H:i l");
echo "
<font color=\"red\">As of $now</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=\"-1\">Newest at top</font><br>
<table border=\"1\" cellpadding=\"5\" style=\"width:100%;\">
<tr>
<th style=\"width:1%;\">ID</th>
<th style=\"width:100px;\">Date</th>
<th style=\"width:1%;\">$discovered_term_short</th>
<th style=\"width:1%;\">$device_term</th>
<th style=\"width:1%;\">Subsystem</th>
<th style=\"width:1%;\">Reported by</th>
<th>Discrepancy</th>
<th style=\"width:1%;\">$functional_term_short</th>
</tr>
";
while ($tablerow = mysqli_fetch_assoc($writeup)) {
// determine effective icon
if($tablerow["functional"]==1) {
$funcind="<img src=\"icons/tick.png\" border=\"0\" title=\"$functional_yes\" alt=\"$functional_yes_short\">";
} else {
$funcind="<img src=\"icons/cross.png\" border=\"0\" title=\"$functional_no\" alt=\"$functional_no_short\">";
}
// convert device number to name
$dname=dblookup($drs_db,"devices","id","name",$tablerow["device"]);
// convert subsystem number to name
$ssname=dblookup($drs_db,"subsystems","id","name",$tablerow["subsystem"]);
// convert subsystem number to description
$ssdesc=dblookup($drs_db,"subsystems","id","description",$tablerow["subsystem"]);
// determine values for when discovered
$whendiscdesc=mysqli_fetch_row(mysqli_query($drs_db,"select whendiscovereddesc from discovered where id=\"{$tablerow['discovered']}\""))[0];
$whendiscname=mysqli_fetch_row(mysqli_query($drs_db,"select whendiscoveredname from discovered where id=\"{$tablerow['discovered']}\""))[0];
$disc_txt="{$tablerow['discrepancy_text']}";
// determine if this is a member of a group
$member_qry=mysqli_query($drs_db,"select linkgroup from links where writeupid=\"{$tablerow['id']}\"");
$is_member=mysqli_num_rows($member_qry);
if ($is_member) {
$group_count=$is_member;
$member_group=mysqli_fetch_row($member_qry)[0];
$member_group_name=dblookup($drs_db,"groups","id","name",$member_group);
if ($member_group_name) {
$imgtitle="Member of group: $member_group_name";
} else {
$imgtitle="Member of group ID: $member_group";
}
if ($group_count == 1) {
$disc_txt=$disc_txt."<div align=\"right\"><a href=\"groups.php?group=$member_group\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"$imgtitle\"></a></div>";
} else {
$disc_txt=$disc_txt."<div align=\"right\"><a href=\"writeupdetail.php?id={$tablerow['id']}\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"Member of $group_count groups. Click here to view.\"></a></div>";
}
}
// print table row
printf(
"<tr>
<td align=\"center\" valign=\"top\"><a href=\"writeupdetail.php?id=%s\" title=\"View or change details of this writeup\">%s</a></td>
<td valign=\"top\">%s</td>
<td valign=\"top\"><font title=\"%s\">%s</font></td>
<td valign=\"top\">%s</td>
<td valign=\"top\"><font title=\"%s\">%s</td>
<td valign=\"top\">%s</td>
<td valign=\"top\">%s</td>
<td align=\"center\" valign=\"top\">%s</td>
</tr>\n",
$tablerow["id"],$tablerow["id"],
$tablerow["report_date"],
$whendiscdesc, $whendiscname,
$dname,
$ssdesc, $ssname,
$tablerow["reported_by"],
$disc_txt,
$funcind
);
}
echo "</table>\n";
} else {
if (array_key_exists('showyesterday',$incoming)) {
$datespec="yesterday";
} elseif (array_key_exists('show7day',$incoming)) {
$datespec="the last 7 days";
} elseif (array_key_exists('show30day',$incoming)) {
$datespec="the last 30 days";
} else {
$datespec="today";
}
echo "<b>No open writeups for $datespec.</b>";
}
}
function viewtable($start_date,$end_date,$print,$drs_db,$viewtype="summary",$role) { function viewtable($start_date,$end_date,$print,$drs_db,$viewtype="summary",$role) {
// grab some important global variables // grab some important global variables
@@ -254,7 +130,7 @@ function viewtable($start_date,$end_date,$print,$drs_db,$viewtype="summary",$rol
} }
$writeup=mysqli_query($drs_db,"select * from writeups where report_date between \"$start_date\" and \"$end_date\" order by report_date desc,report_time desc"); $writeup=mysqli_query($drs_db,"select * from writeups where report_date between \"$start_date\" and \"$end_date\" order by report_date desc,report_time desc");
if (mysqli_num_rows($writeup)) { if (mysqli_num_rows($writeup)) {
$now=date("H:i l"); $as_of=date("H:i l");
if ($viewtype == "summary") { if ($viewtype == "summary") {
if ($role) { if ($role) {
$selcol="<th style=\"width:1%;\">Sel</th>"; $selcol="<th style=\"width:1%;\">Sel</th>";
@@ -262,7 +138,7 @@ function viewtable($start_date,$end_date,$print,$drs_db,$viewtype="summary",$rol
$selcol=""; $selcol="";
} }
echo " echo "
<font color=\"red\">As of $now</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=\"-1\">Newest at top</font><br> <font color=\"red\">As of $as_of</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=\"-1\">Newest at top</font><br>
<table border=\"1\" cellpadding=\"5\" style=\"width:100%;\"> <table border=\"1\" cellpadding=\"5\" style=\"width:100%;\">
<tr> <tr>
$selcol $selcol
@@ -355,7 +231,7 @@ function viewtable($start_date,$end_date,$print,$drs_db,$viewtype="summary",$rol
echo "</table>\n"; echo "</table>\n";
} elseif ($viewtype == "detail") { } elseif ($viewtype == "detail") {
echo " echo "
<font color=\"red\">As of $now</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=\"-1\">Newest at top</font><br><br> <font color=\"red\">As of $as_of</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=\"-1\">Newest at top</font><br><br>
<table border=\"0\"><tr><td> <table border=\"0\"><tr><td>
"; ";
while ($tablerow = mysqli_fetch_assoc($writeup)) { while ($tablerow = mysqli_fetch_assoc($writeup)) {
@@ -396,7 +272,6 @@ function viewtable($start_date,$end_date,$print,$drs_db,$viewtype="summary",$rol
} }
// use default date values if not supplied // use default date values if not supplied
$today = date("Y-m-d");
if (!isset($start_date)) $start_date=$today; if (!isset($start_date)) $start_date=$today;
if (!isset($end_date)) $end_date=$today; if (!isset($end_date)) $end_date=$today;
if (isset($showtoday)) { if (isset($showtoday)) {
@@ -407,14 +282,6 @@ if (isset($showyesterday)) {
$start_date=mysqli_fetch_row(mysqli_query($drs_db,"select date_sub(curdate(),interval 1 day)"))[0]; $start_date=mysqli_fetch_row(mysqli_query($drs_db,"select date_sub(curdate(),interval 1 day)"))[0];
$end_date=$start_date; $end_date=$start_date;
} }
if (isset($show7day)) {
$start_date=mysqli_fetch_row(mysqli_query($drs_db,"select date_sub(curdate(),interval 7 day)"))[0];
$end_date=$today;
}
if (isset($show30day)) {
$start_date=mysqli_fetch_row(mysqli_query($drs_db,"select date_sub(curdate(),interval 30 day)"))[0];
$end_date=$today;
}
if (isset($showdays) && $showdays != "") { if (isset($showdays) && $showdays != "") {
$minmaxqry=mysqli_query($drs_db,"select min(report_date),max(report_date) from writeups"); $minmaxqry=mysqli_query($drs_db,"select min(report_date),max(report_date) from writeups");
@@ -439,11 +306,7 @@ if (isset($showdays) && $showdays != "") {
} }
} }
if (isset($view)) { $pgtitle="Recent Writeups";
$pgtitle="Recent Writeups";
} else {
$pgtitle="Open Writeups";
}
framework("begin","$appname",$pgtitle,$print); framework("begin","$appname",$pgtitle,$print);
@@ -500,13 +363,10 @@ if (isset($addtogroup)) {
} }
if (!isset($viewtype)) $viewtype="summary"; if (!isset($viewtype)) $viewtype="summary";
if (isset($view)) {
// show writeup table // show writeup table
viewtable($start_date,$end_date,$print,$drs_db,$viewtype,$role); viewtable($start_date,$end_date,$print,$drs_db,$viewtype,$role);
} else {
// show open table
opentable($incoming,$start_date,$end_date,$print,$drs_db,$viewtype);
}
echo "<br>"; echo "<br>";
banner($print); banner($print);

81
files-update.sh Normal file
View File

@@ -0,0 +1,81 @@
#!/bin/bash
# files-update.sh
if [[ $1 == "" ]]
then
echo "This script requires an install path, but none was specified. Aborting."
exit 1
fi
install_path=$1
# ---------- version 1.0.0 -------------
# Initial release
# --------------------------------------
# ---------- version 1.1.0 -------------
# Change global database value from $mts_db to $drs_db
sed -i "s/mts_db/drs_db/g" $install_path/db.php
# ---------------------------------------
# ---------- version 1.1.1 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.1.2 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.2.0 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.3.0 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.3.1 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.3.2 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.3.3 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.4.0 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.4.1 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.4.2 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.4.3 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.4.4 -------------
# Nothing to do for this version
# --------------------------------------
# ---------- version 1.4.5 -------------
# Add AllowOverride Options to the apache conf-available file
install_loc=$(basename $install_path)
if ! grep -q "AllowOverride Options" /etc/apache2/conf-available/$install_loc.conf
then
sed -i '/^<Directory/a\ AllowOverride Options' /etc/apache2/conf-available/$install_loc.conf
systemctl reload apache2
fi
# --------------------------------------
# ---------- version 1.4.6 -------------
# Nothing to do for this version
# --------------------------------------

View File

@@ -2,386 +2,175 @@
# install.sh # install.sh
# OpenDRS Online Discrepancy Reporting System # OpenDRS Online Discrepancy Reporting System
# Copyright (C) 2024 Rod Wright # Copyright (C) 2026 Rod Wright
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
APP_NAME="OpenDRS"
DRS_VERSION="1.4.2" DEFAULT_DB_NAME="opendrs"
APP_VERSION="1.4.6"
DOC_ROOT="/var/www" DOC_ROOT="/var/www"
INSTALL_LOC="opendrs" INSTALL_LOC="opendrs"
APACHE_USER="www-data"
APACHE_GROUP="www-data"
APACHE_CONF_DIR="/etc/apache2/conf-available" APACHE_CONF_DIR="/etc/apache2/conf-available"
BACKUP_DIR="opendrs-previous-installation" BACKUP_DIR="opendrs-previous-installation"
LANDING_PAGE="writeups.php"
CONFIG_TABLE="config"
CONFIG_NAME_COLUMN="name"
CONFIG_VALUE_COLUMN="value"
CONFIG_DEFAULT_COLUMN="defaultvalue"
function privilege_check() {
# test for superuser rights
if [[ $EUID -ne 0 ]]; then
echo "This script must be run with superuser privileges. Try sudo $0"
exit 1
fi
}
function get_new_password() {
# Stores new password in the variable $newpassword
pwgood=false
while ! $pwgood
do
read -p "New password: " -s -r newpassword
echo ""
read -p "Re-type new password: " -s -r rnewpw
echo ""
if [ "$newpassword" = "" -o "$rnewpw" = "" ]
then
echo "Password cannot be blank. Please try again."
echo ""
elif [ "$newpassword" != "$rnewpw" ]
then
echo "Passwords do not match. Please try again."
echo ""
else
pwgood=true
fi
done
}
function install_required_packages() {
# Positional parameters supplied to this function should be quoted
# apt-get installable package names.
# Note: Each package supplied to the for loop below can either be a
# single package name or a list of alternatives separated by the word "or".
# If supplying a list, the last one in the list will be the one that
# gets installed.
for prereq in "$@"
do
echo "Checking for $prereq installation..."
gpattern=""
for pkg_option in $(echo $prereq)
do
if [ "$pkg_option" != "or" ]
then
gpattern+=" -e $pkg_option"
preferred_pkg=$pkg_option
fi
done
if dpkg -l|grep $gpattern >/dev/null 2>&1
then
echo "$prereq is installed. Continuing."
else
echo "$APP_NAME requires $prereq, but it doesn't seem to be installed. "
echo -n "Install $preferred_pkg now? [Y/n]: "
read reqinstall
if [ "$reqinstall" = "N" -o "$reqinstall" = "n" ]
then
echo "$APP_NAME requires $prereq, but you have elected not to install it."
echo "Installation cannot continue."
abort_exit
else
echo ""
echo "Proceeding with $preferred_pkg installation"
echo ""
sleep 3
apt-get install -y $preferred_pkg
echo ""
echo "Finished with $preferred_pkg installation"
echo ""
sleep 3
fi
fi
done
}
function clean_exit() {
# Re-enable unattended-upgrades
if $restart_uu; then systemctl start unattended-upgrades; fi
exit 0
}
function abort_exit() {
# Re-enable unattended-upgrades
if $restart_uu; then systemctl start unattended-upgrades; fi
exit 1
}
function spinner() {
local pid="$1"
local delay="0.1"
local spinstr='|/-\\'
local i=0
while ps -p "$pid" > /dev/null; do
i=$(( (i+1) % 4 ))
printf "\r[%c]" "${spinstr:$i:1}"
sleep "$delay"
done
printf "\r \r" # Clear the spinner line
}
# test for superuser rights # test for superuser rights
if [[ $EUID -ne 0 ]]; then privilege_check
echo "This script must be run with superuser privileges. Try sudo ./install.sh"
exit 1
fi
echo ""
echo ""
echo "* * * * * Welcome to $APP_NAME $APP_VERSION Installation * * * * *"
echo ""
echo ""
sleep 3
echo "Preparing for installation. Please wait..."
# Prevent unattended-upgrades from interfering # Prevent unattended-upgrades from interfering
restart_uu=false restart_uu=false
while systemctl status unattended-upgrades >/dev/null 2>&1 while dpkg -l|grep unattended-upgrades >/dev/null 2>&1
do do
systemctl stop unattended-upgrades systemctl stop unattended-upgrades
sleep 5 sleep 5
restart_uu=true restart_uu=true
done done
echo ""
echo "" apt-get update -qq
echo "* * * * * Welcome to OpenDRS $DRS_VERSION Installation * * * * *"
echo ""
echo ""
echo "Just press enter at the prompts to accept the defaults shown."
echo ""
# Check for prerequisites and prompt to install # Check for prerequisites and prompt to install
echo "Checking for prerequisites..." echo "Checking for required packages..."
echo "" echo ""
install_required_packages "apache2" "php" "mysql-server or mariadb-server" "php-mysql" "uuid-runtime"
echo "" echo ""
echo " Checking for apache2 installation..." echo "Finished required package installation."
echo ""
if dpkg -l|grep apache2 >/dev/null 2>&1
then
echo ""
echo "apache2 is installed. Continuing."
echo ""
else
echo "OpenDRS requires the apache2 http server, but it doesn't seem"
echo -n "to be installed. Install it now? [Y/n]: "
read reqinstall
if [ "$reqinstall" = "N" -o "$reqinstall" = "n" ]
then
echo "OpenDRS requires apache2, but you have elected not to install it."
echo "Installation cannot continue."
exit 1
else
echo ""
echo "###################################################################"
echo ""
echo "Proceeding with apache2 installation"
echo ""
echo "###################################################################"
sleep 3
apt-get install -y apache2
echo ""
echo "###################################################################"
echo ""
echo "Finished with apache2 installation"
echo ""
echo "###################################################################"
sleep 3
fi
fi
echo ""
echo " Checking for php installation..."
echo ""
if dpkg -l|grep php >/dev/null 2>&1
then
echo ""
echo "php is installed. Continuing."
echo ""
else
echo ""
echo ""
echo "OpenDRS requires php, but it doesn't seem to be installed."
echo -n "Install it now? [Y/n]: "
read reqinstall
if [ "$reqinstall" = "N" -o "$reqinstall" = "n" ]
then
echo "OpenDRS requires php, but you have elected not to install it."
echo "Installation cannot continue."
exit 1
else
echo ""
echo "###################################################################"
echo ""
echo "Proceeding with php installation"
echo ""
echo "###################################################################"
sleep 3
apt-get install -y php
echo ""
echo "###################################################################"
echo ""
echo "Finished with php installation"
echo ""
echo "###################################################################"
sleep 3
fi
fi
echo ""
echo " Checking for mariadb or mysql installation..."
echo "" echo ""
if dpkg -l|grep mariadb-server >/dev/null 2>&1 # Determine the correct Apache2 user and group
then APACHE_USER=$(grep APACHE_RUN_USER /etc/apache2/envvars | cut -d= -f2)
echo "" APACHE_GROUP=$(grep APACHE_RUN_GROUP /etc/apache2/envvars | cut -d= -f2)
echo "mariadb-server is installed. Continuing." httpd_user_group="$APACHE_USER:$APACHE_GROUP"
echo ""
elif dpkg -l|grep mysql-server >/dev/null 2>&1
then
echo ""
echo "mysql-server is installed. Continuing."
echo ""
else
echo ""
echo ""
echo "OpenDRS requires either mariadb or mysql server, but neither seem"
echo -n "to be installed. Install mariadb-server now? [Y/n]: "
read reqinstall
if [ "$reqinstall" = "N" -o "$reqinstall" = "n" ]
then
echo "OpenDRS requires either mariadb or mysql server, but you have elected not to install it."
echo "Installation cannot continue."
exit 1
else
echo ""
echo "###################################################################"
echo ""
echo "Proceeding with mariadb-server installation"
echo ""
echo "###################################################################"
sleep 3
apt-get install -y mariadb-server
echo ""
echo "###################################################################"
echo ""
echo "Finished with mariadb-server installation"
echo ""
echo "###################################################################"
sleep 3
echo ""
echo "###################################################################"
echo ""
echo "Proceeding with mariadb configuration"
echo ""
echo "###################################################################"
sleep 3
echo ""
echo "Configuring the MariaDB installation. There will be some more prompts:"
echo ""
echo "- You'll be prompted for the current password for the root user. You've"
echo " just installed MariaDB and you haven't set one yet, so just press enter."
echo ""
echo "- You'll be prompted to switch to unix_socket authentication. Answer Y."
echo ""
echo "- You'll be prompted to change the root password. Answer Y and enter a password."
echo " Note that this is just the password for the MariaDB root user, not the root login."
echo " DO NOT FORGET THIS PASSWORD. You'll need it later during OpenDRS install."
echo ""
echo "- Answer Y to remove anonymous users, disallow root login remotely, remove"
echo " test database and access, and reload privilege tables."
echo ""
echo -n "Press enter to proceed."
read continueok
echo ""
mysql_secure_installation
echo ""
echo "###################################################################"
echo ""
echo "Finished with mariadb configuration."
echo ""
echo "###################################################################"
sleep 3
fi
fi
echo ""
echo " Checking for phpmyadmin installation..."
echo ""
if dpkg -l|grep phpmyadmin >/dev/null 2>&1
then
echo ""
echo "phpmyadmin is installed. Continuing."
echo ""
else
echo "phpmyadmin is optional, but doesn't seem to be installed."
echo "It is an optional package that enables administration of the mysql/mariadb"
echo "database server using a friendly GUI. It is highly recommended."
echo "Note that this has the potential to be a security risk, especially"
echo "if your passwords aren't sufficiently strong."
echo -n "Install it now? [Y/n]: "
read reqinstall
if [ "$reqinstall" = "N" -o "$reqinstall" = "n" ]
then
echo "Proceeding without installing phpmyadmin. Database administration"
echo "will require the use of the mysql/mariadb command line tools."
else
echo ""
echo "###################################################################"
echo ""
echo "Proceeding with phpmyadmin installation"
echo ""
echo "###################################################################"
sleep 3
echo ""
echo "During the following installation of phpmyadmin:"
echo ""
echo "- Select apache2 as the web server to configure automatically."
echo ""
echo "- Choose Yes when prompted to install phpmyadmin database and allow it to"
echo " generate a random password(leave the field blank)."
echo ""
echo -n "Press enter to continue."
read continueok
echo ""
apt-get install -y phpmyadmin
echo ""
echo ""
echo "You can now access phpmyadmin using a web browser pointed to:"
echo "http://$HOSTNAME/phpmyadmin"
echo "*** WARNING!! this url is accessible via unencrypted (http), not"
echo "encrypted SSL (https) connections. This is a huge security risk"
echo "since the username and password you enter will be sent in the"
echo "clear for any potential attacker to sniff! You should enable"
echo "redirection to https for phpmyadmin in your apache2 configuration."
echo ""
echo -n "Press enter to continue."
read continueok
echo ""
echo "###################################################################"
echo ""
echo "Finished with phpmyadmin installation"
echo ""
echo "###################################################################"
sleep 3
fi
fi
echo ""
echo " Checking for webmin installation..."
echo ""
if dpkg -l|grep webmin >/dev/null 2>&1
then
echo ""
echo "webmin is installed. Continuing."
echo ""
else
echo "webmin is optional, but doesn't seem to be installed."
echo "It is an optional package that enables system administration"
echo "using a friendly GUI. It is highly recommended, especially for"
echo "headless servers without any way to log in directly on the machine."
echo "Note that this has the potential to be a security risk, especially"
echo "if your passwords aren't sufficiently strong."
echo -n "Install it now? [Y/n]: "
read reqinstall
if [ "$reqinstall" = "N" -o "$reqinstall" = "n" ]
then
echo "Proceeding without installing webmin. System administration"
echo "will require login to the server either directly or via ssh."
else
echo ""
echo "###################################################################"
echo ""
echo "Proceeding with webmin installation"
echo ""
echo "###################################################################"
sleep 3
echo "Installing webmin..."
skipwebmin="false"
if ! curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
then
echo "Warning: failed to download Webmin repo setup script."
echo -n "Ignore and [c]ontinue or [A]bort? [c/A]: "
read wmfailchoice
if [ "$wmfailchoice" = "C" -o "$wmfailchoice" = "c" ]
then
skipwebmin="true"
echo "Continuing without installing Webmin. You should investigate the failure"
echo "and install Webmin manually after the server is set up if you would like"
echo "to be able to manage the server from another computer with a GUI instead"
echo "of through ssh only."
echo -n "Press enter to continue."
read continueok
echo ""
fi
fi
if [ "$skipwebmin" = "false" ]
then
sh setup-repos.sh -f
apt-get install -y --install-recommends webmin
fi
echo "...done."
echo ""
echo "You can now access webmin using a web browser pointed to:"
echo "https://$HOSTNAME:10000"
echo "Unless you have obtained valid ssl certificates, your server is"
echo "using self-signed certs. This is not necessarily a problem, but"
echo "your browser will complain. You can tell the browser to accept the"
echo "self signed certificates and the traffic will still be encrypted,"
echo "however you may be vulnerable to man-in-the-middle attacks. You can"
echo "get free valid certificates through LetsEncrypt."
echo "See http://letsencrypt.org for more information."
echo ""
echo -n "Press enter to continue."
read continueok
echo ""
echo "###################################################################"
echo ""
echo "Finished with webmin installation"
echo ""
echo "###################################################################"
sleep 3
fi
fi
echo ""
echo " Checking for uuidgen installation..."
echo ""
if uuidgen 2>&1
then
echo ""
echo "uuidgen is installed. Continuing."
echo ""
else
echo ""
echo ""
echo "OpenDRS requires uuidgen, but it doesn't seem to be installed."
echo -n "Install it now? [Y/n]: "
read reqinstall
if [ "$reqinstall" = "N" -o "$reqinstall" = "n" ]
then
echo "OpenDRS requires uuidgen, but you have elected not to install it."
echo "Installation cannot continue."
exit 1
else
echo ""
echo "###################################################################"
echo ""
echo "Proceeding with uuidgen installation"
echo ""
echo "###################################################################"
sleep 3
apt-get install -y uuid-runtime
echo ""
echo "###################################################################"
echo ""
echo "Finished with uuidgen installation"
echo ""
echo "###################################################################"
sleep 3
fi
fi
echo ""
echo ""
echo "Finished checking for and installing prerequisites..."
echo ""
echo ""
sleep 3 sleep 3
# prompt for install location # prompt for install location
echo "Where would you like to install this version of OpenDRS? This should" echo "Where would you like to install this version of $APP_NAME? This should"
echo "be somewhere the webserver can find it. If you don't know, refer to the" echo "be somewhere the webserver can find it. If you don't know, refer to the"
echo "webserver's documentation and check the server's configuration files." echo "webserver's documentation and check the server's configuration files."
echo "Note that this is where the directory containing OpenDRS's files will be" echo "Note that this is where the directory containing $APP_NAME's files will be"
echo "created." echo "created."
echo -n "Enter the webserver's install location [$DOC_ROOT]:" echo -n "Enter the webserver's install location [$DOC_ROOT]:"
read doc_root_in read doc_root_in
echo "" echo ""
echo -n "Enter name of OpenDRS installation directory [$INSTALL_LOC] :" echo -n "Enter name of $APP_NAME installation directory [$INSTALL_LOC] :"
read install_loc_in read install_loc_in
echo "" echo ""
if [ "$doc_root_in" = "" ] if [ "$doc_root_in" = "" ]
@@ -395,14 +184,14 @@ fi
install_path="$doc_root_in/$install_loc_in" install_path="$doc_root_in/$install_loc_in"
if [ -d "$install_path" ] if [ -d "$install_path" ]
then then
echo "The installation path you chose already exists."
# Install path exists. # Install path exists.
if [ -e "$install_path/db.php" ] if [ -e "$install_path/db.php" ]
then then
# A db.php file was found in the install path # A db.php file was found in the install path
if grep -q -e "OpenDRS" -e "OpenMTS" $install_path/db.php if grep -q -e "$APP_NAME" $install_path/db.php
then then
# the db.php file is part of an OpenDRS/OpenMTS installation # the db.php file is part of a previous installation
echo "The installation path you chose already exists."
echo "Would you like to upgrade an existing installation or cancel " echo "Would you like to upgrade an existing installation or cancel "
echo "and restart the install using a new installation location." echo "and restart the install using a new installation location."
echo -n "[U]pgrade or [C]ancel? [C] :" echo -n "[U]pgrade or [C]ancel? [C] :"
@@ -410,106 +199,113 @@ then
if [ "$upgrade_choice" = "U" -o "$upgrade_choice" = "u" ] # Upgrade chosen if [ "$upgrade_choice" = "U" -o "$upgrade_choice" = "u" ] # Upgrade chosen
then then
# proceed with upgrade # proceed with upgrade
mkdir -p backups
operation="upgraded" operation="upgraded"
curr_dbname=$(grep dbname $install_path/db.php | head -1 | cut -d\" -f2)
# create mysql option file with data for this installation
mysql_opt_file=$(mktemp --tmpdir=/run/shm/)
echo "[client]" > $mysql_opt_file
echo "user = $(grep username $install_path/db.php | head -1 | cut -d\" -f2)" >> $mysql_opt_file
echo "password = $(grep dbpass $install_path/db.php | head -1 | cut -d\" -f2)" >> $mysql_opt_file
echo "" >> $mysql_opt_file
echo "[mysql]" > $mysql_opt_file
echo "database = $curr_dbname" >> $mysql_opt_file
echo "batch" >> $mysql_opt_file
echo "disable-column-names" >> $mysql_opt_file
# back up existing database # back up existing database
echo "Backing up the current database to the package directory." echo "Backing up the current database to the package directory."
curr_dbname=`grep dbname $install_path/db.php | head -1 | cut -d "\"" -f2` mysqldump --defaults-extra-file=$mysql_opt_file --no-tablespaces $curr_dbname > backups/$curr_dbname-$(date +%Y-%m-%d_%H:%M:%S)-backup.sql
curr_username=`grep username $install_path/db.php | head -1 | cut -d "\"" -f2`
curr_dbpass=`grep dbpass $install_path/db.php | head -1 | cut -d "\"" -f2`
export MYSQL_PWD="$curr_dbpass"
mysqldump --no-tablespaces -u"$curr_username" $curr_dbname > $curr_dbname-`date +%Y-%m-%d_%H:%M:%S`-backup.sql
# back up existing installation # back up existing installation
echo "Backing up current installation to the package directory." echo "Backing up current installation to the package directory."
cp -R $install_path $install_loc_in-`date +%Y-%m-%d_%H:%M:%S`-backup cp -R $install_path backups/$install_loc_in-`date +%Y-%m-%d_%H:%M:%S`-backup
# delete all existing installation files except db.php # delete all existing installation files except db.php
find $install_path/ -mindepth 1 -not -name 'db.php' -delete find $install_path/ -mindepth 1 -not -name 'db.php' -delete
# apply database updates
mysql -u"$curr_username" -f -D $curr_dbname < opendrs-update.sql >/dev/null 2>&1 echo "Performing database updates. This may take a while..."
# apply updates to existing db.php # apply database updates from sql file
bash ./opendrs-update.sh $install_path (mysql --defaults-extra-file=$mysql_opt_file --force < database-update.sql >/dev/null 2>&1) &
task_pid=$!
spinner $task_pid
# apply database updates via script
(bash ./database-update.sh $mysql_opt_file) &
task_pid=$!
spinner $task_pid
echo "... finished with database updates."
rm -f $mysql_opt_file
# apply updates to other files
bash ./files-update.sh $install_path
# copy distribution to install location # copy distribution to install location
echo "Installing distribution . . ." echo "Installing distribution . . ."
cp -R distfiles/* $install_path cp -R distfiles/* $install_path
# set symlink for jquery-ui
if [ ! -L "$install_path/jquery-ui" ] if [ ! -L "$install_path/jquery-ui" ]
then then
ln -s $install_path/jquery-ui* $install_path/jquery-ui ln -s $install_path/jquery-ui* $install_path/jquery-ui
fi fi
# set symlink for index.php
if [ ! -L "$install_path/index.php" ] if [ ! -L "$install_path/index.php" ]
then then
ln -s $install_path/writeups.php $install_path/index.php ln -s $install_path/$LANDING_PAGE $install_path/index.php
fi fi
# add the local timezone to .htaccess
local_tz=$(timedatectl show -p Timezone|cut -d= -f2)
echo "Your local timezone is $local_tz"
echo "php_value date.timezone \"$local_tz\"">$install_path/.htaccess
# set ownership # set ownership
echo "In order to set the ownership correctly, we need to know the user and"
echo "group that the webserver expects its files to be owned by. This is"
echo "usually not the root account. Refer to the ownership of other files in"
echo "your webserver's document tree to see what this should be."
echo "Enter the user and group separated by a colon (username:groupname)."
echo "Enter the user:group of the OpenDRS installation"
echo -n "directory [$APACHE_USER:$APACHE_GROUP] :"
read httpd_user_group
if [ "$httpd_user_group" = "" ]
then
httpd_user_group="$APACHE_USER:$APACHE_GROUP"
fi
echo "" echo ""
echo "Setting file ownership . . ." echo "Setting file ownership . . ."
chown -R $httpd_user_group $install_path chown -R $httpd_user_group $install_path
else else
echo "Cancelling installation" echo "Cancelling installation"
exit abort_exit
fi fi
else else
# This was a mistake. Exit now to avoid clobbering another app. # This was a mistake. Exit now to avoid clobbering another app.
echo "The installation directory you chose exists, but no previous installation" echo "The installation directory you chose exists, but no previous installation"
echo "of OpenDRS was found. Please investigate the situation. Aborting now." echo "of $APP_NAME was found. Please investigate the situation. Aborting now."
exit 1 abort_exit
fi fi
else else
# This was a mistake. Exit now to avoid clobbering another app. # This was a mistake. Exit now to avoid clobbering another app.
echo "The installation directory you chose exists, but no previous installation" echo "The installation directory you chose exists, but no previous installation"
echo "of OpenDRS was found. Please investigate the situation. Aborting now." echo "of $APP_NAME was found."
exit 1 echo ""
echo " CAUTION: If there is anything else in this directory, it will be deleted!"
echo ""
echo "Would you like to use this location for a fresh installation or quit and"
echo "investigate further? It's probably safest to quit and investigate."
proceed=""
while [[ $proceed != "P" && $proceed != "p" && $proceed != "Q" && $proceed != "q" ]]
do
read proceed -p "[P]roceed with new install or [Q]uit? : "
done
if [[ $proceed == "Q" || $proceed == "q" ]]
then
abort_exit
fi
fi fi
else else
# This is a fresh install # This is a fresh install
operation="installed" operation="installed"
# prompt for mysql information
bad_mysql_adm=true
while $bad_mysql_adm
do
admintestdb="drsadm`date +%Y%m%d`"
echo "We need to know the username and password of a MySQL administrator"
echo "to be able to create the database and user for OpenDRS. Note that this"
echo "is not necessarily the same as the login and password for the computer."
echo -n "MySQL admin username: "
read mysql_adm_user
echo "" echo ""
echo -n "MySQL admin password: " echo "What would you like to call this installation of $APP_NAME? If you accept"
read -s mysql_adm_pass echo "the default, it will be called $APP_NAME. If you will be running multiple"
export MYSQL_PWD="$mysql_adm_pass" echo "instances of $APP_NAME on this server, you should choose a distinctive name."
if mysql -u"$mysql_adm_user" -e "create database $admintestdb;drop database $admintestdb"
then
bad_mysql_adm=false
else
echo "ERROR: Either the username/password you supplied were incorrect or the user"
echo -n "is not a MySQL administrator. Try again? [Y/N]: "
read admtry
if [ "$admtry" != "Y" -o "$admtry" != "y" ]
then
exit
fi
fi
done
echo ""
echo "What would you like to call this installation of OpenDRS? If you accept"
echo "the default, it will be called OpenDRS. If you will be running multiple"
echo "instances of OpenDRS on this server, you should choose a distinctive name."
echo "This can be changed later in the application itself." echo "This can be changed later in the application itself."
echo -n "Installation name [OpenDRS]: " echo -n "Installation name [$APP_NAME]: "
read new_inst_name read new_inst_name
if [ "$new_inst_name" = "" ] if [ "$new_inst_name" = "" ]
then then
new_inst_name="OpenDRS" new_inst_name="$APP_NAME"
fi fi
echo "" echo ""
@@ -517,20 +313,19 @@ else
db_create_fail=true db_create_fail=true
while $db_create_fail while $db_create_fail
do do
echo "What would you like to call the database for this installation of OpenDRS?" echo "What would you like to call the database for this installation of $APP_NAME?"
echo "If you accept the default, it will be called opendrs. Again, this is fine" echo "If you accept the default, it will be called $DEFAULT_DB_NAME. Again, this is fine"
echo "if you will only be running this one instance, but if you will be running" echo "if you will only be running this one instance, but if you will be running"
echo "multiple instances of OpenDRS on this server, you should choose a " echo "multiple instances of $APP_NAME on this server, you should choose a "
echo "distinctive name." echo "distinctive name."
echo -n "database name [opendrs]: " echo -n "database name [$DEFAULT_DB_NAME]: "
read new_db_name read new_db_name
if [ "$new_db_name" = "" ] if [ "$new_db_name" = "" ]
then then
new_db_name=opendrs new_db_name=$DEFAULT_DB_NAME
fi fi
echo "" echo ""
export MYSQL_PWD="$mysql_adm_pass" if mysql -e "create database $new_db_name"
if mysql -u"$mysql_adm_user" -e "create database $new_db_name"
then then
db_create_fail=false db_create_fail=false
else else
@@ -540,26 +335,28 @@ else
read dbcreatetry read dbcreatetry
if [ "$dbcreatetry" != "Y" -o "$dbcreatetry" != "y" ] if [ "$dbcreatetry" != "Y" -o "$dbcreatetry" != "y" ]
then then
exit abort_exit
fi fi
fi fi
done done
# Create user and give rights to database # Create user and give rights to database
drs_user="$new_db_name`date +%Y%m%d%H%M%S`" db_user="$new_db_name`date +%Y%m%d%H%M%S`"
drs_pass=`uuidgen` db_pass=`uuidgen`
export MYSQL_PWD="$mysql_adm_pass" mysql -e "create user if not exists '$db_user'@'localhost' identified by '$db_pass'"
mysql -u"$mysql_adm_user" -e "create user if not exists '$drs_user'@'localhost' identified by '$drs_pass'" mysql -e "grant all on $new_db_name.* to '$db_user'@'localhost'"
mysql -u"$mysql_adm_user" -e "grant all on $new_db_name.* to '$drs_user'@'localhost'" mysql -e "flush privileges"
mysql -u"$mysql_adm_user" -e "flush privileges"
# Populate initial database # Populate initial database
mysql -u"$mysql_adm_user" $new_db_name < opendrs-initial.sql mysql $new_db_name < database-initial.sql
# Set the installation name # Set the installation name
export MYSQL_PWD="$drs_pass" export MYSQL_PWD="$db_pass"
mysql -u"$drs_user" $new_db_name -e "update config set value=\"$new_inst_name\",defaultvalue=\"$new_inst_name\" where name=\"app_name\"" mysql -u"$db_user" $new_db_name -e "update $CONFIG_TABLE set $CONFIG_VALUE_COLUMN=\"$new_inst_name\" where $CONFIG_NAME_COLUMN=\"app_name\""
if [ "$CONFIG_DEFAULT_COLUMN" != "" ]
then
mysql -u"$db_user" $new_db_name -e "update $CONFIG_TABLE set $CONFIG_DEFAULT_COLUMN=\"$new_inst_name\" where $CONFIG_NAME_COLUMN=\"app_name\""
fi
# Create install path # Create install path
echo "Creating installation directory . . ." echo "Creating installation directory . . ."
mkdir $install_path mkdir $install_path
@@ -569,8 +366,9 @@ else
then then
cp db.php.template $install_path/db.php cp db.php.template $install_path/db.php
sed -i "s/DBNAME/$new_db_name/g" $install_path/db.php sed -i "s/DBNAME/$new_db_name/g" $install_path/db.php
sed -i "s/DBUSER/$drs_user/g" $install_path/db.php sed -i "s/DBUSER/$db_user/g" $install_path/db.php
sed -i "s/DBPASS/$drs_pass/g" $install_path/db.php sed -i "s/DBPASS/$db_pass/g" $install_path/db.php
sed -i "s/APPNAME/$APP_NAME/g" $install_path/db.php
fi fi
# copy distribution to install location # copy distribution to install location
@@ -582,21 +380,14 @@ else
fi fi
if [ ! -L "$install_path/index.php" ] if [ ! -L "$install_path/index.php" ]
then then
ln -s $install_path/writeups.php $install_path/index.php ln -s $install_path/$LANDING_PAGE $install_path/index.php
fi fi
# add the local timezone to .htaccess
local_tz=$(timedatectl show -p Timezone|cut -d= -f2)
echo "Your local timezone is $local_tz"
echo "php_value date.timezone \"$local_tz\"">$install_path/.htaccess
# set ownership # set ownership
echo "In order to set the ownership correctly, we need to know the user and"
echo "group that the webserver expects its files to be owned by. This is"
echo "usually not the root account. Refer to the ownership of other files in"
echo "your webserver's document tree to see what this should be."
echo "Enter the user and group separated by a colon (username:groupname)."
echo "Enter the user:group of the OpenDRS installation"
echo -n "directory [$APACHE_USER:$APACHE_GROUP] :"
read httpd_user_group
if [ "$httpd_user_group" = "" ]
then
httpd_user_group="$APACHE_USER:$APACHE_GROUP"
fi
echo "" echo ""
echo "Setting file ownership . . ." echo "Setting file ownership . . ."
chown -R $httpd_user_group $install_path chown -R $httpd_user_group $install_path
@@ -608,26 +399,27 @@ echo ""
echo "" echo ""
echo "" echo ""
echo "" echo ""
echo "OpenDRS has been $operation." echo "$APP_NAME has been $operation."
base_url=$install_loc_in base_url=$install_loc_in
if [ "$operation" = "installed" ] if [ "$operation" = "installed" ]
then then
echo "# OpenDRS default Apache configuration" > $APACHE_CONF_DIR/$base_url.conf echo "# $APP_NAME default Apache configuration" > $APACHE_CONF_DIR/$base_url.conf
echo "" >> $APACHE_CONF_DIR/$base_url.conf echo "" >> $APACHE_CONF_DIR/$base_url.conf
echo "Alias /$base_url $doc_root_in/$base_url" >> $APACHE_CONF_DIR/$base_url.conf echo "Alias /$base_url $doc_root_in/$base_url" >> $APACHE_CONF_DIR/$base_url.conf
echo "" >> $APACHE_CONF_DIR/$base_url.conf echo "" >> $APACHE_CONF_DIR/$base_url.conf
echo "<Directory $doc_root_in/$base_url>" >> $APACHE_CONF_DIR/$base_url.conf echo "<Directory $doc_root_in/$base_url>" >> $APACHE_CONF_DIR/$base_url.conf
echo " AllowOverride Options" >> $APACHE_CONF_DIR/$base_url.conf
echo " Options FollowSymLinks" >> $APACHE_CONF_DIR/$base_url.conf echo " Options FollowSymLinks" >> $APACHE_CONF_DIR/$base_url.conf
echo " DirectoryIndex index.php" >> $APACHE_CONF_DIR/$base_url.conf echo " DirectoryIndex index.php" >> $APACHE_CONF_DIR/$base_url.conf
echo "</Directory>" >> $APACHE_CONF_DIR/$base_url.conf echo "</Directory>" >> $APACHE_CONF_DIR/$base_url.conf
echo -n "The apache2 $base_url configuration must be enabled. Would you like to do that now? [Y] :" echo -n "The apache2 $base_url configuration must be enabled. Would you like to do that now? [Y/n] :"
read enconf read enconf
if [ "$enconf" = "" -o "$enconf" = "Y" -o "$enconf" = "y" ] if [ "$enconf" = "" -o "$enconf" = "Y" -o "$enconf" = "y" ]
then then
a2enconf $base_url.conf >/dev/null a2enconf $base_url.conf >/dev/null
service apache2 reload service apache2 reload
echo "You can now point a web browser to $base_url on your web server " echo "You can now point a web browser to $base_url on your web server "
echo "to set up and configure OpenDRS." echo "to set up and configure $APP_NAME."
echo "" echo ""
echo "IMPORTANT: The default login credentials for the initial admin user are:" echo "IMPORTANT: The default login credentials for the initial admin user are:"
echo "" echo ""
@@ -641,13 +433,12 @@ then
else else
echo "You will need to manually enable the configuration by executing:" echo "You will need to manually enable the configuration by executing:"
echo " a2enconf $base_url.conf" echo " a2enconf $base_url.conf"
echo " service apache2 reload" echo " systemctl reload apache2"
echo "as a superuser before it can be accessed." echo "as a superuser before it can be accessed."
fi fi
else else
echo "You can now point a web browser to $base_url on your web server " echo "You can now point a web browser to http://$HOSTNAME/$base_url "
echo "to use your upgraded OpenDRS." echo "to use your upgraded $APP_NAME."
fi fi
# Re-enable unattended-upgrades clean_exit
if $restart_uu; then systemctl start unattended-upgrades; fi

View File

@@ -1,8 +0,0 @@
# opendrs-update.sh
install_path=$1
# ---------- version 1.1.0 -------------
# Change global database value from $mts_db to $drs_db
sed -i "s/mts_db/drs_db/g" $install_path/db.php
# ---------------------------------------