|
@@ -1,4 +1,4 @@
|
|
|
-<?php //$Id: agenda.inc.php 15362 2008-05-22 18:27:41Z yannoo $
|
|
|
+<?php //$Id: agenda.inc.php 15365 2008-05-22 22:05:51Z yannoo $
|
|
|
/*
|
|
|
==============================================================================
|
|
|
Dokeos - elearning and course management software
|
|
@@ -69,28 +69,32 @@ function get_calendar_items($month, $year)
|
|
|
$TABLEAGENDA=Database::get_course_table(TABLE_AGENDA);
|
|
|
$TABLE_ITEM_PROPERTY=Database::get_course_table(TABLE_ITEM_PROPERTY);
|
|
|
|
|
|
- $group_memberships=GroupManager::get_group_ids($_course['dbName'], $_user['user_id']);
|
|
|
+ $month_first_day = mktime(0,0,0,$month,1,$year);
|
|
|
+ $month_last_day = mktime(0,0,0,$month+1,1,$year)-1;
|
|
|
+ if($month==12)
|
|
|
+ {
|
|
|
+ $month_last_day = mktime(0,0,0,1,1,$year+1)-1;
|
|
|
+ }
|
|
|
|
|
|
+ $group_memberships=GroupManager::get_group_ids($_course['dbName'], $_user['user_id']);
|
|
|
+ $repeats = array();
|
|
|
if (is_allowed_to_edit() OR (api_get_course_setting('allow_user_edit_agenda') && !api_is_anonymous()))
|
|
|
{
|
|
|
- //echo "course admin";
|
|
|
- // added GROUP BY agenda.id to prevent double display of a message that has been sent to two groups
|
|
|
$sql="SELECT
|
|
|
DISTINCT agenda.*, toolitemproperties.*
|
|
|
FROM ".$TABLEAGENDA." agenda, ".$TABLE_ITEM_PROPERTY." toolitemproperties
|
|
|
WHERE agenda.id = toolitemproperties.ref ".
|
|
|
- //$show_all_current.
|
|
|
" AND MONTH(agenda.start_date)='".$month."' AND YEAR(agenda.start_date)='".$year."'
|
|
|
AND toolitemproperties.tool='".TOOL_CALENDAR_EVENT."'
|
|
|
AND toolitemproperties.visibility='1'
|
|
|
GROUP BY agenda.id ".
|
|
|
"ORDER BY start_date ";
|
|
|
- //.$sort;
|
|
|
+ $params = array('orderby'=>'start_date ASC','groupby'=>'id');
|
|
|
+ $repeats = get_repeated_events_month_view($_course,$month_first_day,$month_last_day,$params);
|
|
|
}
|
|
|
// if the user is not an administrator of that course
|
|
|
else
|
|
|
{
|
|
|
- //echo "GEEN course admin";
|
|
|
if (is_array($group_memberships) and count($group_memberships)>0)
|
|
|
{
|
|
|
$sql="SELECT
|
|
@@ -103,7 +107,11 @@ function get_calendar_items($month, $year)
|
|
|
AND ( toolitemproperties.to_user_id='".$_user['user_id']."' OR toolitemproperties.to_group_id IN (0, ".implode(", ", $group_memberships).") )
|
|
|
AND toolitemproperties.visibility='1'"
|
|
|
."ORDER BY start_date ";
|
|
|
- //.$sort;
|
|
|
+ $params = array(
|
|
|
+ 'orderby'=>'start_date ASC',
|
|
|
+ 'conditions'=>" AND (item_property.to_user_id='".$_user['user_id']."' OR item_property.to_group_id IN (0, ".implode(", ", $group_memberships)."))",
|
|
|
+ );
|
|
|
+ $repeats = get_repeated_events_month_view($_course,$month_first_day,$month_last_day,$params);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -111,13 +119,16 @@ function get_calendar_items($month, $year)
|
|
|
agenda.*, toolitemproperties.*
|
|
|
FROM ".$TABLEAGENDA." agenda, ".$TABLE_ITEM_PROPERTY." toolitemproperties
|
|
|
WHERE agenda.id = toolitemproperties.ref ".
|
|
|
- //$show_all_current.
|
|
|
" AND MONTH(agenda.start_date)='".$month."'
|
|
|
AND toolitemproperties.tool='".TOOL_CALENDAR_EVENT."'
|
|
|
AND ( toolitemproperties.to_user_id='".$_user['user_id']."' OR toolitemproperties.to_group_id='0')
|
|
|
AND toolitemproperties.visibility='1' ".
|
|
|
"ORDER BY start_date ";
|
|
|
- //.$sort;
|
|
|
+ $params = array(
|
|
|
+ 'orderby'=>'start_date ASC',
|
|
|
+ 'conditions'=>" AND (item_property.to_user_id='".$_user['user_id']."' OR item_property.to_group_id='0')",
|
|
|
+ );
|
|
|
+ $repeats = get_repeated_events_month_view($_course,$month_first_day,$month_last_day,$params);
|
|
|
}
|
|
|
}
|
|
|
$result=api_sql_query($sql,__FILE__,__LINE__);
|
|
@@ -125,9 +136,25 @@ function get_calendar_items($month, $year)
|
|
|
while ($row=Database::fetch_array($result))
|
|
|
{
|
|
|
$datum_item=(int)substr($row["start_date"],8,2);
|
|
|
- //$dag_item=date("d",strtotime($datum_item));
|
|
|
$data[$datum_item][intval($datum_item)][] = $row;
|
|
|
}
|
|
|
+ foreach($repeats as $item)
|
|
|
+ { $sql = "SELECT c.id, c.title, c.content, " .
|
|
|
+ " UNIX_TIMESTAMP(c.start_date) as orig_start, UNIX_TIMESTAMP(c.end_date) as orig_end, " .
|
|
|
+ " cr.cal_type, cr.cal_end " .
|
|
|
+ " FROM $t_cal c, $t_cal_repeat cr " .
|
|
|
+ " WHERE cr.cal_end >= $end " .
|
|
|
+ " AND cr.cal_id = c.id" .
|
|
|
+ " AND c.start_date <= $db_start";
|
|
|
+ $day = date('d',$item[2]);
|
|
|
+ $data[$day][$day][] = array(
|
|
|
+ 'id'=>$item[1],
|
|
|
+ 'start_date'=>date('Y-m-d H:i:s',$item[2]),
|
|
|
+ 'end_date'=>date('Y-m-d H:i:s',$item[3]),
|
|
|
+ 'title'=>$item[4],
|
|
|
+ 'content'=>$item[5],
|
|
|
+ );
|
|
|
+ }
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
@@ -628,6 +655,7 @@ function store_new_agenda_item()
|
|
|
{
|
|
|
global $_user, $_course;
|
|
|
$TABLEAGENDA = Database::get_course_table(TABLE_AGENDA);
|
|
|
+ $t_agenda_repeat = Database::get_course_Table(TABLE_AGENDA_REPEAT);
|
|
|
|
|
|
// some filtering of the input data
|
|
|
$title=strip_tags(trim($_POST['title'])); // no html allowed in the title
|
|
@@ -673,6 +701,28 @@ function store_new_agenda_item()
|
|
|
}
|
|
|
// storing the resources
|
|
|
store_resources($_SESSION['source_type'],$last_id);
|
|
|
+
|
|
|
+ //if repetitive, insert element into agenda_repeat table
|
|
|
+ if(!empty($_POST['repeat']) && !empty($_POST['repeat_type']))
|
|
|
+ {
|
|
|
+ if(!empty($_POST['repeat_end_year']) && !empty($_POST['repeat_end_month']) && !empty($_POST['repeat_end_day']))
|
|
|
+ {
|
|
|
+ $end_y = intval($_POST['repeat_end_year']);
|
|
|
+ $end_m = intval($_POST['repeat_end_month']);
|
|
|
+ $end_d = intval($_POST['repeat_end_day']);
|
|
|
+ $end = mktime((int)$_POST['fhour'],(int)$_POST['fminute'],0,$end_m,$end_d,$end_y);
|
|
|
+ $now = time();
|
|
|
+ $type = Database::escape_string($_POST['repeat_type']);
|
|
|
+
|
|
|
+ if($end > $now
|
|
|
+ && in_array($type,array('daily','weekly','monthlyByDate','monthlyByDay','monthlyByDayR','yearly')))
|
|
|
+ {
|
|
|
+ $sql = "INSERT INTO $t_agenda_repeat (cal_id, cal_type, cal_end)" .
|
|
|
+ " VALUES ($last_id,'$type',$end)";
|
|
|
+ $res = Database::query($sql,__FILE__,__LINE__);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return $last_id;
|
|
|
}
|
|
|
|
|
@@ -1108,7 +1158,17 @@ function display_student_links()
|
|
|
function get_agenda_item($id)
|
|
|
{
|
|
|
global $TABLEAGENDA;
|
|
|
- $id=(int)addslashes($_GET['id']);
|
|
|
+ $t_agenda_repeat = Database::get_course_table(TABLE_AGENDA_REPEAT);
|
|
|
+ $item = array();
|
|
|
+ if(empty($id))
|
|
|
+ {
|
|
|
+ $id=(int)addslashes($_GET['id']);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $id = (int) $id;
|
|
|
+ }
|
|
|
+ if(empty($id)){return $item;}
|
|
|
$sql = "SELECT * FROM ".$TABLEAGENDA." WHERE id='".$id."'";
|
|
|
$result = api_sql_query($sql,__FILE__,__LINE__);
|
|
|
$entry_to_edit = Database::fetch_array($result);
|
|
@@ -1126,7 +1186,20 @@ function get_agenda_item($id)
|
|
|
{
|
|
|
$_SESSION['allow_individual_calendar']="show";
|
|
|
}
|
|
|
- //echo "<br />IN get_agenda_item".$_SESSION['allow_individual_calendar'];
|
|
|
+ $item['repeat'] = false;
|
|
|
+ $sql = "SELECT * FROM $t_agenda_repeat WHERE cal_id = $id";
|
|
|
+ $res = Database::query($sql,__FILE__,__LINE__);
|
|
|
+ if(Database::num_rows($res)>0)
|
|
|
+ {
|
|
|
+ //this event is repetitive
|
|
|
+ $row = Database::fetch_array($res);
|
|
|
+ $item['repeat'] = true;
|
|
|
+ $item['repeat_type'] = $row['cal_type'];
|
|
|
+ $item['repeat_end'] = $row['cal_end'];
|
|
|
+ $item['repeat_frequency'] = $row['cal_frequency']; //unused in 1.8.5 RC1 - will be used later to say if once every 2 or 3 weeks, for example
|
|
|
+ $item['repeat_days'] = $row['cal_days']; //unused in 1.8.5 RC1 - will be used later
|
|
|
+ }
|
|
|
+ //TODO - add management of repeat exceptions
|
|
|
return $item;
|
|
|
}
|
|
|
/**
|
|
@@ -1470,7 +1543,12 @@ function display_agenda_items()
|
|
|
$export_icon_low = api_get_path('WEB_IMG_PATH').'export_low_fade.png';
|
|
|
$export_icon_high = api_get_path('WEB_IMG_PATH').'export_high_fade.png';
|
|
|
while ($myrow=Database::fetch_array($result))
|
|
|
-{
|
|
|
+ {
|
|
|
+ $repeat = false;
|
|
|
+ if(is_repeated_event($myrow['id']))
|
|
|
+ {
|
|
|
+ $repeat = true;
|
|
|
+ }
|
|
|
echo "<table class=\"data_table\">\n";
|
|
|
/*--------------------------------------------------
|
|
|
display: the month bar
|
|
@@ -1589,7 +1667,7 @@ function display_agenda_items()
|
|
|
$image_visibility="invisible";
|
|
|
}
|
|
|
echo '<a href="'.api_get_self().'?'.api_get_cidreq().'&origin='.$_GET['origin'].'&action=showhide&id='.$myrow['id'].'" title="'.get_lang("langVisible").'">',
|
|
|
- "<img src=\"../img/".$image_visibility.".gif\" border=\"0\" alt=\"".get_lang("Visible")."\" /></a>";
|
|
|
+ '<img src="../img/'.$image_visibility.'.gif" border="0" alt="'.get_lang("Visible").'" /></a>';
|
|
|
echo '</td>';
|
|
|
}
|
|
|
echo '</tr>';
|
|
@@ -1646,7 +1724,9 @@ echo '<tr class="row_even">';
|
|
|
/*--------------------------------------------------
|
|
|
display: jump-to-top icon
|
|
|
--------------------------------------------------*/
|
|
|
- echo $td_colspan;
|
|
|
+ echo '<tr>';
|
|
|
+ echo $td_colspan;
|
|
|
+ if($repeat){echo get_lang('RepeatedEvent');}
|
|
|
echo "<a href=\"#top\"><img src=\"../img/top.gif\" border=\"0\" alt=\"to top\" align=\"right\" /></a></td></tr>";
|
|
|
echo "</table><br /><br />";
|
|
|
} // end while ($myrow=Database::fetch_array($result))
|
|
@@ -1872,6 +1952,7 @@ function show_add_form($id = '')
|
|
|
$end_year = date('Y');
|
|
|
$end_hours = 17;
|
|
|
$end_minutes= '00';
|
|
|
+ $repeat = false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -1895,6 +1976,7 @@ function show_add_form($id = '')
|
|
|
$content=$form_elements['content'];
|
|
|
$id=$form_elements['id'];
|
|
|
$to=$form_elements['to'];
|
|
|
+ $repeat = $form_elements['repeat'];
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1916,6 +1998,7 @@ function show_add_form($id = '')
|
|
|
// the invisible fields
|
|
|
$action = $_POST['action'];
|
|
|
$id = $_POST['id'];
|
|
|
+ $repeat = !empty($_POST['repeat'])?true:false;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2236,7 +2319,7 @@ function show_add_form($id = '')
|
|
|
</tr>
|
|
|
|
|
|
<tr>
|
|
|
- <td colspan="7">
|
|
|
+ <td colspan="3">
|
|
|
|
|
|
<?php
|
|
|
require_once(api_get_path(LIBRARY_PATH) . "/fckeditor/fckeditor.php");
|
|
@@ -2278,15 +2361,80 @@ function show_add_form($id = '')
|
|
|
<?php
|
|
|
//if ($_SESSION['addedresource'])
|
|
|
echo "\t<tr>\n";
|
|
|
- echo "\t\t<td colspan=\"7\">\n";
|
|
|
+ echo "\t\t<td colspan=\"3\">\n";
|
|
|
echo display_resources(0);
|
|
|
$test=$_SESSION['addedresource'];
|
|
|
echo "\t\t</td>\n\t</tr>\n";
|
|
|
/* END ADDED BY UGENT, Patrick Cool, march 2004 */
|
|
|
?>
|
|
|
-
|
|
|
+ <tr>
|
|
|
+ <td><label for="repeat"><?php echo get_lang('RepeatedEvent');?></label><input type="checkbox" name="repeat" <?php echo ($repeat?'checked="checked"':'');?>/></td>
|
|
|
+ <td colspan="2" />
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td><label for="repeat_type"><?php echo get_lang('RepeatType');?></label>
|
|
|
+ <select name="repeat_type">
|
|
|
+ <option value="daily"><?php echo get_lang('RepeatDaily');?></option>
|
|
|
+ <option value="weekly"><?php echo get_lang('RepeatWeekly');?></option>
|
|
|
+ <option value="monthlyByDate"><?php echo get_lang('RepeatMonthlyByDate');?></option>
|
|
|
+ <!--option value="monthlyByDay"><?php echo get_lang('RepeatMonthlyByDay');?></option>
|
|
|
+ <option value="monthlyByDayR"><?php echo get_lang('RepeatMonthlyByDayR');?></option-->
|
|
|
+ <option value="yearly"><?php echo get_lang('RepeatYearly');?></option>
|
|
|
+ </select>
|
|
|
+ </td>
|
|
|
+ <td colspan="2" />
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td><label for="repeat_end_day"><?php echo get_lang('RepeatEnd');?></label>
|
|
|
+ <select name="repeat_end_day">
|
|
|
+ <?php
|
|
|
+ // small loop for filling all the dates
|
|
|
+ // 2do: the available dates should be those of the selected month => february is from 1 to 28 (or 29) and not to 31
|
|
|
+ echo "\n";
|
|
|
+ foreach (range(1, 31) as $i)
|
|
|
+ {
|
|
|
+ // values have to have double digits
|
|
|
+ $value = ($i <= 9 ? '0'.$i : $i );
|
|
|
+ // the current day is indicated with [] around the date
|
|
|
+ if ($value==$end_day)
|
|
|
+ { echo "\t\t\t\t <option value=\"".$value."\" selected> ".$i." </option>\n";}
|
|
|
+ else
|
|
|
+ { echo "\t\t\t\t <option value=\"".$value."\">".$i."</option>\n"; }
|
|
|
+ }?>
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- month: january -> december -->
|
|
|
+ <select name="repeat_end_month">
|
|
|
+ <?php
|
|
|
+ echo "\n";
|
|
|
+ foreach (range(1, 12) as $i)
|
|
|
+ {
|
|
|
+ // values have to have double digits
|
|
|
+ $value = ($i <= 9 ? '0'.$i : $i );
|
|
|
+ if ($value==$end_month+1)
|
|
|
+ { echo "\t\t\t\t ",'<option value="',$value,'" selected="selected">',$MonthsLong[$i-1],"</option>\n"; }
|
|
|
+ else
|
|
|
+ { echo "\t\t\t\t ",'<option value="',$value,'">',$MonthsLong[$i-1],"</option>\n"; }
|
|
|
+ }?>
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <select name="repeat_end_year">
|
|
|
+ <option value="<?php echo ($end_year-1) ?>"><?php echo ($end_year-1) ?></option>
|
|
|
+ <option value="<?php echo $end_year ?>" selected> <?php echo $end_year ?> </option>
|
|
|
+ <?php
|
|
|
+ echo "\n";
|
|
|
+ for ($i=1; $i<=5; $i++)
|
|
|
+ {
|
|
|
+ $value=$end_year+$i;
|
|
|
+ echo "\t\t\t\t<option value=\"$value\">$value</option>\n";
|
|
|
+ } ?>
|
|
|
+ </select>
|
|
|
+ <a href="javascript:openCalendar('new_calendar_item', 'repeat_end_')"><img src="../img/calendar_select.gif" border="0" /></a>
|
|
|
+ </td>
|
|
|
+ <td colspan="2" />
|
|
|
+ </tr>
|
|
|
<tr>
|
|
|
- <td colspan="7">
|
|
|
+ <td colspan="3">
|
|
|
<input type="submit" name="submit_event" value="<?php echo get_lang('Ok'); ?>" onclick="selectAll(this.form.elements[5],true)" />
|
|
|
</td>
|
|
|
</tr>
|
|
@@ -2875,12 +3023,13 @@ function get_week_agendaitems($courses_dbs, $month, $year, $week = '')
|
|
|
/**
|
|
|
* Get repeated events of a course between two dates (timespan of a day).
|
|
|
* Returns an array containing the events
|
|
|
- * @param string Course database name
|
|
|
+ * @param string Course info array (as returned by api_get_course_info())
|
|
|
* @param int UNIX timestamp of span start. Defaults 0, later transformed into today's start
|
|
|
* @param int UNIX timestamp. Defaults to 0, later transformed into today's end
|
|
|
+ * @param array A set of parameters to alter the SQL query
|
|
|
* @return array [int] => [parent_event_id,start_date,end_date,title,description]
|
|
|
*/
|
|
|
-function get_repeated_events_day_view($course_db,$course_db,$start=0,$end=0)
|
|
|
+function get_repeated_events_day_view($course_info,$start=0,$end=0,$params)
|
|
|
{
|
|
|
$events = array();
|
|
|
//initialise all values
|
|
@@ -2904,15 +3053,21 @@ function get_repeated_events_day_view($course_db,$course_db,$start=0,$end=0)
|
|
|
}
|
|
|
//$db_end = date('Y-m-d H:i:s',$end);
|
|
|
|
|
|
- $t_cal = Database::get_course_table(TABLE_AGENDA,$course_db);
|
|
|
- $t_cal_repeat = Database::get_course_table(TABLE_AGENDA_REPEAT,$course_db);
|
|
|
+ $t_cal = Database::get_course_table(TABLE_AGENDA,$course_info['dbName']);
|
|
|
+ $t_cal_repeat = Database::get_course_table(TABLE_AGENDA_REPEAT,$course_info['dbName']);
|
|
|
+ $t_ip = Database::get_course_table(TABLE_ITEM_PROPERTY,$course_info['dbName']);
|
|
|
$sql = "SELECT c.id, c.title, c.content, " .
|
|
|
" UNIX_TIMESTAMP(c.start_date) as orig_start, UNIX_TIMESTAMP(c.end_date) as orig_end, " .
|
|
|
" cr.cal_type, cr.cal_end " .
|
|
|
- " FROM $t_cal c, $t_cal_repeat cr " .
|
|
|
+ " FROM $t_cal c, $t_cal_repeat cr, $t_ip as item_property " .
|
|
|
" WHERE cr.cal_end >= $end " .
|
|
|
- " AND cr.cal_id = c.id" .
|
|
|
- " AND c.start_date <= $db_start";
|
|
|
+ " AND cr.cal_id = c.id " .
|
|
|
+ " AND item_property.ref = c.id ".
|
|
|
+ " AND item_property.tool = '".TOOL_CALENDAR_EVENT."' ".
|
|
|
+ " AND c.start_date <= '$db_start' "
|
|
|
+ .(!empty($params['conditions'])?$params['conditions']:'')
|
|
|
+ .(!empty($params['groupby'])?' GROUP BY '.$params['groupby']:'')
|
|
|
+ .(!empty($params['orderby'])?' ORDER BY '.$params['orderby']:'');
|
|
|
$res = api_sql_query($sql,__FILE__,__LINE__);
|
|
|
if(Database::num_rows($res)>0)
|
|
|
{
|
|
@@ -2934,7 +3089,7 @@ function get_repeated_events_day_view($course_db,$course_db,$start=0,$end=0)
|
|
|
$span = $orig_end - $orig_start; //total seconds between start and stop of original event
|
|
|
$current_start =$start + $int_time; //unixtimestamp start of today's event
|
|
|
$current_stop = $start+$int_time+$span; //unixtimestamp stop of today's event
|
|
|
- $events[] = array($row['id'],$current_start,$current_stop,$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],$current_start,$current_stop,$row['title'],$row['content']);
|
|
|
break;
|
|
|
case 'weekly':
|
|
|
$time_orig = date('Y/n/W/j/N/G/i/s',$orig_start);
|
|
@@ -2945,7 +3100,7 @@ function get_repeated_events_day_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{ //if the event is after the original (at least one week) and the day of the week is the same
|
|
|
$time_orig_end = date('Y/n/W/j/N/G/i/s',$orig_end);
|
|
|
list($y_orig_e,$m_orig_e,$w_orig_e,$d_orig_e,$dw_orig_e,$h_orig_e,$n_orig_e,$s_orig_e) = split('/',$time_orig_end);
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
case 'monthlyByDate':
|
|
@@ -2957,7 +3112,7 @@ function get_repeated_events_day_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{
|
|
|
$time_orig_end = date('Y/n/j/G/i/s',$orig_end);
|
|
|
list($y_orig_e,$m_orig_e,$d_orig_e,$h_orig_e,$n_orig_e,$s_orig_e) = split('/',$time_orig_end);
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
case 'monthlyByDayR':
|
|
@@ -2975,7 +3130,7 @@ function get_repeated_events_day_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{
|
|
|
$time_orig_end = date('Y/n/j/G/i/s',$orig_end);
|
|
|
list($y_orig_e,$m_orig_e,$d_orig_e,$dy_orig_e,$h_orig_e,$n_orig_e,$s_orig_e) = split('/',$time_orig_end);
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
@@ -2988,12 +3143,13 @@ function get_repeated_events_day_view($course_db,$course_db,$start=0,$end=0)
|
|
|
/**
|
|
|
* Get repeated events of a course between two dates (timespan of a week).
|
|
|
* Returns an array containing the events
|
|
|
- * @param string Course database name
|
|
|
+ * @param string Course info array (as returned by api_get_course_info())
|
|
|
* @param int UNIX timestamp of span start. Defaults 0, later transformed into today's start
|
|
|
* @param int UNIX timestamp. Defaults to 0, later transformed into today's end
|
|
|
+ * @param array A set of parameters to alter the SQL query
|
|
|
* @return array [int] => [parent_event_id,start_date,end_date,title,description]
|
|
|
*/
|
|
|
-function get_repeated_events_week_view($course_db,$course_db,$start=0,$end=0)
|
|
|
+function get_repeated_events_week_view($course_info,$start=0,$end=0,$params)
|
|
|
{
|
|
|
$events = array();
|
|
|
//initialise all values
|
|
@@ -3021,15 +3177,21 @@ function get_repeated_events_week_view($course_db,$course_db,$start=0,$end=0)
|
|
|
}
|
|
|
//$db_end = date('Y-m-d H:i:s',$end);
|
|
|
|
|
|
- $t_cal = Database::get_course_table(TABLE_AGENDA,$course_db);
|
|
|
- $t_cal_repeat = Database::get_course_table(TABLE_AGENDA_REPEAT,$course_db);
|
|
|
- $sql = "SELECT c.id, c.title, c.content, " .
|
|
|
- " UNIX_TIMESTAMP(c.start_date) as orig_start, UNIX_TIMESTAMP(c.end_date) as orig_end, " .
|
|
|
- " cr.cal_type, cr.cal_end " .
|
|
|
- " FROM $t_cal c, $t_cal_repeat cr " .
|
|
|
- " WHERE cr.cal_end >= $end " .
|
|
|
- " AND cr.cal_id = c.id" .
|
|
|
- " AND c.start_date <= $db_start";
|
|
|
+ $t_cal = Database::get_course_table(TABLE_AGENDA,$course_info['dbName']);
|
|
|
+ $t_cal_repeat = Database::get_course_table(TABLE_AGENDA_REPEAT,$course_info['dbName']);
|
|
|
+ $t_ip = Database::get_course_table(TABLE_ITEM_PROPERTY,$course_info['dbName']);
|
|
|
+ $sql = "SELECT c.id, c.title, c.content, " .
|
|
|
+ " UNIX_TIMESTAMP(c.start_date) as orig_start, UNIX_TIMESTAMP(c.end_date) as orig_end, " .
|
|
|
+ " cr.cal_type, cr.cal_end " .
|
|
|
+ " FROM $t_cal c, $t_cal_repeat cr, $t_ip as item_property " .
|
|
|
+ " WHERE cr.cal_end >= $end " .
|
|
|
+ " AND cr.cal_id = c.id " .
|
|
|
+ " AND item_property.ref = c.id ".
|
|
|
+ " AND item_property.tool = '".TOOL_CALENDAR_EVENT."' ".
|
|
|
+ " AND c.start_date <= '$db_start' "
|
|
|
+ .(!empty($params['conditions'])?$params['conditions']:'')
|
|
|
+ .(!empty($params['groupby'])?' GROUP BY '.$params['groupby']:'')
|
|
|
+ .(!empty($params['orderby'])?' ORDER BY '.$params['orderby']:'');
|
|
|
$res = api_sql_query($sql,__FILE__,__LINE__);
|
|
|
if(Database::num_rows($res)>0)
|
|
|
{
|
|
@@ -3050,7 +3212,7 @@ function get_repeated_events_week_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{
|
|
|
$current_start = $start + ($i*86400) + $int_time; //unixtimestamp start of today's event
|
|
|
$current_stop = $start + ($i*86400) + $int_time + $span; //unixtimestamp stop of today's event
|
|
|
- $events[] = array($row['id'],$current_start,$current_stop,$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],$current_start,$current_stop,$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
case 'weekly':
|
|
@@ -3062,7 +3224,7 @@ function get_repeated_events_week_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{ //if the event is after the original (at least one week) and the day of the week is the same
|
|
|
$time_orig_end = date('Y/n/W/j/N/G/i/s',$orig_end);
|
|
|
list($y_orig_e,$m_orig_e,$w_orig_e,$d_orig_e,$dw_orig_e,$h_orig_e,$n_orig_e,$s_orig_e) = split('/',$time_orig_end);
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
case 'monthlyByDate':
|
|
@@ -3075,7 +3237,7 @@ function get_repeated_events_week_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{ //if the event is after the original (at least one month) and the original event's day is between the first day of the week and the last day of the week
|
|
|
$time_orig_end = date('Y/n/j/G/i/s',$orig_end);
|
|
|
list($y_orig_e,$m_orig_e,$d_orig_e,$h_orig_e,$n_orig_e,$s_orig_e) = split('/',$time_orig_end);
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
case 'monthlyByDayR':
|
|
@@ -3094,7 +3256,7 @@ function get_repeated_events_week_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{
|
|
|
$time_orig_end = date('Y/n/j/G/i/s',$orig_end);
|
|
|
list($y_orig_e,$m_orig_e,$d_orig_e,$dy_orig_e,$h_orig_e,$n_orig_e,$s_orig_e) = split('/',$time_orig_end);
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
@@ -3107,12 +3269,13 @@ function get_repeated_events_week_view($course_db,$course_db,$start=0,$end=0)
|
|
|
/**
|
|
|
* Get repeated events of a course between two dates (timespan of a month).
|
|
|
* Returns an array containing the events
|
|
|
- * @param string Course database name
|
|
|
+ * @param string Course info array (as returned by api_get_course_info())
|
|
|
* @param int UNIX timestamp of span start. Defaults 0, later transformed into today's start
|
|
|
* @param int UNIX timestamp. Defaults to 0, later transformed into today's end
|
|
|
+ * @param array A set of parameters to alter the SQL query
|
|
|
* @return array [int] => [parent_event_id,start_date,end_date,title,description]
|
|
|
*/
|
|
|
-function get_repeated_events_month_view($course_db,$course_db,$start=0,$end=0)
|
|
|
+function get_repeated_events_month_view($course_info,$start=0,$end=0,$params)
|
|
|
{
|
|
|
$events = array();
|
|
|
//initialise all values
|
|
@@ -3143,15 +3306,21 @@ function get_repeated_events_month_view($course_db,$course_db,$start=0,$end=0)
|
|
|
}
|
|
|
//$db_end = date('Y-m-d H:i:s',$end);
|
|
|
|
|
|
- $t_cal = Database::get_course_table(TABLE_AGENDA,$course_db);
|
|
|
- $t_cal_repeat = Database::get_course_table(TABLE_AGENDA_REPEAT,$course_db);
|
|
|
- $sql = "SELECT c.id, c.title, c.content, " .
|
|
|
- " UNIX_TIMESTAMP(c.start_date) as orig_start, UNIX_TIMESTAMP(c.end_date) as orig_end, " .
|
|
|
- " cr.cal_type, cr.cal_end " .
|
|
|
- " FROM $t_cal c, $t_cal_repeat cr " .
|
|
|
- " WHERE cr.cal_end >= $end " .
|
|
|
- " AND cr.cal_id = c.id" .
|
|
|
- " AND c.start_date <= $db_start";
|
|
|
+ $t_cal = Database::get_course_table(TABLE_AGENDA,$course_info['dbName']);
|
|
|
+ $t_cal_repeat = Database::get_course_table(TABLE_AGENDA_REPEAT,$course_info['dbName']);
|
|
|
+ $t_ip = Database::get_course_table(TABLE_ITEM_PROPERTY,$course_info['dbName']);
|
|
|
+ $sql = "SELECT c.id, c.title, c.content, " .
|
|
|
+ " UNIX_TIMESTAMP(c.start_date) as orig_start, UNIX_TIMESTAMP(c.end_date) as orig_end, " .
|
|
|
+ " cr.cal_type, cr.cal_end " .
|
|
|
+ " FROM $t_cal c, $t_cal_repeat cr, $t_ip as item_property " .
|
|
|
+ " WHERE cr.cal_end >= $end " .
|
|
|
+ " AND cr.cal_id = c.id " .
|
|
|
+ " AND item_property.ref = c.id ".
|
|
|
+ " AND item_property.tool = '".TOOL_CALENDAR_EVENT."' ".
|
|
|
+ " AND c.start_date <= '$db_start' "
|
|
|
+ .(!empty($params['conditions'])?$params['conditions']:'')
|
|
|
+ .(!empty($params['groupby'])?' GROUP BY '.$params['groupby']:'')
|
|
|
+ .(!empty($params['orderby'])?' ORDER BY '.$params['orderby']:'');
|
|
|
$res = api_sql_query($sql,__FILE__,__LINE__);
|
|
|
if(Database::num_rows($res)>0)
|
|
|
{
|
|
@@ -3173,7 +3342,7 @@ function get_repeated_events_month_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{
|
|
|
$current_start = $start + ($i*86400) + $int_time; //unixtimestamp start of today's event
|
|
|
$current_stop = $start + ($i*86400) + $int_time + $span; //unixtimestamp stop of today's event
|
|
|
- $events[] = array($row['id'],$current_start,$current_stop,$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],$current_start,$current_stop,$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
case 'weekly':
|
|
@@ -3227,7 +3396,7 @@ function get_repeated_events_month_view($course_db,$course_db,$start=0,$end=0)
|
|
|
if($start<$i && $i<$end)
|
|
|
{
|
|
|
list($y_repeat,$m_repeat,$d_repeat,$h_repeat,$n_repeat,$s_repeat) = split('/',date('Y/m/j/H/i/s',$i));
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -3243,7 +3412,7 @@ function get_repeated_events_month_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{ //if the event is after the original (at least one month) and the original event's day is between the first day of the week and the last day of the week
|
|
|
$time_orig_end = date('Y/n/j/G/i/s',$orig_end);
|
|
|
list($y_orig_e,$m_orig_e,$d_orig_e,$h_orig_e,$n_orig_e,$s_orig_e) = split('/',$time_orig_end);
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
case 'monthlyByDayR':
|
|
@@ -3262,7 +3431,7 @@ function get_repeated_events_month_view($course_db,$course_db,$start=0,$end=0)
|
|
|
{
|
|
|
$time_orig_end = date('Y/n/j/G/i/s',$orig_end);
|
|
|
list($y_orig_e,$m_orig_e,$d_orig_e,$dy_orig_e,$h_orig_e,$n_orig_e,$s_orig_e) = split('/',$time_orig_end);
|
|
|
- $events[] = array($row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
+ $events[] = array($course_info['id'],$row['id'],mktime($h_orig,$n_orig,$s_orig,$m_now,$d_orig,$y_now),mktime($h_orig_e,$n_orig_e,$s_orig_e,$m_now,$d_orig_e,$y_now),$row['title'],$row['content']);
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
@@ -3272,4 +3441,27 @@ function get_repeated_events_month_view($course_db,$course_db,$start=0,$end=0)
|
|
|
}
|
|
|
return $events;
|
|
|
}
|
|
|
+/**
|
|
|
+ * Tells if an agenda item is repeated
|
|
|
+ * @param string Course database
|
|
|
+ * @param int The agenda item
|
|
|
+ * @return boolean True if repeated, false otherwise
|
|
|
+ */
|
|
|
+function is_repeated_event($id,$course=null)
|
|
|
+{
|
|
|
+ if(empty($course))
|
|
|
+ {
|
|
|
+ $course_info = api_get_course_info();
|
|
|
+ $course = $course_info['dbName'];
|
|
|
+ }
|
|
|
+ $id = (int) $id;
|
|
|
+ $t_agenda_repeat = Database::get_course_table(TABLE_AGENDA_REPEAT,$course);
|
|
|
+ $sql = "SELECT * FROM $t_agenda_repeat WHERE cal_id = $id";
|
|
|
+ $res = Database::query($sql,__FILE__,__LINE__);
|
|
|
+ if(Database::num_rows($res)>0)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
?>
|