input->get('print','','int')) { return; } else { echo 'Powered by JEM'; } } /** * Load stylesheet and JS for lightbox. */ static public function lightbox() { $settings = JemHelper::config(); $app = Factory::getApplication(); if ($settings->lightbox == 1) { $document = Factory::getDocument(); $wa = Factory::getApplication()->getDocument()->getWebAssetManager()->useScript('jquery'); $document->addStyleSheet(Uri::base() .'media/com_jem/css/lightbox.min.css'); $document->addScript(Uri::base() . 'media/com_jem/js/lightbox.min.js'); echo ''; } else { return; } } /** * Creates the button bar shown on frontend view's top right corner. * * @param string $view Name of the view * ('attendees', 'calendar', 'categories', 'category', 'category-cal', 'day', * 'editevent', 'editvenue', 'event', 'eventslist', 'myattendances', 'myevents', 'myvenues', * 'search', 'venue', 'venue-cal', 'venues', 'weekcal') * @param object $permissions Object holding relevant permissions * (canAddEvent, canAddVenue, canPublishEvent, canPublishVenue) * @param object $params Object containing other relevant parameters * (id: for '&id=', for Archive and Export button, * slug: for '&id=', for Mail and iCal button, * task: e.g. 'archive', for Archive button, * print_link: for Print button * show, hide: to override button visibility; array of one or more of * 'addEvent', 'addVenue', 'addUsers' * 'archive' 'mail', 'print', 'ical', ('export', 'back',) * 'publish', 'unpublish', 'trash' - note: some buttons may not work or need additional changes) * * @return string Resulting HTML code. */ static public function createButtonBar($view, $permissions, $params) { foreach (array('canAddEvent', 'canAddVenue', 'canAddUsers', 'canPublishEvent', 'canPublishVenue') as $key) { ${$key} = isset($permissions->$key) ? $permissions->$key: null; } if (is_object($params)) { foreach (array('id', 'slug', 'task', 'print_link', 'show', 'hide', 'ical_link', 'archive_link') as $key) { ${$key} = isset($params->$key) ? $params->$key : null; } } elseif (is_array($params)) { foreach (array('id', 'slug', 'task', 'print_link', 'show', 'hide', 'ical_link', 'archive_link') as $key) { ${$key} = key_exists($key, $params) ? $params[$key] : null; } } else { foreach (array('id', 'slug', 'task', 'print_link') as $key) { ${$key} = null; } } $btns_show = isset($show) ? (array)$show : array(); $btns_hide = isset($hide) ? (array)$hide : array(); $archive = !empty($task) && ($task == 'archive'); $buttons = array(); $idx = 0; # Left block ------------------ if (!$archive) { if (in_array('addEvent', $btns_show) || (!in_array('addEvent', $btns_hide) && in_array($view, array('calendar', 'categories', 'category', 'day', 'event', 'eventslist', 'myevents', 'myvenues', 'venue', 'venues')))) { $buttons[$idx][] = JemOutput::submitbutton(!empty($canAddEvent), null); } if (in_array('addVenue', $btns_show) || (!in_array('addVenue', $btns_hide) && in_array($view, array('calendar', 'categories', 'category', 'day', 'event', 'eventslist', 'myevents', 'myvenues', 'venue', 'venues', 'venueslist')))) { $buttons[$idx][] = JemOutput::addvenuebutton(!empty($canAddVenue), null, null); } if (in_array('addUsers', $btns_show) || (!in_array('addUsers', $btns_hide) && in_array($view, array('attendees')))) { $buttons[$idx][] = JemOutput::addusersbutton(!empty($canAddUsers), $id); } } ++$idx; # Middle block ---------------- if (in_array('archive', $btns_show) || (!in_array('archive', $btns_hide) && in_array($view, array('categories', 'category', 'eventslist', 'myattendances', 'myevents', 'venue')))) { $buttons[$idx][] = JemOutput::archivebutton($archive_link, $task , $id); // task: archive, id: for '&id=' } if (in_array('mail', $btns_show) || (!in_array('mail', $btns_hide) && in_array($view, array('category', 'event', 'venue', 'venueslist')))) { $buttons[$idx][] = JemOutput::mailbutton($slug, $view, null); // slug: for '&id=' } if (in_array('print', $btns_show) || (!in_array('print', $btns_hide) && in_array($view, array('attendees', 'calendar', 'categories', 'category', 'category-cal', 'day', 'event', 'eventslist', 'myattendances', 'myevents', 'myvenues', 'venue', 'venue-cal', 'venues', 'venueslist', 'weekcal')))) { $buttons[$idx][] = JemOutput::printbutton($print_link, null); } if (in_array('ical', $btns_show) || (!in_array('ical', $btns_hide) && in_array($view, array('event', 'eventslist', 'calendar', 'venue', 'weekcal', 'category')))) { $buttons[$idx][] = JemOutput::icalbutton(($ical_link? $ical_link: $slug), $view, $task); // slug: for '&id=' } if (in_array('export', $btns_show) || (!in_array('export', $btns_hide) && in_array($view, array('attendees')))) { $buttons[$idx][] = JemOutput::exportbutton($id); // id: for '&id=' } if (in_array('back', $btns_show) || (!in_array('back', $btns_hide) && in_array($view, array('attendees')))) { $buttons[$idx][] = JemOutput::backbutton(null, $view); } ++$idx; # Right block ----------------- if (!empty($canPublishEvent) || !empty($canPublishVenue)) { if (in_array('publish', $btns_show) || (!in_array('publish', $btns_hide) && in_array($view, array('myevents', 'myvenues')))) { $buttons[$idx][] = JemOutput::publishbutton($view); } if (in_array('unpublish', $btns_show) || (!in_array('unpublish', $btns_hide) && in_array($view, array('myevents', 'myvenues')))) { $buttons[$idx][] = JemOutput::unpublishbutton($view); } if (in_array('trash', $btns_show) || (!in_array('trash', $btns_hide) && in_array($view, array('myevents')))) { $buttons[$idx][] = JemOutput::trashbutton($view); } } # ----------------------------- foreach ($buttons as $i => $btns) { $buttons[$i] = implode('', array_filter($btns)); } $result = implode(' ', array_filter($buttons)); return $result; } /** * Writes Event submission button * * @param int $dellink Access of user * @param array $params needed params **/ static public function submitbutton($dellink, $params) { if ($dellink) { $settings = JemHelper::globalattribs(); $settings2 = JemHelper::config(); $uri = Uri::getInstance(); $app = Factory::getApplication(); if ($app->input->get('print','','int')) { return; } if ($settings->get('global_show_icons',1)) { $image = jemhtml::icon( 'com_jem/submitevent.png', 'fa fa-fw fa-lg fa-calendar-plus jem-submitbutton', Text::_('COM_JEM_DELIVER_NEW_EVENT'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_DELIVER_NEW_EVENT'); } $url = 'index.php?option=com_jem&task=event.add&return='.base64_encode($uri).'&a_id=0'; $overlib = Text::_('COM_JEM_SUBMIT_EVENT_DESC'); $output = HTMLHelper::_('link', Route::_($url), $image, self::tooltip(Text::_('COM_JEM_DELIVER_NEW_EVENT'), $overlib, '', 'bottom')); return $output; } } /** * Writes addvenuebutton * * @param int $addvenuelink Access of user * @param array $params needed params * @param $settings, retrieved from settings-table * * Active in views: * venue, venues **/ static public function addvenuebutton($addvenuelink, $params, $settings2) { if ($addvenuelink) { $app = Factory::getApplication(); $settings = JemHelper::globalattribs(); $uri = Uri::getInstance(); if ($app->input->get('print','','int')) { return; } if ($settings->get('global_show_icons',1)) { $image = jemhtml::icon( 'com_jem/addvenue.png', 'fa fa-fw fa-lg fa-plus-square jem-addvenuebutton', Text::_('COM_JEM_DELIVER_NEW_VENUE'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_DELIVER_NEW_VENUE'); } $url = 'index.php?option=com_jem&task=venue.add&return='.base64_encode($uri).'&a_id=0'; $overlib = Text::_('COM_JEM_DELIVER_NEW_VENUE_DESC'); $output = HTMLHelper::_('link', Route::_($url), $image, self::tooltip(Text::_('COM_JEM_DELIVER_NEW_VENUE'), $overlib, '', 'bottom')); return $output; } } /** * Writes addusersbutton * * @param int $addvenuelink Access of user * @param int $eventid id of corresponding event * @param array $params needed params * @param $settings, retrieved from settings-table * * Active in views: * venue, venues **/ static public function addusersbutton($adduserslink, $eventid) { if ($adduserslink) { $app = Factory::getApplication(); $settings = JemHelper::globalattribs(); $uri = Uri::getInstance(); if ($app->input->get('print','','int')) { return; } if ($settings->get('global_show_icons',1)) { $image = jemhtml::icon( 'com_jem/icon-16-new.png', 'fa fa-fw fa-lg fa-user-plus jem-addusersbutton', Text::_('COM_JEM_ADD_USER_REGISTRATIONS'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_ADD_USER_REGISTRATIONS'); } $url = 'index.php?option=com_jem&view=attendees&layout=addusers&tmpl=component&return='.base64_encode($uri).'&id='.$eventid.'&'.Session::getFormToken().'=1'; $overlib = Text::_('COM_JEM_ADD_USER_REGISTRATIONS_DESC'); // $output = HTMLHelper::_('link', Route::_($url), $image, self::tooltip(Text::_('COM_JEM_ADD_USER_REGISTRATIONS'), $overlib, 'flyermodal', 'bottom').' rel="{handler: \'iframe\', size: {x:800, y:450}}"'); $output= HTMLHelper::_( 'bootstrap.renderModal', 'adduser-modal', array( 'url' => $url, 'title' => Text::_('COM_JEM_SELECT'), 'width' => '800px', 'height' => '450px', 'footer' => '' ) ); $output.='' . $image . ''; return $output; } } /** * Creates a remove button * * @param int $text alternative text * @param array $attributes additional attributes * * Active in views: * **/ static public function removebutton($text, $attributes = array()) { $app = Factory::getApplication(); $output = jemhtml::icon( 'com_jem/publish_r.png', 'fa fa-lg fa-times-circle jem-removebutton', $text, $attributes, !$app->isClient('site')); return $output; } /** * Prepares addeventbutton for calendar days. * * @param string $urlparams additional url oarams, e.g. 'locid=123' * * Active in views: * all calendar views **/ static public function prepareAddEventButton($urlparams = '') { $uri = Uri::getInstance(); $image = HTMLHelper::_('image', 'com_jem/icon-16-new.png', Text::_('COM_JEM_DELIVER_NEW_EVENT'), NULL, true); $url = 'index.php?option=com_jem&task=event.add&a_id=0&date={date}&return='.base64_encode($uri); if (!empty($urlparams) && preg_match('/^[a-z]+=\w+$/i', $urlparams)) { $url .= '&'.$urlparams; } $html = '
'; $html .= HTMLHelper::_('link', Route::_($url), $image, self::tooltip(Text::_('COM_JEM_DELIVER_NEW_EVENT'), Text::_('COM_JEM_SUBMIT_EVENT_DESC'), '', 'bottom')); $html .= '
'; return $html; } /** * Writes Archivebutton * * @param string $archive_link The link archive button * @param string $task The current task (optional) * @param int $id id of category/event/venue if useful (optional) * * Views: * Categories, Categoriesdetailed, Category, Eventslist, Search, Venue, Venues */ static public function archivebutton($archive_link, $task = NULL, $id = NULL) { $settings = JemHelper::globalattribs(); $settings2 = JemHelper::config(); $app = Factory::getApplication(); $uri = Uri::getInstance(); $jemPath = $uri->getPath(); if ($settings->get('global_show_archive_icon',1)) { if ($app->input->get('print','','int')) { return; } $view = $app->input->getWord('view'); if (empty($view)) { return; // there must be a view - just to be sure... } if ($task == 'archive') { if ($settings->get('global_show_icons',1)) { $image = jemhtml::icon( 'com_jem/el.png', 'fa fa-fw fa-lg fa-calendar jem-archivebutton-return', Text::_('COM_JEM_SHOW_EVENTS'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_SHOW_EVENTS'); } // TODO: Title and overlib just fit to events view $overlib = Text::_('COM_JEM_SHOW_EVENTS_DESC'); $title = Text::_('COM_JEM_SHOW_EVENTS'); if ($id) { $url = $archive_link . (str_contains($archive_link ?? '','?')?'&':'?') . 'id=' . $id . '&filter_reset=1'; } else { $url = $archive_link . (str_contains($archive_link ?? '','?')?'&':'?') . 'filter_reset=1'; } } else { if ($settings->get('global_show_icons',1)) { $image = jemhtml::icon( 'com_jem/archive_front.png', 'fa fa-fw fa-lg fa-archive jem-archivebutton', Text::_('COM_JEM_SHOW_ARCHIVE'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_SHOW_ARCHIVE'); } $overlib = Text::_('COM_JEM_SHOW_ARCHIVE_DESC'); $title = Text::_('COM_JEM_SHOW_ARCHIVE'); if ($id) { $url = $archive_link . (str_contains($archive_link ?? '','?')?'&':'?') . 'id=' . $id . '&task=archive&filter_reset=1'; } else { $url = $archive_link . (str_contains($archive_link ?? '','?')?'&':'?') . 'task=archive&filter_reset=1'; } } $output = HTMLHelper::_('link', Route::_($url), $image, self::tooltip($title, $overlib, '', 'bottom')); return $output; } } /** * Creates the edit button * * @param int $Itemid * @param int $id * @param array $params * @param int $allowedtoedit * @param string $view * * Views: * Event, Venue */ static public function editbutton($item, $params, $attribs, $allowedtoedit, $view) { if ($allowedtoedit) { $app = Factory::getApplication(); if ($app->input->get('print','','int')) { return; } // Ignore if the state is negative (trashed). if ($item->published < 0) { return; } // Initialise variables. $user = JemFactory::getUser(); $userId = $user->get('id'); $uri = Uri::getInstance(); $settings = JemHelper::globalattribs(); // On Joomla Edit icon is always used regardless if "Show icons" is set to Yes or No. $showIcon = $settings->get('global_show_icons', 1); if (version_compare(JVERSION, '5.0.0', '>=')) { // Joomla 5 with Font Awesome 6 $iconEditEventRoot='fa-sharp fa-solid fa-pen-to-square jem-editbutton'; } elseif (version_compare(JVERSION, '4.0.0', '>=')) { // Joomla 4 with Font Awesome 5 $iconEditEventRoot='fa fa-fw fa-edit jem-editbutton'; } switch ($view) { case 'editevent': if (property_exists($item, 'checked_out') && property_exists($item, 'checked_out_time') && $item->checked_out > 0 && $item->checked_out != $userId) { $checkoutUser = Factory::getContainer()->get(UserFactoryInterface::class)->loadUserById($item->checked_out); $button = HTMLHelper::_('image', 'system/checked_out.png', NULL, NULL, true); $date = HTMLHelper::_('date', $item->checked_out_time); return 'name) . '
' . $date, ENT_COMPAT, 'UTF-8')) . '>' . $button . '
'; } if ($showIcon) { if($item->recurrence_type && !$item->recurrence_first_id){ $image = jemhtml::icon('com_jem/calendar_edit_root.png', $iconEditEventRoot, Text::_('COM_JEM_EDIT_EVENT_ROOT'), NULL, !$app->isClient('site')); $overlib = Text::_('COM_JEM_EDIT_EVENT_ROOT_DESC'); $text = Text::_('COM_JEM_EDIT_EVENT_ROOT'); }else { $image = jemhtml::icon('com_jem/calendar_edit.png', 'fa fa-fw fa-pen-square jem-editbutton', Text::_('COM_JEM_EDIT_EVENT'), NULL, !$app->isClient('site')); $overlib = Text::_('COM_JEM_EDIT_EVENT_DESC'); $text = Text::_('COM_JEM_EDIT_EVENT'); } } else { $image = Text::_('COM_JEM_EDIT_EVENT'); $overlib = Text::_('COM_JEM_EDIT_EVENT_DESC'); $text = Text::_('COM_JEM_EDIT_EVENT'); } $id = isset($item->did) ? $item->did : $item->id; $url = 'index.php?option=com_jem&task=event.edit&a_id='.$id.'&return='.base64_encode($uri); break; case 'editvenue': if (property_exists($item, 'vChecked_out') && property_exists($item, 'vChecked_out_time') && $item->vChecked_out > 0 && $item->vChecked_out != $userId) { $checkoutUser = Factory::getContainer()->get(UserFactoryInterface::class)->loadUserById($item->vChecked_out); $button = HTMLHelper::_('image', 'system/checked_out.png', NULL, NULL, true); $date = HTMLHelper::_('date', $item->vChecked_out_time); return 'name) . '
' . $date, ENT_COMPAT, 'UTF-8')) . '>' . $button . '
'; } if ($showIcon) { $image = jemhtml::icon( 'com_jem/calendar_edit.png', 'fa fa-fw fa-pen-square jem-editbutton', Text::_('COM_JEM_EDIT_VENUE'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_EDIT_VENUE'); } $id = $item->locid; $overlib = Text::_('COM_JEM_EDIT_VENUE_DESC'); $text = Text::_('COM_JEM_EDIT_VENUE'); $url = 'index.php?option=com_jem&task=venue.edit&a_id='.$id.'&return='.base64_encode($uri); break; case 'venue': if (property_exists($item, 'vChecked_out') && property_exists($item, 'vChecked_out_time') && $item->vChecked_out > 0 && $item->vChecked_out != $userId) { $checkoutUser = Factory::getContainer()->get(UserFactoryInterface::class)->loadUserById($item->vChecked_out); $button = HTMLHelper::_('image', 'system/checked_out.png', NULL, NULL, true); $date = HTMLHelper::_('date', $item->vChecked_out_time); return 'name) . '
' . $date, ENT_COMPAT, 'UTF-8')) . '>' . $button . '
'; } if ($showIcon) { $image = jemhtml::icon( 'com_jem/calendar_edit.png', 'fa fa-fw fa-pen-square jem-editbutton', Text::_('COM_JEM_EDIT_VENUE'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_EDIT_VENUE'); } $id = $item->id; $overlib = Text::_('COM_JEM_EDIT_VENUE_DESC'); $text = Text::_('COM_JEM_EDIT_VENUE'); $url = 'index.php?option=com_jem&task=venue.edit&a_id='.$id.'&return='.base64_encode($uri); break; } if (!$url) { return; // we need at least url to generate useful output } $output = HTMLHelper::_('link', Route::_($url), $image, self::tooltip($text, $overlib)); return $output; } } /** * Creates a copy button * * @param object $item * @param array $params * @param int $allowedtoadd * @param string $view * * Views: * Event, Venue */ static public function copybutton($item, $params, $attribs, $allowedtoadd, $view) { if ($allowedtoadd) { $app = Factory::getApplication(); if ($app->input->get('print','','int')) { return; } // Initialise variables. $user = JemFactory::getUser(); $userId = $user->get('id'); $uri = Uri::getInstance(); $settings = JemHelper::globalattribs(); // On Joomla Edit icon is always used regardless if "Show icons" is set to Yes or No. $showIcon = $settings->get('global_show_icons', 1); switch ($view) { case 'editevent': if ($showIcon) { $image = jemhtml::icon( 'com_jem/calendar_copy.png', 'fas fa-fw fa-copy jem-copybutton', Text::_('COM_JEM_COPY_EVENT'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_COPY_EVENT'); } $id = isset($item->did) ? $item->did : $item->id; $overlib = Text::_('COM_JEM_COPY_EVENT_DESC'); $text = Text::_('COM_JEM_COPY_EVENT'); $url = 'index.php?option=com_jem&task=event.copy&a_id='.$id.'&return='.base64_encode($uri); break; case 'editvenue': if ($showIcon) { $image = jemhtml::icon( 'com_jem/calendar_copy.png', 'fas fa-fw fa-copy jem-copybutton', Text::_('COM_JEM_COPY_VENUE'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_COPY_VENUE'); } $id = $item->locid; $overlib = Text::_('COM_JEM_COPY_VENUE_DESC'); $text = Text::_('COM_JEM_COPY_VENUE'); $url = 'index.php?option=com_jem&task=venue.copy&a_id='.$id.'&return='.base64_encode($uri); break; case 'venue': if ($showIcon) { $image = jemhtml::icon( 'com_jem/calendar_copy.png', 'fas fa-fw fa-copy jem-copybutton', Text::_('COM_JEM_COPY_VENUE'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_COPY_VENUE'); } $id = $item->id; $overlib = Text::_('COM_JEM_COPY_VENUE_DESC'); $text = Text::_('COM_JEM_COPY_VENUE'); $url = 'index.php?option=com_jem&task=venue.copy&a_id='.$id.'&return='.base64_encode($uri); break; } if (!$url) { return; // we need at least url to generate useful output } $output = HTMLHelper::_('link', Route::_($url), $image, self::tooltip($text, $overlib)); return $output; } } /** * Creates the print button * * @param string $print_link * @param array $params */ static public function printbutton($print_link, $params) { $app = Factory::getApplication(); $settings = JemHelper::globalattribs(); if ($settings->get('global_show_print_icon',0)) { $status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no'; if ($settings->get('global_show_icons',1)) { $image = jemhtml::icon( 'com_jem/printButton.png', 'fa fa-fw fa-lg fa-print jem-printbutton', Text::_('JGLOBAL_PRINT'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_PRINT'); } if ($app->input->get('print','','int')) { //button in popup $overlib = Text::_('COM_JEM_PRINT_DESC'); $text = Text::_('COM_JEM_PRINT'); $output = ''; } else { //button in view $overlib = Text::_('COM_JEM_PRINT_DESC'); $text = Text::_('COM_JEM_PRINT'); $output = '' . $image . ''; } return $output; } return; } /** * Creates the email button * * @param object $slug * @param $view * @param array $params * * Views: * Category, Event, Venue */ static public function mailbutton($slug, $view, $params) { $app = Factory::getApplication(); $settings = JemHelper::globalattribs(); if ($settings->get('global_show_email_icon')) { if ($app->input->get('print','','int')) { return; } $uri = Uri::getInstance(); $base = $uri->toString(array('scheme', 'host', 'port')); $template = Factory::getApplication()->getTemplate(); $link = $base.Route::_('index.php?option=com_jem&view='.$view.'&id='.$slug, false); $url = 'index.php?option=com_jem&tmpl=component&view=mailto&link='.JemMailtoHelper::addLink($link); $status = 'width=400,height=350,menubar=yes,resizable=yes'; if ($settings->get('global_show_icons')) { $image = jemhtml::icon( 'com_jem/emailButton.png', 'fa fa-fw fa-lg fa-envelope jem-mailbutton', Text::_('JGLOBAL_EMAIL'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_EMAIL'); } $overlib = Text::_('COM_JEM_EMAIL_DESC'); $text = Text::_('COM_JEM_EMAIL'); $new_html = ''; $new_html.= HTMLHelper::_( 'bootstrap.renderModal', 'mailto-modal', array( 'url' => $url.'&'.Session::getFormToken().'=1', 'title' => Text::_('COM_JEM_SELECT'), 'width' => '800px', 'height' => '550px', 'footer' => '' ) ); $new_html.='' . $image . ''; return $new_html; } } /** * Creates the ical button * * @param object $slug * @view string view name * @task string task name */ static public function icalbutton($slug, $view, $task = null) { $app = Factory::getApplication(); $settings = JemHelper::globalattribs(); if ($settings->get('global_show_ical_icon','0')==1) { if ($app->input->get('print','','int')) { return; } if ($settings->get('global_show_icons','0')==1) { $image = jemhtml::icon( 'com_jem/iCal2.0.png', 'fa fa-fw fa-lg fa-calendar-check jem-icalbutton', Text::_('COM_JEM_EXPORT_ICS'), NULL, !$app->isClient('site')); } else { $image = Text::_('COM_JEM_EXPORT_ICS'); } $overlib = Text::_('COM_JEM_ICAL_DESC'); $text = Text::_('COM_JEM_ICAL'); $url = 'index.php?option=com_jem&view=' . $view . '&id=' . ($slug??0) . ($task? '&task=' . $task : '') . '&format=raw&layout=ics'; $output = HTMLHelper::_('link', Route::_($url), $image, self::tooltip($text, $overlib, '', 'bottom')); return $output; } } /** * Creates the publish button * * View: * Myevents, Myvenues */ static public function publishbutton($prefix) { $app = Factory::getApplication(); if (empty($prefix) || $app->input->get('print','','int')) { // button in popup or wrong call $output = ''; } else { // button in view $image = jemhtml::icon( 'com_jem/publish.png', 'fa fa-fw fa-lg fa-check-circle jem-publishbutton', Text::_('COM_JEM_PUBLISH'), NULL, !$app->isClient('site')); $overlib = Text::_('COM_JEM_PUBLISH_DESC'); $text = Text::_('COM_JEM_PUBLISH'); $print_link = "javascript:void(Joomla.submitbutton('" . $prefix . ".publish'));"; $output = '' . $image . ''; } return $output; } /** * Creates the trash button * * View: * Myevents, Myvenues */ static public function trashbutton($prefix) { $app = Factory::getApplication(); if (empty($prefix) || $app->input->get('print','','int')) { // button in popup or wrong call $output = ''; } else { // button in view $image = jemhtml::icon( 'com_jem/trash.png', 'fa fa-fw fa-lg fa-trash jem-trashbutton', Text::_('COM_JEM_TRASH'), NULL, !$app->isClient('site')); $overlib = Text::_('COM_JEM_TRASH_DESC'); $text = Text::_('COM_JEM_TRASH'); $print_link = "javascript:void(Joomla.submitbutton('" . $prefix . ".trash'));"; $output = '' . $image . ''; } return $output; } /** * Creates the unpublish button * * View: * Myevents, Myvenues */ static public function unpublishbutton($prefix) { $app = Factory::getApplication(); if (empty($prefix) || $app->input->get('print','','int')) { // button in popup or wrong call $output = ''; } else { // button in view $image = jemhtml::icon( 'com_jem/unpublish.png', 'fa fa-fw fa-lg fa-eye-slash jem-unpublishbutton', Text::_('COM_JEM_UNPUBLISH'), NULL, !$app->isClient('site')); $overlib = Text::_('COM_JEM_UNPUBLISH_DESC'); $text = Text::_('COM_JEM_UNPUBLISH'); $print_link = "javascript:void(Joomla.submitbutton('" . $prefix . ".unpublish'));"; $output = '' . $image . ''; } return $output; } /** * Creates the export button * * view: * attendees */ static public function exportbutton($eventid) { $app = Factory::getApplication(); $image = jemhtml::icon( 'com_jem/export_excel.png', 'fa fa-fw fa-lg fa-download jem-exportbutton', Text::_('COM_JEM_EXPORT'), NULL, !$app->isClient('site')); if ($app->input->get('print','','int')) { //button in popup $output = ''; } else { //button in view $overlib = Text::_('COM_JEM_EXPORT_DESC'); $text = Text::_('COM_JEM_EXPORT'); $print_link = 'index.php?option=com_jem&view=attendees&task=attendees.export&tmpl=raw&id=' . $eventid . '&' . Session::getFormToken() . '=1'; $output = '' . $image . ''; } return $output; } /** * Creates the back button * * view: * attendees */ static public function backbutton($backlink, $view) { $app = Factory::getApplication(); $id = $app->input->getInt('id'); $fid = $app->input->getInt('Itemid'); $image = jemhtml::icon( 'com_jem/icon-16-back.png', 'fa fa-fw fa-lg fa-chevron-circle-left jem-backbutton', Text::_('COM_JEM_BACK'), NULL, !$app->isClient('site')); if ($app->input->get('print','','int')) { //button in popup $output = ''; } else { //button in view $overlib = Text::_('COM_JEM_BACK'); $text = Text::_('COM_JEM_BACK'); $link = 'index.php?option=com_jem&view='.$view.'&id='.$id.'&Itemid='.$fid.'&task='.$view.'.back'; $output = '' . $image . ''; } return $output; } /** * Creates attributes for a tooltip depending on Joomla version * * @param string $title translated title of the tooltip * @param string $text translated text of the tooltip * @param string $classes additional css classes (optional) * * @return string attributes in form 'class="..." title="..."' */ static public function tooltip($title, $text, $classes = '', $position = '') { $result = array(); // on Joomla! 3.3+ we must use the new tooltips // HTMLHelper::_('bootstrap.tooltip'); $result = 'class="'.$classes.' hasTooltip" data-bs-toggle="tooltip" title="'.HTMLHelper::tooltipText($title, $text, 0).'"'; if (!empty($position) && (array_search($position, array('top', 'bottom', 'left', 'right')) !== false)) { $result .= ' data-placement="'.$position.'"'; } return $result; } /** * Creates the map button * * @param obj $data */ static public function mapicon($data, $view, $params) { $app = Factory::getApplication(); $settings = JemHelper::globalattribs(); //stop if disabled if (!$data->map) { return; } if ($view == 'event') { $tld = 'event_tld'; $lg = 'event_lg'; $mapserv = $params->get('event_show_mapserv'); } else if ($view == 'venues') { $tld = 'global_tld'; $lg = 'global_lg'; $mapserv = ($mapserv == 3) ? 0 : $params->get('global_show_mapserv'); } else { $tld = 'global_tld'; $lg = 'global_lg'; $mapserv = $params->get('global_show_mapserv'); } //Link to map $mapimage = jemhtml::icon( 'com_jem/map_icon.png', 'fa fa-map', Text::_('COM_JEM_MAP'), 'class="jem-mapicon"'); //set var $output = null; $attributes = null; $data->country = \Joomla\String\StringHelper::strtoupper($data->country); if ($data->latitude == 0.000000) { $data->latitude = null; } if ($data->longitude == 0.000000) { $data->longitude = null; } $url = 'https://nominatim.openstreetmap.org/ui/search.html?q=' . urlencode($data->street . ', ' . $data->postalCode . ' ' . $data->city); // maps switch ($mapserv) { case 1: // google map link if (!empty($data->latitude) && !empty($data->longitude) && $data->latitude !== 0 && $data->longitude !== 0) { $url = 'https://maps.google.'.$params->get($tld,'com').'/maps?hl='.$params->get($lg,'en').'&q=loc:'.$data->latitude.',+'.$data->longitude.'&ie=UTF8&t=m&z=14&iwloc=B'; } else { $url = 'https://www.google.'.$params->get($tld,'com').'/maps/place/'.htmlentities($data->street.',+'.$data->postalCode.'+'.$data->city.'+'.$data->country).'?hl='.$params->get($lg,'en').'+('.$data->venue.')'; } $message = Text::_('COM_JEM_MAP').':'; $attributes = ' rel="{handler: \'iframe\', size: {x: 800, y: 500}}" latitude="" longitude=""'; $output = '
'.$message.'
'.$mapimage.' '.Text::sprintf('COM_JEM_LINK_TO_GOOGLE_MAP', $data->venue) .'
'; break; case 2: // include iframe if (!empty($data->latitude) && !empty($data->longitude) && $data->latitude !== 0 && $data->longitude !== 0) { $url = 'https://maps.google.'.$params->get($tld,'com').'/maps?width=100%25&height=600&hl='.$params->get($lg,'en').'&q=loc:'.$data->latitude.',+'.$data->longitude.'&ie=UTF8&t=m&z=14&iwloc=B&output=embed'; } else { $url = 'https://maps.google.'.$params->get($tld,'com').'/maps?hl='.$params->get($lg,'en').'&q='.urlencode($data->street.',+'.$data->postalCode.'+'.$data->city.'+'.$data->country).'&ie=UTF8&z=15&iwloc=B&output=embed'; } $output = '
'; break; case 3: // include Google map with API3 // NOT WORKING YET 2023-05 # https://developers.google.com/maps/documentation/javascript/tutorial $api = $params->get('global_googleapi'); $clientid = $params->get('global_googleclientid'); $output = ''; if (empty($api) || empty($clientid)) { $output = Text::_('COM_JEM_GOOGLE_NO_API_KEY'); break; } else { $api = trim($api); $clientid = trim($clientid); } $document = $app->getDocument(); # do we have a client-ID? if ($clientid) { $document->addScript('https://maps.googleapis.com/maps/api/js?client='.$clientid.'&sensor=false&v=3.15'); } else { # do we have an api-key? if ($api) { $document->addScript('https://maps.googleapis.com/maps/api/js?key='.$api.'&sensor=false'); } else { $document->addScript('https://maps.googleapis.com/maps/api/js?sensor=false'); } } JemHelper::loadCss('googlemap'); HTMLHelper::_('script', 'com_jem/infobox.js', null, true); HTMLHelper::_('script', 'com_jem/googlemap.js', null, true); $output = '
'; break; case 4: // OpenStreetMap link if (!empty($data->latitude) && !empty($data->longitude) && $data->latitude !== 0 && $data->longitude !== 0) { $lat = $data->latitude; $lng = $data->longitude; } else { $address = 'street=' . urlencode($data->street) . '&city=' . urlencode($data->city) . '&country=' . urlencode($data->country) . '&postalcode=' . urlencode($data->postalCode); $search_url = "https://nominatim.openstreetmap.org/search?q=" . urlencode($address) . "&format=jsonv2"; $websiteUrl = Joomla\CMS\Uri\Uri::root(true); // Retrieve Joomla website URL $httpOptions = [ "http" => [ "method" => "GET", "header" => "User-Agent: JEM 4.0 on" . $websiteUrl ] ]; $streamContext = stream_context_create($httpOptions); $json = file_get_contents($search_url, false, $streamContext); $decoded = json_decode($json, true); $lat = $decoded[0]["lat"] ?? null; $lng = $decoded[0]["lon"] ?? null; } if ($lat && $lng) { $url = 'https://www.openstreetmap.org/?mlat=' . htmlentities($lat) . '&mlon=' . htmlentities($lng) . '&zoom=15#map=15/' . htmlentities($lat) . '/' . htmlentities($lng); } else { $url = 'https://nominatim.openstreetmap.org/ui/search.html?' . $address; // Handle the case when coordinates are not found } $message = Text::_('COM_JEM_MAP') . ':'; $output = '
' . $message . '
' . $mapimage . ' ' . Text::sprintf('COM_JEM_LINK_TO_OSM', $data->venue) . '
'; break; case 5: // embed OpenStreetMap if (!empty($data->latitude) && !empty($data->longitude) && $data->latitude !== 0 && $data->longitude !== 0) { $lat = $data->latitude; $lng = $data->longitude; } else { $address = 'street=' . urlencode($data->street) . '&city=' . urlencode($data->city) . '&country=' . urlencode($data->country) . '&postalcode=' . urlencode($data->postalCode); $search_url = "https://nominatim.openstreetmap.org/search?" . $address . "&format=jsonv2"; $websiteUrl = Joomla\CMS\Uri\Uri::root(true); // Retrieve Joomla website URL $httpOptions = [ "http" => [ "method" => "GET", "header" => "User-Agent: JEM 4.0 on" . $websiteUrl ] ]; $streamContext = stream_context_create($httpOptions); $json = file_get_contents($search_url, false, $streamContext); $decoded = json_decode($json, true); $lat = $decoded[0]["lat"] ?? null; $lng = $decoded[0]["lon"] ?? null; } if ($lat && $lng) { $zoom = 15; // Adjust the zoom level as per your requirement $output = ''; } else { $fallback_url = "https://nominatim.openstreetmap.org/ui/search.html?" . $address; $output = '

' . Text::sprintf('COM_JEM_OSM_NO_MAP', $fallback_url) . '

'; } break; } return $output; } /** * Creates the recurrence icon * * @param obj $event * @param bool $showinline Add css class to scale icon to fit text height * @param bool $showtitle Add title (tooltip) */ static public function recurrenceicon($event, $showinline = true, $showtitle = true) { $app = Factory::getApplication(); $settings = JemHelper::globalattribs(); $settings2 = JemHelper::config(); $item = empty($event->recurr_bak) ? $event : $event->recurr_bak; //stop if disabled if (empty($item->recurrence_number) && empty($item->recurrence_type)) { return; } if (version_compare(JVERSION, '5.0.0', '>=')) { // Joomla 5 with Font Awesome 6 $iconRecurrenceFirst = 'fa fa-fw fa-refresh jem-recurrencefirsticon'; $iconRecurrence = 'fa fa-fw fa-refresh jem-recurrenceicon'; } elseif (version_compare(JVERSION, '4.0.0', '>=')) { // Joomla 4 witn Font Awesome 5 $iconRecurrenceFirst = 'fa fa-fw fa-sync jem-recurrencefirsticon'; $iconRecurrence = 'fa fa-fw fa-sync jem-recurrenceicon'; } $first = !empty($item->recurrence_type) && empty($item->recurrence_first_id); $image = $first ? 'com_jem/icon-32-recurrence-first.png' : 'com_jem/icon-32-recurrence.png'; /* F1DA: fa-history, F0E2: fa-undo/fa-rotate-left, F01E: fa-repeat/fa-rotate-right, F021: fa-refresh */ $icon = $first ? $iconRecurrenceFirst : $iconRecurrence; $showinline &= !($settings2->useiconfont == 1 && $app->isClient('site')); $attr_class = $showinline ? ('class="icon-inline" ') : ''; $attr_title = $showtitle ? ('title="' . Text::_($first ? 'COM_JEM_RECURRING_FIRST_EVENT_DESC' : 'COM_JEM_RECURRING_EVENT_DESC') . '"') : ''; $output = jemhtml::icon($image, $icon, Text::_('COM_JEM_RECURRING_EVENT'), $attr_class . $attr_title, !$app->isClient('site')); return $output; } /** * Creates the unpublished icon * * @param mixed $item mixed Object with attribute 'published' or plain value containing the state (well known -2, 0, 1, 2) * @param array $ignorestates States to ignore (returning empty string), defaults to trashed (-2), published (1) and archived (2) * @param bool $showinline Add css class to scale icon to fit text height * @param bool $showtitle Add title (tooltip) */ static public function publishstateicon($item, $ignorestates = array(-2, 1, 2), $showinline = true, $showtitle = true) { //$settings = JemHelper::globalattribs(); /// @todo use global setting to influence visibility of publish state icon? $app = Factory::getApplication(); // early return if (is_object($item)) { if (!isset($item->published) || in_array($item->published, $ignorestates)) { return ''; } } else { if (in_array($item, $ignorestates)) { return ''; } } $published = is_object($item) ? $item->published : $item; switch ($published) { case -2: // trashed $image = 'com_jem/trash.png'; $icon = 'fa fa-fw fa-lg fa-trash jem-publishstateicon-trashed'; $alt = Text::_('JTRASHED'); break; case 0: // unpublished F10C: fa-circle-o F070: fa-eye-slash, F192: fa-dot-circle-o $image = 'com_jem/publish_x.png'; $icon = 'fa fa-fw fa-lg fa-eye-slash jem-publishstateicon-unpublished'; $alt = Text::_('JUNPUBLISHED'); break; case 1: // published F06E: fa-eye $image = 'com_jem/publish.png'; $icon = 'fa fa-fw fa-lg fa-check-circle jem-publishstateicon-published'; $alt = Text::_('JPUBLISHED'); break; case 2: // archived $image = 'com_jem/archive_front.png'; $icon = 'fa fa-fw fa-lg fa-archive jem-publishstateicon-archived'; $alt = Text::_('JARCHIVED'); break; default: // unknown state - abort! return ''; } // additional attributes $attributes = array(); if ($showinline) { $attributes['class'] = 'icon-inline'; } if ($showtitle) { $attributes['title'] = $alt; } $output = jemhtml::icon( $image, $icon, $alt, $attributes, !$app->isClient('site')); return $output; } /** * Creates the flyer * * @param obj $data * @param array $image * @param string $type */ static public function flyer($data, $image, $type, $id = null) { $uri = Uri::getInstance(); $id_attr = $id ? 'id="'.$id.'"' : ''; $settings = JemHelper::config(); switch($type) { case 'event': $folder = 'events'; $imagefile = $data->datimage; $info = $data->title; if(!$settings->flyer){ $precaption = Text::_('COM_JEM_EVENT'); $id = 'eventid-'. $data->id; } break; case 'category': $folder = 'categories'; $imagefile = $data->image; $info = $data->catname; if(!$settings->flyer){ $precaption = Text::_('COM_JEM_CATEGORY'); $id = 'catid-'. $data->id; } break; case 'venue': $folder = 'venues'; $imagefile = $data->locimage; $info = $data->venue; if(!$settings->flyer){ $precaption = Text::_('COM_JEM_VENUE'); if (property_exists($data, 'locid')) { $id = $data->locid; } else { $id = $data->id; } } break; } // Do we have an image? if (empty($imagefile) || empty($image)) { return; } else if(!$settings->flyer){ list($imagewidth, $imageheight) = getimagesize($image['original']) ?? [100, 100]; list($thumbwidth, $thumbheight) = getimagesize($image['thumb']) ?? [50, 50]; } // Does a thumbnail exist? if (!$settings->flyer){ if (File::exists(JPATH_SITE.'/images/jem/'.$folder.'/small/'.$imagefile)) { // if "Enable Pop Up Thumbnail" is disabled if (($settings->gddisabled == 0) && ($settings->lightbox == 0)) { $icon = ''.$info.''; $output = '
'.$icon.'
'; } // if "Enable Pop Up Thumbnail" is enabled and lightbox disabled elseif (($settings->gddisabled == 1) && ($settings->lightbox == 0)) { $attributes = $id_attr.' class="flyerimage" onclick="window.open(\''.$uri->base().$image['original'].'\',\'Popup\',\'width='. $imagewidth.',height='.$imageheight.',location=no,menubar=no,scrollbars=no,status=no,toolbar=no,resizable=no\')"'; $icon = ''.$info.''; $output = '
'.$icon.'
'; } // if "Enable Pop Up Thumbnail" and lightbox are enabled elseif (($settings->gddisabled == 1) && ($settings->lightbox == 1)) { $url = $uri->base().$image['original']; $attributes = $id_attr.' rel="lightbox" class="flyermodal flyerimage" data-lightbox="lightbox-image-'.$id.'" title="'.$info.'" data-title="'.$precaption.': '.$info.'"'; $icon = ''.$info.''; $output = '
'.$icon.'
'; } // If there is no thumbnail, then take the values for the original image specified in the settings } else { $output = ''.$info.''; } }else{ $output = ''.$info.''; } return $output; } /** * Formats date * * @param string $date * @param string $format * @return string $formatdate */ static public function formatdate($date, $format = "") { $settings = JemHelper::config(); $check = JemHelper::isValidDate($date); //$timezone = JemHelper::getTimeZoneName(); $timezone = null; if ($check) { $jdate = new Date($date, $timezone); if (!$format) { // If no format set, use long format as standard $format = $settings->formatdate; } return $jdate->format($format); } else { return false; } } /** * Formats time * * @param string $time * @return string $formattime */ static public function formattime($time, $format = "", $addSuffix = true) { $settings = JemHelper::config(); $check = JemHelper::isValidTime($time); if (!$check) { return; } if(!$format) { // If no format set, use settings format as standard $format = $settings->formattime; } $formattedTime = date($format, strtotime($time)); if ($addSuffix && !empty($settings->timename)) { $formattedTime .= ' '.$settings->timename; } return $formattedTime; } /** * Formats the input dates and times to be used as a from-to string for * events. Takes care of unset dates and or times. * Values can be styled using css classes jem_date-1 and jem_time-1. * * @param mixed $dateStart Start date of event or an associative array with keys contained in * {'dateStart','timeStart','dateEnd','timeEnd','dateFormat','timeFormat','addSuffix','showTime'} * and values corresponding to parameters of the same name. * @param string $timeStart Start time of event * @param string $dateEnd End date of event * @param string $timeEnd End time of event * @param string $dateFormat Date Format * @param string $timeFormat Time Format * @param bool $addSuffix if true add suffix specified in settings * @param bool $showTime global setting to respect * @param bool $showDayLink if true date will be shown as link to day view * @return string Formatted date and time string to print */ static public function formatDateTime($dateStart, $timeStart ='', $dateEnd = '', $timeEnd = '', $dateFormat = '', $timeFormat = '', $addSuffix = true, $showTime = true, $showDayLink = false) { if (is_array($dateStart)) { foreach (array('timeStart','dateEnd','timeEnd','dateFormat','timeFormat','addSuffix','showTime', 'showDayLink') as $param) { if (isset($dateStart[$param])) { $$param = $dateStart[$param]; } } $dateStart = isset($dateStart['dateStart']) ? $dateStart['dateStart'] : ''; } $output = ''; if (JemHelper::isValidDate($dateStart)) { $output .= ''; if ($showDayLink) { $output .= ''; } $output .= self::formatdate($dateStart, $dateFormat); if ($showDayLink) { $output .= ''; } $output .= ''; if ($showTime && JemHelper::isValidTime($timeStart)) { $output .= ', '.self::formattime($timeStart, $timeFormat, $addSuffix).''; } // Display end date only when it differs from start date $displayDateEnd = JemHelper::isValidDate($dateEnd) && $dateEnd != $dateStart; if ($displayDateEnd) { $output .= ' - '; if ($showDayLink) { $output .= ''; } $output .= self::formatdate($dateEnd, $dateFormat); if ($showDayLink) { $output .= ''; } $output .= ''; } // Display end time only when both times are set if ($showTime && JemHelper::isValidTime($timeStart) && JemHelper::isValidTime($timeEnd)) { $output .= $displayDateEnd ? ', ' : ' - '; $output .= ''.self::formattime($timeEnd, $timeFormat, $addSuffix).''; } } else { $output .= ''.Text::_('COM_JEM_OPEN_DATE').''; if ($showTime) { if (JemHelper::isValidTime($timeStart)) { $output .= ', '.self::formattime($timeStart, $timeFormat, $addSuffix).''; // Display end time only when both times are set if (JemHelper::isValidTime($timeEnd)) { $output .= ' - '.self::formattime($timeEnd, $timeFormat, $addSuffix).''; } } } } return $output; } /** * Formats the input dates and times to be used as a from-to string for * events. Takes care of unset dates and or times. * First line is for (short) date, second line for time values. * Lines can be styled using css classes jem_date-2 and jem_time-2. * * @param mixed $dateStart Start date of event or an associative array with keys contained in * {'dateStart','timeStart','dateEnd','timeEnd','dateFormat','timeFormat','addSuffix','showTime'} * and values corresponding to parameters of the same name. * @param string $timeStart Start time of event * @param string $dateEnd End date of event * @param string $timeEnd End time of event * @param string $dateFormat Date Format * @param string $timeFormat Time Format * @param bool $addSuffix if true add suffix specified in settings * @param bool $showTime global setting to respect * @return string Formatted date and time string to print */ static public function formatDateTime2Lines($dateStart, $timeStart = '', $dateEnd = '', $timeEnd = '', $dateFormat = '', $timeFormat = '', $addSuffix = true, $showTime = true) { if (is_array($dateStart)) { foreach (array('timeStart','dateEnd','timeEnd','dateFormat','timeFormat','addSuffix','showTime') as $param) { if (isset($dateStart[$param])) { $$param = $dateStart[$param]; } } $dateStart = isset($dateStart['dateStart']) ? $dateStart['dateStart'] : ''; } $output = ''; $jemconfig = JemHelper::config(); if (empty($dateFormat)) { // Use format saved in settings if specified or format in language file otherwise $dateFormat = empty($jemconfig->formatShortDate) ? Text::_('COM_JEM_FORMAT_SHORT_DATE') : $jemconfig->formatShortDate; } if (JemHelper::isValidDate($dateStart)) { $outDate = self::formatdate($dateStart, $dateFormat); if (JemHelper::isValidDate($dateEnd) && ($dateEnd != $dateStart)) { $outDate .= ' - ' . self::formatdate($dateEnd, $dateFormat); } } else { $outDate = Text::_('COM_JEM_OPEN_DATE'); } if ($showTime && JemHelper::isValidTime($timeStart)) { $outTime = self::formattime($timeStart, $timeFormat, $addSuffix); if (JemHelper::isValidTime($timeEnd)) { $outTime .= ' - ' . self::formattime($timeEnd, $timeFormat, $addSuffix); } } $output = '' . $outDate . ''; if (!empty($outTime)) { $output .= '
' . $outTime . ''; } return $output; } /** * Formats the input dates and times to be used as a long from-to string for * events. Takes care of unset dates and or times. * * @param string $dateStart Start date of event or an associative array with keys contained in * {'dateStart','timeStart','dateEnd','timeEnd','showTime'} * and values corresponding to parameters of the same name. * @param mixed $timeStart Start time of event * @param string $dateEnd End date of event * @param string $timeEnd End time of event * @param bool $showTime global setting to respect * @return string Formatted date and time string to print */ static public function formatLongDateTime($dateStart, $timeStart = '', $dateEnd = '', $timeEnd = '', $showTime = true) { return self::formatDateTime(is_array($dateStart) ? $dateStart : array('dateStart' => $dateStart, 'timeStart' => $timeStart, 'dateEnd' => $dateEnd, 'timeEnd' => $timeEnd, 'addSuffix' => true, 'showTime' => $showTime)); } /** * Formats the input dates and times to be used as a short from-to string for * events. Takes care of unset dates and or times. * * @param string $dateStart Start date of event or an associative array with keys contained in * {'dateStart','timeStart','dateEnd','timeEnd','showTime'} * and values corresponding to parameters of the same name. * @param mixed $timeStart Start time of event * @param string $dateEnd End date of event * @param string $timeEnd End time of event * @param bool $showTime global setting to respect * @return string Formatted date and time string to print */ static public function formatShortDateTime($dateStart, $timeStart = '', $dateEnd = '', $timeEnd = '', $showTime = true) { $settings = JemHelper::config(); $params = is_array($dateStart) ? $dateStart : array('dateStart' => $dateStart, 'timeStart' => $timeStart, 'dateEnd' => $dateEnd, 'timeEnd' => $timeEnd, 'showTime' => $showTime); $params['addSuffix'] = true; // Use format saved in settings if specified or format in language file otherwise $params['dateFormat'] = (isset($settings->formatShortDate) && $settings->formatShortDate) ? $settings->formatShortDate : Text::_('COM_JEM_EVENTS_FORMAT_SHORT_DATE'); if (isset($settings->datemode) && ($settings->datemode == 2)) { return self::formatDateTime2Lines($params); } else { return self::formatDateTime($params); } } static public function formatSchemaOrgDateTime($dateStart, $timeStart = '', $dateEnd = '', $timeEnd = '', $showTime = true) { if (is_array($dateStart)) { foreach (array('timeStart','dateEnd','timeEnd','showTime') as $param) { if (isset($dateStart[$param])) { $$param = $dateStart[$param]; } } $dateStart = isset($dateStart['dateStart']) ? $dateStart['dateStart'] : ''; } $output = ''; $formatD = 'Y-m-d'; $formatT = 'H:i'; if (JemHelper::isValidDate($dateStart)) { $content = self::formatdate($dateStart, $formatD); if ($showTime && $timeStart) { $content .= 'T'.self::formattime($timeStart, $formatT, false); } $output .= ''; if (JemHelper::isValidDate($dateEnd)) { $content = self::formatdate($dateEnd, $formatD); if ($showTime && $timeEnd) { $content .= 'T'.self::formattime($timeEnd, $formatT, false); } $output .= ''; } } else { // Open date if ($showTime) { if ($timeStart) { $content = self::formattime($timeStart, $formatT, false); $output .= ''; } // Display end time only when both times are set if ($timeStart && $timeEnd) { $content .= self::formattime($timeEnd, $formatT, false); $output .= ''; } } } return $output; } /** * Returns an array for ical formatting * @todo alter, where is this used for? * * @param string date * @param string time * @return array */ static public function getIcalDateArray($date, $time = null) { if ($time) { $sec = strtotime($date. ' ' .$time); } else { $sec = strtotime($date); } if (!$sec) { return false; } //Format date $parsed = date('Y-m-d H:i:s', $sec); $date = array('year' => (int) substr($parsed, 0, 4), 'month' => (int) substr($parsed, 5, 2), 'day' => (int) substr($parsed, 8, 2)); //Format time if (substr($parsed, 11, 8) != '00:00:00') { $date['hour'] = substr($parsed, 11, 2); $date['min'] = substr($parsed, 14, 2); $date['sec'] = substr($parsed, 17, 2); } return $date; } /** * Get a category names list * @param unknown $categories Category List * @param boolean $doLink Link the categories to the respective Category View * @param boolean $backend Used for backend (true) or frontend (false, default) * @return string|multitype: */ static public function getCategoryList($categories, $doLink, $backend = false) { $output = array_map( function ($category) use ($doLink, $backend) { if ($doLink) { if ($backend) { $path = $category->path; $path = str_replace('/', ' » ', $path); $value = ''; $value .= '' . $category->catname . ''; $value .= ''; } else { $value = '' . $category->catname . ''; } } else { $value = $category->catname; } return $value; }, $categories); return $output; } } ?>