File Manager
<?php
if( !isset($gCms) ) exit;
if( !$this->CheckPermission('Modify Calendar') &&
!$this->CheckPermission('Add Calendar Events') &&
!$this->CheckPermission('Edit My Calendar Events') ) exit;
$start = (int)cge_utils::get_param($_REQUEST,'start');
$end = (int)cge_utils::get_param($_REQUEST,'end');
$showchildren = (int)cge_utils::get_param($params,'showchildren',0);
$category = (int)cge_utils::get_param($params,'category',-1);
$keyword = trim(cge_utils::get_param($params,'keyword'));
$when = strtolower(trim(cge_utils::get_param($params,'when','any')));
// when can only be used when start/end are not specified.
$limit = cge_utils::get_param($params,'limit',10000); // 10000 is more than enough.
$st_ds = $db->DbTimeStamp($start);
$en_ds = $db->DbTimeStamp($end);
if( $start < 1 || $end < 1 ) {
switch( $when ) {
case 'past':
$start = 1;
$end = time();
break;
case 'future':
$start = time();
$end = 2147483648; // max unix time
break;
case 'any':
break;
}
}
if( $start > $end ) {
$c = $start;
$start = $end;
$end = $c;
}
$where = array();
$parms = array();
// get all of the events
$query = 'SELECT E.* FROM '.$this->events_table_name.' E';
if( $category > 0 ) {
$query .= ' LEFT JOIN '.$this->events_to_categories_table_name.' EC ON E.event_id = EC.event_id';
$where[] = 'EC.category_id = ?';
$parms[] = $category;
}
if( $start && $end ) {
$where[] = '((E.event_date_start BETWEEN ? AND ?) OR (E.event_date_start BETWEEN ? AND ?))';
$parms[] = trim($db->DbTimeStamp($start),"'");
$parms[] = trim($db->DbTimeStamp($end),"'");
$parms[] = trim($db->DbTimeStamp($start),"'");
$parms[] = trim($db->DbTimeStamp($end),"'");
}
if( !$showchildren ) $where[] = 'COALESCE(E.event_parent_id,0) < 1';
if( $keyword ) {
// use the full text index
$where[] = 'MATCH(E.event_title,E.event_summary,E.event_details) AGAINST (?)';
$parms[] = $keyword;
}
// put the query together
if( count($where) ) $query .= ' WHERE ' . implode(' AND ',$where);
$rs = $db->SelectLimit($query,$limit,0,$parms);
$list1 = array();
while( !$rs->EOF ) {
$list1[] = $rs->fields;
$rs->MoveNext();
}
unset($rs);
if( count($list1) ) {
debug_to_log($list1);
// get the categorie(s) for these events
$idlist = cge_array::extract_field($list1,'event_id');
$query = 'SELECT * FROM '.$this->events_to_categories_table_name.' WHERE event_id IN ('.implode(',',$idlist).') ORDER BY event_id,category_id';
$tmp = $db->GetArray($query);
$category_list = array();
if( is_array($tmp) && count($tmp) ) {
foreach( $tmp as $rec ) {
$category_list[$rec['event_id']][] = $rec['category_id'];
}
}
// now convert this into something compatible with fullcalendar
$outlist = array();
foreach( $list1 as $rec ) {
try {
$out = new stdClass;
$out->id = $rec['event_id'];
$out->title = $rec['event_title'];
$out->summary = $rec['event_summary'];
$out->canedit = 1;
$out->candelete = 0;
if( isset($category_list[$out->id]) && count($category_list[$out->id]) >= 1 ) {
// this event is in only one category
// we can set the color and textcolor
$category = \CGCalendar\category::load($category_list[$out->id][0]);
$out->color = $category['bgcolor'];
$out->textColor = $category['fgcolor'];
}
if( $rec['event_parent_id'] > 1 ) {
// is a child event
$out->title .= " (".$this->Lang('child').")";
$out->child = $rec['event_parent_id'];
$out->candelete = 1;
}
else if( $rec['event_recur_period'] && $rec['event_recur_period'] != 'none' ) {
// is a parent event of a recurring event
$out->title .= " (".$this->Lang('repeats').')';
$out->recurs = 1;
}
else {
$out->candelete = 1;
}
$out->start = $db->UnixTimeStamp($rec['event_date_start']);
$out->end = $db->UnixTimeStamp($rec['event_date_end']);
$out->allDay = ($rec['event_all_day'])?true:false;
$out->edit_url = $this->create_url($id,'admin_add_event',$returnid,array('event_id'=>$rec['event_id']));
$out->edit_url = str_replace('&','&',$out->edit_url);
$outlist[] = $out;
}
catch( Exception $e ) {
debug_to_log($e->GetMessage());
}
}
$out = json_encode($outlist);
echo $out;
}
exit;
?>
File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com