<?php

// Trim whitespace, remove warnings
$_GET['Arg']       = isset($_GET['Arg'])? trim($_GET['Arg']):"";
$_GET['Action']    = isset($_GET['Action'])? trim($_GET['Action']):"";
$_GET['Repo']      = isset($_GET['Repo'])? trim($_GET['Repo']):"";
$_GET['Section']   = isset($_GET['Section'])? trim($_GET['Section']):"";
$_GET['System']    = isset($_GET['System'])? trim($_GET['System']):"OS2008";
$_GET['PackageID'] = isset($_GET['PackageID'])? trim($_GET['PackageID']):"";

// Query string should not contain wrong characters
$_GET['Arg']       = preg_replace("/([^a-z0-9\-\_\*])/i","",$_GET['Arg']);
$_GET['Arg']       = preg_replace("/([*])/","\*",$_GET['Arg']);

// Open database
$DBS = mysqli_connect("localhost","rmyou_MPA","mysecretmpapassword") or die("Unable to connect to MySQL");
$DB  = mysqli_select_db($DBS,"rmyou_MPAH") or die("Could not select database");

// No output yet
$OUT = "<TR><TD WIDTH=\"100%\" COLSPAN=3 ALIGN=CENTER><H2>Search&nbsp;Something</H2></TD></TR>";

// Get a list of repositories
$DATA     = mysqli_query($DBS,"SELECT ID,URL,System FROM Repos");
$REPOLIST = ""; 
while($Row=mysqli_fetch_array($DATA))
{
  #if ($Row["System"] == "./") $Row["System"] = 'Harmattan';
  $Repos[$Row["ID"]] = $Row["URL"]." (".$Row["System"].")";
  $REPOLIST .= "<OPTION VALUE=\"".($Row["ID"]+1)."\""
             . ($Row["ID"]+1==$_GET['Repo']? " SELECTED":"")
             . ">".$Repos[$Row["ID"]]."\n";
}

// Get a list of sections
$DATA     = mysqli_query($DBS,"SELECT DISTINCT Section FROM Packages ORDER BY Section");
$SECLIST = ""; 
while($Row=mysqli_fetch_array($DATA))
  if($Row["Section"]!="")
    $SECLIST .= "<OPTION VALUE=\"".$Row["Section"]."\""
              . ($Row["Section"]==$_GET["Section"]? " SELECTED":"")
              . ">".$Row["Section"]."\n";

// Get a list of systems
$DATA     = mysqli_query($DBS,"SELECT DISTINCT System FROM Repos ORDER BY System");
$SYSLIST = ""; 
while($Row=mysqli_fetch_array($DATA)) {
  if ($Row["System"] == "./") $temp_system = 'Harmattan';
  else $temp_system = $Row["System"];
  if($Row["System"]!="")
    $SYSLIST .= "<OPTION VALUE=\"".$Row["System"]."\""
              . ($Row["System"]==$_GET["System"]? " SELECTED":"")
              . ">".$temp_system."\n";
              #. ">".$Row["System"]."\n";
}

if(($_GET['Action']=="install") && ($_GET['PackageID']!=""))
{
  $QUERY = "SELECT Packages.Name AS Package,"
         . " Repos.Name AS Repo,"
         . " Repos.URL,"
         . " Repos.Comps" 
         . " FROM Packages,Repos"
         . " WHERE Packages.ID=".intval($_GET['PackageID'])
         . " AND Repos.ID=Packages.Repo";
  $DATA  = mysqli_query($DBS,$QUERY);

  if($Row=mysqli_fetch_array($DATA))
  {
    header("Content-type: application/x-install-instructions");
    header("Content-Disposition: attachment; filename=\"".$Row["Package"].".install\"");
    print "[install]\n"
        . "catalogues = repository\n"
        . "package    = ".$Row["Package"]."\n"
        . "\n"
        . "[repository]\n"
        . "name       = ".$Row["Repo"]."\n"
        . "uri        = ".$Row["URL"]."\n"
        . "components = ".$Row["Comps"]."\n";
    exit;
  }
}

