#!/usr/bin/perl # # $Id: IntegroTeam.pl,v 1.13 2006/04/12 19:18:47 ddoughty Exp $ # # Source File: Integro.pl # Get config use FileHandle; use Time::Local; use Data::Dumper; use IntegroLib; require 'sitecfg.pl'; require 'testlib.pl'; require 'tstatlib.pl'; use strict; use vars qw(%FORM %SESSION %CLIENT %TEST_SESSION %SUBTEST_QUESTIONS %TEST %SUBTEST_SUMMARY %CANDIDATE %SUBTEST_ANSWERS %SYSTEM %REPORT %SUBTEST_RESPONSES); use vars qw($testcomplete $testinprog $testcomplete $testpending $cgiroot $pathsep $dataroot @rptparams); &app_initialize; $FORM{"idlist"} =~ tr/\000/,/ ; # Change separator for multiple values from NULL to comma. HBI &LanguageSupportInit(); &get_client_profile($SESSION{'clid'}); if ($FORM{'tstid'}) { &get_test_profile($CLIENT{'clid'}, $FORM{'tstid'}); } elsif (!$rptparams[0]) { # Check for multiple tests my @trecs = &get_test_list($CLIENT{'clid'}); #tests in an array my @tmptrecs = (); for (1 .. $#trecs) { my ($id, $desc) = split(/&/, $trecs[$_]); #id=testid, descr=test description if ($id =~ "^TAQ") {push @tmptrecs, join('&', "$desc", "$id");} } @trecs = sort @tmptrecs; if ($#trecs > 0) { # show test chooser &print_test_chooser(@trecs); } } # Make sure we have a valid session, and exit if we don't if (not &get_session($FORM{'tid'})) { exit(0); } # Get the group filters, if any my ($idlist,$groups); if (exists $FORM{'grouping'} and $FORM{'grouping'} eq 'subset') { #my @tmp = split(/,/,$FORM{'idlist'}); my @tmp = param('idlist'); $FORM{'idlist'} = join(',', @tmp); @{$groups}{@tmp} = @tmp; $idlist = &getIdlist($CLIENT{'clid'},$FORM{'idlist'}); } # Get the time stamp style my $timestamp; if ($FORM{'timestamp'} eq 'currenttime') { $timestamp = scalar(localtime(time)); } elsif ($FORM{"timestamp"} eq 'custom' and $FORM{'customtime'} ne '') { $timestamp = $FORM{'customtime'}; } elsif ($FORM{'timestamp'} eq 'mostrecent' and $FORM{'tstid'}) { my $file = join($pathsep,$testcomplete,"$CLIENT{'clid'}.$FORM{'tstid'}.history"); my $fh = new FileHandle; if ($fh->open($file)) { my @history = map([split(/(?:<<>>|&)/,$_,4)],<$fh>); #print "<pre>".Dumper(\@history)."</pre>"; if (defined $idlist) { foreach (reverse @history) { if (exists $idlist->{$_->[2]}) { $timestamp = scalar(localtime(toGMSeconds($_->[0]))); last; } } } else { $timestamp = scalar(localtime(toGMSeconds($history[$#history]->[0]))); } } else { print STDERR "Could not open $file in Integro.pl\n"; } } if (defined $timestamp) { $timestamp = "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>$timestamp</b></font><br><BR>\n"; } else { $timestamp = "<br>\n"; } # Is this report for a specific canidate? my $cndid; #print STDERR "$FORM{'specificuser'} $FORM{'cndid'}\n"; if ($FORM{'specificuser'} and (not $idlist or $idlist->{$FORM{'cndid'}})) { $cndid = $FORM{'cndid'}; } # Generate the reports if ($FORM{'reportname'} eq 'commeffect') { &CommEffectReport($idlist, $groups, $timestamp, $cndid); } elsif ($FORM{'reportname'} eq 'commeffectsummary') { &CommEffectSummary($idlist, $groups, $timestamp); } elsif ($FORM{'reportname'} eq 'trustlevel') { &TrustLevelReport($idlist, $groups, $timestamp, $cndid); } elsif ($FORM{'reportname'} eq 'trustlevelsummary') { &TrustLevelSummary($idlist, $groups, $timestamp); } elsif ($FORM{'reportname'} eq 'comments') { &CommentsReport($idlist, $timestamp, 0); } elsif ($FORM{'reportname'} eq 'comments2') { &CommentsReport($idlist, $timestamp, 1); } else { &ReportChooser(); } # There should only be function definitions beyond this point. exit(0); sub HTMLHeader { return "<html>\n<head>\n<title>$_[0]</title>\n". "<script language=\"JavaScript\">\n<!-- \n$_[1]\n -->\n</script>\n". "</head>\n". "<BODY BACKGROUND=\"$SYSTEM{'BACKGROUND'}\" BGCOLOR=\"$SYSTEM{'BGCOLOR'}\"". " TEXT=\"$SYSTEM{'TEXT'}\" LINK=\"$SYSTEM{'LINK'}\"". " VLINK=\"$SYSTEM{'VLINK'}\" ALINK=\"$SYSTEM{'ALINK'}\">\n"; } sub HTMLHeaderPlain { return "<html>\n<head>\n<title>$_[0]</title>\n". "<script language=\"JavaScript\">\n<!-- \n$_[1]\n -->\n</script>\n</head>\n". "<BODY>\n"; } sub HTMLFooter { my $year = `date +%Y`; return "<br><center><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\">Copyright (c) 2004-$year, Integro Leadership Institute<center></font></body>\n</html>\n"; } sub ReportChooser { # Links w/javascript for chosing report # Radio button to choose between all and select group(s) # Menu box to chose one or more groups my $groups = &getGroups($CLIENT{'clid'}); my $js = "function parmsIntegro(oform,rpt) {\n\t". "oform.reportname.value=rpt;\n\t". "oform.action='/cgi-bin/creports.pl';\n\t". "oform.submit();\n};\n"; $js .= "\nfunction commIntegro(oform) {\n\t". "oform.rptid.value='ACT-C-004';\n\t". "oform.rptdesc.value='Test Statistics by Test'\n\t". "oform.action='/cgi-bin/IntegroTS.pl';\n\t". "oform.submit();\n};\n"; my $orgname = $CLIENT{'clnmc'}; my $uberheader; my $test; if ($FORM{'tstid'}) { $test = $FORM{'tstid'}; } elsif ($rptparams[0]) { $test = $rptparams[0]; } else { $test = "TAQ01"; } my ($tstid) = grep((/($test\s*)&/ && ($_=$1)),get_data("tests.$CLIENT{'clid'}")); if (not $tstid) { print HTMLHeader("Error! No Team Alignment Questionnaire Found."); print "<h1>Error! No Team Alignment Questionnaire Found.</h1>\n"; print HTMLFooter(); } my $grplist = getGroups($CLIENT{'clid'}); my @grplist = keys(%$grplist); my $grplistlen = $#grplist + 2; $js .= "var groups = new Array($grplistlen)\;\n"; foreach my $grp (@grplist) { my $gidlist = getIdlist($CLIENT{'clid'}, $grp); my @gidklist = keys(%$gidlist); $js .= "groups[\"$grp\"] = ["; foreach my $cnd (@gidklist) { $js .= "\"$cnd\", "; } if ($#gidklist > -1) { $js = substr($js,0,-2); } $js .= "]\;\n"; $js .= "groups[\"$grp\"] = groups[\"$grp\"].sort()\;\n"; } $js .= "groups[\"all\"] = ["; my $users = get_users($CLIENT{'clid'},"$tstid"); my @users = keys(%$users); foreach my $cnd (@users) { $js .= "\"$cnd\", "; } if ($#users + 1) { $js = substr($js,0,-2); } $js .= "]\;\n"; $js .= "groups[\"all\"] = groups[\"all\"].sort()\;\n"; $js .= "function removeOptions(optionMenu) { \ var oml = optionMenu.options.length; \ for (var i=0; i < oml; i++) { \ optionMenu.remove(0); \ } \ } \ \ function addOptions(optionList, optionMenu) { \ var oml = optionMenu.options.length; \ for (var i=0; i < optionList.length; i++) { \ optionMenu[oml+i] = new Option(optionList[i], optionList[i]); \ } \ } "; $js .= "function buildGroupList(optionListArray, optionListMenu, optionMenu) {\n\t". " removeOptions(optionMenu);". " for (var i=0; i<optionListMenu.options.length; i++) {". " if (optionListMenu.options[i].selected) {". " addOptions(optionListArray[optionListMenu.options[i].value], optionMenu);". " }". " }". "};\n"; print HTMLHeader("Team Alignment Reports",$js); print "<form name=\"integrorpt\" action=\"/cgi-bin/creports.pl\" method=\"Post\" target=\"rptwindow\" enctype=\"multipart/form-data\" >\n"; print "<input type=\"hidden\" name=\"tid\" value=\"$SESSION{'tid'}\">\n"; # For development purposes we hardcode the survey id. # Fix this before production print "<input type=hidden name=\"tstid\" value=\"$tstid\">\n"; print "<input type=hidden name=\"rptno\" value=\"$FORM{'rptno'}\">\n"; print "<input type=hidden name=\"rptdesc\" value=\"$REPORT{'rptdesc'}\">\n"; print "<input type=hidden name=\"rptid\" value=\"$REPORT{'rptid'}\">\n"; print "<input type=\"hidden\" name=\"reportname\" value=\"\">\n"; print "<center>\n<table border=\"1\">\n<caption>Team Alignment Reports</Caption>\n". "<tr><td valign=\"top\"><input type=\"radio\" name=\"grouping\" value=\"all\" checked onClick=\"removeOptions(document.integrorpt.cndid); addOptions(groups['all'], this.form.cndid);\">All Groups</td>\n". "<td valign=\"top\"><input type=\"radio\" name=\"grouping\" value=\"subset\" onClick=\"buildGroupList(groups, this.form.idlist, this.form.cndid)\">Choose Groups<br>\n". "<select name=\"idlist\" onchange='this.form.grouping[1].click();' multiple>\n"; foreach (sort {$a->{'grpnme'} cmp $b->{'grpnme'}} values %$groups) { print "<option value=\"$_->{'grpid'}\">$_->{'grpnme'}</option>\n"; } print "</td><td valign=\"top\"><input type=\"checkbox\" name=\"specificuser\">Specific User<br>"; print "<select name=\"cndid\" onchange='this.form.specificuser.checked=true;'>\n"; #my $users = get_users($CLIENT{'clid'},"$tstid"); #print map("<option value=\"$_\">$_</option>\n",sort(keys(%$users))); print "</select></td></tr>\n"; print "<tr><td colspan=\"3\"><table border=0><tr><td>Organization Name:</td><td><input type=\"text\" name=\"orgname\" value=\"$orgname\"></td></tr>\n"; print "<tr><td>Header Override:</td><td><input type=\"text\" name=\"uberheader\" value=\"$uberheader\"></td></tr></table></tr></td>\n"; print "<tr><td colspan=\"3\">Time Stamp:<ul style=\"list-style: none\">". "<li><input type=\"radio\" name=\"timestamp\" value=\"mostrecent\" checked>Most Recent Survey Taken</li>". "<li><input type=\"radio\" name=\"timestamp\" value=\"currenttime\">Current Time</li>". "<li><input type=\"radio\" name=\"timestamp\" value=\"custom\">Custom Value: ". "<input type=\"text\" name=\"customtime\"></li></tr></td>"; print "</table></center>\n"; print "<hr>\n"; print "<input type=\"checkbox\" name=\"pdf\">Display reports as PDF\n"; print "<p> <ul style=\"list-style: none\"><li><a href=\"javascript:parmsIntegro(document.integrorpt,'trustlevel');\">Team Trust Level Report</a></li>". "<!--<li><a href=\"javascript:parmsIntegro(document.integrorpt,'trustlevelsummary');\">Team Trust Level Summary</a></li>--></ul></p>\n"; print "<p><ul style=\"list-style: none\"><li><a href=\"javascript:parmsIntegro(document.integrorpt,'commeffect');\">Team Alignment Report</a></li>". "<!--<li><a href=\"javascript:parmsIntegro(document.integrorpt,'commeffectsummary');\">Team Alignment Summary</a></li>--></ul></p>\n"; print "<p>General Reports<ul style=\"list-style: none\"><li><a href=\"javascript:parmsIntegro(document.integrorpt,'comments');\">Comments</a></li>"; print "<li><a href=\"javascript:parmsIntegro(document.integrorpt,'comments2');\">Comments by Category</a></li>"; print "<input type=hidden name=\"testsummary\" value=\"composite\">\n"; print "<input type=hidden name=\"showcmts\" value=\"donot\">\n"; #my $commurl = "/cgi-bin/teststats.pl?tstid=SAS01". # "&tid=$FORM{'tid'}&rptid=ACT-C-004&rptdesc=Test%20Statistics%20by%20Test". # "&testsummary=composite&showcmts=donot"; print "<li><a href=\"javascript:commIntegro(document.integrorpt);\">Question Statistics</a></li></p>\n"; print "</form>"; print "<script language=\"JavaScript\">\n<!-- \n"; print "if (document.integrorpt.grouping[0].checked) { addOptions(groups['all'], document.integrorpt.cndid);} else { buildGroupList(groups, document.integrorpt.idlist, document.integrorpt.cndid)}"; print "\n -->\n</script>\n"; print HTMLFooter(); } # Also known as the Group Alignment report sub CommEffectReport { my ($idlist,$groups,$timestamp,$cndid) = @_; my $data = &CommEffectData($CLIENT{'clid'},$TEST{'id'},$idlist,$groups); my $user; if ($cndid) {$user = &CommEffectData($CLIENT{'clid'},$TEST{'id'},{$cndid => 1},$groups);&get_candidate_profile($CLIENT{'clid'},$cndid);} my $claritysum = $data->{'organization'}->{'claritysum'}; my $approvalsum = $data->{'organization'}->{'approvalsum'}; my $histograms = $data->{'organization'}->{'histogram'}; print HTMLHeaderPlain("Team Alignment Report"); print "<Center><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"5\"><b>Team Alignment Questionnaire<br>Team Alignment Report </b><br>$CANDIDATE{'sal'} $CANDIDATE{'nmf'} $CANDIDATE{'nmm'} $CANDIDATE{'nml'}</font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"4\"><b>The Degree to which Team Members are in Alignment</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>$FORM{'orgname'}</b></font><br>\n"; if ($FORM{'uberheader'} ne "") { print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>".$FORM{'uberheader'}."</b></font><br>\n"; } elsif (defined $idlist) { my $groups = getGroups($CLIENT{'clid'}); print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Groups: " .join(", ",map($groups->{$_}->{'grpnme'},split(/,/,$FORM{'idlist'})))."</b></font><br>\n"; } else { #print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Organization-wide Report</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b></b></font><br>\n"; } print $timestamp; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b><table border><tr><th> </th><th><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b>Very Unclear</b></font></th><th> </th>". "<th><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b>Moderately Unclear</b></font></th><th> </th><th><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b>Moderately Clear</b></font></th>". "<th> </th><th><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b>Very Clear</b></font></th><th><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b>Team Clarity</b></font></th>". "<th><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b>Team Approval</b></font></th></tr>\n"; # fill in the rows my $overall = {'clarity' => 0, 'approval' => 0}; foreach my $row (qw(Purpose Values Vision Goals Procedures Roles)) { print "<tr><th>$row</th>"; for my $i (0..6) { print "<td align=\"center\">"; if ($histograms->{$row}->{'Clarity'}->[$i]) { if ($histograms->{$row}->{'Approval'}->[$i]->[2]) { my $img = "/graphic/face-smile.gif"; if ($user and $user->{'organization'}->{'histogram'}->{$row}->{'Approval'}->[$i]->[2]) { $img = "/graphic/face-smile-green.gif"; } print "<img src=\"$img\"><sub>$histograms->{$row}->{'Approval'}->[$i]->[2]</sub><br>"; } if ($histograms->{$row}->{'Approval'}->[$i]->[1]) { my $img = "/graphic/face-red.gif"; if ($user and $user->{'organization'}->{'histogram'}->{$row}->{'Approval'}->[$i]->[1]) { $img = "/graphic/face-red-green.gif"; } print "<img src=\"$img\"><sub>$histograms->{$row}->{'Approval'}->[$i]->[1]</sub><br>"; } if ($histograms->{$row}->{'Approval'}->[$i]->[0]) { my $img = "/graphic/face-blue.gif"; if ($user and $user->{'organization'}->{'histogram'}->{$row}->{'Approval'}->[$i]->[0]) { $img = "/graphic/face-blue-green.gif"; } print "<img src=\"$img\"><sub>$histograms->{$row}->{'Approval'}->[$i]->[0]</sub>"; } } else { print " "; } print "</td>"; } printf "<td align=\"center\">%.1f %%</td>\n", $claritysum->{$row}->{'value'}; printf "<td align=\"center\">%.1f %%</td>\n", $approvalsum->{$row}->{'value'}; print "</tr>\n"; } print "</table>\n<p>Position = Team Clarity</p>\n<p>Countenance = Personal Approval</p>\n"; #print "<table border><caption><b>Overall Team Alignment</b></caption>\n"; #printf "<tr><th>Clarity</th><td>%.1f %%</td></tr>\n", $data->{'organization'}->{'overallclarity'}; #printf "<tr><th>Approval</th><td>%.1f %%</td></tr>\n", $data->{'organization'}->{'overallapproval'}; #print "</table></b></font>\n"; print HTMLFooter(); } sub CommEffectSummary { my ($idlist,$groups,$timestamp) = @_; my $data = &CommEffectData($CLIENT{'clid'},$TEST{'id'},$idlist,$groups); $groups = getGroups($CLIENT{'clid'}); print HTMLHeaderPlain("Team Alignment Summary"); print "<Center><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"5\"><b>Team Alignment Questionnaire<br>Team Alignment Summary</i></b></font><br><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"4\"><b>The degree to which Employees are Aligned with the Organization</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>$FORM{'orgname'}</b></font><br>\n"; if (defined $idlist) { my $groups = getGroups($CLIENT{'clid'}); print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Summary for Groups: " .join(", ",map($groups->{$_}->{'grpnme'},split(/,/,$FORM{'idlist'})))."</b></font><br>\n"; } else { #print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Organization-wide Report</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b></b></font><br>\n"; } print $timestamp; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b><table border>\n"; print "<tr><td> </th><th>Clarity</th><th>Approval</th></tr>\n"; print "<tr><td>Overall</td>"; printf "<td>%.1f %%</td>",$data->{'organization'}->{'overallclarity'}; printf "<td>%.1f %%</td></tr>\n", $data->{'organization'}->{'overallapproval'}; if (exists $data->{'groups'}) { print "<tr><th colspan=3 align=\"left\">Group Breakdown</th></tr>\n"; print "<tr><th>Group</th><th>Clarity</th><th>Approval</th></tr>\n"; foreach my $grp (sort keys %{$data->{'groups'}}) { print "<tr><td>$groups->{$grp}->{'grpnme'}</td>"; printf "<td>%.1f %%</td>", $data->{'groups'}->{$grp}->{'overallclarity'}; printf "<td>%.1f %%</td></tr>\n", $data->{'groups'}->{$grp}->{'overallapproval'}; } } print "</table></b></font>\n"; print HTMLFooter(); } sub TrustLevelReport { my ($idlist,$groups,$timestamp,$cndid) = @_; my $data = &TrustLevelData($CLIENT{'clid'},$TEST{'id'},$idlist,$groups); my $user; if ($cndid) {$user = &TrustLevelData($CLIENT{'clid'},$TEST{'id'},{$cndid => 1},$groups);&get_candidate_profile($CLIENT{'clid'},$cndid);} my $histograms = $data->{'organization'}->{'histogram'}; my $trust = $data->{'organization'}->{'trust'}; print HTMLHeaderPlain("Team Trust Level Report"); print "<center><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"5\"><b>Team Alignment Questionnaire<br>Team Trust Level Report</b><br>$CANDIDATE{'sal'} $CANDIDATE{'nmf'} $CANDIDATE{'nmm'} $CANDIDATE{'nml'} </font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"4\"><b>The level of Trust Building behaviors</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>$FORM{'orgname'}</b></font><br>\n"; if ($FORM{'uberheader'} ne "") { print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>".$FORM{'uberheader'}."</b></font><br>\n"; } elsif (defined $idlist) { my $groups = getGroups($CLIENT{'clid'}); print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Groups: " .join(", ",map($groups->{$_}->{'grpnme'},split(/,/,$FORM{'idlist'})))."</b></font><br>\n"; } else { #print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Organization-wide Report</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b></b></font><br>\n"; } print $timestamp; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b><table border=\"1\"><tr><th> </th><th> </th><th>Team Trust Level</th></tr>\n"; my $baseurl; if (defined($ENV{'SSL_PROTOCOL'})) { $baseurl = "https://"; } else { $baseurl = "http://"; } $baseurl .= $ENV{'HTTP_HOST'}; $baseurl .= "/cgi-bin/bargraph.pl?labels=Low::::Medium::::High&title=Trust%20Level&ylabel=Respondents"; $baseurl .= "&xdim=500&ydim=150"; foreach my $row (qw(Congruence Openness Acceptance Reliability)) { my $url; if (not $user) { $url = "$baseurl&values=".join(":",@{$histograms->{$row}}); } else { my (@values,@values2); for (my $i=0; $i < @{$histograms->{$row}}; $i++) { if ($user->{'organization'}->{'histogram'}->{$row}->[$i]) { push @values ,''; push @values2 , $histograms->{$row}->[$i]; } else { push @values2 ,''; push @values , $histograms->{$row}->[$i]; } } $url = "$baseurl&values=".join(":",@values)."&values2=".join(":",@values2); } print "<tr><th>$row</th>"; print "<td><img src=\"$url\"></td>"; printf "<td align=\"center\">%.1f%% </td></tr>\n", $trust->{$row}->{'value'}; } print "</table></b></font>\n"; #printf "<P><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><b>Overall Team Level of Trust</b></font> = %.1f %%.</p>\n",$data->{'organization'}->{'overalltrust'}; print HTMLFooter(); } sub TrustLevelSummary { my ($idlist,$groups,$timestamp) = @_; my $data = TrustLevelData($CLIENT{'clid'},$TEST{'id'},$idlist,$groups); $groups = getGroups($CLIENT{'clid'}); print HTMLHeaderPlain("Team Trust Level Summary"); print "<Center><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"5\"><b>Team Alignment Questionnaire<br>Team Trust Level Summary</b></font><br><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"4\"><b>The level of Trust Building behaviors</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>$FORM{'orgname'}</b></font><br>\n"; if ($FORM{'uberheader'} ne "") { print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>".$FORM{'uberheader'}."</b></font><br>\n"; } elsif (defined $idlist) { my $groups = getGroups($CLIENT{'clid'}); print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Summary for Groups: " .join(", ",map($groups->{$_}->{'grpnme'},split(/,/,$FORM{'idlist'})))."</b></font><br>\n"; } else { #print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Organization-wide Summary</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b></b></font><br>\n"; } print $timestamp; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"1\"><b><table border>\n"; print "<tr><td> </th><th>Team Trust Level</th></tr>\n"; print "<tr><td>Overall</td>"; printf "<td>%.1f %%</td></tr>\n", $data->{'organization'}->{'overalltrust'}; if (exists $data->{'groups'}) { print "<tr><th colspan=2 align=\"left\">Group Breakdown</th></tr>\n"; print "<tr><th>Group</th><th>Team Trust Level</th></tr>\n"; foreach my $grp (sort keys %{$data->{'groups'}}) { print "<tr><td>$groups->{$grp}->{'grpnme'}</td>"; printf "<td>%.1f %%</td></tr>\n", $data->{'groups'}->{$grp}->{'overalltrust'}; } } print "</table></b></font>\n"; print HTMLFooter(); } sub CommentsReport { my ($idlist, $timestamp, $bycat) = @_; my @filelist = &get_test_result_files($testcomplete, $CLIENT{'clid'},$TEST{'id'}); my @comments; for (my $i=0; $i<=59; $i++) {$comments[$i] = [];} my @questions = map([split(/&/,$_)],&get_question_list($TEST{'id'},$CLIENT{'clid'})); foreach (@questions) {$_->[4] =~ s/:::.*$//;} foreach my $file (@filelist) { my $user = $file; $user =~ s/.$TEST{'id'}$//; $user =~ s/^$CLIENT{'clid'}.//; if (defined $idlist and not $idlist->{$user}) { next; } my ($answers,$usercomm) = &get_survey_results( $CLIENT{'clid'}, $user, $TEST{'id'}); for (my $i=1; $i<=58; $i++) { if ($usercomm->[$i] == -1) { $comments[$i] = -1; } elsif ($usercomm->[$i]) { push @{$comments[$i]},$usercomm->[$i]; } } if ($answers->[59]) { push @{$comments[59]},$answers->[59]; } } print HTMLHeaderPlain("Comments Report"); print "<center><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"5\"><b>Team Alignment Questionnaire<br>Comments Report</b></font><br><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>$FORM{'orgname'}</b></font><br>\n"; if ($FORM{'uberheader'} ne "") { print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>".$FORM{'uberheader'}."</b></font><br>\n"; } elsif (defined $idlist) { my $groups = getGroups($CLIENT{'clid'}); print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Groups: " .join(", ",map($groups->{$_}->{'grpnme'},split(/,/,$FORM{'idlist'})))."</b></font><br>\n"; } else { #print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b>Organization-wide Report</b></font><br>\n"; print "<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><b></b></font><br>\n"; } print $timestamp; print "</center>\n"; print "<blockquote>\n"; my @outary = (); for (my $i=1; $i <=40; $i++) { if ($comments[$i] == -1) { # inactive question next; } $outary[$i] = "<hr width=\"100%\"><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><b>\n"; $outary[$i] .= "$questions[$i]->[0] - $questions[$i]->[4]<p>\n"; if (@{$comments[$i]}) { $outary[$i] .= "<ul>\n"; foreach (@{$comments[$i]}) { $outary[$i] .= "<li>$_</li>\n"; } $outary[$i] .= "</ul>\n"; } else { $outary[$i] .= "<ul><li><small><i>No Comments</i></small></li></ul>\n"; } $outary[$i] .= "</b></font>\n"; } # Read in .rgo file which defines question presentation order my $out; my $lookupfile = join($pathsep,$dataroot,"IntegroTAQ.rgo"); if ($bycat && -e $lookupfile) { my $fh = new FileHandle; if ($fh->open($lookupfile)) { $out = ""; my @lines = <$fh>; $fh->close(); shift @lines; foreach (@lines) { chomp; my @line = split(/\&/,$_); my $section = shift @line; if ($section ne "") { $out .= "<tr><td colspan=6><hr width=\"100\%\"></td></tr>\n"; $out .= "<tr><td colspan=6><font size=+1><b>$section</b></font></td></tr>\n"; } foreach my $sub (@line) { my ($subheader, $quess) = split(/:/,$sub); if ($subheader ne "") { $out .= "<hr width=100%><tr><td colspan=6><b>$subheader:</b></td></tr>\n"; } my @ques = split(/\,/,$quess); foreach my $quesid (@ques) { $out .= $outary[$quesid]; } } } print $out; } } else { for (1 .. $#outary) { print $outary[$_]; } } print "<hr width=\"100%\">\n"; print "</blockquote>\n"; #print "<pre>".Dumper(\@questions,\@comments)."</pre>\n"; print "<center>".HTMLFooter(); } sub print_test_chooser { my @trecs = @_; my ($testscompleted, $testsinprogress, $testspending, $href, $tstoption, $tstoptions); my $js = "function setTest(oform,test) {\n\t". "oform.tstid.value=test;\n\t". "oform.submit();\n};\n"; for (0 .. $#trecs) { my ($desc,$id) = split(/&/, $trecs[$_]); $testscompleted = CountTestFiles($testcomplete,$CLIENT{'clid'},$id); $testsinprogress = CountTestFiles($testinprog, $CLIENT{'clid'},$id); $testspending = CountTestFiles($testpending, $CLIENT{'clid'},$id); $href="javascript:setTest(document.testform1,\'$id\')\;"; $tstoption =" <TR> <TD valign=top><FONT SIZE=2><a href=\"$href\">$id</a></FONT></TD> <TD valign=top><FONT SIZE=2>$desc</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testscompleted</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testsinprogress</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testspending</FONT></TD> </TR>\n"; $tstoptions = join('', $tstoptions, $tstoption); } print HTMLHeader("Integro Learning Custom Reports", $js); print "<CENTER><B>Please choose the survey for which you would like reports:</B><br> <form name=\"testform1\" action=\"/cgi-bin/creports.pl\" method=\"Post\"> <input type=\"hidden\" name=\"tid\" value=\"$SESSION{'tid'}\"> <input type=\"hidden\" name=\"tstid\" value=\"\"> <input type=hidden name=\"rptno\" value=\"$FORM{'rptno'}\"> </form> <TABLE cellpadding=1 cellspacing=1 border=0 width=\"100\%\"> <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> <TR> <TD valign=top><B><FONT SIZE=1>Test ID</FONT></B></TD> <TD valign=top><B><FONT SIZE=1>Description</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>Cmp</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>InP</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>Pnd</FONT></B></TD> </TR> <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> $tstoptions <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> </TABLE> "; print HTMLFooter(); exit(); }