From d5fdd4287dec00adcb08e389385b1ecbc23cca6a Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 13 Jun 2011 19:06:49 -0700 Subject: [PATCH] event sharing, cont. --- boot.php | 2 +- include/event.php | 157 ++++++++++++++++++++++++++++++++++++++++++- include/items.php | 10 ++- include/notifier.php | 2 + mod/dfrn_notify.php | 20 ++++++ mod/events.php | 128 +++++++---------------------------- mod/pubsub.php | 8 +-- 7 files changed, 214 insertions(+), 113 deletions(-) diff --git a/boot.php b/boot.php index b8b0dc0593..8edc749109 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1007' ); +define ( 'FRIENDIKA_VERSION', '2.2.1010' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1063 ); diff --git a/include/event.php b/include/event.php index 86a8220808..208ba1e1fd 100644 --- a/include/event.php +++ b/include/event.php @@ -177,4 +177,159 @@ function ev_compare($a,$b) { $date_b = (($b['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$b['start']) : $b['start']); return strcmp($date_a,$date_b); -} \ No newline at end of file +} + + + +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); + + 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]; + + + if($arr['id']) { + $r = q("UPDATE `event` SET + `edited` = '%s', + `start` = '%s', + `finish` = '%s', + `desc` = '%s', + `location` = '%s', + `type` = '%s', + `adjust` = %d, + `nofinish` = %d, + `allow_cid` = '%s', + `allow_gid` = '%s', + `deny_cid` = '%s', + `deny_gid` = '%s' + WHERE `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)) + return $r[0]['id']; + else + return 0; + } + else { + + $uri = item_new_uri($a->get_hostname(),local_user()); + + $r = q("INSERT INTO `event` ( `uid`,`cid`,`uri`,`created`,`edited`,`start`,`finish`,`desc`,`location`,`type`, + `adjust`,`nofinish`,`allow_cid`,`allow_gid`,`deny_cid`,`deny_gid`) + VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' ) ", + intval($arr['uid']), + intval($arr['cid']), + dbesc($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($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'] = $uri; + $item_arr['parent-uri'] = $uri; + $item_arr['type'] = 'activity'; + $item_arr['wall'] = 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'] = $str_contact_allow; + $item_arr['allow_gid'] = $str_group_allow; + $item_arr['deny_cid'] = $str_contact_deny; + $item_arr['deny_gid'] = $str_group_deny; + $item_arr['last-child'] = 1; + $item_arr['visible'] = 1; + $item_arr['verb'] = ACTIVITY_POST; + $item_arr['object-type'] = ACTIVITY_OBJ_EVENT; + + $item_arr['body'] = format_event_bbcode($event); + + + $item_arr['object'] = '' . xmlify(ACTIVITY_OBJ_EVENT) . '' . xmlify($uri) . ''; + $item_arr['object'] .= '' . xmlify(format_event_bbcode($event)) . ''; + $item_arr['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; + } +} diff --git a/include/items.php b/include/items.php index db500fda2a..514bd1efa9 100644 --- a/include/items.php +++ b/include/items.php @@ -1337,14 +1337,20 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_fee if((x($datarray,'object-type')) && ($datarray['object-type'] === ACTIVITY_OBJ_EVENT)) { $ev = bbtoevent($datarray['body']); if(x($ev,'desc') && x($ev,'start')) { + $ev['uid'] = $importer['uid']; + if(is_array($contact)) + $ev['cid'] = $contact['id']; $r = q("SELECT * FROM `event` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($item_id), intval($importer['uid']) ); - // import/update event - + if(count($r)) + $ev['id'] = $r[0]['id']; + $xyz = event_store($ev); + continue; } } + $r = q("SELECT `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($item_id), intval($importer['uid']) diff --git a/include/notifier.php b/include/notifier.php index cb4dfe025f..5de6eafd10 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -512,6 +512,8 @@ function notifier_run($argv, $argc){ if((count($r)) && (($max_allowed == 0) || (count($r) < $max_allowed))) { + logger('pubdeliver: ' . print_r($r,true)); + foreach($r as $rr) { /* Don't deliver to folks who have already been delivered to */ diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index 12e7ff7ced..949d9f9ab5 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -2,6 +2,9 @@ require_once('simplepie/simplepie.inc'); require_once('include/items.php'); +require_once('include/event.php'); + + function dfrn_notify_post(&$a) { $dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : ''); @@ -591,6 +594,23 @@ function dfrn_notify_post(&$a) { $item_id = $item->get_id(); $datarray = get_atom_elements($feed,$item); + if((x($datarray,'object-type')) && ($datarray['object-type'] === ACTIVITY_OBJ_EVENT)) { + $ev = bbtoevent($datarray['body']); + if(x($ev,'desc') && x($ev,'start')) { + $ev['cid'] = $importer['id']; + $ev['uid'] = $importer['uid']; + + $r = q("SELECT * FROM `event` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($item_id), + intval($importer['uid']) + ); + if(count($r)) + $ev['id'] = $r[0]['id']; + $xyz = event_store($ev); + continue; + } + } + $r = q("SELECT `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($item_id), intval($importer['importer_uid']) diff --git a/mod/events.php b/mod/events.php index bdc4b8d871..a4809607c8 100644 --- a/mod/events.php +++ b/mod/events.php @@ -67,113 +67,28 @@ function events_post(&$a) { $str_group_allow = $str_contact_deny = $str_group_deny = ''; } - if($event_id) { - $r = q("UPDATE `event` SET - `edited` = '%s', - `start` = '%s', - `finish` = '%s', - `desc` = '%s', - `location` = '%s', - `type` = '%s', - `adjust` = %d, - `nofinish` = %d, - `allow_cid` = '%s', - `allow_gid` = '%s', - `deny_cid` = '%s', - `deny_gid` = '%s' - WHERE `id` = %d AND `uid` = %d LIMIT 1", - dbesc(datetime_convert()), - dbesc($start), - dbesc($finish), - dbesc($desc), - dbesc($location), - dbesc($type), - intval($adjust), - intval($nofinish), - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny), - intval($event_id), - intval($local_user()) - ); + $datarray = array(); + $datarray['start'] = $start; + $datarray['finish'] = $finish; + $datarray['desc'] = $desc; + $datarray['location'] = $location; + $datarray['type'] = $type; + $datarray['adjust'] = $adjust; + $datarray['nofinish'] = $nofinish; + $datarray['uid'] = $uid; + $datarray['cid'] = 0; + $datarray['allow_cid'] = $str_contact_allow; + $datarray['allow_gid'] = $str_group_allow; + $datarray['deny_cid'] = $str_contact_deny; + $datarray['deny_gid'] = $str_group_deny; + $datarray['id'] = $event_id; + $datarray['created'] = $created; + $datarray['edited'] = $edited; - } - else { + $item_id = event_store($datarray); + proc_run('php',"include/notifier.php","event","$item_id"); - $uri = item_new_uri($a->get_hostname(),local_user()); - - $r = q("INSERT INTO `event` ( `uid`,`uri`,`created`,`edited`,`start`,`finish`,`desc`,`location`,`type`, - `adjust`,`nofinish`,`allow_cid`,`allow_gid`,`deny_cid`,`deny_gid`) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' ) ", - intval(local_user()), - dbesc($uri), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc($start), - dbesc($finish), - dbesc($desc), - dbesc($location), - dbesc($type), - intval($adjust), - intval($nofinish), - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny) - - ); - - $r = q("SELECT * FROM `event` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc($uri), - intval(local_user()) - ); - if(count($r)) - $event = $r[0]; - - $arr = array(); - - $arr['uid'] = local_user(); - $arr['uri'] = $uri; - $arr['parent-uri'] = $uri; - $arr['type'] = 'activity'; - $arr['wall'] = 1; - $arr['contact-id'] = $a->contact['id']; - $arr['owner-name'] = $a->contact['name']; - $arr['owner-link'] = $a->contact['url']; - $arr['owner-avatar'] = $a->contact['thumb']; - $arr['author-name'] = $a->contact['name']; - $arr['author-link'] = $a->contact['url']; - $arr['author-avatar'] = $a->contact['thumb']; - $arr['title'] = ''; - $arr['allow_cid'] = $str_contact_allow; - $arr['allow_gid'] = $str_group_allow; - $arr['deny_cid'] = $str_contact_deny; - $arr['deny_gid'] = $str_group_deny; - $arr['last-child'] = 1; - $arr['visible'] = 1; - $arr['verb'] = ACTIVITY_POST; - $arr['object-type'] = ACTIVITY_OBJ_EVENT; - - $arr['body'] = format_event_bbcode($event); - - - $arr['object'] = '' . xmlify(ACTIVITY_OBJ_EVENT) . '' . xmlify($uri) . ''; - $arr['object'] .= '' . xmlify(format_event_bbcode($event)) . ''; - $arr['object'] .= '' . "\n"; - - $item_id = item_store($arr); - if($item_id) { - q("UPDATE `item` SET `plink` = '%s', `event-id` = %d WHERE `uid` = %d AND `id` = %d LIMIT 1", - dbesc($a->get_baseurl() . '/display/' . $owner_record['nickname'] . '/' . $item_id), - intval($event['id']), - intval(local_user()), - intval($item_id) - ); - proc_run('php',"include/notifier.php","tag","$item_id"); - } - } } @@ -245,7 +160,8 @@ function events_content(&$a) { $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish); - $r = q("SELECT * FROM `event` WHERE `uid` = %d + $r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` + WHERE `event`.`uid` = %d AND (( `adjust` = 0 AND `start` >= '%s' AND `finish` <= '%s' ) OR ( `adjust` = 1 AND `start` >= '%s' AND `finish` <= '%s' )) ", intval(local_user()), @@ -269,6 +185,8 @@ function events_content(&$a) { $o .= '
' . $d . '
'; $last_date = $d; $o .= format_event_html($rr); + if($rr['plink']) + $o .= get_plink($rr) . '
'; } } return $o; diff --git a/mod/pubsub.php b/mod/pubsub.php index f829eb4d98..edb0a7fe16 100644 --- a/mod/pubsub.php +++ b/mod/pubsub.php @@ -91,10 +91,10 @@ function pubsub_post(&$a) { logger('pubsub: user-agent: ' . $_SERVER['HTTP_USER_AGENT'] ); logger('pubsub: data: ' . $xml, LOGGER_DATA); - if(! stristr($xml,'argc > 1) ? notags(trim($a->argv[1])) : ''); $contact_id = (($a->argc > 2) ? intval($a->argv[2]) : 0 );