Incorporated changes for release 1.3.0

This commit is contained in:
2026-02-24 19:59:54 -05:00
parent 3667c4358f
commit 6e5c6e03e3
38 changed files with 610 additions and 179 deletions

View File

@@ -1,5 +1,5 @@
OpenDRS - Online Discrepancy Reporting System
Copyright (C) 2021 Rod Wright
Copyright (C) 2022 Rod Wright
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
@@ -75,3 +75,19 @@ Changelog
- Added ability to customize the terminology used for Device,
Period, and Effective/Non-effective to make OpenDRS usable in
a wider range of applications.
1.3.0 - 2022-03-05
- Made several improvements to group functionality. The Writeup Groups
page now displays all groups in a table instead of individually
expandable sections. On the View Writeups and View Open Writeups
pages, if a writeup is a member of only one group, clicking the
icon will take you to the page for that group. If a writeup is
a member of multiple groups, clicking the icon will take you to
the detail page for that writeup where you can view or modify which
groups the writeup is a member of. On the Search page, you can
now choose which group(s) the results should include.
- Made some improvements to the installation process for Raspberry Pi
setup to accomodate the latest version of Raspberry Pi OS.
- If setting up as a Raspberry Pi terminal/server, included the option
to make the terminal a wireless access point if it connects to an
ethernet network.

View File

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

View File

