Initial add of defaria.com
[clearscm.git] / defaria.com / GD / Rantest / VersionPerTestcase.php
1 <?php
2 ////////////////////////////////////////////////////////////////////////////////
3 //
4 // File:        VersionPerTestcase.php
5 // Revision:    1.2
6 // Description: Produce a report of versions per testcase
7 // Author:      Andrew@ClearSCM.com
8 // Created:     Mon Apr 28 15:20:06 MST 2008
9 // Modified:    
10 // Language:    PHP
11 //
12 // (c) Copyright 2008, General Dynamics, all rights reserved.
13 //
14 // All rights reserved except as subject to DFARS 252.227-7014 of contract
15 // number CP02H8901N issued under prime contract N00039-04-C-2009.
16 //
17 // Warning: This document contains technical data whose export is restricted
18 // by the Arms Export Control Act (Title 22, U.S.C., Sec 2751, et seq.) or the
19 // Export Administration Act of 1979, as amended, Title, 50, U.S.C., App. 2401
20 // et seq. Violations of these export laws are subject to severe criminal
21 // penalties. Disseminate in accordance with provisions of DoD Directive
22 // 5230.25.
23 //
24 ////////////////////////////////////////////////////////////////////////////////
25 $script = basename ($_SERVER["PHP_SELF"]);
26
27 include_once "$_SERVER[DOCUMENT_ROOT]/php/Utils.php";
28 include_once "$_SERVER[DOCUMENT_ROOT]/php/RantestDB.php";
29
30 $testcase       = $_REQUEST["testcase"];
31 $user           = $_REQUEST["user"];
32
33 $build          = (empty ($_REQUEST["build"]))     ? "*"         : $_REQUEST["build"];
34 $level          = (empty ($_REQUEST["level"]))     ? "*"         : $_REQUEST["level"];
35 $DUT            = (empty ($_REQUEST["DUT"]))       ? "*"         : $_REQUEST["DUT"];
36 $test           = (empty ($_REQUEST["test"]))      ? "*"         : $_REQUEST["test"];
37
38 $action         = (empty ($_REQUEST["action"]))    ? "Report"     : $_REQUEST["action"];
39 $type           = (empty ($_REQUEST["type"]))      ? "All"        : $_REQUEST["type"];
40 $sortBy         = (empty ($_REQUEST["sortBy"]))    ? "Date"       : $_REQUEST["sortBy"];
41 $direction      = (empty ($_REQUEST["direction"])) ? "descending" : $_REQUEST["direction"];
42
43 $historyFor     = setTestcase ($testcase);
44
45 // Sorting functions
46 function sortVersion ($a, $b) {
47   global $direction;
48
49   return cmpStr ($a, $b, "Version", $direction);
50 } // sortUnitVersion
51
52 function getData ($testcase) {
53   global $sortBy;
54
55   $data = getTestVersions ($testcase);
56
57   // Sort data
58   if ($sortBy == "Testcase") {
59     uasort ($data, "sortTestcase");
60   } elseif ($sortBy == "Unit") {
61     uasort ($data, "sortUnit");
62   } elseif ($sortBy == "Type") {
63     uasort ($data, "sortType");
64   } elseif ($sortBy == "Status") {
65     uasort ($data, "sortStatus");
66   } elseif ($sortBy == "Duration") {
67     uasort ($data, "sortDuration");
68   } elseif ($sortBy == "Version") {
69     uasort ($data, "sortVersion");
70   } else {
71     uasort ($data, "sortDate");
72   } // if    
73
74   return $data;
75 } // getData
76
77 function createHeader () {
78   global $historyFor;
79
80   $header = <<<END
81 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
82    "http://www.w3.org/TR/html4/strict.dtd">
83 <html>
84 <head>
85   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
86   <link rel="stylesheet" type="text/css" media="screen" href="/css/Testing.css">
87   <link rel="stylesheet" type="text/css" media="screen" href="/css/Tables.css">
88   <title>Test Versions for $historyFor</title>
89 </head>
90
91 <body>
92 END;
93
94   $header .= banner ();
95   $header .= <<<END
96 <h1 align="center">Test Versions for $historyFor</h1>
97 END;
98
99   return $header;
100 } // createHeader
101
102 function createPage ($testcase, $forEmail = false, $message = "") {
103   global $webdir, $direction, $sortBy, $script;
104   global $build, $level, $DUT, $test;
105
106   $data = getData ($testcase);
107
108   // Flip direction
109   $direction = ($direction == "ascending") ? "descending" : "ascending";
110
111   if (isset ($testcase)) {
112     $urlParms  = "$script?testcase=$testcase&action=$action&direction=$direction&sortBy";
113   } else {
114     $urlParms  = "$script?build=$build&level=$level&DUT=$DUT&test=$test&action=$action&direction=$direction&sortBy";
115   } // if
116
117   if (!$forEmail) {
118     if ($sortBy == "Testcase") {
119       $testcaseDirection = ($direction == "ascending") 
120         ? "<img src=/images/down.png border=0>"
121         : "<img src=/images/up.png border=0>";
122     } elseif ($sortBy == "Unit") {
123       $unitDirection = ($direction == "ascending") 
124         ? "<img src=/images/down.png border=0>"
125         : "<img src=/images/up.png border=0>";
126     } elseif ($sortBy == "Type") {
127       $typeDirection = ($direction == "ascending") 
128         ? "<img src=/images/down.png border=0>"
129         : "<img src=/images/up.png border=0>";
130     } elseif ($sortBy == "Status") {
131       $statusDirection = ($direction == "ascending") 
132         ? "<img src=/images/down.png border=0>"
133         : "<img src=/images/up.png border=0>";
134     } elseif ($sortBy == "Duration") {
135       $durationDirection = ($direction == "ascending") 
136         ? "<img src=/images/down.png border=0>"
137         : "<img src=/images/up.png border=0>";
138     } elseif ($sortBy == "Version") {
139       $versionDirection = ($direction == "ascending") 
140         ? "<img src=/images/down.png border=0>"
141         : "<img src=/images/up.png border=0>";
142     } else {
143       $dateDirection = ($direction == "ascending") 
144         ? "<img src=/images/down.png border=0>"
145         : "<img src=/images/up.png border=0>";
146     } // if
147       
148     if (isset ($message)) {
149       $page .= "<div align=\"center\">$message</div>";
150     } // if
151   } // if
152
153   $page .= <<<END
154 <table align="center" width="90%">
155   <thead>
156 END;
157
158   if (!$forEmail) {
159     $page .= <<<END
160     <tr>
161       <th class=clear align="left" colspan="2"><a href="$script?action=Export&testcase=$testcase"><input type="submit" value="Export to CSV"></a></th>
162       <th class=clear align="right" colspan="6"><form action="$script?action=Mail&testcase=$testcase" method="post">
163 END;
164
165     $page .= emailUsersDropdown ();
166     $page .= <<<END
167         </select>
168         <input type="submit" value="Send"></form>
169       </th>
170     </tr>
171 END;
172   } // if
173
174   $page .= <<<END
175     <tr>
176       <th class=left>#</th>
177       <th><a href="$urlParms=Testcase">Testcase&nbsp;$testcaseDirection</a></th>
178       <th><a href="$urlParms=Date">Start Date/Time&nbsp;$dateDirection</a></th>
179       <th><a href="$urlParms=Unit">Unit&nbsp;$unitDirection</a></th>
180       <th><a href="$urlParms=Type">Type&nbsp;$typeDirection</a></th>
181       <th><a href="$urlParms=Status">Status&nbsp;$statusDirection</a></th>
182       <th><a href="$urlParms=Duration">Duration&nbsp;$durationDirection</a></th>
183       <th class=right><a href="$urlParms=Version">Version&nbsp;$versionDirection</a></th>
184     </tr>
185   </thead>
186   <tbody>
187 END;
188
189   foreach ($data as $line) {
190     $row_nbr++;
191     $row_color          = setRowColor ($line["Status"]);
192     $line["Status"]     = colorResult ($line["Status"]);
193     $duration           = FormatDuration ($line["Duration"]);
194
195     $page .= <<<END
196     <tr $row_color>
197       <td align="center">$row_nbr</td>
198       <td><a href="rantest.php?testName=$line[Testcase]&runid=$line[_runid]&date=$reportDate">$line[Testcase]</a></td>
199       <td align="center">$line[Start]</td>
200       <td align="center">$line[Unit]</td>
201       <td align="center">$line[Type]</td>
202       <td align="center">$line[Status]</td>
203       <td align="right">$duration</td>
204       <td align="center">$line[Version]</td>
205     </tr>
206 END;
207   } // foreach
208
209   $page .= <<<END
210   </tbody>
211 </table>
212 END;
213
214   return $page;
215 } // createPage
216
217 function exportTestVersionsCSV ($testcase) {
218   global $historyFor;
219
220   if (isset ($testcase)) {
221     $title      = "Test Versions for $historyFor";
222     $filename   = "Test Versions." . $testcase . ".csv";
223   } else {
224     $title      = "Test Versions for All Tests";
225     $filename   = "Test Versions for All Tests.csv";
226   } // if
227
228   // Protect $filename from wildcards
229   $filename = preg_replace ("/\*/", "%", $filename);
230
231   header ("Content-Type: application/octect-stream");
232   header ("Content-Disposition: attachment; filename=\"$filename\"");
233
234   print exportCSV (getData ($testcase), $title);
235
236   exit;
237 } // exportTestHistoryCSV
238
239 function setTestcase () {
240   global $testcase, $build, $level, $DUT, $test;
241
242   if (empty ($testcase)) {
243     if (empty ($test)) {
244       $test = "*";
245     } // if
246
247     if ($build == "*" and
248         $level == "*" and
249         $DUT   == "*" and
250         $test  == "*") {
251       unset ($testcase);
252       return "All Tests";
253     } else {
254       $testcase  = "${build}_${level}_${DUT}_${test}";
255     } // if
256   } // if
257
258   return $testcase;
259 } // setTestcase
260
261 function displayReport ($testcase, $message = "") {
262   print createHeader    ();
263   print createPage      ($testcase, false, $message);
264
265   copyright ();
266 } // displayReport
267
268 function mailTestVersionsReport ($testcase, $pnbr, $username) {
269   global $historyFor;
270
271   if (isset ($testcase)) {
272     $subject    = "Test Versions for $historyFor";
273     $filename   = "Test Versions." . $testcase . ".csv";
274   } else {
275     $subject    = "Test Versions for All Tests";
276     $filename   = "Test Versions for All Tests.csv";
277   } // if
278
279   // Protect $filename from wildcards
280   $filename = preg_replace ("/\*/", "%", $filename);
281
282   $body         = createPage ($testcase, true);
283   $attachment   = exportCSV (getData ($testcase, true), $subject);
284
285   return mailReport ($pnbr, $username, $subject, $body, $filename, $attachment);
286 } // mailTestVersionsReport
287
288 openDB ();
289
290 $historyFor = setTestcase ();
291
292 switch ($action) {
293   case "Export":
294     exportTestVersionsCSV ($testcase);
295     break;
296
297   case "Mail":
298     list ($pnbr, $username) = explode (":", $user);
299     displayReport ($testcase, mailTestVersionsReport ($testcase, $pnbr, $username));
300     break;
301
302   default:
303     displayReport ($testcase);
304     break;
305 } // switch  
306 ?>
307 </body>
308 </html>