X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FEvent.php;h=1bc922b4653ab73144d0ecc52f95a73ab0468841;hb=82cef6c9e7326303d9790451d0a757978246b28c;hp=9c35e34e45ae00856e2d5d38ebd762165d13bad9;hpb=8c956ac0c8b1ba55648145b8644af19faaecdd59;p=friendica.git diff --git a/src/Model/Event.php b/src/Model/Event.php index 9c35e34e45..1bc922b465 100644 --- a/src/Model/Event.php +++ b/src/Model/Event.php @@ -5,15 +5,13 @@ namespace Friendica\Model; -use dba; use Friendica\BaseObject; use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\L10n; use Friendica\Core\PConfig; use Friendica\Core\System; -use Friendica\Database\DBM; -use Friendica\Model\Item; +use Friendica\Database\DBA; use Friendica\Util\DateTimeFormat; use Friendica\Util\Map; @@ -29,26 +27,34 @@ class Event extends BaseObject public static function getHTML(array $event, $simple = false) { - if (!is_array($event) || !!count($event)) { + if (empty($event)) { return ''; } $bd_format = L10n::t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8 AM. $event_start = day_translate( - $event['adjust'] ? + !empty($event['adjust']) ? DateTimeFormat::local($event['start'], $bd_format) : DateTimeFormat::utc($event['start'], $bd_format) ); - $event_end = day_translate( - $event['adjust'] ? - DateTimeFormat::local($event['finish'], $bd_format) : DateTimeFormat::utc($event['finish'], $bd_format) - ); + if (!empty($event['finish'])) { + $event_end = day_translate( + !empty($event['adjust']) ? + DateTimeFormat::local($event['finish'], $bd_format) : DateTimeFormat::utc($event['finish'], $bd_format) + ); + } else { + $event_end = ''; + } if ($simple) { - $o = "

" . BBCode::convert($event['summary'], false, $simple) . "

"; + if (!empty($event['summary'])) { + $o = "

" . BBCode::convert($event['summary'], false, $simple) . "

"; + } - $o .= "
" . BBCode::convert($event['desc'], false, $simple) . "
"; + if (!empty($event['desc'])) { + $o .= "
" . BBCode::convert($event['desc'], false, $simple) . "
"; + } $o .= "

" . L10n::t('Starts:') . "

" . $event_start . "

"; @@ -68,20 +74,22 @@ class Event extends BaseObject $o .= '
' . BBCode::convert($event['summary'], false, $simple) . '
' . "\r\n"; $o .= '
' . L10n::t('Starts:') . ' ' . $event_start . '
' . "\r\n"; if (!$event['nofinish']) { $o .= '
' . L10n::t('Finishes:') . ' ' . $event_end . '
' . "\r\n"; } - $o .= '
' . BBCode::convert($event['desc'], false, $simple) . '
' . "\r\n"; + if (!empty($event['desc'])) { + $o .= '
' . BBCode::convert($event['desc'], false, $simple) . '
' . "\r\n"; + } - if (strlen($event['location'])) { + if (!empty($event['location'])) { $o .= '
' . L10n::t('Location:') . ' ' . BBCode::convert($event['location'], false, $simple) . '
' . "\r\n"; @@ -105,7 +113,7 @@ class Event extends BaseObject * @param array $event Array which contains the event data. * @return string The event as a bbcode formatted string. */ - public static function getBBCode(array $event) + private static function getBBCode(array $event) { $o = ''; @@ -214,7 +222,7 @@ class Event extends BaseObject return; } - dba::delete('event', ['id' => $event_id]); + DBA::delete('event', ['id' => $event_id]); logger("Deleted event ".$event_id, LOGGER_DEBUG); } @@ -223,17 +231,18 @@ class Event extends BaseObject * * Store the event in the event table and create an event item in the item table. * - * @param array $event Array with event data. - * @return int The event id. + * @param array $arr Array with event data. + * @return int The new event id. */ public static function store($arr) { $a = self::getApp(); - $event['uri'] = defaults($arr, 'uri' , item_new_uri($a->get_hostname(), $event['uid'])); + $event = []; $event['id'] = intval(defaults($arr, 'id' , 0)); $event['uid'] = intval(defaults($arr, 'uid' , 0)); $event['cid'] = intval(defaults($arr, 'cid' , 0)); + $event['uri'] = defaults($arr, 'uri' , Item::newURI($event['uid'])); $event['type'] = defaults($arr, 'type' , 'event'); $event['summary'] = defaults($arr, 'summary' , ''); $event['desc'] = defaults($arr, 'desc' , ''); @@ -242,7 +251,6 @@ class Event extends BaseObject $event['allow_gid'] = defaults($arr, 'allow_gid', ''); $event['deny_cid'] = defaults($arr, 'deny_cid' , ''); $event['deny_gid'] = defaults($arr, 'deny_gid' , ''); - $event['private'] = intval(defaults($arr, 'private' , 0)); $event['adjust'] = intval(defaults($arr, 'adjust' , 0)); $event['nofinish'] = intval(defaults($arr, 'nofinish' , !empty($event['start']) && empty($event['finish']))); @@ -253,23 +261,26 @@ class Event extends BaseObject if ($event['finish'] < NULL_DATE) { $event['finish'] = NULL_DATE; } + $private = intval(defaults($arr, 'private', 0)); - $condition = ['uid' => $event['uid']]; + $conditions = ['uid' => $event['uid']]; if ($event['cid']) { - $condition['id'] = $event['cid']; + $conditions['id'] = $event['cid']; + } else { + $conditions['self'] = true; } - $contact = dba::selectFirst('contact', [], ['id' => $event['cid'], 'uid' => $event['uid']]); + $contact = DBA::selectFirst('contact', [], $conditions); // Existing event being modified. if ($event['id']) { // has the event actually changed? - $existing_event = dba::selectFirst('event', ['edited'], ['id' => $event['id'], 'uid' => $event['uid']]); - if ((! DBM::is_result($existing_event)) || ($existing_event['edited'] === $event['edited'])) { + $existing_event = DBA::selectFirst('event', ['edited'], ['id' => $event['id'], 'uid' => $event['uid']]); + if (!DBA::isResult($existing_event) || ($existing_event['edited'] === $event['edited'])) { - $item = dba::selectFirst('item', [], ['event-id' => $event['id'], 'uid' => $event['uid']]); + $item = Item::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]); - return DBM::is_result($item) ? $item['id'] : 0; + return DBA::isResult($item) ? $item['id'] : 0; } $updated_fields = [ @@ -284,15 +295,15 @@ class Event extends BaseObject 'nofinish' => $event['nofinish'], ]; - dba::update('event', $updated_fields, ['id' => $event['cid'], 'uid' => $event['uid']]); + DBA::update('event', $updated_fields, ['id' => $event['id'], 'uid' => $event['uid']]); - $item = dba::selectFirst('item', ['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]); - if (DBM::is_result($item)) { + $item = Item::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]); + if (DBA::isResult($item)) { $object = '' . xmlify(ACTIVITY_OBJ_EVENT) . '' . xmlify($event['uri']) . ''; - $object .= '' . xmlify(format_event_bbcode($event)) . ''; + $object .= '' . xmlify(self::getBBCode($event)) . ''; $object .= '' . "\n"; - $fields = ['body' => format_event_bbcode($event), 'object' => $object, 'edited' => $event['edited']]; + $fields = ['body' => self::getBBCode($event), 'object' => $object, 'edited' => $event['edited']]; Item::update($fields, ['id' => $item['id']]); $item_id = $item['id']; @@ -302,12 +313,12 @@ class Event extends BaseObject Addon::callHooks('event_updated', $event['id']); } else { - $event['guid'] = get_guid(32); + $event['guid'] = defaults($arr, 'guid', System::createGUID(32)); // New event. Store it. - dba::insert('event', $event); + DBA::insert('event', $event); - $event['id'] = dba::lastInsertId(); + $event['id'] = DBA::lastInsertId(); $item_arr = []; @@ -316,7 +327,8 @@ class Event extends BaseObject $item_arr['uri'] = $event['uri']; $item_arr['parent-uri'] = $event['uri']; $item_arr['guid'] = $event['guid']; - $item_arr['type'] = 'activity'; + $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']; @@ -330,16 +342,16 @@ class Event extends BaseObject $item_arr['allow_gid'] = $event['allow_gid']; $item_arr['deny_cid'] = $event['deny_cid']; $item_arr['deny_gid'] = $event['deny_gid']; - $item_arr['private'] = $event['private']; + $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'] = format_event_bbcode($event); + $item_arr['body'] = self::getBBCode($event); $item_arr['event-id'] = $event['id']; $item_arr['object'] = '' . xmlify(ACTIVITY_OBJ_EVENT) . '' . xmlify($event['uri']) . ''; - $item_arr['object'] .= '' . xmlify(format_event_bbcode($event)) . ''; + $item_arr['object'] .= '' . xmlify(self::getBBCode($event)) . ''; $item_arr['object'] .= '' . "\n"; $item_id = Item::insert($item_arr); @@ -429,7 +441,7 @@ class Event extends BaseObject * * @todo We should replace this with a separate update function if there is some time left. */ - public static function removeDuplicates(array $dates) + private static function removeDuplicates(array $dates) { $dates2 = []; @@ -461,16 +473,15 @@ class Event extends BaseObject } // Query for the event by event id - $r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`, - `item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event` + $r = q("SELECT `event`.*, `item`.`id` AS `itemid` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid` WHERE `event`.`uid` = %d AND `event`.`id` = %d $sql_extra", intval($owner_uid), intval($event_id) ); - if (DBM::is_result($r)) { - $return = event_remove_duplicates($r); + if (DBA::isResult($r)) { + $return = self::removeDuplicates($r); } return $return; @@ -501,8 +512,8 @@ class Event extends BaseObject } // Query for the event by date. - $r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`, - `item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event` + // @todo Slow query (518 seconds to run), to be optimzed + $r = q("SELECT `event`.*, `item`.`id` AS `itemid` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid` WHERE `event`.`uid` = %d AND event.ignore = %d AND ((`adjust` = 0 AND (`finish` >= '%s' OR (nofinish AND start >= '%s')) AND `start` <= '%s') @@ -510,16 +521,16 @@ class Event extends BaseObject $sql_extra ", intval($owner_uid), intval($event_params["ignore"]), - dbesc($event_params["start"]), - dbesc($event_params["start"]), - dbesc($event_params["finish"]), - dbesc($event_params["adjust_start"]), - dbesc($event_params["adjust_start"]), - dbesc($event_params["adjust_finish"]) + DBA::escape($event_params["start"]), + DBA::escape($event_params["start"]), + DBA::escape($event_params["finish"]), + DBA::escape($event_params["adjust_start"]), + DBA::escape($event_params["adjust_start"]), + DBA::escape($event_params["adjust_finish"]) ); - if (DBM::is_result($r)) { - $return = event_remove_duplicates($r); + if (DBA::isResult($r)) { + $return = self::removeDuplicates($r); } return $return; @@ -538,6 +549,11 @@ class Event extends BaseObject $last_date = ''; $fmt = L10n::t('l, F j'); foreach ($event_result as $event) { + $item = Item::selectFirst(['plink', 'author-name', 'author-avatar', 'author-link'], ['id' => $event['itemid']]); + if (DBA::isResult($item)) { + $event = array_merge($event, $item); + } + $start = $event['adjust'] ? DateTimeFormat::local($event['start'], 'c') : DateTimeFormat::utc($event['start'], 'c'); $j = $event['adjust'] ? DateTimeFormat::local($event['start'], 'j') : DateTimeFormat::utc($event['start'], 'j'); $day = $event['adjust'] ? DateTimeFormat::local($event['start'], $fmt) : DateTimeFormat::utc($event['start'], $fmt); @@ -570,7 +586,7 @@ class Event extends BaseObject $title = strip_tags(html_entity_decode($title, ENT_QUOTES, 'UTF-8')); } - $html = format_event_html($event); + $html = self::getHTML($event); $event['desc'] = BBCode::convert($event['desc']); $event['location'] = BBCode::convert($event['location']); $event_list[] = [ @@ -605,7 +621,7 @@ class Event extends BaseObject * * @todo Implement timezone support */ - public static function formatListForExport(array $events, $format, $timezone) + private static function formatListForExport(array $events, $format, $timezone) { if (!count($events)) { return ''; @@ -712,7 +728,7 @@ class Event extends BaseObject * * @return array Query results. */ - public static function getListByUserId($uid = 0) + private static function getListByUserId($uid = 0) { $return = []; @@ -731,9 +747,9 @@ class Event extends BaseObject $conditions += ['allow_cid' => '', 'allow_gid' => '']; } - $events = dba::select('event', $fields, $conditions); - if (DBM::is_result($events)) { - $return = $events; + $events = DBA::select('event', $fields, $conditions); + if (DBA::isResult($events)) { + $return = DBA::toArray($events); } return $return; @@ -755,17 +771,17 @@ class Event extends BaseObject { $process = false; - $user = dba::selectFirst('user', ['timezone'], ['uid' => $uid]); - if (DBM::is_result($user)) { + $user = DBA::selectFirst('user', ['timezone'], ['uid' => $uid]); + if (DBA::isResult($user)) { $timezone = $user['timezone']; } // Get all events which are owned by a uid (respects permissions). - $events = events_by_uid($uid); + $events = self::getListByUserId($uid); // We have the events that are available for the requestor. // Now format the output according to the requested format. - $res = event_format_export($events, $format, $timezone); + $res = self::formatListForExport($events, $format, $timezone); // If there are results the precess was successfull. if (!empty($res)) { @@ -799,10 +815,10 @@ class Event extends BaseObject /** * @brief Format an item array with event data to HTML. * - * @param arr $item Array with item and event data. + * @param array $item Array with item and event data. * @return string HTML output. */ - public static function getItemHTML($item) { + public static function getItemHTML(array $item) { $same_date = false; $finish = false; @@ -858,18 +874,18 @@ class Event extends BaseObject if (substr($dtstart_title, 0, 10) === substr($dtend_title, 0, 10)) { $same_date = true; } + } else { + $dtend_title = ''; + $dtend_dt = ''; + $end_time = ''; + $end_short = ''; } // Format the event location. - $location = event_location2array($item['event-location']); + $location = self::locationToArray($item['event-location']); // Construct the profile link (magic-auth). - $sp = false; - $profile_link = best_link_url($item, $sp); - - if (!$sp) { - $profile_link = Profile::zrl($profile_link); - } + $profile_link = Contact::magicLinkById($item['author-id']); $tpl = get_markup_template('event_stream_item.tpl'); $return = replace_macros($tpl, [ @@ -916,7 +932,7 @@ class Event extends BaseObject * 'address' => The address of the location,
* 'coordinates' => Latitude‎ and longitude‎ (e.g. '48.864716,2.349014').
*/ - public static function locationToArray($s = '') { + private static function locationToArray($s = '') { if ($s == '') { return []; }