if(($_GET['Action']=="depends") && ($_GET['PackageID']!=""))
{
  $DATA = mysqli_query($DBS,"SELECT Name,Depends FROM Packages WHERE ID=".intval($_GET['PackageID']));

  if($Row=mysqli_fetch_array($DATA))
  {
    $Packages = preg_split("/\s*,\s*/",$Row["Depends"]);
    $Packages = preg_replace("/\s*\(.*\)$/","",$Packages);
    $QUERY    = "SELECT * FROM Packages WHERE (";  

    for($J=0;$J<count($Packages);$J++)
      $QUERY .= ($J? " OR ":"")
              . "NAME='".addcslashes($Packages[$J],"'\\")."'";

    if($_GET['System']!="")
      $QUERY .= ") AND EXISTS (SELECT * FROM Repos WHERE ID=Repo"
              . " AND System='".addcslashes($_GET['System'],"'\\")."')";

    $QUERY.= " ORDER BY Name ASC,Repo ASC,Version DESC";
    $DATA  = mysqli_query($DBS,$QUERY);
    $OUT   = ShowList("Dependencies for package '".$Row["Name"]."'",$DATA,"");
  }
}

if(($_GET['Action']=="suggests") && ($_GET['PackageID']!=""))
{
  $DATA = mysqli_query($DBS,"SELECT Name,Suggests FROM Packages WHERE ID=".intval($_GET['PackageID']));

  if($Row=mysqli_fetch_array($DATA))
  {
    $Packages = preg_split("/\s*,\s*/",$Row["Suggests"]);
    $Packages = preg_replace("/\s*\(.*\)$/","",$Packages);
    $QUERY    = "SELECT * FROM Packages WHERE (";

    for($J=0;$J<count($Packages);$J++)
      $QUERY .= ($J? " OR":"")
              . " NAME='".addcslashes($Packages[$J],"'\\")."'";

    if($_GET['System']!="")
      $QUERY .= ") AND EXISTS (SELECT * FROM Repos WHERE ID=Repo"
              . " AND System='".addcslashes($_GET['System'],"'\\")."')";

    $QUERY.= " ORDER BY Name ASC,Repo ASC,Version DESC";
    $DATA  = mysqli_query($DBS,$QUERY);
    $OUT   = ShowList("Suggestions for package '".$Row["Name"]."'",$DATA,"");
  }
}

else if(($_GET['Action']=="list") && (($_GET['Arg']!="") || ($_GET['Section']!="")))
{
  $QUERY = "SELECT * FROM Packages WHERE";
  $JOINT = "";

  if($_GET['Arg']=="\*")
    $_GET['Arg'] = "";

  if($_GET['Arg']!="")
  {
    $JOINT  = " AND";
    $QUERY .=
      " (Name LIKE '%"
    . addcslashes($_GET['Arg'],"'\\")
    . "%' OR Title LIKE '%"
    . addcslashes($_GET['Arg'],"'\\")
    . "%' OR Text LIKE '%"
    . addcslashes($_GET['Arg'],"'\\")
    . "%')";
  }

  if($_GET['System']!="")
  {
    $QUERY .= $JOINT
            . " EXISTS (SELECT * FROM Repos WHERE ID=Repo"
            . " AND System='".addcslashes($_GET['System'],"'\\")."')";
    $JOINT  = " AND";
  }

  if($_GET['Section']!="")
  {
    $QUERY .= $JOINT." Section='".addcslashes($_GET['Section'],"'\\")."'";
    $JOINT  = " AND";
  }

  if($_GET['Repo']>0)
  {
    $QUERY .= $JOINT." Repo=".(intval($_GET['Repo'])-1);
    $JOINT  = " AND";
  }

  $QUERY.= " ORDER BY Name ASC,Repo ASC,Version DESC";
  $DATA  = mysqli_query($DBS,$QUERY);
  $OUT   = ShowList("Search results for '".$_GET['Arg']."'",$DATA,$_GET['Arg']);
}

// Done with the database
//mysql_close($DBS);

