-
- require_once 'include/items.php';
-
- $a = get_app();
-
- $arr['created'] = (($arr['created']) ? DateTimeFormat::utc($arr['created']) : DateTimeFormat::utcNow());
- $arr['edited'] = (($arr['edited']) ? DateTimeFormat::utc($arr['edited']) : DateTimeFormat::utcNow());
- $arr['start'] = (($arr['start']) ? DateTimeFormat::utc($arr['start']) : NULL_DATE);
- $arr['finish'] = (($arr['finish']) ? DateTimeFormat::utc($arr['finish']) : NULL_DATE);
- $arr['type'] = (($arr['type']) ? $arr['type'] : 'event' );
- $arr['cid'] = ((intval($arr['cid'])) ? intval($arr['cid']) : 0);
- $arr['uri'] = (x($arr, 'uri') ? $arr['uri'] : item_new_uri($a->get_hostname(), $arr['uid']));
- $arr['private'] = ((x($arr, 'private')) ? intval($arr['private']) : 0);
- $arr['guid'] = get_guid(32);
-
- if ($arr['finish'] < NULL_DATE) {
- $arr['finish'] = NULL_DATE;
- }
-
- if ($arr['cid']) {
- $c = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
- intval($arr['cid']),
- intval($arr['uid'])
- );
- } else {
- $c = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
- intval($arr['uid'])
- );
- }
-
- if (DBM::is_result($c)) {
- $contact = $c[0];
- }
-
- // Existing event being modified.
- if ($arr['id']) {
-
- // has the event actually changed?
- $r = q("SELECT * FROM `event` WHERE `id` = %d AND `uid` = %d LIMIT 1",
- intval($arr['id']),
- intval($arr['uid'])
- );
- if ((! DBM::is_result($r)) || ($r[0]['edited'] === $arr['edited'])) {
-
- // Nothing has changed. Grab the item id to return.
- $r = q("SELECT * FROM `item` WHERE `event-id` = %d AND `uid` = %d LIMIT 1",
- intval($arr['id']),
- intval($arr['uid'])
- );
- return ((DBM::is_result($r)) ? $r[0]['id'] : 0);
- }
-
- // The event changed. Update it.
- q("UPDATE `event` SET
- `edited` = '%s',
- `start` = '%s',
- `finish` = '%s',
- `summary` = '%s',
- `desc` = '%s',
- `location` = '%s',
- `type` = '%s',
- `adjust` = %d,
- `nofinish` = %d
- WHERE `id` = %d AND `uid` = %d",
-
- dbesc($arr['edited']),
- dbesc($arr['start']),
- dbesc($arr['finish']),
- dbesc($arr['summary']),
- dbesc($arr['desc']),
- dbesc($arr['location']),
- dbesc($arr['type']),
- intval($arr['adjust']),
- intval($arr['nofinish']),
- intval($arr['id']),
- intval($arr['uid'])
- );
-
- $r = q("SELECT * FROM `item` WHERE `event-id` = %d AND `uid` = %d LIMIT 1",
- intval($arr['id']),
- intval($arr['uid'])
- );
- if (DBM::is_result($r)) {
- $object = '<object><type>' . xmlify(ACTIVITY_OBJ_EVENT) . '</type><title></title><id>' . xmlify($arr['uri']) . '</id>';
- $object .= '<content>' . xmlify(format_event_bbcode($arr)) . '</content>';
- $object .= '</object>' . "\n";
-
- $fields = ['body' => format_event_bbcode($arr), 'object' => $object, 'edited' => $arr['edited']];
- Item::update($fields, ['id' => $r[0]['id']]);
-
- $item_id = $r[0]['id'];
- } else {
- $item_id = 0;
- }
-
- Addon::callHooks("event_updated", $arr['id']);
-
- return $item_id;
- } else {
- // New event. Store it.
- q("INSERT INTO `event` (`uid`,`cid`,`guid`,`uri`,`created`,`edited`,`start`,`finish`,`summary`, `desc`,`location`,`type`,
- `adjust`,`nofinish`,`allow_cid`,`allow_gid`,`deny_cid`,`deny_gid`)
- VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' ) ",
- intval($arr['uid']),
- intval($arr['cid']),
- dbesc($arr['guid']),
- dbesc($arr['uri']),
- dbesc($arr['created']),
- dbesc($arr['edited']),
- dbesc($arr['start']),
- dbesc($arr['finish']),
- dbesc($arr['summary']),
- dbesc($arr['desc']),
- dbesc($arr['location']),
- dbesc($arr['type']),
- intval($arr['adjust']),
- intval($arr['nofinish']),
- dbesc($arr['allow_cid']),
- dbesc($arr['allow_gid']),
- dbesc($arr['deny_cid']),
- dbesc($arr['deny_gid'])
- );
-
- $r = q("SELECT * FROM `event` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($arr['uri']),
- intval($arr['uid'])
- );
- if (DBM::is_result($r)) {
- $event = $r[0];
- }
-
- $item_arr = [];
-
- $item_arr['uid'] = $arr['uid'];
- $item_arr['contact-id'] = $arr['cid'];
- $item_arr['uri'] = $arr['uri'];
- $item_arr['parent-uri'] = $arr['uri'];
- $item_arr['guid'] = $arr['guid'];
- $item_arr['type'] = 'activity';
- $item_arr['wall'] = (($arr['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'] = $arr['allow_cid'];
- $item_arr['allow_gid'] = $arr['allow_gid'];
- $item_arr['deny_cid'] = $arr['deny_cid'];
- $item_arr['deny_gid'] = $arr['deny_gid'];
- $item_arr['private'] = $arr['private'];
- $item_arr['visible'] = 1;
- $item_arr['verb'] = ACTIVITY_POST;
- $item_arr['object-type'] = ACTIVITY_OBJ_EVENT;
- $item_arr['origin'] = ((intval($arr['cid']) == 0) ? 1 : 0);
- $item_arr['body'] = format_event_bbcode($event);
-
-
- $item_arr['object'] = '<object><type>' . xmlify(ACTIVITY_OBJ_EVENT) . '</type><title></title><id>' . xmlify($arr['uri']) . '</id>';
- $item_arr['object'] .= '<content>' . xmlify(format_event_bbcode($event)) . '</content>';
- $item_arr['object'] .= '</object>' . "\n";
-
- $item_id = Item::insert($item_arr);
- if ($item_id) {
- Item::update(['event-id' => $event['id']], ['id' => $item_id]);
- }
-
- Addon::callHooks("event_created", $event['id']);
-
- return $item_id;
- }