Commit: 432aab7e2c1f1fa41f78dfeeb55aa022a9fc9190
Author: Sobak <[email protected]> Thu, 17 Sep 2015 08:44:53
+0200
Parents: a25244842d0df20cce89e2947a02cc1bc2fb7bd2
Branches: master
Link:
http://git.php.net/?p=web/bugs.git;a=commitdiff;h=432aab7e2c1f1fa41f78dfeeb55aa022a9fc9190
Log:
Provide search results in RSS format
Actually it should already exist - there is reference for it in search
results' HTML and also 'format' var in the URL.
It's going to be used e.g. on doc.php.net
Changed paths:
A templates/search-rdf.php
A templates/search-rss2.php
M www/rss/search.php
diff --git a/templates/search-rdf.php b/templates/search-rdf.php
new file mode 100644
index 0000000..fd67fdf
--- /dev/null
+++ b/templates/search-rdf.php
@@ -0,0 +1,73 @@
+<?php
+header('Content-type: text/xml');
+
+echo '<?xml version="1.0"?>
+<?xml-stylesheet
+href="http://www.w3.org/2000/08/w3c-synd/style.css" type="text/css"
+?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
+xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+xmlns:admin="http://webns.net/mvcb/"
xmlns:content="http://purl.org/rss/1.0/modules/content/">';
+echo "\n <channel
rdf:about=\"{$site_method}://{$site_url}{$basedir}/rss/search.php\">\n";
+echo " <title>{$siteBig} Bug Search Results</title>\n";
+echo " <link>{$site_method}://{$site_url}{$basedir}/rss/search.php?" ,
clean(http_build_query($_GET)) , "</link>\n";
+echo " <description>Search Results</description>\n";
+echo " <dc:language>en-us</dc:language>\n";
+echo " <dc:creator>{$site}[email protected]</dc:creator>\n";
+echo " <dc:publisher>{$site}[email protected]</dc:publisher>\n";
+echo " <admin:generatorAgent
rdf:resource=\"{$site_method}://{$site_url}{$basedir}\"/>\n";
+echo " <sy:updatePeriod>hourly</sy:updatePeriod>\n";
+echo " <sy:updateFrequency>1</sy:updateFrequency>\n";
+echo " <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>\n";
+echo ' <items>
+ <rdf:Seq>
+';
+
+$items = '';
+if ($total_rows > 0) {
+ foreach ($res->fetchAll(MDB2_FETCHMODE_ASSOC) as $row) {
+ $desc = "{$row['package_name']} ({$row['bug_type']})\nReported
by ";
+ if (preg_match('/@php.net$/i', $row['email'])) {
+ $desc .= substr($row['email'], 0, strpos($row['email'],
'@')) ."\n";
+ } else {
+ $desc .= substr($row['email'], 0, strpos($row['email'],
'@')) . "@...\n";
+ }
+ $desc .= date(DATE_ATOM, $row['submitted']) . "\n";
+ $desc .= "PHP: {$row['php_version']}, OS: {$row['php_os']}\n\n";
+ $desc .= $row['ldesc'];
+ $desc = '<pre>' . clean($desc) . '</pre>';
+
+ echo " <rdf:li
rdf:resource=\"{$site_method}://{$site_url}{$basedir}/{$row['id']}\" />\n";
+ $items .= " <item
rdf:about=\"{$site_method}://{$site_url}{$basedir}/{$row['id']}\">\n";
+ $items .= ' <title>' . clean("{$row['bug_type']}
{$row['id']} [{$row['status']}] {$row['sdesc']}") . "</title>\n";
+ $items .= "
<link>{$site_method}://{$site_url}{$basedir}/{$row['id']}</link>\n";
+ $items .= ' <content:encoded><![CDATA[' . $desc .
"]]></content:encoded>\n";
+ $items .= ' <description><![CDATA[' . $desc .
"]]></description>\n";
+ if (!$row['unchanged']) {
+ $items .= ' <dc:date>' . date(DATE_ATOM,
$row['submitted']) . "</dc:date>\n";
+ } else {
+ $items .= ' <dc:date>' . date(DATE_ATOM,
$row['modified']) . "</dc:date>\n";
+ }
+ $items .= ' <dc:creator>' .
clean(spam_protect($row['email'])) . "</dc:creator>\n";
+ $items .= ' <dc:subject>' . clean($row['package_name']) . '
' . clean($row['bug_type']) . "</dc:subject>\n";
+ $items .= " </item>\n";
+ }
+} else {
+ $warnings[] = "No bugs matched your criteria";
+}
+
+echo <<< DATA
+ </rdf:Seq>
+ </items>
+ </channel>
+
+ <image
rdf:about="{$site_method}://{$site_url}{$basedir}/images/{$site}-logo.gif">
+ <title>{$siteBig} Bugs</title>
+
<url>{$site_method}://{$site_url}{$basedir}/images/{$site}-logo.gif</url>
+ <link>{$site_method}://{$site_url}{$basedir}</link>
+ </image>
+
+{$items}
+DATA;
+?>
+</rdf:RDF>
\ No newline at end of file
diff --git a/templates/search-rss2.php b/templates/search-rss2.php
new file mode 100644
index 0000000..3a7b0b0
--- /dev/null
+++ b/templates/search-rss2.php
@@ -0,0 +1,25 @@
+<?php
+header('Content-type: application/rss+xml');
+echo '<?xml version="1.0"?>' . "\n";
+?>
+<rss version="2.0">
+ <channel>
+ <title><?php echo $siteBig; ?> Bug Search Results</title>
+<?php echo " <link>{$site_method}://{$site_url}{$basedir}/rss/search.php?" ,
clean(http_build_query($_GET)) , "</link>\n"; ?>
+ <description>Search Results</description>
+<?php
+if ($total_rows > 0) {
+ foreach ($res->fetchAll(MDB2_FETCHMODE_ASSOC) as $row) {
+ echo " <item>\n";
+ echo ' <title>' . clean($row['sdesc']) . "</title>\n";
+ echo "
<link>{$site_method}://{$site_url}{$basedir}/{$row['id']}</link>\n";
+ echo " <category>{$row['status']}</category>\n";
+ echo ' <pubDate>' . date(DATE_RSS, $row['submitted']) .
"</pubDate>\n";
+ echo " </item>\n";
+ }
+} else {
+ $warnings[] = "No bugs matched your criteria";
+}
+?>
+ </channel>
+</rss>
\ No newline at end of file
diff --git a/www/rss/search.php b/www/rss/search.php
index 3855642..c5b6d6c 100644
--- a/www/rss/search.php
+++ b/www/rss/search.php
@@ -13,8 +13,16 @@
* ported by Gregory Beaver <[email protected]>
*/
+$format = (isset($_GET['format']) && $_GET['format'] === 'rss2') ? 'rss2' :
'rdf';
+
// Maximum number of bugs to return
-define ('MAX_BUGS_RETURN', 150);
+if ($format === 'rss2') {
+ // RSS channel shows way more data (e.g. no bug description) thus
+ // we can fetch more rows
+ define ('MAX_BUGS_RETURN', 500);
+} else {
+ define ('MAX_BUGS_RETURN', 150);
+}
// Obtain common includes
require_once '../../include/prepend.php';
@@ -28,79 +36,12 @@ if (!isset($res)) {
$total_rows = $dbh->prepare('SELECT
FOUND_ROWS()')->execute()->fetchOne();
}
-header('Content-type: text/xml');
-
-echo '<?xml version="1.0"?>
-<?xml-stylesheet
-href="http://www.w3.org/2000/08/w3c-synd/style.css" type="text/css"
-?>
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
-xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
-xmlns:admin="http://webns.net/mvcb/"
xmlns:content="http://purl.org/rss/1.0/modules/content/">';
-echo "\n <channel
rdf:about=\"{$site_method}://{$site_url}{$basedir}/rss/search.php\">\n";
-echo " <title>{$siteBig} Bug Search Results</title>\n";
-echo " <link>{$site_method}://{$site_url}{$basedir}/rss/search.php?" ,
clean(http_build_query($_GET)) , "</link>\n";
-echo " <description>Search Results</description>\n";
-echo " <dc:language>en-us</dc:language>\n";
-echo " <dc:creator>{$site}[email protected]</dc:creator>\n";
-echo " <dc:publisher>{$site}[email protected]</dc:publisher>\n";
-echo " <admin:generatorAgent
rdf:resource=\"{$site_method}://{$site_url}{$basedir}\"/>\n";
-echo " <sy:updatePeriod>hourly</sy:updatePeriod>\n";
-echo " <sy:updateFrequency>1</sy:updateFrequency>\n";
-echo " <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>\n";
-echo ' <items>
- <rdf:Seq>
-';
-
-$items = '';
-if ($total_rows > 0) {
- foreach ($res->fetchAll(MDB2_FETCHMODE_ASSOC) as $row) {
- $desc = "{$row['package_name']} ({$row['bug_type']})\nReported
by ";
- if (preg_match('/@php.net$/i', $row['email'])) {
- $desc .= substr($row['email'], 0, strpos($row['email'],
'@')) ."\n";
- } else {
- $desc .= substr($row['email'], 0, strpos($row['email'],
'@')) . "@...\n";
- }
- $desc .= date(DATE_ATOM, $row['submitted']) . "\n";
- $desc .= "PHP: {$row['php_version']}, OS: {$row['php_os']}\n\n";
- $desc .= $row['ldesc'];
- $desc = '<pre>' . clean($desc) . '</pre>';
-
- echo " <rdf:li
rdf:resource=\"{$site_method}://{$site_url}{$basedir}/{$row['id']}\" />\n";
- $items .= " <item
rdf:about=\"{$site_method}://{$site_url}{$basedir}/{$row['id']}\">\n";
- $items .= ' <title>' . clean("{$row['bug_type']}
{$row['id']} [{$row['status']}] {$row['sdesc']}") . "</title>\n";
- $items .= "
<link>{$site_method}://{$site_url}{$basedir}/{$row['id']}</link>\n";
- $items .= ' <content:encoded><![CDATA[' . $desc .
"]]></content:encoded>\n";
- $items .= ' <description><![CDATA[' . $desc .
"]]></description>\n";
- if (!$row['unchanged']) {
- $items .= ' <dc:date>' . date(DATE_ATOM,
$row['submitted']) . "</dc:date>\n";
- } else {
- $items .= ' <dc:date>' . date(DATE_ATOM,
$row['modified']) . "</dc:date>\n";
- }
- $items .= ' <dc:creator>' .
clean(spam_protect($row['email'])) . "</dc:creator>\n";
- $items .= ' <dc:subject>' . clean($row['package_name']) . '
' . clean($row['bug_type']) . "</dc:subject>\n";
- $items .= " </item>\n";
- }
+if ($format === 'rss2') {
+ require "{$ROOT_DIR}/templates/search-rss2.php";
} else {
- $warnings[] = "No bugs matched your criteria";
+ require "{$ROOT_DIR}/templates/search-rdf.php";
}
-echo <<< DATA
- </rdf:Seq>
- </items>
- </channel>
-
- <image
rdf:about="{$site_method}://{$site_url}{$basedir}/images/{$site}-logo.gif">
- <title>{$siteBig} Bugs</title>
-
<url>{$site_method}://{$site_url}{$basedir}/images/{$site}-logo.gif</url>
- <link>{$site_method}://{$site_url}{$basedir}</link>
- </image>
-
-{$items}
-DATA;
-?>
-</rdf:RDF>
-<?php
if (count($warnings) > 0) {
echo "<!--\n\n";
echo "The following warnings occured during your request:\n\n";--
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php