diff --git a/boot.php b/boot.php
index 376def64d2..2f2a2127f6 100644
--- a/boot.php
+++ b/boot.php
@@ -10,7 +10,7 @@ require_once('include/nav.php');
define ( 'FRIENDIKA_PLATFORM', 'Free Friendika');
define ( 'FRIENDIKA_VERSION', '2.3.1133' );
define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
-define ( 'DB_UPDATE_VERSION', 1095 );
+define ( 'DB_UPDATE_VERSION', 1096 );
define ( 'EOL', "
\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@@ -974,6 +974,7 @@ function get_birthdays() {
return $o;
$bd_format = t('g A l F d') ; // 8 AM Friday January 18
+ $bd_short = t('F d');
$r = q("SELECT `event`.*, `event`.`id` AS `eid`, `contact`.* FROM `event`
LEFT JOIN `contact` ON `contact`.`id` = `event`.`cid`
@@ -993,7 +994,7 @@ function get_birthdays() {
if($total) {
$o .= '
' . t('Birthday Reminders') . ' ' . '(' . $total . ')' . '
';
$o .= '' . t('Birthdays this week:') . '
';
- $o .= '
' . t("\x28Adjusted for local time\x29") . '
';
+// $o .= '
' . t("\x28Adjusted for local time\x29") . '
';
$o .= '
';
foreach($r as $rr) {
@@ -1001,10 +1002,16 @@ function get_birthdays() {
continue;
$now = strtotime('now');
$today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false);
+ $sparkle = '';
+ $url = $rr['url'];
+ if($rr['network'] === NETWORK_DFRN) {
+ $sparkle = " sparkle";
+ $url = $a->get_baseurl() . '/redir/' . $rr['cid'];
+ }
- $o .= '
' . $rr['name'] . ' '
- . day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '')
+ $o .= '
' . $rr['name'] . ' '
+ . day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : '')
. '
' ;
}
$o .= '
';
diff --git a/database.sql b/database.sql
index ed92aa4c19..2b9be34e06 100644
--- a/database.sql
+++ b/database.sql
@@ -96,6 +96,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
`info` mediumtext NOT NULL,
`profile-id` int(11) NOT NULL DEFAULT '0',
`bdyear` CHAR( 4 ) NOT NULL COMMENT 'birthday notify flag',
+ `bd` date NOT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
KEY `self` (`self`),
diff --git a/include/datetime.php b/include/datetime.php
index 3033b88afc..087e6cb20d 100644
--- a/include/datetime.php
+++ b/include/datetime.php
@@ -393,3 +393,57 @@ function cal($y = 0,$m = 0, $links = false, $class='') {
return $o;
}}
+
+
+function update_contact_birthdays() {
+
+ // This only handles foreign or alien networks where a birthday has been provided.
+ // In-network birthdays are handled within local_delivery
+
+ $r = q("SELECT * FROM contact WHERE `bd` != '' AND `bd` != '0000-00-00' AND SUBSTRING(`bd`,1,4) != `bdyear` ");
+ if(count($r)) {
+ foreach($r as $rr) {
+
+ logger('update_contact_birthday: ' . $rr['bd']);
+
+ $nextbd = datetime_convert('UTC','UTC','now','Y') . substr($rr['bd'],4);
+
+ /**
+ *
+ * Add new birthday event for this person
+ *
+ * $bdtext is just a readable placeholder in case the event is shared
+ * with others. We will replace it during presentation to our $importer
+ * to contain a sparkle link and perhaps a photo.
+ *
+ */
+
+ $bdtext = t('Birthday:') . ' [url=' . $rr['url'] . ']' . $rr['name'] . '[/url]' ;
+
+
+ $r = q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`desc`,`type`,`adjust`)
+ VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%d' ) ",
+ intval($rr['uid']),
+ intval($rr['id']),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert('UTC','UTC', $nextbd)),
+ dbesc(datetime_convert('UTC','UTC', $nextbd . ' + 1 day ')),
+ dbesc($bdtext),
+ dbesc('birthday'),
+ intval(0)
+ );
+
+
+ // update bdyear
+
+ q("UPDATE `contact` SET `bdyear` = '%s', `bd` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
+ dbesc(substr($nextbd,0,4)),
+ dbesc($nextbd),
+ intval($rr['uid']),
+ intval($rr['id'])
+ );
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/include/diaspora.php b/include/diaspora.php
index 7207daf0cd..2d9e2883d1 100644
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -1024,9 +1024,11 @@ function diaspora_profile($importer,$xml) {
$images = import_profile_photo($image_url,$importer['uid'],$contact['id']);
- // TODO handle birthdays - even though we don't know the original timezone (grrr.)
+ // Generic birthday. We don't know the timezone. The year is irrelevant.
- $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ $birthday = datetime_convert('UTC','UTC',$birthday,'Y-m-d');
+
+ $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
dbesc($name),
dbesc(datetime_convert()),
dbesc($images[0]),
@@ -1034,7 +1036,8 @@ function diaspora_profile($importer,$xml) {
dbesc($images[2]),
dbesc(datetime_convert()),
intval($contact['id']),
- intval($importer['uid'])
+ intval($importer['uid']),
+ dbesc($birthday)
);
if($r) {
if($oldphotos) {
diff --git a/include/poller.php b/include/poller.php
index 427f8887ce..cef0647b59 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -50,12 +50,15 @@ function poller_run($argv, $argc){
- // once daily run expire in background
+ // once daily run birthday_updates and then expire in background
$d1 = get_config('system','last_expire_day');
$d2 = intval(datetime_convert('UTC','UTC','now','d'));
if($d2 != intval($d1)) {
+
+ update_contact_birthdays();
+
set_config('system','last_expire_day',$d2);
proc_run('php','include/expire.php');
}
diff --git a/update.php b/update.php
index 5d5190095c..06bbb8b41f 100644
--- a/update.php
+++ b/update.php
@@ -1,6 +1,6 @@