diff --git a/include/datetime.php b/include/datetime.php index 779c7a5aad..8d4961cd7c 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -571,6 +571,17 @@ function update_contact_birthdays() { * */ + // Check for duplicates + $s = q("SELECT `id` FROM `event` WHERE `uid` = %d AND `cid` = %d AND `start` = '%s' AND `type` = '%s' LIMIT 1", + intval($rr['uid']), + intval($rr['id']), + dbesc(datetime_convert('UTC','UTC', $nextbd)), + dbesc('birthday')); + + if (dbm::is_result($s)) { + continue; + } + $bdtext = sprintf( t('%s\'s birthday'), $rr['name']); $bdtext2 = sprintf( t('Happy Birthday %s'), ' [url=' . $rr['url'] . ']' . $rr['name'] . '[/url]') ; diff --git a/include/dfrn.php b/include/dfrn.php index ccb43fa98e..e9bdaec664 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -1105,12 +1105,22 @@ class dfrn { */ private function birthday_event($contact, $birthday) { + // Check for duplicates + $r = q("SELECT `id` FROM `event` WHERE `uid` = %d AND `cid` = %d AND `start` = '%s' AND `type` = '%s' LIMIT 1", + intval($contact["uid"]), + intval($contact["id"]), + dbesc(datetime_convert("UTC","UTC", $birthday)), + dbesc("birthday")); + + if (dbm::is_result($r)) { + return; + } + logger("updating birthday: ".$birthday." for contact ".$contact["id"]); $bdtext = sprintf(t("%s\'s birthday"), $contact["name"]); $bdtext2 = sprintf(t("Happy Birthday %s"), " [url=".$contact["url"]."]".$contact["name"]."[/url]") ; - $r = q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`summary`,`desc`,`type`) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s') ", intval($contact["uid"]), diff --git a/include/event.php b/include/event.php index 785558bedd..7b380b1c78 100644 --- a/include/event.php +++ b/include/event.php @@ -493,6 +493,25 @@ function get_event_strings() { return $i18n; } +/** + * @brief Removes duplicated birthday events + * + * @param array $dates Array of possibly duplicated events + * @return array Cleaned events + */ +function event_remove_duplicates($dates) { + $dates2 = array(); + + foreach ($dates AS $date) { + if ($date['type'] == 'birthday') { + $dates2[$date['uid']."-".$date['cid']."-".$date['start']] = $date; + } else { + $dates2[] = $date; + } + } + return $dates2; +} + /** * @brief Get an event by its event ID * @@ -516,9 +535,9 @@ function event_by_id($owner_uid = 0, $event_params, $sql_extra = '') { intval($event_params["event_id"]) ); - if (dbm::is_result($r)) - return $r; - + if (dbm::is_result($r)) { + return event_remove_duplicates($r); + } } /** @@ -558,8 +577,9 @@ function events_by_date($owner_uid = 0, $event_params, $sql_extra = '') { dbesc($event_params["adjust_finish"]) ); - if (dbm::is_result($r)) - return $r; + if (dbm::is_result($r)) { + return event_remove_duplicates($r); + } } /** @@ -568,7 +588,7 @@ function events_by_date($owner_uid = 0, $event_params, $sql_extra = '') { * @param array $arr Event query array * @return array Event array for the template */ -function process_events ($arr) { +function process_events($arr) { $events=array(); $last_date = '';