function ShowList($Title,$DATA,$Highlight)
{
  global $Repos;

  $Package = "";
  $Repo    = -1;
  $OUT     = "<TR><TH WIDTH=\"100%\">".$Title."</TH><TH>Size</TH>"
           . "<TH>Install</TH></TR>\n";

  for($J=0,$I=0;$Row=mysqli_fetch_array($DATA);$J++)
    if(($Row["Name"]==$Package)&&($Row["Repo"]==$Repo))
      $Download.= ",\n<A HREF=\"".$Row["DebURL"]."\">".$Row["Version"]."</A>";
    else
    {
      // Dump previous package information into output
      if($Package!="")
        $OUT .= $Top.TableRow("Download",$Download).$Bottom;

      $Package = $Row["Name"];
      $Repo    = $Row["Repo"];
      $Download= "<A HREF=\"".$Row["DebURL"]."\">".$Row["Version"]."</A>";
      //$Install = $_SERVER['PHP_SELF']."?Action=install&PackageID=".$Row["ID"]
               //. "&Arg=".$_GET['Arg']."&System=".$_GET['System']
               //. "&Section=".$_GET['Section']."&Repo=".$_GET['Repo'];
      $Install = $Row["DebURL"];
      $Color   = $I++&1? "#E8FFE8":"#FFFFE8";
      $Image   = $Row["ImgURL"]!=""?
        ("<TD><IMG WIDTH=26 HEIGHT=26 SRC=\"Images/".$Row["ImgURL"]."\"></TD>")
      : "";


      if($Highlight=="")
      {
        $Head = $Row["Title"];
        $Text = $Row["Text"];
      }
      else
      {
        $Head = preg_replace(
          "/(".$Highlight.")/i",
          "<SPAN STYLE=\"background-color:#FFFF20;\">$1</SPAN>",
          $Row["Title"]
        );
        $Text = preg_replace(
          "/(".$Highlight.")/i",
          "<SPAN STYLE=\"background-color:#FFFF20;\">$1</SPAN>",
          $Row["Text"]
        );
      }

      $Maintainer = preg_replace("/\s+&lt;<A HREF=\"mailto:&lt;/", "", $Row['Maintainer']);
      #$Maintainer = preg_replace("/\>+/", ">", $Maintainer);

      $Top =
            "<A NAME=\"".$Row["Name"]."\"></A>\n"
          . "<TR BGCOLOR=\"".$Color."\">\n"
          . "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\"100%\" ID=\"Row".$J."\">"
          . "<TABLE WIDTH=\"100%\"><TR VALIGN=MIDDLE"
          . " ONCLICK=\"ToggleLine(".$J.");\""
          . " ONMOUSEOVER=\"this.style.color='#0000A0';\""
          . " ONMOUSEOUT=\"this.style.color='#000000';\">"
	. "<TD><IMG SRC=\"arrow.blue.r.gif\" ALT=\"[X]\" ID=\"Arrow".$J."\">&nbsp</TD>"
          . $Image
          . "<TD ALIGN=LEFT WIDTH=\"100%\" NOWRAP><B>"
	  . $Row["Name"]."</B></TD>"
          . "<TD ALIGN=RIGHT NOWRAP><B>".$Row["Version"]."</B></TD>"
          . "</TR></TABLE>"
          . "<DIV ALIGN=CENTER>".$Head."</P>"
          . "<DIV STYLE=\"display:none;\" ID=\"Line".$J."\">"
          . "<P ALIGN=LEFT NOWRAP><TT>".$Text."</TT></P>\n"
          . "<P ALIGN=RIGHT>".$Maintainer."</P>\n"
          . "<HR>\n"
          . "<TABLE WIDTH=\"100%\">\n";

      $Bottom =
            "</TABLE>\n</DIV></TD>\n"
          . "<TD ALIGN=CENTER><FONT SIZE=\"-4\">download</FONT><BR>"
          . ceil($Row["Size"]/1024)."kB<BR>"
          . "<FONT SIZE=\"-4\">installed</FONT><BR>"
          . $Row["InstSize"]."kB"
          . "</TD>\n"
          . "<TD ALIGN=CENTER><A HREF=\"".$Install."\"><IMG SRC=\"Install.gif\"></A></TD>\n"
          . "</TR>\n";

      $Top .= TableRow("Source",$Repos[$Row["Repo"]]);

      if($Row["Depends"]!="")
        $Bottom = TableRow(
          "<A HREF=\"".$_SERVER['PHP_SELF']
        . "?Action=depends&PackageID=".$Row["ID"]
        . "&Arg=".$_GET['Arg']."&System=".$_GET['System']
        . "&Section=".$_GET['Section']."&Repo=".$_GET['Repo']
        . "\">Depends</A>",
          $Row["Depends"]
        ).$Bottom;

      if($Row["Suggests"]!="")
        $Bottom = TableRow(
          "<A HREF=\"".$_SERVER['PHP_SELF']
        . "?Action=suggests&PackageID=".$Row["ID"]
        . "&Arg=".$_GET['Arg']."&System=".$_GET['System']
        . "&Section=".$_GET['Section']."&Repo=".$_GET['Repo']
        . "\">Suggests</A>",
          $Row["Suggests"]
        ).$Bottom;
    }

  // Dump last package information into output
  if($Package!="")
    $OUT .= $Top.TableRow("Download",$Download).$Bottom;

  if(!$J)
    $OUT = "<TR><TD COLSPAN=3 WIDTH=\"100%\" ALIGN=CENTER VALIGN=MIDDLE>"
         . "<H2>No Results</H2>"
         . "</TD></TR>\n";

  return($OUT);
}

