X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FEvent.php;h=c5a8ef7880d5f1a3c3b9e401b446d686850b7317;hb=ee5207410c71492b2e771479ff1890d8ef4552da;hp=ec39cc7133d6efcdf1a555d87f71e7ba27f4a682;hpb=3f3422975266835fc125d1d61aae85ccc10d96d9;p=friendica.git diff --git a/src/Model/Event.php b/src/Model/Event.php index ec39cc7133..c5a8ef7880 100644 --- a/src/Model/Event.php +++ b/src/Model/Event.php @@ -1,15 +1,30 @@ . + * */ namespace Friendica\Model; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; -use Friendica\Core\L10n; use Friendica\Core\Logger; -use Friendica\Core\PConfig; +use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\System; use Friendica\Database\DBA; @@ -21,7 +36,7 @@ use Friendica\Util\Strings; use Friendica\Util\XML; /** - * @brief functions for interacting with the event database table + * functions for interacting with the event database table */ class Event { @@ -32,15 +47,15 @@ class Event return ''; } - $bd_format = L10n::t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8 AM. + $bd_format = DI::l10n()->t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8 AM. - $event_start = L10n::getDay( + $event_start = DI::l10n()->getDay( !empty($event['adjust']) ? DateTimeFormat::local($event['start'], $bd_format) : DateTimeFormat::utc($event['start'], $bd_format) ); if (!empty($event['finish'])) { - $event_end = L10n::getDay( + $event_end = DI::l10n()->getDay( !empty($event['adjust']) ? DateTimeFormat::local($event['finish'], $bd_format) : DateTimeFormat::utc($event['finish'], $bd_format) ); @@ -59,14 +74,14 @@ class Event $o .= "
" . BBCode::convert(Strings::escapeHtml($event['desc']), false, $simple) . "
"; } - $o .= "

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

" . $event_start . "

"; + $o .= "

" . DI::l10n()->t('Starts:') . "

" . $event_start . "

"; if (!$event['nofinish']) { - $o .= "

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

" . $event_end . "

"; + $o .= "

" . DI::l10n()->t('Finishes:') . "

" . $event_end . "

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

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

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

"; + $o .= "

" . DI::l10n()->t('Location:') . "

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

"; } return $o; @@ -76,13 +91,13 @@ class Event $o .= '
' . BBCode::convert(Strings::escapeHtml($event['summary']), false, $simple) . '
' . "\r\n"; - $o .= '
' . L10n::t('Starts:') . ' ' . DI::l10n()->t('Starts:') . ' ' . $event_start . '
' . "\r\n"; if (!$event['nofinish']) { - $o .= '
' . L10n::t('Finishes:') . ' ' . DI::l10n()->t('Finishes:') . ' ' . $event_end . '
' . "\r\n"; @@ -93,7 +108,7 @@ class Event } if (!empty($event['location'])) { - $o .= '
' . L10n::t('Location:') . ' ' + $o .= '
' . DI::l10n()->t('Location:') . ' ' . BBCode::convert(Strings::escapeHtml($event['location']), false, $simple) . '
' . "\r\n"; @@ -111,7 +126,7 @@ class Event } /** - * @brief Convert an array with event data to bbcode. + * Convert an array with event data to bbcode. * * @param array $event Array which contains the event data. * @return string The event as a bbcode formatted string. @@ -148,7 +163,7 @@ class Event } /** - * @brief Extract bbcode formatted event data from a string. + * Extract bbcode formatted event data from a string. * * @params: string $s The string which should be parsed for event data. * @param $text @@ -212,7 +227,7 @@ class Event } /** - * @brief Delete an event from the event table. + * Delete an event from the event table. * * Note: This function does only delete the event from the event table not its * related entry in the item table. @@ -232,7 +247,7 @@ class Event } /** - * @brief Store the event. + * Store the event. * * Store the event in the event table and create an event item in the item table. * @@ -242,6 +257,16 @@ class Event */ public static function store($arr) { + $network = $arr['network'] ?? Protocol::DFRN; + $protocol = $arr['protocol'] ?? Conversation::PARCEL_UNKNOWN; + $direction = $arr['direction'] ?? Conversation::UNKNOWN; + $source = $arr['source'] ?? ''; + + unset($arr['network']); + unset($arr['protocol']); + unset($arr['direction']); + unset($arr['source']); + $event = []; $event['id'] = intval($arr['id'] ?? 0); $event['uid'] = intval($arr['uid'] ?? 0); @@ -276,6 +301,9 @@ class Event } $contact = DBA::selectFirst('contact', [], $conditions); + if (!DBA::isResult($contact)) { + Logger::warning('Contact not found', ['condition' => $conditions, 'callstack' => System::callstack(20)]); + } // Existing event being modified. if ($event['id']) { @@ -283,7 +311,7 @@ class Event $existing_event = DBA::selectFirst('event', ['edited'], ['id' => $event['id'], 'uid' => $event['uid']]); if (!DBA::isResult($existing_event) || ($existing_event['edited'] === $event['edited'])) { - $item = Item::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]); + $item = Post::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]); return DBA::isResult($item) ? $item['id'] : 0; } @@ -302,7 +330,7 @@ class Event DBA::update('event', $updated_fields, ['id' => $event['id'], 'uid' => $event['uid']]); - $item = Item::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]); + $item = Post::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]); if (DBA::isResult($item)) { $object = '' . XML::escape(Activity\ObjectType::EVENT) . '' . XML::escape($event['uri']) . ''; $object .= '' . XML::escape(self::getBBCode($event)) . ''; @@ -332,7 +360,6 @@ class Event $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'] = $arr['plink'] ?? ''; $item_arr['post-type'] = Item::PT_EVENT; @@ -356,6 +383,10 @@ class Event $item_arr['origin'] = $event['cid'] === 0 ? 1 : 0; $item_arr['body'] = self::getBBCode($event); $item_arr['event-id'] = $event['id']; + $item_arr['network'] = $network; + $item_arr['protocol'] = $protocol; + $item_arr['direction'] = $direction; + $item_arr['source'] = $source; $item_arr['object'] = '' . XML::escape(Activity\ObjectType::EVENT) . '' . XML::escape($event['uri']) . ''; $item_arr['object'] .= '' . XML::escape(self::getBBCode($event)) . ''; @@ -371,7 +402,7 @@ class Event } /** - * @brief Create an array with translation strings used for events. + * Create an array with translation strings used for events. * * @return array Array with translations strings. * @throws \Friendica\Network\HTTPException\InternalServerErrorException @@ -379,70 +410,70 @@ class Event public static function getStrings() { // First day of the week (0 = Sunday). - $firstDay = PConfig::get(local_user(), 'system', 'first_day_of_week', 0); + $firstDay = DI::pConfig()->get(local_user(), 'system', 'first_day_of_week', 0); $i18n = [ "firstDay" => $firstDay, - "allday" => L10n::t("all-day"), - - "Sun" => L10n::t("Sun"), - "Mon" => L10n::t("Mon"), - "Tue" => L10n::t("Tue"), - "Wed" => L10n::t("Wed"), - "Thu" => L10n::t("Thu"), - "Fri" => L10n::t("Fri"), - "Sat" => L10n::t("Sat"), - - "Sunday" => L10n::t("Sunday"), - "Monday" => L10n::t("Monday"), - "Tuesday" => L10n::t("Tuesday"), - "Wednesday" => L10n::t("Wednesday"), - "Thursday" => L10n::t("Thursday"), - "Friday" => L10n::t("Friday"), - "Saturday" => L10n::t("Saturday"), - - "Jan" => L10n::t("Jan"), - "Feb" => L10n::t("Feb"), - "Mar" => L10n::t("Mar"), - "Apr" => L10n::t("Apr"), - "May" => L10n::t("May"), - "Jun" => L10n::t("Jun"), - "Jul" => L10n::t("Jul"), - "Aug" => L10n::t("Aug"), - "Sep" => L10n::t("Sept"), - "Oct" => L10n::t("Oct"), - "Nov" => L10n::t("Nov"), - "Dec" => L10n::t("Dec"), - - "January" => L10n::t("January"), - "February" => L10n::t("February"), - "March" => L10n::t("March"), - "April" => L10n::t("April"), - "June" => L10n::t("June"), - "July" => L10n::t("July"), - "August" => L10n::t("August"), - "September" => L10n::t("September"), - "October" => L10n::t("October"), - "November" => L10n::t("November"), - "December" => L10n::t("December"), - - "today" => L10n::t("today"), - "month" => L10n::t("month"), - "week" => L10n::t("week"), - "day" => L10n::t("day"), - - "noevent" => L10n::t("No events to display"), - - "dtstart_label" => L10n::t("Starts:"), - "dtend_label" => L10n::t("Finishes:"), - "location_label" => L10n::t("Location:") + "allday" => DI::l10n()->t("all-day"), + + "Sun" => DI::l10n()->t("Sun"), + "Mon" => DI::l10n()->t("Mon"), + "Tue" => DI::l10n()->t("Tue"), + "Wed" => DI::l10n()->t("Wed"), + "Thu" => DI::l10n()->t("Thu"), + "Fri" => DI::l10n()->t("Fri"), + "Sat" => DI::l10n()->t("Sat"), + + "Sunday" => DI::l10n()->t("Sunday"), + "Monday" => DI::l10n()->t("Monday"), + "Tuesday" => DI::l10n()->t("Tuesday"), + "Wednesday" => DI::l10n()->t("Wednesday"), + "Thursday" => DI::l10n()->t("Thursday"), + "Friday" => DI::l10n()->t("Friday"), + "Saturday" => DI::l10n()->t("Saturday"), + + "Jan" => DI::l10n()->t("Jan"), + "Feb" => DI::l10n()->t("Feb"), + "Mar" => DI::l10n()->t("Mar"), + "Apr" => DI::l10n()->t("Apr"), + "May" => DI::l10n()->t("May"), + "Jun" => DI::l10n()->t("Jun"), + "Jul" => DI::l10n()->t("Jul"), + "Aug" => DI::l10n()->t("Aug"), + "Sep" => DI::l10n()->t("Sept"), + "Oct" => DI::l10n()->t("Oct"), + "Nov" => DI::l10n()->t("Nov"), + "Dec" => DI::l10n()->t("Dec"), + + "January" => DI::l10n()->t("January"), + "February" => DI::l10n()->t("February"), + "March" => DI::l10n()->t("March"), + "April" => DI::l10n()->t("April"), + "June" => DI::l10n()->t("June"), + "July" => DI::l10n()->t("July"), + "August" => DI::l10n()->t("August"), + "September" => DI::l10n()->t("September"), + "October" => DI::l10n()->t("October"), + "November" => DI::l10n()->t("November"), + "December" => DI::l10n()->t("December"), + + "today" => DI::l10n()->t("today"), + "month" => DI::l10n()->t("month"), + "week" => DI::l10n()->t("week"), + "day" => DI::l10n()->t("day"), + + "noevent" => DI::l10n()->t("No events to display"), + + "dtstart_label" => DI::l10n()->t("Starts:"), + "dtend_label" => DI::l10n()->t("Finishes:"), + "location_label" => DI::l10n()->t("Location:") ]; return $i18n; } /** - * @brief Removes duplicated birthday events. + * Removes duplicated birthday events. * * @param array $dates Array of possibly duplicated events. * @return array Cleaned events. @@ -464,7 +495,7 @@ class Event } /** - * @brief Get an event by its event ID. + * Get an event by its event ID. * * @param int $owner_uid The User ID of the owner of the event * @param int $event_id The ID of the event in the event table @@ -482,22 +513,20 @@ class Event } // Query for the event by event id - $r = q("SELECT `event`.*, `item`.`id` AS `itemid` FROM `event` - LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid` + $events = DBA::toArray(DBA::p("SELECT `event`.*, `post-view`.`id` AS `itemid` FROM `event` + LEFT JOIN `post-view` ON `post-view`.`event-id` = `event`.`id` AND `post-view`.`uid` = `event`.`uid` WHERE `event`.`uid` = %d AND `event`.`id` = %d $sql_extra", - intval($owner_uid), - intval($event_id) - ); + $owner_uid, $event_id)); - if (DBA::isResult($r)) { - $return = self::removeDuplicates($r); + if (DBA::isResult($events)) { + $return = self::removeDuplicates($events); } return $return; } /** - * @brief Get all events in a specific time frame. + * Get all events in a specific time frame. * * @param int $owner_uid The User ID of the owner of the events. * @param array $event_params An associative array with @@ -523,31 +552,24 @@ class Event // Query for the event by date. // @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') - OR (`adjust` = 1 AND (`finish` >= '%s' OR (nofinish AND start >= '%s')) AND `start` <= '%s')) - $sql_extra ", - intval($owner_uid), - intval($event_params["ignore"]), - 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"]) - ); + $events = DBA::toArray(DBA::p("SELECT `event`.*, `post-view`.`id` AS `itemid` FROM `event` + LEFT JOIN `post-view` ON `post-view`.`event-id` = `event`.`id` AND `post-view`.`uid` = `event`.`uid` + WHERE `event`.`uid` = ? AND `event`.`ignore` = ? + AND ((NOT `adjust` AND (`finish` >= ? OR (`nofinish` AND `start` >= ?)) AND `start` <= ?) + OR (`adjust` AND (`finish` >= ? OR (`nofinish` AND `start` >= ?)) AND `start` <= ?))" . $sql_extra, + $owner_uid, $event_params["ignore"], + $event_params["start"], $event_params["start"], $event_params["finish"], + $event_params["adjust_start"], $event_params["adjust_start"], $event_params["adjust_finish"])); - if (DBA::isResult($r)) { - $return = self::removeDuplicates($r); + if (DBA::isResult($events)) { + $return = self::removeDuplicates($events); } return $return; } /** - * @brief Convert an array query results in an array which could be used by the events template. + * Convert an array query results in an array which could be used by the events template. * * @param array $event_result Event query array. * @return array Event array for the template. @@ -559,9 +581,9 @@ class Event $event_list = []; $last_date = ''; - $fmt = L10n::t('l, F j'); + $fmt = DI::l10n()->t('l, F j'); foreach ($event_result as $event) { - $item = Item::selectFirst(['plink', 'author-name', 'author-avatar', 'author-link'], ['id' => $event['itemid']]); + $item = Post::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' => '']; @@ -572,7 +594,7 @@ class Event $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 = L10n::getDay($day); + $day = DI::l10n()->getDay($day); if ($event['nofinish']) { $end = null; @@ -590,21 +612,19 @@ class Event $copy = null; $drop = null; if (local_user() && local_user() == $event['uid'] && $event['type'] == 'event') { - $edit = !$event['cid'] ? [DI::baseUrl() . '/events/event/' . $event['id'], L10n::t('Edit event') , '', ''] : null; - $copy = !$event['cid'] ? [DI::baseUrl() . '/events/copy/' . $event['id'] , L10n::t('Duplicate event'), '', ''] : null; - $drop = [DI::baseUrl() . '/events/drop/' . $event['id'] , L10n::t('Delete event') , '', '']; + $edit = !$event['cid'] ? [DI::baseUrl() . '/events/event/' . $event['id'], DI::l10n()->t('Edit event') , '', ''] : null; + $copy = !$event['cid'] ? [DI::baseUrl() . '/events/copy/' . $event['id'] , DI::l10n()->t('Duplicate event'), '', ''] : null; + $drop = [DI::baseUrl() . '/events/drop/' . $event['id'] , DI::l10n()->t('Delete event') , '', '']; } $title = BBCode::convert(Strings::escapeHtml($event['summary'])); if (!$title) { - list($title, $_trash) = explode(" $is_first, 'item' => $event, 'html' => $html, - 'plink' => [$event['plink'], L10n::t('link to source'), '', ''], + 'plink' => Item::getPlink($event), ]; } @@ -632,7 +652,7 @@ class Event } /** - * @brief Format event to export format (ical/csv). + * Format event to export format (ical/csv). * * @param array $events Query result for events. * @param string $format The output format (ical/csv). @@ -739,7 +759,7 @@ class Event } /** - * @brief Get all events for a user ID. + * Get all events for a user ID. * * The query for events is done permission sensitive. * If the user is the owner of the calendar they @@ -833,7 +853,7 @@ class Event } /** - * @brief Format an item array with event data to HTML. + * Format an item array with event data to HTML. * * @param array $item Array with item and event data. * @return string HTML output. @@ -845,19 +865,19 @@ class Event $finish = false; // Set the different time formats. - $dformat = L10n::t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8:01 AM. - $dformat_short = L10n::t('D g:i A'); // Fri 8:01 AM. - $tformat = L10n::t('g:i A'); // 8:01 AM. + $dformat = DI::l10n()->t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8:01 AM. + $dformat_short = DI::l10n()->t('D g:i A'); // Fri 8:01 AM. + $tformat = DI::l10n()->t('g:i A'); // 8:01 AM. // Convert the time to different formats. - $dtstart_dt = L10n::getDay( + $dtstart_dt = DI::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 = L10n::getDayShort( + $month_short = DI::l10n()->getDayShort( $item['event-adjust'] ? DateTimeFormat::local($item['event-start'], 'M') : DateTimeFormat::utc($item['event-start'], 'M') @@ -869,7 +889,7 @@ class Event $start_time = $item['event-adjust'] ? DateTimeFormat::local($item['event-start'], $tformat) : DateTimeFormat::utc($item['event-start'], $tformat); - $start_short = L10n::getDayShort( + $start_short = DI::l10n()->getDayShort( $item['event-adjust'] ? DateTimeFormat::local($item['event-start'], $dformat_short) : DateTimeFormat::utc($item['event-start'], $dformat_short) @@ -878,13 +898,13 @@ class Event // If the option 'nofinisch' isn't set, we need to format the finish date/time. if (!$item['event-nofinish']) { $finish = true; - $dtend_dt = L10n::getDay( + $dtend_dt = DI::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 = L10n::getDayShort( + $end_short = DI::l10n()->getDayShort( $item['event-adjust'] ? DateTimeFormat::local($item['event-finish'], $dformat_short) : DateTimeFormat::utc($item['event-finish'], $dformat_short) @@ -913,11 +933,11 @@ class Event $return = Renderer::replaceMacros($tpl, [ '$id' => $item['event-id'], '$title' => BBCode::convert($item['event-summary']), - '$dtstart_label' => L10n::t('Starts:'), + '$dtstart_label' => DI::l10n()->t('Starts:'), '$dtstart_title' => $dtstart_title, '$dtstart_dt' => $dtstart_dt, '$finish' => $finish, - '$dtend_label' => L10n::t('Finishes:'), + '$dtend_label' => DI::l10n()->t('Finishes:'), '$dtend_title' => $dtend_title, '$dtend_dt' => $dtend_dt, '$month_short' => $month_short, @@ -931,10 +951,10 @@ class Event '$author_link' => $profile_link, '$author_avatar' => $item['author-avatar'], '$description' => BBCode::convert($item['event-desc']), - '$location_label' => L10n::t('Location:'), - '$show_map_label' => L10n::t('Show map'), - '$hide_map_label' => L10n::t('Hide map'), - '$map_btn_label' => L10n::t('Show map'), + '$location_label' => DI::l10n()->t('Location:'), + '$show_map_label' => DI::l10n()->t('Show map'), + '$hide_map_label' => DI::l10n()->t('Hide map'), + '$map_btn_label' => DI::l10n()->t('Show map'), '$location' => $location ]); @@ -942,7 +962,7 @@ class Event } /** - * @brief Format a string with map bbcode to an array with location data. + * Format a string with map bbcode to an array with location data. * * Note: The string must only contain location data. A string with no bbcode will be * handled as location name. @@ -993,7 +1013,7 @@ class Event } /** - * @brief Add new birthday event for this person + * Add new birthday event for this person * * @param array $contact Contact array, expects: id, uid, url, name * @param string $birthday Birthday of the contact @@ -1025,8 +1045,8 @@ class Event '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]'), + 'summary' => DI::l10n()->t('%s\'s birthday', $contact['name']), + 'desc' => DI::l10n()->t('Happy Birthday %s', ' [url=' . $contact['url'] . ']' . $contact['name'] . '[/url]'), 'type' => 'birthday', 'adjust' => 0 ];