Файловый менеджер - Редактировать - /home/wuectly/www/components/com_icagenda/helpers/icmodel.php
Назад
<?php /** *------------------------------------------------------------------------------ * iCagenda v3 by Jooml!C - Events Management Extension for Joomla! 2.5 / 3.x *------------------------------------------------------------------------------ * @package com_icagenda * @copyright Copyright (c)2012-2015 Cyril Rezé, Jooml!C - All rights reserved * * @license GNU General Public License version 3 or later; see LICENSE.txt * @author Cyril Rezé (Lyr!C) * @link http://www.joomlic.com * * @version 3.5.12 2015-09-09 * @since 1.0 *------------------------------------------------------------------------------ */ // No direct access to this file defined('_JEXEC') or die(); jimport('joomla.application.component.modelitem'); jimport('joomla.html.parameter'); jimport('joomla.registry.registry'); jimport('joomla.user.helper'); jimport('joomla.access.access'); class iCModelItem extends JModelItem { /** * @var */ protected $msg; protected $filters; protected $options; protected $itObj; protected $where; protected $searchInFields = array('title', 'c.catid'); /** * Load the iChelper class */ public function __construct($config = array()) { $config['filter_fields'] = array_merge($this->searchInFields, array('c.catid')); parent::__construct($config); // Load the helper class JLoader::register('iCModeliChelper', JPATH_SITE . '/components/com_icagenda/helpers/ichelper.php'); } /** * Model Builder */ protected function startiCModel() { $this->filters = array(); $this->options = array(); $this->items = array(); $this->itObj = new stdClass; } /** * Table importation */ public function getTable($type = 'icagenda', $prefix = 'icagendaTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } /** * Get all data */ protected function getItems($structure) { // Return Items if (isset($this->items) && is_array($this->items)) { $this->items = $this->getDBitems(); } foreach ($structure as $k => $v) { $this->itObj->$k = $this->$k($v); } return $this->itObj; } /** * Add the filters to be used in queries */ protected function addFilter($name, $value) { $this->filters[$name] = $value; } /** * Add the options you use to obtain the various data in the right setting */ protected function addOption($name, $value) { $this->options[$name]=$value; } /** * Fetch data from DB */ protected function getDBitems() { // Check valid NEXT DATE icagendaEventsData::getNext(); $app = JFactory::getApplication(); $jinput = $app->input; $params = $app->getParams(); // Get Settings $filterTime = $params->get('time', 1); $jlayout = JRequest::getCmd('layout', ''); $layouts_array = array('event', 'registration', 'actions'); $layout = in_array($jlayout, $layouts_array) ? $jlayout : ''; // Set vars $nodate = '0000-00-00 00:00:00'; $eventTimeZone = null; $datetime_today = JHtml::date('now', 'Y-m-d H:i:s'); // Joomla Time Zone $date_today = JHtml::date('now', 'Y-m-d'); // Joomla Time Zone $time_today = JHtml::date('now', 'H:i:s'); // Joomla Time Zone // Get List Type option (list of events / list of dates) $allDatesDisplay = $this->options['datesDisplay']; // Preparing connection to db $db = Jfactory::getDbo(); // Preparing the query $query = $db->getQuery(true); // Selectable items $query->select('e.*, e.place as place_name, e.coordinate as coordinate, e.lat as lat, e.lng as lng, c.id as cat_id, c.title as cat_title, c.color as cat_color, c.desc as cat_desc, c.alias as cat_alias'); // join $query->from('`#__icagenda_events` AS e'); $query->leftJoin('`#__icagenda_category` AS c ON c.id = e.catid'); $query->where('c.state = 1'); // Where (filters) $filters = $this->filters; $where = 'e.state = ' . $filters['state']; $user = JFactory::getUser(); $userLevels = $user->getAuthorisedViewLevels(); $userGroups = $user->groups; $groupid = JComponentHelper::getParams('com_icagenda')->get('approvalGroups', array("8")); $groupid = is_array($groupid) ? $groupid : array($groupid); // Test if user login have Approval Rights if ( !array_intersect($userGroups, $groupid) && !in_array('8', $userGroups) ) { $where.= ' AND e.approval <> 1'; } else { $where.= ' AND e.approval < 2'; } // ACCESS Filtering (if not list, use layout access control (event, registration)) if ( ! $layout && ! in_array('8', $userGroups) ) { $useraccess = implode(', ', $userLevels); $where.= ' AND e.access IN (' . $useraccess . ')'; } // LANGUAGE Filtering $where.= ' AND (e.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . '))'; unset($filters['state']); $k = '0'; $this_id = null; if (isset($filters)) { foreach($filters as $k=>$v) { // normal cases if ($k != 'key' && $k != 'next' && $k != 'e.catid' && $k != 'id') { $where.= ' AND '.$k.' LIKE "%'.$v.'%"'; } // in case of search if ($k == 'key') { $keys = explode(' ', $v); foreach ($keys as $ke) { $where.= ' AND (e.title LIKE \'%' . $ke . '%\' OR '; $where.= ' e.desc LIKE \'%' . $ke . '%\' OR '; $where.= ' e.address LIKE \'%' . $ke . '%\' OR '; $where.= ' e.place LIKE \'%' . $ke . '%\' OR '; $where.= ' c.title LIKE \'%' . $ke . '%\')'; } } // in the case of category $mcatidtrue = $this->options['mcatid']; if ( ! is_array($mcatidtrue)) { $catold = $mcatidtrue; $mcatid = array($mcatidtrue); } else { $catold = '0'; $mcatid = $mcatidtrue; } if ( ! in_array('0', $mcatid) || ($catold != 0) ) { if ($k == 'e.catid') { if (!is_array($v)) { $v = array('' . $v . ''); } $v = implode(', ', $v); $where.= ' AND ' . $k . ' IN (' . $v . ')'; } } // in case of id if ($k == 'id') { //check if ID is a number if (is_numeric($v)) { $this_id = (int) $v; // if event id is set in url $where.= ' AND e.id=' . $v; } else { //ERROR Message } } } } // Features - extract the number of displayable icons per event $query->select('feat.count AS features'); $sub_query = $db->getQuery(true); $sub_query->select('fx.event_id, COUNT(*) AS count'); $sub_query->from('`#__icagenda_feature_xref` AS fx'); $sub_query->innerJoin("`#__icagenda_feature` AS f ON fx.feature_id=f.id AND f.state=1 AND f.icon<>'-1'"); $sub_query->group('fx.event_id'); $query->leftJoin('(' . (string) $sub_query . ') AS feat ON e.id=feat.event_id'); // Filter by Features if (!$layout) // if view is list of events (temporary fix for calendar event links to details view) { $query->where(icagendaEventsData::getFeaturesFilter()); } // Registrations total $query->select('r.count AS registered'); $sub_query = $db->getQuery(true); $sub_query->select('r.eventid, sum(r.people) AS count'); $sub_query->from('`#__icagenda_registration` AS r'); $get_date = JRequest::getVar('date', ''); if ($get_date) { $ex = explode('-', $get_date); if (strlen(iCDate::dateToNumeric($get_date)) != '12') { $event_url = JURI::getInstance()->toString(); $cleanurl = preg_replace('/&date=[^&]*/', '', $event_url); $cleanurl = preg_replace('/\?date=[^\?]*/', '', $cleanurl); // redirect and remove date var, if not correctly set // $app->redirect($cleanurl , JText::_( 'COM_ICAGENDA_ERROR_URL_DATE_NOT_FOUND' )); $app->redirect($cleanurl); return false; } if (count($ex) == 5) { $dateday = $ex['0'] . '-' . $ex['1'] . '-' . $ex['2'] . ' ' . $ex['3'] . ':' . $ex['4'] . ':00'; $sub_query->where('r.date = ' . $db->q($dateday)); } } $sub_query->where('r.state > 0'); $sub_query->group('r.eventid'); $query->leftJoin('(' . (string) $sub_query . ') AS r ON e.id=r.eventid'); if ( ! $layout) { $number_per_page = $this->options['number']; $orderdate = $this->options['orderby']; $getpage = JRequest::getVar('page', '1'); $start = $number_per_page * ($getpage - 1); $all_dates_with_id = icagendaEventsData::getAllDates(); $count_all_dates = count($all_dates_with_id); // Set list of PAGE:IDS $pages = ceil($count_all_dates / $number_per_page); $list_id = array(); for ($n = 1; $n <= $pages; $n++) { $dpp_array = array(); $page_nb = $number_per_page * ($n - 1); $dates_per_page = array_slice($all_dates_with_id, $page_nb, $number_per_page, true); foreach ($dates_per_page AS $dpp) { $dpp_alldates_array = explode('_', $dpp); $dpp_date = $dpp_alldates_array['0']; $dpp_id = $dpp_alldates_array['1']; $dpp_array[] = $dpp_id; } $list_id[] = implode(', ', $dpp_array) . '::' . $n; } $this_ic_ids = ''; if ($list_id) { foreach ($list_id as $a) { $ex_listid = explode('::', $a); $ic_page = $ex_listid[1]; $ic_ids = $ex_listid[0]; if ($ic_page == $getpage) { $this_ic_ids = $ic_ids ? $ic_ids : '0'; } } if ($this_ic_ids) { $where.= ' AND (e.id IN (' . $this_ic_ids . '))'; } else { return false; // No Event (if 'All Dates' option selected) } } } // Query $where list $query->where($where); $db->setQuery($query); $loaddb = $db->loadObjectList(); $registrations = icagendaEventsData::registeredList($this_id); // Extract the feature details, if needed foreach ($loaddb as $record) { if (is_null($record->features)) { $record->features = array(); } else { $query = $db->getQuery(true); $query->select('DISTINCT f.icon, f.icon_alt'); $query->from('`#__icagenda_feature_xref` AS fx'); $query->innerJoin("`#__icagenda_feature` AS f ON fx.feature_id=f.id AND f.state=1 AND f.icon<>'-1'"); $query->where('fx.event_id=' . $record->id); $query->order('f.ordering DESC'); // Order descending because the icons are floated right $db->setQuery($query); $record->features = $db->loadObjectList(); } // if (is_null($record->registered)) // { // $record->registered = array(); // } // else // { $record_registered = array(); foreach ($registrations AS $reg_by_event) { $ex_reg_by_event = explode('@@', $reg_by_event); if ($ex_reg_by_event[0] == $record->id) { $record_registered[] = $ex_reg_by_event[0] . '@@' . $ex_reg_by_event[1] . '@@' . $ex_reg_by_event[2]; } } $record->registered = $record_registered; // } } if ((!$layout && count($all_dates_with_id) > 0) || $layout) { return $loaddb; } } /** * * ALL DATES - iCmodel * */ protected function eventAllDates($i) { // Set vars $nodate = '0000-00-00 00:00:00'; $ic_nodate = '0000-00-00 00:00'; $eventTimeZone = null; // Get Data $tNext = $i->next; $tDates = $i->dates; $tId = $i->id; $tState = $i->state; $tEnddate = $i->enddate; $tStartdate = $i->startdate; $tWeekdays = $i->weekdays; // Declare eventAllDates array $eventAllDates = array(); // Get WeekDays Array $WeeksDays = iCDatePeriod::weekdaysToArray($tWeekdays); // If Single Dates, added each one to All Dates for this event $singledates = iCString::isSerialized($tDates) ? unserialize($tDates) : array(); foreach ($singledates as $sd) { $isValid = iCDate::isDate($sd); if ( $isValid ) { array_push($eventAllDates, $sd); } } // If Period Dates, added each one to All Dates for this event (filter week Days, and if date not null) // $StDate = JHtml::date($tStartdate, 'Y-m-d H:i', $eventTimeZone); // $EnDate = JHtml::date($tEnddate, 'Y-m-d H:i', $eventTimeZone); $perioddates = iCDatePeriod::listDates($i->startdate, $i->enddate); if ( (isset ($perioddates)) && ($perioddates != NULL) ) { foreach ($perioddates as $Dat) { if (in_array(date('w', strtotime($Dat)), $WeeksDays)) { $isValid = iCDate::isDate($Dat); if ($isValid) { // $SingleDate = JHtml::date($Dat, 'Y-m-d H:i', $eventTimeZone); $SingleDate = date('Y-m-d H:i', strtotime($Dat)); array_push($eventAllDates, $SingleDate); } } } } return $eventAllDates; } /** * * EVENT DETAILS * */ public function startdatetime($i) { return $i->startdate; } protected function enddatetime($i) { return $i->enddate; } protected function start_datetime($i) { return $i->startdate; } protected function end_datetime($i) { return $i->enddate; } protected function contact_name($i) { return $i->name; } protected function contact_email($i) { return $i->email; } protected function access($i){return $i->access;} protected function address($i){return $i->address;} protected function approval($i){return $i->approval;} protected function city($i){return $i->city;} protected function country($i){return $i->country;} protected function customfields($i){return $i->customfields;} protected function dates($i){return $i->dates;} protected function displaytime($i){return $i->displaytime;} protected function email($i){return $i->email;} protected function file($i){return $i->file;} protected function period($i){return $i->period;} protected function phone($i){return $i->phone;} protected function state($i){return $i->state;} protected function website($i){return $i->website;} protected function weekdays($i){return $i->weekdays;} protected function cat_desc($i){return $i->cat_desc;} protected function place_name($i){return $i->place_name;} // Set Meta-title for an event protected function metaTitle($i) { $limit = '70'; $metaTitle = iCFilterOutput::fullCleanHTML($i->title); if ( strlen($metaTitle) > $limit ) { $string_cut = substr($metaTitle, 0, $limit); $last_space = strrpos($string_cut, ' '); $string_ok = substr($string_cut, 0, $last_space); $metaTitle = $string_ok; } return $metaTitle; } // Set Meta-description for an event protected function metaDesc($i) { $limit = '160'; $metaDesc = iCFilterOutput::fullCleanHTML($i->metadesc); if ( empty($metaDesc) ) { $metaDesc = iCFilterOutput::fullCleanHTML($i->desc); } if ( strlen($metaDesc) > $limit ) { $string_cut = substr($metaDesc, 0, $limit); $last_space = strrpos($string_cut, ' '); $string_ok = substr($string_cut, 0, $last_space); $metaDesc = $string_ok; } return $metaDesc; } // Set Meta-description as Short Description protected function metaAsShortDesc($i) { $metaAsShortDesc = iCFilterOutput::fullCleanHTML($i->metadesc); return $metaAsShortDesc; } protected function BackURL($i) { // Get Current Itemid //$this_itemid = JRequest::getInt('Itemid'); //$BackURL = str_replace('&','&', JRoute::_('index.php?option=com_icagenda&view=list&Itemid='.$this_itemid)); $BackURL = 'javascript:history.go(-1)'; return $BackURL; } protected function BackArrow($i) { // Get Current Itemid $this_itemid = JRequest::getInt('Itemid'); $jlayout = JRequest::getCmd('layout', ''); $layouts_array = array('event', 'registration'); $layout = in_array($jlayout, $layouts_array) ? $jlayout : ''; $manageraction = JRequest::getVar('manageraction', ''); $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; // RTL css if site language is RTL $lang = JFactory::getLanguage(); $back_icon = ($lang->isRTL()) ? 'iCicon iCicon-nextic' : 'iCicon iCicon-backic'; if ($layout != '' && strpos($referer,'registration') === false && !$manageraction) { if ($referer != "") { $BackArrow = '<a class="iCtip" href="' . str_replace(array('"', '<', '>', "'"), '', $referer) .'" title="' . JText::_( 'COM_ICAGENDA_BACK' ) . '"><span class="' . $back_icon . '"></span> <span class="small">' . JText::_( 'COM_ICAGENDA_BACK' ) .'</span></a>'; } else { $BackArrow = ''; return false; } } elseif ($manageraction || strpos($referer,'registration') !== false) { $BackArrow = '<a class="iCtip" href="' . JRoute::_('index.php?option=com_icagenda&Itemid=' . $this_itemid) .'" title="'. JText::_( 'COM_ICAGENDA_BACK' ) .'"><span class="' . $back_icon . '"></span> <span class="small">' . JText::_( 'COM_ICAGENDA_BACK' ) . '</span></a>'; } else { return false; } return $BackArrow; } protected function ApprovedNotification ($creatorEmail, $eventUsername, $eventTitle, $eventLink) { $app = JFactory::getApplication(); // Load Joomla Config Mail Options $sitename = $app->getCfg('sitename'); $mailfrom = $app->getCfg('mailfrom'); $fromname = $app->getCfg('fromname'); // Create User Mailer $approvedmailer = JFactory::getMailer(); // Set Sender of Notification Email $approvedmailer->setSender(array( $mailfrom, $fromname )); // Set Recipient of Notification Email $approvedmailer->addRecipient($creatorEmail); // Set Subject of Notification Email $approvedsubject = JText::sprintf('COM_ICAGENDA_APPROVED_USEREMAIL_SUBJECT', $eventTitle); $approvedmailer->setSubject($approvedsubject); // Set Body of Notification Email $approvedbodycontent = JText::sprintf( 'COM_ICAGENDA_SUBMISSION_ADMIN_EMAIL_HELLO', $eventUsername) . ',<br /><br />'; $approvedbodycontent.= JText::sprintf( 'COM_ICAGENDA_APPROVED_USEREMAIL_BODY_INTRO', $sitename) . '<br /><br />'; // $approvedbodycontent.= JText::_( 'COM_ICAGENDA_APPROVED_USEREMAIL_EVENT_LINK' ).'<br />'; $eventLink_html = '<br /><a href="' . $eventLink . '">' . $eventLink . '</a>'; $approvedbodycontent.= JText::sprintf( 'COM_ICAGENDA_APPROVED_USEREMAIL_EVENT_LINK', $eventLink_html ).'<br /><br />'; // $approvedbodycontent.= '<a href="' . $eventLink . '">' . $eventLink . '</a><br /><br />'; $approvedbodycontent.= '<hr><small>' . JText::_( 'COM_ICAGENDA_APPROVED_USEREMAIL_EVENT_LINK_INFO' ) . '</small><br /><br />'; $approvedbody = rtrim($approvedbodycontent); $approvedmailer->isHTML(true); $approvedmailer->Encoding = 'base64'; $approvedmailer->setBody($approvedbody); // Send User Notification Email if (isset($creatorEmail)) { $send = $approvedmailer->Send(); } } protected function ManagerIcons ($i) { $app = JFactory::getApplication(); // Get Current Itemid $this_itemid = JRequest::getInt('Itemid'); // Get Current Url $returnURL = base64_encode(JURI::getInstance()->toString()); $event_slug = empty($i->alias) ? $i->id : $i->id . ':' . $i->alias; // Set Manager Actions Url $managerActionsURL = 'index.php?option=com_icagenda&view=list&layout=event&id=' . $event_slug . '&Itemid=' . $this_itemid; // Set Email Notification Url to event $linkEmailUrl = JURI::base() . 'index.php?option=com_icagenda&view=list&layout=event&id=' . $event_slug . '&Itemid=' . $this_itemid; // Get Approval Status $approved = $i->approval; // Get User groups allowed to approve event submitted $groupid = JComponentHelper::getParams('com_icagenda')->get('approvalGroups', array("8")); $groupid = is_array($groupid) ? $groupid : array($groupid); // Get User Infos $user = JFactory::getUser(); $icid = $user->get('id'); $icu = $user->get('username'); $icp = $user->get('password'); // Get User groups of the user logged-in if (version_compare(JVERSION, '3.0', 'lt')) { $userGroups = $user->getAuthorisedGroups(); } else { $userGroups = $user->groups; } $baseURL = JURI::base(); $subpathURL = JURI::base(true); $baseURL = str_replace('/administrator', '', $baseURL); $subpathURL = str_replace('/administrator', '', $subpathURL); $urlcheck = str_replace('&','&', JRoute::_('administrator/index.php?option=com_icagenda&view=events').'&icu=' . $icu . '&icp=' . $icp . '&filter_search=' . $i->id); // Sub Path filtering $subpathURL = ltrim($subpathURL, '/'); // URL Event Check filtering $urlcheck = ltrim($urlcheck, '/'); if (substr($urlcheck, 0, strlen($subpathURL)+1) == "$subpathURL/") { $urlcheck = substr($urlcheck, strlen($subpathURL)+1); } $urlcheck = rtrim($baseURL, '/') . '/' . ltrim($urlcheck, '/'); $icu_approve = JRequest::getVar('manageraction', ''); $jlayout = JRequest::getCmd('layout', ''); $layouts_array = array('event', 'registration'); $icu_layout = in_array($jlayout, $layouts_array) ? $jlayout : ''; // $icu_layout = JRequest::getVar('layout', ''); if ( array_intersect($userGroups, $groupid) || in_array('8', $userGroups) ) { if ($approved == 1) { if (version_compare(JVERSION, '3.0', 'lt')) { $approvalButton = '<a class="iCtip" href="'.JRoute::_($managerActionsURL.'&manageraction=approve').'" title="'.JText::_( 'COM_ICAGENDA_APPROVE_AN_EVENT_LBL' ).'"><div class="iCicon-16 approval"></div></a>'; } else { $approvalButton = '<a class="iCtip" href="'.JRoute::_($managerActionsURL.'&manageraction=approve').'" title="'.JText::_( 'COM_ICAGENDA_APPROVE_AN_EVENT_LBL' ).'"><button type="button" class="btn btn-micro btn-warning btn-xs"><i class="icon-checkmark"></i></button></a>'; } if ( ($icu_layout == 'event') && ($icu_approve == 'approve') ) { $db = Jfactory::getDbo(); $query = $db->getQuery(true); $query->clear(); $query->update(' #__icagenda_events '); $query->set(' approval = 0 ' ); $query->where(' id = ' . (int) $i->id ); $db->setQuery((string)$query); $db->query($query); $approveSuccess = '"'.$i->title.'"'; $alertmsg = JText::sprintf('COM_ICAGENDA_APPROVED_SUCCESS', $approveSuccess); $alerttitle = JText::_( 'COM_ICAGENDA_APPROVED' ); $alerttype = 'success'; $approvedLink = JRoute::_($managerActionsURL); self::ApprovedNotification($i->created_by_email, $i->username, $i->title, $linkEmailUrl); $app->enqueueMessage($alertmsg, $alerttitle, $alerttype); } else { return $approvalButton; } } else { return false; } } else { return false; } } // Function Email Cloaking protected function emailLink ($i) { if ($i->email != NULL) { return JHtml::_('email.cloak', $i->email); } } // Image URL protected function image ($i) { $ic_image = JURI::base() . $i->image; if ($i->image) { return $ic_image; } return false; } // Get Items protected function items($atr) { // Initialize controls $access = '0'; $control = ''; $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('a.title, a.published, a.id') ->from('`#__menu` AS a') ->where( "(link = 'index.php?option=com_icagenda&view=list') AND (published > 0)" ); $db->setQuery($query); $link = $db->loadObjectList(); $itemid = JRequest::getVar('Itemid'); $parentnav = $itemid; foreach ($link as $l) { if (($l->published == '1') AND ($l->id == $parentnav)) { $linkexist = '1'; } } if (is_numeric($parentnav) && !is_array($parentnav) && !$parentnav == 0 && $linkexist == 1) { $atr = $atr['item']; $items = $this->items; $itDef = new stdClass; if ($this->items == NULL) { return NULL; } else { foreach($items as $i) { // Language Control $lang = JFactory::getLanguage(); $eventLang = ''; $langTag = ''; $langTag = $lang->getTag(); if (isset($i->language)) { $eventLang = $i->language; } if ($eventLang == '' || $eventLang == '*') { $eventLang = $langTag; } if ($i->next != '0000-00-00 00:00:00') { $it = new stdClass; $id = $i->id; foreach($atr as $k => $v) { // Corrige Notice : Undefined property: stdClass:: if (!empty($i->$k)) { // functions $it->$k = $i->$k; } else { // data if (method_exists($this, $k)) { $it->$k = $this->$k($i); } } } $itDef->$id = $it; } } } return $itDef; } else { JError::raiseError('404', JTEXT::_('JERROR_LAYOUT_PAGE_NOT_FOUND')); return false; } } // Set event Url protected function url ($i) { $menuID = $this->options['Itemid']; $eventnumber = $i->id; $event_slug = empty($i->alias) ? $i->id : $i->id . ':' . $i->alias; $url = JRoute::_('index.php?option=com_icagenda&view=list&layout=event&id=' . $event_slug . '&Itemid=' . (int)$menuID); if (is_numeric($menuID) && is_numeric($eventnumber) && !is_array($menuID) && !is_array($eventnumber) ) { return $url; } else { $url = JRoute::_('index.php'); return $url; } } // Get event Url for Add To Cal protected function Event_Link($i) { $lien = $this->options['Itemid']; $eventnumber = $i->id; $event_slug = empty($i->alias) ? $i->id : $i->id . ':' . $i->alias; $date = $i->next; // Get the "event" URL $baseURL = JURI::base(); $subpathURL = JURI::base(true); $baseURL = str_replace('/administrator', '', $baseURL); $subpathURL = str_replace('/administrator', '', $subpathURL); $urlevent = str_replace('&','&', JRoute::_('index.php?option=com_icagenda&view=list&layout=event&Itemid=' . (int)$lien . '&id=' . $event_slug)); // Sub Path filtering $subpathURL = ltrim($subpathURL, '/'); // URL Event Details filtering $urlevent = ltrim($urlevent, '/'); if (substr($urlevent, 0, strlen($subpathURL)+1) == "$subpathURL/") { $urlevent = substr($urlevent, strlen($subpathURL)+1); } $urlevent = rtrim($baseURL,'/').'/'.ltrim($urlevent,'/'); $url = $urlevent; if (is_numeric($lien) && is_numeric($eventnumber) && !is_array($lien) && !is_array($eventnumber) ) { return $url; } else { $url = JRoute::_('index.php'); return JURI::base().$url; } } // Title with link to details // // DEPRECATED protected function titleLink($i) { return '<a href="' . $this->url($i) . '">' . $i->title . '</a>'; } // Title + Manager Icons protected function titlebar($i) { $this_itemid = JRequest::getInt('Itemid'); $list_title_length = JComponentHelper::getParams('com_icagenda')->get('list_title_length', ''); $i_title = $this->titleFormat($i); $jlayout = JRequest::getCmd('layout', ''); $layouts_array = array('event', 'registration'); $layout = in_array($jlayout, $layouts_array) ? $jlayout : ''; $mbString = extension_loaded('mbstring'); $title_length = $mbString ? mb_strlen($i_title, 'UTF-8') : strlen($i_title); if (empty($layout) && ! empty($list_title_length)) { $title = $mbString ? trim(mb_substr($i_title, 0, $list_title_length, 'UTF-8')) : trim(substr($i_title, 0, $list_title_length)); $new_title_length = $mbString ? mb_strlen($title, 'UTF-8') : strlen($title); if ($new_title_length < $title_length) { $title.= '...'; } } else { $title = $i_title; } $approval = $i->approval; $event_slug = empty($i->alias) ? $i->id : $i->id . ':' . $i->alias; // Set Manager Actions Url $managerActionsURL = 'index.php?option=com_icagenda&view=list&layout=event&id=' . $event_slug . '&Itemid=' . $this_itemid; $unapproved = '<a class="iCtip" href="' . JRoute::_($managerActionsURL) . '" title="'.JText::_( 'COM_ICAGENDA_APPROVE_AN_EVENT_LBL' ).'"><small><span class="iCicon-open-details"></span></small></a>'; if ($title != NULL && $approval == 1) { return $title . ' ' . $unapproved; } elseif ($title != NULL && $approval != 1) { return $title; } return NULL; } // Title protected function titleFormat($i) { $text_transform = JComponentHelper::getParams('com_icagenda')->get('titleTransform', ''); $mbString = extension_loaded('mbstring'); if ($text_transform == 1) { $titleFormat = $mbString ? iCString::mb_ucfirst(mb_strtolower($i->title)) : ucfirst(strtolower($i->title)); return $titleFormat; } elseif ($text_transform == 2) { $titleFormat = $mbString ? mb_convert_case($i->title, MB_CASE_TITLE, "UTF-8") : ucwords(strtolower($i->title)); return $titleFormat; } elseif ($text_transform == 3) { $titleFormat = $mbString ? mb_strtoupper($i->title, "UTF-8") : strtoupper($i->title); return $titleFormat; } elseif ($text_transform == 4) { $titleFormat = $mbString ? mb_strtolower($i->title, "UTF-8") : strtolower($i->title); return $titleFormat; } return $i->title; } // Title protected function title($i) { return $i->title; } // Short Description public function shortdesc($i) { $shortdesc = $i->shortdesc ? $i->shortdesc : NULL; return $shortdesc; } // Description public function desc($i) { $desc = $i->desc ? $i->desc : NULL; return $desc; } // Short Description (content prepare) protected function shortDescription($i) { $text = JHtml::_('content.prepare', $i->shortdesc); $shortDescription = $i->shortdesc ? $text : NULL; return $shortDescription; } // Full Description (content prepare) protected function description($i) { $text = JHtml::_('content.prepare', $i->desc); $description = $i->desc ? $text : NULL; return $description; } // Auto Short Description (Full Description > Short) protected function descShort($i) { $descShort = icagendaEvents::shortDescription($i->desc); return $descShort; } // Image TAG protected function imageTag($i) { if (!$i->image == NULL) { return '<img src="' . $i->image . '" alt="" />'; } } // File TAG protected function fileTag($i) { return '<a class="icDownload" href="' . $i->file . '" target="_blank">' . JText::_( 'COM_ICAGENDA_EVENT_DOWNLOAD' ) . '</a>'; } // Website TAG protected function websiteLink($i) { $gettarget = JComponentHelper::getParams('com_icagenda')->get('targetLink', ''); $target = !empty($gettarget) ? '_blank' : '_parent'; $link = iCUrl::urlParsed($i->website, 'scheme'); return '<a href="' . $link . '" target="' . $target . '">' . $i->website . '</a>'; } /** * TIME */ // Format Time (eg. 00:00) protected function evenTime($i) { if ($this->displaytime($i) == 1) { return icagendaEvents::dateToTimeFormat($i->next); } else { return NULL; } } /** * DAY */ // Day protected function day ($i) { $eventTimeZone = null; $day_date = JHtml::date($i->next, 'd', $eventTimeZone); return $day_date; } // Day of the week, Full - From Joomla language file xx-XX.ini (eg. Saturday) protected function weekday ($i) { $eventTimeZone = null; $full_weekday = JHtml::date($i->next, 'l', $eventTimeZone); $weekday = JText::_($full_weekday); return $weekday; } // Day of the week, Short - From Joomla language file xx-XX.ini (eg. Sat) protected function weekdayShort ($i) { $eventTimeZone = null; $short_weekday = JHtml::date($i->next, 'D', $eventTimeZone); $weekdayShort = JText::_($short_weekday); return $weekdayShort; } /** * MONTHS */ // Function used for special characters function substr_unicode($str, $s, $l = null) { return join("", array_slice( preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l)); } // Format Month (eg. December) protected function month ($i) { $eventTimeZone = null; $full_month = JHtml::date($i->next, 'F', $eventTimeZone); $lang_month = JText::_($full_month); return $lang_month; } // Format Month Numeric - (eg. 07) protected function monthNum ($i) { $eventTimeZone = null; $monthNum = JHtml::date($i->next, 'm', $eventTimeZone); return $monthNum; } /** * YEAR */ // Format Year Numeric - (eg. 2013) protected function year ($i) { $eventTimeZone = null; $year = JHtml::date($i->next, 'Y', $eventTimeZone); return $year; } // Format Year Short Numeric - (eg. 13) protected function yearShort ($i) { $eventTimeZone = null; $yearShort = JHtml::date($i->next, 'y', $eventTimeZone); return $yearShort; } //////////// // DATES //////////// /** * Next Date Text * * @version 3.5.6 */ protected function dateText($i) { $eventTimeZone = null; $dates = iCString::isSerialized($i->dates) ? unserialize($i->dates) : array(); // returns array $period = iCString::isSerialized($i->period) ? unserialize($i->period) : array(); // returns array $weekdays = $i->weekdays; $site_today_date = JHtml::date('now', 'Y-m-d'); $UTC_today_date = JHtml::date('now', 'Y-m-d', $eventTimeZone); $alldates_array = array_merge($dates, $period); $alldates = array_filter($alldates_array, function($var) {return $var == iCDate::isDate($var);}); $next_date = date('Y-m-d', strtotime($i->next)); $next_datetime = date('Y-m-d H:i', strtotime($i->next)); $next_is_in_period = in_array($next_datetime, $period) ? true : false; $totDates = count($alldates); if ($totDates > 1 && $next_date > $site_today_date) { rsort($alldates); $last_date = JHtml::date($alldates[0], 'Y-m-d', $eventTimeZone); if ( ! $next_is_in_period && $last_date == $next_date) { $dateText = JText::_( 'COM_ICAGENDA_EVENT_DATE_LAST' ); } elseif ( ! $next_is_in_period) { $dateText = JText::_( 'COM_ICAGENDA_EVENT_DATE_FUTUR' ); } elseif ($next_is_in_period && $weekdays == NULL) { $dateText = JText::_( 'COM_ICAGENDA_LEGEND_DATES' ); } else { $dateText = JText::_( 'COM_ICAGENDA_EVENT_DATE' ); } } elseif ($totDates > 1 && $next_date < $site_today_date) { if ($totDates == 2) { $dateText = $next_is_in_period ? JText::_( 'COM_ICAGENDA_EVENT_DATE' ) : JText::_( 'COM_ICAGENDA_EVENT_DATE_PAST' ); } else { $dateText = ($next_is_in_period && $weekdays == NULL) ? JText::_( 'COM_ICAGENDA_LEGEND_DATES' ) : JText::_( 'COM_ICAGENDA_EVENT_DATE_PAST' ); } } elseif ($next_date == $site_today_date) { $dateText = $next_is_in_period ? JText::_( 'COM_ICAGENDA_EVENT_DATE_PERIOD_NOW' ) : JText::_( 'COM_ICAGENDA_EVENT_DATE_TODAY' ); } else { $dateText = JText::_( 'COM_ICAGENDA_EVENT_DATE' ); } return $dateText; } /** * Get Next Date (or Last Date) * * @version 3.4.0-rc */ protected function nextDate($i) { $eventTimeZone = null; $period = unserialize($i->period); // returns array $startdatetime = $i->startdate; $enddatetime = $i->enddate; $weekdays = $i->weekdays; $site_today_date = JHtml::date('now', 'Y-m-d'); $UTC_today_date = JHtml::date('now', 'Y-m-d', $eventTimeZone); $next_date = JHtml::date($i->next, 'Y-m-d', $eventTimeZone); $next_datetime = JHtml::date($i->next, 'Y-m-d H:i', $eventTimeZone); $start_date = JHtml::date($i->startdate, 'Y-m-d', $eventTimeZone); $end_date = JHtml::date($i->enddate, 'Y-m-d', $eventTimeZone); // Check if date from a period with weekdays has end time of the period set in next. // $time_next_datetime = JHtml::date($next_datetime, 'H:i', $eventTimeZone); $time_next_datetime = date('H:i', strtotime($next_datetime)); $time_startdate = JHtml::date($i->startdate, 'H:i', $eventTimeZone); $time_enddate = JHtml::date($i->enddate, 'H:i', $eventTimeZone); if ($next_date == $site_today_date && $time_next_datetime == $time_enddate) { $next_datetime = $next_date . ' ' . $time_startdate; } if ($period != NULL && in_array($next_datetime, $period)) { $next_is_in_period = true; } else { $next_is_in_period = false; } // Highlight event in progress if ($next_date == $site_today_date) { $start_span = '<span class="ic-next-today">'; $end_span = '</span>'; } else { $start_span = $end_span = ''; } $separator = '<span class="ic-datetime-separator"> - </span>'; // Format Next Date if ( $next_is_in_period && ($start_date == $end_date || $weekdays != null) ) { // Next in the period & (same start/end date OR one or more weekday selected) $nextDate = $start_span; $nextDate.= '<span class="ic-period-startdate">'; $nextDate.= $this->formatDate($i->next); $nextDate.= '</span>'; if ($this->displaytime($i) == 1) { $nextDate.= ' <span class="ic-single-starttime">' . $this->startTime($i) . '</span>'; if ($this->startTime($i) != $this->endTime($i)) { $nextDate.= $separator . '<span class="ic-single-endtime">' . $this->endTime($i) . '</span>'; } } $nextDate.= $end_span; } elseif ( $next_is_in_period && ($weekdays == null) ) { // Next in the period & different start/end date & no weekday selected $start = '<span class="ic-period-startdate">'; $start .= $this->startDate($i); $start .= '</span>'; $end = '<span class="ic-period-enddate">'; $end .= $this->endDate($i); $end .= '</span>'; if ($this->displaytime($i) == 1) { $start .= ' <span class="ic-period-starttime">' . $this->startTime($i) . '</span>'; $end .= ' <span class="ic-period-endtime">' . $this->endTime($i) . '</span>'; } $nextDate = $start_span . $start . $separator . $end . $end_span; } else { // Next is a single date $nextDate = $start_span; $nextDate.= '<span class="ic-single-next">'; $nextDate.= $this->formatDate($i->next); $nextDate.= '</span>'; if ($this->displaytime($i) == 1) { $nextDate.= ' <span class="ic-single-starttime">' . $this->evenTime($i) . '</span>'; } $nextDate.= $end_span; } return $nextDate; } // Control Upcoming dates Period protected function periodControl ($i) { $eventTimeZone = null; $date_today = JHtml::date('now', 'Y-m-d'); $datetime_enddate = JHtml::date($i->enddate, 'Y-m-d H:i', $eventTimeZone); $upPeriod = '1'; if (strtotime($datetime_enddate) > strtotime($date_today)) { return $upPeriod; } } public static function getNbTicketsBooked($date, $event_registered, $event_id = null, $date_control = null) { $eventTimeZone = null; $event_registered = is_array($event_registered) ? $event_registered : array(); $nb_registrations = 0; // Get Date if set in url as var $get_date = JRequest::getVar('date', null); if ( ! $get_date && $date_control) { $get_date = null; } foreach ($event_registered AS $reg) { $ex_reg = explode('@@', $reg); // eventid@@date@@people if ( ! $date || $date == 'period') { $nb_registrations = $nb_registrations + $ex_reg[2]; } elseif ($get_date && $event_id == $ex_reg[0] && date('Y-m-d H:i', strtotime($date)) == date('Y-m-d H:i', strtotime($ex_reg[1])) ) { $nb_registrations = $nb_registrations + $ex_reg[2]; } elseif ( ! $get_date && $event_id == $ex_reg[0] && $ex_reg[1] == 'period' ) { $nb_registrations = $nb_registrations + $ex_reg[2]; } elseif ( ! $get_date && $event_id == $ex_reg[0] && date('Y-m-d H:i', strtotime($date)) == date('Y-m-d H:i', strtotime($ex_reg[1])) ) { $nb_registrations = $nb_registrations + $ex_reg[2]; } } return $nb_registrations; } // Ticket(s) booked protected function totalRegistered($i) { $eventTimeZone = null; $date_today = JHtml::date('now', 'Y-m-d'); $allDates = $this->eventAllDates($i); $typeReg = $this->evtParams($i)->get('typeReg', ''); $perioddates = iCDatePeriod::listDates($i->startdate, $i->enddate, $eventTimeZone); // Check the period if individual dates $only_startdate = ($i->weekdays || $i->weekdays == '0') ? false : true; sort($allDates); $total_tickets_booked = 0; // Get Date if set in url as var $get_date = JRequest::getVar('date', null); if ($get_date) { $ex = explode('-', $get_date); if (count($ex) == 5) { $dateday = $ex['0'] . '-' . $ex['1'] . '-' . $ex['2'] . ' ' . $ex['3'] . ':' . $ex['4']; } else { $dateday = ''; } } else { $dateday = ''; } $this_date = ! empty($dateday) ? JHtml::date($dateday, 'Y-m-d H:i:s', $eventTimeZone) : null; // By Single Dates (registration type is not for all dates of the events) if ($typeReg != 2) { foreach ($allDates as $k => $d) { $date_control = JHtml::date($d, 'Y-m-d H:i', $eventTimeZone); if ($only_startdate && in_array($date_control, $perioddates)) { $is_full_period = true; } else { $is_full_period = false; } $datetime_date = date('Y-m-d H:i:s', strtotime($d)); $nb_tickets = self::getNbTicketsBooked($datetime_date, $i->registered, $i->id, $is_full_period); // NO Date in URL - FULL PERIOD (no weekdays) - Date IS in the PERIOD if ( ! $get_date && $only_startdate && in_array($date_control, $perioddates)) { $total_tickets_booked = $nb_tickets; } // Date in URL - FULL PERIOD (no weekdays) - Date IS NOT in the PERIOD elseif ($get_date && $only_startdate && ! in_array($date_control, $perioddates)) { if ($nb_tickets > 0 && strtotime($this_date) == strtotime($datetime_date)) { $total_tickets_booked = $total_tickets_booked + $nb_tickets; } // Only one date for registration, and the setting option of event is set to list of dates (equals "for all dates of event) elseif (count($allDates) == 1) { $nb_tickets = self::getNbTicketsBooked(null, $i->registered, $i->id, $is_full_period); $total_tickets_booked = $total_tickets_booked + $nb_tickets; } } // Date in URL - PERIOD is Individual DATES (weekdays selected) elseif ($get_date && ! $only_startdate) { if ($nb_tickets > 0 && strtotime($this_date) == strtotime($datetime_date)) { $total_tickets_booked = $total_tickets_booked + $nb_tickets; } } // NO Date in URL (all tickets for the events, not taking into account the dates) elseif (! $get_date) { if ($nb_tickets > 0) { $total_tickets_booked = self::getNbTicketsBooked(null, $i->registered, $i->id, $is_full_period); } } } } else { $nb_tickets = self::getNbTicketsBooked('period', $i->registered, $i->id); $total_tickets_booked = $nb_tickets; } return $total_tickets_booked; } // Ticket(s) could be booked protected function ticketsCouldBeBooked($i) { $eventTimeZone = null; $date_today = JHtml::date('now', 'Y-m-d'); $datetime_today = JHtml::date('now', 'Y-m-d H:i'); $allDates = $this->eventAllDates($i); $max_tickets = $this->evtParams($i)->get('maxReg', '1000000'); $typeReg = $this->evtParams($i)->get('typeReg', '1'); $perioddates = iCDatePeriod::listDates($i->startdate, $i->enddate, $eventTimeZone); $regUntilEnd = JComponentHelper::getParams('com_icagenda')->get('reg_end_period', 0); // Check the period if individual dates $only_startdate = ($i->weekdays || $i->weekdays == '0') ? false : true; sort($allDates); if ($typeReg == '2') { foreach ($allDates as $k => $d) { if (strtotime($d) < strtotime($datetime_today)) { return false; } } } $total_tickets_bookable = 0; foreach ($allDates as $k => $d) { $date_control = JHtml::date($d, 'Y-m-d H:i', $eventTimeZone); $is_in_period = in_array($date_control, $perioddates) ? true : false; if ($only_startdate && $is_in_period) { $is_full_period = true; } else { $is_full_period = false; } $datetime_date = date('Y-m-d H:i:s', strtotime($d)); $datetime_startdate = date('Y-m-d H:i:s', strtotime($i->startdate)); $datetime_enddate = date('Y-m-d H:i:s', strtotime($i->enddate)); $nb_tickets_left = $max_tickets - self::getNbTicketsBooked($datetime_date, $i->registered, $i->id, $is_full_period); // Full period & registration for all dates of the event if ($is_full_period && $typeReg == 2 && $regUntilEnd == 0 && (strtotime($datetime_startdate) < strtotime($date_today)) ) { $total_tickets_bookable = 0; } elseif ($is_full_period && $regUntilEnd == 1 && (strtotime($datetime_enddate) <= strtotime($datetime_today)) ) { $total_tickets_bookable = 0; } elseif (strtotime($d) > strtotime($date_today)) { if ($nb_tickets_left > 0) { $total_tickets_bookable = $total_tickets_bookable + $nb_tickets_left; } } } if ($total_tickets_bookable > 0) { return true; } return false; } // Dates Drop list Registration protected function datelistMkt($i) { $eventTimeZone = null; $date_today = JHtml::date('now', 'Y-m-d'); $date_time_today = JHtml::date('now', 'Y-m-d H:i'); $allDates = $this->eventAllDates($i); $timeformat = $this->options['timeformat']; $max_tickets = $this->evtParams($i)->get('maxReg', '1000000'); $perioddates = iCDatePeriod::listDates($i->startdate, $i->enddate, $eventTimeZone); $regUntilEnd = JComponentHelper::getParams('com_icagenda')->get('reg_end_period', 0); // Check the period if individual dates $only_startdate = ($i->weekdays || $i->weekdays == '0') ? false : true; $lang_time = ($timeformat == 1) ? 'H:i' : 'h:i A'; sort($allDates); $p = 0; foreach ($allDates as $k => $d) { $date_control = JHtml::date($d, 'Y-m-d H:i', $eventTimeZone); if ($only_startdate && in_array($date_control, $perioddates)) { $is_full_period = true; $datetime_date = ($regUntilEnd == 1) ? date('Y-m-d H:i:s', strtotime($i->enddate)) : date('Y-m-d H:i:s', strtotime($i->startdate)); } else { $is_full_period = false; $datetime_date = date('Y-m-d H:i:s', strtotime($d)); } $nb_tickets_left = $max_tickets - self::getNbTicketsBooked($datetime_date, $i->registered, $i->id, $is_full_period); $date_today_compare = ($this->displaytime($i) == 1) ? $date_time_today : $date_today; if (strtotime($datetime_date) > strtotime($date_today_compare) && $nb_tickets_left > 0) { $tickets_left = ($max_tickets != '1000000') ? ' (✓' . $nb_tickets_left . ')' : ''; if ($is_full_period) { if ($p == 0) { $upDays[$k] = '@@' . $this->formatDate($i->startdate) . ' ➜ ' . $this->formatDate($i->enddate) . $tickets_left; $p = $p+1; } } else { $date = $this->formatDate($d); $event_time = ($this->displaytime($i) == 1) ? ' - '.date($lang_time, strtotime($datetime_date)) : ''; $upDays[$k] = $datetime_date . '@@' . $date . $event_time . $tickets_left; } } } if (isset($upDays)) { return $upDays; } } // Function return true if upcoming dates for Booking protected function upcomingDatesBooking($i) { if (count($this->datelistMkt($i)) > 0) { return true; } return false; } // All Single Dates in Event Details Page protected function datelistUl ($i) { $iCparams = JComponentHelper::getParams('com_icagenda'); $timeformat = $this->options['timeformat']; // Hide/Show Option $SingleDates = $iCparams->get('SingleDates', 1); // Access Levels Option // $accessSingleDates = $iCparams->get('accessSingleDates', 1); // Order by Dates $SingleDatesOrder = $iCparams->get('SingleDatesOrder', 1); // List Model $SingleDatesListModel = $iCparams->get('SingleDatesListModel', 1); if ($SingleDates == 1) { // if ($this->accessLevels($accessSingleDates)) // { // $days = unserialize($i->dates); $days = iCString::isSerialized($i->dates) ? unserialize($i->dates) : array(); // returns array if ($SingleDatesOrder == 1) { rsort($days); } elseif ($SingleDatesOrder == 2) { sort($days); } $totDates = count($days); if ($timeformat == 1) { $lang_time = 'H:i'; } else { $lang_time = 'h:i A'; } // Detect if Singles Dates, and no single date with null value $displayDates = false; $nbDays = count($days); foreach ($days as $k => $d) { if ($d != '0000-00-00 00:00' && $d != '0000-00-00 00:00:00' && $nbDays != 0) { $displayDates = true; } } $daysUl = ''; if ($displayDates) { if ($SingleDatesListModel == '2') { $n = 0; $daysUl.= '<div class="alldates"><i>'. JText::_( 'COM_ICAGENDA_LEGEND_DATES' ).': </i>'; foreach ($days as $k => $d) { $n = $n+1; $fd = $this->formatDate($d); $timeDate = ($this->displaytime($i) == 1) ? ' <span class="evttime">'.date($lang_time, strtotime($d)).'</span>' : ''; if ($n <= ($totDates-1)) { $daysUl.= '<span class="alldates">'.$fd.$timeDate.'</span> - '; } elseif ($n == $totDates) { $daysUl.= '<span class="alldates">'.$fd.$timeDate.'</span>'; } } $daysUl.= '</div>'; } else { $daysUl.= '<ul class="alldates">'; foreach ($days as $k => $d) { $fd = $this->formatDate($d); $timeDate = ($this->displaytime($i) == 1) ? ' <span class="evttime">'.date($lang_time, strtotime($d)).'</span>' : ''; $daysUl.= '<li class="alldates">'.$fd.$timeDate.'</li>'; } $daysUl.= '</ul>'; } } if ($totDates > '0') { return $daysUl; } else { return false; } // } // else // { // return false; // } } else { return false; } } // Function Period Display in Registration protected function periodDisplay($i) { if ($this->eventHasPeriod($i)) { if (iCDate::isDate($i->startdate) || iCDate::isDate($i->enddate)) { $show = '1'; return $show; } } } // Format Start Date of a period protected function startDate($i) { return $this->formatDate($i->startdate);; } // Format End Date of a period protected function endDate($i) { return $this->formatDate($i->enddate); } // Start Day of a period (numeric 1) protected function startDay($i) { $day_format = 'd-m-Y'; $start_day = date($day_format, strtotime($i->startdate)); $format = '%e'; if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { $format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format); } $startDay = iCDate::isDate($i->startdate) ? strftime($format, strtotime($start_day)) : ' '; return $startDay; } // End Day of a period (numeric 1) protected function endDay($i) { $day_format = 'd-m-Y'; $end_day = date($day_format, strtotime($i->enddate)); $format = '%e'; if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { $format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format); } $endDay = iCDate::isDate($i->enddate) ? strftime($format, strtotime($end_day)) : ' '; return $endDay; } // End Month of a period (numeric 01) protected function endMonthNum($i) { $eventTimeZone = null; $endMonthNum = JHtml::date($i->enddate, 'm', $eventTimeZone); return JText::_($endMonthNum); } // End Month of a period (text January) protected function endMonth($i) { $eventTimeZone = null; $endMonth = JHtml::date($i->enddate, 'F', $eventTimeZone); return JText::_($endMonth); } // End Year of a period (numeric 2001) protected function endYear($i) { $eventTimeZone = null; $endYear = JHtml::date($i->enddate, 'Y', $eventTimeZone); return JText::_($endYear); } // Format Start Time of a period protected function startTime($i) { $eventTimeZone = null; $datetime_startdate = JHtml::date($i->startdate, 'Y-m-d H:i', $eventTimeZone); $timeformat = $this->options['timeformat']; $lang_time = ($timeformat == 1) ? 'H:i' : 'h:i A'; $startTime = date($lang_time, strtotime($datetime_startdate)); if ($this->displaytime($i) == 1) { return $startTime; } } // Format End Time of a period protected function endTime($i) { $eventTimeZone = null; $datetime_enddate = JHtml::date($i->enddate, 'Y-m-d H:i', $eventTimeZone); $timeformat = $this->options['timeformat']; $lang_time = ($timeformat == 1) ? 'H:i' : 'h:i A'; $endTime = date($lang_time, strtotime($datetime_enddate)); if ($this->displaytime($i) == 1) { return $endTime; } } // Display period text width Format Date (eg. from 00-00-0000 to 00-00-0000) protected function periodDates ($i) { $iCparams = JComponentHelper::getParams('com_icagenda'); // Hide/Show Option $PeriodDates = $iCparams->get('PeriodDates', 1); // Access Levels Option $accessPeriodDates = $iCparams->get('accessPeriodDates', 1); // List Model $SingleDatesListModel = $iCparams->get('SingleDatesListModel', 1); // First day of the week $firstday_week_global = $iCparams->get('firstday_week_global', 1); // WeekDays $weekdays = $i->weekdays; $weekdaysall = empty($weekdays) ? true : false; if ($firstday_week_global == '1') { $weekdays_array = explode (',', $weekdays); if (in_array('0', $weekdays_array)) { $weekdays = str_replace('0', '', $weekdays); $weekdays = $weekdays.',7'; } } if (!$weekdaysall) { $weekdays_array = explode (',', $weekdays); $wdaysArray = array(); foreach ($weekdays_array AS $wd) { if ($firstday_week_global != '1') { if ($wd == 0) $wdaysArray[] = JText::_( 'SUNDAY' ); } if ($wd == 1) $wdaysArray[] = JText::_( 'MONDAY' ); if ($wd == 2) $wdaysArray[] = JText::_( 'TUESDAY' ); if ($wd == 3) $wdaysArray[] = JText::_( 'WEDNESDAY' ); if ($wd == 4) $wdaysArray[] = JText::_( 'THURSDAY' ); if ($wd == 5) $wdaysArray[] = JText::_( 'FRIDAY' ); if ($wd == 6) $wdaysArray[] = JText::_( 'SATURDAY' ); if ($firstday_week_global == '1') { if ($wd == 7) $wdaysArray[] = JText::_( 'SUNDAY' ); } } $last = array_slice($wdaysArray, -1); $first = join(', ', array_slice($wdaysArray, 0, -1)); $both = array_filter(array_merge(array($first), $last)); // RTL css if site language is RTL $lang = JFactory::getLanguage(); if ( $lang->isRTL() ) { $arrow_list = '↵'; } else { $arrow_list = '↳'; } $wdays = $arrow_list . ' <small><i>' . join(' & ', $both) . '</i></small>'; } else { $wdays = ''; } $showDays =''; if ( $PeriodDates == 1 ) { // NOT CURRENTLY USED (is this option needed?) // if ( $this->accessLevels($accessPeriodDates) ) // { $startDate = $this->formatDate($i->startdate); $endDate = $this->formatDate($i->enddate); if ($startDate == $endDate) { $start = $this->startDate($i); $end = ''; if ($this->displaytime($i) == 1) { if ($this->startTime($i) !== $this->endTime($i)) { $timeOneDay = '<span class="evttime">'.$this->startTime($i).' - '.$this->endTime($i).'</span>'; } else { $timeOneDay = '<span class="evttime">'.$this->startTime($i).'</span>'; } } else { $timeOneDay = ''; } } else { $start = ucfirst(JText::_( 'COM_ICAGENDA_PERIOD_FROM' )).' '.$this->startDate($i).' <span class="evttime">'.$this->startTime($i).'</span>'; $end = JText::_( 'COM_ICAGENDA_PERIOD_TO' ).' '.$this->endDate($i).' <span class="evttime">'.$this->endTime($i).'</span>'; $showDays = $wdays; $timeOneDay = ''; } if ($SingleDatesListModel == 2) { $period = '<div class="alldates"><i>'. JText::_( 'COM_ICAGENDA_EVENT_PERIOD' ).': </i>'.$start.' '.$end.' '.$timeOneDay; if (!empty($showDays)) { $period.= '<br /><span style="margin-left:30px">'.$showDays.'</span>'; } $period.= '</div>'; } else { $period = '<ul class="alldates"><li>'.$start.' '.$end.' '.$timeOneDay; if (!empty($showDays)) { $period.= '<br/>'.$showDays; } $period.= '</li></ul>'; } if ($this->eventHasPeriod($i)) { if (($i->startdate!='0000-00-00 00:00:00') AND ($i->enddate!='0000-00-00 00:00:00')) { return $period; } } else { return false; } // } // else // { // return false; // } } else { return false; } } // Function to get Format Date (event item) protected function formatDate($date) { // Date Format Option (Global Component Option) $date_format_global = JComponentHelper::getParams('com_icagenda')->get('date_format_global', 'Y - m - d'); $date_format_global = ($date_format_global !== '0') ? $date_format_global : 'Y - m - d'; // Previous 3.5.6 setting // Date Format Option (Menu Option) $date_format_menu = JFactory::getApplication()->getParams()->get('format', ''); $date_format_menu = ($date_format_menu !== '0') ? $date_format_menu : ''; // Previous 3.5.6 setting // Set Date Format option to be used $format = $date_format_menu ? $date_format_menu : $date_format_global; // Separator Option $separator = JFactory::getApplication()->getParams()->get('date_separator', ' '); if ( ! is_numeric($format)) { // Update old Date Format options of versions before 2.1.7 $format = str_replace(array('nosep', 'nosep', 'sepb', 'sepa'), '', $format); $format = str_replace('.', ' .', $format); $format = str_replace(',', ' ,', $format); } $dateFormatted = iCGlobalize::dateFormat($date, $format, $separator); return $dateFormatted; } /** * GOOGLE MAPS */ // Latitude protected function lat ($i) { if (($i->coordinate != NULL) && ($i->lat == '0.0000000000000000')) { $ex = explode(', ', $i->coordinate); $latresult = $ex[0]; } elseif ($i->lat != '0.0000000000000000') { $latresult = $i->lat; } else { $latresult = NULL; } return $latresult; } // Longitude protected function lng ($i) { if (($i->coordinate != NULL) && ($i->lng == '0.0000000000000000')) { $ex = explode(', ', $i->coordinate); $lngresult = $ex[1]; } elseif ($i->lng != '0.0000000000000000') { $lngresult = $i->lng; } else { $lngresult = NULL; } return $lngresult; } // Function Map protected function map ($i) { $maplat = $this->lat($i); $maplng = $this->lng($i); $mapid = $i->id; $iCgmap = '<div class="icagenda_map" id="map_canvas'.(int)$mapid.'" style="width:'.$this->options['m_width'].'; height:'.$this->options['m_height'].'"></div>'; $iCgmap.= '<script type="text/javascript">'; $iCgmap.= 'initialize('.$maplat.', '.$maplng.', '.(int)$mapid.');'; $iCgmap.= '</script>'; return $iCgmap; } // Function Map protected function coordinate ($i) { // Hide/Show Option $GoogleMaps = JComponentHelper::getParams('com_icagenda')->get('GoogleMaps', 1); // Access Levels Option $accessGoogleMaps = JComponentHelper::getParams('com_icagenda')->get('accessGoogleMaps', 1); $maplat = $this->lat($i); $maplng = $this->lng($i); if ($GoogleMaps == 1 && $this->accessLevels($accessGoogleMaps) && $maplat != NULL && $maplng != NULL ) { return true; } return false; } /** * Registered Users List */ // Participant List Display protected function participantList($i) { $iCparams = JComponentHelper::getParams('com_icagenda'); // Get Option if usage of iCagenda registration form for this event $evtParams = $this->evtParams($i); $regLink = $evtParams->get('RegButtonLink', ''); // Hide/Show Option $participantList = $iCparams->get('participantList', 1); // Access Levels Option $accessParticipantList = $iCparams->get('accessParticipantList', 1); if ($participantList == 1 && ! $regLink && $this->accessLevels($accessParticipantList) ) { return $participantList; } return false; } // Display Title List of Participants (if no slide effect) protected function participantListTitle($i) { // Get Option if usage of iCagenda registration form for this event $evtParams = $this->evtParams($i); $regLink = $evtParams->get('RegButtonLink', ''); $participantList = $this->options['participantList']; $participantSlide = $this->options['participantSlide']; $registration = $this->statutReg($i) ? $this->statutReg($i) : ''; if ($participantSlide == 0 && $registration == 1 && $participantList == 1 && !$regLink ) { return JText::_( 'COM_ICAGENDA_EVENT_LIST_OF_PARTICIPANTS'); } } // Display Registered Users protected function registeredUsers($i) { $eventTimeZone = null; // Get Component PARAMS $iCparams = JComponentHelper::getParams('com_icagenda'); // Preparing connection to db $db = JFactory::getDBO(); // Preparing the query $query = $db->getQuery(true); $query->select(' r.userid AS userid, r.name AS registeredUsers, r.date as regDate, r.people as regPeople, r.email as regEmail, u.name AS name, u.username AS username') ->from('#__icagenda_registration AS r') ->leftJoin('#__users as u ON u.id = r.userid') ->where('(r.eventId='.(int)$i->id.') AND (r.state > 0)'); $db->setQuery($query); $registeredUsers = $db->loadObjectList(); $nbusers = count($registeredUsers); $nbmax = $nbusers-1; $registration = ''; $registration = $this->statutReg($i); $n = '0'; // Slide Params $participantList = $iCparams->get('participantList', 1); $participantSlide = $iCparams->get('participantSlide', 1); $participantDisplay = $iCparams->get('participantDisplay', 1); $fullListColumns = $iCparams->get('fullListColumns', 'tiers'); // logged-in Users: Name/User Name Option $nameJoomlaUser = $iCparams->get('nameJoomlaUser', 1); // Get Type Registration (for all dates or per date) $typeReg = $this->evtParams($i)->get('typeReg', 1); // Get Date if set in url as var $get_date = JRequest::getVar('date', null); if ($get_date) { $ex = explode('-', $get_date); if (count($ex) == 5) { $dateday = $ex['0'].'-'.$ex['1'].'-'.$ex['2'].' '.$ex['3'].':'.$ex['4']; } else { $dateday = ''; } } else { $dateday = ''; } $this_date = JHtml::date($dateday, 'Y-m-d H:i', $eventTimeZone); // Start List of Participants jimport( 'joomla.html.html.sliders' ); $slider_c = ''; $list_participants = ''; if ($participantList == 1 && $registration == 1) { $n_list='names_noslide'; if ($participantSlide == 1) { $n_list = 'names_slide'; $slider_c = 'class="pane-slider content"'; $list_participants.= JHtml::_('sliders.start', 'icagenda', array('useCookie'=>0, 'startOffset'=>-1, 'startTransition'=>1)); $list_participants.= JHtml::_('sliders.panel', JText::_('COM_ICAGENDA_EVENT_LIST_OF_PARTICIPANTS'), 'slide1'); } foreach ($registeredUsers as $reguser) { $this_reg_date = strtotime($reguser->regDate) ? JHtml::date($reguser->regDate, 'Y-m-d H:i', $eventTimeZone) : $reguser->regDate; if ( ($this_reg_date == $this_date) || ($typeReg == 2) ) { $n = $n+1; } // Registration by dates, and registration date is not filled elseif ($typeReg == 1 && ! $this_reg_date) { $n = $n+1; } } if ($nbusers == NULL || ($n == 0 && ! empty($get_date))) { $list_participants.= '<div ' . $slider_c . '>'; $list_participants.= ' '.JText::_( 'COM_ICAGENDA_NO_REGISTRATION').' '; $list_participants.= '</div>'; } // Full display elseif ($participantDisplay == 1) { $column = isset($fullListColumns) ? $fullListColumns : 'tiers'; $list_participants.= '<div ' . $slider_c . '>'; foreach ($registeredUsers as $reguser) { $this_reg_date = strtotime($reguser->regDate) ? JHtml::date($reguser->regDate, 'Y-m-d H:i', $eventTimeZone) : $reguser->regDate; if ( ($this_reg_date == $this_date || empty($get_date)) || $typeReg == 2 || ($typeReg == 1 && ! $this_reg_date) ) { $avatar = md5( strtolower( trim( $reguser->regEmail ) ) ); // Get Username and name if ( ! empty($reguser->userid)) { $data_name = $reguser->name; $data_username = $reguser->username; if ($nameJoomlaUser == 1) { $reguser->registeredUsers = $reguser->registeredUsers; } else { $reguser->registeredUsers = $data_username; } } $regDate = ''; if (strtotime($reguser->regDate)) // Test if registered date before 3.3.3 could be converted { // Control if date valid format (Y-m-d H:i) $datetime_format = 'Y-m-d H:i:s'; $datetime_input = $reguser->regDate; $datetime_input = trim($datetime_input); $datetime_is_valid = date($datetime_format, strtotime($datetime_input)) == $datetime_input; if ($datetime_is_valid) // New Data value (since 3.3.3) { $ex_reg_datetime_db = explode (' ', $datetime_input); $registered_date = $this->formatDate(date('Y-m-d', strtotime($ex_reg_datetime_db['0']))); $reg_time_get = isset($ex_reg_datetime_db['1']) ? $ex_reg_datetime_db['1'] : ''; } else // Test if old date format (before 3.3.3) could be converted. If not, displays old format. { $ex_reg_datetime = explode (' - ', trim($reguser->regDate)); // Control if date valid format (Y-m-d) - Means could be converted $date_format = 'Y-m-d H:i:s'; $date_input = $ex_reg_datetime['0']; $date_input = trim($date_input); $date_str = strtotime($date_input); $date_is_valid = date($date_format, $date_str) == $date_input; if ($date_is_valid) { $registered_date = $this->formatDate(date('Y-m-d', $date_str)); } else { $registered_date = $ex_reg_datetime['0']; } $reg_time_get = isset($ex_reg_datetime['1']) ? $ex_reg_datetime['1'] : ''; } $regDate.= $registered_date; if ($reg_time_get) { $regDate.= ' - '.date('H:i', strtotime($reg_time_get)); } } else { $regDate.= $reguser->regDate; } if ($n <= $nbmax || $n == $nbusers) { $list_participants.= '<table class="list_table ' . $column . '" cellpadding="0"><tbody><tr><td class="imgbox"><img alt="' . $reguser->registeredUsers . '" src="http://www.gravatar.com/avatar/' . $avatar . '?s=36&d=mm"/></td><td valign="middle"><span class="list_name">' . $reguser->registeredUsers . '</span><span class="list_places"> (' . $reguser->regPeople . ')</span><br /><span class="list_date">' . $regDate . '</span></td></tr></tbody></table>'; } } } $list_participants.= '</div>'; } // Avatar display elseif ($participantDisplay == 2) { $list_participants.= '<div ' . $slider_c . '>'; foreach ($registeredUsers as $reguser) { $this_reg_date = strtotime($reguser->regDate) ? JHtml::date($reguser->regDate, 'Y-m-d H:i', $eventTimeZone) : $reguser->regDate; if ( ($this_reg_date == $this_date || empty($get_date)) || $typeReg == 2 || ($typeReg == 1 && ! $this_reg_date) ) { $avatar = md5(strtolower(trim($reguser->regEmail))); // Get Username and name if ( ! empty($reguser->userid)) { $data_name = $reguser->name; $data_username = $reguser->username; if ($nameJoomlaUser == 1) { $reguser->registeredUsers = $data_name; } else { $reguser->registeredUsers = $data_username; } } if ($n <= $nbmax || $n == $nbusers) { $list_participants.= '<div style="width: 76px; height: 80px; float:left; margin:2px; text-align:center;"><img style="border-radius: 3px 3px 3px 3px; margin:2px 0px;" alt="' . $reguser->registeredUsers . '" src="http://www.gravatar.com/avatar/' . $avatar . '?s=48&d=mm"/><br/><strong style="text-align:center; font-size:9px;">' . $reguser->registeredUsers . '</strong></div>'; } } } $list_participants.= '</div>'; } // Name/username display elseif ($participantDisplay == 3) { $list_participants.= '<div ' . $slider_c . '>'; $list_participants.= '<div class="' . $n_list . '">'; $list_username = ''; foreach ($registeredUsers as $reguser) { $this_reg_date = strtotime($reguser->regDate) ? JHtml::date($reguser->regDate, 'Y-m-d H:i', $eventTimeZone) : $reguser->regDate; if ( ($this_reg_date == $this_date ||empty($get_date)) || $typeReg == 2 || ($typeReg == 1 && ! $this_reg_date) ) { // Get Username and name if ( ! empty($reguser->userid)) { $data_name = $reguser->name; $data_username = $reguser->username; if ($nameJoomlaUser == 1) { $reguser->registeredUsers = $data_name; } else { $reguser->registeredUsers = $data_username; } } $list_username.= $reguser->registeredUsers . ', '; } } $list_participants.= trim($list_username, ", "); $list_participants.= '</div>'; $list_participants.= '</div>'; } if ($participantSlide == 1) { $list_participants.= JHtml::_('sliders.end'); } } else { $list_participants.= ''; } return $list_participants; } /** * SPECIAL FUNCTIONS */ // function Event Options protected function evtParams($i) { $evtParams = ''; $evtParams = new JRegistry($i->params); return $evtParams; } // Function if Period Dates exist // DEPRECATED protected function periodTest($i) { $daysp = unserialize($i->period); if ($daysp != NULL) { return true; } return false; } /* * Function if Period Dates exist for this event */ protected function eventHasPeriod($i) { $period_dates = iCString::isSerialized($i->period) ? unserialize($i->period) : array(); // returns array if (count($period_dates) > 0) { return true; } return false; } /* TO BE MOVED TO UTILITIES LIBRARY * Function to check if user has access rights to defined access * * $accessLevel Access level of the item to check User Permissions * * If in super user group, always allowed */ protected function accessLevels($accessLevel) { // Get User Access Levels $user = JFactory::getUser(); $userLevels = $user->getAuthorisedViewLevels(); $userGroups = version_compare(JVERSION, '3.0', 'ge') ? $user->groups : $user->getAuthorisedGroups(); // Control: if access level, or Super User if (in_array($accessLevel, $userLevels) || in_array('8', $userGroups)) { return true; } return false; } /* * Function to detect if info details exist in an event, * and to hide or show it depending of Options (display and access levels) */ protected function infoDetails($i) { // Hide/Show Option $infoDetails = JComponentHelper::getParams('com_icagenda')->get('infoDetails', 1); // Access Levels Option $accessInfoDetails = JComponentHelper::getParams('com_icagenda')->get('accessInfoDetails', 1); if ( ($infoDetails == 1 && $this->accessLevels($accessInfoDetails)) && (($this->statutReg($i) == '1' && $this->maxNbTickets($i)) || $i->phone || $i->email || $i->website || $i->address || $i->file ) ) { return true; } return false; } /** * ADDTHIS - Social Networks */ // function to override general options display of AddThis in event details view protected function ateventshow($i) { $atevent = $this->options['atevent']; $evtParams = $this->evtParams($i); $eventatvent = $evtParams->get('atevent', ''); $show = ($eventatvent == '') ? $atevent : $eventatvent; return $show; } // function option display AddThis social networks sharing protected function share_event($i) { $at = $this->ateventshow($i); if ($at == 1) { $share = $this->share($i); } else { $share = NULL; } return $share; } // function AddThis social networks sharing protected function share ($i) { $url = parse_url(Juri::base()); $addthis_scheme = ($url['scheme'] == 'https') ? 'https://' : 'http://'; $addthis = $this->options['addthis']; $float = $this->options['atfloat']; $icon = $this->options['aticon']; if ($float == 1) { $floataddthis = 'floating'; $float_position = 'position: fixed;'; $float_side = 'left'; } elseif ($float == 2) { $floataddthis = 'floating'; $float_position = 'position: fixed;'; $float_side = 'right'; } else { $floataddthis = 'default'; $float_position = ''; $float_side = 'right'; } if ($icon == 2) { $iconaddthis = '32x32'; } else { $iconaddthis = '16x16'; } $at_div = '<div class="share ic-share" style="' . $float_position . '">'; $at_div.= '<!-- AddThis Button BEGIN -->'; $at_div.= '<div class="addthis_toolbox'; $at_div.= ' addthis_' . $floataddthis . '_style'; $at_div.= ' addthis_' . $iconaddthis . '_style"'; $at_div.= ' style="' . $float_side . ': 2%; top: 40%;">'; $at_div.= '<a class="addthis_button_preferred_1"></a>'; $at_div.= '<a class="addthis_button_preferred_2"></a>'; $at_div.= '<a class="addthis_button_preferred_3"></a>'; $at_div.= '<a class="addthis_button_preferred_4"></a>'; $at_div.= '<a class="addthis_button_compact"></a>'; $at_div.= '<a class="addthis_counter addthis_bubble_style"></a>'; $at_div.= '</div>'; if ($addthis) { $at_div.= '<script type="text/javascript">var addthis_config = {"data_track_addressbar":true};</script>'; $at_div.= '<script type="text/javascript" src="' . $addthis_scheme . 's7.addthis.com/js/300/addthis_widget.js#pubid=' . $this->options['addthis'] . '" async="async"></script>'; } else { $at_div.= '<script type="text/javascript">var addthis_config = {"data_track_addressbar":false};</script>'; $at_div.= '<script type="text/javascript" src="' . $addthis_scheme . 's7.addthis.com/js/300/addthis_widget.js#pubid=ra-5024db5322322e8b" async="async"></script>'; } $at_div.= '<!-- AddThis Button END -->'; $at_div.= '</div>'; return $at_div; } /** * REGISTRATIONS */ // function url to iCagenda registration page protected function iCagendaRegForm ($i) { $event_slug = empty($i->alias) ? $i->id : $i->id . ':' . $i->alias; $iCagendaRegForm = JROUTE::_('index.php?option=com_icagenda&view=list&layout=registration&Itemid='. (int) $this->options['Itemid'] . '&id=' . $event_slug); return $iCagendaRegForm; } // function link to registration page protected function regUrl($i) { $event_slug = empty($i->alias) ? $i->id : $i->id . ':' . $i->alias; $icagenda_form = JRoute::_('index.php?option=com_icagenda&view=list&layout=registration&Itemid='. (int) $this->options['Itemid'] . '&id=' . $event_slug); $evtParams = $this->evtParams($i); $regLink = $evtParams->get('RegButtonLink', ''); $regLinkArticle = $evtParams->get('RegButtonLink_Article', $icagenda_form); $regLinkUrl = $evtParams->get('RegButtonLink_Url', $icagenda_form); $RegButtonTarget = $evtParams->get('RegButtonTarget', '0'); if ($RegButtonTarget == 1) { $browserTarget = '_blank'; } else { $browserTarget = '_parent'; } if ($regLink == 1 && is_numeric($regLinkArticle)) { $regUrl = JURI::root() . 'index.php?option=com_content&view=article&id=' . $regLinkArticle . '" rel="nofollow" target="' . $browserTarget; } elseif ($regLink == 2) { $regUrl = $regLinkUrl . '" rel="nofollow" target="' . $browserTarget; } else { $regUrl = $icagenda_form . '" rel="nofollow" target="' . $browserTarget; } return $regUrl; } /* * Function to return Registration Status for this event */ protected function statutReg($i) { $gstatutReg = $this->options['statutReg']; $evtParams = $this->evtParams($i); $evtstatutReg = $evtParams->get('statutReg', ''); // Control and edit param values to iCagenda v3 if ($evtstatutReg == '2') { $evtstatutReg = '0'; } $statutReg = ($evtstatutReg != '') ? $evtstatutReg : $gstatutReg; return $statutReg; } /* * Function to return Registration Access Level for this event */ protected function accessReg($i) { $reg_form_access = JComponentHelper::getParams('com_icagenda')->get('reg_form_access', 1); $evtParams = $this->evtParams($i); $accessReg = $evtParams->get('accessReg', $reg_form_access); return $accessReg; } // function Registration Type TO BE CHECKED IF USED AS FUNCTION protected function typeReg($i) { $evtParams = $this->evtParams($i); $typeReg = $evtParams->get('typeReg', ''); return $typeReg; } // function Max places per registration protected function maxRlist($i) { $maxRlist = ''; $gmaxRlist = $this->options['maxRlist']; $evtParams = $this->evtParams($i); $evtmaxRlistGlobal = $evtParams->get('maxRlistGlobal'); $evtmaxRlist = $evtParams->get('maxRlist'); // Control and edit param values to iCagenda v3 if ($evtmaxRlistGlobal == '1') { $evtmaxRlistGlobal = ''; } elseif ($evtmaxRlistGlobal == '0') { $evtmaxRlistGlobal = '2'; } if ($evtmaxRlistGlobal == '2') { $maxRlist = $evtmaxRlist; } else { $maxRlist = $gmaxRlist; } return $maxRlist; } // Keep for B/C : DEPRECATED! // Function Max Registrations per event (OLD before 3.2.8, for use with old theme packs or custom one) protected function maxReg($i) { $evtParams = $this->evtParams($i); $maxReg = $evtParams->get('maxReg', '1000000'); return $maxReg; } // function Max Nb Tickets (Control if set) protected function maxNbTickets($i) { $maxNbTickets = $this->evtParams($i)->get('maxReg', '1000000'); if ($maxNbTickets != '1000000' && ($this->statutReg($i) == '1')) { return $maxNbTickets; } } // function Email Required protected function emailRequired($i) { return $this->options['emailRequired']; } // function Phone Required protected function phoneRequired($i) { return $this->options['phoneRequired']; } // function pre-formated to display Register button and registered bubble protected function reg($i) { $reg = $this->statutReg($i); $accessreg = $this->accessReg($i); $nbreg = $this->totalRegistered($i); $maxreg = $this->maxReg($i); $upcomingDatesBooking = $this->upcomingDatesBooking($i); $ticketsCouldBeBooked = $this->ticketsCouldBeBooked($i); $regUntilEnd = JComponentHelper::getParams('com_icagenda')->get('reg_end_period', 0); $typeReg = $this->evtParams($i)->get('typeReg', '1'); // Initialize controls $date_today = JHtml::date('now', 'Y-m-d'); $date_time_today = JHtml::date('now', 'Y-m-d H:i'); $access = '0'; $control = ''; $TextRegBt = ''; $get_date = JRequest::getVar('date', ''); if ($get_date) { $ex = explode('-', $get_date); $dateday = (count($ex) == 5) ? $ex['0'].'-'.$ex['1'].'-'.$ex['2'].' '.$ex['3'].':'.$ex['4'] : ''; $date_is_upcoming = (strtotime($dateday) > strtotime($date_time_today)) ? true : false; $is_full_period = false; } else { $period = unserialize($i->period); $period = is_array($period) ? $period : array(); $only_startdate = ($i->weekdays || $i->weekdays == '0') ? false : true; $datetime_startdate = JHtml::date($i->startdate, 'Y-m-d H:i', null); if ($only_startdate && in_array($datetime_startdate, $period)) { $is_full_period = true; } else { $is_full_period = false; } if (count($period) > 0 && $only_startdate && (strtotime($datetime_startdate) < strtotime($date_time_today)) ) { $date_is_upcoming = false; } else { $date_is_upcoming = true; } } // Access Control $user = JFactory::getUser(); $userLevels = $user->getAuthorisedViewLevels(); $evtParams = $this->evtParams($i); $regLink = $evtParams->get('RegButtonLink', ''); if ($evtParams->get('RegButtonText')) { $TextRegBt = $evtParams->get('RegButtonText'); } elseif ($this->options['RegButtonText']) { $TextRegBt = $this->options['RegButtonText']; } else { $TextRegBt = JText::_( 'COM_ICAGENDA_REGISTRATION_REGISTER'); } $regButton_type = ''; // DEV. NOT IN USE if ($regButton_type == 'button') // DEV. NOT IN USE { $doc = JFactory::getDocument(); $style = '.regis_button {' . 'text-transform: none !important;' . 'padding: 10px 14px 10px;' . '-webkit-border-radius: 10px;' . '-moz-border-radius: 10px;' . 'border-radius: 10px;' . 'color: #FFFFFF;' . 'background-color: #D90000;' . '*background-color: #751616;' . 'background-image: -ms-linear-gradient(top,#D90000,#751616);' . 'background-image: -webkit-gradient(linear,0 0,0 100%,from(#D90000),to(#751616));' . 'background-image: -webkit-linear-gradient(top,#D90000,#751616);' . 'background-image: -o-linear-gradient(top,#D90000,#751616);' . 'background-image: linear-gradient(top,#D90000,#751616);' . 'background-image: -moz-linear-gradient(top,#D90000,#751616);' . 'background-repeat: repeat-x;' . 'filter: progid:dximagetransform.microsoft.gradient(startColorstr="#D90000",endColorstr="#751616",GradientType=0);' . 'filter: progid:dximagetransform.microsoft.gradient(enabled=false);' . '*zoom: 1;' . '-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);' . '-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);' . 'box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);' . '}' . '.regis_button:hover {' . 'color: #F9F9F9;' . 'background-color: #b60000;' . '*background-color: #531111;' . 'background-image: -ms-linear-gradient(top,#b60000,#531111);' . 'background-image: -webkit-gradient(linear,0 0,0 100%,from(#b60000),to(#531111));' . 'background-image: -webkit-linear-gradient(top,#b60000,#531111);' . 'background-image: -o-linear-gradient(top,#b60000,#531111);' . 'background-image: linear-gradient(top,#b60000,#531111);' . 'background-image: -moz-linear-gradient(top,#b60000,#531111);' . 'background-repeat: repeat-x;' . 'filter: progid:dximagetransform.microsoft.gradient(startColorstr="#b60000",endColorstr="#531111",GradientType=0);' . 'filter: progid:dximagetransform.microsoft.gradient(enabled=false);' . '*zoom: 1;' . '}'; $doc->addStyleDeclaration( $style ); } if ($reg == 1) { $dates_bookable = $this->datelistMkt($i) ? $this->datelistMkt($i) : array(); $this_event_url = JURI::getInstance()->toString(); $cleanurl = preg_replace('/&date=[^&]*/', '', $this_event_url); $cleanurl = preg_replace('/\?date=[^\?]*/', '', $cleanurl); $isSef = JFactory::getApplication()->getCfg( 'sef' ); $date_var = ($isSef == 1) ? '?date=' :'&date='; $select_date = '<div style="display: block; max-height: 130px; width: 180px; overflow-y: auto;">'; foreach ($dates_bookable AS $d) { $ex_d = explode('@@', $d); $date_url = date('Y-m-d-H-i', strtotime($ex_d[0])); $select_date.= '<div class="ic-tip-link">'; $select_date.= '<a href="' . $cleanurl . $date_var . $date_url . '" class="ic-title-cal-tip" rel="nofollow" target="_parent">'; $select_date.= ' ' . $ex_d[1] . ' '; $select_date.= '</a>'; $select_date.= '</div>'; // If date to be set as other date is the current next date $is_next = ($date_url == date('Y-m-d-H-i', strtotime($i->next))) ? true : false; } $select_date.= '</div>'; $reg_button = '<div class="ic-registration-box">'; // Upcoming date and ticket(s) available for this event if ($upcomingDatesBooking && $ticketsCouldBeBooked ) { if (in_array($accessreg, $userLevels)) { if ($this->totalRegistered($i) == $this->maxReg($i)) { $reg_button.= '<a class="ic-addtocal" title="' . htmlspecialchars($select_date) . '" rel="nofollow">'; $reg_button.= '<div class="ic-btn ic-btn-info ic-btn-small ic-event-full">'; $reg_button.= '<i class="iCicon iCicon-people"></i> ' . JText::_('COM_ICAGENDA_REGISTRATION_DATE_NO_TICKETS_LEFT'); $reg_button.= '</div>'; $reg_button.= '<br />'; $reg_button.= '<span class="ic-select-another-date">' . JText::_('COM_ICAGENDA_REGISTRATION_REGISTER_ANOTHER_DATE') . '</span>'; $reg_button.= '</a>'; } elseif ($date_is_upcoming || $is_next) { $reg_button.= '<a href="' . $this->regUrl($i) . '" rel="nofollow">'; $reg_button.= '<div class="ic-btn ic-btn-success ic-btn-small ic-event-register regis_button">'; $reg_button.= '<i class="iCicon iCicon-register"></i> ' . $TextRegBt; $reg_button.= '</div>'; $reg_button.= '</a>'; } // Registration Until end of the period (dev. special) elseif ($regUntilEnd == 1 && $is_full_period ) { $reg_button.= '<a href="' . $this->regUrl($i) . '" rel="nofollow">'; $reg_button.= '<div class="ic-btn ic-btn-success ic-btn-small ic-event-register regis_button">'; $reg_button.= '<i class="iCicon iCicon-register"></i> ' . $TextRegBt; $reg_button.= '</div>'; $reg_button.= '</a>'; } else { $reg_button.= '<a class="ic-addtocal" title="' . htmlspecialchars($select_date) . '" rel="nofollow">'; $reg_button.= '<div class="ic-btn ic-btn-info ic-btn-small ic-event-finished">'; $reg_button.= '<i class="iCicon iCicon-people"></i> ' . JText::_('COM_ICAGENDA_REGISTRATION_DATE_NO_TICKETS_LEFT'); $reg_button.= '</div>'; $reg_button.= '<br />'; $reg_button.= '<span class="ic-select-another-date">' . JText::_('COM_ICAGENDA_REGISTRATION_REGISTER_ANOTHER_DATE') . '</span>'; $reg_button.= '</a>'; } } else { $reg_button.= '<a href="' . $this->regUrl($i) . '" rel="nofollow">'; $reg_button.= '<div class="ic-btn ic-btn-danger ic-btn-small ic-event-register regis_button">'; $reg_button.= '<i class="iCicon iCicon-private"></i> ' . $TextRegBt; $reg_button.= '</div>'; $reg_button.= '</a>'; } } // Upcoming date but no ticket left elseif ($upcomingDatesBooking && ! $ticketsCouldBeBooked ) { if ( ! $date_is_upcoming || $typeReg == 2) { $reg_button.= '<div class="ic-btn ic-btn-default ic-btn-small ic-event-finished">'; $reg_button.= '<i class="iCicon iCicon-blocked"></i> ' . JText::_('COM_ICAGENDA_REGISTRATION_CLOSED'); $reg_button.= '</div>'; } else { $reg_button.= '<div class="ic-btn ic-btn-info ic-btn-small ic-event-full">'; $reg_button.= '<i class="iCicon iCicon-people"></i> ' . JText::_('COM_ICAGENDA_REGISTRATION_EVENT_FULL'); $reg_button.= '</div>'; } } elseif ( ! $upcomingDatesBooking) { $reg_button.= '<div class="ic-btn ic-btn-default ic-btn-small ic-event-finished">'; $reg_button.= '<i class="iCicon iCicon-blocked"></i> ' . JText::_('COM_ICAGENDA_REGISTRATION_CLOSED'); $reg_button.= '</div>'; } else { return false; } if (!$regLink) { $reg_button.= ' <i class="iCicon iCicon-people ic-people"></i>'; $reg_button.= '<div class="ic-registered" >' . $this->totalRegistered($i) . '</div>'; } $reg_button.= '</div>'; } else { return false; } return $reg_button; } /** // TO BE CHECKED TO USE UTILITIES * Loads the Event's custom fields for this item * * @return object list. * @since 3.4.0 */ public function loadEventCustomFields($i) { // Get the database connector. $db = JFactory::getDBO(); // Get the query from the database connector. $query = $db->getQuery(true); // Build the query programatically (using chaining if desired). $query->select('cfd.*, cf.title AS title') // Use the qn alias for the quoteName method to quote table names. ->from($db->qn('#__icagenda_customfields_data') . ' AS cfd'); $query->leftJoin('#__icagenda_customfields AS cf ON cf.slug = cfd.slug'); $query->where($db->qn('cfd.parent_id').' = '.(int) $i->id); $query->where($db->qn('cfd.parent_form').' = 2'); $query->where($db->qn('cf.parent_form').' = 2'); $query->where($db->qn('cfd.state').' = 1'); $query->where($db->qn('cf.state').' = 1'); $query->order('cf.ordering ASC'); // Tell the database connector what query to run. $db->setQuery($query); // Invoke the query or data retrieval helper. return $db->loadObjectList(); } // Save of a registration, and automatic email (TO BE MOVED TO A NEW MODEL/VIEW) public function registration($array) { $menu_items = icagendaMenus::iClistMenuItems(); $itemid = JRequest::getVar('Itemid'); $linkexist = ''; foreach ($menu_items as $l) { if (($l->published == '1') && ($l->id == $itemid)) { $linkexist = '1'; } } if (is_numeric($itemid) && $itemid != 0 && $linkexist == 1 ) { // Import params - Limit Options for User Registration $app = JFactory::getApplication(); $date = JFactory::getDate(); $params = $app->getParams(); $isSef = $app->getCfg('sef'); $eventTimeZone = null; $data = new stdClass(); // Set the values $data->id = null; $data->eventid = '0'; $data->userid = isset($array['uid']) ? $array['uid'] : ''; if (isset($array['name'])) $data->name = $array['name']; $data->email = isset($array['email']) ? $array['email'] : ''; $data->phone = isset($array['phone']) ? $array['phone'] : ''; if (isset($array['date'])) $data->date = $array['date']; if (isset($array['period'])) $data->period = $array['period']; if (isset($array['people'])) $data->people = $array['people']; $data->notes = isset($array['notes']) ? htmlentities(strip_tags($array['notes'])) : ''; if (isset($array['event'])) $data->eventid = $array['event']; if (isset($array['menuID'])) $data->itemid = $array['menuID']; $data->created = $date->toSql(); $data->created_by = $data->userid; $current_url = isset($array['current_url']) ? $array['current_url'] : 'index.php'; $max_nb_of_tickets = isset($array['max_nb_of_tickets']) ? $array['max_nb_of_tickets'] : '1000000'; $tos = isset($array['tos']) ? 'checked' : ''; $custom_fields = isset($array['custom_fields']) ? $array['custom_fields'] : false; // $tickets_left = isset($array['tickets_left']) ? $array['tickets_left'] : '1000000'; $email2 = isset($array['email2']) ? $array['email2'] : false; // Filter Name $array['name'] = str_replace("'", '’', $array['name']); $array['name'] = (string) preg_replace('/[\x00-\x1F\x7F]/', '', $array['name']); // Set Form Data to Session $session = JFactory::getSession(); $session->set('ic_registration', $array); $session->set('ic_submit_tos', $tos); $custom_fields_array = isset($array['custom_fields']) ? (array) $array['custom_fields'] : array(); $session->set('custom_fields', $custom_fields_array); $session->set('email2', $email2); // Control if still ticket left $db = JFactory::getDbo(); $query = $db->getQuery(true); // Registrations total $query->select('sum(r.people) AS registered'); $query->from('`#__icagenda_registration` AS r'); $query->where('r.state > 0'); $query->where('r.date = ' . $db->q($data->date)); $query->where('r.eventid = ' . (int) $data->eventid); $db->setQuery($query); $registered = $db->loadObject()->registered; $data->checked_out_time = date('Y-m-d H:i:s'); // Set Date in url $datesDisplay = $params->get('datesDisplay', 1); $date_alias = $data->date ? iCDate::dateToAlias(date('Y-m-d H:i', strtotime($data->date))) : false; $date_var = ($isSef == 1) ? '?date=' :'&date='; $this_date = $date_alias ? $date_var . $date_alias : ''; $dateInUrl = ($datesDisplay === 1) ? $this_date : ''; // Get the "event" URL $baseURL = JURI::base(); $subpathURL = JURI::base(true); $baseURL = str_replace('/administrator', '', $baseURL); $subpathURL = str_replace('/administrator', '', $subpathURL); // Sub Path filtering $subpathURL = ltrim($subpathURL, '/'); // URL Event Details filtering $urlEvent = str_replace('&', '&', JRoute::_('index.php?option=com_icagenda&view=list&layout=event&Itemid=' . (int) $data->itemid . '&id=' . (int) $data->eventid)) . $dateInUrl; $urlEvent = ltrim($urlEvent, '/'); if (substr($urlEvent, 0, strlen($subpathURL) + 1) == "$subpathURL/") { $urlEvent = substr($urlEvent, strlen($subpathURL) + 1); } $urlEvent = rtrim($baseURL, '/') . '/' . ltrim($urlEvent, '/'); // URL List filtering $urlList = str_replace('&', '&', JRoute::_('index.php?option=com_icagenda&view=list&Itemid=' . (int) $data->itemid)); $urlList = ltrim($urlList, '/'); if (substr($urlList, 0, strlen($subpathURL)+1) == "$subpathURL/") { $urlList = substr($urlList, strlen($subpathURL)+1); } $urlList = rtrim($baseURL, '/') . '/' . ltrim($urlList, '/'); // URL Registration filtering // NOT USED $urlRegistration = str_replace('&','&', JRoute::_('index.php?option=com_icagenda&view=list&layout=registration&Itemid=' . (int) $data->itemid . '&id=' . (int) $data->eventid)); $urlRegistration = ltrim($urlRegistration, '/'); if (substr($urlRegistration, 0, strlen($subpathURL)+1) == "$subpathURL/") { $urlRegistration = substr($urlRegistration, strlen($subpathURL)+1); } $urlRegistration = rtrim($baseURL, '/') . '/' . ltrim($urlRegistration, '/'); // URL Payment filtering $urlPayment = str_replace('&','&', JRoute::_('index.php?option=com_icagenda&view=list&layout=actions&Itemid=' . (int) $data->itemid . '&id=' . (int) $data->eventid)); $urlPayment = ltrim($urlPayment, '/'); if (substr($urlPayment, 0, strlen($subpathURL)+1) == "$subpathURL/") { $urlPayment = substr($urlPayment, strlen($subpathURL)+1); } $urlPayment = rtrim($baseURL, '/') . '/' . ltrim($urlPayment, '/'); $urlPayment = $urlPayment . '?status=payment'; // Check number of tickets left $tickets_left = $max_nb_of_tickets - $registered; // IF NO TICKETS LEFT if ($tickets_left <= 0) { $app->enqueueMessage(JText::_('COM_ICAGENDA_ALERT_NO_TICKETS_AVAILABLE'), 'warning'); $app->redirect(htmlspecialchars_decode($urlEvent)); } // IF NOT ENOUGH TICKETS LEFT elseif ($tickets_left < $data->people) { $msg = JText::_('COM_ICAGENDA_ALERT_NOT_ENOUGH_TICKETS_AVAILABLE') . '<br />'; $msg.= JText::sprintf('COM_ICAGENDA_ALERT_NOT_ENOUGH_TICKETS_AVAILABLE_NOW', $tickets_left) . '<br />'; $msg.= JText::_('COM_ICAGENDA_ALERT_NOT_ENOUGH_TICKETS_AVAILABLE_CHANGE_NUMBER'); $app->enqueueMessage($msg, 'error'); $app->redirect(htmlspecialchars_decode($current_url)); } // CONTROL NAME VALUE $name_isValid = '1'; // $pattern = "#[/\\\\/\<>/\"%;=\[\]\+()&]|^[0-9]#i"; $pattern = "#[/\\\\/\<>/\";=\[\]\+()%&]#i"; if ($array['name']) { $nbMatches = preg_match($pattern, $array['name']); // Name contains invalid characters if ($nbMatches && $nbMatches == 1) { $name_isValid = '0'; $app->enqueueMessage(JText::sprintf( 'COM_ICAGENDA_REGISTRATION_NAME_NOT_VALID' , '<b>' . htmlentities($array['name'], ENT_COMPAT, 'UTF-8') . '</b>'), 'error'); } // Name is less than 2 characters if (strlen(utf8_decode($array['name'])) < 2) { $name_isValid = '0'; $app->enqueueMessage(JText::_( 'COM_ICAGENDA_REGISTRATION_NAME_MINIMUM_CHARACTERS'), 'error'); } } else { $app->enqueueMessage(JText::_( 'COM_ICAGENDA_FORM_VALIDATE_FIELD_REQUIRED') . ' ' . JText::_( 'ICAGENDA_REGISTRATION_FORM_NAME' ), 'error'); } $data->name = filter_var($data->name, FILTER_SANITIZE_STRING); // CONTROL EMAIL VALUE $emailRequired = $params->get('emailRequired', 1); $emailConfirm = $params->get('emailConfirm', 1); // Check if Email not empty if ($emailRequired && ! $data->email) { $app->enqueueMessage(JText::_( 'COM_ICAGENDA_FORM_VALIDATE_FIELD_REQUIRED' ) . ' ' . JText::_( 'ICAGENDA_REGISTRATION_FORM_EMAIL' ), 'error'); } // Check if Confirm Email equals Email if ($emailConfirm && empty($data->userid) && $data->email != $email2) { $app->enqueueMessage(JText::_( 'COM_ICAGENDA_FORM_VALIDATE_FIELD_INVALID' ) . ' ' . JText::_( 'IC_FORM_EMAIL_CONFIRM_LBL' ) . '<br />' . JText::_( 'COM_ICAGENDA_FORM_VALIDATE_FIELD_EMAIL2_MESSAGE' ), 'error'); } // Advanced Checkdnsrr email $emailCheckdnsrr = JComponentHelper::getParams('com_icagenda')->get('emailCheckdnsrr', '0'); if (!empty($data->email)) { $validEmail = true; $checkdnsrr = true; if (($emailCheckdnsrr == 1) AND (function_exists('checkdnsrr'))) { $provider = explode('@', $data->email); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { if (version_compare(phpversion(), '5.3.0', '<')) { $checkdnsrr = true; } } else { $checkdnsrr = checkdnsrr($provider[1]); } } else { $checkdnsrr = true; } } else { $checkdnsrr = true; } // Check if valid email address $validEmail = $validEmail ? $this->validEmail($data->email) : false; if ( ! $checkdnsrr || ! $validEmail && $data->email ) { // message if email is invalid $app->enqueueMessage(JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_NOT_VALID' ), 'error'); } $eventid = $data->eventid; $period = (isset($data->period)) ? $data->period : '0'; $people = $data->people; $name = $data->name; $email = $data->email; $phone = $data->phone; $notes = html_entity_decode($data->notes); $dateReg = $data->date; $limitRegEmail = $params->get('limitRegEmail', 1); $limitRegDate = $params->get('limitRegDate', 1); $alreadyexist = 'no'; if ($limitRegEmail == 1 || $limitRegDate == 1) { $cf = JRequest::getString('email', '', 'post'); if ($limitRegDate == 0) { $query = " SELECT COUNT(*) FROM `#__icagenda_registration` WHERE `email` = '$cf' AND `eventid`='$eventid' AND `state`='1' "; } elseif ($limitRegDate == 1) { $query = " SELECT COUNT(*) FROM `#__icagenda_registration` WHERE `email` = '$cf' AND `eventid`='$eventid' AND `date`='$dateReg' AND `state`='1' "; } $db->setQuery($query); if ($email != NULL) { if ( $db->loadResult() ) { $alreadyexist = 'yes'; $app->enqueueMessage(JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_ALERT' ) . ' ' . $email, 'error'); } else { $alreadyexist = 'no'; } } } $email = $email ? $email : JText::_( 'COM_ICAGENDA_NOT_SPECIFIED' ); // Check if Phone not empty $phoneRequired = $params->get('phoneRequired', 1); if ($phoneRequired && ! $phone) { $app->enqueueMessage(JText::_( 'COM_ICAGENDA_FORM_VALIDATE_FIELD_REQUIRED' ) . ' ' . JText::_( 'ICAGENDA_REGISTRATION_FORM_PHONE' ), 'error'); } $phone = $phone ? $phone : JText::_( 'COM_ICAGENDA_NOT_SPECIFIED' ); // Check if Custom Fields required not empty $customfields_list = icagendaCustomfields::getListCustomFields(1, 1); if ($customfields_list) { foreach ($customfields_list AS $cf) { if ($cf->cf_required == 1) { if ($custom_fields[$cf->cf_slug] == '') { $app->enqueueMessage(JText::_( 'COM_ICAGENDA_FORM_VALIDATE_FIELD_REQUIRED' ) . ' ' . $cf->cf_title, 'error'); } } } } // Check if ToS not checked if ( ! $tos) { $app->enqueueMessage(JText::_( 'COM_ICAGENDA_TERMS_AND_CONDITIONS_NOT_CHECKED_REGISTRATION' ), 'error'); } // RECAPTCHA $captcha_plugin = $params->get('captcha') ? $params->get('captcha') : $app->getCfg('captcha'); $reg_captcha = JComponentHelper::getParams('com_icagenda')->get('reg_captcha', 1); if ($captcha_plugin && $reg_captcha != '0') { JPluginHelper::importPlugin('captcha'); // JOOMLA 3.x/2.5 SWITCH if (version_compare(JVERSION, '3.0', 'ge')) { $dispatcher = JEventDispatcher::getInstance(); } else { $dispatcher = JDispatcher::getInstance(); } $res = $dispatcher->trigger('onCheckAnswer', $array['recaptcha_response_field']); if ( ! $res[0]) { // message if captcha is invalid $app->enqueueMessage(JText::_( 'PLG_RECAPTCHA_ERROR_INCORRECT_CAPTCHA_SOL' ), 'error'); } } // Get the message queue $error_messages = $app->getMessageQueue(); if (count($error_messages)) { $app->redirect(htmlspecialchars_decode($current_url)); return false; } // clear the data so we don't process it again $session->clear('ic_registration'); $session->clear('custom_fields'); $session->clear('ic_submit_tos'); $session->clear('email2'); /** * SAVE REGISTRATION DATA TO DATABASE */ // Option Email required if ($emailRequired == '1') { if (is_numeric($eventid) && is_numeric($period) && is_numeric($people) && $name != NULL && $email != NULL) { $db->insertObject( '#__icagenda_registration', $data, id ); } } else { if (is_numeric($eventid) && is_numeric($period) && is_numeric($people) && $name != NULL) { $db->insertObject( '#__icagenda_registration', $data, id ); } } /** * SAVE CUSTOM FIELDS TO DATABASE */ if ($custom_fields && is_array($custom_fields)) { icagendaCustomfields::saveToData($custom_fields, $data->id, 1); } /** * NOTIFICATION EMAILS */ $author= '0'; // Preparing the query $query = $db->getQuery(true); $query->select('e.title AS title, e.startdate AS startdate, e.enddate AS enddate, e.created_by AS authorID, e.email AS contactemail, e.displaytime AS displaytime') ->from('#__icagenda_events AS e') ->where("(e.id=$data->eventid)"); $db->setQuery($query); $title = $db->loadObject()->title; $startdate = $db->loadObject()->startdate; $enddate = $db->loadObject()->enddate; $authorID = $db->loadObject()->authorID; $contactemail = $db->loadObject()->contactemail; $displayTime = $db->loadObject()->displaytime; $timeformat = JFactory::getApplication()->getParams()->get('timeformat', 1); $lang_time = ($timeformat == 1) ? 'H:i' : 'h:i A'; $startD = $this->formatDate($startdate); $endD = $this->formatDate($enddate); $startT = JHtml::date($startdate, $lang_time, $eventTimeZone); $endT = JHtml::date($enddate, $lang_time, $eventTimeZone); $regDate = $this->formatDate($data->date); $regTime = JHtml::date($data->date, $lang_time, $eventTimeZone); $regDateTime = !empty($displayTime) ? $regDate.' - '.$regTime : $regDate; $regStartDateTime = !empty($displayTime) ? $startD.' - '.$startT : $startD; $regEndDateTime = !empty($displayTime) ? $endD.' - '.$endT : $endD; $periodreg = $data->period; $defaultemail = $params->get('regEmailUser', '1'); $emailUserSubjectPeriod = $params->get('emailUserSubjectPeriod', ''); $emailUserBodyPeriod = $params->get('emailUserBodyPeriod', ''); $emailUserSubjectDate = $params->get('emailUserSubjectDate', ''); $emailUserBodyDate = $params->get('emailUserBodyDate', ''); $emailAdminSend = $params->get('emailAdminSend', '1'); $emailAdminSend_select = $params->get('emailAdminSend_select', array('0')); $emailAdminSend_custom = $params->get('emailAdminSend_Placeholder', ''); $emailUserSend = $params->get('emailUserSend', '1'); $eUSP = isset($emailUserSubjectPeriod) ? $emailUserSubjectPeriod : JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_PERIOD_DEFAULT_SUBJECT' ); $eUBP = isset($emailUserBodyPeriod) ? $emailUserBodyPeriod : JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_PERIOD_DEFAULT_BODY' ); $eUSD = isset($emailUserSubjectDate) ? $emailUserSubjectDate : JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_DATE_DEFAULT_SUBJECT' ); $eUBD = isset($emailUserBodyDate) ? $emailUserBodyDate : JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_DATE_DEFAULT_BODY' ); $period_set = substr($startdate, 0, 4); // Registration Type is set 'for all dates of the event' if ($periodreg == 1) { $periodd = ''; $adminsubject = JText::_('COM_ICAGENDA_REGISTRATION_EMAIL_ADMIN_DEFAULT_SUBJECT'); $adminbody = JText::_('COM_ICAGENDA_REGISTRATION_EMAIL_ADMIN_DATE_DEFAULT_BODY'); if ($defaultemail == 0) { $subject = $eUSP; $body = $eUBP; } else { $subject = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_DATE_DEFAULT_SUBJECT' ); $body = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_DATE_DEFAULT_BODY' ); } } // Registration Type is 'select list of dates' (single dates + period) // Period (no date, and period = 0) elseif ($array['date'] == '' && ! $periodreg) { $periodd = ($period_set != '0000') ? JText::sprintf( 'COM_ICAGENDA_REGISTERED_EVENT_PERIOD', $startD, $startT, $endD, $endT ) : ''; $adminsubject = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_ADMIN_DEFAULT_SUBJECT' ); $adminbody = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_ADMIN_PERIOD_DEFAULT_BODY' ); if ($defaultemail == 0) { $subject = $eUSP; $body = $eUBP; } else { $subject = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_PERIOD_DEFAULT_SUBJECT' ); $body = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_PERIOD_DEFAULT_BODY' ); } } // Registration Type is 'select list of dates' (single dates + period) // Single date else { $periodd = JText::sprintf( 'COM_ICAGENDA_REGISTERED_EVENT_DATE', $regDate, '' ); $adminsubject = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_ADMIN_DEFAULT_SUBJECT' ); $adminbody = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_ADMIN_DATE_DEFAULT_BODY' ); if ($defaultemail == 0) { $subject = $eUSD; $body = $eUBD; } else { $subject = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_DATE_DEFAULT_SUBJECT' ); $body = JText::_( 'COM_ICAGENDA_REGISTRATION_EMAIL_USER_DATE_DEFAULT_BODY' ); } } // Get the site name $sitename = $app->getCfg('sitename'); $siteURL = JURI::base(); $siteURL = rtrim($siteURL,'/'); // Get Author Email $authormail = ''; if ($authorID != NULL) { // Preparing the query $query = $db->getQuery(true); $query->select('email AS authormail, name AS authorname')->from('#__users AS u')->where("(u.id=$authorID)"); $db->setQuery($query); $authormail = $db->loadObject()->authormail; $authorname = $db->loadObject()->authorname; if ($authormail == NULL) { $authormail = $app->getCfg('mailfrom'); } } // Generates filled custom fields into email body $customfields = icagendaCustomfields::getListNotEmpty($data->id, 1); $custom_fields = ''; $newline = ($defaultemail == '0') ? "<br />" : "\n"; if ($customfields) { foreach ($customfields AS $customfield) { $cf_value = isset($customfield->cf_value) ? $customfield->cf_value : JText::_('IC_NOT_SPECIFIED'); $custom_fields.= $customfield->cf_title . ": " . $cf_value . $newline; } } // MAIL REPLACEMENTS $replacements = array( "\\n" => "\n", '[SITENAME]' => $sitename, '[SITEURL]' => $siteURL, '[AUTHOR]' => $authorname, '[AUTHOREMAIL]' => $authormail, '[CONTACTEMAIL]' => $contactemail, '[TITLE]' => $title, // '[EVENTID]' => is_numeric($data->eventid) ? (int) $data->eventid : null, '[EVENTURL]' => $urlEvent, '[NAME]' => $name, '[EMAIL]' => $email, '[PHONE]' => $phone, '[PLACES]' => $people, '[CUSTOMFIELDS]' => $custom_fields, // '[NOTES]' => $notes ? $notes : JText::_('COM_ICAGENDA_NOT_SPECIFIED'), '[NOTES]' => $notes, '[DATE]' => $regDate, '[TIME]' => $regTime, '[DATETIME]' => ($periodreg != 1) ? $regDateTime : JText::_('COM_ICAGENDA_REG_FOR_ALL_DATES'), '[STARTDATE]' => $startD, '[ENDDATE]' => $endD, '[STARTDATETIME]' => $regStartDateTime, '[ENDDATETIME]' => $regEndDateTime, ' ' => ' ', ); foreach ($replacements as $key => $value) { $subject = str_replace($key, $value, $subject); $body = str_replace($key, $value, $body); $adminsubject = str_replace($key, $value, $adminsubject); $adminbody = str_replace($key, $value, $adminbody); } // Set Sender of USER and ADMIN emails $mailer = JFactory::getMailer(); $adminmailer = JFactory::getMailer(); $mailfrom = $app->getCfg('mailfrom'); $fromname = $app->getCfg('fromname'); $mailer->setSender(array( $mailfrom, $fromname )); $adminmailer->setSender(array( $mailfrom, $fromname )); // Set Recipient of USER email $user = JFactory::getUser(); if (!isset($data->email)) { $recipient = $user->email; } else { $recipient = $data->email; } $mailer->addRecipient($recipient); // Set Recipient of ADMIN email $admin_array = array(); if (in_array('0', $emailAdminSend_select)) { array_push($admin_array, $mailfrom); } if (in_array('1', $emailAdminSend_select)) { array_push($admin_array, $authormail); } if (in_array('2', $emailAdminSend_select)) { $customs_emails = explode(',', $emailAdminSend_custom); $customs_emails = str_replace(' ','',$customs_emails); foreach ($customs_emails AS $cust_mail) { array_push($admin_array, $cust_mail); } } if (in_array('3', $emailAdminSend_select)) { array_push($admin_array, $contactemail); } $adminrecipient = $admin_array; $adminmailer->addRecipient($adminrecipient); // Set Subject of USER and ADMIN email $mailer->setSubject($subject); $adminmailer->setSubject($adminsubject); // Set Body of USER and ADMIN email if ($defaultemail == 0) { // HTML custom notification email send to user $mailer->isHTML(true); $mailer->Encoding = 'base64'; } $adminbody = str_replace("<br />", "\n", $adminbody); $mailer->setBody($body); $adminmailer->setBody($adminbody); // Optional file attached // $mailer->addAttachment(JPATH_COMPONENT.DS.'assets'.DS.'document.pdf'); // Send USER email confirmation, if enabled if ($emailUserSend == 1 && isset($data->email) ) { $send = $mailer->Send(); } // Send ADMIN email notification, if enabled if ($emailAdminSend == 1) { if ($emailAdminSend == 1 && isset($data->eventid) && $data->eventid != '0' && $data->name != NULL ) { $sendadmin = $adminmailer->Send(); } } $evtParams = $this->evtParams($i); $reg_payment = $evtParams->get('icpayment', ''); $iCpaymentPlugin = JPluginHelper::getPlugin('content', 'ic_payment'); if ($iCpaymentPlugin) { $plgParams = new JRegistry($iCpaymentPlugin->params); $reg_payment = $reg_payment ? $reg_payment : $plgParams->get('icpayment', ''); } if ($alreadyexist == 'no') { $thank_you = JText::_( 'COM_ICAGENDA_REGISTRATION_TY' ) . ' ' . $data->name; $thank_you.= ', ' . JText::sprintf( 'COM_ICAGENDA_REGISTRATION', $title ); $thank_you.= '<br />' . $periodd . ' (<a href="' . $urlEvent . '">'. JText::_( 'COM_ICAGENDA_REGISTRATION_EVENT_LINK' ) . '</a>)'; // redirect after successful registration $app->enqueueMessage($thank_you, 'message'); if ($reg_payment) { $app->redirect(htmlspecialchars_decode($urlPayment)); } else { $app->redirect(htmlspecialchars_decode($urlList)); } } } else { JError::raiseError('404', JTEXT::_('JERROR_LAYOUT_PAGE_NOT_FOUND')); return false; } } /** * ESSENTIAL FUNCTIONS */ // Function to convert font color, depending on category color function fontColor($i) { $color = isset($i->cat_color) ? $i->cat_color : ''; $hex_R = substr($color, 1, 2); $hex_G = substr($color, 3, 2); $hex_B = substr($color, 5, 2); $RGBhex = hexdec($hex_R) . ',' . hexdec($hex_G) . ',' . hexdec($hex_B); $RGB = explode(',', $RGBhex); $RGBa = $RGB[0]; $RGBb = $RGB[1]; $RGBc = $RGB[2]; $somme = ($RGBa + $RGBb + $RGBc); if ($somme > '600') { $fcolor = 'fontColor'; } else { $fcolor = ''; } return $fcolor; } private function validEmail($email) { $isValid = true; $atIndex = strrpos($email, "@"); if (is_bool($atIndex) && !$atIndex) { $isValid = false; } else { $domain = substr($email, $atIndex+1); $local = substr($email, 0, $atIndex); $localLen = strlen($local); $domainLen = strlen($domain); if ($localLen < 1 || $localLen > 64) { // local part length exceeded $isValid = false; } elseif ($domainLen < 1 || $domainLen > 255) { // domain part length exceeded $isValid = false; } elseif ($local[0] == '.' || $local[$localLen-1] == '.') { // local part starts or ends with '.' $isValid = false; } elseif (preg_match('/\\.\\./', $local)) { // local part has two consecutive dots $isValid = false; } elseif (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) { // character not valid in domain part $isValid = false; } elseif (preg_match('/\\.\\./', $domain)) { // domain part has two consecutive dots $isValid = false; } elseif (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) { // character not valid in local part unless // local part is quoted if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))) { $isValid = false; } } // Check the domain name if ($isValid && !$this->is_valid_domain_name($domain)) { return false; } // Uncomment below to have PHP run a proper DNS check (risky on shared hosts!) /** if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) { // domain not found in DNS $isValid = false; } /**/ } return $isValid; } // Check if a domain is valid function is_valid_domain_name($domain_name) { $pieces = explode(".", $domain_name); foreach ($pieces as $piece) { if (!preg_match('/^[a-z\d][a-z\d-]{0,62}$/i', $piece) || preg_match('/-$/', $piece)) { return false; } } return true; } // Url to add to Google Calendar protected function gcalendarUrl ($i) { $text = $i->title.' ('.$i->cat_title.')'; $details = $i->desc; $venue = $i->place_name; $s_dates = $i->dates; // $single_dates = unserialize($s_dates); $single_dates = iCString::isSerialized($i->dates) ? unserialize($i->dates) : array(); // returns array $website = $this->Event_Link($i); $location = $venue ? $venue.' - '.$i->address : $i->address; $get_date = ''; $href = '#'; if (JRequest::getVar('date')) { // if 'All Dates' set $get_date = JRequest::getVar('date'); } else { // if 'Only Next/Last Date' set $get_date = date('Y-m-d-H-i', strtotime($i->next)); } $ex = explode('-', $get_date); $this_date = $ex['0'] . '-' . $ex['1'] . '-' . $ex['2'] . ' ' . $ex['3'] . ':' . $ex['4']; $startdate = date('Y-m-d-H-i', strtotime($i->startdate)); $enddate = date('Y-m-d-H-i', strtotime($i->enddate)); if ($this->eventHasPeriod($i) && ($get_date >= $startdate) && ($get_date <= $enddate) && (!in_array($this_date, $single_dates)) ) { $weekdays = ($i->weekdays || $i->weekdays == '0') ? true : false; if ($weekdays) { $startdate = date('Y-m-d-H-i', strtotime($this_date)); $enddate = date('Y-m-d', strtotime($this_date)) . '-' . date('H-i', strtotime($i->enddate)); } $ex_S = explode('-', $startdate); $ex_E = explode('-', $enddate); $dateday = $ex_S['0'] . $ex_S['1'] . $ex_S['2'] . 'T' . $ex_S['3'] . $ex_S['4']; $dateday.= '00/' . $ex_E['0'] . $ex_E['1'] . $ex_E['2'] . 'T' . $ex_E['3'] . $ex_E['4'] . '00'; } else { $dateday = $ex['0'] . $ex['1'] . $ex['2'] . 'T' . $ex['3'] . $ex['4']; $dateday.= '00/' . $ex['0'] . $ex['1'] . $ex['2'] . 'T' . $ex['3'] . $ex['4'] . '00'; } // Get the site name $sitename = JFactory::getApplication()->getCfg('sitename'); $href = 'http://www.google.com/calendar/event?action=TEMPLATE'; $mbString = extension_loaded('mbstring'); $text = $mbString ? mb_substr($text, 0, 100, 'UTF-8') : substr($text, 0, 100); $len = strrpos($text, ' '); // interruption on a space $text = substr($text, 0, $len); $href.= '&text=' . urlencode($text) . '...'; $href.= '&dates=' . $dateday; $href.= '&location=' . urlencode($location); $href.= '&trp=true'; $limit_reduc = '37'; // 37 chars (&trp=true&details=&sf=true&output=xml) $limit_notlogged = '785'; $lenpart = strlen($href); $lenlast = 2068 - $lenpart - $limit_reduc - $limit_notlogged; // max link length minus (title+location) $details = urlencode(strip_tags($details)); $details = substr($details, 0 , $lenlast); $len = strrpos($details, '+'); $details = substr($details, 0 , $len); $href.= '&details=' . substr($details, 0, $lenlast) . '...'; return $href; } // Url to add to Yahoo Calendar protected function yahoocalendarUrl ($i) { $text = $i->title.' ('.$i->cat_title.')'; $details = $i->desc; $venue = $i->place_name; $s_dates = $i->dates; // $single_dates = unserialize($s_dates); $single_dates = iCString::isSerialized($i->dates) ? unserialize($i->dates) : array(); // returns array $website = $this->Event_Link($i); $location = $venue ? $venue.' - '.$i->address : $i->address; $get_date = ''; $href = '#'; $endday = ''; if (JRequest::getVar('date')) { // if 'All Dates' set $get_date = JRequest::getVar('date'); } else { // if 'Only Next/Last Date' set $get_date = date('Y-m-d-H-i', strtotime($i->next)); } $ex = explode('-', $get_date); $this_date = $ex['0'] . '-' . $ex['1'] . '-' . $ex['2'] . ' ' . $ex['3'] . ':' . $ex['4']; $startdate = date('Y-m-d-H-i', strtotime($i->startdate)); $enddate = date('Y-m-d-H-i', strtotime($i->enddate)); if ($this->eventHasPeriod($i) && $get_date >= $startdate && $get_date <= $enddate && ! in_array($this_date, $single_dates) ) { $weekdays = ($i->weekdays || $i->weekdays == '0') ? true : false; if ($weekdays) { $startdate = date('Y-m-d-H-i', strtotime($this_date)); $enddate = date('Y-m-d', strtotime($this_date)) . '-' . date('H-i', strtotime($i->enddate)); } $ex_S = explode('-', $startdate); $ex_E = explode('-', $enddate); $dateday = $ex_S['0'] . $ex_S['1'] . $ex_S['2'] . 'T' . $ex_S['3'] . $ex_S['4'] . '00'; // $diff = strtotime($i->enddate) - strtotime($i->startdate); // $M = (floor($diff /60)) % 60; // $M = sprintf("%02d", $M); // $H = (floor($diff / 3600)); // $duration = ($H <= 24) ? $H . $M : ''; $endday = $ex_E['0'] . $ex_E['1'] . $ex_E['2'] . 'T' . $ex_E['3'] . $ex_E['4'] . '00'; } else { $dateday = $ex['0'] . $ex['1'] . $ex['2'] . 'T' . $ex['3'] . $ex['4'] . '00'; // $duration = ''; } // Shortens the description, if more than 1000 characters $lengthMax = '1000'; $details = urlencode(strip_tags($details)); $details = substr($details, 0, $lengthMax); $shortenedDetails = strrpos($details, '+'); $details = substr($details, 0, $shortenedDetails); $href = "http://calendar.yahoo.com/?v=60"; $href.= "&VIEW=d"; $href.= "&in_loc=" . urlencode($location); // $href.= "&type=20"; $href.= "&TITLE=" . urlencode($text); $href.= "&ST=" . $dateday; $href.= "&ET=" . $endday; // $href.= "&DUR="; // $href.= $duration ? "&DUR=" . $duration : ''; $href.= "&DESC=" . substr($details, 0, $lengthMax) . '...'; $href.= "&URL=" . urlencode($website); return $href; } // Url to add to Windows Live (Hotmail) Calendar protected function wlivecalendarUrl ($i) { $text = $i->title.' ('.$i->cat_title.')'; $details = $i->desc; $venue = $i->place_name; $s_dates = $i->dates; // $single_dates = unserialize($s_dates); $single_dates = iCString::isSerialized($i->dates) ? unserialize($i->dates) : array(); // returns array $website = $this->Event_Link($i); $location = $venue ? $venue . ' - ' . $i->address : $i->address; $get_date = ''; $href = '#'; $endday = ''; if (JRequest::getVar('date')) { // if 'All Dates' set $get_date = JRequest::getVar('date'); } else { // if 'Only Next/Last Date' set $get_date = date('Y-m-d-H-i', strtotime($i->next)); } $ex = explode('-', $get_date); $this_date = $ex['0'] . '-' . $ex['1'] . '-' . $ex['2'] . ' ' . $ex['3'] . ':' . $ex['4']; $startdate = date('Y-m-d-H-i', strtotime($i->startdate)); $enddate = date('Y-m-d-H-i', strtotime($i->enddate)); if ( $this->eventHasPeriod($i) && $get_date >= $startdate && $get_date <= $enddate && !in_array($this_date, $single_dates) ) { $weekdays = ($i->weekdays || $i->weekdays == '0') ? true : false; if ($weekdays) { $startdate = date('Y-m-d-H-i', strtotime($this_date)); $enddate = date('Y-m-d', strtotime($this_date)) . '-' . date('H-i', strtotime($i->enddate)); } $ex_S = explode('-', $startdate); $ex_E = explode('-', $enddate); $dateday = $ex_S['0'] . $ex_S['1'] . $ex_S['2'] . 'T' . $ex_S['3'] . $ex_S['4'] . '00'; $endday = $ex_E['0'] . $ex_E['1'] . $ex_E['2'] . 'T' . $ex_E['3'] . $ex_E['4'] . '00'; } else { $dateday = $ex['0'] . $ex['1'] . $ex['2'] . 'T' . $ex['3'] . $ex['4'] . '00'; } $href = "http://calendar.live.com/calendar/calendar.aspx?rru=addevent"; $href.= "&dtstart=" . $dateday; $href.= isset($endday) ? "&dtend=" . $endday : ''; $href.= "&summary=" . urlencode($text); $href.= "&location=" . urlencode($location); // Shortens the description, if more than 1000 characters $lengthMax = '1000'; $details = urlencode(strip_tags($details)); $details = substr($details, 0, $lengthMax); $shortenedDetails = strrpos($details, '+'); $details = substr($details, 0, $shortenedDetails); $href.= "&description=" . substr($details, 0, $lengthMax) . '...'; return $href; } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.34 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка