<?php
$what=(isset($_GET["what"]) ? $_GET["what"] : false);

require "config.inc.php";

function listRepos($db){
	$repos = array();
	$res=$db->query("SELECT * FROM repo WHERE active=1 ORDER BY ID");
	if ($res) while ($repo = $res->fetchObject()) {
		$repos[$repo->main][$repo->sub]=$repo;
	}
	// echo "<pre>"; print_r($repos);echo "</pre>";
	foreach($repos as $repomain) {
		foreach ($repomain as $repo) {
			/*printf ("<th align='left'>%s</th>", $repo->main);*/
			$repos[$repo->main][$repo->sub] = $repo;
			break;
		}
	}
	return $repos;
}

function Report ($db, $repos) {
	global $what;

	/*$repos=array();
	$res=$db->query("SELECT * FROM repo WHERE active=1 ORDER BY ID");
	if ($res) while ($repo = $res->fetchObject()) {
		$repos[$repo->main][$repo->sub]=$repo;
	}*/

	if (substr($what,0,1)=='%') {
		$sql=sprintf("SELECT DISTINCT name FROM rpm WHERE SUBSTRING(name,1,1)='%s' ORDER BY name", substr($what,1,1));
	} else {
		$sql=sprintf("SELECT DISTINCT name FROM acls WHERE owner='%s' ORDER BY name", $what);
	}
	//echo "<p>SQL=$sql</p>";

	/*echo "<table id='fedora-list-packages'>\n";
	echo "<tr class='odd'><th>Package</th><th>Owner(s)</th>";

	foreach($repos as $repomain) {
		foreach ($repomain as $repo) {
			printf ("<th align='left'>%s</th>", $repo->main);
			break;
		}
	}
	echo "</tr>\n";*/

	$i=0;
	$res=$db->query($sql);
	if ($res) while ($desc = $res->fetchObject()) {
		$rpmname = $desc->name;

		$sql2="SELECT DISTINCT owner FROM acls WHERE name LIKE '$rpmname'";
	 	$res2=$db->query($sql2);
		$dispowner="";
		if ($res2) while ($owner= $res2->fetchObject()) {
			if ($dispowner) $dispowner .= "<br/>";
			$dispowner .= sprintf ("<a href=\"%s?what=%s\">%s</a>", $_SERVER["PHP_SELF"], $owner->owner, $owner->owner);
		}

		$sql3 = "SELECT * FROM rpm WHERE name LIKE '$rpmname'";
	 	$res3=$db->query($sql3);
		$rpm = ($res3 ? $res3->fetchObject() : false);

		if ($rpm) {
			$url = $rpm->url;
			$des = htmlentities($rpm->summary);

			$rpms=array();
			do {
				$rpms[$rpm->repo_main."-".$rpm->repo_sub]=$rpm;
			} while ($rpm = $res3->fetchObject());

			printf ("<tr class=\"%s\">\n\t<td><a href=\"zoom.php?rpm=%s\" title=\"%s\">%s</a></td>\n\t<td>%s</td>\n",
				($i%2 ? "odd" : "even"), $rpmname, $des, $rpmname, $dispowner);


			foreach($repos as $repomain) {
				$display="";
				$class="";
				foreach ($repomain as $repo) {
					if (isset($rpms[$repo->main."-".$repo->sub])) {
						$rpm=$rpms[$repo->main."-".$repo->sub];

						$maxver = (isset($rpms["rawhide-"]) ? $rpms["rawhide-"]->ver : "");

						switch ($repo->sub) {
							case "base":
								if (isset($rpms[$repo->main."-updates"])) {
									$display .= sprintf("%s-%s<br/>", $rpm->ver, $rpm->rel);
								} else {
									$display .= sprintf("<strong>%s</strong>-%s<br/>", $rpm->ver, $rpm->rel);
									$class = ($rpm->ver == $maxver ? "check" : "attn");
								}
								break;
							case "":
								$display .= sprintf("<strong>%s</strong>-%s<br/>", $rpm->ver, $rpm->rel);
								break;
							case "updates":
								$display .= sprintf("<strong>%s</strong>-%s <small>(updates)</small><br/>", $rpm->ver, $rpm->rel);
								$class = ($rpm->ver == $maxver ? "check" : "attn");
								break;
							case "testing":
								$display .= sprintf("%s-%s <small>(testing)</small><br/>", $rpm->ver, $rpm->rel);
								$class = ($rpm->ver == $maxver ? "info" : "attn");
								break;
						}
					} // RPM exists
				} // sub repo

				if ($class && $maxver) {
					printf("\t<td class=\"%s\">%s</td>\n", $class, $display);
				} else if ($display) {
					printf("\t<td>%s</td>\n", $display);
				} else {
					echo "\t<td>&nbsp;</td>\n";
				}
			} // mainrepo

			echo "</tr>\n";
			$i++;
		}
	} // each Line
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
	<head>
		<title>Packages in Fedora</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                <link rel="stylesheet" type="text/css" media="screen" href="css/rpmphp.css"/>
		<!--<link rel="stylesheet" type="text/css" media="print" href="css/rpmphp-print.css">-->
		<link rel="shortcut icon" href="images/favicon.ico"/>
		<link rel="icon" href="images/favicon.ico"/>
	</head>

	<body>
		<div id="wrapper">
<?php
include '_header.php';
?>
			<div id="fedora-content">
				<div id="ariane">
					<p>You are here: </p>
					<ul>
						<li><a href="./">Reports home</a></li>
						<li><a href="#">All packages</a></li>
					</ul>
				</div>
				<div id="filter">
					<form action='<?php echo $_SERVER["PHP_SELF"]; ?>' method='get'>
						<fieldset>
							<legend>Filter packages</legend>
							<label for="what">Criteria:  </label>
							<select name="what" id="what">
								<optgroup label="Pakages">
<?php
try {
	$db = new PDO ("mysql:dbname=" . MYBASE . ";host=" . MYHOST, MYUSER, MYPASS);

	$sql="SELECT DISTINCT CONCAT('%',SUBSTRING(name,1,1)) as init FROM rpm ORDER BY init";
	$res=$db->query($sql);
	if ($res)while ($start = $res->fetchObject()) {
		printf("\t\t\t\t\t\t\t\t\t<option value=\"%s\" %s>Start with %s</option>\n", $start->init, ($what==$start->init ? " selected=\"selected\"" : ""), substr($start->init,1));
	} else {
		echo "\t\t\t\t\t\t\t\t\t<option value=\"remi\">remi</option>\n";
	}
?>
								</optgroup>
								<optgroup label="Owner">
<?php
	$sql="SELECT DISTINCT owner FROM acls ORDER BY owner";
	$res=$db->query($sql);
	if ($res)while ($owner = $res->fetchObject()) {
		printf("\t\t\t\t\t\t\t\t\t<option value=\"%s\" %s>%s</option>\n", $owner->owner, ($what==$owner->owner ? " selected=\"selected\"" : ""), $owner->owner);
	} else {
		echo "\t\t\t\t\t\t\t\t\t<option value=\"remi\">remi</option>\n";
	}
?>
								</optgroup>
							</select>
							<input type="submit" value="Filter" />
						</fieldset>
					</form>
				</div>
<?php
	$sql='SELECT MAX(stamp) AS stamp FROM repo';
	$res=$db->query($sql);
	if ($res && $row=$res->fetchObject()) {
		printf("<p>Repositories last updated %s.</p>", date("r", $row->stamp));
	}

?>
				<h1>Packages in Fedora</h1>
				<table id="list-packages">
					<thead>
						<tr>
							<th>Package</th>
							<th>Owner(s)</th>
<?php
		$repos = listRepos($db);
		$repos_k = array_keys($repos);
		foreach ( $repos_k as $r ) {
?>
							<th><?php echo $r; ?></th>
<?php
		}
?>

						</tr>
					</thead>
					<tbody>
<?php
	if ($what) Report($db, $repos);
	else echo "<tr><td colspan=\"" . (count($repos) + 3) . "\"><h2>Choose a criteria from the filter menu</h2></td></tr>";
	//echo "<pre>"; print_r($rpms); echo "</pre>";
} catch(PDOException $e) {
?>
					<tr>
						<td colspan="<?php echo count($repos_k) + 3; ?>">
<?php
	printf("%s ERREUR : %s\n", date("r"),  $e->getMessage());
?>
						</td>
					</tr>
<?php
}
?>
					</tbody>
				</table>
				<ul id="legend">
					<li>Legend: </li>
					<li><strong>Upstream</strong>: bold if stable. </li>
					<li><strong>Repo</strong>: bold for latest release.</li>
					<li class='check'>Lastest released (stable if exists)</li>
					<li class='info'>Lastest in testing</li>
					<li class='attn'>Lastest not available</li>
				</ul>
			</div><!-- /fedora-content -->
<?php
include '_footer.php';
?>
		</div>
	</body>
</html>