@@ -2,7 +2,7 @@
/*
common.php
OpenDRS Online Discrepancy Reporting System
Copyright (C) 2021 Rod Wright
Copyright (C) 2022 Rod Wright
SPDX-License-Identifier: GPL-2.0
*/
@@ -595,7 +595,7 @@ function displaywriteup($id) {
if ($group_count == 1) {
$group_ind="<a href=\"groups.php?group=$member_group\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"$imgtitle\"></a></div>";
} else {
$group_ind="<a href=\"groups.php\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"View writeup groups\"></a></div>";
$group_ind="<a href=\"writeupdetail.php?id={$writeupdata['id']}\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"Member of $group_count groups. Click here to view.\"></a></div>";
}
}
echo "
@@ -692,8 +692,14 @@ function putsetting($setting_name,$setting_value,$user_id) {
}
}
function group_table($groupid,$role=false,$mode="view",$selection="none",$expanded=false) {
function group_detail($groupid,$role=false,$mode="view",$selection="none") {
// display a table for a single group
// groupid is the group for which detail is to be shown
// role is true if user is logged in, false if not.
// mode is "select" if selection boxes are to be displayed, "view" if not.
// selection is "all" or "none"
// grab some important global variables
global $device_term;
global $discovered_term, $discovered_term_short, $disc_drop_data;
@@ -708,13 +714,6 @@ function group_table($groupid,$role=false,$mode="view",$selection="none",$expand
} elseif ($selection == "none") {
$sel_flag="";
}
if ($expanded) {
echo "
<a href=\"groups.php\" style=\"text-decoration:none\">
<img src=\"icons/minus-white.png\" alt=\"Unexpand group\">
</a>
";
}
$groupname=dblookup($drs_db,"groups","id","name",$groupid);
if ($groupname == "") {
echo "<b>Group ID: &nbsp;$groupid";

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
/*
groups.php
OpenDRS Online Discrepancy Reporting System
Copyright (C) 2021 Rod Wright
Copyright (C) 2022 Rod Wright
SPDX-License-Identifier: GPL-2.0
*/
@@ -38,7 +38,6 @@ $save=$incoming['save'];
$targets=$incoming['targets'];
$group=$incoming['group'];
$name=$incoming['name'];
$expandgrp=$incoming['expandgrp'];
$search=$incoming['search'];
$s_status=$incoming['s_status'];
@@ -317,7 +316,7 @@ if ($action=="add") {
if ($save) {
// show the group
$mode="view";
group_table($group,$role,$mode);
group_detail($group,$role,$mode);
if ($role) {
// show buttons
echo "
@@ -621,7 +620,7 @@ if ($action=="add") {
<input type=\"hidden\" name=\"group\" value=\"$group\">
<input type=\"hidden\" name=\"action\" value=\"remove\">
";
group_table($group,$role,"select","all");
group_detail($group,$role,"select","all");
echo "
Deselect the writeups you want to remove from this group. <br><br>
<b>NOTE:</b> Deselecting them all will dissolve the group.
@@ -653,7 +652,7 @@ if ($action=="add") {
}
// show the group
$mode="view";
group_table($group,$role,$mode);
group_detail($group,$role,$mode);
if ($role) {
// show buttons
echo "
@@ -694,7 +693,7 @@ if ($action=="add") {
}
// show the group
$mode="view";
group_table($group,$role,$mode);
group_detail($group,$role,$mode);
if ($role) {
// show buttons
echo "
@@ -720,7 +719,7 @@ if ($action=="add") {
}
// show the group
$mode="view";
group_table($group,$role,$mode);
group_detail($group,$role,$mode);
if ($role && ! $save) {
// show action form
echo "
@@ -821,7 +820,7 @@ if ($action=="add") {
if ($group) {
// show only the requested group
$mode="view";
group_table($group,$role,$mode);
group_detail($group,$role,$mode);
if ($role) {
// show buttons
echo "
@@ -841,48 +840,42 @@ if ($action=="add") {
}
echo "<hr><br>";
} else {
// show all groups
$mode="view";
$groups_qry=mysqli_query($drs_db,"select id from groups");
// show group table
$groups_qry=mysqli_query($drs_db,"select * from groups");
if (mysqli_num_rows($groups_qry)) {
echo "
<br><br>
<table border=\"1\" cellpadding=\"5\" style=\"width:100%;\">
<tr>
<th style=\"width:1%;\">ID</th>
<th>Name</th>
<th style=\"width:1%;\">Writeups assigned</th>
</tr>
";
while ($grouprow=mysqli_fetch_assoc($groups_qry)) {
if ($expandgrp == $grouprow['id']) {
group_table($grouprow['id'],$role,$mode,"none",$expandgrp);
if ($role) {
// show buttons
echo "
<form method=post action=\"groups.php\">
<input type=\"hidden\" name=\"group\" value=\"{$grouprow['id']}\">
<button name=\"action\" value=\"add\" type=\"submit\">Add writeups to this group</button>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button name=\"action\" value=\"remove\" type=\"submit\">Remove writeups from this group</button>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button name=\"action\" value=\"dissolve\" type=\"submit\">Dissolve this group</button>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button name=\"action\" value=\"setname\" type=\"submit\">Set name for this group</button>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button name=\"action\" value=\"takeaction\" type=\"submit\">Take group action</button>
</form>
";
}
} else {
echo "
<a href=\"groups.php?expandgrp={$grouprow['id']}\" style=\"text-decoration:none\">
<img src=\"icons/plus-white.png\" alt=\"Expand group\">
</a>
";
$groupname=dblookup($drs_db,"groups","id","name",$grouprow['id']);
if ($groupname == "") {
echo "<b>Group ID:</b> &nbsp;{$grouprow['id']}";
} else {
echo "<b>Group Name:</b> &nbsp;$groupname";
}
}
echo "<br><br>";
}
} else {
echo "<br>No writeup groups were found.<br><br><br>";
}
$num_query=mysqli_query($drs_db,"select id from links where linkgroup={$grouprow['id']}");
$num_writeups=mysqli_num_rows($num_query);
if($grouprow['name']=="") {
$name_text="Group {$grouprow['id']} has not been named";
} else {
$name_text="{$grouprow['name']}";
}
// print table row
printf(
"<tr>
<td align=\"center\" valign=\"top\"><a href=\"groups.php?group=%s\" title=\"View or change details of this group\">%s</a></td>
<td valign=\"top\">%s</td>
<td align=\"center\" valign=\"top\">%s</td>
</tr>\n",
$grouprow["id"],$grouprow["id"],
$name_text,
$num_writeups
);
}
echo "</table><br>";
} else {
echo "<br>No writeup groups were found.<br><br><br>";
}
}
}

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
/*
search.php
OpenDRS Online Discrepancy Reporting System
Copyright (C) 2021 Rod Wright
Copyright (C) 2022 Rod Wright
SPDX-License-Identifier: GPL-2.0
*/
@@ -304,14 +304,21 @@ if ($search) {
// group membership
if ($s_group) {
$group_param="Group member:";
$group_param="Group member: ";
// create an array of writeups that are members of the groups specified
$group_writeups=array();
foreach ($s_group as $group_val) {
if ($group_val=="0") $group_dsp="No";
if ($group_val=="1") $group_dsp="Yes";
$group_param="{$group_param} {$group_dsp}, ";
}
$group_param=rtrim($group_param,", ");
}
$wulink_query=mysqli_query($drs_db,"select writeupid from links where linkgroup=$group_val");
while($wulinkrow=mysqli_fetch_assoc($wulink_query)){
$group_writeups[]=$wulinkrow['writeupid'];
}
$group_name=dblookup($drs_db,"groups","id","name",$group_val);
$group_param="{$group_param} <font title=\"{$group_name}\">{$group_val}</font>, ";
}
$group_param=rtrim($group_param,", ");
} else {
$group_param="Group member: any";
}
}
@@ -495,20 +502,30 @@ if (! $exportcsv) {
";
// Group status cell **************
echo "
Group Member?<br>
Group Assignments:<br>
<select style=\"max-width:40%;\" name=\"s_group[]\" id=\"ms-group\" multiple title=\"Select the groups the results should be a member of. If you uncheck them all, this field will not be included in the search.\">
";
if ($search) {
$yesgroupstate=$nogroupstate="";
if (in_array("1",$s_group,true)) $yesgroupstate="selected";
if (in_array("0",$s_group,true)) $nogroupstate="selected";
} else {
$yesgroupstate=$nogroupstate="selected";
}echo "
<select name=\"s_group[]\" id=\"ms-group\" multiple title=\"If you uncheck all, then this field will not be included in the search.\">
<option value=\"1\" $yesgroupstate title=\"Writeup is a member of a group\">Show group members</option>
<option value=\"0\" $nogroupstate title=\"Writeup is not a member of a group\">Show non group members</option>
$grow=mysqli_query($drs_db,"select * from groups order by id asc");
while ($gitem=mysqli_fetch_assoc($grow)) {
if ($gitem["name"]=="") {
$gname="Group ".$gitem["id"];
} else {
$gname=$gitem["name"];
}
if($search) {
if (in_array($gitem["id"],$s_group,true)) {
printf("<option value=\"%s\" selected>%s</option>",$gitem["id"],$gname);
} else {
printf("<option value=\"%s\">%s</option>",$gitem["id"],$gname);
}
} else {
printf("<option value=\"%s\">%s</option>",$gitem["id"],$gname);
}
}
echo "
</select>
";
// ************************************
echo "
</td></tr>
@@ -763,25 +780,10 @@ if ($search) {
while ($eachid=mysqli_fetch_assoc($writeup)) {
$result_ids[]=$eachid['id'];
}
mysqli_data_seek($writeup,0);
// create an array of all ids in groups
$groupmems=array();
$groupmem_qry=mysqli_query($drs_db,"select writeupid from links");
while ($groupmemrow=mysqli_fetch_row($groupmem_qry)) {
$groupmems[]=$groupmemrow[0];
}
$groupmems=array_unique($groupmems);
// determine how many group members are in results
$member_count=0;
foreach($result_ids as $result_id) {
if (in_array($result_id,$groupmems)) $member_count += 1;
}
if (in_array("1",$s_group)) $show_groupmems=true;
if (in_array("0",$s_group)) $show_nongroupmems=true;
if ($show_groupmems == $show_nongroupmems) $num_results=mysqli_num_rows($writeup); //show members and nonmembers
if ($show_groupmems && !$show_nongroupmems) $num_results=$member_count; //only show members
if (!$show_groupmems && $show_nongroupmems) $num_results=mysqli_num_rows($writeup)-$member_count; //only show nonmembers
mysqli_data_seek($writeup,0);
reset($group_writeups);
$num_results=mysqli_num_rows($writeup);
if ($num_results > 0) {
if ($exportcsv) {
// generate csv file
@@ -886,7 +888,6 @@ if ($search) {
rewind($csv_fp);
// send file contents
$csv_contents=stream_get_contents($csv_fp);
//fpassthru($csv_fp);
// Close our pointer and free up memory and /tmp space
fclose($csv_fp);
echo $csv_contents;
@@ -946,11 +947,11 @@ if ($search) {
}
$disc_txt=$disc_txt."<div align=\"right\"><a href=\"groups.php?group=$group_num\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"$imgtitle\"></a></div>";
} else {
$disc_txt=$disc_txt."<div align=\"right\"><a href=\"groups.php\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"View writeup groups\"></a></div>";
$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>";
}
}
if (($show_groupmems == $show_nongroupmems) || ($is_member && $show_groupmems) || (!$is_member && $show_nongroupmems)) {
if(in_array($tablerow['id'],$group_writeups) || count($s_group)==0) {
// print table row
printf(
"<tr>
@@ -985,7 +986,7 @@ if ($search) {
// 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 (($show_groupmems == $show_nongroupmems) || ($is_member && $show_groupmems) || (!$is_member && $show_nongroupmems)) {
if(in_array($tablerow['id'],$group_writeups) || count($s_group)==0) {
displaywriteup($tablerow['id']);
echo "<br>";
}

View File

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

View File

@@ -2,7 +2,7 @@
/*
writeupdetail.php
OpenDRS Online Discrepancy Reporting System
Copyright (C) 2021 Rod Wright
Copyright (C) 2022 Rod Wright
SPDX-License-Identifier: GPL-2.0
*/
@@ -52,6 +52,7 @@ $action_date=$incoming['action_date'];
$action_time=$incoming['action_time'];
$action_reason=$incoming['action_reason'];
$action_text=$incoming['action_text'];
$group=$incoming['group'];
// assign variables from constants
$appname=APP_NAME;
@@ -93,6 +94,18 @@ if ($usersave) {
// update the record in writeups
mysqli_query($drs_db,"update writeups set device=\"$device\",discovered=\"$discovered\",functional=\"$functional\",reported_by=\"$clean_reported_by\",report_date=\"$report_date\",report_time=\"$report_time\",subsystem=\"$subsystem\",discrepancy_text=\"$clean_discrepancy_text\" where id=\"$id\"");
// remove writeup from all groups and add to only selected groups
mysqli_query($drs_db,"delete from links where writeupid=\"$id\"");
foreach($group as &$link) {
if($link==0) {
// new group was requested
mysqli_query($drs_db,"insert into groups(name) value(\"\")");
$newgroup=mysqli_insert_id($drs_db);
$link=$newgroup;
}
mysqli_query($drs_db,"insert into links(linkgroup, writeupid) values(\"$link\", \"$id\")");
}
}
}
elseif ($techsave) {
@@ -371,13 +384,72 @@ if ($useredit) {
<td align=\"right\" valign=\"bottom\"><input type=\"submit\" name=\"usersave\" value=\"Save Changes\"></td>
</tr>
<tr>
<td></td><td></td><td align=\"right\" valign=\"bottom\">
<td colspan=\"2\">Group Assignments:&nbsp;&nbsp
";
// Group multi-select ********************
echo "
<select style=\"max-width:60%;\" name=\"group[]\" id=\"ms-group\" multiple title=\"Select the groups this writeup should be a member of.\">
";
$linkquery=mysqli_query($drs_db,"select * from links where writeupid=\"$id\"");
// create an array of ids returned by group query
$wugroups=array();
while ($eachlink=mysqli_fetch_assoc($linkquery)) {
$wugroups[]=$eachlink['linkgroup'];
}
mysqli_data_seek($wugroups,0);
$grow=mysqli_query($drs_db,"select * from groups order by id asc");
printf("<option value=\"%s\">%s</option>",0,"New group");
while ($gitem=mysqli_fetch_assoc($grow)) {
if ($gitem["name"]=="") {
$gname="Group ".$gitem["id"];
} else {
$gname=$gitem["name"];
}
if (in_array($gitem["id"],$wugroups,true)) {
printf("<option value=\"%s\" selected>%s</option>",$gitem["id"],$gname);
} else {
printf("<option value=\"%s\">%s</option>",$gitem["id"],$gname);
}
}
echo "
</select>
";
echo "
</td>
<td align=\"right\" valign=\"bottom\">
<input type=\"submit\" name=\"cancel\" value=\"Cancel Changes\"></td>
</tr>
";
} else {
echo "<tr></tr><td colspan=\"2\">Group Assignments:&nbsp;&nbsp";
$wustat=dblookup($drs_db,"writeups","id","status",$id);
if ($wustat==2 && !$role) $allowuseredit="disabled";
// Group multi-select ********************
echo "
<select style=\"max-width:60%;\" name=\"groupshow\" id=\"ms-group\" multiple title=\"The groups this writeup is a member of.\">
";
$linkquery=mysqli_query($drs_db,"select * from links where writeupid=\"$id\"");
// create an array of ids returned by group query
$wugroups=array();
while ($eachlink=mysqli_fetch_assoc($linkquery)) {
$wugroups[]=$eachlink['linkgroup'];
}
mysqli_data_seek($wugroups,0);
$grow=mysqli_query($drs_db,"select * from groups order by id asc");
while ($gitem=mysqli_fetch_assoc($grow)) {
if ($gitem["name"]=="") {
$gname="Group ".$gitem["id"];
} else {
$gname=$gitem["name"];
}
if (in_array($gitem["id"],$wugroups,true)) {
printf("<option value=\"%s\" selected disabled>%s</option>",$gitem["id"],$gname);
}
}
echo "
</select>
</td>
";
echo "
<td align=\"right\" valign=\"bottom\"><input $allowuseredit type=\"submit\" name=\"useredit\" value=\"Edit this Discrepancy\"></td>
</tr>

View File

@@ -2,7 +2,7 @@
/*
writeups.php
OpenDRS Online Discrepancy Reporting System
Copyright (C) 2021 Rod Wright
Copyright (C) 2022 Rod Wright
SPDX-License-Identifier: GPL-2.0
*/
@@ -133,7 +133,7 @@ function opentable($start_date,$end_date,$print,$drs_db,$viewtype="summary") {
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=\"groups.php\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"View writeup groups\"></a></div>";
$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>";
}
}
@@ -279,7 +279,7 @@ function viewtable($start_date,$end_date,$print,$drs_db,$viewtype="summary",$rol
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=\"groups.php\"><img src=\"icons/block.png\" alt=\"GRP\" title=\"View writeup groups\"></a></div>";
$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>";
}
}
@@ -337,7 +337,12 @@ function viewtable($start_date,$end_date,$print,$drs_db,$viewtype="summary",$rol
";
$tgrow=mysqli_query($drs_db,"select id,name from groups order by id asc");
while ($tgitem=mysqli_fetch_assoc($tgrow)) {
printf("<option value=\"%s\">%s</option>",$tgitem["id"],$tgitem["name"]);
if($tgitem["name"]=="") {
$tgname="Group ".$tgitem["id"];
} else {
$tgname=$tgitem["name"];
}
printf("<option value=\"%s\">%s</option>",$tgitem["id"],$tgname);
}
echo "
</select>