From 0d9ed4873801a669ff9530a5fa434252a1be2a57 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 6 Feb 2011 22:41:07 -0800 Subject: [PATCH] functionise birthday --- boot.php | 43 +++++++++++++++++++++++++++++++++++++++++++ include/items.php | 39 +-------------------------------------- include/notifier.php | 8 ++++++-- 3 files changed, 50 insertions(+), 40 deletions(-) diff --git a/boot.php b/boot.php index 5327688dd..4dcd6db66 100644 --- a/boot.php +++ b/boot.php @@ -2323,3 +2323,46 @@ function current_theme_url() { }} +if(! function_exists('feed_birthday')) { +function feed_birthday($uid,$tz) { + + /** + * + * Determine the next birthday, but only if the birthday is published + * in the default profile. We _could_ also look for a private profile that the + * recipient can see, but somebody could get mad at us if they start getting + * public birthday greetings when they haven't made this info public. + * + * Assuming we are able to publish this info, we are then going to convert + * the start time from the owner's timezone to UTC. + * + * This will potentially solve the problem found with some social networks + * where birthdays are converted to the viewer's timezone and salutations from + * elsewhere in the world show up on the wrong day. We will convert it to the + * viewer's timezone also, but first we are going to convert it from the birthday + * person's timezone to GMT - so the viewer may find the birthday starting at + * 6:00PM the day before, but that will correspond to midnight to the birthday person. + * + */ + + $birthday = ''; + + $p = q("SELECT `dob` FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1", + intval($uid) + ); + + if($p && count($p)) { + $tmp_dob = substr($p[0]['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,ATOM_TIME); + } + } + + return $birthday; +}} \ No newline at end of file diff --git a/include/items.php b/include/items.php index 15fd262f4..5b99ca171 100644 --- a/include/items.php +++ b/include/items.php @@ -37,44 +37,7 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) else killme(); - - /** - * - * Determine the next birthday, but only if the birthday is published - * in the default profile. We _could_ also look for a private profile that the - * recipient can see, but somebody could get mad at us if they start getting - * public birthday greetings when they haven't made this info public. - * - * Assuming we are able to publish this info, we are then going to convert - * the start time from the owner's timezone to UTC. - * - * This will potentially solve the problem found with some social networks - * where birthdays are converted to the viewer's timezone and salutations from - * elsewhere in the world show up on the wrong day. We will convert it to the - * viewer's timezone also, but first we are going to convert it from the birthday - * person's timezone to GMT - so the viewer may find the birthday starting at - * 6:00PM the day before, but that will correspond to midnight to the birthday person. - * - */ - - $birthday = ''; - - $p = q("SELECT `dob` FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1", - intval($owner_id) - ); - - if($p && count($p)) { - $tmp_dob = substr($p[0]['dob'],5); - if(intval($tmp_dob)) { - $y = datetime_convert($owner_tz,$owner_tz,'now','Y'); - $bd = $y . '-' . $tmp_dob . ' 00:00'; - $t_dob = strtotime($bd); - $now = strtotime(datetime_convert($owner_tz,$owner_tz,'now')); - if($t_dob < $now) - $bd = $y + 1 . '-' . $tmp_dob . ' 00:00'; - $birthday = datetime_convert($owner_tz,'UTC',$bd,ATOM_TIME); - } - } + $birthday = feed_birthday($owner_id,$owner_tz); if($dfrn_id && $dfrn_id != '*') { diff --git a/include/notifier.php b/include/notifier.php index 07bde7c4d..ca0aa0df3 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -87,7 +87,7 @@ function notifier_run($argv, $argc){ } } - $r = q("SELECT `contact`.*, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, `user`.`page-flags` + $r = q("SELECT `contact`.*, `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, `user`.`page-flags` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1", intval($uid) @@ -194,6 +194,10 @@ function notifier_run($argv, $argc){ } } + $birthday = feed_birthday($owner['uid'],$owner['timezone']); + if($birthday) + $birthday = '' . xmlify($birthday) . ''; + $atom .= replace_macros($feed_template, array( '$version' => xmlify(FRIENDIKA_VERSION), '$feed_id' => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ), @@ -208,7 +212,7 @@ function notifier_run($argv, $argc){ '$picdate' => xmlify(datetime_convert('UTC','UTC',$owner['avatar-date'] . '+00:00' , ATOM_TIME)) , '$uridate' => xmlify(datetime_convert('UTC','UTC',$owner['uri-date'] . '+00:00' , ATOM_TIME)) , '$namdate' => xmlify(datetime_convert('UTC','UTC',$owner['name-date'] . '+00:00' , ATOM_TIME)) , - '$birthday' => '' + '$birthday' => $birthday )); if($cmd === 'mail') {