X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FEvent.php;h=886f124153ac0a41bbbd1e7f58f6f4907aeba085;hb=b6e1571b1edf14f8080800cdd219194e443acbd1;hp=1c848dcad74cec58ad790d726bd2be68e5718ef2;hpb=b02cdc8a7f84a4931e80027de42a80daa58581e1;p=friendica.git diff --git a/src/Model/Event.php b/src/Model/Event.php index 1c848dcad7..886f124153 100644 --- a/src/Model/Event.php +++ b/src/Model/Event.php @@ -5,17 +5,19 @@ namespace Friendica\Model; -use dba; use Friendica\BaseObject; use Friendica\Content\Text\BBCode; use Friendica\Core\Addon; use Friendica\Core\L10n; +use Friendica\Core\Logger; use Friendica\Core\PConfig; +use Friendica\Core\Renderer; use Friendica\Core\System; -use Friendica\Database\DBM; -use Friendica\Model\Item; +use Friendica\Database\DBA; +use Friendica\Model\Contact; use Friendica\Util\DateTimeFormat; use Friendica\Util\Map; +use Friendica\Util\XML; require_once 'boot.php'; require_once 'include/dba.php'; @@ -35,20 +37,28 @@ class Event extends BaseObject $bd_format = L10n::t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8 AM. - $event_start = day_translate( - $event['adjust'] ? + $event_start = L10n::getDay( + !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 = L10n::getDay( + !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 . "

"; @@ -56,7 +66,7 @@ class Event extends BaseObject $o .= "

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

" . $event_end . "

"; } - if (strlen($event['location'])) { + if (!empty($event['location'])) { $o .= "

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

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

"; } @@ -68,20 +78,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"; @@ -214,8 +226,8 @@ class Event extends BaseObject return; } - dba::delete('event', ['id' => $event_id]); - logger("Deleted event ".$event_id, LOGGER_DEBUG); + DBA::delete('event', ['id' => $event_id]); + Logger::log("Deleted event ".$event_id, Logger::DEBUG); } /** @@ -234,7 +246,7 @@ class Event extends BaseObject $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_new_uri($a->get_hostname(), $event['uid'])); + $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' , ''); @@ -248,10 +260,10 @@ class Event extends BaseObject $event['created'] = DateTimeFormat::utc(defaults($arr, 'created' , 'now')); $event['edited'] = DateTimeFormat::utc(defaults($arr, 'edited' , 'now')); - $event['start'] = DateTimeFormat::utc(defaults($arr, 'start' , NULL_DATE)); - $event['finish'] = DateTimeFormat::utc(defaults($arr, 'finish' , NULL_DATE)); - if ($event['finish'] < NULL_DATE) { - $event['finish'] = NULL_DATE; + $event['start'] = DateTimeFormat::utc(defaults($arr, 'start' , DBA::NULL_DATETIME)); + $event['finish'] = DateTimeFormat::utc(defaults($arr, 'finish' , DBA::NULL_DATETIME)); + if ($event['finish'] < DBA::NULL_DATETIME) { + $event['finish'] = DBA::NULL_DATETIME; } $private = intval(defaults($arr, 'private', 0)); @@ -262,17 +274,17 @@ class Event extends BaseObject $conditions['self'] = true; } - $contact = dba::selectFirst('contact', [], $conditions); + $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 = [ @@ -287,12 +299,12 @@ class Event extends BaseObject 'nofinish' => $event['nofinish'], ]; - dba::update('event', $updated_fields, ['id' => $event['id'], '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)) { - $object = '' . xmlify(ACTIVITY_OBJ_EVENT) . '' . xmlify($event['uri']) . ''; - $object .= '' . xmlify(self::getBBCode($event)) . ''; + $item = Item::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]); + if (DBA::isResult($item)) { + $object = '' . XML::escape(ACTIVITY_OBJ_EVENT) . '' . XML::escape($event['uri']) . ''; + $object .= '' . XML::escape(self::getBBCode($event)) . ''; $object .= '' . "\n"; $fields = ['body' => self::getBBCode($event), 'object' => $object, 'edited' => $event['edited']]; @@ -305,47 +317,53 @@ class Event extends BaseObject Addon::callHooks('event_updated', $event['id']); } else { - $event['guid'] = get_guid(32); + $event['guid'] = defaults($arr, 'guid', System::createUUID()); // New event. Store it. - dba::insert('event', $event); - - $event['id'] = dba::lastInsertId(); - - $item_arr = []; - - $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['type'] = 'activity'; - $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['object'] = '' . xmlify(ACTIVITY_OBJ_EVENT) . '' . xmlify($event['uri']) . ''; - $item_arr['object'] .= '' . xmlify(self::getBBCode($event)) . ''; - $item_arr['object'] .= '' . "\n"; - - $item_id = Item::insert($item_arr); + DBA::insert('event', $event); + + $item_id = 0; + + // Don't create an item for birthday events + if ($event['type'] == 'event') { + $event['id'] = DBA::lastInsertId(); + + $item_arr = []; + + $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['object'] = '' . XML::escape(ACTIVITY_OBJ_EVENT) . '' . XML::escape($event['uri']) . ''; + $item_arr['object'] .= '' . XML::escape(self::getBBCode($event)) . ''; + $item_arr['object'] .= '' . "\n"; + + $item_id = Item::insert($item_arr); + } Addon::callHooks("event_created", $event['id']); } @@ -464,15 +482,14 @@ 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)) { + if (DBA::isResult($r)) { $return = self::removeDuplicates($r); } @@ -505,8 +522,7 @@ class Event extends BaseObject // Query for the event by date. // @todo Slow query (518 seconds to run), to be optimzed - $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.ignore = %d AND ((`adjust` = 0 AND (`finish` >= '%s' OR (nofinish AND start >= '%s')) AND `start` <= '%s') @@ -514,15 +530,15 @@ 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)) { + if (DBA::isResult($r)) { $return = self::removeDuplicates($r); } @@ -542,10 +558,18 @@ 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)) { + // Using default values when no item had been found + $item = ['plink' => '', 'author-name' => '', 'author-avatar' => '', 'author-link' => '']; + } + + $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); - $day = day_translate($day); + $day = L10n::getDay($day); if ($event['nofinish']) { $end = null; @@ -574,6 +598,12 @@ class Event extends BaseObject $title = strip_tags(html_entity_decode($title, ENT_QUOTES, 'UTF-8')); } + $author_link = $event['author-link']; + $plink = $event['plink']; + + $event['author-link'] = Contact::magicLink($author_link); + $event['plink'] = Contact::magicLink($author_link, $plink); + $html = self::getHTML($event); $event['desc'] = BBCode::convert($event['desc']); $event['location'] = BBCode::convert($event['location']); @@ -735,9 +765,9 @@ class Event extends BaseObject $conditions += ['allow_cid' => '', 'allow_gid' => '']; } - $events = dba::select('event', $fields, $conditions); - if (DBM::is_result($events)) { - $return = dba::inArray($events); + $events = DBA::select('event', $fields, $conditions); + if (DBA::isResult($events)) { + $return = DBA::toArray($events); } return $return; @@ -759,8 +789,8 @@ 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']; } @@ -816,14 +846,14 @@ class Event extends BaseObject $tformat = L10n::t('g:i A'); // 8:01 AM. // Convert the time to different formats. - $dtstart_dt = day_translate( + $dtstart_dt = L10n::getDay( $item['event-adjust'] ? DateTimeFormat::local($item['event-start'], $dformat) : DateTimeFormat::utc($item['event-start'], $dformat) ); $dtstart_title = DateTimeFormat::utc($item['event-start'], $item['event-adjust'] ? DateTimeFormat::ATOM : 'Y-m-d\TH:i:s'); // Format: Jan till Dec. - $month_short = day_short_translate( + $month_short = L10n::getDayShort( $item['event-adjust'] ? DateTimeFormat::local($item['event-start'], 'M') : DateTimeFormat::utc($item['event-start'], 'M') @@ -835,7 +865,7 @@ class Event extends BaseObject $start_time = $item['event-adjust'] ? DateTimeFormat::local($item['event-start'], $tformat) : DateTimeFormat::utc($item['event-start'], $tformat); - $start_short = day_short_translate( + $start_short = L10n::getDayShort( $item['event-adjust'] ? DateTimeFormat::local($item['event-start'], $dformat_short) : DateTimeFormat::utc($item['event-start'], $dformat_short) @@ -844,13 +874,13 @@ class Event extends BaseObject // If the option 'nofinisch' isn't set, we need to format the finish date/time. if (!$item['event-nofinish']) { $finish = true; - $dtend_dt = day_translate( + $dtend_dt = L10n::getDay( $item['event-adjust'] ? DateTimeFormat::local($item['event-finish'], $dformat) : DateTimeFormat::utc($item['event-finish'], $dformat) ); $dtend_title = DateTimeFormat::utc($item['event-finish'], $item['event-adjust'] ? DateTimeFormat::ATOM : 'Y-m-d\TH:i:s'); - $end_short = day_short_translate( + $end_short = L10n::getDayShort( $item['event-adjust'] ? DateTimeFormat::local($item['event-finish'], $dformat_short) : DateTimeFormat::utc($item['event-finish'], $dformat_short) @@ -862,6 +892,11 @@ 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. @@ -870,8 +905,8 @@ class Event extends BaseObject // Construct the profile link (magic-auth). $profile_link = Contact::magicLinkById($item['author-id']); - $tpl = get_markup_template('event_stream_item.tpl'); - $return = replace_macros($tpl, [ + $tpl = Renderer::getMarkupTemplate('event_stream_item.tpl'); + $return = Renderer::replaceMacros($tpl, [ '$id' => $item['event-id'], '$title' => prepare_text($item['event-summary']), '$dtstart_label' => L10n::t('Starts:'), @@ -951,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; + } }