/** * 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; }
/** * 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; }
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 {
$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();