diff --git a/src/Model/Event.php b/src/Model/Event.php
index 7356382871..886f124153 100644
--- a/src/Model/Event.php
+++ b/src/Model/Event.php
@@ -322,43 +322,48 @@ class Event extends BaseObject
// New event. Store it.
DBA::insert('event', $event);
- $event['id'] = DBA::lastInsertId();
+ $item_id = 0;
- $item_arr = [];
+ // Don't create an item for birthday events
+ if ($event['type'] == 'event') {
+ $event['id'] = DBA::lastInsertId();
- $item_arr['uid'] = $event['uid'];
- $item_arr['contact-id'] = $event['cid'];
- $item_arr['uri'] = $event['uri'];
- $item_arr['parent-uri'] = $event['uri'];
- $item_arr['guid'] = $event['guid'];
- $item_arr['plink'] = defaults($arr, 'plink', '');
- $item_arr['post-type'] = Item::PT_EVENT;
- $item_arr['wall'] = $event['cid'] ? 0 : 1;
- $item_arr['contact-id'] = $contact['id'];
- $item_arr['owner-name'] = $contact['name'];
- $item_arr['owner-link'] = $contact['url'];
- $item_arr['owner-avatar'] = $contact['thumb'];
- $item_arr['author-name'] = $contact['name'];
- $item_arr['author-link'] = $contact['url'];
- $item_arr['author-avatar'] = $contact['thumb'];
- $item_arr['title'] = '';
- $item_arr['allow_cid'] = $event['allow_cid'];
- $item_arr['allow_gid'] = $event['allow_gid'];
- $item_arr['deny_cid'] = $event['deny_cid'];
- $item_arr['deny_gid'] = $event['deny_gid'];
- $item_arr['private'] = $private;
- $item_arr['visible'] = 1;
- $item_arr['verb'] = ACTIVITY_POST;
- $item_arr['object-type'] = ACTIVITY_OBJ_EVENT;
- $item_arr['origin'] = $event['cid'] === 0 ? 1 : 0;
- $item_arr['body'] = self::getBBCode($event);
- $item_arr['event-id'] = $event['id'];
+ $item_arr = [];
- $item_arr['object'] = '' . "\n";
+ $item_arr['uid'] = $event['uid'];
+ $item_arr['contact-id'] = $event['cid'];
+ $item_arr['uri'] = $event['uri'];
+ $item_arr['parent-uri'] = $event['uri'];
+ $item_arr['guid'] = $event['guid'];
+ $item_arr['plink'] = defaults($arr, 'plink', '');
+ $item_arr['post-type'] = Item::PT_EVENT;
+ $item_arr['wall'] = $event['cid'] ? 0 : 1;
+ $item_arr['contact-id'] = $contact['id'];
+ $item_arr['owner-name'] = $contact['name'];
+ $item_arr['owner-link'] = $contact['url'];
+ $item_arr['owner-avatar'] = $contact['thumb'];
+ $item_arr['author-name'] = $contact['name'];
+ $item_arr['author-link'] = $contact['url'];
+ $item_arr['author-avatar'] = $contact['thumb'];
+ $item_arr['title'] = '';
+ $item_arr['allow_cid'] = $event['allow_cid'];
+ $item_arr['allow_gid'] = $event['allow_gid'];
+ $item_arr['deny_cid'] = $event['deny_cid'];
+ $item_arr['deny_gid'] = $event['deny_gid'];
+ $item_arr['private'] = $private;
+ $item_arr['visible'] = 1;
+ $item_arr['verb'] = ACTIVITY_POST;
+ $item_arr['object-type'] = ACTIVITY_OBJ_EVENT;
+ $item_arr['origin'] = $event['cid'] === 0 ? 1 : 0;
+ $item_arr['body'] = self::getBBCode($event);
+ $item_arr['event-id'] = $event['id'];
- $item_id = Item::insert($item_arr);
+ $item_arr['object'] = '' . "\n";
+
+ $item_id = Item::insert($item_arr);
+ }
Addon::callHooks("event_created", $event['id']);
}
@@ -981,4 +986,47 @@ class Event extends BaseObject
return $location;
}
+
+ /**
+ * @brief Add new birthday event for this person
+ *
+ * @param array $contact Contact array, expects: id, uid, url, name
+ * @param string $birthday Birthday of the contact
+ * @return bool
+ */
+ public static function createBirthday($contact, $birthday)
+ {
+ // Check for duplicates
+ $condition = [
+ 'uid' => $contact['uid'],
+ 'cid' => $contact['id'],
+ 'start' => DateTimeFormat::utc($birthday),
+ 'type' => 'birthday'
+ ];
+ if (DBA::exists('event', $condition)) {
+ return false;
+ }
+
+ /*
+ * Add new birthday event for this person
+ *
+ * summary 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.
+ */
+ $values = [
+ 'uid' => $contact['uid'],
+ 'cid' => $contact['id'],
+ 'start' => DateTimeFormat::utc($birthday),
+ 'finish' => DateTimeFormat::utc($birthday . ' + 1 day '),
+ 'summary' => L10n::t('%s\'s birthday', $contact['name']),
+ 'desc' => L10n::t('Happy Birthday %s', ' [url=' . $contact['url'] . ']' . $contact['name'] . '[/url]'),
+ 'type' => 'birthday',
+ 'adjust' => 0
+ ];
+
+ self::store($values);
+
+ return true;
+ }
}
diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php
index 7c03a21839..b67b7c021f 100644
--- a/src/Protocol/DFRN.php
+++ b/src/Protocol/DFRN.php
@@ -1509,43 +1509,6 @@ class DFRN
return intval($res->status);
}
- /**
- * @brief Add new birthday event for this person
- *
- * @param array $contact Contact record
- * @param string $birthday Birthday of the contact
- * @return void
- * @todo Add array type-hint for $contact
- */
- private static function birthdayEvent($contact, $birthday)
- {
- // Check for duplicates
- $condition = ['uid' => $contact['uid'], 'cid' => $contact['id'],
- 'start' => DateTimeFormat::utc($birthday), 'type' => 'birthday'];
- if (DBA::exists('event', $condition)) {
- return;
- }
-
- Logger::log('updating birthday: ' . $birthday . ' for contact ' . $contact['id']);
-
- $bdtext = L10n::t('%s\'s birthday', $contact['name']);
- $bdtext2 = L10n::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']),
- intval($contact['id']),
- DBA::escape(DateTimeFormat::utcNow()),
- DBA::escape(DateTimeFormat::utcNow()),
- DBA::escape(DateTimeFormat::utc($birthday)),
- DBA::escape(DateTimeFormat::utc($birthday . ' + 1 day ')),
- DBA::escape($bdtext),
- DBA::escape($bdtext2),
- DBA::escape('birthday')
- );
- }
-
/**
* @brief Fetch the author data from head or entry items
*
@@ -1736,7 +1699,7 @@ class DFRN
$contact = array_merge($contact_old, $poco);
if ($contact_old["bdyear"] != $contact["bdyear"]) {
- self::birthdayEvent($contact, $birthday);
+ Event::createBirthday($contact, $birthday);
}
// Get all field names