Example #1
0
/**
* Retrieve packages informations
*
* @param Object $db   A reference to the database
* @param string $type The current type
*
* @return array
*/
function report($db, $type)
{
    global $what, $smarty;
    $packages = null;
    $rpmrepo = new TableRpmRepo($db);
    $rpmtable = new TableRpm($db);
    $uptable = new TableUpstream($db);
    $repos = $rpmrepo->getAllRepoHash();
    $smarty->assign('repos', $repos);
    $crit = array('type' => $type, 'ORDER' => 'name');
    if (substr($what, 0, 1) == '#') {
        $crit['channel'] = substr($what, 1);
        $what = '%fedora';
    }
    $i = 0;
    foreach ($uptable->request($crit) as $up) {
        $package = null;
        $rpmname = $up['name'];
        $verup = strtolower($up['stable'] ? $up['stable'] : $up['unstable']);
        $sql2 = "SELECT DISTINCT owner FROM acls WHERE name = '{$rpmname}'";
        $res2 = $db->query($sql2);
        $owners = array();
        if ($res2) {
            while ($owner = $res2->fetchObject()) {
                $owners[] = $owner->owner;
            }
        }
        $package['name'] = $rpmname;
        $rpms = array();
        foreach ($rpmtable->request(array('name' => $rpmname)) as $rpm) {
            $rpms[$rpm['repo_main'] . '-' . $rpm['repo_sub']] = $rpm;
            $package['name'] = '<a href="zoom.php?rpm=' . $rpmname . '" title="' . htmlentities($rpm['summary'], ENT_QUOTES) . '">' . $rpmname . '</a>';
        }
        switch ($what) {
            case '%work':
                $display = false;
                if (count($rpms) && isset($rpms['devel-']) && $rpms['devel-']['ver'] != $verup) {
                    $display = true;
                }
                break;
            case '%fedora':
                $display = count($rpms);
                break;
            case '%stable':
                $display = !empty($up['stable']);
                break;
            case '%all':
                $display = true;
                break;
            default:
                // owner
                $display = array_search($what, $owners) !== false;
                break;
        }
        if ($display) {
            if ($up['channel'] != $up['type']) {
                $package['channel'] = $up['channel'];
            }
            $dispowner = "";
            $package['owners'] = $owners;
            if ($up['stable']) {
                $package['upstream_stable'] = $up['stable'];
            }
            if ($up['unstable'] && (!$up['stable'] || $up['stable'] != $up['unstable'])) {
                $package['upstream_unstable'] = $up['unstable'] . ' <small>(' . $up['state'] . ')</small>';
            }
            $versions = null;
            foreach ($repos as $repomain) {
                $display = "";
                $class = "";
                foreach ($repomain as $k => $repo) {
                    if (isset($rpms[$repo['main'] . "-" . $repo['sub']])) {
                        $rpm = $rpms[$repo['main'] . "-" . $repo['sub']];
                        $verpm = $rpm['ver'];
                        $pat = "/\\.((beta|RC)\\d*)\\./i";
                        if (preg_match($pat, $rpm['rel'], $res)) {
                            $verpm .= strtolower($res[1]);
                        }
                        if (strpos($repo['sub'], '-os') || strpos($repo['sub'], '-beta') || strpos($repo['sub'], '-base') || strpos($repo['sub'], '-optional') || strpos($repo['sub'], '-stable')) {
                            // For CentOS
                            $repotype = 'base';
                        } else {
                            if (strpos($repo['sub'], 'testing')) {
                                $repotype = 'testing';
                            } else {
                                if (strpos($repo['sub'], 'updates')) {
                                    $repotype = 'updates';
                                } else {
                                    $repotype = $repo['sub'];
                                }
                            }
                        }
                        switch ($repotype) {
                            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']);
                                }
                                if ($verup == $verpm) {
                                    $class = "check";
                                }
                                break;
                            case "":
                                $display .= sprintf("<strong>%s</strong>-%s<br/>", $rpm['ver'], $rpm['rel']);
                                if ($verup == $verpm) {
                                    $class = "check";
                                }
                                break;
                            case "updates":
                                $display .= sprintf("<strong>%s</strong>-%s" . "<br/><small>(%s)</small><br/>", $rpm['ver'], $rpm['rel'], $repo['sub']);
                                if ($verup == $verpm && $class != 'check') {
                                    $class = "check";
                                }
                                break;
                            case "testing":
                                $display .= sprintf("%s-%s<br/><small>(%s)</small>", $rpm['ver'], $rpm['rel'], $repo['sub']);
                                if ($verup == $verpm && !$class) {
                                    $class = "info";
                                }
                                break;
                        }
                    }
                    // RPM exists
                }
                // sub repo
                if ($display && empty($class)) {
                    $class = "attn";
                }
                $versions[] = array('class' => $class, 'display' => $display);
                $package['versions'] = $versions;
            }
            // mainrepo
            $i++;
            $packages[] = $package;
        }
    }
    return $packages;
}
Example #2
0
 /**
  * Parse the content of all PEAR repository
  *
  * @param TableUpstream $uptable        the table to write to
  * @param string        $channelname    the channel name
  * @param string        $channelurl     the channel URL
  *
  * @return integer number of parsed line
  */
 public static function readOnePear(TableUpstream $uptable, $channelname, $channelurl)
 {
     $type = $channelname == 'pecl' ? 'pecl' : 'pear';
     $channel = @simplexml_load_file("http://{$channelurl}/channel.xml");
     if (!$channel) {
         self::log("can't read PEAR site (channel of {$channelname})");
         return 0;
     }
     $rest = $channel->servers->primary->rest->baseurl[0];
     self::log("PEAR reading channel={$channelname}, baseurl = {$rest}");
     $categories = @simplexml_load_file($rest . "c/categories.xml");
     if (!$categories) {
         self::log("can't read PEAR site (categories)");
         return 0;
     }
     $crit = array('type' => $type, 'channel' => $channelname);
     $nb = $uptable->delete($crit);
     self::log("Delete {$nb} packages");
     $nb = 0;
     if (!isset($categories->c[0])) {
         self::log("Reading ALL");
         // ezc only
         $pitxt = @file_get_contents($rest . "p/packages.xml");
         if (!$pitxt) {
             self::log("can't read PEAR site (" . $rest . "p/packagesinfo.xml)");
             return 0;
         }
         $allpi = @simplexml_load_string($pitxt);
         foreach ($allpi->p as $name) {
             $pitxt = @file_get_contents($rest . "r/" . strtolower($name) . "/allreleases.xml");
             if (!$pitxt) {
                 self::log("can't read PEAR site (" . $rest . "r/" . strtolower($name) . "/allreleases.xml");
                 continue;
             }
             $pi = @simplexml_load_string($pitxt);
             $rpmname1 = "php-" . $channelname . "-" . str_replace("_", "-", $name);
             $rpmname2 = "php-" . $channelname . "-" . $name;
             $uptable->record($type, $channelname, $rpmname1, (string) $pi->r[0]->v, false, (string) $pi->r[0]->s);
             $uptable->record($type, $channelname, $rpmname2, (string) $pi->r[0]->v, false, (string) $pi->r[0]->s);
             foreach ($pi->r as $rev) {
                 if ($rev->s == 'stable') {
                     $uptable->record($type, $channelname, $rpmname1, (string) $rev->v, true);
                     $uptable->record($type, $channelname, $rpmname2, (string) $rev->v, true);
                     break;
                 }
             }
             $nb++;
         }
     } else {
         foreach ($categories->c as $cat) {
             self::log("Reading {$cat}");
             $pitxt = @file_get_contents($rest . "c/" . urlencode($cat) . "/packagesinfo.xml");
             if (!$pitxt) {
                 self::log("can't read PEAR site (" . $rest . "c/" . urlencode($cat) . "/packagesinfo.xml)");
                 continue;
             }
             $pitxt = "<?" . preg_replace("/<\\?xml.*?>/U", "", str_replace("\r\n", "\n", substr($pitxt, 2)));
             $pitxt = str_replace(" ", "", $pitxt);
             $pi = @simplexml_load_string($pitxt);
             if (!$pi) {
                 self::log("can't read response ({$cat})");
                 continue;
             }
             foreach ($pi->pi as $ps) {
                 if (isset($ps->p->n) && isset($ps->a->r)) {
                     $name = (string) $ps->p->n;
                     if ($channelname == 'phing' && $name == 'phing') {
                         $rpmname1 = "php-pear-phing";
                     } else {
                         if ($channelname == 'phpunit' && $name == 'PHPUnit') {
                             $rpmname1 = "php-pear-PHPUnit";
                         } else {
                             if ($channelname == 'pecl' && $name == 'pecl_http') {
                                 $rpmname1 = "php-pecl-http";
                             } else {
                                 $rpmname1 = "php-" . $channelname . "-" . str_replace("_", "-", $name);
                             }
                         }
                     }
                     $rpmname2 = "php-" . $channelname . "-" . $name;
                     $uptable->record($type, $channelname, $rpmname1, (string) $ps->a->r[0]->v, false, (string) $ps->a->r[0]->s);
                     $uptable->record($type, $channelname, $rpmname2, (string) $ps->a->r[0]->v, false, (string) $ps->a->r[0]->s);
                     foreach ($ps->a->r as $rev) {
                         if ($rev->s == 'stable') {
                             $uptable->record($type, $channelname, $rpmname1, (string) $rev->v, true);
                             $uptable->record($type, $channelname, $rpmname2, (string) $rev->v, true);
                             break;
                         }
                     }
                     $nb++;
                 }
             }
         }
     }
     self::log("read {$nb} packages in {$channelname}");
     return $nb;
 }
