All pastes #123804 Raw Edit

Mine

public text v1 · immutable
·published 2006-08-09 16:19 UTC
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>&nbsp Section</b></td><td><b>&nbsp 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'>&nbsp <a href=\"?action=section&section=%s\">%s</a></td><td>&nbsp %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>&nbsp Section</b></td><td><b>&nbsp 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'>&nbsp<a href=\"?action=section&section=%s\">%s</a></td><td>&nbsp %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 ('<', '&lt;', $maintainer);
                $maintainer = str_replace ('\>', '&gt;', $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&section=%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


?>