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

Reply via email to