aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2012-12-27 23:33:37 -0800
committerfriendica <info@friendica.com>2012-12-27 23:33:37 -0800
commitdda4d689bbdd871f5bd8809ce5381aaee5004d5b (patch)
treeb70722cf3b35db85aa30ce61e902c592583a7b08
parent55e77a57d0ea20844b481ff9b194bdf424857c5e (diff)
downloadvolse-hubzilla-dda4d689bbdd871f5bd8809ce5381aaee5004d5b.tar.gz
volse-hubzilla-dda4d689bbdd871f5bd8809ce5381aaee5004d5b.tar.bz2
volse-hubzilla-dda4d689bbdd871f5bd8809ce5381aaee5004d5b.zip
This was bloody hard to sort out.... but now it's sorted and we can move forward again. Put back xtag for efficient keyword searching, use it in conjunction with xprof['keywords'] to avoid a SQL triple join and group_concat (which simply won't scale on a directory server), figured out how best to work timezone corrected birthdays into the protocol. The directory can even provide an age if one was provided to it. Both of these things need some more work, but we have the mechanisms and a plan how to do it right instead of "how the !@#$ are we going to do pull this off?"
-rw-r--r--boot.php25
-rw-r--r--include/dir_fns.php3
-rw-r--r--include/zot.php42
-rw-r--r--install/database.sql5
-rw-r--r--install/update.php13
-rw-r--r--mod/zfinger.php20
-rw-r--r--version.inc2
7 files changed, 94 insertions, 16 deletions
diff --git a/boot.php b/boot.php
index 01e518535..019cd760b 100644
--- a/boot.php
+++ b/boot.php
@@ -16,7 +16,7 @@ require_once('include/features.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica Red');
define ( 'FRIENDICA_VERSION', trim(file_get_contents('version.inc')) . 'R');
define ( 'ZOT_REVISION', 1 );
-define ( 'DB_UPDATE_VERSION', 1010 );
+define ( 'DB_UPDATE_VERSION', 1011 );
define ( 'EOL', '<br />' . "\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@@ -1722,6 +1722,27 @@ if(! function_exists('current_theme_url')) {
}
}
+function z_birthday($dob,$tz,$format="Y-m-d H:i:s") {
+
+ if(! strlen($tz))
+ $tz = 'UTC';
+
+ $tmp_dob = substr($dob,5);
+ if(intval($tmp_dob)) {
+ $y = datetime_convert($tz,$tz,'now','Y');
+ $bd = $y . '-' . $tmp_dob . ' 00:00';
+ $t_dob = strtotime($bd);
+ $now = strtotime(datetime_convert($tz,$tz,'now'));
+ if($t_dob < $now)
+ $bd = $y + 1 . '-' . $tmp_dob . ' 00:00';
+ $birthday = datetime_convert($tz,'UTC',$bd,$format);
+ }
+
+ return $birthday;
+
+}
+
+
if(! function_exists('feed_birthday')) {
function feed_birthday($uid,$tz) {
@@ -1763,7 +1784,7 @@ if(! function_exists('feed_birthday')) {
$now = strtotime(datetime_convert($tz,$tz,'now'));
if($t_dob < $now)
$bd = $y + 1 . '-' . $tmp_dob . ' 00:00';
- $birthday = datetime_convert($tz,'UTC',$bd,ATOM_TIME);
+ $birthday = datetime_convert($tz,'UTC',$bd,$format);
}
}
diff --git a/include/dir_fns.php b/include/dir_fns.php
index 2c2694782..904d27189 100644
--- a/include/dir_fns.php
+++ b/include/dir_fns.php
@@ -46,6 +46,9 @@ function syncdirs($uid) {
$r = q("delete from xprof where xprof_hash = '%s' limit 1",
dbesc($hash)
);
+ $r = q("delete from xtag where xtag_hash = '%s' limit 1",
+ dbesc($hash)
+ );
}
}
diff --git a/include/zot.php b/include/zot.php
index 0bd575b94..001088f6a 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -313,13 +313,15 @@ function zot_refresh($them,$channel = null) {
$r = q("delete from xprof where xprof_hash = '%s' limit 1",
dbesc($x['hash'])
);
+ $r = q("delete from xtag where xtag_hash = '%s' limit 1",
+ dbesc($x['hash'])
+ );
}
}
}
return true;
}
return false;
-
}
@@ -926,7 +928,9 @@ function process_mail_delivery($sender,$arr,$deliveries) {
}
function process_profile_delivery($sender,$arr,$deliveries) {
- // deliveries is irrelevant
+
+ // deliveries is irrelevant, what to do about birthday notification....?
+
import_directory_profile($sender['hash'],$arr);
}
@@ -950,6 +954,7 @@ function import_directory_profile($hash,$profile) {
$clean = array();
if(array_key_exists('keywords',$profile) and is_array($profile['keywords'])) {
+ import_directory_keywords($hash,$profile['keywords']);
foreach($profile['keywords'] as $kw) {
$kw = trim(htmlentities($kw,ENT_COMPAT,'UTF-8'));
}
@@ -1007,3 +1012,36 @@ function import_directory_profile($hash,$profile) {
return;
}
+function import_directory_keywords($hash,$keywords) {
+
+ $existing = array();
+ $r = q("select * from xtag where xtag_hash = '%s'",
+ dbesc($hash)
+ );
+
+ if($r) {
+ foreach($r as $rr)
+ $existing[] = $rr['xtag_term'];
+ }
+
+ $clean = array();
+ foreach($keywords as $kw) {
+ $kw = trim(htmlentities($kw,ENT_COMPAT,'UTF-8'));
+ $clean[] = $kw;
+ }
+
+ foreach($existing as $x) {
+ if(! in_array($x,$clean))
+ $r = q("delete from xtag where xtag_hash = '%s' and xtag_term = '%s' limit 1",
+ dbesc($hash),
+ dbesc($x)
+ );
+ }
+ foreach($clean as $x) {
+ if(! in_array($x,$existing))
+ $r = q("insert int xtag ( xtag_hash, xtag_term) values ( '%s' ,'%s' )",
+ dbesc($hash),
+ dbesc($x)
+ );
+ }
+} \ No newline at end of file
diff --git a/install/database.sql b/install/database.sql
index 817091df5..02bbb5f0f 100644
--- a/install/database.sql
+++ b/install/database.sql
@@ -17,6 +17,7 @@ CREATE TABLE IF NOT EXISTS `abook` (
`abook_created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`abook_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`abook_connnected` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `abook_dob` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`abook_flags` int(11) NOT NULL DEFAULT '0',
`abook_profile` char(64) NOT NULL DEFAULT '',
PRIMARY KEY (`abook_id`),
@@ -30,7 +31,8 @@ CREATE TABLE IF NOT EXISTS `abook` (
KEY `abook_updated` (`abook_updated`),
KEY `abook_connnected` (`abook_connnected`),
KEY `abook_flags` (`abook_flags`),
- KEY `abook_profile` (`abook_profile`)
+ KEY `abook_profile` (`abook_profile`),
+ KEY `abook_dob` (`abook_dob`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `account` (
@@ -641,6 +643,7 @@ CREATE TABLE IF NOT EXISTS `profile` (
`name` char(255) NOT NULL,
`pdesc` char(255) NOT NULL,
`dob` char(32) NOT NULL DEFAULT '0000-00-00',
+ `dob_tz` char(255) NOT NULL DEFAULT 'UTC',
`address` char(255) NOT NULL,
`locality` char(255) NOT NULL,
`region` char(255) NOT NULL,
diff --git a/install/update.php b/install/update.php
index 4c5e4d3a6..e8f52273e 100644
--- a/install/update.php
+++ b/install/update.php
@@ -1,6 +1,6 @@
<?php
-define( 'UPDATE_VERSION' , 1010 );
+define( 'UPDATE_VERSION' , 1011 );
/**
*
@@ -169,3 +169,14 @@ function update_r1009() {
}
+function update_r1010() {
+ $r = q("ALTER TABLE `abook` ADD `abook_dob` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `abook_connnected` ,
+ADD INDEX ( `abook_dob` )");
+
+ $r2 = q("ALTER TABLE `profile` ADD `dob_tz` CHAR( 255 ) NOT NULL DEFAULT 'UTC' AFTER `dob`");
+
+ if($r && $r2)
+ return UPDATE_SUCCESS;
+ return UPDATE_FAILED;
+}
+
diff --git a/mod/zfinger.php b/mod/zfinger.php
index 72f680c1c..d9fe91765 100644
--- a/mod/zfinger.php
+++ b/mod/zfinger.php
@@ -81,15 +81,17 @@ function zfinger_init(&$a) {
$profile = array();
if($p) {
- $profile['description'] = $p[0]['pdesc'];
- $profile['birthday'] = $p[0]['dob'];
- $profile['gender'] = $p[0]['gender'];
- $profile['marital'] = $p[0]['marital'];
- $profile['sexual'] = $p[0]['sexual'];
- $profile['locale'] = $p[0]['locality'];
- $profile['region'] = $p[0]['region'];
- $profile['postcode'] = $p[0]['postal_code'];
- $profile['country'] = $p[0]['country_name'];
+ $profile['description'] = $p[0]['pdesc'];
+ $profile['birthday'] = $p[0]['dob'];
+ if($profile['birthday'] != '0000-00-00')
+ $profile['next_birthday'] = z_birthday($p[0]['dob'],$e['channel_timezone']);
+ $profile['gender'] = $p[0]['gender'];
+ $profile['marital'] = $p[0]['marital'];
+ $profile['sexual'] = $p[0]['sexual'];
+ $profile['locale'] = $p[0]['locality'];
+ $profile['region'] = $p[0]['region'];
+ $profile['postcode'] = $p[0]['postal_code'];
+ $profile['country'] = $p[0]['country_name'];
if($p[0]['keywords']) {
$tags = array();
$k = explode(' ',$p[0]['keywords']);
diff --git a/version.inc b/version.inc
index a5ce5d4da..2851cd0e4 100644
--- a/version.inc
+++ b/version.inc
@@ -1 +1 @@
-2012-12-26.181
+2012-12-27.182