| Server IP : 180.180.241.3 / Your IP : 216.73.216.35 Web Server : Microsoft-IIS/7.5 System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/AppServ/www/news/components/com_jevents/libraries/ |
Upload File : |
<?php
/**
* JEvents Component for Joomla 1.5.x
*
* @version $Id: dbmodel.php 1465 2009-06-09 14:36:43Z geraint $
* @package JEvents
* @copyright Copyright (C) 2008-2009 GWE Systems Ltd, 2006-2008 JEvents Project Group
* @license GNU/GPLv2, see http://www.gnu.org/licenses/gpl-2.0.html
* @link http://www.jevents.net
*/
defined( '_JEXEC' ) or die( 'Restricted access' );
// load language constants
JEVHelper::loadLanguage('front');
class JEventsDBModel {
var $cfg = null;
var $datamodel = null;
var $legacyEvents = null;
function JEventsDBModel(&$datamodel){
$this->cfg = & JEVConfig::getInstance();
// TODO - remove legacy code
$this->legacyEvents = 0;
$this->datamodel =& $datamodel;
}
function accessibleCategoryList($aid=null, $catids=null, $catidList=null) {
global $mainframe;
$db =& JFactory::getDBO();
if (is_null($aid)) {
$aid = $this->datamodel->aid;
}
if (is_null($catids)) {
$catids = $this->datamodel->catids;
}
if (is_null($catidList)) {
$catidList = $this->datamodel->catidList;
}
$cfg = & JEVConfig::getInstance();
$sectionname = JEV_COM_COMPONENT;
static $instances;
if (!$instances) {
$instances = array();
}
// calculate unique index identifier
$index = $aid . '+' . $catidList;
// if catidList = 0 then the result is the same as a blank so slight time saving
if (is_null($catidList) || $catidList==0) {
$index = $aid . '+';
}
$where = "";
if (!array_key_exists($index,$instances)) {
if (count($catids)>0 && !is_null($catidList) && $catidList!="0") {
$where = ' AND (c.id IN (' . $catidList .') OR p.id IN (' . $catidList .') OR gp.id IN (' . $catidList .') OR ggp.id IN (' . $catidList .'))';
}
$q_published = $mainframe->isAdmin() ? "\n AND c.published >= 0" : "\n AND c.published = 1";
$query = "SELECT c.id"
. "\n FROM #__categories AS c"
. ' LEFT JOIN #__categories AS p ON p.id=c.parent_id'
. ' LEFT JOIN #__categories AS gp ON gp.id=p.parent_id '
. ' LEFT JOIN #__categories AS ggp ON ggp.id=gp.parent_id '
. "\n WHERE c.access <= $aid"
. $q_published
. "\n AND c.section = '".$sectionname."'"
. "\n " . $where;
;
$db->setQuery($query);
$catlist = $db->loadResultArray();
$instances[$index] = implode(',', array_merge(array(-1), $catlist));
}
return $instances[$index];
}
function getCategoryInfo($catids=null,$aid=null){
global $mainframe;
$db =& JFactory::getDBO();
if (is_null($aid)) {
$aid = $this->datamodel->aid;
}
if (is_null($catids)) {
$catids = $this->datamodel->catids;
}
$catidList = implode(",", $catids);
$cfg = & JEVConfig::getInstance();
$sectionname = JEV_COM_COMPONENT;
static $instances;
if (!$instances) {
$instances = array();
}
// calculate unique index identifier
$index = $aid . '+' . $catidList;
$where = null;
if (!array_key_exists($index,$instances)) {
if (count($catids)>0 && $catidList!="0" && strlen($catidList)!="") {
$where = ' AND c.id IN (' . $catidList .') ';
}
$q_published = $mainframe->isAdmin() ? "\n AND c.published >= 0" : "\n AND c.published = 1";
$query = "SELECT c.*"
. "\n FROM #__categories AS c"
. "\n WHERE c.access <= $aid"
. $q_published
. "\n AND c.section = '".$sectionname."'"
. "\n " . $where;
;
$db->setQuery($query);
$catlist = $db->loadObjectList('id');
$instances[$index] = $catlist;
}
return $instances[$index];
}
function getChildCategories($catids=null,$levels=1,$aid=null){
global $mainframe;
$db =& JFactory::getDBO();
if (is_null($aid)) {
$aid = $this->datamodel->aid;
}
if (is_null($catids)) {
$catids = $this->datamodel->catids;
}
$catidList = implode(",", $catids);
$cfg = & JEVConfig::getInstance();
$sectionname = JEV_COM_COMPONENT;
static $instances;
if (!$instances) {
$instances = array();
}
// calculate unique index identifier
$index = $aid . '+' . $catidList;
$where = null;
if (!array_key_exists($index,$instances)) {
if (count($catids)>0 && $catidList!="0" && strlen($catidList)!="") {
$where = ' AND (p.id IN (' . $catidList .') '.($levels>1?' OR gp.id IN (' . $catidList .')':'').($levels>2?' OR ggp.id IN (' . $catidList .')':'').')';
}
// TODO check if this should also check abncestry based on $levels
$where .= ' AND p.id IS NOT NULL ';
$q_published = $mainframe->isAdmin() ? "\n AND c.published >= 0" : "\n AND c.published = 1";
$query = "SELECT c.*"
. "\n FROM #__categories AS c"
. ' LEFT JOIN #__categories AS p ON p.id=c.parent_id'
. ($levels>1?' LEFT JOIN #__categories AS gp ON gp.id=p.parent_id ':'')
. ($levels>2?' LEFT JOIN #__categories AS ggp ON ggp.id=gp.parent_id ':'')
. "\n WHERE c.access <= $aid"
. $q_published
. "\n AND c.section = '".$sectionname."'"
. "\n " . $where;
;
$db->setQuery($query);
$catlist = $db->loadObjectList('id');
$instances[$index] = $catlist;
}
return $instances[$index];
}
function listEvents( $startdate, $enddate, $order=""){
if (!$this->legacyEvents) {
return array();
}
}
function _cachedlistEvents($query, $langtag,$count=false){
$db =& JFactory::getDBO();
$db->setQuery( $query );
if ($count){
$db->query();
return $db->getNumRows();
}
$rows = $db->loadObjectList();
$rowcount = count($rows);
if ($rowcount>0) {
usort( $rows, array('JEventsDBModel','sortEvents') );
}
for( $i = 0; $i < $rowcount; $i++ ){
$rows[$i] = new jEventCal($rows[$i]);
}
return $rows;
}
// Allow the passing of filters directly into this function for use in 3rd party extensions etc.
function listIcalEvents($startdate,$enddate, $order="", $filters = false, $extrafields="", $extratables="", $limit=""){
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$lang =& JFactory::getLanguage();
$langtag = $lang->getTag();
if (strpos($startdate,"-")===false) {
$startdate = strftime('%Y-%m-%d 00:00:00',$startdate);
$enddate = strftime('%Y-%m-%d 23:59:59',$enddate);
}
// process the new plugins
// get extra data and conditionality from plugins
$extrawhere =array();
$extrajoin = array();
if (!$filters){
$filters = jevFilterProcessing::getInstance(array("published","justmine","category"));
$filters->setWhereJoin($extrawhere,$extrajoin);
$extrafields = ""; // must have comma prefix
$extratables = ""; // must have comma prefix
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger('onListIcalEvents', array (& $extrafields, & $extratables, & $extrawhere, & $extrajoin));
}
else {
$filters->setWhereJoin($extrawhere,$extrajoin);
}
$extrajoin = ( count( $extrajoin ) ? " \n LEFT JOIN ". implode( " \n LEFT JOIN ", $extrajoin ) : '' );
$extrawhere = ( count( $extrawhere ) ? ' AND '. implode( ' AND ', $extrawhere ) : '' );
// This version picks the details from the details table
// ideally we should check if the event is a repeat but this involves extra queries unfortunately
$query = "SELECT rpt.*, ev.*, rr.*, det.*, ev.state as published $extrafields"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn"
. "\n FROM #__jevents_repetition as rpt"
. "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid "
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid"
. $extrajoin
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
// New equivalent but simpler test
. "\n AND rpt.endrepeat >= '$startdate' AND rpt.startrepeat <= '$enddate'"
/*
. "\n AND ((rpt.startrepeat >= '$startdate' AND rpt.startrepeat <= '$enddate')"
. "\n OR (rpt.endrepeat >= '$startdate' AND rpt.endrepeat <= '$enddate')"
// This is redundant!!
//. "\n OR (rpt.startrepeat >= '$startdate' AND rpt.endrepeat <= '$enddate')"
// This slows the query down
. "\n OR (rpt.startrepeat <= '$startdate' AND rpt.endrepeat >= '$enddate')"
. "\n )"
*/
. $extrawhere
. "\n AND ev.access <= ".$user->aid
. " AND icsf.state=1 AND icsf.access <= ".$user->aid;
// published state is now handled by filter
//. "\n AND ev.state=1"
//. "\n GROUP BY rpt.rp_id";
if ($order !="") {
$query .= " ORDER BY ".$order;
}
if ($limit !="") {
$query .= " LIMIT ".$limit;
}
$cache=& JFactory::getCache(JEV_COM_COMPONENT);
return $cache->call('JEventsDBModel::_cachedlistIcalEvents', $query, $langtag );
}
function _cachedlistIcalEvents($query, $langtag,$count=false){
$db =& JFactory::getDBO();
$db->setQuery( $query );
//echo $db->explain();
//echo $db->_sql;
if ($count){
$db->query();
return $db->getNumRows();
}
$icalrows = $db->loadObjectList();
$icalcount = count($icalrows);
for( $i = 0; $i < $icalcount ; $i++ ){
// convert rows to jIcalEvents
$icalrows[$i] = new jIcalEventRepeat($icalrows[$i]);
}
return $icalrows;
}
function listEventsByDateNEW( $select_date ){
return $this->listEvents($select_date." 00:00:00",$select_date." 23:59:59");
}
function listIcalEventsByDay($targetdate){
// targetdate is midnight at start of day - but just in case
list ($y,$m,$d) = explode(":",strftime( '%Y:%m:%d',$targetdate));
$startdate = mktime( 0, 0, 0, $m, $d, $y );
$enddate = mktime( 23, 59, 59, $m, $d, $y );
return $this->listIcalEvents($startdate,$enddate);
}
function listEventsByWeekNEW( $weekstart, $weekend){
return $this->listEvents($weekstart, $weekend);
}
function listIcalEventsByWeek( $weekstart, $weekend){
return $this->listIcalEvents( $weekstart, $weekend);
}
function listEventsByMonthNew( $year, $month, $order){
$db =& JFactory::getDBO();
$month = str_pad($month, 2, '0', STR_PAD_LEFT);
$select_date = $year.'-'.$month.'-01 00:00:00';
$select_date_fin = $year.'-'.$month.'-'.date('t',mktime(0,0,0,($month+1),0,$year)).' 23:59:59';
return $this->listEvents($select_date,$select_date_fin,$order);
}
function listIcalEventsByMonth( $year, $month){
$startdate = mktime( 0, 0, 0, $month, 1, $year );
$enddate = mktime( 23, 59, 59, $month, date( 't', $startdate), $year );
return $this->listIcalEvents($startdate,$enddate,"");
}
function listEventsByYearNEW( $year, $limitstart=0, $limit=0 ) {
if (!$this->legacyEvents) {
return array();
}
}
// Allow the passing of filters directly into this function for use in 3rd party extensions etc.
function listIcalEventsByYear( $year, $limitstart, $limit, $showrepeats = true, $order="", $filters = false, $extrafields="", $extratables="", $count=false) {
list($year,$month,$day) = JEVHelper::getYMD();
$startdate = $this->cfg->getValue("showyearpast",1)?mktime( 0, 0, 0, 1, 1, $year ):mktime( 0, 0, 0, $month,$day, $year );
$enddate = mktime( 23, 59, 59, 12, 31, $year );
if (!$count){
$order = "rpt.startrepeat asc";
}
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$lang =& JFactory::getLanguage();
$langtag = $lang->getTag();
if (strpos($startdate,"-")===false) {
$startdate = strftime('%Y-%m-%d 00:00:00',$startdate);
$enddate = strftime('%Y-%m-%d 23:59:59',$enddate);
}
// process the new plugins
// get extra data and conditionality from plugins
$extrawhere =array();
$extrajoin = array();
if (!$filters){
$filters = jevFilterProcessing::getInstance(array("published","justmine","category"));
$filters->setWhereJoin($extrawhere,$extrajoin);
$extrafields = ""; // must have comma prefix
$extratables = ""; // must have comma prefix
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger('onListIcalEvents', array (& $extrafields, & $extratables, & $extrawhere, & $extrajoin));
}
else {
$filters->setWhereJoin($extrawhere,$extrajoin);
}
$extrajoin = ( count( $extrajoin ) ? " \n LEFT JOIN ". implode( " \n LEFT JOIN ", $extrajoin ) : '' );
$extrawhere = ( count( $extrawhere ) ? ' AND '. implode( ' AND ', $extrawhere ) : '' );
// This version picks the details from the details table
if ($count){
$query = "SELECT rpt.rp_id";
}
else {
$query = "SELECT ev.*, rpt.*, rr.*, det.*, ev.state as published $extrafields"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn";
}
$query .= "\n FROM #__jevents_repetition as rpt"
. "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid "
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid"
. $extrajoin
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
// New equivalent but simpler test
. "\n AND rpt.endrepeat >= '$startdate' AND rpt.startrepeat <= '$enddate'"
/*
. "\n AND ((rpt.startrepeat >= '$startdate' AND rpt.startrepeat <= '$enddate')"
. "\n OR (rpt.endrepeat >= '$startdate' AND rpt.endrepeat <= '$enddate')"
//. "\n OR (rpt.startrepeat >= '$startdate' AND rpt.endrepeat <= '$enddate')"
. "\n OR (rpt.startrepeat <= '$startdate' AND rpt.endrepeat >= '$enddate'))"
*/
. $extrawhere
. "\n AND ev.access <= ".$user->aid
. " AND icsf.state=1 AND icsf.access <= ".$user->aid
// published state is not handled by filter
//. "\n AND ev.state=1"
. ($showrepeats?"":"\n GROUP BY ev.ev_id");
if ($order !="") {
$query .= " ORDER BY ".$order;
}
if ($limit !="" && $limit!=0) {
$query .= " LIMIT ".($limitstart!=""?$limitstart.",":"").$limit;
}
$cache=& JFactory::getCache(JEV_COM_COMPONENT);
return $cache->call('JEventsDBModel::_cachedlistIcalEvents', $query, $langtag ,$count);
}
function countIcalEventsByYear( $year,$showrepeats = true) {
$startdate = mktime( 0, 0, 0, 1, 1, $year );
$enddate = mktime( 23, 59, 59, 12, 31, $year );
return count($this->listIcalEventsByYear($year,"","",$showrepeats,"",false,"","",true));
}
function listEventsById( $evid, $includeUnpublished=0, $jevtype="unspecified" ) {
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$frontendPublish = JEVHelper::isEventPublisher();
if ($jevtype=="icaldb"){
// process the new plugins
// get extra data and conditionality from plugins
$extrafields = ""; // must have comma prefix
$extratables = ""; // must have comma prefix
$extrawhere =array();
$extrajoin = array();
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger('onListEventsById', array (& $extrafields, & $extratables, & $extrawhere, & $extrajoin));
$extrajoin = ( count( $extrajoin ) ? " \n LEFT JOIN ".implode( " \n LEFT JOIN ", $extrajoin ) : '' );
$extrawhere = ( count( $extrawhere ) ? ' AND '. implode( ' AND ', $extrawhere ) : '' );
$query = "SELECT ev.*, ev.state as published, rpt.*, rr.*, det.* $extrafields"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn"
. "\n FROM (#__jevents_vevent as ev $extratables)"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. $extrajoin
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. $extrawhere
. "\n AND rpt.rp_id = '$evid'";
}
else {
die("invalid jevtype in listEventsById - more changes needed");
}
$db->setQuery( $query );
//echo $db->_sql;
$rows = $db->loadObjectList();
// iCal agid uses GUID or UUID as identifier
if( $rows ){
if (strtolower($jevtype)=="icaldb"){
$row = new jIcalEventRepeat($rows[0]);
}
else if (strtolower($jevtype)=="jevent"){
$row = new jEventCal($rows[0]);
}
}else{
$row=null;
}
return $row;
}
/**
* Get Event by ID (not repeat Id) result is based on first repeat
*
* @param event_id $evid
* @param boolean $includeUnpublished
* @param string $jevtype
* @return jeventcal (or desencent)
*/
function getEventById( $evid, $includeUnpublished=0, $jevtype="unspecified" ) {
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$frontendPublish = JEVHelper::isEventPublisher();
if ($jevtype=="icaldb"){
// process the new plugins
// get extra data and conditionality from plugins
$extrafields = ""; // must have comma prefix
$extratables = ""; // must have comma prefix
$extrawhere ="";
$extrajoin = "";
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger('onListEventsById', array (& $extrafields, & $extratables, & $extrawhere, & $extrajoin));
$query = "SELECT ev.*, rpt.*, rr.*, det.* $extrafields"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn"
. "\n FROM (#__jevents_vevent as ev $extratables)"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. $extrajoin
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. $extrawhere
. "\n AND ev.ev_id = '$evid'"
. "\n LIMIT 1";
}
else {
die("invalid jevtype in listEventsById - more changes needed");
}
$db->setQuery( $query );
//echo $db->_sql;
$rows = $db->loadObjectList();
// iCal agid uses GUID or UUID as identifier
if( $rows ){
if (strtolower($jevtype)=="icaldb"){
$row = new jIcalEventRepeat($rows[0]);
}
else if (strtolower($jevtype)=="jevent"){
$row = new jEventCal($rows[0]);
}
}else{
$row=null;
}
return $row;
}
function listEventsByCreator( $creator_id, $limitstart, $limit ){
if (!$this->legacyEvents) {
return array();
}
}
function listIcalEventsByCreator ( $creator_id, $limitstart, $limit ){
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$cfg = & JEVConfig::getInstance();
$rows_per_page = $limit;
if( empty( $limitstart) || !$limitstart ){
$limitstart = 0;
}
$limit = "";
if ($limitstart>0 || $rows_per_page>0){
$limit = "LIMIT $limitstart, $rows_per_page";
}
$frontendPublish = JEVHelper::isEventPublisher();
$adminCats = JEVHelper::categoryAdmin();
$where = '';
if( $creator_id == 'ADMIN' ){
$where = "";
}
else if ( $adminCats && count($adminCats)>0){
//$adminCats = " OR (ev.state=0 AND ev.catid IN(".implode(",",$adminCats)."))";
$adminCats = " OR ev.catid IN(".implode(",",$adminCats).")";
$where = " AND ( ev.created_by = ".$user->id. $adminCats. ")";
}
else {
$where = " AND ev.created_by = '$creator_id' ";
}
// State is manged by plugin
/*
$state = "\n AND ev.state=1";
if ($frontendPublish){
$state = "";
}
*/
$extrawhere =array();
$extrajoin = array();
$filters = jevFilterProcessing::getInstance(array("published","justmine","category","startdate"));
$filters->setWhereJoin($extrawhere,$extrajoin);
$extrajoin = ( count( $extrajoin ) ? " \n LEFT JOIN ". implode( " \n LEFT JOIN ", $extrajoin ) : '' );
$extrawhere = ( count( $extrawhere ) ? ' AND '. implode( ' AND ', $extrawhere ) : '' );
$query = "SELECT ev.*, rr.*, det.*, ev.state as published, count(rpt.rp_id) as rptcount"
. "\n , YEAR(dtstart) as yup, MONTH(dtstart ) as mup, DAYOFMONTH(dtstart ) as dup"
. "\n , YEAR(dtend ) as ydn, MONTH(dtend ) as mdn, DAYOFMONTH(dtend ) as ddn"
. "\n , HOUR(dtstart) as hup, MINUTE(dtstart) as minup, SECOND(dtstart ) as sup"
. "\n , HOUR(dtend ) as hdn, MINUTE(dtend ) as mindn, SECOND(dtend ) as sdn"
. "\n FROM #__jevents_vevent as ev"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = ev.detail_id"
. $extrajoin
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. $extrawhere
. $where
. "\n AND icsf.state=1"
. "\n GROUP BY ev.ev_id"
. "\n ORDER BY dtstart ASC"
. "\n $limit";
$db->setQuery( $query );
$icalrows = $db->loadObjectList();
echo $db->getErrorMsg();
$icalcount = count($icalrows);
for( $i = 0; $i < $icalcount ; $i++ ){
// convert rows to jIcalEvents
$icalrows[$i] = new jIcalEventDB($icalrows[$i]);
}
return $icalrows;
}
function listIcalEventRepeatsByCreator ( $creator_id, $limitstart, $limit ){
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$cfg = & JEVConfig::getInstance();
$rows_per_page = $limit;
if( empty( $limitstart) || !$limitstart ){
$limitstart = 0;
}
$limit = "LIMIT $limitstart, $rows_per_page";
$where = '';
if( $creator_id <> 'ADMIN' ){
$where = " AND created_by = '$creator_id' ";
}
$frontendPublish = JEVHelper::isEventPublisher();
if( $frontendPublish ){
// TODO fine a single query way of doing this !!!
$query = "SELECT MIN(rpt.rp_id) as rp_id"
. "\n FROM #__jevents_vevent as ev "
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
// . "\n AND ev.created_by = ".$user->id
. "\n AND icsf.state=1"
. "\n GROUP BY ev.ev_id";
$db->setQuery( $query );
$rplist = $db->loadResultArray();
$rplist = implode(',', array_merge(array(-1), $rplist));
$query = "SELECT ev.*, rpt.*, rr.*, det.*"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn"
. "\n FROM #__jevents_vevent as ev "
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n AND rpt.eventid = ev.ev_id"
. "\n AND rpt.rp_id IN($rplist)"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
// . "\n AND ev.created_by = ".$user->id
. "\n AND icsf.state=1"
. "\n GROUP BY rpt.rp_id";
}
else {
// TODO fine a single query way of doing this !!!
$query = "SELECT MIN(rpt.rp_id) as rp_id"
. "\n FROM #__jevents_vevent as ev "
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. "\n AND ev.state=1"
. "\n AND icsf.state=1"
. "\n AND ev.created_by = ".$user->id
. "\n GROUP BY ev.ev_id";
$db->setQuery( $query );
$rplist = $db->loadResultArray();
$rplist = implode(',', array_merge(array(-1), $rplist));
$query = "SELECT ev.*, rpt.*, rr.*, det.*"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n AND rpt.rp_id IN($rplist)"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. "\n AND ev.created_by = ".$user->id
. "\n AND ev.state=1"
. "\n AND icsf.state=1"
. "\n GROUP BY rpt.rp_id";
}
$db->setQuery( $query );
$icalrows = $db->loadObjectList();
$icalcount = count($icalrows);
for( $i = 0; $i < $icalcount ; $i++ ){
// convert rows to jIcalEvents
$icalrows[$i] = new jIcalEventDB($icalrows[$i]);
}
return $icalrows;
}
function countEventsByCreator($creator_id){
if (!$this->legacyEvents) {
return 0;
}
}
function countIcalEventsByCreator($creator_id){
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$adminCats = JEVHelper::categoryAdmin();
$where = '';
if( $creator_id == 'ADMIN' ){
$where = "";
}
else if ( $adminCats && count($adminCats)>0){
//$adminCats = " OR (ev.state=0 AND ev.catid IN(".implode(",",$adminCats)."))";
$adminCats = " OR ev.catid IN(".implode(",",$adminCats).")";
$where = " AND ( ev.created_by = ".$user->id. $adminCats. ")";
}
else {
$where = " AND ev.created_by = '$creator_id' ";
}
// State is managed by plugin
/*
$frontendPublish = JEVHelper::isEventPublisher();
$state = "\n AND ev.state=1";
if ($frontendPublish){
$state = "";
}
*/
$extrawhere =array();
$extrajoin = array();
$filters = jevFilterProcessing::getInstance(array("published","justmine","category","startdate"));
$filters->setWhereJoin($extrawhere,$extrajoin);
$extrajoin = ( count( $extrajoin ) ? " \n LEFT JOIN ". implode( " \n LEFT JOIN ", $extrajoin ) : '' );
$extrawhere = ( count( $extrawhere ) ? ' AND '. implode( ' AND ', $extrawhere ) : '' );
$query = "SELECT MIN(rpt.rp_id) as rp_id"
. "\n FROM #__jevents_vevent as ev "
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. $extrajoin
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. $extrawhere
. $where
. "\n AND icsf.state=1"
. "\n GROUP BY ev.ev_id";
$db->setQuery( $query );
$rplist = $db->loadResultArray();
return count($rplist);
}
function listEventsByCat( $catids, $limitstart, $limit ){
if (!$this->legacyEvents) {
return array();
}
}
// Allow the passing of filters directly into this function for use in 3rd party extensions etc.
function listIcalEventsByCat ($catids, $showrepeats = false, $total=0, $limitstart=0, $limit=0, $order=" ORDER BY rpt.startrepeat asc", $filters = false, $extrafields="", $extratables="") {
$db =& JFactory::getDBO();
// Use catid in accessibleCategoryList to pick up offsping too!
$aid = null;
$catidlist = implode(",",$catids);
// process the new plugins
// get extra data and conditionality from plugins
$extrafields = ""; // must have comma prefix
$extratables = ""; // must have comma prefix
$extrawhere =array();
$extrajoin = array();
if (!$filters){
$filters = jevFilterProcessing::getInstance(array("published","justmine","category"));
$filters->setWhereJoin($extrawhere,$extrajoin);
$extrafields = ""; // must have comma prefix
$extratables = ""; // must have comma prefix
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger('onListIcalEvents', array (& $extrafields, & $extratables, & $extrawhere, & $extrajoin));
}
else {
$filters->setWhereJoin($extrawhere,$extrajoin);
}
$extrajoin = ( count( $extrajoin ) ? " \n LEFT JOIN ". implode( " \n LEFT JOIN ", $extrajoin ) : '' );
$extrawhere = ( count( $extrawhere ) ? ' AND '. implode( ' AND ', $extrawhere ) : '' );
if ($limit>0 || $limitstart>0){
if( empty( $limitstart) || !$limitstart ){
$limitstart = 0;
}
$rows_per_page = $limit;
$limit = " LIMIT $limitstart, $rows_per_page";
}
else {
$limit = "";
}
if ($showrepeats){
$query = "SELECT ev.*, rpt.*, rr.*, det.* $extrafields"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn"
. "\n FROM #__jevents_vevent as ev"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. $extrajoin
//. "\n WHERE ev.catid IN(".$this->accessibleCategoryList($aid,$catids,$catidlist).")"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. $extrawhere
//. "\n AND ev.state=1"
. "\n AND icsf.state=1"
. "\n GROUP BY rpt.rp_id"
. $order
. $limit;
}
else {
// TODO find a single query way of doing this !!!
$query = "SELECT MIN(rpt.rp_id) as rp_id FROM #__jevents_repetition as rpt "
. "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. $extrajoin
//. "\n WHERE ev.catid IN(".$this->accessibleCategoryList($aid,$catids,$catidlist).")"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. $extrawhere
//. "\n AND ev.state=1"
. "\n AND icsf.state=1"
. "\n GROUP BY rpt.eventid"
;
$db->setQuery( $query );
//echo $db->explain();
$rplist = $db->loadResultArray();
$rplist = implode(',', array_merge(array(-1), $rplist));
$query = "SELECT rpt.rp_id,ev.*, rpt.*, rr.*, det.* $extrafields"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn"
. "\n FROM #__jevents_repetition as rpt "
. "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n AND rpt.rp_id IN($rplist)"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. $extrajoin
//. "\n WHERE ev.catid IN(".$this->accessibleCategoryList($aid,$catids,$catidlist).")"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. $extrawhere
//. "\n AND ev.state=1"
. "\n AND icsf.state=1"
. $order
. $limit;
}
$db->setQuery( $query );
//echo $db->explain();
//echo $db->_sql;
$icalrows = $db->loadObjectList();
$icalcount = count($icalrows);
for( $i = 0; $i < $icalcount ; $i++ ){
// convert rows to jIcalEvents
$icalrows[$i] = new jIcalEventRepeat($icalrows[$i]);
}
return $icalrows;
}
function countEventsByCat( $catid){
return 0;
}
function countIcalEventsByCat( $catids, $showrepeats = false){
$db =& JFactory::getDBO();
// Use catid in accessibleCategoryList to pick up offsping too!
$aid = null;
$catidlist = implode(",",$catids);
// process the new plugins
// get extra data and conditionality from plugins
$extrafields = ""; // must have comma prefix
$extratables = ""; // must have comma prefix
$extrawhere =array();
$extrajoin = array();
$filters = jevFilterProcessing::getInstance(array("published","justmine","category"));
$filters->setWhereJoin($extrawhere,$extrajoin);
$extrafields = ""; // must have comma prefix
$extratables = ""; // must have comma prefix
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger('onListIcalEvents', array (& $extrafields, & $extratables, & $extrawhere, & $extrajoin));
$extrajoin = ( count( $extrajoin ) ? " \n LEFT JOIN ". implode( " \n LEFT JOIN ", $extrajoin ) : '' );
$extrawhere = ( count( $extrawhere ) ? ' AND '. implode( ' AND ', $extrawhere ) : '' );
// Get the count
if ($showrepeats){
$query = "SELECT count(det.evdet_id) as cnt"
. "\n FROM #__jevents_vevent as ev "
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. $extrajoin
//. "\n WHERE ev.catid IN(".$this->accessibleCategoryList($aid,$catids,$catidlist).")"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. "\n AND icsf.state=1"
. $extrawhere;
//. "\n AND ev.state=1"
}
else {
// TODO fine a single query way of doing this !!!
$query = "SELECT MIN(rpt.rp_id) as rp_id FROM #__jevents_repetition as rpt "
. "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid "
. $extrajoin
//. "\n WHERE ev.catid IN(".$this->accessibleCategoryList($aid,$catids,$catidlist).")"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. $extrawhere
//. "\n AND ev.state=1"
. "\n AND icsf.state=1"
. "\n GROUP BY ev.ev_id";
$db->setQuery( $query );
$rplist = $db->loadResultArray();
$rplist = implode(',', array_merge(array(-1), $rplist));
$query = "SELECT count(det.evdet_id) as cnt"
. "\n FROM #__jevents_vevent as ev "
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n AND rpt.rp_id IN($rplist)"
. "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. $extrajoin
//. "\n WHERE ev.catid IN(".$this->accessibleCategoryList($aid,$catids,$catidlist).")"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. "\n AND icsf.state=1"
. $extrawhere;
//. "\n AND ev.state=1"
}
$db->setQuery( $query );
//echo $db->_sql;
$total = intval($db->loadResult());
return $total;
}
function listEventsByKeyword( $keyword, $order, &$limit, &$limitstart, &$total, $useRegX=false ){
$user =& JFactory::getUser();
$db =& JFactory::getDBO();
$rows_per_page = $limit;
if( empty( $limitstart ) || !$limitstart ){
$limitstart = 0;
}
$limitstring = "";
if ($rows_per_page>0){
$limitstring = "LIMIT $limitstart, $rows_per_page";
}
$where = "";
$having = "";
if (!JRequest::getInt('showpast',0)){
$datenow =& JFactory::getDate("-12 hours");
$having = " AND rpt.endrepeat>'".$datenow->toMysql()."'";
}
if( !$order ){
$order = 'publish_up';
}
$order = preg_replace( "/[\t ]+/", '', $order );
$orders = explode( ",", $order );
// this function adds #__events. to the beginning of each ordering field
function app_db( $strng ){
return '#__events.' . $strng;
}
$order = implode( ',', array_map( 'app_db', $orders ));
$total = 0;
// Now Search Icals
$query = "SELECT count( distinct det.evdet_id) FROM #__jevents_vevent as ev"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. "\n AND icsf.state=1 AND icsf.access <= ".$user->aid
. "\n AND ";
$query .= ( $useRegX ) ? "(det.summary RLIKE '$keyword' OR det.description RLIKE '$keyword')\n" :
"MATCH (det.summary, det.description) AGAINST ('$keyword' IN BOOLEAN MODE)\n";
$query .= "AND ev.state = '1'";
$query .= $having;
$db->setQuery( $query );
//echo $db->explain();
$total += intval($db->loadResult());
if ($total<$limitstart){
$limitstart = 0;
}
$rows = array();
// Now Search Icals
// New version
$query = "SELECT DISTINCT det.evdet_id FROM #__jevents_vevdetail as det"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventdetail_id = det.evdet_id"
. "\n LEFT JOIN #__jevents_vevent as ev ON ev.ev_id = rpt.eventid"
. "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid"
. "\n WHERE ev.catid IN(".$this->accessibleCategoryList().")"
. "\n AND icsf.state=1 AND icsf.access <= ".$user->aid ;
$query .= " AND ";
$query .= ( $useRegX ) ? "(det.summary RLIKE '$keyword' OR det.description RLIKE '$keyword')\n" :
"MATCH (det.summary, det.description) AGAINST ('$keyword' IN BOOLEAN MODE)\n";
$query .= " AND ev.state = '1'";
$query .= $having;
$query .= "\n ORDER BY rpt.startrepeat ASC ";
$query .= "\n $limitstring";
$db->setQuery( $query );
//echo $db->explain();
$details = $db->loadResultArray();
$icalrows = array();
foreach ($details as $detid) {
$query2 = "SELECT ev.*, rpt.*, det.*"
. "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup"
. "\n , YEAR(rpt.endrepeat ) as ydn, MONTH(rpt.endrepeat ) as mdn, DAYOFMONTH(rpt.endrepeat ) as ddn"
. "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup"
. "\n , HOUR(rpt.endrepeat ) as hdn, MINUTE(rpt.endrepeat ) as mindn, SECOND(rpt.endrepeat ) as sdn"
. "\n FROM #__jevents_vevent as ev"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id"
. "\n WHERE rpt.eventdetail_id = $detid"
. $having
. "\n ORDER BY rpt.startrepeat ASC limit 1";
$db->setQuery( $query2 );
//echo $db->explain();
$icalrows[] = $db->loadObject();
}
$num_events = count( $icalrows );
for( $i = 0; $i < $num_events; $i++ ){
// convert rows to jevents
$icalrows[$i] = new jIcalEventRepeat($icalrows[$i]);
}
return $icalrows;
}
function sortEvents( $a, $b ){
list( $adate, $atime ) = split( ' ', $a->publish_up );
list( $bdate, $btime ) = split( ' ', $b->publish_up );
return strcmp( $atime, $btime );
}
function sortJointEvents( $a, $b ){
$adatetime = $a->getUnixStartTime();
$bdatetime = $b->getUnixStartTime();
if ($adatetime==$bdatetime) return 0;
return ($adatetime>$bdatetime)?-1:1;
}
function findMatchingRepeat($uid, $year, $month, $day){
$start = $year.'/'.$month.'/'.$day.' 00:00:00';
$end = $year.'/'.$month.'/'.$day.' 23:59:59';
$db =& JFactory::getDBO();
$query = "SELECT ev.*, rpt.* "
. "\n FROM #__jevents_vevent as ev"
. "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id"
. "\n WHERE ev.uid = ".$db->Quote($uid)
. "\n AND rpt.startrepeat>=".$db->Quote($start)." AND rpt.startrepeat<=".$db->Quote($end)
;
$db->setQuery( $query );
//echo $db->_sql;
$rows = $db->loadObjectList();
if (count($rows)>0){
return $rows[0]->rp_id;
}
// still no match so find the nearest repeat and give a message.
$db =& JFactory::getDBO();
$query = "SELECT ev.*, rpt.*, abs(datediff(rpt.startrepeat,".$db->Quote($start).")) as diff "
. "\n FROM #__jevents_repetition as rpt"
. "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id"
. "\n WHERE ev.uid = ".$db->Quote($uid)
. "\n ORDER BY diff asc LIMIT 3"
;
$db->setQuery( $query );
//echo $db->_sql;
$rows = $db->loadObjectList();
if (count($rows)>0){
JError::raiseNotice(1,JText::_("This event has changed - this is occurance is now the closest to the date you searched for"));
return $rows[0]->rp_id;
}
}
}