incoming array ";
//var_dump($incoming);
// ******** begin database manipulation ********
// get min, max report and action_dates from writeups table, validate input dates/times and set defaults
$minmaxqry=mysqli_query($drs_db,"select min(report_date),max(report_date),min(action_date),max(action_date) from writeups");
$minmaxdates=mysqli_fetch_row($minmaxqry);
if (!isset($s_report_date_start) || !validateDate($s_report_date_start)) $s_report_date_start=$minmaxdates[0];
if (!isset($s_report_date_end) || !validateDate($s_report_date_end)) $s_report_date_end=$minmaxdates[1];
if (!isset($s_report_time_start) || !validateTime($s_report_time_start)) $s_report_time_start="00:00:00";
if (!isset($s_report_time_end) || !validateTime($s_report_time_end)) $s_report_time_end="23:59:59";
if ($search) {
// strip whitespace from beginning and end of text fields
$s_reported_by=trim($s_reported_by);
$s_action_text=trim($s_action_text);
$s_discrepancy_text=trim($s_discrepancy_text);
$s_id=trim($s_id);
// build the query string
$query_string="";
// device
if ($s_device) {
$query_string="{$query_string}(";
$device_param="{$device_term}s:";
foreach ($s_device as $dev_val) {
$query_string="{$query_string}device=\"{$dev_val}\" or ";
$device_dsp=dblookup($drs_db,"devices","id","name",$dev_val);
$device_param="{$device_param} {$device_dsp}, ";
}
$device_param=rtrim($device_param,", ");
$num_devices=mysqli_num_rows(mysqli_query($drs_db,"select id from devices"));
if (count($s_device)==$num_devices) $device_param="{$device_term}s: any";
$query_string=rtrim($query_string," or ");
$query_string="{$query_string})";
$query_string="{$query_string} and ";
}
// subsystem
if ($s_subsystem) {
$query_string="{$query_string}(";
$subsystem_param="Subsystems:";
foreach ($s_subsystem as $sub_val) {
$query_string="{$query_string}subsystem=\"{$sub_val}\" or ";
$subsystem_dsp=dblookup($drs_db,"subsystems","id","name",$sub_val);
$subsystem_param="{$subsystem_param} {$subsystem_dsp}, ";
}
$subsystem_param=rtrim($subsystem_param,", ");
$num_subsystems=mysqli_num_rows(mysqli_query($drs_db,"select id from subsystems"));
if (count($s_subsystem)==$num_subsystems) $subsystem_param="Subsystems: any";
$query_string=rtrim($query_string," or ");
$query_string="{$query_string})";
$query_string="{$query_string} and ";
}
// id
if ($s_id) {
$query_string="{$query_string}(";
$query_string="{$query_string}id={$s_id}";
$query_string="{$query_string})";
$query_string="{$query_string} and ";
$id_param="ID: {$s_id}";
} else {
$id_param="ID: any";
}
// discovered
if ($s_discovered) {
$query_string="{$query_string}(";
$discovered_param="{$discovered_term_short}:";
foreach ($s_discovered as $disc_val) {
$query_string="{$query_string}discovered=\"{$disc_val}\" or ";
$disc_dsp=$disc_val;
$discovered_param="{$discovered_param} {$disc_dsp}, ";
}
$discovered_param=rtrim($discovered_param,", ");
$num_discovereds=mysqli_num_rows(mysqli_query($drs_db,"select id from discovered"));
if (count($s_discovered)==$num_discovereds) $discovered_param="{$discovered_term_short}s: any";
$query_string=rtrim($query_string," or ");
$query_string="{$query_string})";
$query_string="{$query_string} and ";
}
// functional
if ($s_functional) {
$query_string="{$query_string}(";
$func_param="$functional_term:";
foreach ($s_functional as $func_val) {
$query_string="{$query_string}functional=\"{$func_val}\" or ";
if ($func_val=="0") $func_dsp="$functional_no_short";
if ($func_val=="1") $func_dsp="$functional_yes_short";
$func_param="{$func_param} {$func_dsp}, ";
}
$func_param=rtrim($func_param,", ");
$query_string=rtrim($query_string," or ");
$query_string="{$query_string})";
$query_string="{$query_string} and ";
}
// status
if ($s_status) {
$query_string="{$query_string}(";
$status_param="Status:";
foreach ($s_status as $stat_val) {
$query_string="{$query_string}status=\"{$stat_val}\" or ";
if ($stat_val=="1") $stat_dsp="OPEN";
if ($stat_val=="2") $stat_dsp="CLSD";
if ($stat_val=="3") $stat_dsp="DFRD";
$status_param="{$status_param} {$stat_dsp}, ";
}
$status_param=rtrim($status_param,", ");
$query_string=rtrim($query_string," or ");
$query_string="{$query_string})";
$query_string="{$query_string} and ";
}
// action by
if ($s_action_by) {
$query_string="{$query_string}(";
$actionby_param="Status changed by:";
foreach ($s_action_by as $actby_val) {
$query_string="{$query_string}action_by=\"{$actby_val}\" or ";
if ($actby_val==0) {
$actionby_dsp=" (none set)";
} else {
$actionby_dsp=dblookup($drs_db,"users","id","firstname",$actby_val)." ".dblookup($drs_db,"users","id","lastname",$actby_val);
}
$actionby_param="{$actionby_param} {$actionby_dsp}, ";
}
$actionby_param=rtrim($actionby_param,", ");
$num_users=mysqli_num_rows(mysqli_query($drs_db,"select id from users"));
if (count($s_action_by)==$num_users+1) $actionby_param="Status changed by: any";
$query_string=rtrim($query_string," or ");
$query_string="{$query_string})";
$query_string="{$query_string} and ";
}
// action reason
if ($s_action_reason) {
$query_string="{$query_string}(";
$reason_param="Status change reason:";
foreach ($s_action_reason as $actrn_val) {
$query_string="{$query_string}action_reason=\"{$actrn_val}\" or ";
if ($actrn_val==0) {
$reason_dsp=" (none set)";
} else {
$reason_dsp=dblookup($drs_db,"reasons","id","text",$actrn_val);
}
$reason_param="{$reason_param} {$reason_dsp}, ";
}
$reason_param=rtrim($reason_param,", ");
$num_reasons=mysqli_num_rows(mysqli_query($drs_db,"select id from reasons"));
if (count($s_action_reason)==$num_reasons+1) $reason_param="Status change reason: any";
$query_string=rtrim($query_string," or ");
$query_string="{$query_string})";
$query_string="{$query_string} and ";
}
// report date
$query_string="{$query_string}(";
$query_string="{$query_string}report_date between \"{$s_report_date_start}\" and \"{$s_report_date_end}\"";
$query_string="{$query_string})";
$query_string="{$query_string} and ";
$reportdate_param="Report date between {$s_report_date_start} and {$s_report_date_end}";
// report time
$query_string="{$query_string}(";
$query_string="{$query_string}report_time between \"{$s_report_time_start}\" and \"{$s_report_time_end}\"";
$query_string="{$query_string})";
$query_string="{$query_string} and ";
$reporttime_param="Report time between {$s_report_time_start} and {$s_report_time_end}";
// action date
if ($s_action_date_start && $s_action_date_end) {
$query_string="{$query_string}(";
$query_string="{$query_string}action_date between \"{$s_action_date_start}\" and \"{$s_action_date_end}\"";
$query_string="{$query_string})";
$query_string="{$query_string} and ";
$actiondate_param="Action taken date between {$s_action_date_start} and {$s_action_date_end}";
} else {
$actiondate_param="Action taken date: any";
}
// action time
if ($s_action_time_start && $s_action_time_end) {
$query_string="{$query_string}(";
$query_string="{$query_string}action_time between \"{$s_action_time_start}\" and \"{$s_action_time_end}\"";
$query_string="{$query_string})";
$query_string="{$query_string} and ";
$actiontime_param="Action taken time between {$s_action_time_start} and {$s_action_time_end}";
} else {
$actiontime_param="Action taken time: any";
}
// discrepancy text
if ($s_discrepancy_text) {
$query_string="{$query_string}(";
$query_string="{$query_string}discrepancy_text like \"%{$s_discrepancy_text}%\"";
$query_string="{$query_string})";
$query_string="{$query_string} and ";
$discrepancytext_param="Text in discrepancy: {$s_discrepancy_text}";
} else {
$discrepancytext_param="Text in discrepancy: any";
}
// action text
if ($s_action_text) {
$query_string="{$query_string}(";
$query_string="{$query_string}action_text like \"%{$s_action_text}%\"";
$query_string="{$query_string})";
$query_string="{$query_string} and ";
$actiontext_param="Text in Action taken: {$s_action_text}";
} else {
$actiontext_param="Text in Action taken: any";
}
// reported by
if ($s_reported_by) {
$query_string="{$query_string}(";
$query_string="{$query_string}reported_by like \"%{$s_reported_by}%\"";
$query_string="{$query_string})";
$query_string="{$query_string} and ";
$repby_param="Text in Reported by: {$s_reported_by}";
} else {
$repby_param="Text in Reported by: any";
}
$query_string=rtrim($query_string," and ");
$query_string="select * from writeups where {$query_string} order by $sort $order";
// group membership
if (isset($s_group)) {
$group_param="Group member: ";
// create an array of writeups that are members of the groups specified
$group_writeups=[];
foreach ($s_group as $group_val) {
$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} {$group_val}, ";
}
$group_param=rtrim($group_param,", ");
} else {
$group_param="Group member: any";
}
}
// ******** end database manipulation ********
if (! $exportcsv) {
pagetable("begin");
if(!$print) {
pageblock("left","begin");
sidemenu();
echo "
";
pageblock("left","end");
}
pageblock("right","begin");
banner($print);
echo " ";
// show search form
if (!$print) {
echo "
";
}
}
// display the results
if ($search) {
if (! $exportcsv) {
//display the search parameters used
if (!$print) echo "";
echo "
Parameters used in this search
";
if (!$print) {
echo " Scroll up to modify parameters
";
} else {
echo "";
}
echo "
$status_param
$device_param
$subsystem_param
$id_param
$discovered_param
$reportdate_param
$reporttime_param
$discrepancytext_param
$repby_param
$func_param
$group_param
$actionby_param
$reason_param
$actiontext_param
$actiondate_param
$actiontime_param
";
}
$currentparams=arrayCopy($_REQUEST);
if (! $exportcsv) {
echo "
";
}
$writeup=mysqli_query($drs_db,$query_string);
// create an array of ids returned by the query string
$result_ids=[];
while ($eachid=mysqli_fetch_assoc($writeup)) {
$result_ids[]=$eachid['id'];
}
mysqli_data_seek($writeup,0);
if (!isset($group_writeups)) $group_writeups=[];
reset($group_writeups);
$num_results=mysqli_num_rows($writeup);
if ($num_results > 0) {
if ($exportcsv) {
// generate csv file
// create an array of lines of the csv data
$csv_data=[];
$csv_data[]=['WriteupID','Status',$device_term,'Subsystem',$discovered_term_short,$functional_term,'Discrepancy','Group','Report date','Report time','Reported by','Action taken by','Status Change Reason','Action taken','Action date','Action time'];
$csv_fp=fopen('php://temp', 'w+');
while ($tablerow = mysqli_fetch_assoc($writeup)) {
// writeup id for csv
$csv_id=$tablerow['id'];
// determine status text
if ($tablerow['status']==1) $csv_status_text="Open";
if ($tablerow['status']==2) $csv_status_text="Closed";
if ($tablerow['status']==3) $csv_status_text="Deferred";
// convert device number to name for csv
$csv_dname=dblookup($drs_db,"devices","id","name",$tablerow["device"]);
// convert subsystem number to name for csv
$csv_ssname=dblookup($drs_db,"subsystems","id","name",$tablerow["subsystem"]);
// discovered name for csv
$csv_discovered=dblookup($drs_db,"discovered","id","whendiscoveredname",$tablerow["discovered"]);
// determine functional text for csv
if($tablerow["functional"]==1) {
$csv_func_text="$functional_yes_short";
} else {
$csv_func_text="$functional_no_short";
}
// discrepancy text for csv
$csv_disc_txt="{$tablerow["discrepancy_text"]}";
$csv_disc_txt=str_replace("\n","\r\n",$csv_disc_txt);
// group name or number for csv
$member_qry=mysqli_query($drs_db,"select linkgroup from links where writeupid=\"{$tablerow['id']}\"");
$is_member=mysqli_num_rows($member_qry);
// look up group name
if ($is_member) {
$group_count=$is_member;
if ($group_count == 1) {
$group_num=mysqli_fetch_row(mysqli_query($drs_db,"select linkgroup from links where writeupid=\"{$tablerow['id']}\""))[0];
$member_group_name=dblookup($drs_db,"groups","id","name",$group_num);
if ($member_group_name) {
$csv_member_group_name=$member_group_name;
} else {
$csv_member_group_name=$group_num;
}
} else {
$csv_member_group_name="multiple";
}
} else {
$csv_member_group_name="none";
}
// report date for csv
$csv_report_date="{$tablerow["report_date"]}";
// report time for csv
$csv_report_time="{$tablerow["report_time"]}";
// reported by text for csv
$csv_reported_by_text="{$tablerow["reported_by"]}";
$csv_reported_by_text=str_replace("\n","\r\n",$csv_reported_by_text);
// action taken by text for csv
$techfname=dblookup($drs_db,"users","id","firstname","{$tablerow["action_by"]}");
$techlname=dblookup($drs_db,"users","id","lastname","{$tablerow["action_by"]}");
$csv_action_by="$techfname $techlname";
// status change reason for csv
$csv_reasonname=dblookup($drs_db,"reasons","id","text","{$tablerow["action_reason"]}");
// action taken text for csv
$csv_action_text="{$tablerow["action_text"]}";
$csv_action_text=str_replace("\n","\r\n",$csv_action_text);
// action date for csv
$csv_action_date="{$tablerow["action_date"]}";
// action time for csv
$csv_action_time="{$tablerow["action_time"]}";
// add line of results to csv array
$csv_data[]=[$csv_id, $csv_status_text, $csv_dname, $csv_ssname, $csv_discovered, $csv_func_text, $csv_disc_txt, $csv_member_group_name, $csv_report_date, $csv_report_time, $csv_reported_by_text, $csv_action_by, $csv_reasonname, $csv_action_text, $csv_action_date, $csv_action_time];
}
foreach ($csv_data as $csv_fields) {
// add row to csv buffer
fputcsv($csv_fp, $csv_fields);
}
$csv_filename="data_export_" . date("Y-m-d") . ".csv";
// reset pointer back to start
rewind($csv_fp);
// send file contents
$csv_contents=stream_get_contents($csv_fp);
// Close our pointer and free up memory and /tmp space
fclose($csv_fp);
echo $csv_contents;
} else {
if ($viewtype=="summary") {
echo "
ID
Status
Date
$discovered_term_short
$device_term
Subsystem
Reported by
Discrepancy
$functional_term_short
";
while ($tablerow = mysqli_fetch_assoc($writeup)) {
// 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);
// determine functional icon
if($tablerow["functional"]==1) {
$func_icon="";
} else {
$func_icon="";
}
// determine status indicator
if ($tablerow['status']==1) $statusind="
OPEN
";
if ($tablerow['status']==2) $statusind="
CLSD
";
if ($tablerow['status']==3) $statusind="
DFRD
";
// convert device number to name
$dname=dblookup($drs_db,"devices","id","name",$tablerow["device"]);
// convert discovered number to description
$discname=dblookup($drs_db,"discovered","id","whendiscoveredname",$tablerow["discovered"]);
// convert discovered number to description
$discdesc=dblookup($drs_db,"discovered","id","whendiscovereddesc",$tablerow["discovered"]);
// convert subsystem number to name
$ssname=dblookup($drs_db,"subsystems","id","name",$tablerow["subsystem"]);
$disc_txt="{$tablerow["discrepancy_text"]}";
// set group indicator
if ($is_member) {
$group_count=$is_member;
if ($group_count == 1) {
$group_num=mysqli_fetch_row(mysqli_query($drs_db,"select linkgroup from links where writeupid=\"{$tablerow['id']}\""))[0];
$member_group_name=dblookup($drs_db,"groups","id","name",$group_num);
if ($member_group_name) {
$imgtitle="Member of group: $member_group_name";
} else {
$imgtitle="Member of group ID: $group_num";
}
$disc_txt=$disc_txt."
";
while ($tablerow = mysqli_fetch_assoc($writeup)) {
// 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(in_array($tablerow['id'],$group_writeups) || count($s_group)==0) {
displaywriteup($tablerow['id']);
echo " ";
}
}
echo "
";
}
}
} else {
echo "No writeups match your search parameters. ";
}
}
if (! $exportcsv) {
echo " ";
banner($print);
pageblock("right","end");
pagetable("end");
framework("end","","",$print);
}
?>