class FDroid\r
{\r
\r
- // Our text domain, for internationalisation\r
- var $textdom='wp-fdroid';\r
+ // Our text domain, for internationalisation\r
+ var $textdom='wp-fdroid';\r
\r
var $site_path = "/var/www/fdroid";\r
\r
- // Constructor\r
- function FDroid() {\r
- // Add filters etc here!\r
- add_shortcode('fdroidrepo',array($this, 'do_shortcode'));\r
- add_filter('query_vars',array($this, 'queryvars'));\r
- $this->inited=false;\r
- }\r
-\r
-\r
- // Register additional query variables. (Handler for the 'query_vars' filter)\r
- function queryvars($qvars) {\r
- $qvars[]='fdfilter';\r
- $qvars[]='fdid';\r
- $qvars[]='fdpage';\r
- return $qvars;\r
- }\r
-\r
-\r
- // Lazy initialise. All non-trivial members should call this before doing anything else.\r
- function lazyinit() {\r
- if(!$this->inited) {\r
- load_plugin_textdomain($this->textdom, PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)), dirname(plugin_basename(__FILE__)));\r
-\r
- $this->inited=true;\r
- }\r
- }\r
-\r
- // Gets a required query parameter by name.\r
- function getrequiredparam($name) {\r
- global $wp_query;\r
- if(!isset($wp_query->query_vars[$name]))\r
- wp_die("Missing parameter ".$name,"Error");\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
- // ending shortcode\r
- // Returns the generated content.\r
- function do_shortcode($attribs,$content=null) {\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
- else\r
- $out=$this->get_apps($page,$filter);\r
- return $out;\r
-\r
- }\r
-\r
-\r
- function get_app($id) {\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
- $apks=array();;\r
- foreach($app->children() as $el) {\r
- switch($el->getName()) {\r
- case "name":\r
- $name=$el;\r
- break;\r
- case "icon":\r
- $icon=$el;\r
- break;\r
- case "summary":\r
- $summary=$el;\r
- break;\r
- case "description":\r
- $desc=$el;\r
- break;\r
- case "license":\r
- $license=$el;\r
- break;\r
- case "source":\r
- $source=$el;\r
- break;\r
- case "tracker":\r
- $issues=$el;\r
- break;\r
- case "web":\r
- $web=$el;\r
- break;\r
- case "package":\r
- $thisapk=array();\r
- foreach($el->children() as $pel) {\r
- switch($pel->getName()) {\r
- case "version":\r
- $thisapk['version']=$pel;\r
- break;\r
- case "vercode":\r
- $thisapk['vercode']=$pel;\r
- break;\r
- case "apkname":\r
- $thisapk['apkname']=$pel;\r
- break;\r
- case "hash":\r
- $thisapk['hash']=$pel;\r
- break;\r
- case "size":\r
- $thisapk['size']=$pel;\r
- break;\r
- case "sdkver":\r
- $thisapk['sdkver']=$pel;\r
- break;\r
- case "permissions":\r
- $thisapk['permissions']=$pel;\r
- break;\r
- }\r
- }\r
- $apks[]=$thisapk;\r
-\r
- }\r
- }\r
-\r
- $out='<div id="appheader">';\r
- $out.='<div style="float:left;padding-right:10px;"><img src="http://f-droid.org/repo/icons/'.$icon.'" width=48></div>';\r
- $out.='<p><span style="font-size:20px">'.$name."</span>";\r
- $out.="<br>".$summary."</p>";\r
- $out.="</div>";\r
-\r
- $out.="<p>".$desc."</p>";\r
-\r
- $out.="<p><b>License:</b> ".$license."</p>";\r
-\r
- $out.="<p>";\r
- if(strlen($web)>0)\r
- $out.='<b>Website:</b> <a href="'.$web.'">'.$web.'</a><br />';\r
- if(strlen($issues)>0)\r
- $out.='<b>Issue Tracker:</b> <a href="'.$issues.'">'.$issues.'</a><br />';\r
- if(strlen($source)>0)\r
- $out.='<b>Source Code:</b> <a href="'.$source.'">'.$source.'</a><br />';\r
- $out.="</p>";\r
-\r
- $out.="<h3>Packages</h3>";\r
- foreach($apks as $apk) {\r
- $out.="<p><b>Version ".$apk['version']."</b> - ";\r
- $out.='<a href="http://f-droid.org/repo/'.$apk['apkname'].'">download</a> ';\r
- $out.=$apk['size']." bytes";\r
- $out.="</p>";\r
- }\r
-\r
- $out.='<hr><p><a href="'.$this->makelink("").'">Index</a></p>';\r
-\r
- return $out;\r
- }\r
- }\r
- return "<p>Application not found</p>";\r
- }\r
-\r
-\r
- function get_apps($page,$filter=null) {\r
-\r
- if($filter===null)\r
- $out="<p>All applications";\r
- else\r
- $out="<p>Applications matching ".$filter;\r
- $out.="</p>";\r
-\r
- $perpage=30;\r
- $skipped=0;\r
- $got=0;\r
- $total=0;\r
-\r
- $xml = simplexml_load_file($this->site_path."/repo/index.xml");\r
- foreach($xml->children() as $app) {\r
-\r
- if($app->getName() == 'repo') continue;\r
- $attrs=$app->attributes();\r
- $id=$attrs['id'];\r
- foreach($app->children() as $el) {\r
- switch($el->getName()) {\r
- case "name":\r
- $name=$el;\r
- break;\r
- case "icon":\r
- $icon=$el;\r
- break;\r
- case "summary":\r
- $summary=$el;\r
- break;\r
- case "license":\r
- $license=$el;\r
- break;\r
- }\r
- }\r
-\r
- if($filter===null || stristr($name,$filter)) {\r
- if($skipped<($page-1)*$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
-\r
- $got++;\r
- }\r
- $total++;\r
- }\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
+ // Constructor\r
+ function FDroid() {\r
+ // Add filters etc here!\r
+ add_shortcode('fdroidrepo',array($this, 'do_shortcode'));\r
+ add_filter('query_vars',array($this, 'queryvars'));\r
+ $this->inited=false;\r
+ }\r
+\r
+\r
+ // Register additional query variables. (Handler for the 'query_vars' filter)\r
+ function queryvars($qvars) {\r
+ $qvars[]='fdfilter';\r
+ $qvars[]='fdid';\r
+ $qvars[]='fdpage';\r
+ return $qvars;\r
+ }\r
+\r
+\r
+ // Lazy initialise. All non-trivial members should call this before doing anything else.\r
+ function lazyinit() {\r
+ if(!$this->inited) {\r
+ load_plugin_textdomain($this->textdom, PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)), dirname(plugin_basename(__FILE__)));\r
+\r
+ $this->inited=true;\r
+ }\r
+ }\r
+\r
+ // Gets a required query parameter by name.\r
+ function getrequiredparam($name) {\r
+ global $wp_query;\r
+ if(!isset($wp_query->query_vars[$name]))\r
+ wp_die("Missing parameter ".$name,"Error");\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
+ // ending shortcode\r
+ // Returns the generated content.\r
+ function do_shortcode($attribs,$content=null) {\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
+ else\r
+ $out=$this->get_apps($page,$filter);\r
+ return $out;\r
+\r
+ }\r
+\r
+\r
+ function get_app($id) {\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
+ $apks=array();;\r
+ foreach($app->children() as $el) {\r
+ switch($el->getName()) {\r
+ case "name":\r
+ $name=$el;\r
+ break;\r
+ case "icon":\r
+ $icon=$el;\r
+ break;\r
+ case "summary":\r
+ $summary=$el;\r
+ break;\r
+ case "description":\r
+ $desc=$el;\r
+ break;\r
+ case "license":\r
+ $license=$el;\r
+ break;\r
+ case "source":\r
+ $source=$el;\r
+ break;\r
+ case "tracker":\r
+ $issues=$el;\r
+ break;\r
+ case "web":\r
+ $web=$el;\r
+ break;\r
+ case "package":\r
+ $thisapk=array();\r
+ foreach($el->children() as $pel) {\r
+ switch($pel->getName()) {\r
+ case "version":\r
+ $thisapk['version']=$pel;\r
+ break;\r
+ case "vercode":\r
+ $thisapk['vercode']=$pel;\r
+ break;\r
+ case "apkname":\r
+ $thisapk['apkname']=$pel;\r
+ break;\r
+ case "hash":\r
+ $thisapk['hash']=$pel;\r
+ break;\r
+ case "size":\r
+ $thisapk['size']=$pel;\r
+ break;\r
+ case "sdkver":\r
+ $thisapk['sdkver']=$pel;\r
+ break;\r
+ case "permissions":\r
+ $thisapk['permissions']=$pel;\r
+ break;\r
+ }\r
+ }\r
+ $apks[]=$thisapk;\r
+\r
+ }\r
+ }\r
+\r
+ $out='<div id="appheader">';\r
+ $out.='<div style="float:left;padding-right:10px;"><img src="http://f-droid.org/repo/icons/'.$icon.'" width=48></div>';\r
+ $out.='<p><span style="font-size:20px">'.$name."</span>";\r
+ $out.="<br>".$summary."</p>";\r
+ $out.="</div>";\r
+\r
+ $out.="<p>".$desc."</p>";\r
+\r
+ $out.="<p><b>License:</b> ".$license."</p>";\r
+\r
+ $out.="<p>";\r
+ if(strlen($web)>0)\r
+ $out.='<b>Website:</b> <a href="'.$web.'">'.$web.'</a><br />';\r
+ if(strlen($issues)>0)\r
+ $out.='<b>Issue Tracker:</b> <a href="'.$issues.'">'.$issues.'</a><br />';\r
+ if(strlen($source)>0)\r
+ $out.='<b>Source Code:</b> <a href="'.$source.'">'.$source.'</a><br />';\r
+ $out.="</p>";\r
+\r
+ $out.="<h3>Packages</h3>";\r
+ foreach($apks as $apk) {\r
+ $out.="<p><b>Version ".$apk['version']."</b> - ";\r
+ $out.='<a href="http://f-droid.org/repo/'.$apk['apkname'].'">download</a> ';\r
+ $out.=$apk['size']." bytes";\r
+ $out.="</p>";\r
+ }\r
+\r
+ $out.='<hr><p><a href="'.$this->makelink("").'">Index</a></p>';\r
+\r
+ return $out;\r
+ }\r
+ }\r
+ return "<p>Application not found</p>";\r
+ }\r
+\r
+\r
+ function get_apps($page,$filter=null) {\r
+\r
+ if($filter===null)\r
+ $out="<p>All applications";\r
+ else\r
+ $out="<p>Applications matching ".$filter;\r
+ $out.="</p>";\r
+\r
+ $perpage=30;\r
+ $skipped=0;\r
+ $got=0;\r
+ $total=0;\r
+\r
+ $xml = simplexml_load_file($this->site_path."/repo/index.xml");\r
+ foreach($xml->children() as $app) {\r
+\r
+ if($app->getName() == 'repo') continue;\r
+ $attrs=$app->attributes();\r
+ $id=$attrs['id'];\r
+ foreach($app->children() as $el) {\r
+ switch($el->getName()) {\r
+ case "name":\r
+ $name=$el;\r
+ break;\r
+ case "icon":\r
+ $icon=$el;\r
+ break;\r
+ case "summary":\r
+ $summary=$el;\r
+ break;\r
+ case "license":\r
+ $license=$el;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if($filter===null || stristr($name,$filter)) {\r
+ if($skipped<($page-1)*$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
+\r
+ $got++;\r
+ }\r
+ $total++;\r
+ }\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
\r
\r
\r