aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2013-09-19 19:50:13 -0700
committerfriendica <info@friendica.com>2013-09-19 19:50:13 -0700
commit54abed8457c504e69e3d139238d2ff09b0ec6cc8 (patch)
treeac20175cdf23219c3d307d99fd37af00c802edb2
parent9f237f7dba8f41fc243225d556a47164ee155635 (diff)
downloadvolse-hubzilla-54abed8457c504e69e3d139238d2ff09b0ec6cc8.tar.gz
volse-hubzilla-54abed8457c504e69e3d139238d2ff09b0ec6cc8.tar.bz2
volse-hubzilla-54abed8457c504e69e3d139238d2ff09b0ec6cc8.zip
provide a "safe search" backend and allow for self-censorship using nsfw or adult profile keywords. Eventually the directories will be forced to mark adult profiles and sync this knowledge between them. At the moment there's no way to do an unsafe search, but we really just need a checkbox and pass the value through directory to dirsearch on the back end, and some will want this as a pconfig.
-rwxr-xr-xboot.php2
-rwxr-xr-xinclude/text.php6
-rw-r--r--include/zot.php10
-rw-r--r--mod/dirsearch.php8
4 files changed, 23 insertions, 3 deletions
diff --git a/boot.php b/boot.php
index 632394cb6..29c8eedaf 100755
--- a/boot.php
+++ b/boot.php
@@ -347,7 +347,7 @@ define ( 'HUBLOC_FLAGS_DELETED', 0x1000);
define ( 'XCHAN_FLAGS_HIDDEN', 0x0001);
define ( 'XCHAN_FLAGS_ORPHAN', 0x0002);
-
+define ( 'XCHAN_FLAGS_CENSORED', 0x0004);
/*
* Traficlights for Administration of HubLoc
diff --git a/include/text.php b/include/text.php
index e1f0a4e00..40df8bd89 100755
--- a/include/text.php
+++ b/include/text.php
@@ -1848,3 +1848,9 @@ function design_tools() {
}
+/* case insensitive in_array() */
+
+function in_arrayi($needle, $haystack) {
+ return in_array(strtolower($needle), array_map('strtolower', $haystack));
+}
+
diff --git a/include/zot.php b/include/zot.php
index c0b53bdc1..3929fa4c1 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -1404,6 +1404,16 @@ function import_directory_profile($hash,$profile) {
$arr['xprof_keywords'] = implode(' ',$clean);
+ // Self censored, make it so
+ // These are not translated, so the German "erwachsenen" keyword will not censor the directory profile. Only the English form - "adult".
+
+ if(in_arrayi('nsfw',$clean) || in_arrayi('adult',$clean)) {
+ q("update xchan set xchan_flags = (xchan_flags | %d) where xchan_hash = '%s' limit 1",
+ intval(XCHAN_FLAGS_CENSORED)
+ );
+ }
+
+
$r = q("select * from xprof where xprof_hash = '%s' limit 1",
dbesc($hash)
);
diff --git a/mod/dirsearch.php b/mod/dirsearch.php
index a522cd541..a92134942 100644
--- a/mod/dirsearch.php
+++ b/mod/dirsearch.php
@@ -41,6 +41,8 @@ function dirsearch_content(&$a) {
$agege = ((x($_REQUEST,'agege')) ? intval($_REQUEST['agege']) : 0 );
$agele = ((x($_REQUEST,'agele')) ? intval($_REQUEST['agele']) : 0 );
$kw = ((x($_REQUEST,'kw')) ? intval($_REQUEST['kw']) : 0 );
+ // by default use a safe search
+ $safe = ((x($_REQUEST,'safe')) ? intval($_REQUEST['safe']) : 1 );
$sync = ((x($_REQUEST,'sync')) ? datetime_convert('UTC','UTC',$_REQUEST['sync']) : '');
$sort_order = ((x($_REQUEST,'order')) ? $_REQUEST['order'] : '');
@@ -99,12 +101,14 @@ function dirsearch_content(&$a) {
$logic = ((strlen($sql_extra)) ? 0 : 1);
+ $safesql = (($safe) ? " and not ( xchan_flags & " . intval(XCHAN_FLAGS_CENSORED) . " ) " : '');
+
if($limit)
$qlimit = " LIMIT $limit ";
else {
$qlimit = " LIMIT " . intval($startrec) . " , " . intval($perpage);
if($return_total) {
- $r = q("SELECT COUNT(xchan_hash) AS `total` FROM xchan left join xprof on xchan_hash = xprof_hash where $logic $sql_extra and not ( xchan_flags & %d) and not ( xchan_flags & %d ) ",
+ $r = q("SELECT COUNT(xchan_hash) AS `total` FROM xchan left join xprof on xchan_hash = xprof_hash where $logic $sql_extra and not ( xchan_flags & %d) and not ( xchan_flags & %d ) $safesql ",
intval(XCHAN_FLAGS_HIDDEN),
intval(XCHAN_FLAGS_ORPHAN)
);
@@ -135,7 +139,7 @@ function dirsearch_content(&$a) {
}
else {
- $r = q("SELECT xchan.*, xprof.* from xchan left join xprof on xchan_hash = xprof_hash where $logic $sql_extra and not ( xchan_flags & %d ) and not ( xchan_flags & %d ) $order $qlimit ",
+ $r = q("SELECT xchan.*, xprof.* from xchan left join xprof on xchan_hash = xprof_hash where $logic $sql_extra and not ( xchan_flags & %d ) and not ( xchan_flags & %d ) $safesql $order $qlimit ",
intval(XCHAN_FLAGS_HIDDEN),
intval(XCHAN_FLAGS_ORPHAN)
);