rendered paste body<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>The Angstrom Distribution | Embedded power</title>
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css" media="all">@import "/misc/drupal.css";</style><link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.angstrom-distribution.org/blogapi/rsd" />
<style type="text/css" media="all">@import "/themes/connections/style.css";</style>
<link rel="stylesheet" type="text/css" href="foo.css"/>
<body >
<div id="page">
<?php
// (c) Koen Kooi 2006
// (c) Marcin Juszkiewicz 2006
/* This php script is intended to do the following:
* o have searchable webfronted for the feed like packages.ubuntu.com
* o provide feed-management functionality
* o allow uploading of new software
*/
error_reporting(E_ALL);
$db_name = "/home/hrw/public_html/repo/feeds.db";
$db = sqlite_open($db_name);
//initialiaze db
if (db_table_exists ($db, 'packages') == "FALSE")
{
print("creating packages table<br>\n");
sqlite_query ($db,
"CREATE TABLE packages (
p_name varchar(50),
p_version varchar(10),
p_arch varchar(12),
p_depends varchar(50),
p_maintainer varchar(50),
p_homepage varchar(100),
p_section varchar(20),
p_replaces varchar(50),
p_provides varchar(50),
p_conflicts varchar(50),
p_size int(10),
p_md5 char(32),
p_source varchar(500),
p_feed varchar(20),
p_file varchar(100),
p_desc varchar(1000)
)");
}
if (db_table_exists ($db, 'feeds') == "FALSE")
{
print("creating feeds table<br>\n");
sqlite_query ($db,
"CREATE TABLE feeds (
f_name varchar(20),
f_uri varchar(100),
f_comments varchar(500)
)");
test_insert_ipkgs ($db) ;
}
//close the db
sqlite_close($db);
$action = '';
if(isset($_GET['action']))
{
$action = $_GET['action'];
}
switch($action)
{
case "details":
$ipkgoutput = pkgdetails ($_GET['pnm']);
break;
case "package":
$edit = $_POST['edit'];
$searchword = $edit['searchword'];
$ipkgoutput = searchpkg ("%$searchword%");
break;
case "section":
$ipkgoutput = searchsection($_GET['section']);
break;
case "letter":
$letter = $_GET['g'];
$ipkgoutput = searchletter ($letter);
break;
default:
$ipkgoutput = searchletter ("a");
break;
}
print $ipkgoutput;
print("</div></body></html>\n");
function db_table_exists ($db, $mytable)
{
if($query = sqlite_query ($db, "SELECT name FROM sqlite_master WHERE type='table'"))
{
$tables = sqlite_fetch_all ($query, SQLITE_ASSOC);
if (!$tables)
{
return ("FALSE");
}
else
{
foreach ($tables as $table)
{
if ($table['name'] == $mytable)
{
return ("TRUE");
}
}
}
}
// function which is expected to return something need to return something always
return ("FALSE");
}
function get_archs_fromdb()
{
return db_query("SELECT DISTINCT p_arch FROM packagess ORDER BY p_arch");
}
function db_query($query)
{
$result = FALSE;
$db_name = "/home/hrw/public_html/repo/feeds.db";
if($db_h = sqlite_open($db_name))
{
if($query_h = sqlite_query ($db_h, $query))
{
$result = sqlite_fetch_all ($query_h, SQLITE_ASSOC);
}
sqlite_close($db_h);
}
return ($result);
}
function test_insert_ipkgs ($db)
{
sqlite_query($db,
"INSERT INTO feeds (f_name, f_uri)
VALUES ('unstable-base', 'http://www.angstrom-distribution.org/unstable/feed/base/')
");
sqlite_query($db,
"INSERT INTO feeds (f_name, f_uri)
VALUES ('unstable-perl', 'http://www.angstrom-distribution.org/unstable/feed/perl/')
");
sqlite_query($db,
"INSERT INTO feeds (f_name, f_uri)
VALUES ('unstable-python', 'http://www.angstrom-distribution.org/unstable/feed/python/')
");
sqlite_query($db,
"INSERT INTO feeds (f_name, f_uri)
VALUES ('unstable-debug', 'http://www.angstrom-distribution.org/unstable/feed/debug/')
");
sqlite_query($db,
"INSERT INTO feeds (f_name, f_uri)
VALUES ('unstable-gstreamer', 'http://www.angstrom-distribution.org/unstable/feed/gstreamer/')
");
if ($handle = opendir('/var/www/angstrom/unstable/feed/machine/'))
{
while (false !== ($file = readdir($handle)))
{
if($file != ".." && $file != ".")
{
sqlite_query($db,
"INSERT INTO feeds (f_name, f_uri)
VALUES ('unstable-machine-$file', 'http://www.angstrom-distribution.org/unstable/feed/machine/$file/')
");
}
}
closedir($handle);
}
}
function searchletter($searchletter)
{
$ipkgoutput = "<center>";
$alfabet = array('a','b','c','d','e','f','g','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y');
foreach($alfabet as $letter)
{
if($letter == $searchletter)
{
$ipkgoutput .= sprintf(" %s |", $letter );
}
else
{
$ipkgoutput .= sprintf(" <a href='?action=letter&g=%s'>%s</a> |", $letter, $letter );
}
}
$ipkgoutput .= " <a href='?action=letter&g=z'>z</a></center>\n";
if(isset($searchletter))
{
$ipkgoutput .= searchpkg("$searchletter%");
}
return $ipkgoutput;
}
function searchpkg ($searchword)
{
$result = db_query("SELECT DISTINCT p_name,p_desc,p_section FROM packages WHERE p_name LIKE '$searchword' ORDER BY p_name ASC;");
$ipkgoutput = "<p><p><table border=0>\n";
$ipkgoutput .="<tr><td><b>Package</b></td><td><b>  Section</b></td><td><b>  Description</b></td>\n";
foreach($result as $package)
{
if (!strstr ($package['p_name'], 'locale'))
{
if(strlen($package['p_desc']) > 40)
{
$pos = strpos($package['p_desc'],' ', 40);
if($pos)
{
$package['p_desc'] = substr($package['p_desc'], 0, $pos) . '...';
}
}
$ipkgoutput .= sprintf
("<tr><td valign='top'><a href='?action=details&pnm=%s'>%s</a></td><td valign='top'>  <a href=\"?action=section§ion=%s\">%s</a></td><td>  %s</td>\n",
urlencode($package['p_name']), $package['p_name'], $package['p_section'], $package['p_section'], $package['p_desc']);
}
}
$ipkgoutput .= '</table>';
return $ipkgoutput;
}
function searchsection($section)
{
$result= db_query("SELECT DISTINCT p_name,p_desc,p_section FROM packages WHERE p_section like '$section%' order by p_section asc, p_name asc;");
$ipkgoutput = "<p><p><table border=0>\n";
$ipkgoutput .= "<tr><td><b>Package</b></td><td><b>  Section</b></td><td><b>  Description</b></td>";
foreach($result as $package)
{
if (!strstr ($package['p_name'], 'locale'))
{
if(strlen($package['p_desc'])> 40)
{
$pos = strpos($package['p_desc'],' ', 40);
if($pos)
{
$package['p_desc'] = substr($package['p_desc'], 0, $pos) . '...';
}
}
$ipkgoutput .= sprintf ("<tr><td valign='top'><a href='?action=details&pnm=%s'>%s</a></td><td valign='top'> <a href=\"?action=section§ion=%s\">%s</a></td><td>  %s</td>",
urlencode($package['p_name']),
$package['p_name'],
$package['p_section'], $package['p_section'],
$package['p_desc']);
}//if strstr
}
$ipkgoutput .= "</table>\n";
return $ipkgoutput;
}
function pkgdetails ($package)
{
$details = "";
$result = db_query("SELECT * FROM packages,feeds WHERE packages.p_name='$package' AND feeds.f_name = packages.p_feed");
// display first result
if ($result[0]['packages.p_file'] != '')
{
$package = $result[0];
$details .= sprintf("<p><h2>Package details for %s %s</h2>\n",
$package['packages.p_name'],
$package['packages.p_version']);
$details .= sprintf ("<p>\n<p>\n<table><td>%s</td></table>", $package['packages.p_desc']);
$details .= "<p>\n<p>\n<table border=0>\n";
$maintainer = $package['packages.p_maintainer'];
if (strpos ($maintainer, '@') !== false)
{
$emailstart = strpos ($maintainer, '<');
$emailend = strrpos ($maintainer, '>');
if (!(($emailstart == false) or ($emailend == false)))
{
$email =
substr ($maintainer, $emailstart + 1,
$emailend - $emailstart - 1);
$email = ereg_replace ('@', ' () ', $email);
$maintainer = substr ($maintainer, 0, $emailstart + 1).$email.
substr ($maintainer, $emailend, count ($maintainer));
$maintainer = str_replace ('<', '<', $maintainer);
$maintainer = str_replace ('\>', '>', $maintainer);
}
}
$details .= sprintf ("\n<tr><td><b>Maintainer: </b></td><td>%s</td>", $maintainer);
$details .= sprintf ("\n<tr><td><b>Homepage: </b></td><td>%s</td>",$package['packages.p_homepage']);
$details .= sprintf ("\n<tr><td><b>Section:</b></td><td><a href='?action=section§ion=%s'>%s</td>", $package['packages.p_section'],$package['packages.p_section']);
$details .= sprintf ("\n<tr><td valign='top'><b>Depends:</b></td><td>%s</td>", addlinks ($package['packages.p_depends']));
$details .= sprintf ("\n<tr><td><b>Replaces:</b></td><td>%s</td>", addlinks ($package['packages.p_replaces']));
$details .= sprintf ("\n<tr><td><b>Provides:</b></td><td>%s</td>", addlinks ($package['packages.p_provides']));
$details .= sprintf ("\n<tr><td><b>Conflicts:</b></td><td>%s</td>", addlinks ($package['packages.p_conflicts']));
$size = $package['packages.p_size'];
if(strlen($size) > 6) {
$size = sprintf("%02.2f Megabytes", $size / (1024 * 1024));
}
if(strlen($size) > 3 && strlen($size) < 7) {
$size = sprintf("%02.2f Kilobytes", $size / (1024 ));
}
if(strlen($size) < 4) {
$size = sprintf("%s Bytes", $size);
}
$details .= sprintf ("\n<tr><td><b>Size:</b></td><td>%s</td></tr></table>", $size);
$sourcearray = explode (" ", $package['packages.p_source']);
$details .= "\n<p><b>Source:</b></p><ul>";
foreach ($sourcearray as $key => $source_url)
{
if (substr ($source_url, 0, 4) == "http" || substr ($source_url, 0, 3) == "ftp")
{
$url_parts = parse_url($source_url);
$details .= sprintf ("<li><a href='%s'>%s</a></li>", $source_url, array_pop(explode('/', $url_parts['path'])));
}
else
{
$details .= sprintf ("<li>%s</li>", $source_url);
}
}
$details .= "</ul>\n<p><b>Available versions and architectures:</b></p><ul>\n";
foreach($result as $packages_a)
{
$details .= sprintf("\n<li><a href='%s'>%s %s</a> for %s</li>\n",
$packages_a['feeds.f_uri'].$packages_a['packages.p_file'],
$packages_a['packages.p_name'],
$packages_a['packages.p_version'],
$packages_a['packages.p_arch']);
}
$details .= "</ul>\n";
}
else
{
$details = "<h3>Sorry, package not found\n</h3><a href='/repo/repo.php'>return</a>\n";
}
return $details;
}
function addlinks ($input)
{
// split input elements up
$elements = preg_split ('/[\s,]+/', $input);
$offset = 0;
foreach ($elements as $element)
{
// skip version information and empty elements (shouldn't happend)
if (!eregi('^([0-9a-z\-]*)$', $element) OR empty($element))
{
continue;
}
// do we have this package in the db?
$result = db_query ("SELECT DISTINCT p_name FROM packages WHERE p_name='{$element}'");
if(isset($result[0]['p_name']))
{
// find position of string in line
$pos = strpos ($input, $element, $offset);
$link = sprintf("<a href=\"?action=details&pnm=%s\">$element</a>", urlencode ($element));
// replace element with a link
$input = substr_replace ($input, $link, $pos, strlen ($element));
// update offset
$offset = ($pos + strlen ($link));
}
else
{
$offset += strlen ($element);
}
}
return $input;
} // add_links
?>