Example #3
0
    echo "not found\n";
}
echo "get(999):";
if ($row = $rpm->get(999)) {
    print_r($row);
} else {
    echo "not found\n";
}
echo "get(888):";
if ($row = $rpm->get(888)) {
    print_r($row);
} else {
    echo "not found\n";
}
echo "Last update : " . date("r", $rpm->getMaxStamp()) . "\n";
$up = new TableUpstream($db);
$up->delete(array('name' => 'foo', 'type' => 'test'));
$rec = $up->record('test', 'bar', 'foo', '1.0', true);
echo "record(foo-1.0) : {$rec}\n";
echo "find(foo,test):";
if ($row = $up->find(array('name' => 'foo', 'type' => 'test'))) {
    print_r($row);
} else {
    echo "not found\n";
}
$up->record('test', 'bar', 'foo', '1.2', false, 'beta');
echo "record(foo-1.2) : {$rec}\n";
echo "find(foo,test):";
if ($row = $up->find(array('name' => 'foo', 'type' => 'test'))) {
    print_r($row);
} else {
Example #4
0
                $ret_tmp = $fedpkg[$branch]['people'];
            }
        }
    }
    if ($people == 'people' && is_array($ret_tmp)) {
        $ret = implode($ret_tmp, ', ');
    }
    return $ret;
}
$smarty->registerPlugin('function', 'getBranchPeople', 'getBranchPeople');
if (!isset($name) || !$name) {
    $smarty->assign('error', 'missing_name');
} else {
    try {
        $db = new PDO("mysql:dbname=" . MYBASE . ";host=" . MYHOST, MYUSER, MYPASS);
        $uptable = new TableUpstream($db);
        // Consider each part of ver/rel as integer except second part of rel (generally distro name)
        $sql = "SELECT rpm.*, repo.active, repo.url as repourl, packagist.pkgname,\n            CONCAT(repo.url ,rpm.name,'-',rpm.ver,'-',rpm.rel,'.src.rpm') as rpmurl\n            FROM rpm\n            LEFT JOIN packagist ON (packagist.rpmname=rpm.name)\n            INNER JOIN repo ON (repo.main=rpm.repo_main AND repo.sub=rpm.repo_sub)\n            WHERE rpm.name=" . $uptable->escape($name) . "\n            ORDER BY repo.id DESC,\n                  CAST(SUBSTRING_INDEX(rpm.ver,'.',1) AS SIGNED) DESC,\n                  CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(rpm.ver,'.',2),'.',-1) AS SIGNED) DESC,\n                  CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(rpm.ver,'.',3),'.',-1) AS SIGNED) DESC,\n                  CAST(SUBSTRING_INDEX(rpm.rel,'.',1) AS SIGNED) DESC,\n                  SUBSTRING_INDEX(SUBSTRING_INDEX(rpm.rel,'.',2),'.',-1) DESC,\n                  CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(rpm.rel,'.',3),'.',-1) AS SIGNED) DESC";
        $resrpm = $db->query($sql);
        $rpm = $resrpm ? $resrpm->fetchObject() : false;
        $up = $uptable->find(array('name' => $name));
        $sql = "SELECT * FROM acls WHERE name = " . $uptable->escape($name);
        $resown = $db->query($sql);
        $owner = $resown ? $resown->fetchObject() : false;
        if (isset($owner->name)) {
            // Use exact name (with case) from acl (else pkgdb could fail)
            $name = $owner->name;
            $smarty->assign('name', $name);
            $smarty->assign('page_title', 'Package: ' . $name);
        }
        $summary = array();