X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FEvent.php;h=5f0238aad26635b97908a902fe4fb28a1a0c9269;hb=55e54bb9500f54bb075dcbc2054018de0969d9e7;hp=016d1f8d9e3974a47ec0197223a1ec4fda5ece83;hpb=a6996601d5260e4dde621f4d04b35adbbc3c10e0;p=friendica.git diff --git a/src/Model/Event.php b/src/Model/Event.php index 016d1f8d9e..5f0238aad2 100644 --- a/src/Model/Event.php +++ b/src/Model/Event.php @@ -7,18 +7,17 @@ namespace Friendica\Model; use Friendica\BaseObject; use Friendica\Content\Text\BBCode; -use Friendica\Core\Addon; +use Friendica\Core\Hook; use Friendica\Core\L10n; +use Friendica\Core\Logger; use Friendica\Core\PConfig; +use Friendica\Core\Renderer; use Friendica\Core\System; use Friendica\Database\DBA; -use Friendica\Model\Contact; use Friendica\Util\DateTimeFormat; use Friendica\Util\Map; - -require_once 'boot.php'; -require_once 'include/dba.php'; -require_once 'include/items.php'; +use Friendica\Util\Strings; +use Friendica\Util\XML; /** * @brief functions for interacting with the event database table @@ -34,13 +33,13 @@ 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_start = L10n::getDay( !empty($event['adjust']) ? DateTimeFormat::local($event['start'], $bd_format) : DateTimeFormat::utc($event['start'], $bd_format) ); if (!empty($event['finish'])) { - $event_end = day_translate( + $event_end = L10n::getDay( !empty($event['adjust']) ? DateTimeFormat::local($event['finish'], $bd_format) : DateTimeFormat::utc($event['finish'], $bd_format) ); @@ -50,11 +49,11 @@ class Event extends BaseObject if ($simple) { if (!empty($event['summary'])) { - $o = "

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

"; + $o = "

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

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

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

" . $event_start . "

"; @@ -64,7 +63,7 @@ class Event extends BaseObject } if (!empty($event['location'])) { - $o .= "

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

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

"; + $o .= "

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

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

"; } return $o; @@ -72,7 +71,7 @@ class Event extends BaseObject $o = '
' . "\r\n"; - $o .= '
' . BBCode::convert($event['summary'], false, $simple) . '
' . "\r\n"; + $o .= '
' . BBCode::convert(Strings::escapeHtml($event['summary']), false, $simple) . '
' . "\r\n"; $o .= '
' . L10n::t('Starts:') . ' ' . BBCode::convert($event['desc'], false, $simple) . '
' . "\r\n"; + $o .= '
' . BBCode::convert(Strings::escapeHtml($event['desc']), false, $simple) . '
' . "\r\n"; } if (!empty($event['location'])) { $o .= '
' . L10n::t('Location:') . ' ' - . BBCode::convert($event['location'], false, $simple) + . BBCode::convert(Strings::escapeHtml($event['location']), false, $simple) . '
' . "\r\n"; // Include a map of the location if the [map] BBCode is used. @@ -224,7 +223,7 @@ class Event extends BaseObject } DBA::delete('event', ['id' => $event_id]); - logger("Deleted event ".$event_id, LOGGER_DEBUG); + Logger::log("Deleted event ".$event_id, Logger::DEBUG); } /** @@ -257,10 +256,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)); @@ -300,8 +299,8 @@ class Event extends BaseObject $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(self::getBBCode($event)) . ''; + $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']]; @@ -312,52 +311,57 @@ class Event extends BaseObject $item_id = 0; } - Addon::callHooks('event_updated', $event['id']); + Hook::callAll('event_updated', $event['id']); } else { - $event['guid'] = defaults($arr, 'guid', System::createGUID(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['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'] = '' . xmlify(ACTIVITY_OBJ_EVENT) . '' . xmlify($event['uri']) . ''; - $item_arr['object'] .= '' . xmlify(self::getBBCode($event)) . ''; - $item_arr['object'] .= '' . "\n"; - - $item_id = Item::insert($item_arr); - - Addon::callHooks("event_created", $event['id']); + $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); + } + + Hook::callAll("event_created", $event['id']); } return $item_id; @@ -561,7 +565,7 @@ class Event extends BaseObject $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; @@ -584,10 +588,9 @@ class Event extends BaseObject $drop = [System::baseUrl() . '/events/drop/' . $event['id'] , L10n::t('Delete event') , '', '']; } - $title = strip_tags(html_entity_decode(BBCode::convert($event['summary']), ENT_QUOTES, 'UTF-8')); + $title = BBCode::convert(Strings::escapeHtml($event['summary'])); if (!$title) { - list($title, $_trash) = explode(" $event['id'], 'start' => $start, @@ -838,14 +842,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') @@ -857,7 +861,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) @@ -866,13 +870,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) @@ -897,8 +901,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:'), @@ -978,4 +982,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; + } }