{\r
\r
// Our text domain, for internationalisation\r
- var $textdom='wp-fdroid';\r
+ private $textdom='wp-fdroid';\r
\r
- var $site_path = "/home/fdroid/public_html";\r
+ // TODO: Fix site path...\r
+ private $site_path = "/home/hansemil/MyDocuments/f-droid";\r
\r
// Constructor\r
function FDroid() {\r
$qvars[]='fdfilter';\r
$qvars[]='fdid';\r
$qvars[]='fdpage';\r
+ $qvars[]='fdstyle';\r
return $qvars;\r
}\r
\r
return $wp_query->query_vars[$name];\r
}\r
\r
- // Make a link to this page, with the given query parameter string added\r
- function makelink($params) {\r
- $link=get_permalink();\r
- if(strlen($params)==0)\r
- return $link;\r
- if(strpos($link,'?')===false)\r
- $link.='?';\r
- else\r
- $link.='&';\r
- $link.=$params;\r
- return $link;\r
- }\r
-\r
// Handler for the 'fdroidrepo' shortcode.\r
// $attribs - shortcode attributes\r
// $content - optional content enclosed between the starting and\r
global $wp_query,$wp_rewrite;\r
$this->lazyinit();\r
\r
- $page=1;\r
- if(isset($wp_query->query_vars['fdpage'])) {\r
- $page=(int)$wp_query->query_vars['fdpage'];\r
- if($page==0)\r
- $page=1;\r
- }\r
-\r
- $filter=$wp_query->query_vars['fdfilter'];\r
- $fdid=$wp_query->query_vars['fdid'];\r
-\r
- if($fdid!==null)\r
- $out=$this->get_app($fdid);\r
+ \r
+ // Init local query vars\r
+ foreach($this->queryvars(array()) as $qv) {\r
+ if(array_key_exists($qv,$wp_query->query_vars)) {\r
+ $query_vars[$qv] = $wp_query->query_vars[$qv];\r
+ } else {\r
+ $query_vars[$qv] = null;\r
+ }\r
+ }\r
+ \r
+ // Santiy check query vars\r
+ if(!isset($query_vars['fdpage']) || !is_numeric($query_vars['fdpage']) || $query_vars['fdpage'] <= 0) {\r
+ $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($page,$filter);\r
+ $out=$this->get_apps($query_vars);\r
return $out;\r
\r
}\r
\r
\r
- function get_app($id) {\r
+ function get_app($query_vars) {\r
\r
$xml = simplexml_load_file($this->site_path."/repo/index.xml");\r
foreach($xml->children() as $app) {\r
\r
$attrs=$app->attributes();\r
- if($attrs['id']==$id) {\r
+ if($attrs['id']==$query_vars['fdid']) {\r
$apks=array();;\r
foreach($app->children() as $el) {\r
switch($el->getName()) {\r
$out.="</p>";\r
}\r
\r
- $out.='<hr><p><a href="'.$this->makelink("").'">Index</a></p>';\r
+ $out.='<hr><p><a href="'.makelink($query_vars,array('fdid'=>null)).'">Index</a></p>';\r
\r
return $out;\r
}\r
}\r
\r
\r
- function get_apps($page,$filter=null) {\r
+ function get_apps($query_vars) {\r
+\r
+ $out='';\r
\r
- if($filter===null)\r
- $out="<p>All applications";\r
+ $out.='<div style="float:left;">';\r
+ if($query_vars['fdfilter']===null)\r
+ $out.="All applications";\r
else\r
- $out="<p>Applications matching ".$filter;\r
- $out.="</p>";\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
+ $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.="<<first ";\r
+ $out.="<prev ";\r
+ } else {\r
+ $out.='<a href="'.makelink($query_vars, array('fdpage'=>1)).'"><<first</a> ';\r
+ $out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']-1))).'"><<prev</a> ';\r
+ }\r
+ $out.=' Page '.$query_vars['fdpage'].' of '.$numpages.' ';\r
+ if($query_vars['fdpage']==$numpages) {\r
+ $out.="next> ";\r
+ $out.="last>> ";\r
+ } else {\r
+ $out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']+1))).'">next></a> ';\r
+ $out.='<a href="'.makelink($query_vars, array('fdpage'=>$numpages)).'">last>></a> ';\r
+ }\r
+ $out.='</p>';\r
+\r
+ return $out;\r
+ }\r
\r
- $perpage=30;\r
+\r
+ function show_apps($xml,$query_vars,&$numpages) {\r
+ \r
$skipped=0;\r
$got=0;\r
$total=0;\r
\r
- $xml = simplexml_load_file($this->site_path."/repo/index.xml");\r
+ if($query_vars['fdstyle']=='grid') {\r
+ $outputter = new FDOutGrid();\r
+ } else {\r
+ $outputter = new FDOutList();\r
+ }\r
+ \r
+ $out = "";\r
+ \r
+ $out.=$outputter->outputStart();\r
+ \r
foreach($xml->children() as $app) {\r
\r
if($app->getName() == 'repo') continue;\r
- $attrs=$app->attributes();\r
- $id=$attrs['id'];\r
+ $appinfo['attrs']=$app->attributes();\r
+ $appinfo['id']=$appinfo['attrs']['id'];\r
foreach($app->children() as $el) {\r
switch($el->getName()) {\r
case "name":\r
- $name=$el;\r
+ $appinfo['name']=$el;\r
break;\r
case "icon":\r
- $icon=$el;\r
+ $appinfo['icon']=$el;\r
break;\r
case "summary":\r
- $summary=$el;\r
+ $appinfo['summary']=$el;\r
break;\r
case "license":\r
- $license=$el;\r
+ $appinfo['license']=$el;\r
break;\r
}\r
}\r
\r
- if($filter===null || stristr($name,$filter)) {\r
- if($skipped<($page-1)*$perpage) {\r
+ if($query_vars['fdfilter']===null || stristr($appinfo['name'],$query_vars['fdfilter'])) {\r
+ if($skipped<($query_vars['fdpage']-1)*$outputter->perpage) {\r
$skipped++;\r
- } else if($got<$perpage) {\r
-\r
- $out.="<hr>\n";\r
- $out.='<div id="appheader">';\r
-\r
- $out.='<div style="float:left;padding-right:10px;"><img src="http://f-droid.org/repo/icons/'.$icon.'" style="width:48px;"></div>';\r
-\r
- $out.='<div style="float:right;">';\r
- $out.='<p><a href="';\r
- $out.=$this->makelink("fdid=".$id);\r
- $out.='">Details...</a>';\r
- $out.="</p>";\r
- $out.="</div>\n";\r
-\r
- $out.='<p><span style="font-size:20px">'.$name."</span>";\r
- $out.="<br>".$summary."</p>\n";\r
-\r
- $out.="</div>\n";\r
+ } else if($got<$outputter->perpage) {\r
\r
+ $out.=$outputter->outputEntry($query_vars, $appinfo);\r
$got++;\r
}\r
$total++;\r
}\r
\r
}\r
+ \r
+ $out.=$outputter->outputEnd();\r
+ \r
+ $numpages = ceil((float)$total/$outputter->perpage);\r
+ \r
+ return $out;\r
+ }\r
+}\r
\r
- $numpages=ceil((float)$total/$perpage);\r
-\r
- $out.='<hr><p>';\r
- if($page==1) {\r
- $out.="<<first ";\r
- $out.="<prev ";\r
- } else {\r
- $out.='<a href="'.$this->makelink("fdpage=1").'"><<first</a> ';\r
- $out.='<a href="'.$this->makelink("fdpage=".($page-1)).'"><<prev</a> ';\r
- }\r
- $out.=" Page $page of $numpages ";\r
- if($page==$numpages) {\r
- $out.="next> ";\r
- $out.="last>> ";\r
- } else {\r
- $out.='<a href="'.$this->makelink("fdpage=".($page+1)).'">next></a> ';\r
- $out.='<a href="'.$this->makelink("fdpage=".$numpages).'">last>></a> ';\r
- }\r
- $out.='</p>';\r
-\r
- return $out;\r
- }\r
+// Class to output app entries in a detailed list format\r
+class FDOutList\r
+{\r
+ var $perpage=30;\r
+\r
+ function FDOutList() {\r
+ }\r
+\r
+ function outputStart() {\r
+ return '';\r
+ }\r
+ \r
+ function outputEntry($query_vars, $appinfo) {\r
+ $out="";\r
+ $out.="<hr>\n";\r
+ $out.='<div id="appheader">';\r
+\r
+ $out.='<div style="float:left;padding-right:10px;"><img src="http://f-droid.org/repo/icons/'.$appinfo['icon'].'" style="width:48px;"></div>';\r
+\r
+ $out.='<div style="float:right;">';\r
+ $out.='<p><a href="';\r
+ $out.=makelink($query_vars, array('fdid'=>$appinfo['id']));\r
+ $out.='">Details...</a>';\r
+ $out.="</p>";\r
+ $out.="</div>\n";\r
+\r
+ $out.='<p><span style="font-size:20px">'.$appinfo['name']."</span>";\r
+ $out.="<br>".$appinfo['summary']."</p>\n";\r
+\r
+ $out.="</div>\n";\r
+ \r
+ return $out;\r
+ }\r
+\r
+ function outputEnd() {\r
+ return '';\r
+ }\r
+}\r
\r
+// Class to output app entries in a compact grid format\r
+class FDOutGrid\r
+{\r
+ var $perpage=80;\r
+\r
+ var $itemCount = 0;\r
+\r
+ function FDOutGrid() {\r
+ }\r
+\r
+ function outputStart() {\r
+ return "\n".'<table border="0" width="100%"><tr>'."\n";\r
+ }\r
+ \r
+ function outputEntry($query_vars, $appinfo) {\r
+ $link=makelink($query_vars, array('fdid'=>$appinfo['id']));\r
+\r
+ $out='';\r
+\r
+ if($this->itemCount%4 == 0 && $this->itemCount > 0)\r
+ {\r
+ $out.='</tr><tr>'."\n";\r
+ }\r
+\r
+ $out.='<td align="center" valign="top" style="background-color:#F8F8F8;">';\r
+ $out.='<p>';\r
+ $out.='<div id="appheader" style="text-align:center;width:110px;">';\r
+\r
+ $out.='<a href="'.$link.'" style="border-bottom-style:none;">';\r
+ $out.='<img src="http://f-droid.org/repo/icons/'.$appinfo['icon'].'" style="width:48px;border-width:0;padding-top:5px;padding-bottom:5px;"><br/>';\r
+ $out.=$appinfo['name'].'<br/>';\r
+ $out.='</a>';\r
+\r
+ $out.="</div>";\r
+ $out.='</p>';\r
+ $out.="</td>\n";\r
+ \r
+ $this->itemCount++;\r
+ return $out;\r
+ }\r
+\r
+ function outputEnd() {\r
+ return '</tr></table>'."\n";\r
+ }\r
+}\r
\r
+// Make a link to this page, with the current query vars attached and desired params added/modified\r
+function makelink($query_vars, $params=array()) {\r
+ $link=get_permalink();\r
+ $vars=linkify(array_merge($query_vars, $params));\r
+ if(strlen($vars)==0)\r
+ return $link;\r
+ if(strpos($link,'?')===false)\r
+ $link.='?';\r
+ else\r
+ $link.='&';\r
+ return $link.$vars;\r
+}\r
\r
+// Return the key value pairs in http-get-parameter format as a string\r
+function linkify($vars) {\r
+ $retvar = '';\r
+ foreach($vars as $k => $v) {\r
+ if($k!==null && $v!==null && $v!='')\r
+ $retvar .= $k.'='.$v.'&';\r
+ }\r
+ return substr($retvar,0,-1);\r
}\r
\r
+\r
$wp_fdroid = new FDroid();\r
\r
\r