diff --git a/wp-fdroid/wp-fdroid.php b/wp-fdroid/wp-fdroid.php index 8a79ad6d..2cd8b98a 100644 --- a/wp-fdroid/wp-fdroid.php +++ b/wp-fdroid/wp-fdroid.php @@ -16,9 +16,10 @@ class FDroid { // Our text domain, for internationalisation - var $textdom='wp-fdroid'; + private $textdom='wp-fdroid'; - var $site_path = "/home/fdroid/public_html"; + // TODO: Fix site path... + private $site_path = "/home/hansemil/MyDocuments/f-droid"; // Constructor function FDroid() { @@ -34,6 +35,7 @@ class FDroid $qvars[]='fdfilter'; $qvars[]='fdid'; $qvars[]='fdpage'; + $qvars[]='fdstyle'; return $qvars; } @@ -55,19 +57,6 @@ class FDroid return $wp_query->query_vars[$name]; } - // Make a link to this page, with the given query parameter string added - function makelink($params) { - $link=get_permalink(); - if(strlen($params)==0) - return $link; - if(strpos($link,'?')===false) - $link.='?'; - else - $link.='&'; - $link.=$params; - return $link; - } - // Handler for the 'fdroidrepo' shortcode. // $attribs - shortcode attributes // $content - optional content enclosed between the starting and @@ -77,32 +66,37 @@ class FDroid global $wp_query,$wp_rewrite; $this->lazyinit(); - $page=1; - if(isset($wp_query->query_vars['fdpage'])) { - $page=(int)$wp_query->query_vars['fdpage']; - if($page==0) - $page=1; - } + + // Init local query vars + foreach($this->queryvars(array()) as $qv) { + if(array_key_exists($qv,$wp_query->query_vars)) { + $query_vars[$qv] = $wp_query->query_vars[$qv]; + } else { + $query_vars[$qv] = null; + } + } + + // Santiy check query vars + if(!isset($query_vars['fdpage']) || !is_numeric($query_vars['fdpage']) || $query_vars['fdpage'] <= 0) { + $query_vars['fdpage'] = 1; + } - $filter=$wp_query->query_vars['fdfilter']; - $fdid=$wp_query->query_vars['fdid']; - - if($fdid!==null) - $out=$this->get_app($fdid); + if($query_vars['fdid']!==null) + $out=$this->get_app($query_vars); else - $out=$this->get_apps($page,$filter); + $out=$this->get_apps($query_vars); return $out; } - function get_app($id) { + function get_app($query_vars) { $xml = simplexml_load_file($this->site_path."/repo/index.xml"); foreach($xml->children() as $app) { $attrs=$app->attributes(); - if($attrs['id']==$id) { + if($attrs['id']==$query_vars['fdid']) { $apks=array();; foreach($app->children() as $el) { switch($el->getName()) { @@ -199,7 +193,7 @@ class FDroid $out.="
"; } - $out.='All applications"; + $out=''; + + $out.='
Applications matching ".$filter; - $out.="
"; + $out.="Applications matching ".$query_vars['fdfilter']; + $out.="Details...'; - $out.="
"; - $out.="'.$name."";
- $out.="
".$summary."
'; - if($page==1) { + if($query_vars['fdpage']==1) { $out.="<<first "; $out.="<prev "; } else { - $out.='<<first '; - $out.='<<prev '; + $out.='<<first '; + $out.='<<prev '; } - $out.=" Page $page of $numpages "; - if($page==$numpages) { + $out.=' Page '.$query_vars['fdpage'].' of '.$numpages.' '; + if($query_vars['fdpage']==$numpages) { $out.="next> "; $out.="last>> "; } else { - $out.='next> '; - $out.='last>> '; + $out.='next> '; + $out.='last>> '; } $out.='
'; @@ -297,9 +245,174 @@ class FDroid } + function show_apps($xml,$query_vars,&$numpages) { + + $skipped=0; + $got=0; + $total=0; + if($query_vars['fdstyle']=='grid') { + $outputter = new FDOutGrid(); + } else { + $outputter = new FDOutList(); + } + + $out = ""; + + $out.=$outputter->outputStart(); + + foreach($xml->children() as $app) { + + if($app->getName() == 'repo') continue; + $appinfo['attrs']=$app->attributes(); + $appinfo['id']=$appinfo['attrs']['id']; + foreach($app->children() as $el) { + switch($el->getName()) { + case "name": + $appinfo['name']=$el; + break; + case "icon": + $appinfo['icon']=$el; + break; + case "summary": + $appinfo['summary']=$el; + break; + case "license": + $appinfo['license']=$el; + break; + } + } + + if($query_vars['fdfilter']===null || stristr($appinfo['name'],$query_vars['fdfilter'])) { + if($skipped<($query_vars['fdpage']-1)*$outputter->perpage) { + $skipped++; + } else if($got<$outputter->perpage) { + + $out.=$outputter->outputEntry($query_vars, $appinfo); + $got++; + } + $total++; + } + + } + + $out.=$outputter->outputEnd(); + + $numpages = ceil((float)$total/$outputter->perpage); + + return $out; + } } +// Class to output app entries in a detailed list format +class FDOutList +{ + var $perpage=30; + + function FDOutList() { + } + + function outputStart() { + return ''; + } + + function outputEntry($query_vars, $appinfo) { + $out=""; + $out.="Details...'; + $out.="
"; + $out.="'.$appinfo['name']."";
+ $out.="
".$appinfo['summary']."
';
+ $out.=' '; + $out.=' ';
+
+ $out.='';
+ $out.=' ";
+ $out.='';
+ $out.="'; + $out.=$appinfo['name'].' '; + $out.=''; + + $out.=" | \n";
+
+ $this->itemCount++;
+ return $out;
+ }
+
+ function outputEnd() {
+ return '