File Manager
<?php
final class cgc_event_loader
{
private $_idlist;
private $_eventtemplate;
private $_events = array();
private $_fields = array();
private $_categories = array();
private $_destpage;
private $_url_prefix = 'calendar';
private $_reverse = FALSE;
private $_actionid;
public function __construct($actionid,$idlist,$destpage,$reverse)
{
if( is_array($idlist) ) {
$this->_idlist = array();
foreach( $idlist as $one ) {
$one = (int)$one;
if( $one < 1 ) continue;
$this->_idlist[] = $one;
}
$this->_idlist = array_unique($this->_idlist);
}
else if( (int)$idlist > 0 ) {
$this->_idlist = array((int)$idlist);
}
$this->_actionid = $actionid;
$this->_reverse = (bool)$reverse;
$this->_destpage = $destpage;
$tmp = cms_utils::get_module(MOD_CGCALENDAR)->GetPreference('url_prefix');
if( $tmp ) $this->_url_prefix = $tmp;
}
public function set_event_template($eventtemplate)
{
$this->_eventtemplate = $eventtemplate;
}
private function reorder_customfields($customfields)
{
$fields = cms_utils::get_module('CGCalendar')->GetFields();
$fields = cge_array::to_hash($fields,'field_name');
$func = function($a,$b) use ($fields) {
if( $a['event_id'] < $b['event_id'] ) return -1;
if( $a['event_id'] > $b['event_id'] ) return 1;
$aa = $fields[$a['field_name']];
$aa = $fields[$b['field_name']];
if( $aa['field_order'] < $bb['field_order'] ) return -1;
if( $aa['field_order'] > $bb['field_order'] ) return 1;
// now compare by field value.
if( $a['field_value'] < $b['field_value'] ) return -1;
if( $a['field_value'] > $b['field_value'] ) return -1;
return 0;
};
usort($customfields,$func);
}
public function get_events()
{
$gCms = cmsms();
$sorting = ($this->_reverse) ? 'DESC' : 'ASC';
$query = 'SELECT * FROM '.cms_db_prefix().'module_cgcalendar_events WHERE event_id IN (';
$query .= implode(',',$this->_idlist).')';
$query .= " ORDER BY event_date_start $sorting";
$db = cmsms()->GetDb();
// get the parent ids and events.
$events = $db->GetArray($query);
$parent_ids = $this->_idlist;
if( !is_array($events) || count($events) == 0 ) return;
foreach( $events as $row ) {
if( $row['event_parent_id'] > 0 ) $parent_ids[] = $row['event_parent_id'];
}
$parent_ids = array_unique($parent_ids);
$customfields = array();
{
$query = 'SELECT * FROM '.cms_db_prefix().'module_cgcalendar_event_field_values
WHERE event_id IN ('.implode(',',$parent_ids).') ORDER BY event_id';
$frs = $db->GetArray($query);
foreach( $frs as $row ) {
$customfields[$row['event_id']][] = $row;
}
}
$allcategories = array();
{
$query = 'SELECT * FROM '.cms_db_prefix().'module_cgcalendar_events_to_categories
WHERE event_id IN ('.implode(',',$this->_idlist).') ORDER BY event_id';
$crs = $db->Execute($query);
while( $crs && !$crs->EOF() ) {
$row = $crs->fields;
$allcategories[$row['event_id']][] = $row;
$crs->MoveNext();
}
if( count($allcategories) ) \CGCalendar\category::get_categories(); // forces preload.
}
$users = array();
{
$userops = $gCms->GetUserOperations();
$userlist = $userops->LoadUsers();
foreach ($userlist as $oneuser) {
$users[$oneuser->id] = $oneuser;
}
}
$module = cms_utils::get_module('CGCalendar');
foreach( $events as &$row ) {
$titleSEO = munge_string_to_url($row['event_title']);
$prettyurl = sprintf($this->_url_prefix.'/%d/%d-%s', $this->_destpage, $row['event_id'], $titleSEO);
$parms = array();
$parms['event_id'] = $row['event_id'];
$parms['display'] = 'event';
if( $this->_eventtemplate ) $parms['eventtemplate'] = $this->_eventtemplate;
$row['url'] = $module->create_url($this->_actionid,'default',$this->_destpage,$parms,false,false,$prettyurl);
$ptr = null;
if( isset($allcategories[$row['event_id']]) ) {
$ptr = $allcategories[$row['event_id']];
}
else if( $row['event_parent_id'] > 0 && isset($allcategories[$row['event_parent_id']]) ) {
$ptr = $allcategories[$row['event_parent_id']];
}
if( $ptr ) {
$categories = array();
foreach( $ptr as $cat ) {
$categories[] = $cat['category_id'];
if( !isset($row['bgcolor']) ) {
// get colors for this event...
$cat_obj = \CGCalendar\category::load($cat['category_id']);
$row['fgcolor'] = $cat_obj['fgcolor'];
$row['bgcolor'] = $cat_obj['bgcolor'];
}
}
$row['categories'] = $categories;
$row['category_names'] = $module->GetCategoryNames($categories);
}
$ptr = null;
if( isset($customfields[$row['event_id']]) ) {
$ptr = $customfields[$row['event_id']];
}
else if( $row['event_parent_id'] > 0 && isset($customfields[$row['event_parent_id']]) ) {
$ptr = $customfields[$row['event_parent_id']];
}
if( $ptr ) {
$fields = array();
$fieldinfo = array();
foreach( $ptr as $key => $rec ) {
$fields[$rec['field_name']] = $rec['field_value'];
$fieldinfo[$rec['field_name']] = $rec;
}
$row['fields'] = $fields; // deprecated
$row['fieldinfo'] = $fieldinfo;
}
if( $row['event_created_by'] < 0 ) {
// negative values (smaller than -100) indicate an admin user account
$uid = $row['event_created_by'] + 100 * -1;
$row['admin_uid'] = $uid;
if( isset($users[$uid]) ) $row['author'] = $users[$uid]->username;
}
$row['is_parent'] = ($row['event_recur_interval'] != 'none' && $row['event_recur_interval'] != '');
}
return $events;
}
} // end of class
?>
File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com