function TableRow($Title,$Content)
{
  return(
    "<TR>"
  . "<TD ALIGN=RIGHT VALIGN=TOP><FONT SIZE=\"-4\"><B>".$Title."&nbsp;</B></FONT></TD>"
  . "<TD ALIGN=LEFT WIDTH=\"100%\"><FONT SIZE=\"-4\">".$Content."</FONT></TD>"
  . "</TR>\n"
  );
}

?>

<HTML>
<HEAD>

<TITLE>Pack Rat: The Harmattan Package Aggregator</TITLE>

<STYLE>
BODY
{
  font-family: Arial,Helvetica,Geneva;
  background-color: #FFF0E8;
}
TH
{
  background-color: #FFF0E8;
}
TD
{
}
IMG
{
  border-width: 0;
}
HR
{
  border: 0px solid black;
  height: 1px;
  color:  black;
  background-color: black;
}
</STYLE>

<SCRIPT TYPE="text/javascript">
function StopEvent(E)
{
  if(!E) var E = window.event;
  E.cancelBubble = true;
  if(E.stopPropagation) E.stopPropagation();
}

function ToggleLine(N)
{
  var Obj = document.getElementById("Line"+N);
  var Row = document.getElementById("Row"+N);
  var Img = document.getElementById("Arrow"+N);

  if(Obj.style.display=="none")
  {
    Obj.style.display         = "inline";
    Row.style.backgroundColor = "#FFFFFF";
    Row.style.border          = "dashed 1px black";
    Img.src                   = "arrow.blue.d.gif";
  }
  else
  {
    Obj.style.display         = "none";
    Row.style.backgroundColor = N&1? "#E8FFE8":"#FFFFE8";
    Row.style.border          = "none";
    Img.src                   = "arrow.blue.r.gif";
  }
}
</SCRIPT>

</HEAD>

<BODY>
<CENTER>
<FONT COLOR="#FF0000">
<B>
<FONT SIZE="+3">Pack Rat (Harmattan Edition)</FONT><BR>
<FONT SIZE="-1">The <strike>Maemo</strike> Harmattan Package Aggregator</FONT>
</B>
</FONT>

<P ALIGN=JUSTIFY>
Find any Maemo package, from any repository, maintained by Nokia or 
otherwise. Just type in the full or partial package name or some other 
relevant keyword and click "Search". Optionally, you can search inside a 
software section and/or a single repository. Please note that a package 
may be available in many versions and from multiple repositories.
</P>

<TABLE BORDER=0 CELLPADDING=5 CELLSPACING=3 WIDTH="100%">
<FORM ACTION="<?php echo $_SERVER['PHP_SELF']; ?>">
<INPUT TYPE=HIDDEN NAME="Action" VALUE="list">
<TR>
<TD>
<SELECT NAME="System">
<?php print $SYSLIST; ?>
</SELECT>
</TD>
<TD WIDTH="100%"><INPUT STYLE="width:100%;" TYPE=TEXT NAME="Arg" MAXLENGTH=64 VALUE="<?php print $_GET['Arg']; ?>"></TD>
<TD><INPUT TYPE=SUBMIT VALUE="Search"></TD>
</TR>
<TR>
<TD ALIGN=RIGHT>Section</TD>
<TD COLSPAN=2>
<SELECT NAME="Section">
<OPTION VALUE="">
<?php print $SECLIST; ?>
</SELECT>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT>Repository</TD>
<TD COLSPAN=2>
<SELECT NAME="Repo">
<OPTION VALUE="0">
<?php print $REPOLIST; ?>
</SELECT>
</TD>
</TR>
</FORM>
</TABLE>

<TABLE BORDER=0 CELLPADDING=5 CELLSPACING=3 WIDTH="100%">
<?php print $OUT; ?>
</TABLE>
&copy;2008 <A HREF="http://fms.komkon.org/"><I>Marat Fayzullin</I></A>, <A HREF="/"><I>Adam Harwell</I></A>
</CENTER>

<SCRIPT SRC="http://www.google-analytics.com/urchin.js" TYPE="text/javascript">
</SCRIPT>
<SCRIPT TYPE="text/javascript">
_uacct = "UA-69384-1";
urchinTracker();
</SCRIPT>
</BODY>
</HTML>
