Normalized indentation to use tab character and unix style line endings for the wp-fdroid plugin.

This is consistent with the wordpress PHP source style.
This commit is contained in:
Hans-Emil Skogh 2011-12-29 19:45:18 +01:00
parent 5bf68469cb
commit e3af9bf78f

View file

@ -1,455 +1,455 @@
<?php <?php
/* /*
Plugin Name: WP FDroid Plugin Name: WP FDroid
Plugin URI: http://f-droid.org/repository Plugin URI: http://f-droid.org/repository
Description: An FDroid repository browser Description: An FDroid repository browser
Author: Ciaran Gultnieks Author: Ciaran Gultnieks
Version: 0.01 Version: 0.01
Author URI: http://ciarang.com Author URI: http://ciarang.com
Revision history
0.01 - 2010-12-04: Initial development version
*/
class FDroid
{
// Our text domain, for internationalisation
private $textdom='wp-fdroid';
private $site_path;
// Constructor
function FDroid() {
// Add filters etc here!
add_shortcode('fdroidrepo',array($this, 'do_shortcode'));
add_filter('query_vars',array($this, 'queryvars'));
$this->inited=false;
$this->site_path=getenv('DOCUMENT_ROOT');
}
// Register additional query variables. (Handler for the 'query_vars' filter)
function queryvars($qvars) {
$qvars[]='fdfilter';
$qvars[]='fdid';
$qvars[]='fdpage';
$qvars[]='fdstyle';
return $qvars;
}
// Lazy initialise. All non-trivial members should call this before doing anything else.
function lazyinit() {
if(!$this->inited) {
load_plugin_textdomain($this->textdom, PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)), dirname(plugin_basename(__FILE__)));
$this->inited=true;
}
}
// Gets a required query parameter by name.
function getrequiredparam($name) {
global $wp_query;
if(!isset($wp_query->query_vars[$name]))
wp_die("Missing parameter ".$name,"Error");
return $wp_query->query_vars[$name];
}
// Handler for the 'fdroidrepo' shortcode.
// $attribs - shortcode attributes
// $content - optional content enclosed between the starting and
// ending shortcode
// Returns the generated content.
function do_shortcode($attribs,$content=null) {
global $wp_query,$wp_rewrite;
$this->lazyinit();
// 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;
}
$out = '';
if(isset($attribs['search']) && $query_vars['fdfilter']===null) {
$query_vars['fdfilter'] = '';
}
if($query_vars['fdid']!==null) {
$out.=$this->get_app($query_vars);
} else {
if($query_vars['fdfilter'] !== null)
$out.=$this->show_search($query_vars);
$out.=$this->get_apps($query_vars);
}
return $out; Revision history
0.01 - 2010-12-04: Initial development version
}
*/
function get_app($query_vars) { class FDroid
{
$xml = simplexml_load_file($this->site_path."/repo/index.xml");
foreach($xml->children() as $app) { // Our text domain, for internationalisation
private $textdom='wp-fdroid';
$attrs=$app->attributes();
if($attrs['id']==$query_vars['fdid']) { private $site_path;
$apks=array();;
foreach($app->children() as $el) { // Constructor
switch($el->getName()) { function FDroid() {
case "name": // Add filters etc here!
$name=$el; add_shortcode('fdroidrepo',array($this, 'do_shortcode'));
break; add_filter('query_vars',array($this, 'queryvars'));
case "icon": $this->inited=false;
$icon=$el; $this->site_path=getenv('DOCUMENT_ROOT');
break; }
case "summary":
$summary=$el;
break; // Register additional query variables. (Handler for the 'query_vars' filter)
case "description": function queryvars($qvars) {
$desc=$el; $qvars[]='fdfilter';
break; $qvars[]='fdid';
case "license": $qvars[]='fdpage';
$license=$el; $qvars[]='fdstyle';
break; return $qvars;
case "source": }
$source=$el;
break;
case "tracker": // Lazy initialise. All non-trivial members should call this before doing anything else.
$issues=$el; function lazyinit() {
break; if(!$this->inited) {
case "donate": load_plugin_textdomain($this->textdom, PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)), dirname(plugin_basename(__FILE__)));
$donate=$el;
break; $this->inited=true;
case "web": }
$web=$el; }
break;
case "package": // Gets a required query parameter by name.
$thisapk=array(); function getrequiredparam($name) {
foreach($el->children() as $pel) { global $wp_query;
switch($pel->getName()) { if(!isset($wp_query->query_vars[$name]))
case "version": wp_die("Missing parameter ".$name,"Error");
$thisapk['version']=$pel; return $wp_query->query_vars[$name];
break; }
case "vercode":
$thisapk['vercode']=$pel; // Handler for the 'fdroidrepo' shortcode.
break; // $attribs - shortcode attributes
case "apkname": // $content - optional content enclosed between the starting and
$thisapk['apkname']=$pel; // ending shortcode
break; // Returns the generated content.
case "srcname": function do_shortcode($attribs,$content=null) {
$thisapk['srcname']=$pel; global $wp_query,$wp_rewrite;
break; $this->lazyinit();
case "hash":
$thisapk['hash']=$pel; // Init local query vars
break; foreach($this->queryvars(array()) as $qv) {
case "size": if(array_key_exists($qv,$wp_query->query_vars)) {
$thisapk['size']=$pel; $query_vars[$qv] = $wp_query->query_vars[$qv];
break; } else {
case "sdkver": $query_vars[$qv] = null;
$thisapk['sdkver']=$pel; }
break; }
case "permissions":
$thisapk['permissions']=$pel; // Santiy check query vars
break; if(!isset($query_vars['fdpage']) || !is_numeric($query_vars['fdpage']) || $query_vars['fdpage'] <= 0) {
} $query_vars['fdpage'] = 1;
} }
$apks[]=$thisapk;
$out = '';
}
} if(isset($attribs['search']) && $query_vars['fdfilter']===null) {
$query_vars['fdfilter'] = '';
$out='<div id="appheader">'; }
$out.='<div style="float:left;padding-right:10px;"><img src="http://f-droid.org/repo/icons/'.$icon.'" width=48></div>';
$out.='<p><span style="font-size:20px">'.$name."</span>"; if($query_vars['fdid']!==null) {
$out.="<br>".$summary."</p>"; $out.=$this->get_app($query_vars);
$out.="</div>"; } else {
if($query_vars['fdfilter'] !== null)
$out.="<p>".$desc."</p>"; $out.=$this->show_search($query_vars);
$out.="<p><b>License:</b> ".$license."</p>"; $out.=$this->get_apps($query_vars);
}
$out.="<p>";
if(strlen($web)>0) return $out;
$out.='<b>Website:</b> <a href="'.$web.'">'.$web.'</a><br />';
if(strlen($issues)>0) }
$out.='<b>Issue Tracker:</b> <a href="'.$issues.'">'.$issues.'</a><br />';
if(strlen($source)>0)
$out.='<b>Source Code:</b> <a href="'.$source.'">'.$source.'</a><br />'; function get_app($query_vars) {
if($donate && strlen($donate)>0)
$out.='<b>Donate:</b> <a href="'.$donate.'">'.$donate.'</a><br />'; $xml = simplexml_load_file($this->site_path."/repo/index.xml");
$out.="</p>"; foreach($xml->children() as $app) {
$out.="<h3>Packages</h3>"; $attrs=$app->attributes();
foreach($apks as $apk) { if($attrs['id']==$query_vars['fdid']) {
$out.="<p><b>Version ".$apk['version']."</b> - "; $apks=array();;
$out.='<a href="http://f-droid.org/repo/'.$apk['apkname'].'">download</a> '; foreach($app->children() as $el) {
$out.=$apk['size']." bytes"; switch($el->getName()) {
if($apk['srcname']) case "name":
$out.='<br><a href="http://f-droid.org/repo/'.$apk['srcname'].'">source tarball</a>'; $name=$el;
$out.="</p>"; break;
} case "icon":
$icon=$el;
$out.='<hr><p><a href="'.makelink($query_vars,array('fdid'=>null)).'">Index</a></p>'; break;
case "summary":
return $out; $summary=$el;
} break;
} case "description":
return "<p>Application not found</p>"; $desc=$el;
} break;
case "license":
$license=$el;
function get_apps($query_vars) { break;
case "source":
$xml = simplexml_load_file($this->site_path."/repo/index.xml"); $source=$el;
$matches = $this->show_apps($xml,$query_vars,$numpages); break;
case "tracker":
$out=''; $issues=$el;
break;
if(($query_vars['fdfilter']===null || $query_vars['fdfilter']!='') && $numpages>0) case "donate":
{ $donate=$el;
$out.='<div style="float:left;">'; break;
if($query_vars['fdfilter']===null) case "web":
$out.="All applications"; $web=$el;
else break;
$out.='Applications matching "'.$query_vars['fdfilter'].'"'; case "package":
$out.="</div>"; $thisapk=array();
foreach($el->children() as $pel) {
$out.='<div style="float:right;">'; switch($pel->getName()) {
$out.='<a href="'.makelink($query_vars, array('fdstyle'=>'list','fdpage'=>'1')).'">List</a> | '; case "version":
$out.='<a href="'.makelink($query_vars, array('fdstyle'=>'grid','fdpage'=>'1')).'">Grid</a>'; $thisapk['version']=$pel;
$out.='</div>'; break;
case "vercode":
$out.='<br break="all"/>'; $thisapk['vercode']=$pel;
} break;
case "apkname":
if($numpages>0) { $thisapk['apkname']=$pel;
$out.=$matches; break;
case "srcname":
$out.='<hr><p>'; $thisapk['srcname']=$pel;
if($query_vars['fdpage']==1) { break;
$out.="&lt;&lt;first "; case "hash":
$out.="&lt;prev "; $thisapk['hash']=$pel;
} else { break;
$out.='<a href="'.makelink($query_vars, array('fdpage'=>1)).'">&lt;&lt;first</a> '; case "size":
$out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']-1))).'">&lt;&lt;prev</a> '; $thisapk['size']=$pel;
} break;
$out.=' Page '.$query_vars['fdpage'].' of '.$numpages.' '; case "sdkver":
if($query_vars['fdpage']==$numpages) { $thisapk['sdkver']=$pel;
$out.="next&gt; "; break;
$out.="last&gt;&gt; "; case "permissions":
} else { $thisapk['permissions']=$pel;
$out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']+1))).'">next&gt;</a> '; break;
$out.='<a href="'.makelink($query_vars, array('fdpage'=>$numpages)).'">last&gt;&gt;</a> '; }
} }
$out.='</p>'; $apks[]=$thisapk;
} else if($query_vars['fdfilter']!='') {
$out.='<p>No matches</p>'; }
} }
return $out; $out='<div id="appheader">';
} $out.='<div style="float:left;padding-right:10px;"><img src="http://f-droid.org/repo/icons/'.$icon.'" width=48></div>';
$out.='<p><span style="font-size:20px">'.$name."</span>";
$out.="<br>".$summary."</p>";
function show_search($query_vars) { $out.="</div>";
$out=''; $out.="<p>".$desc."</p>";
$out.='<form name="searchform" action="" method="get">';
$out.='<p><input name="fdfilter" type="text" value="'.$query_vars['fdfilter'].'" size="30"> '; $out.="<p><b>License:</b> ".$license."</p>";
$out.='<input type="submit" value="Search"></p>';
$out.="<p>";
$out.='<input type="hidden" name="page_id" value="'.get_query_var('page_id').'">'; if(strlen($web)>0)
foreach($query_vars as $name => $value) { $out.='<b>Website:</b> <a href="'.$web.'">'.$web.'</a><br />';
if($value !== null && $name != 'fdfilter') if(strlen($issues)>0)
$out.='<input type="hidden" name="'.$name.'" value="'.$value.'">'; $out.='<b>Issue Tracker:</b> <a href="'.$issues.'">'.$issues.'</a><br />';
} if(strlen($source)>0)
$out.='<b>Source Code:</b> <a href="'.$source.'">'.$source.'</a><br />';
$out.='</form>'."\n"; if($donate && strlen($donate)>0)
$out.='<b>Donate:</b> <a href="'.$donate.'">'.$donate.'</a><br />';
return $out; $out.="</p>";
}
$out.="<h3>Packages</h3>";
foreach($apks as $apk) {
function show_apps($xml,$query_vars,&$numpages) { $out.="<p><b>Version ".$apk['version']."</b> - ";
$out.='<a href="http://f-droid.org/repo/'.$apk['apkname'].'">download</a> ';
$skipped=0; $out.=$apk['size']." bytes";
$got=0; if($apk['srcname'])
$total=0; $out.='<br><a href="http://f-droid.org/repo/'.$apk['srcname'].'">source tarball</a>';
$out.="</p>";
if($query_vars['fdstyle']=='grid') { }
$outputter = new FDOutGrid();
} else { $out.='<hr><p><a href="'.makelink($query_vars,array('fdid'=>null)).'">Index</a></p>';
$outputter = new FDOutList();
} return $out;
}
$out = ""; }
return "<p>Application not found</p>";
$out.=$outputter->outputStart(); }
foreach($xml->children() as $app) {
function get_apps($query_vars) {
if($app->getName() == 'repo') continue;
$appinfo['attrs']=$app->attributes(); $xml = simplexml_load_file($this->site_path."/repo/index.xml");
$appinfo['id']=$appinfo['attrs']['id']; $matches = $this->show_apps($xml,$query_vars,$numpages);
foreach($app->children() as $el) {
switch($el->getName()) { $out='';
case "name":
$appinfo['name']=$el; if(($query_vars['fdfilter']===null || $query_vars['fdfilter']!='') && $numpages>0)
break; {
case "icon": $out.='<div style="float:left;">';
$appinfo['icon']=$el; if($query_vars['fdfilter']===null)
break; $out.="All applications";
case "summary": else
$appinfo['summary']=$el; $out.='Applications matching "'.$query_vars['fdfilter'].'"';
break; $out.="</div>";
case "license":
$appinfo['license']=$el; $out.='<div style="float:right;">';
break; $out.='<a href="'.makelink($query_vars, array('fdstyle'=>'list','fdpage'=>'1')).'">List</a> | ';
} $out.='<a href="'.makelink($query_vars, array('fdstyle'=>'grid','fdpage'=>'1')).'">Grid</a>';
} $out.='</div>';
if($query_vars['fdfilter']===null || $query_vars['fdfilter']!='' && (stristr($appinfo['name'],$query_vars['fdfilter']) || stristr($appinfo['summary'],$query_vars['fdfilter']))) { $out.='<br break="all"/>';
if($skipped<($query_vars['fdpage']-1)*$outputter->perpage) { }
$skipped++;
} else if($got<$outputter->perpage) { if($numpages>0) {
$out.=$outputter->outputEntry($query_vars, $appinfo); $out.=$matches;
$got++;
} $out.='<hr><p>';
$total++; if($query_vars['fdpage']==1) {
} $out.="&lt;&lt;first ";
} $out.="&lt;prev ";
} else {
$out.=$outputter->outputEnd(); $out.='<a href="'.makelink($query_vars, array('fdpage'=>1)).'">&lt;&lt;first</a> ';
$out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']-1))).'">&lt;&lt;prev</a> ';
$numpages = ceil((float)$total/$outputter->perpage); }
$out.=' Page '.$query_vars['fdpage'].' of '.$numpages.' ';
return $out; if($query_vars['fdpage']==$numpages) {
} $out.="next&gt; ";
} $out.="last&gt;&gt; ";
} else {
// Class to output app entries in a detailed list format $out.='<a href="'.makelink($query_vars, array('fdpage'=>($query_vars['fdpage']+1))).'">next&gt;</a> ';
class FDOutList $out.='<a href="'.makelink($query_vars, array('fdpage'=>$numpages)).'">last&gt;&gt;</a> ';
{ }
var $perpage=30; $out.='</p>';
} else if($query_vars['fdfilter']!='') {
function FDOutList() { $out.='<p>No matches</p>';
} }
function outputStart() { return $out;
return ''; }
}
function outputEntry($query_vars, $appinfo) { function show_search($query_vars) {
$out="";
$out.="<hr>\n"; $out='';
$out.='<div id="appheader">'; $out.='<form name="searchform" action="" method="get">';
$out.='<p><input name="fdfilter" type="text" value="'.$query_vars['fdfilter'].'" size="30"> ';
$out.='<div style="float:left;padding-right:10px;"><img src="http://f-droid.org/repo/icons/'.$appinfo['icon'].'" style="width:48px;"></div>'; $out.='<input type="submit" value="Search"></p>';
$out.='<div style="float:right;">'; $out.='<input type="hidden" name="page_id" value="'.get_query_var('page_id').'">';
$out.='<p><a href="'; foreach($query_vars as $name => $value) {
$out.=makelink($query_vars, array('fdid'=>$appinfo['id'])); if($value !== null && $name != 'fdfilter')
$out.='">Details...</a>'; $out.='<input type="hidden" name="'.$name.'" value="'.$value.'">';
$out.="</p>"; }
$out.="</div>\n";
$out.='</form>'."\n";
$out.='<p><span style="font-size:20px">'.$appinfo['name']."</span>";
$out.="<br>".$appinfo['summary']."</p>\n"; return $out;
}
$out.="</div>\n";
return $out; function show_apps($xml,$query_vars,&$numpages) {
}
$skipped=0;
function outputEnd() { $got=0;
return ''; $total=0;
}
} if($query_vars['fdstyle']=='grid') {
$outputter = new FDOutGrid();
// Class to output app entries in a compact grid format } else {
class FDOutGrid $outputter = new FDOutList();
{ }
var $perpage=80;
$out = "";
var $itemCount = 0;
$out.=$outputter->outputStart();
function FDOutGrid() {
} foreach($xml->children() as $app) {
function outputStart() { if($app->getName() == 'repo') continue;
return "\n".'<table border="0" width="100%"><tr>'."\n"; $appinfo['attrs']=$app->attributes();
} $appinfo['id']=$appinfo['attrs']['id'];
foreach($app->children() as $el) {
function outputEntry($query_vars, $appinfo) { switch($el->getName()) {
$link=makelink($query_vars, array('fdid'=>$appinfo['id'])); case "name":
$appinfo['name']=$el;
$out=''; break;
case "icon":
if($this->itemCount%4 == 0 && $this->itemCount > 0) $appinfo['icon']=$el;
{ break;
$out.='</tr><tr>'."\n"; case "summary":
} $appinfo['summary']=$el;
break;
$out.='<td align="center" valign="top" style="background-color:#F8F8F8;">'; case "license":
$out.='<p>'; $appinfo['license']=$el;
$out.='<div id="appheader" style="text-align:center;width:110px;">'; break;
}
$out.='<a href="'.$link.'" style="border-bottom-style:none;">'; }
$out.='<img src="http://f-droid.org/repo/icons/'.$appinfo['icon'].'" style="width:48px;border-width:0;padding-top:5px;padding-bottom:5px;"><br/>';
$out.=$appinfo['name'].'<br/>'; if($query_vars['fdfilter']===null || $query_vars['fdfilter']!='' && (stristr($appinfo['name'],$query_vars['fdfilter']) || stristr($appinfo['summary'],$query_vars['fdfilter']))) {
$out.='</a>'; if($skipped<($query_vars['fdpage']-1)*$outputter->perpage) {
$skipped++;
$out.="</div>"; } else if($got<$outputter->perpage) {
$out.='</p>'; $out.=$outputter->outputEntry($query_vars, $appinfo);
$out.="</td>\n"; $got++;
}
$this->itemCount++; $total++;
return $out; }
} }
function outputEnd() { $out.=$outputter->outputEnd();
return '</tr></table>'."\n";
} $numpages = ceil((float)$total/$outputter->perpage);
}
return $out;
// Make a link to this page, with the current query vars attached and desired params added/modified }
function makelink($query_vars, $params=array()) { }
$link=get_permalink();
$vars=linkify(array_merge($query_vars, $params)); // Class to output app entries in a detailed list format
if(strlen($vars)==0) class FDOutList
return $link; {
if(strpos($link,'?')===false) var $perpage=30;
$link.='?';
else function FDOutList() {
$link.='&'; }
return $link.$vars;
} function outputStart() {
return '';
// Return the key value pairs in http-get-parameter format as a string }
function linkify($vars) {
$retvar = ''; function outputEntry($query_vars, $appinfo) {
foreach($vars as $k => $v) { $out="";
if($k!==null && $v!==null && $v!='') $out.="<hr>\n";
$retvar .= $k.'='.$v.'&'; $out.='<div id="appheader">';
}
return substr($retvar,0,-1); $out.='<div style="float:left;padding-right:10px;"><img src="http://f-droid.org/repo/icons/'.$appinfo['icon'].'" style="width:48px;"></div>';
}
$out.='<div style="float:right;">';
$out.='<p><a href="';
$wp_fdroid = new FDroid(); $out.=makelink($query_vars, array('fdid'=>$appinfo['id']));
$out.='">Details...</a>';
$out.="</p>";
?> $out.="</div>\n";
$out.='<p><span style="font-size:20px">'.$appinfo['name']."</span>";
$out.="<br>".$appinfo['summary']."</p>\n";
$out.="</div>\n";
return $out;
}
function outputEnd() {
return '';
}
}
// Class to output app entries in a compact grid format
class FDOutGrid
{
var $perpage=80;
var $itemCount = 0;
function FDOutGrid() {
}
function outputStart() {
return "\n".'<table border="0" width="100%"><tr>'."\n";
}
function outputEntry($query_vars, $appinfo) {
$link=makelink($query_vars, array('fdid'=>$appinfo['id']));
$out='';
if($this->itemCount%4 == 0 && $this->itemCount > 0)
{
$out.='</tr><tr>'."\n";
}
$out.='<td align="center" valign="top" style="background-color:#F8F8F8;">';
$out.='<p>';
$out.='<div id="appheader" style="text-align:center;width:110px;">';
$out.='<a href="'.$link.'" style="border-bottom-style:none;">';
$out.='<img src="http://f-droid.org/repo/icons/'.$appinfo['icon'].'" style="width:48px;border-width:0;padding-top:5px;padding-bottom:5px;"><br/>';
$out.=$appinfo['name'].'<br/>';
$out.='</a>';
$out.="</div>";
$out.='</p>';
$out.="</td>\n";
$this->itemCount++;
return $out;
}
function outputEnd() {
return '</tr></table>'."\n";
}
}
// Make a link to this page, with the current query vars attached and desired params added/modified
function makelink($query_vars, $params=array()) {
$link=get_permalink();
$vars=linkify(array_merge($query_vars, $params));
if(strlen($vars)==0)
return $link;
if(strpos($link,'?')===false)
$link.='?';
else
$link.='&';
return $link.$vars;
}
// Return the key value pairs in http-get-parameter format as a string
function linkify($vars) {
$retvar = '';
foreach($vars as $k => $v) {
if($k!==null && $v!==null && $v!='')
$retvar .= $k.'='.$v.'&';
}
return substr($retvar,0,-1);
}
$wp_fdroid = new FDroid();
?>