";
$alfabet = array('a','b','c','d','e','f','g','h','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(" %s |", $letter, $letter, $letter );
}
}
$ipkgoutput .= " z";
return $ipkgoutput;
}
function searchpkg ($searchword, $searcharch = '')
{
$query = "SELECT DISTINCT p_name,p_desc,p_section FROM packages WHERE p_name LIKE '$searchword' ";
if(!empty($searcharch))
{
$query .= " AND p_arch='{$searcharch}' ";
}
$query .= 'ORDER BY p_name ASC';
if($result = db_query($query))
{
return generate_list_of_packages($result);
}
}
function generate_list_of_packages($query_result)
{
$ipkgoutput = "
\n";
$ipkgoutput .="Package | Section | Description |
\n";
foreach($query_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
("%s | %s | %s |
\n",
urlencode($package['p_name']), $package['p_name'], $package['p_section'], $package['p_section'], htmlentities($package['p_desc']));
}
}
$ipkgoutput .= '
';
return $ipkgoutput;
}
function searchsection($section)
{
if($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"))
{
return generate_list_of_packages($result);
}
}
function pkgdetails ($package)
{
$result = db_query("SELECT * FROM packages,feeds
WHERE (packages.p_name='$package' OR packages.p_provides='$package')
AND feeds.f_id = packages.p_feed
ORDER BY packages.p_version DESC, packages.p_arch ASC ");
// display first result
if ($result)
{
$package = $result[0];
$details = sprintf("Package details for %s %s
", $package['packages.p_name'], $package['packages.p_version']);
$details .= sprintf ("%s
", htmlentities($package['packages.p_desc']));
$details .= "";
$details .= sprintf ("\n- Maintainer:
- %s
", str_replace(array('@',', '), array(' at ', '
'), htmlentities($package['packages.p_maintainer'])));
if($package['packages.p_homepage'])
{
$details .= sprintf ("\n- Homepage:
- %s
", $package['packages.p_homepage']);
}
if($package['packages.p_section'])
{
$details .= sprintf ("\n- Section:
- %s
", $package['packages.p_section'],$package['packages.p_section']);
}
if($package['packages.p_depends'])
{
$details .= sprintf ("\n- Depends:
- %s
", addlinks ($package['packages.p_depends']));
}
if($package['packages.p_recommends'])
{
$details .= sprintf ("\n- Recommends:
- %s
", addlinks ($package['packages.p_recommends']));
}
if($package['packages.p_replaces'])
{
$details .= sprintf ("\n- Replaces:
- %s
", addlinks ($package['packages.p_replaces']));
}
if($package['packages.p_provides'])
{
$details .= sprintf ("\n- Provides:
- %s
", addlinks ($package['packages.p_provides']));
}
if($package['packages.p_conflicts'])
{
$details .= sprintf ("\n- Conflicts:
- %s
", 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- Size:
- %s
", $size);
if($package['packages.p_source'])
{
$sourcearray = explode (" ", $package['packages.p_source']);
$details .= "\nSource:
";
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 ("- %s
", $source_url, array_pop(explode('/', $url_parts['path'])));
}
else
{
$details .= sprintf ("- %s
", $source_url);
}
}
$details .= '
';
}
$details .= "\nAvailable versions and architectures:
\n";
foreach($result as $packages_a)
{
$details .= sprintf("\n- %s %s for %s (%s feed)
\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'],
$packages_a['packages.p_name'],
$packages_a['packages.p_version'],
$packages_a['packages.p_arch'],
$packages_a['feeds.f_name']
);
}
$details .= "
\n";
}
else
{
$details = "Sorry, package not found\n
return\n";
}
return $details;
}
function addlinks ($input)
{
// split input elements up
$elements = explode (', ', $input);
$offset = 0;
foreach ($elements as $element)
{
// strip version number
$element = ereg_replace('^(.*)( \((.*)\))+$', '\\1', $element);
// do we have this package in the db?
$result = db_query ("SELECT DISTINCT p_name FROM packages WHERE p_name='{$element}' OR p_provides='{$element}'");
if(isset($result[0]['p_name']))
{
// find position of string in line
$pos = strpos ($input, $element, $offset);
$link = sprintf("$element", 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;
}
function sectionslist()
{
$ipkgoutput = '';
if($result = db_query ("SELECT DISTINCT p_section FROM packages ORDER BY p_section"))
{
$section_up = '';
$sections = array();
foreach($result as $package)
{
$section_split = explode('/', $package['p_section']);
if($section_up != $section_split[0])
{
$section_up = $section_split[0];
}
if(isset($section_split[1])) // x11/gnome/libs
{
$sections[$section_up][$section_split[1]] = $section_split[1];
if(isset($section_split[2])) // x11/gnome/libs
{
$sections[ $section_up ][ $section_split[1] ] = array($section_split[2]=>$section_split[2]);
}
}
}
$output = "\n";
foreach($sections as $section_name1=>$item)
{
$output .= sprintf ("- %s",
urlencode($section_name1),
urlencode($section_name1),
$section_name1);
if(is_array($item))
{
$output .= '
';
foreach($item as $section_name2=>$subitem)
{
$section_name = "{$section_name1}/{$section_name2}";
$output .= sprintf ("- %s",
urlencode($section_name),
urlencode($section_name),
$section_name2);
if(is_array($subitem))
{
$output .= '
';
foreach($subitem as $section_name3=>$subitem2)
{
$section_name = "{$section_name1}/{$section_name2}/{$section_name3}";
$output .= sprintf ("- %s
",
urlencode($section_name),
urlencode($section_name),
$section_name3);
}
$output .= '
';
}
$output .= ' ';
}
$output .= '
';
}
$output .= ' ';
}
$output .= "
\n";
}
return $output;
}
function check_database()
{
$db_exists = FALSE;
if(file_exists(DB_FILENAME) AND $db = sqlite_open(DB_FILENAME))
{
$db_exists = TRUE;
//initialize db
if (db_table_exists ($db, 'packages') === FALSE)
{
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_recommends 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)
{
sqlite_query ($db, "CREATE TABLE feeds (
f_id int(8),
f_name varchar(32),
f_uri varchar(100),
f_type varchar(16)
f_comments varchar(500))");
insert_feeds ($db) ;
}
sqlite_close($db);
}
return $db_exists;
}
function read_vars_from_get($array_of_vars)
{
foreach($array_of_vars as $name_of_var)
{
$GLOBALS[$name_of_var] = '';
if(isset($_GET[$name_of_var]))
{
$GLOBALS[$name_of_var] = $_GET[$name_of_var];
}
}
}
function get_arch_list()
{
return db_query('SELECT DISTINCT p_arch FROM packages WHERE p_arch NOT IN (NULL, "", "all") ORDER BY p_arch ASC');
}
?>