chiark / gitweb /
Implemented searching for apps in the repository.
authorHans-Emil Skogh <hansemil@gmail.com>
Sun, 18 Dec 2011 20:16:20 +0000 (21:16 +0100)
committerHans-Emil Skogh <hansemil@gmail.com>
Sun, 18 Dec 2011 20:16:20 +0000 (21:16 +0100)
Adds a new shortcode attribute "search" for the shortcode "fdroidrepo". When this is set, a search field will be shown above the app listing.
Uses the fdfilter search code to do the search result filtering.

wp-fdroid/wp-fdroid.php

index fe05c092d0f6cc484b891838a2be86c262d040aa..7d1b1dfc0fd641ebe8b0828f6cecbcd20dc9a793 100644 (file)
@@ -81,10 +81,20 @@ class FDroid
                        $query_vars['fdpage'] = 1;\r
                }\r
 \r
-        if($query_vars['fdid']!==null)\r
-            $out=$this->get_app($query_vars);\r
-        else\r
-            $out=$this->get_apps($query_vars);\r
+               $out = '';\r
+\r
+               if(isset($attribs['search']) && $query_vars['fdfilter']===null) {\r
+                       $query_vars['fdfilter'] = '';\r
+               }\r
+\r
+               if($query_vars['fdid']!==null) {\r
+            $out.=$this->get_app($query_vars);\r
+               } else {\r
+                       if($query_vars['fdfilter'] !== null)\r
+                               $out.=$this->show_search($query_vars);\r
+\r
+            $out.=$this->get_apps($query_vars);\r
+               }\r
         return $out;\r
 \r
     }\r
@@ -204,46 +214,74 @@ class FDroid
 \r
     function get_apps($query_vars) {\r
 \r
+           $xml = simplexml_load_file($this->site_path."/repo/index.xml");\r
+               $matches = $this->show_apps($xml,$query_vars,$numpages);\r
+       \r
                $out='';\r
 \r
-               $out.='<div style="float:left;">';\r
-        if($query_vars['fdfilter']===null)\r
-            $out.="All applications";\r
-        else\r
-            $out.="Applications matching ".$query_vars['fdfilter'];\r
-        $out.="</div>";\r
-\r
-               $out.='<div style="float:right;">';\r
-            $out.='<a href="'.makelink($query_vars, array('fdstyle'=>'list','fdpage'=>'1')).'">List</a> | ';\r
-            $out.='<a href="'.makelink($query_vars, array('fdstyle'=>'grid','fdpage'=>'1')).'">Grid</a>';\r
-        $out.='</div>';\r
+               if(($query_vars['fdfilter']===null || $query_vars['fdfilter']!='') && $numpages>0)\r
+               {\r
+                       $out.='<div style="float:left;">';\r
+                       if($query_vars['fdfilter']===null)\r
+                               $out.="All applications";\r
+                       else\r
+                               $out.='Applications matching "'.$query_vars['fdfilter'].'"';\r
+                       $out.="</div>";\r
+\r
+                       $out.='<div style="float:right;">';\r
+                               $out.='<a href="'.makelink($query_vars, array('fdstyle'=>'list','fdpage'=>'1')).'">List</a> | ';\r
+                               $out.='<a href="'.makelink($query_vars, array('fdstyle'=>'grid','fdpage'=>'1')).'">Grid</a>';\r
+                       $out.='</div>';\r
+\r
+                       $out.='<br break="all"/>';\r
+               } \r
+               \r
+               if($numpages>0) {\r
+                       $out.=$matches;\r
+                       \r
+                       $out.='<hr><p>';\r
+                       if($query_vars['fdpage']==1) {\r
+                               $out.="&lt;&lt;first ";\r
+                               $out.="&lt;prev ";\r
+                       } else {\r
+                               $out.='<a href="'.makelink($query_vars, array('fdpage'=>1)).'">&lt;&lt;first</a> ';\r
+                               $out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']-1))).'">&lt;&lt;prev</a> ';\r
+                       }\r
+                       $out.=' Page '.$query_vars['fdpage'].' of '.$numpages.' ';\r
+                       if($query_vars['fdpage']==$numpages) {\r
+                               $out.="next&gt; ";\r
+                               $out.="last&gt;&gt; ";\r
+                       } else {\r
+                               $out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']+1))).'">next&gt;</a> ';\r
+                               $out.='<a href="'.makelink($query_vars, array('fdpage'=>$numpages)).'">last&gt;&gt;</a> ';\r
+                       }\r
+                       $out.='</p>';\r
+               } else if($query_vars['fdfilter']!='') {\r
+                       $out.='<p>No matches</p>';\r
+               }\r
 \r
-        $out.='<br break="all"/>';\r
+        return $out;\r
+    }\r
 \r
-        $xml = simplexml_load_file($this->site_path."/repo/index.xml");\r
-               $out.=$this->show_apps($xml,$query_vars,$numpages);\r
-\r
-        $out.='<hr><p>';\r
-        if($query_vars['fdpage']==1) {\r
-            $out.="&lt;&lt;first ";\r
-            $out.="&lt;prev ";\r
-        } else {\r
-            $out.='<a href="'.makelink($query_vars, array('fdpage'=>1)).'">&lt;&lt;first</a> ';\r
-            $out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']-1))).'">&lt;&lt;prev</a> ';\r
-        }\r
-        $out.=' Page '.$query_vars['fdpage'].' of '.$numpages.' ';\r
-        if($query_vars['fdpage']==$numpages) {\r
-            $out.="next&gt; ";\r
-            $out.="last&gt;&gt; ";\r
-        } else {\r
-            $out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']+1))).'">next&gt;</a> ';\r
-            $out.='<a href="'.makelink($query_vars, array('fdpage'=>$numpages)).'">last&gt;&gt;</a> ';\r
-        }\r
-        $out.='</p>';\r
+       \r
+    function show_search($query_vars) {\r
 \r
+               $out='';\r
+               $out.='<form name="searchform" action="" method="get">';\r
+               $out.='<p><input name="fdfilter" type="text" value="'.$query_vars['fdfilter'].'" size="30"> ';\r
+               $out.='<input type="submit" value="Search"></p>';\r
+\r
+               $out.='<input type="hidden" name="page_id" value="'.get_query_var('page_id').'">';\r
+               foreach($query_vars as $name => $value) {\r
+                       if($value !== null && $name != 'fdfilter')\r
+                               $out.='<input type="hidden" name="'.$name.'" value="'.$value.'">';\r
+               }\r
+               \r
+               $out.='</form>'."\n";\r
+               \r
         return $out;\r
     }\r
-\r
+       \r
 \r
     function show_apps($xml,$query_vars,&$numpages) {\r
        \r
@@ -283,11 +321,10 @@ class FDroid
                 }\r
             }\r
 \r
-            if($query_vars['fdfilter']===null || stristr($appinfo['name'],$query_vars['fdfilter'])) {\r
+            if($query_vars['fdfilter']===null || $query_vars['fdfilter']!='' && (stristr($appinfo['name'],$query_vars['fdfilter']) || stristr($appinfo['summary'],$query_vars['fdfilter']))) {\r
                 if($skipped<($query_vars['fdpage']-1)*$outputter->perpage) {\r
                     $skipped++;\r
                 } else if($got<$outputter->perpage) {\r
-\r
                                        $out.=$outputter->outputEntry($query_vars, $appinfo);\r
                     $got++;\r
                 }\r