Ejemplo n.º 1
0
function event_store_item($arr, $event)
{
    require_once 'include/datetime.php';
    require_once 'include/items.php';
    require_once 'include/bbcode.php';
    $item = null;
    if ($arr['mid'] && $arr['uid']) {
        $i = q("select * from item where mid = '%s' and uid = %d limit 1", dbesc($arr['mid']), intval($arr['uid']));
        if ($i) {
            xchan_query($i);
            $item = fetch_post_tags($i, true);
        }
    }
    $item_arr = array();
    $prefix = '';
    //	$birthday = false;
    if ($event['type'] === 'birthday') {
        $prefix = t('This event has been added to your calendar.');
        //		$birthday = true;
        // The event is created on your own site by the system, but appears to belong
        // to the birthday person. It also isn't propagated - so we need to prevent
        // folks from trying to comment on it. If you're looking at this and trying to
        // fix it, you'll need to completely change the way birthday events are created
        // and send them out from the source. This has its own issues.
        $item_arr['comment_policy'] = 'none';
    }
    $r = q("SELECT * FROM item left join xchan on author_xchan = xchan_hash WHERE resource_id = '%s' AND resource_type = 'event' and uid = %d LIMIT 1", dbesc($event['event_hash']), intval($arr['uid']));
    if ($r) {
        $object = json_encode(array('type' => ACTIVITY_OBJ_EVENT, 'id' => z_root() . '/event/' . $r[0]['resource_id'], 'title' => $arr['summary'], 'content' => format_event_bbcode($arr), 'author' => array('name' => $r[0]['xchan_name'], 'address' => $r[0]['xchan_addr'], 'guid' => $r[0]['xchan_guid'], 'guid_sig' => $r[0]['xchan_guid_sig'], 'link' => array(array('rel' => 'alternate', 'type' => 'text/html', 'href' => $r[0]['xchan_url']), array('rel' => 'photo', 'type' => $r[0]['xchan_photo_mimetype'], 'href' => $r[0]['xchan_photo_m'])))));
        $private = $arr['allow_cid'] || $arr['allow_gid'] || $arr['deny_cid'] || $arr['deny_gid'] ? 1 : 0;
        q("UPDATE item SET title = '%s', body = '%s', object = '%s', allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', edited = '%s', item_flags = %d, item_private = %d, obj_type = '%s'  WHERE id = %d AND uid = %d", dbesc($arr['summary']), dbesc($prefix . format_event_bbcode($arr)), dbesc($object), dbesc($arr['allow_cid']), dbesc($arr['allow_gid']), dbesc($arr['deny_cid']), dbesc($arr['deny_gid']), dbesc($arr['edited']), intval($r[0]['item_flags']), intval($private), dbesc(ACTIVITY_OBJ_EVENT), intval($r[0]['id']), intval($arr['uid']));
        q("delete from term where oid = %d and otype = %d", intval($r[0]['id']), intval(TERM_OBJ_POST));
        if ($arr['term'] && is_array($arr['term'])) {
            foreach ($arr['term'] as $t) {
                q("insert into term (uid,oid,otype,type,term,url)\n\t\t\t\t\tvalues(%d,%d,%d,%d,'%s','%s') ", intval($arr['uid']), intval($r[0]['id']), intval(TERM_OBJ_POST), intval($t['type']), dbesc($t['term']), dbesc($t['url']));
            }
        }
        $item_id = $r[0]['id'];
        call_hooks('event_updated', $event['id']);
        return $item_id;
    } else {
        $z = q("select * from channel where channel_id = %d limit 1", intval($arr['uid']));
        $private = $arr['allow_cid'] || $arr['allow_gid'] || $arr['deny_cid'] || $arr['deny_gid'] ? 1 : 0;
        if ($item) {
            $item_arr['id'] = $item['id'];
        } else {
            $wall = $z[0]['channel_hash'] == $event['event_xchan'] ? true : false;
            $item_flags = ITEM_THREAD_TOP;
            if ($wall) {
                $item_flags |= ITEM_WALL;
                $item_flags |= ITEM_ORIGIN;
            }
            $item_arr['item_flags'] = $item_flags;
        }
        if (!$arr['mid']) {
            $arr['mid'] = item_message_id();
        }
        $item_arr['aid'] = $z[0]['channel_account_id'];
        $item_arr['uid'] = $arr['uid'];
        $item_arr['author_xchan'] = $arr['event_xchan'];
        $item_arr['mid'] = $arr['mid'];
        $item_arr['parent_mid'] = $arr['mid'];
        $item_arr['owner_xchan'] = $wall ? $z[0]['channel_hash'] : $arr['event_xchan'];
        $item_arr['author_xchan'] = $arr['event_xchan'];
        $item_arr['title'] = $arr['summary'];
        $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['item_private'] = $private;
        $item_arr['verb'] = ACTIVITY_POST;
        if (array_key_exists('term', $arr)) {
            $item_arr['term'] = $arr['term'];
        }
        $item_arr['resource_type'] = 'event';
        $item_arr['resource_id'] = $event['event_hash'];
        $item_arr['obj_type'] = ACTIVITY_OBJ_EVENT;
        $item_arr['body'] = $prefix . format_event_bbcode($arr);
        // if it's local send the permalink to the channel page.
        // otherwise we'll fallback to /display/$message_id
        if ($wall) {
            $item_arr['plink'] = z_root() . '/channel/' . $z[0]['channel_address'] . '/?f=&mid=' . $item_arr['mid'];
        } else {
            $item_arr['plink'] = z_root() . '/display/' . $item_arr['mid'];
        }
        $x = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($arr['event_xchan']));
        if ($x) {
            $item_arr['object'] = json_encode(array('type' => ACTIVITY_OBJ_EVENT, 'id' => z_root() . '/event/' . $event['event_hash'], 'title' => $arr['summary'], 'content' => format_event_bbcode($arr), 'author' => array('name' => $x[0]['xchan_name'], 'address' => $x[0]['xchan_addr'], 'guid' => $x[0]['xchan_guid'], 'guid_sig' => $x[0]['xchan_guid_sig'], 'link' => array(array('rel' => 'alternate', 'type' => 'text/html', 'href' => $x[0]['xchan_url']), array('rel' => 'photo', 'type' => $x[0]['xchan_photo_mimetype'], 'href' => $x[0]['xchan_photo_m'])))));
        }
        $res = item_store($item_arr);
        $item_id = $res['item_id'];
        call_hooks('event_created', $event['id']);
        return $item_id;
    }
}
Ejemplo n.º 2
0
function event_store($arr)
{
    require_once 'include/datetime.php';
    require_once 'include/items.php';
    require_once 'include/bbcode.php';
    $a = get_app();
    $arr['created'] = $arr['created'] ? $arr['created'] : datetime_convert();
    $arr['edited'] = $arr['edited'] ? $arr['edited'] : datetime_convert();
    $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;
    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 (count($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 (!count($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 count($r) ? $r[0]['id'] : 0;
        }
        // The event changed. Update it.
        $r = q("UPDATE `event` SET\n\t\t\t`edited` = '%s',\n\t\t\t`start` = '%s',\n\t\t\t`finish` = '%s',\n\t\t\t`desc` = '%s',\n\t\t\t`location` = '%s',\n\t\t\t`type` = '%s',\n\t\t\t`adjust` = %d,\n\t\t\t`nofinish` = %d,\n\t\t\t`allow_cid` = '%s',\n\t\t\t`allow_gid` = '%s',\n\t\t\t`deny_cid` = '%s',\n\t\t\t`deny_gid` = '%s'\n\t\t\tWHERE `id` = %d AND `uid` = %d LIMIT 1", dbesc($arr['edited']), dbesc($arr['start']), dbesc($arr['finish']), 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']), 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 (count($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";
            q("UPDATE `item` SET `body` = '%s', `object` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `edited` = '%s', `private` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1", dbesc(format_event_bbcode($arr)), dbesc($object), dbesc($arr['allow_cid']), dbesc($arr['allow_gid']), dbesc($arr['deny_cid']), dbesc($arr['deny_gid']), dbesc($arr['edited']), intval($arr['private']), intval($r[0]['id']), intval($arr['uid']));
            return $r[0]['id'];
        } else {
            return 0;
        }
    } else {
        // New event. Store it.
        $r = q("INSERT INTO `event` ( `uid`,`cid`,`uri`,`created`,`edited`,`start`,`finish`,`desc`,`location`,`type`,\n\t\t\t`adjust`,`nofinish`,`allow_cid`,`allow_gid`,`deny_cid`,`deny_gid`)\n\t\t\tVALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' ) ", intval($arr['uid']), intval($arr['cid']), dbesc($arr['uri']), dbesc($arr['created']), dbesc($arr['edited']), dbesc($arr['start']), dbesc($arr['finish']), 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 (count($r)) {
            $event = $r[0];
        }
        $item_arr = array();
        $item_arr['uid'] = $arr['uid'];
        $item_arr['contact-id'] = $arr['cid'];
        $item_arr['uri'] = $arr['uri'];
        $item_arr['parent-uri'] = $arr['uri'];
        $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['last-child'] = 1;
        $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($uri) . '</id>';
        $item_arr['object'] .= '<content>' . xmlify(format_event_bbcode($event)) . '</content>';
        $item_arr['object'] .= '</object>' . "\n";
        $item_id = item_store($item_arr);
        $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($arr['uid']));
        if (count($r)) {
            $plink = $a->get_baseurl() . '/display/' . $r[0]['nickname'] . '/' . $item_id;
        }
        if ($item_id) {
            q("UPDATE `item` SET `plink` = '%s', `event-id` = %d  WHERE `uid` = %d AND `id` = %d LIMIT 1", dbesc($plink), intval($event['id']), intval($arr['uid']), intval($item_id));
        }
        return $item_id;
    }
}