File Manager
<?php
#BEGIN_LICENSE
#-------------------------------------------------------------------------
# Module: Skeleton (c) 2008
# by Robert Allen (akrabat) and
# Robert Campbell (calguy1000@cmsmadesimple.org)
# An addon module for CMS Made Simple to allow displaying calendars,
# and management and display of time based events.
#
#-------------------------------------------------------------------------
# CMS - CMS Made Simple is (c) 2005 by Ted Kulp (wishy@cmsmadesimple.org)
# This projects homepage is: http://www.cmsmadesimple.org
#
#-------------------------------------------------------------------------
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# However, as a special exception to the GPL, this software is distributed
# as an addon module to CMS Made Simple. You may not use this software
# in any Non GPL version of CMS Made simple, or in any version of CMS
# Made simple that does not indicate clearly and obviously in its admin
# section that the site was built with CMS Made simple.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Or read it online: http://www.gnu.org/licenses/licenses.html#GPL
#
#-------------------------------------------------------------------------
#END_LICENSE
if( !isset($gCms) ) exit;
$this->SetCurrentTab('defaultadmin');
$message="";
function handle_null_date_ts($val)
{
if( $val ) {
$db = cmsms()->GetDb();
$str = $db->DbTimeStamp($val);
return trim($str,"'");
}
}
function handle_null_date($str)
{
if( !is_null($str) ) return trim($str,"'");
return $str;
}
function nth_weekday($nth,$weekday,$fromdate)
{
$month = date('m',$fromdate);
$year = date('Y',$fromdate);
$hours = date('H',$fromdate);
$minutes = date('i',$fromdate);
$seconds = date('s',$fromdate);
$ndays = -1;
$nth = strtolower($nth);
switch( $nth ) {
case 'first':
$nth = 1;
break;
case 'second':
$nth = 2;
break;
case 'third':
$nth = 3;
break;
case 'fourth':
$nth = 4;
break;
case 'last':
$nth = -1;
break;
default:
$nth = (int)$nth;
break;
}
if( $nth == -1 ) {
$days_in_month = date('t',$fromdate);
$tmp1 = mktime(0,0,0,$month,$days_in_month,$year);
$weekday_of_last = date('w',$tmp1);
if( $weekday_of_last < $weekday ) {
//$ndays = $days_in_month - $weekday_of_last - $weekday - 1;
$ndays = $days_in_month - $weekday_of_last + $weekday - 7;
}
else {
$ndays = $days_in_month - $weekday_of_last + $weekday;
}
}
else {
$nth = max($nth,1);
$nth = min($nth,4);
// get weekday of first of the month
$tmp1 = mktime(0,0,0,$month,1,$year);
$weekday_of_first = date('w',$tmp1);
if( $weekday_of_first <= $weekday ) {
$ndays = ($weekday - $weekday_of_first + 1) + ($nth - 1) * 7;
}
else {
$ndays = (7 - $weekday_of_first + $weekday + 1) + ($nth - 1) * 7;
}
}
$date = mktime($hours,$minutes,$seconds,$month,$ndays,$year);
return $date;
}
function check_overlapping_events($event_start_ut,$event_end_ut, $child_events)
{
$tmp = array();
$tmp[] = array('start'=>$event_start_ut,'end'=>$event_end_ut);
$tmp = array_merge($tmp,$child_events);
// trivial check, if the end date is null or empty
// there is no chance that events can overlap.
if(empty($event_end_ut) ) return false;
for( $i = 1; $i < count($tmp); $i++ ) {
$prev =& $tmp[$i-1];
$cur =& $tmp[$i];
if( ($cur['start'] >= $prev['start'] && $cur['start'] <= $prev['end']) ||
($cur['end'] >= $prev['start'] && $cur['end'] <= $prev['end']) ) {
return true;
}
}
return false;
}
function check_db_for_conflicts(&$module,$event,$event_id,$policy,$event_allows_overlap)
{
$db = cmsms()->GetDb();
$str = '';
if( $policy == 'individual' && $event_allows_overlap) {
$str .= ' AND event_allows_overlap = 0';
}
if( $event_id != '' && $event_id != -1) {
$str .= " AND event_id != $event_id";
}
$dbr = '';
if( $event['event_date_end'] == NULL ) {
$start = '';
if( isset($event['event_date_start']) ) {
$start = $event['event_date_start'];
}
else if( isset($event['start']) ) {
// assume unix timestamp
$start = $db->DbTimeStamp($event['start']);
}
$query = 'SELECT event_id FROM '.$module->events_table_name." WHERE ($start BETWEEN event_date_start and event_date_end)";
$dbr = $db->GetOne($query.$str);
}
else {
$start = '';
if( isset($event['event_date_start']) ) {
$start = $event['event_date_start'];
}
else if( isset($event['start']) ) {
// assume unix timestamp
$start = $db->DbTimeStamp($event['start']);
}
$end = '';
if( isset($event['event_date_end']) ) {
$end = $event['event_date_end'];
}
else if( isset($event['end']) ) {
// assume unix timestamp
$end = $db->DbTimeStamp($event['end']);
}
$query = 'SELECT event_id FROM '.$module->events_table_name."
WHERE (($start BETWEEN event_date_start and event_date_end) OR ($end BETWEEN event_date_start and event_date_end))";
$dbr = $db->GetOne($query.$str);
}
if( $dbr ) return true;
return false;
}
function calculate_recurring_events($event_start_ut, $event_end_ut,$event_recur_period,$event_recur_end_ut,$event_recur_interval,
$event_recur_count,$event_recur_weekdays,$event_recur_monthdays)
{
$results = array();
$weekdays = array('sunday','monday','tuesday','wednesday','thursday','friday','saturday');
$date = $event_start_ut;
$deltat = $event_end_ut - $event_start_ut;
if( (int)$event_end_ut == 0 ) $deltat = 0;
$period = 'day';
$datefmtstr = "+%d %s";
$hour = (int)strftime('%H',$date);
$minute = (int)strftime('%M',$date);
if( $event_recur_count < 0 ) $event_recur_count = 1000000;
switch( $event_recur_period ) {
case 'daily':
$period = 'days';
break;
case 'weekly':
$datefmtstr = "+%d %s %s %d:%d";
$period = 'weeks';
$tmp = '';
// this loop handles event in the same week as the start event
foreach( $event_recur_weekdays as $wd ) {
if( count($results) >= $event_recur_count ) break;
$str = sprintf($datefmtstr,0,$period,$weekdays[$wd],$hour,$minute);
$tmp = strtotime($str,$date);
if( $tmp <= $event_start_ut ) continue;
$tmpa = array();
$tmpa['start'] = $tmp;
if( $deltat == 0 ) {
$tmpa['end'] = NULL;
}
else {
$tmpa['end'] = $tmp + $deltat;
}
// here we check for an overlap
// with the start and end dates
// and ignore anything that might overlap
$tmp2 = array($tmpa);
$test = check_overlapping_events($event_start_ut,$event_end_ut,$tmp2);
if( $test == false ) $results[] = $tmpa;
}
break;
case 'monthly':
$period = 'months';
if( $event_recur_monthdays[0] == 'specified' ) {
$event_recur_period = 'monthly_specified';
}
else {
$datefmtstr = "%s %s %d %d:%d";
// this loop handles events in the same month as the start event
$month = date('M',$date);
$year = date('Y',$date);
foreach( $event_recur_monthdays as $md ) {
if( count($results) >= $event_recur_count ) break;
list($nth,$wd) = explode(',',$md,2);
$tmp = nth_weekday($nth,$wd,$date);
//$str = sprintf($datefmtstr,$md,$month,$year,$hour,$minute);
//$tmp = strtotime($str,$date);
if( $tmp <= $event_start_ut ) continue;
$results[] = $tmp;
}
$tmp2 = strtotime(sprintf('+%d months',$event_recur_interval),$date);
if (date('d',$tmp2)>28) $tmp2 = strtotime('-4 days',$tmp2);
$date = $tmp2;
}
break;
case 'yearly':
$period = 'years';
break;
}
// handle the recurring nature of things.
while( count($results) < $event_recur_count && $date <= $event_recur_end_ut ) {
switch( $event_recur_period ) {
case 'weekly':
{
// handle each weekday
$tmp = '';
foreach( $event_recur_weekdays as $wd ) {
if( count($results) >= $event_recur_count ) break;
$str = sprintf($datefmtstr,$event_recur_interval,$period,$weekdays[$wd],$hour,$minute);
$tmp = strtotime($str,$date);
if( $tmp > $event_recur_end_ut ) break;
$tmpa = array();
$tmpa['start'] = $tmp;
if( $deltat == 0 ) {
$tmpa['end'] = NULL;
}
else {
$tmpa['end'] = $tmp + $deltat;
}
$results[] = $tmpa;
}
$date = $tmp;
}
break;
case 'monthly':
{
$tmp = '';
$month = date('M',$date);
$year = date('Y',$date);
foreach( $event_recur_monthdays as $md ) {
if( count($results) >= $event_recur_count ) break;
list($nth,$wd) = explode(',',$md,2);
$tmp = nth_weekday($nth,$wd,$date);
//$str = sprintf($datefmtstr,$md,$month,$year,$hour,$minute);
//$tmp = strtotime($str,$date);
if( $tmp <= $event_start_ut ) continue;
$tmpa = array();
$tmpa['start'] = $tmp;
if( $deltat == 0 ) {
$tmpa['end'] = NULL;
}
else {
$tmpa['end'] = $tmp + $deltat;
}
$results[] = $tmpa;
}
$tmp2 = strtotime(sprintf('+%d months',$event_recur_interval),$date);
if (date('d',$tmp2)>28) $tmp2 = strtotime('-4 days',$tmp2);
$date = $tmp2;
}
break;
default:
{
// normal incrementing
$tmp = strtotime(sprintf($datefmtstr,$event_recur_interval,$period),$date);
$tmpa = array();
$tmpa['start'] = $tmp;
if( $deltat == 0 ) {
$tmpa['end'] = NULL;
}
else {
$tmpa['end'] = $tmp + $deltat;
}
$results[] = $tmpa;
$date = $tmp;
}
break;
}
}
return $results;
}
$events_to_categories_table_name = $this->events_to_categories_table_name;
if( isset($params['cancel']) ) $this->Redirect($id,'defaultadmin',$returnid,array("module_message"=>$message));
//
// Gather parameters
//
$event_id = cge_utils::get_param($params,'event_id',-1);
$recurring_events = '';
$user_id = get_userid(FALSE) * -1 - 100;
$categories = get_parameter_value($params, 'event_categories',-1);
$event = $this->GetEvent($event_id);
$this->GetEventFromParams($event,$params,true);
$event_parent_id = $event_id;
// permissions check
if( $event_id < 1 ) {
// adding
if( !$this->CheckPermission('Modify Calendar') && !$this->CheckPermission('Add Calendar Events') ) {
$this->SetError($this->Lang('error_permission'));
$this->RedirectToAdminTab();
}
}
else {
// editing
if( !$this->CheckPermission('Modify Calendar') &&
!($this->CheckPermission('Edit My Calendar Events') && $event['event_created_by'] == $user_id) ) {
$this->SetError($this->Lang('error_permission'));
$this->RedirectToAdminTab();
}
}
// Carry through any old values
// just incase a new file was not uploaded
foreach( $params as $k => $v ) {
if( preg_match('/^upload_field_oldvalue_/', $k) ) {
$thefield = substr($k,strlen('upload_field_oldvalue_'));
$params['field_'.$thefield] = $v;
}
}
// handle deletion
foreach( $params as $k => $v )
{
if( preg_match('/^remove_field_/', $k) && $v == 1 )
{
$thefield = substr($k,strlen('remove_field_'));
if( isset($params['upload_field_oldvalue_'.$thefield]) )
{
$v = $params['upload_field_oldvalue_'.$thefield];
$config = cmsms()->GetConfig();
$destDir = $this->GetPreference('uploaddirectory',$config['uploads_path']);
$dn = cms_join_path($destDir,$v);
@unlink($dn);
unset($params['field_'.$thefield]);
}
};
}
//
// Error Handling
//
if( $event['event_date_end_ut'] != NULL &&
$event['event_date_end_ut'] < $event['event_date_start_ut'] ) {
$params['module_error'] = $this->Lang('error_invalid_dates');
$params['event_recur_weekdays'] = implode(',',$params['event_recur_weekdays']);
$params['event_recur_monthdays'] = implode(',',$params['event_recur_monthdays']);
if( isset($params['event_categories']) && $params['event_categories]'] ) $params['event_categories'] = serialize($params['event_categories']);
$params['do_get_from_params'] = 1;
$this->Redirect($id,'admin_add_event',$returnid,$params);
}
if($event['event_recur_period'] != 'none' &&
$event['event_date_recur_end_ut'] != NULL &&
($event['event_date_recur_end_ut'] < $event['event_date_start_ut'] ||
($event['event_date_end_ut'] != NULL &&
$event['event_date_recur_end_ut'] < $event['event_date_end_ut'])) ) {
$params['module_error'] = $this->Lang('error_invalid_dates');
$params['event_recur_weekdays'] = implode(',',$event['event_recur_weekdays']);
$params['event_recur_monthdays'] = implode(',',$event['event_recur_monthdays']);
if( isset($params['event_categories']) && $params['event_categories'] ) $params['event_categories'] = serialize($params['event_categories']);
$params['do_get_from_params'] = 1;
$this->Redirect($id,'admin_add_event',$returnid,$params);
}
if($event['event_recur_period'] == 'monthly' &&
count($event['event_recur_monthdays']) > 1 &&
$event['event_recur_monthdays'][0] == 'specified') {
$params['module_error'] = $this->Lang('error_invalid_recur_monthly_freq');
$params['event_recur_weekdays'] = implode(',',$event['event_recur_weekdays']);
$params['event_recur_monthdays'] = implode(',',$event['event_recur_monthdays']);
if( isset($params['event_categories']) && $params['event_categories'] ) $params['event_categories'] = serialize($params['event_categories']);
$params['do_get_from_params'] = 1;
$this->Redirect($id,'admin_add_event',$returnid,$params);
}
if( empty($event['event_title']) ) {
$params['module_error'] = $this->Lang('error_noeventname');
$params['event_recur_weekdays'] = implode(',',$event['event_recur_weekdays']);
$params['event_recur_monthdays'] = implode(',',$event['event_recur_monthdays']);
if( isset($params['event_categories']) && $params['event_categories'] ) $params['event_categories'] = serialize($params['event_categories']);
$params['do_get_from_params'] = 1;
$this->Redirect($id,'admin_add_event',$returnid,$params);
}
if( ($categories == -1) && $this->GetPreference('force_category') == 1) {
$params['module_error'] = $this->Lang('error_nocategory');
$params['event_recur_weekdays'] = implode(',',$event['event_recur_weekdays']);
$params['event_recur_monthdays'] = implode(',',$event['event_recur_monthdays']);
if( isset($params['event_categories']) && $params['event_categories'] ) $params['event_categories'] = serialize($params['event_categories']);
$params['do_get_from_params'] = 1;
$this->Redirect($id,'admin_add_event',$returnid,$params);
}
if( $event['event_recur_period'] != 'none' ) {
// calculate recurring events
$recurring_events = calculate_recurring_events($event['event_date_start_ut'],
$event['event_date_end_ut'],
$event['event_recur_period'],
$event['event_date_recur_end_ut'],
$event['event_recur_interval'],
$event['event_recur_count'],
$event['event_recur_weekdays'],
$event['event_recur_monthdays']);
// check recurring events for overlap
$overlap = check_overlapping_events($event['event_date_start_ut'],
$event['event_date_end_ut'],
$recurring_events);
if( $overlap === true ) {
$params['module_error'] = $this->Lang('error_eventoverlap');
$params['event_recur_weekdays'] = implode(',',$params['event_recur_weekdays']);
$params['event_recur_monthdays'] = implode(',',$params['event_recur_monthdays']);
if( isset($params['event_categories']) && $params['event_categories'] ) $params['event_categories'] = serialize($params['event_categories']);
$params['do_get_from_params'] = 1;
$this->Redirect($id,'admin_add_event',$returnid,$params);
}
}
//
// check for conflicting events.
//
$policy = $this->GetPreference('overlap_policy','all');
if( $policy != 'all' ) {
$conflict = check_db_for_conflicts($this,$event,$event['event_id'],$policy,
$event['event_allows_overlap']);
if( $conflict ) {
// this is the parent event... we always display an error message if
// this parent event conflicts with another event.
$params['module_error'] = $this->Lang('error_event_conflict');
$params['event_recur_weekdays'] = implode(',',$params['event_recur_weekdays']);
$params['event_recur_monthdays'] = implode(',',$params['event_recur_monthdays']);
if( isset($params['event_categories']) && $params['event_categories'] ) $params['event_categories'] = serialize($params['event_categories']);
$params['do_get_from_params'] = 1;
$this->Redirect($id,'admin_add_event',$returnid,$params);
}
// now check any child events
if( $event['event_recur_period'] != 'none' && count($recurring_events) > 0 ) {
$new_recurring = array();
foreach( $recurring_events as $oneevent ) {
$conflict = check_db_for_conflicts($this,$oneevent,$event['event_id'],$policy,
$event['event_allows_overlap']);
if( $conflict ) {
if( $this->GetPreference('overlap_action','error') == 'error' ) {
$params['module_error'] = $this->Lang('error_event_conflict');
$params['event_recur_weekdays'] = implode(',',$params['event_recur_weekdays']);
$params['event_recur_monthdays'] = implode(',',$params['event_recur_monthdays']);
if( isset($params['event_categories']) && $params['event_categories'] ) $params['event_categories'] = serialize($params['event_categories']);
$params['do_get_from_params'] = 1;
$this->Redirect($id,'admin_add_event',$returnid,$params);
}
else {
// silently remove this event.
continue;
}
}
$new_recurring[] = $oneevent;
}
$recurring_events = $new_recurring;
}
}
//
// Fix up the event so it's suitable for the database
//
//
// Process any file uploads that may have occurred
//
if( isset( $_FILES ) ) {
$fldname = '';
$thefield = '';
foreach( $params as $k => $v ) {
// see if we're expecting an upload
if( preg_match('/^upload_field_/', $k) ) {
// we are it appears
$thefield = substr($k,strlen('upload_field_'));
$fldname = $id.'field_'.$thefield;
if( !isset($_FILES[$fldname]) || empty($_FILES[$fldname]['tmp_name']) ) continue;
$error = '';
$filename = $this->HandleUpload($fldname,$error);
if( $filename === false ) {
// an error occurred
$this->Redirect($id,'defaultadmin',$returnid,array("module_error"=>$error));
return;
}
$params['field_'.$thefield] = $filename;
}
}
}
//
// Process the insert or update
//
$do_insert = true;
if($event['event_id'] > -1) {
$do_insert = false;
// update
$sql = "UPDATE " . $this->events_table_name . "
SET event_title = ?, event_summary = ?, event_details = ?, event_date_start = ?, event_date_end = ?, event_parent_id = ?,
event_recur_period = ?, event_date_recur_end = ?, event_recur_nevents = ?,
event_recur_interval = ?,event_recur_weekdays = ?,event_recur_monthdays = ?,event_modified_date = NOW(),
event_allows_overlap = ?, event_all_day = ?
WHERE event_id = ?";
$dbr = $db->Execute($sql,
array($event['event_title'],
$event['event_summary'],
$event['event_details'],
trim($event['event_date_start'],"'"),
handle_null_date($event['event_date_end']),
$event['event_parent_id'],
$event['event_recur_period'],
handle_null_date($event['event_date_recur_end']),
$event['event_recur_count'],
$event['event_recur_interval'],
implode(',',$event['event_recur_weekdays']),
implode(',',$event['event_recur_monthdays']),
$event['event_allows_overlap'],
$event['event_all_day'],
$event['event_id']));
if( !$dbr ) {
echo "FATAL ERROR:<br/>";
echo "QUERY = ".$db->sql."<br/>";
echo "ERROR = ".$db->ErrorMsg()."<br/><br/>";
die();
}
if( isset($params['update_children']) ) {
//here we also delete any and all children, and all sub-tables that may have been filled with child data.
$result=$db->Execute("SELECT event_id FROM " . $this->events_table_name . " WHERE event_parent_id = ?",array($event['event_id']));
$db->Execute("DELETE FROM " . $this->events_table_name . " WHERE event_parent_id = ?",array($event['event_id']));
while ($row = $result->FetchRow()) {
//We clear these as they will be added later on
//delete from categories
$db->Execute("DELETE FROM " . $this->events_to_categories_table_name . " WHERE event_id = ? LIMIT 1",array($row['event_id']));
//delete from custom fields
$db->Execute("DELETE FROM " . $this->event_field_values_table_name . " WHERE event_id = ? LIMIT 1",array($row['event_id']));
}
}
}
//otherwise we are just adding a new event
else {
$event['event_id'] = $db->GenID($this->events_table_name . "_seq");
$sql = "INSERT INTO " . $this->events_table_name . "
(event_id, event_title, event_summary, event_details,
event_date_start, event_date_end, event_parent_id,
event_recur_period, event_date_recur_end, event_created_by,
event_recur_nevents, event_recur_interval, event_recur_weekdays,
event_recur_monthdays, event_allows_overlap,event_all_day,
event_create_date, event_modified_date)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),NOW())";
$dbr=$db->Execute($sql,
array($event['event_id'],
$event['event_title'],
$event['event_summary'],
$event['event_details'],
trim($event['event_date_start'],"'"),
handle_null_date($event['event_date_end']),
$event['event_parent_id'],
$event['event_recur_period'],
handle_null_date($event['event_date_recur_end']),
$user_id,
$event['event_recur_count'],
$event['event_recur_interval'],
implode(',',$event['event_recur_weekdays']),
implode(',',$event['event_recur_monthdays']),
$event['event_allows_overlap'],
$event['event_all_day']));
if( !$dbr ) {
echo "FATAL ERROR:<br/>";
echo "QUERY = ".$db->sql."<br/>";
echo "ERROR = ".$db->ErrorMsg()."<br/><br/>";
die();
}
}
// delete current events_to_categories records for this event
$sql = "DELETE FROM " . $this->events_to_categories_table_name . " WHERE event_id = ?";
$result=$db->Execute($sql,array($event['event_id']));
// update events_to_categories
if(is_array($categories) && (count($categories) > 0)) {
foreach($categories as $category_id) {
$category_id = intval($category_id);
if($category_id > 0) {
$sql = "INSERT INTO " . $this->events_to_categories_table_name . " (category_id, event_id) VALUES (?,?)";
$db->Execute($sql,array($category_id,$event['event_id']));
//echo $sql;
}
}
}
$fieldtext = '';
// Clear out all the custom field values for this event, and add the new ones from the form
{
$fields = $this->GetFields();
// Delete the custom field values first
{
$sql = "DELETE FROM " . $this->event_field_values_table_name . " WHERE event_id = ?";
$result=$db->Execute($sql,array($event['event_id']));
}
$customfieldsvalues = array();
foreach ($fields as $field) {
$fieldname = $field['field_name'];
// Replace spaces with underbars for the form parameter (a bit of an ikky hack I know, but I can well imagine folk defining custom fields with spaces in the name) Perhaps it would have been better if custom fields also had a numeric key - hohum live and learn!
$safefieldname = str_replace ( " ", "_", $fieldname );
$field_value = get_parameter_value($params, 'field_' . $safefieldname, '');
$sql = "INSERT INTO " . $this->event_field_values_table_name . " (field_name, event_id, field_value) VALUES (?,?,?)";
if ($field_value) $result=$db->Execute($sql,array($fieldname,$event['event_id'],$field_value));
$customfieldsvalues[] = array($fieldname,$event['event_id'],$field_value);
if( $field['field_searchable'] ) $fieldtext .= $field_value.' ';
}
}
//////////////////////////////////////////////////////////////
// Update Search
/////////////////////////////////////////////////////////////
$search = cms_utils::get_search_module();
if( $search != FALSE ) {
$text = "{$event['event_title']} {$event['event_summary']} {$event['event_details']}";
$text .= ' '.$fieldtext;
$search->AddWords($this->GetName(), $event['event_id'], 'event', $text, NULL);
}
//////////////////////////////////////////////////////////////
// Add recurring events
/////////////////////////////////////////////////////////////
if( ($event['event_recur_period'] != 'none') &&
(is_array($recurring_events) && count($recurring_events) > 0) &&
(isset($params['update_children']) || ($do_insert == true) ) ) {
$sql = "INSERT INTO " . $this->events_table_name . "
(event_id
,event_title
,event_summary
,event_details
,event_date_start
,event_date_end
,event_parent_id
,event_created_by
,event_allows_overlap
,event_create_date, event_modified_date)
VALUES (?,?,?,?,?,?,?,?,?,NOW(),NOW())";
foreach( $recurring_events as $oneevent ) {
$child_event_id = $db->GenID($this->events_table_name . "_seq");
$dbr = $db->Execute($sql,
array($child_event_id,
$event['event_title'],
$event['event_summary'],
$event['event_details'],
trim($db->DbTimeStamp($oneevent['start']),"'"),
handle_null_date_ts($oneevent['end']),
$event['event_id'],
$user_id,
$event['event_allows_overlap']));
if( !$dbr ) {
echo "FATAL ERROR:<br/>";
echo "QUERY = ".$db->sql."<br/>";
echo "ERROR = ".$db->ErrorMsg()."<br/><br/>";
die();
}
if(is_array($categories) && (count($categories) > 0)) {
foreach($categories as $category_id) {
$category_id = intval($category_id);
if($category_id > 0) {
$sql2 = "INSERT INTO " . $this->events_to_categories_table_name . " (category_id, event_id) VALUES (?,?)";
$db->Execute($sql2,array($category_id,$child_event_id));
}
}
}
}
}
$eventname = 'EventAdded';
$parms = array();
$parms['event_title'] = $event['event_title'];
$parms['event_summary'] = $event['event_summary'];
$parms['event_details'] = $event['event_details'];
$parms['event_date_start'] = $event['event_date_start'];
$parms['event_date_end'] = $event['event_date_end'];
$parms['event_created_by'] = $user_id;
$parms['event_id'] = $event['event_id'];
if( !$do_insert ) $eventname = 'EventEdited';
$this->SendEvent( $eventname, $parms );
$message=$this->Lang("eventupdated");
//
// done
//
$this->Redirect($id,'defaultadmin',$returnid,array("module_message"=>$message));
// EOF
?>
File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com