$ git clone https://thingshare.ion.nu/thingshare.git
commit c85141c35a0900f6e4c1384ce78b5e4a572cfce6
Author: Alicia <...>
Date: Mon Nov 9 21:48:09 2020 +0100
Support for filtering tags on the admin level.
diff --git a/admin_federation.php b/admin_federation.php
index 2f7cbc1..5672d9c 100644
--- a/admin_federation.php
+++ b/admin_federation.php
@@ -74,6 +74,17 @@ if(checknonce()) // Save changes
mysqli_query($db, 'insert into peers(domain, blacklist) values("'.$peer.'", 0)');
}
}
+ if(isset($_POST['addfilter']))
+ {
+ $filter=mysqli_real_escape_string($db, $_POST['newfilter']);
+ mysqli_query($db, 'delete from filtertags where tag="'.$filter.'"');
+ mysqli_query($db, 'insert into filtertags(tag) values("'.$filter.'")');
+ }
+ if(isset($_POST['deletefilter']))
+ {
+ $filter=mysqli_real_escape_string($db, $_POST['deletefilter']);
+ mysqli_query($db, 'delete from filtertags where tag="'.$filter.'"');
+ }
}
if($error!=''){$error='<span class="error">'.$error.'</span>';}
@@ -86,6 +97,13 @@ while($row=mysqli_fetch_assoc($res))
if($row['blacklist']){$domain='<span class="blacklist">'.$domain.'</span>';}
$peers.=$domain.'<button name="deletepeer" value="'.htmlentities($row['domain']).'">X</button><br />';
}
+$filters='';
+$res=mysqli_query($db, 'select tag from filtertags');
+while($row=mysqli_fetch_assoc($res))
+{
+ $tag=htmlentities($row['tag']);
+ $filters.='<span class="blacklist">'.$tag.'</span><button name="deletefilter" value="'.$tag.'">X</button><br />';
+}
$autofollowcheck=(getoption('autofollow')?' checked':'');
?>
<?=$error?>
@@ -95,8 +113,18 @@ $autofollowcheck=(getoption('autofollow')?' checked':'');
<input type="submit" name="options" value="<?=_('Save')?>" />
</form>
<form method="post"><?=nonce()?>
-<h2><?=_('Peers')?></h2>
-<?=$peers?>
+ <h2><?=_('Peers')?></h2>
+ <?=$peers?>
+</form>
+<form method="post"><?=nonce()?>
<input type="text" name="newpeer" placeholder="<?=_('domain.tld')?>" /><button name="addpeer"><?=_('Add peer')?></button><button name="blacklistpeer" title="<?=_('Don\'t autofollow this peer')?>"><?=_('Add peer to blacklist')?></button><br />
<button name="action" value="addindirectpeers"><?=_('Add indirect peers')?></button>
</form>
+<form method="post"><?=nonce()?>
+ <h2><?=_('Filters')?></h2>
+ <?=_('Peers\' things with these tags will not be shown in search results on this instance')?><br />
+ <?=$filters?>
+</form>
+<form method="post"><?=nonce()?>
+ <input type="text" name="newfilter" placeholder="<?=_('Tag to filter')?>" /><button name="addfilter"><?=_('Add filter')?></button><br />
+</form>
diff --git a/db.php b/db.php
index 22e7d16..345f8b2 100644
--- a/db.php
+++ b/db.php
@@ -129,6 +129,7 @@ function db_create_tables()
message text,
sent datetime,
removed boolean);');
+ mysqli_query($db, 'create table filtertags(tag text);');
}
function db_getuser($id)
diff --git a/search.php b/search.php
index 373c751..007e7fd 100644
--- a/search.php
+++ b/search.php
@@ -24,13 +24,18 @@ include_once('rpc.php');
$peers=Array(DOMAIN);
$res=mysqli_query($db, 'select domain from peers where !blacklist');
while($row=mysqli_fetch_row($res)){$peers[]=$row[0];}
+// Get list of tags to filter out
+$filtertags='';
+$res=mysqli_query($db, 'select tag from filtertags');
+while($row=mysqli_fetch_row($res)){$filtertags.=' tag:-'.$row[0];}
+// Pagination
$perpage=(isset($_GET['perpage'])?(int)$_GET['perpage']:20);
$page=(int)(isset($_GET['page'])?$_GET['page']:0);
$perpeer=round($perpage/count($peers));
$sortby=(isset($_GET['sort'])?$_GET['sort']:'new');
if($path[1]=='browse'){$sortby=$path[2];} // Handle 'Browse' links
else if($path[1]=='tag'){$_GET['q']='tag:'.$path[2];} // Handle 'Tag' links
-$res=rpc_search($peers, 'search/'.urlencode($_GET['q']).'/'.urlencode($sortby).'/'.$perpeer.'/'.($page*$perpage));
+$res=rpc_search($peers, 'search/'.urlencode($_GET['q'].$filtertags).'/'.urlencode($sortby).'/'.$perpeer.'/'.($page*$perpage));
// Construct navigation links for pages
$pagefull=false;
foreach($res as $r){if(count($r)==$perpeer){$pagefull=true;}}