parent
e329442edb
commit
1074583f0c
@ -0,0 +1,169 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
/** |
||||
* View (MVC patter) for thematic control |
||||
* @author Christian Fasanando <christian1827@gmail.com> |
||||
* @package chamilo.attendance |
||||
*/ |
||||
|
||||
// protect a course script |
||||
api_protect_course_script(true); |
||||
|
||||
|
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
$param_gradebook = ''; |
||||
if (isset($_SESSION['gradebook'])) { |
||||
$param_gradebook = '&gradebook='.Security::remove_XSS($_SESSION['gradebook']); |
||||
} |
||||
echo '<div class="actions" style="margin-bottom:30px">'; |
||||
echo '<a href="index.php?'.api_get_cidreq().$param_gradebook.'&action=thematic_details">'.Display::return_icon('view_table.gif',get_lang('ThematicDetails')).' '.get_lang('ThematicDetails').'</a>'; |
||||
echo '<a href="index.php?'.api_get_cidreq().$param_gradebook.'&action=thematic_list">'.Display::return_icon('view_list.gif',get_lang('ThematicList')).' '.get_lang('ThematicList').'</a>'; |
||||
if ($action == 'thematic_list') { |
||||
echo '<a href="index.php?'.api_get_cidreq().$param_gradebook.'&action=thematic_add">'.Display::return_icon('introduction_add.gif',get_lang('NewThematicSection')).' '.get_lang('NewThematicSection').'</a>'; |
||||
} |
||||
echo '</div>'; |
||||
} |
||||
|
||||
$token = md5(uniqid(rand(),TRUE)); |
||||
$_SESSION['thematic_token'] = $token; |
||||
|
||||
|
||||
if ($action == 'thematic_list') { |
||||
|
||||
/* |
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
$param_gradebook = ''; |
||||
if (isset($_SESSION['gradebook'])) { |
||||
$param_gradebook = '&gradebook='.Security::remove_XSS($_SESSION['gradebook']); |
||||
} |
||||
echo '<div class="actions" style="margin-bottom:30px">'; |
||||
echo '<a href="index.php?'.api_get_cidreq().$param_gradebook.'&action=thematic_add">'.Display::return_icon('introduction_add.gif',get_lang('NewThematicSection')).' '.get_lang('NewThematicSection').'</a>'; |
||||
echo '</div>'; |
||||
} |
||||
*/ |
||||
|
||||
echo '<div><strong>'.get_lang('ThematicList').'</strong></div>'; |
||||
|
||||
$table = new SortableTable('thematic_list', array('Thematic', 'get_number_of_thematics'), array('Thematic', 'get_thematic_data')); |
||||
$table->set_additional_parameters($parameters); |
||||
$table->set_header(0, '', false, array('style'=>'width:20px;')); |
||||
$table->set_header(1, get_lang('Title'), false ); |
||||
|
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
$table->set_header(2, get_lang('Actions'), false,array('style'=>'text-align:center;width:40%;')); |
||||
$table->set_form_actions(array ('thematic_delete_select' => get_lang('DeleteAllThematics'))); |
||||
} |
||||
|
||||
$table->display(); |
||||
|
||||
} else if ($action == 'thematic_details') { |
||||
|
||||
if (!empty($thematic_id)) { |
||||
echo '<div><strong>'.$thematic_data[$thematic_id]['title'].': '.get_lang('Details').'</strong></div><br />'; |
||||
echo '<div>'.get_lang('Progress').': '.$total_average_of_advances.'%</div><br />'; |
||||
} else { |
||||
echo '<div><strong>'.get_lang('ThematicDetails').'</strong></div><br />'; |
||||
echo '<div>'.get_lang('Progress').': <span id="div_result">'.$total_average_of_advances.'</span>%</div><br />'; |
||||
} |
||||
|
||||
echo '<table width="100%" class="data_table">'; |
||||
echo '<tr><th width="35%">'.get_lang('Thematic').'</th><th width="30%">'.get_lang('ThematicPlan').'</th><th width="25%">'.get_lang('ThematicAdvance').'</th></tr>'; |
||||
|
||||
foreach ($thematic_data as $thematic) { |
||||
echo '<tr>'; |
||||
|
||||
// display thematic data |
||||
echo '<td><div><strong>'.$thematic['title'].'</strong></div><div>'.$thematic['content'].'</div></td>'; |
||||
|
||||
// display thematic plan data |
||||
echo '<td>'; |
||||
//echo '<div style="text-align:right"><a href="index.php?'.api_get_cidreq().'&origin=thematic_details&action=thematic_plan_list&thematic_id='.$thematic['id'].$param_gradebook.'">'.Display::return_icon('info.gif',get_lang('ThematicPlan'),array('style'=>'vertical-align:middle')).' '.get_lang('EditThematicPlan').'</a></div><br />'; |
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
echo '<div style="text-align:right"><a href="index.php?'.api_get_cidreq().'&origin=thematic_details&action=thematic_plan_list&thematic_id='.$thematic['id'].$param_gradebook.'">'.Display::return_icon('edit.gif',get_lang('EditThematicPlan'),array('style'=>'vertical-align:middle')).'</a></div><br />'; |
||||
} |
||||
if (!empty($thematic_plan_data[$thematic['id']])) { |
||||
foreach ($thematic_plan_data[$thematic['id']] as $thematic_plan) { |
||||
echo '<div><strong>'.$thematic_plan['title'].'</strong></div><div>'.$thematic_plan['description'].'</div>'; |
||||
} |
||||
} else { |
||||
echo '<div><em>'.get_lang('StillDoNotHaveAThematicPlan').'</em></div>'; |
||||
} |
||||
echo '</td>'; |
||||
|
||||
// display thematic advance data |
||||
echo '<td>'; |
||||
//echo '<div style="text-align:right"><a href="index.php?'.api_get_cidreq().'&origin=thematic_details&action=thematic_advance_list&thematic_id='.$thematic['id'].$param_gradebook.'">'.Display::return_icon('porcent.png',get_lang('ThematicAdvance'),array('style'=>'vertical-align:middle')).' '.get_lang('EditThematicAdvance').'</a></div><br />'; |
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
echo '<div style="text-align:right"><a href="index.php?'.api_get_cidreq().'&origin=thematic_details&action=thematic_advance_list&thematic_id='.$thematic['id'].$param_gradebook.'">'.Display::return_icon('edit.gif',get_lang('EditThematicAdvance'),array('style'=>'vertical-align:middle')).'</a></div><br />'; |
||||
} |
||||
if (!empty($thematic_advance_data[$thematic['id']])) { |
||||
echo '<table width="100%">'; |
||||
foreach ($thematic_advance_data[$thematic['id']] as $thematic_advance) { |
||||
echo '<tr>'; |
||||
echo '<td width="90%">'; |
||||
echo '<div><strong>'.api_get_local_time($thematic_advance['start_date']).'</strong></div>'; |
||||
echo '<div>'.$thematic_advance['content'].'</div>'; |
||||
echo '<div>'.get_lang('Hours').' : '.$thematic_advance['duration'].'</div>'; |
||||
echo '</td>'; |
||||
if (empty($thematic_id) && api_is_allowed_to_edit(null, true)) { |
||||
$checked = ''; |
||||
if ($last_done_thematic_advance == $thematic_advance['id']) { |
||||
$checked = 'checked'; |
||||
} |
||||
echo '<td><center><input type="radio" name="thematic_done" value="'.$thematic_advance['id'].'" '.$checked.' onclick="update_done_thematic_advance(this.value)"></center></td>'; |
||||
} else { |
||||
if ($thematic_advance['done_advance'] == 1) { |
||||
echo '<td><center>'.get_lang('Done').'</center></td>'; |
||||
} else { |
||||
echo '<td><center>-</center></td>'; |
||||
} |
||||
|
||||
} |
||||
echo '</tr>'; |
||||
} |
||||
echo '</table>'; |
||||
} else { |
||||
echo '<div><em>'.get_lang('StillDoNotHaveAThematicAdvance').'</em></div>'; |
||||
} |
||||
echo '</td>'; |
||||
|
||||
echo '</tr>'; |
||||
|
||||
} |
||||
|
||||
echo '</table>'; |
||||
|
||||
} else if ($action == 'thematic_add' || $action == 'thematic_edit') { |
||||
|
||||
$header_form = get_lang('NewThematicSection'); |
||||
if ($action == 'thematic_edit') { |
||||
$header_form = get_lang('EditThematicSection'); |
||||
} |
||||
|
||||
// display form |
||||
$form = new FormValidator('thematic_add','POST','index.php?action='.$action.'&'.api_get_cidreq().$param_gradebook,'','style="width: 100%;"'); |
||||
$form->addElement('header', '', $header_form); |
||||
$form->addElement('hidden', 'thematic_token',$token); |
||||
|
||||
if (!empty($thematic_id)) { |
||||
$form->addElement('hidden', 'thematic_id',$thematic_id); |
||||
} |
||||
|
||||
$form->add_textfield('title', get_lang('Title'), true, array('size'=>'50')); |
||||
$form->add_html_editor('content', get_lang('Content'), false, false, array('ToolbarSet' => 'TrainingDescription', 'Width' => '100%', 'Height' => '250')); |
||||
$form->addElement('html','<div class="clear" style="margin-top:50px;"></div>'); |
||||
$form->addElement('style_submit_button', null, get_lang('Save'), 'class="save"'); |
||||
|
||||
if (!empty($thematic_data)) { |
||||
// set default values |
||||
$default['title'] = $thematic_data['title']; |
||||
$default['content'] = $thematic_data['content']; |
||||
$form->setDefaults($default); |
||||
} |
||||
|
||||
$form->display(); |
||||
|
||||
} |
||||
|
||||
?> |
@ -0,0 +1,125 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
/** |
||||
* View (MVC patter) for thematic advance |
||||
* @author Christian Fasanando <christian1827@gmail.com> |
||||
* @package chamilo.attendance |
||||
*/ |
||||
|
||||
// protect a course script |
||||
api_protect_course_script(true); |
||||
|
||||
$token = md5(uniqid(rand(),TRUE)); |
||||
$_SESSION['thematic_advance_token'] = $token; |
||||
|
||||
if ($action == 'thematic_advance_add' || $action == 'thematic_advance_edit') { |
||||
|
||||
$header_form = get_lang('NewThematicAdvance'); |
||||
if ($action == 'thematic_advance_edit') { |
||||
$header_form = get_lang('EditThematicAdvance'); |
||||
} |
||||
|
||||
// display form |
||||
$form = new FormValidator('thematic_advance','POST','index.php?action='.$action.'&thematic_id='.$thematic_id.'&'.api_get_cidreq().$param_gradebook,'','style="width: 100%;"'); |
||||
$form->addElement('header', '', $header_form); |
||||
$form->addElement('hidden', 'thematic_advance_token',$token); |
||||
|
||||
if (!empty($thematic_advance_id)) { |
||||
$form->addElement('hidden', 'thematic_advance_id',$thematic_advance_id); |
||||
} |
||||
if (!empty($thematic_id)) { |
||||
$form->addElement('hidden', 'thematic_id',$thematic_id); |
||||
} |
||||
|
||||
$radios = array(); |
||||
|
||||
$radios[] = FormValidator::createElement('radio', 'start_date_type', null, get_lang('StartDateFromAnAttendance'),'1',array('onclick' => 'check_per_attendance(this)', 'id'=>'from_attendance')); |
||||
$radios[] = FormValidator::createElement('radio', 'start_date_type', null, get_lang('StartDateCustom'),'2',array('onclick' => 'check_per_custom_date(this)', 'id'=>'custom_date')); |
||||
$form->addGroup($radios, null, get_lang('StartDateOption')); |
||||
|
||||
if (isset($thematic_advance_data['attendance_id']) && $thematic_advance_data['attendance_id'] == 0) { |
||||
$form->addElement('html', '<div id="div_custom_datetime" style="display:block">'); |
||||
} else { |
||||
$form->addElement('html', '<div id="div_custom_datetime" style="display:none">'); |
||||
} |
||||
|
||||
$form->addElement('datepicker', 'custom_start_date', get_lang('StartDate'), array('form_name'=>'thematic_advance')); |
||||
$form->addElement('html', '</div>'); |
||||
|
||||
if (isset($thematic_advance_data['attendance_id']) && $thematic_advance_data['attendance_id'] == 0) { |
||||
$form->addElement('html', '<div id="div_datetime_by_attendance" style="display:none">'); |
||||
} else { |
||||
$form->addElement('html', '<div id="div_datetime_by_attendance" style="display:block">'); |
||||
} |
||||
|
||||
$form->addElement('select', 'attendance_select', get_lang('Attendances'), $attendance_select, array('id' => 'id_attendance_select', 'onchange' => 'datetime_by_attendance(this.value)')); |
||||
|
||||
$form->addElement('html', '<div id="div_datetime_attendance">'); |
||||
if (!empty($calendar_select)) { |
||||
$form->addElement('select', 'start_date_by_attendance', get_lang('StartDate'), $calendar_select); |
||||
} |
||||
$form->addElement('html', '</div>'); |
||||
|
||||
$form->addElement('html', '</div>'); |
||||
$hours = range(0,24); |
||||
$form->addElement('select', 'duration_in_hours', get_lang('DurationInHours'), $hours); |
||||
|
||||
$form->add_html_editor('content', get_lang('Content'), false, false, array('ToolbarSet' => 'TrainingDescription', 'Width' => '100%', 'Height' => '150')); |
||||
$form->addElement('html','<div class="clear" style="margin-top:50px;"></div>'); |
||||
$form->addElement('style_submit_button', null, get_lang('Save'), 'class="save"'); |
||||
|
||||
$default['start_date_type'] = 1; |
||||
if (!empty($thematic_advance_data)) { |
||||
|
||||
// set default values |
||||
$default['content'] = $thematic_advance_data['content']; |
||||
$default['duration_in_hours'] = $thematic_advance_data['duration']; |
||||
if (empty($thematic_advance_data['attendance_id'])) { |
||||
$default['start_date_type'] = 2; |
||||
$default['custom_start_date'] = date('d-F-Y H:i', api_strtotime(api_get_local_time($thematic_advance_data['start_date']))); |
||||
} else { |
||||
$default['start_date_type'] = 1; |
||||
if (!empty($calendar_select)) { |
||||
$default['start_date_by_attendance'] = $thematic_advance_data['start_date']; |
||||
} |
||||
$default['attendance_select'] = $thematic_advance_data['attendance_id']; |
||||
} |
||||
} |
||||
$form->setDefaults($default); |
||||
|
||||
$form->display(); |
||||
|
||||
} else if ($action == 'thematic_advance_list') { |
||||
|
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
$param_gradebook = ''; |
||||
if (isset($_SESSION['gradebook'])) { |
||||
$param_gradebook = '&gradebook='.Security::remove_XSS($_SESSION['gradebook']); |
||||
} |
||||
echo '<div class="actions" style="margin-bottom:30px">'; |
||||
echo '<a href="index.php?'.api_get_cidreq().$param_gradebook.'&action=thematic_advance_add&thematic_id='.$thematic_id.'">'.Display::return_icon('template_add.gif',get_lang('NewThematicAdvance')).' '.get_lang('NewThematicAdvance').'</a>'; |
||||
echo '</div>'; |
||||
} |
||||
|
||||
// thematic advance list |
||||
//echo '<br /><strong>'.get_lang('ThematicAdvancesList').'</strong>'; |
||||
$table = new SortableTable('thematic_advance_list', array('Thematic', 'get_number_of_thematic_advances'), array('Thematic', 'get_thematic_advance_data')); |
||||
$table->set_additional_parameters($parameters); |
||||
$table->set_header(0, '', false, array('style'=>'width:20px;')); |
||||
$table->set_header(1, get_lang('StartDate'), true ); |
||||
$table->set_header(2, get_lang('DurationInHours'), true, array('style'=>'width:80px;')); |
||||
$table->set_header(3, get_lang('Content'), true); |
||||
|
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
$table->set_header(4, get_lang('Actions'), false,array('style'=>'text-align:center')); |
||||
//$table->set_form_actions(array ('thematic_advance_delete_select' => get_lang('DeleteAllThematicAdvances'))); |
||||
} |
||||
|
||||
$table->display(); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
?> |
@ -0,0 +1,245 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
/** |
||||
* This file contains class used like controller for thematic, it should be included inside a dispatcher file (e.g: index.php) |
||||
* |
||||
* !!! WARNING !!! : ALL DATES IN THIS MODULE ARE STORED IN UTC ! DO NOT CONVERT DURING THE TRANSITION FROM CHAMILO 1.8.x TO 2.0 |
||||
* |
||||
* @author Christian Fasanando <christian1827@gmail.com> |
||||
* @package chamilo.attendance |
||||
*/ |
||||
|
||||
/** |
||||
* Thematic Controller script. Prepares the common background variables to give to the scripts corresponding to |
||||
* the requested action |
||||
* @package chamilo.attendance |
||||
*/ |
||||
|
||||
class ThematicController |
||||
{ |
||||
|
||||
/** |
||||
* Constructor |
||||
*/ |
||||
public function __construct() { |
||||
$this->toolname = 'attendance'; |
||||
$this->view = new View($this->toolname); |
||||
} |
||||
|
||||
public function thematic($action) { |
||||
|
||||
$thematic= new Thematic(); |
||||
$data = array(); |
||||
|
||||
// insert or update a thematic |
||||
if ($action == 'thematic_add' || $action == 'thematic_edit') { |
||||
if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") { |
||||
if ($_POST['thematic_token'] == $_SESSION['thematic_token']) { |
||||
$id = $_POST['thematic_id']; |
||||
$title = $_POST['title']; |
||||
$content = $_POST['content']; |
||||
$session_id = api_get_session_id(); |
||||
$thematic->set_thematic_attributes($id, $title, $content, $session_id); |
||||
$affected_rows = $thematic->thematic_save(); |
||||
unset($_SESSION['thematic_token']); |
||||
$action = 'thematic_list'; |
||||
} |
||||
} |
||||
} |
||||
|
||||
// delete many thematics |
||||
if ($action == 'thematic_delete_select') { |
||||
if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") { |
||||
$thematic_ids = $_POST['id']; |
||||
$affected_rows = $thematic->thematic_destroy($thematic_ids); |
||||
$action = 'thematic_list'; |
||||
} |
||||
} |
||||
|
||||
$thematic_id = isset($_GET['thematic_id'])?intval($_GET['thematic_id']):null; |
||||
|
||||
if (isset($thematic_id)) { |
||||
|
||||
// delete a thematic |
||||
if ($action == 'thematic_delete') { |
||||
$affected_rows = $thematic->thematic_destroy($thematic_id); |
||||
$action = 'thematic_list'; |
||||
} |
||||
|
||||
// move thematic |
||||
if ($action == 'moveup') { |
||||
$thematic->move_thematic('up', $thematic_id); |
||||
$action = 'thematic_list'; |
||||
} else if ($action == 'movedown') { |
||||
$thematic->move_thematic('down', $thematic_id); |
||||
$action = 'thematic_list'; |
||||
} |
||||
|
||||
$data['thematic_data'] = $thematic->get_thematic_list($thematic_id); |
||||
$data['thematic_id'] = $thematic_id; |
||||
} |
||||
|
||||
if ($action == 'thematic_details') { |
||||
|
||||
if (isset($thematic_id)) { |
||||
$thematic_data[$thematic_id] = $thematic->get_thematic_list($thematic_id); |
||||
$data['total_average_of_advances'] = $thematic->get_average_of_advances_by_thematic($thematic_id); |
||||
} else { |
||||
$thematic_data = $thematic->get_thematic_list(); |
||||
$data['last_done_thematic_advance'] = $thematic->get_last_done_thematic_advance(); |
||||
$data['total_average_of_advances'] = $thematic->get_total_average_of_thematic_advances(); |
||||
} |
||||
|
||||
$thematic_plan_data = $thematic->get_thematic_plan_data(); |
||||
$thematic_advance_data = $thematic->get_thematic_advance_list(); |
||||
$data['thematic_plan_data'] = $thematic_plan_data; |
||||
$data['thematic_advance_data'] = $thematic_advance_data; |
||||
$data['thematic_data'] = $thematic_data; |
||||
} |
||||
|
||||
$data['action'] = $action; |
||||
// render to the view |
||||
$this->view->set_data($data); |
||||
$this->view->set_layout('layout'); |
||||
$this->view->set_template('thematic'); |
||||
$this->view->render(); |
||||
|
||||
} |
||||
|
||||
public function thematic_plan($action) { |
||||
$thematic= new Thematic(); |
||||
$data = array(); |
||||
|
||||
if ($action == 'thematic_plan_add' || $action == 'thematic_plan_edit') { |
||||
if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") { |
||||
if ($_POST['thematic_plan_token'] == $_SESSION['thematic_plan_token']) { |
||||
|
||||
$thematic_id = $_POST['thematic_id']; |
||||
$title = $_POST['title']; |
||||
$description = $_POST['description']; |
||||
$description_type = $_POST['description_type']; |
||||
$thematic->set_thematic_plan_attributes($thematic_id, $title, $description, $description_type); |
||||
$affected_rows = $thematic->thematic_plan_save(); |
||||
|
||||
unset($_SESSION['thematic_plan_token']); |
||||
$action = 'thematic_plan_list'; |
||||
} |
||||
} |
||||
} |
||||
|
||||
$data['thematic_plan_data'] = $thematic->get_thematic_plan_data($thematic_id); |
||||
$thematic_id = intval($_GET['thematic_id']); |
||||
$description_type = intval($_GET['description_type']); |
||||
|
||||
if (!empty($thematic_id) && !empty($description_type)) { |
||||
|
||||
if ($action == 'thematic_plan_delete') { |
||||
$affected_rows = $thematic->thematic_plan_destroy($thematic_id, $description_type); |
||||
$action = 'thematic_plan_list'; |
||||
$data['thematic_plan_data'] = $thematic->get_thematic_plan_data($thematic_id); |
||||
} else { |
||||
$data['thematic_plan_data'] = $thematic->get_thematic_plan_data($thematic_id, $description_type); |
||||
} |
||||
$data['thematic_id'] = $thematic_id; |
||||
$data['description_type'] = $description_type; |
||||
} else if (!empty($thematic_id)) { |
||||
$data['thematic_plan_data'] = $thematic->get_thematic_plan_data($thematic_id); |
||||
$data['thematic_id'] = $thematic_id; |
||||
} |
||||
|
||||
$data['thematic_id'] = $thematic_id; |
||||
$data['action'] = $action; |
||||
$data['default_thematic_plan_title'] = $thematic->get_default_thematic_plan_title(); |
||||
$data['default_thematic_plan_icon'] = $thematic->get_default_thematic_plan_icon(); |
||||
|
||||
// render to the view |
||||
$this->view->set_data($data); |
||||
$this->view->set_layout('layout'); |
||||
$this->view->set_template('thematic_plan'); |
||||
$this->view->render(); |
||||
} |
||||
|
||||
public function thematic_advance($action) { |
||||
|
||||
$thematic= new Thematic(); |
||||
$attendance = new Attendance(); |
||||
$data = array(); |
||||
|
||||
// get data for attendance input select |
||||
$attendance_list = $attendance->get_attendances_list(); |
||||
$attendance_select = array(); |
||||
$attendance_select[0] = get_lang('SelectAnAttendance'); |
||||
foreach ($attendance_list as $attendance_id => $attendance_data) { |
||||
$attendance_select[$attendance_id] = $attendance_data['name']; |
||||
} |
||||
|
||||
if ($action == 'thematic_advance_add' || $action == 'thematic_advance_edit') { |
||||
if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") { |
||||
if ($_POST['thematic_advance_token'] == $_SESSION['thematic_advance_token']) { |
||||
|
||||
$thematic_advance_id = $_POST['thematic_advance_id']; |
||||
$thematic_id = $_POST['thematic_id']; |
||||
$content = $_POST['content']; |
||||
|
||||
if (isset($_POST['start_date_type']) && $_POST['start_date_type'] == 2) { |
||||
$start_date = $thematic->build_datetime_from_array($_POST['custom_start_date']); |
||||
$attendance_id = 0; |
||||
} else { |
||||
$start_date = $_POST['start_date_by_attendance']; |
||||
$attendance_id = $_POST['attendance_select']; |
||||
} |
||||
|
||||
$duration = $_POST['duration_in_hours']; |
||||
$thematic->set_thematic_advance_attributes($thematic_advance_id, $thematic_id, $attendance_id, $content, $start_date, $duration); |
||||
$affected_rows = $thematic->thematic_advance_save(); |
||||
|
||||
unset($_SESSION['thematic_advance_token']); |
||||
$action = 'thematic_advance_list'; |
||||
} |
||||
} |
||||
} |
||||
|
||||
$thematic_id = intval($_GET['thematic_id']); |
||||
$thematic_advance_id = intval($_GET['thematic_advance_id']); |
||||
$thematic_advance_data = array(); |
||||
if (!empty($thematic_advance_id)) { |
||||
if ($action == 'thematic_advance_delete') { |
||||
$affected_rows = $thematic->thematic_advance_destroy($thematic_advance_id); |
||||
$action = 'thematic_advance_list'; |
||||
} else { |
||||
$thematic_advance_data = $thematic->get_thematic_advance_list($thematic_advance_id); |
||||
} |
||||
} |
||||
|
||||
// get calendar select by attendance id |
||||
$calendar_select = array(); |
||||
if (!empty($thematic_advance_data)) { |
||||
if (!empty($thematic_advance_data['attendance_id'])) { |
||||
$attendance_calendar = $attendance->get_attendance_calendar($thematic_advance_data['attendance_id']); |
||||
if (!empty($attendance_calendar)) { |
||||
foreach ($attendance_calendar as $calendar) { |
||||
$calendar_select[$calendar['date_time']] = $calendar['date_time']; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
$data['action'] = $action; |
||||
$data['thematic_id'] = $thematic_id; |
||||
$data['thematic_advance_id'] = $thematic_advance_id; |
||||
$data['attendance_select'] = $attendance_select; |
||||
$data['thematic_advance_data'] = $thematic_advance_data; |
||||
$data['calendar_select'] = $calendar_select; |
||||
|
||||
// render to the view |
||||
$this->view->set_data($data); |
||||
$this->view->set_layout('layout'); |
||||
$this->view->set_template('thematic_advance'); |
||||
$this->view->render(); |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
?> |
@ -0,0 +1,96 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
/** |
||||
* View (MVC patter) for thematic plan |
||||
* @author Christian Fasanando <christian1827@gmail.com> |
||||
* @package chamilo.attendance |
||||
*/ |
||||
|
||||
// actions menu |
||||
$categories = array (); |
||||
foreach ($default_thematic_plan_title as $id => $title) { |
||||
$categories[$id] = $title; |
||||
} |
||||
$categories[ADD_THEMATIC_PLAN] = get_lang('NewBloc'); |
||||
|
||||
$i=1; |
||||
echo '<div class="actions" style="margin-bottom:30px">'; |
||||
ksort($categories); |
||||
foreach ($categories as $id => $title) { |
||||
if ($i == ADD_THEMATIC_PLAN) { |
||||
echo '<a href="index.php?'.api_get_cidreq().'&action=thematic_plan_add&thematic_id='.$thematic_id.'&description_type='.$i.'">'.Display::return_icon($default_thematic_plan_icon[$id], $title, array('height'=>'22')).' '.$title.'</a>'; |
||||
break; |
||||
} else { |
||||
echo '<a href="index.php?action=thematic_plan_edit&'.api_get_cidreq().'&description_type='.$id.'&thematic_id='.$thematic_id.'">'.Display::return_icon($default_thematic_plan_icon[$id], $title, array('height'=>'22')).' '.$title.'</a> '; |
||||
$i++; |
||||
} |
||||
} |
||||
echo '</div>'; |
||||
|
||||
$token = md5(uniqid(rand(),TRUE)); |
||||
$_SESSION['thematic_plan_token'] = $token; |
||||
|
||||
if ($action == 'thematic_plan_list') { |
||||
|
||||
if (isset($thematic_plan_data) && count($thematic_plan_data) > 0) { |
||||
foreach ($thematic_plan_data as $thematic_plan) { |
||||
echo '<div class="sectiontitle">'; |
||||
//delete |
||||
echo '<a href="'.api_get_self().'?cidReq='.api_get_course_id().'&thematic_id='.$thematic_plan['thematic_id'].'&action=thematic_plan_delete&description_type='.$thematic_plan['description_type'].'" onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang('ConfirmYourChoice'),ENT_QUOTES,$charset)).'\')) return false;">'; |
||||
echo Display::return_icon('delete.gif', get_lang('Delete'), array('style' => 'vertical-align:middle;float:right;')); |
||||
echo '</a> '; |
||||
//edit |
||||
echo '<a href="'.api_get_self().'?cidReq='.api_get_course_id().'&thematic_id='.$thematic_plan['thematic_id'].'&action=thematic_plan_edit&description_type='.$thematic_plan['description_type'].'">'; |
||||
echo Display::return_icon('edit.gif', get_lang('Edit'), array('style' => 'vertical-align:middle;float:right; padding-right:4px;')); |
||||
echo '</a> '; |
||||
echo $thematic_plan['title']; |
||||
echo '</div>'; |
||||
echo '<div class="sectioncomment">'; |
||||
echo text_filter($thematic_plan['description']); |
||||
echo '</div>'; |
||||
} |
||||
} else { |
||||
echo '<em>'.get_lang('ThisCourseDescriptionIsEmpty').'</em>'; |
||||
} |
||||
|
||||
} else if ($action == 'thematic_plan_add' || $action == 'thematic_plan_edit') { |
||||
|
||||
if ($description_type >= ADD_THEMATIC_PLAN) { |
||||
$header_form = get_lang('NewBloc'); |
||||
} else { |
||||
$header_form = $default_thematic_plan_title[$description_type]; |
||||
if (!empty($thematic_plan_data)) { |
||||
$header_form = $thematic_plan_data[0]['title']; |
||||
} |
||||
} |
||||
|
||||
// display form |
||||
$form = new FormValidator('thematic_plan_add','POST','index.php?action='.$action.'&thematic_id='.$thematic_id.'&'.api_get_cidreq().$param_gradebook,'','style="width: 100%;"'); |
||||
$form->addElement('header', '', $header_form); |
||||
$form->addElement('hidden', 'thematic_plan_token', $token); |
||||
|
||||
if (!empty($thematic_id)) { |
||||
$form->addElement('hidden', 'thematic_id', $thematic_id); |
||||
} |
||||
if (!empty($description_type)) { |
||||
$form->addElement('hidden', 'description_type', $description_type); |
||||
} |
||||
|
||||
$form->add_textfield('title', get_lang('Title'), true, array('size'=>'50')); |
||||
$form->add_html_editor('description', get_lang('Description'), false, false, array('ToolbarSet' => 'TrainingDescription', 'Width' => '100%', 'Height' => '200')); |
||||
$form->addElement('html','<div class="clear" style="margin-top:50px;"></div>'); |
||||
$form->addElement('style_submit_button', null, get_lang('Save'), 'class="save"'); |
||||
|
||||
$default['title'] = $default_thematic_plan_title[$description_type]; |
||||
if (!empty($thematic_plan_data)) { |
||||
// set default values |
||||
$default['title'] = $thematic_plan_data[0]['title']; |
||||
$default['description'] = $thematic_plan_data[0]['description']; |
||||
} |
||||
$form->setDefaults($default); |
||||
$form->display(); |
||||
} |
||||
|
||||
|
||||
?> |
@ -0,0 +1,55 @@ |
||||
<?php |
||||
/* For licensing terms, see /chamilo_license.txt */ |
||||
/** |
||||
* Responses to AJAX calls for thematic |
||||
*/ |
||||
|
||||
require_once '../global.inc.php'; |
||||
require_once api_get_path(LIBRARY_PATH).'attendance.lib.php'; |
||||
require_once api_get_path(LIBRARY_PATH).'thematic.lib.php'; |
||||
|
||||
$action = $_GET['a']; |
||||
|
||||
switch ($action) { |
||||
case 'get_datetime_by_attendance': |
||||
$attendance_id = intval($_POST['attendance_id']); |
||||
$label = ''; |
||||
$input_select = ''; |
||||
if (!empty($attendance_id)) { |
||||
$attendance = new Attendance(); |
||||
$attendance_calendar = $attendance->get_attendance_calendar($attendance_id); |
||||
$calendar_select = array(); |
||||
$label = get_lang('StartDate'); |
||||
if (!empty($attendance_calendar)) { |
||||
$input_select .= '<select name="start_date_by_attendance">'; |
||||
foreach ($attendance_calendar as $calendar) { |
||||
$input_select .= '<option value="'.api_get_local_time($calendar['date_time']).'">'.api_get_local_time($calendar['date_time']).'</option>'; |
||||
} |
||||
$input_select .= '</select>'; |
||||
} else { |
||||
$input_select .= get_lang('ThereAreNoRegisteredDatetimeYet'); |
||||
} |
||||
} |
||||
?> |
||||
<div class="row"> |
||||
<div class="label"><?php echo $label ?></div>
|
||||
<div class="formw"><?php echo $input_select ?></div>
|
||||
</div> |
||||
<?php
|
||||
break; |
||||
case 'update_done_thematic_advance': |
||||
$thematic_advance_id = intval($_GET['thematic_advance_id']); |
||||
$total_avererage = 0; |
||||
if (!empty($thematic_advance_id)) { |
||||
$thematic = new Thematic(); |
||||
$affected_rows = $thematic->update_done_thematic_advances($thematic_advance_id); |
||||
$total_avererage = $thematic->get_total_average_of_thematic_advances(); |
||||
} |
||||
echo $total_avererage; |
||||
break; |
||||
default: |
||||
echo ''; |
||||
} |
||||
exit; |
||||
|
||||
?> |
@ -0,0 +1,833 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
/** |
||||
* This file contains class used like library, provides functions for thematic option inside attendance tool. It's also used like model to thematic_controller (MVC pattern) |
||||
* @author Christian Fasanando <christian1827@gmail.com> |
||||
* @package chamilo.attendance |
||||
*/ |
||||
|
||||
/** |
||||
* Thematic class can be used to instanciate objects or as a library for thematic control |
||||
* @package chamilo.attendance |
||||
*/ |
||||
class Thematic |
||||
{ |
||||
|
||||
private $session_id; |
||||
private $thematic_id; |
||||
private $thematic_title; |
||||
private $thematic_content; |
||||
private $thematic_plan_id; |
||||
private $thematic_plan_title; |
||||
private $thematic_plan_description; |
||||
private $thematic_plan_description_type; |
||||
private $thematic_advance_id; |
||||
private $attendance_id; |
||||
private $thematic_advance_content; |
||||
private $start_date; |
||||
private $duration; |
||||
|
||||
public function __construct() {} |
||||
|
||||
|
||||
/** |
||||
* Get the total number of thematic inside current course and current session |
||||
* @see SortableTable#get_total_number_of_items() |
||||
*/ |
||||
public function get_number_of_thematics() { |
||||
$tbl_thematic = Database :: get_course_table(TABLE_THEMATIC); |
||||
$session_id = api_get_session_id(); |
||||
$condition_session = api_get_session_condition($session_id); |
||||
$sql = "SELECT COUNT(id) AS total_number_of_items FROM $tbl_thematic WHERE active = 1 $condition_session "; |
||||
$res = Database::query($sql); |
||||
$res = Database::query($sql); |
||||
$obj = Database::fetch_object($res); |
||||
return $obj->total_number_of_items; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get the thematics to display on the current page (fill the sortable-table) |
||||
* @param int offset of first user to recover |
||||
* @param int Number of users to get |
||||
* @param int Column to sort on |
||||
* @param string Order (ASC,DESC) |
||||
* @see SortableTable#get_table_data($from) |
||||
*/ |
||||
public function get_thematic_data($from, $number_of_items, $column, $direction) { |
||||
$tbl_thematic = Database :: get_course_table(TABLE_THEMATIC); |
||||
$session_id = api_get_session_id(); |
||||
$condition_session = api_get_session_condition($session_id); |
||||
$column = intval($column); |
||||
$from = intval($from); |
||||
$number_of_items = intval($number_of_items); |
||||
if (!in_array($direction, array('ASC','DESC'))) { |
||||
$direction = 'ASC'; |
||||
} |
||||
$sql = "SELECT |
||||
id AS col0, |
||||
title AS col1, |
||||
display_order AS col2 |
||||
FROM $tbl_thematic |
||||
WHERE active = 1 $condition_session |
||||
ORDER BY col2 LIMIT $from,$number_of_items "; |
||||
$res = Database::query($sql); |
||||
$thematics = array (); |
||||
|
||||
$param_gradebook = ''; |
||||
if (isset($_SESSION['gradebook'])) { |
||||
$param_gradebook = '&gradebook='.$_SESSION['gradebook']; |
||||
} |
||||
|
||||
while ($thematic = Database::fetch_row($res)) { |
||||
$thematic[1] = '<a href="index.php?'.api_get_cidreq().'&action=thematic_details&thematic_id='.$thematic[0].$param_gradebook.'">'.$thematic[1].'</a>'; |
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
$actions = ''; |
||||
$actions .= '<center><a href="index.php?'.api_get_cidreq().'&action=thematic_plan_list&thematic_id='.$thematic[0].$param_gradebook.'">'.Display::return_icon('info.gif',get_lang('ThematicPlan')).'</a> '; |
||||
$actions .= '<a href="index.php?'.api_get_cidreq().'&action=thematic_advance_list&thematic_id='.$thematic[0].$param_gradebook.'">'.Display::return_icon('porcent.png',get_lang('ThematicAdvance')).'</a> '; |
||||
|
||||
if ($thematic[2] > 1) { |
||||
|
||||
$actions .= '<a href="'.api_get_self().'?action=moveup&'.api_get_cidreq().'&thematic_id='.$thematic[0].$param_gradebook.'">'.Display::return_icon('up.gif', get_lang('Up')).'</a>'; |
||||
} else { |
||||
$actions .= Display::return_icon('up_na.gif',' '); |
||||
|
||||
} |
||||
if ($thematic[2] < self::get_max_thematic_item()) { |
||||
$actions .= '<a href="'.api_get_self().'?action=movedown&a'.api_get_cidreq().'&thematic_id='.$thematic[0].$param_gradebook.'">'.Display::return_icon('down.gif',get_lang('Down')).'</a>'; |
||||
} else { |
||||
$actions .= Display::return_icon('down_na.gif',' '); |
||||
} |
||||
|
||||
$actions .= '<a href="index.php?'.api_get_cidreq().'&action=thematic_edit&thematic_id='.$thematic[0].$param_gradebook.'">'.Display::return_icon('edit.gif',get_lang('Edit')).'</a> '; |
||||
$actions .= '<a onclick="javascript:if(!confirm(\''.get_lang('AreYouSureToDelete').'\')) return false;" href="index.php?'.api_get_cidreq().'&action=thematic_delete&thematic_id='.$thematic[0].$param_gradebook.'">'.Display::return_icon('delete.gif',get_lang('Delete')).'</a></center>'; |
||||
$thematics[] = array($thematic[0], $thematic[1], $actions); |
||||
} |
||||
} |
||||
return $thematics; |
||||
} |
||||
|
||||
/** |
||||
* Get the maximum display order of the thematic item |
||||
* @return int Maximum display order |
||||
*/ |
||||
function get_max_thematic_item() |
||||
{ |
||||
// Database table definition |
||||
$tbl_thematic = Database :: get_course_table(TABLE_THEMATIC); |
||||
$session_id = api_get_session_id(); |
||||
$condition_session = api_get_session_condition($session_id, false); |
||||
$sql = "SELECT MAX(display_order) FROM $tbl_thematic $condition_session"; |
||||
$rs = Database::query($sql); |
||||
$dsp=0; |
||||
$row = Database::fetch_array($rs); |
||||
return $row[0]; |
||||
} |
||||
|
||||
/** |
||||
* Move a thematic |
||||
* |
||||
* @param string Direction (up, down) |
||||
* @param int Thematic id |
||||
*/ |
||||
function move_thematic($direction, $thematic_id) |
||||
{ |
||||
// Database table definition |
||||
$tbl_thematic = Database :: get_course_table(TABLE_THEMATIC); |
||||
|
||||
// sort direction |
||||
if ($direction == 'up') { |
||||
$sortorder = 'DESC'; |
||||
} else { |
||||
$sortorder = 'ASC'; |
||||
} |
||||
|
||||
$sql = "SELECT * FROM $tbl_thematic ORDER BY display_order $sortorder"; |
||||
$res = Database::query($sql); |
||||
$found = false; |
||||
while ($row = Database::fetch_array($res)) { |
||||
if ($found == true && empty($next_id)) { |
||||
$next_id = intval($row['id']); |
||||
$next_display_order = intval($row['display_order']); |
||||
} |
||||
|
||||
if ($row['id'] == $thematic_id) { |
||||
$current_id = intval($thematic_id); |
||||
$current_display_order = intval($row['display_order']); |
||||
$found = true; |
||||
} |
||||
} |
||||
|
||||
// get last done thematic advance before move thematic list |
||||
$last_done_thematic_advance = $this->get_last_done_thematic_advance(); |
||||
|
||||
$sql = "UPDATE $tbl_thematic SET display_order = $next_display_order WHERE id = $current_id "; |
||||
Database::query($sql); |
||||
$sql = "UPDATE $tbl_thematic SET display_order = $current_display_order WHERE id = $next_id "; |
||||
Database::query($sql); |
||||
|
||||
// update done advances with de current thematic list |
||||
$update_done_advances = $this->update_done_thematic_advances($last_done_thematic_advance); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* get thematic list |
||||
* @param int Thematic id (optional), get list by id |
||||
* @return array Thematic data |
||||
*/ |
||||
public function get_thematic_list($thematic_id = null, $course_code = null, $session_id = null) { |
||||
|
||||
// set current course and session |
||||
if (isset($course_code)) { |
||||
$course_info = api_get_course_info($course_code); |
||||
$tbl_thematic = Database :: get_course_table(TABLE_THEMATIC, $course_info['dbName']); |
||||
} else { |
||||
$tbl_thematic = Database :: get_course_table(TABLE_THEMATIC); |
||||
} |
||||
|
||||
if (isset($session_id)) { |
||||
$session_id = intval($session_id); |
||||
} else { |
||||
$session_id = api_get_session_id(); |
||||
} |
||||
|
||||
$data = array(); |
||||
$condition = ''; |
||||
if (isset($thematic_id)) { |
||||
$thematic_id = intval($thematic_id); |
||||
$condition = " WHERE id = $thematic_id "; |
||||
} else { |
||||
$condition_session = api_get_session_condition($session_id); |
||||
$condition = " WHERE active = 1 $condition_session "; |
||||
} |
||||
$sql = "SELECT * FROM $tbl_thematic $condition ORDER BY display_order "; |
||||
$res = Database::query($sql); |
||||
if (Database::num_rows($res) > 0) { |
||||
if (!empty($thematic_id)) { |
||||
$data = Database::fetch_array($res); |
||||
} else { |
||||
while ($row = Database::fetch_array($res)) { |
||||
$data[$row['id']] = $row; |
||||
} |
||||
} |
||||
} |
||||
return $data; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* insert or update a thematic |
||||
* @return int last thematic id |
||||
*/ |
||||
public function thematic_save() { |
||||
|
||||
// definition database table |
||||
$tbl_thematic = Database::get_course_table(TABLE_THEMATIC); |
||||
|
||||
// protect data |
||||
$id = intval($this->thematic_id); |
||||
$title = Database::escape_string($this->thematic_title); |
||||
$content = Database::escape_string($this->thematic_content); |
||||
$session_id = intval($this->session_id); |
||||
|
||||
// get the maximum display order of all the glossary items |
||||
$max_thematic_item = $this->get_max_thematic_item(); |
||||
|
||||
if (empty($id)) { |
||||
// insert |
||||
$sql = "INSERT INTO $tbl_thematic(title, content, active, display_order, session_id) VALUES ('$title', '$content', 1, ".(intval($max_thematic_item)+1).", $session_id) "; |
||||
Database::query($sql); |
||||
$last_id = Database::insert_id(); |
||||
} else { |
||||
// update |
||||
$sql = "UPDATE $tbl_thematic SET title = '$title', content = '$content', session_id = $session_id WHERE id = $id "; |
||||
Database::query($sql); |
||||
$last_id = $id; |
||||
} |
||||
|
||||
return $last_id; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* Delete logically (set active field to 0) a thematic |
||||
* @param int|array One or many thematic ids |
||||
* @return int Affected rows |
||||
*/ |
||||
function thematic_destroy($thematic_id) { |
||||
|
||||
$tbl_thematic = Database::get_course_table(TABLE_THEMATIC); |
||||
$affected_rows = 0; |
||||
if (is_array($thematic_id)) { |
||||
foreach ($thematic_id as $id) { |
||||
$id = intval($id); |
||||
$sql = "UPDATE $tbl_thematic SET active = 0 WHERE id = $id"; |
||||
Database::query($sql); |
||||
$affected_rows += Database::affected_rows(); |
||||
} |
||||
} else { |
||||
$thematic_id = intval($thematic_id); |
||||
$sql = "UPDATE $tbl_thematic SET active = 0 WHERE id = $thematic_id"; |
||||
Database::query($sql); |
||||
$affected_rows = Database::affected_rows(); |
||||
} |
||||
return $affected_rows; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* Get the total number of thematic advance inside current course |
||||
* @see SortableTable#get_total_number_of_items() |
||||
*/ |
||||
public function get_number_of_thematic_advances() { |
||||
global $thematic_id; |
||||
$tbl_thematic_advance = Database :: get_course_table(TABLE_THEMATIC_ADVANCE); |
||||
$sql = "SELECT COUNT(id) AS total_number_of_items FROM $tbl_thematic_advance WHERE thematic_id = $thematic_id "; |
||||
$res = Database::query($sql); |
||||
$res = Database::query($sql); |
||||
$obj = Database::fetch_object($res); |
||||
return $obj->total_number_of_items; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get the thematic advances to display on the current page (fill the sortable-table) |
||||
* @param int offset of first user to recover |
||||
* @param int Number of users to get |
||||
* @param int Column to sort on |
||||
* @param string Order (ASC,DESC) |
||||
* @see SortableTable#get_table_data($from) |
||||
*/ |
||||
public function get_thematic_advance_data($from, $number_of_items, $column, $direction) { |
||||
global $thematic_id; |
||||
$tbl_thematic_advance = Database :: get_course_table(TABLE_THEMATIC_ADVANCE); |
||||
$thematic_data = self::get_thematic_list($thematic_id); |
||||
$column = intval($column); |
||||
$from = intval($from); |
||||
$number_of_items = intval($number_of_items); |
||||
if (!in_array($direction, array('ASC','DESC'))) { |
||||
$direction = 'ASC'; |
||||
} |
||||
$sql = "SELECT |
||||
id AS col0, |
||||
start_date AS col1, |
||||
duration AS col2, |
||||
content AS col3 |
||||
FROM $tbl_thematic_advance |
||||
WHERE thematic_id = $thematic_id |
||||
ORDER BY col$column $direction LIMIT $from,$number_of_items "; |
||||
$res = Database::query($sql); |
||||
$data = array (); |
||||
|
||||
$param_gradebook = ''; |
||||
if (isset($_SESSION['gradebook'])) { |
||||
$param_gradebook = '&gradebook='.$_SESSION['gradebook']; |
||||
} |
||||
|
||||
$i = 1; |
||||
while ($thematic_advance = Database::fetch_row($res)) { |
||||
$thematic_advance[1] = api_get_local_time($thematic_advance[1]); |
||||
if (api_is_allowed_to_edit(null, true)) { |
||||
$actions = ''; |
||||
$actions .= '<a href="index.php?'.api_get_cidreq().'&action=thematic_advance_edit&thematic_id='.$thematic_id.'&thematic_advance_id='.$thematic_advance[0].$param_gradebook.'">'.Display::return_icon('edit.gif',get_lang('Edit')).'</a> '; |
||||
$actions .= '<a onclick="javascript:if(!confirm(\''.get_lang('AreYouSureToDelete').'\')) return false;" href="index.php?'.api_get_cidreq().'&action=thematic_advance_delete&thematic_id='.$thematic_id.'&thematic_advance_id='.$thematic_advance[0].$param_gradebook.'">'.Display::return_icon('delete.gif',get_lang('Delete')).'</a></center>'; |
||||
$data[] = array($i, $thematic_advance[1], $thematic_advance[2], $thematic_advance[3], $actions); |
||||
} |
||||
$i++; |
||||
} |
||||
return $data; |
||||
} |
||||
|
||||
/** |
||||
* get thematic advance data by tematic id |
||||
* @param int Thematic id |
||||
* @param string Course code (optional) |
||||
* @return array data |
||||
*/ |
||||
public function get_thematic_advance_by_thematic_id($thematic_id, $course_code = null) { |
||||
|
||||
// set current course |
||||
if (isset($course_code)) { |
||||
$course_info = api_get_course_info($course_code); |
||||
$tbl_thematic_advance = Database::get_course_table(TABLE_THEMATIC_ADVANCE, $course_info['dbName']); |
||||
} else { |
||||
$tbl_thematic_advance = Database::get_course_table(TABLE_THEMATIC_ADVANCE); |
||||
} |
||||
|
||||
$thematic_id = intval($thematic_id); |
||||
$data = array(); |
||||
$sql = "SELECT * FROM $tbl_thematic_advance WHERE thematic_id = $thematic_id "; |
||||
$res = Database::query($sql); |
||||
if (Database::num_rows($res) > 0) { |
||||
while ($row = Database::fetch_array($res)) { |
||||
$data[] = $row; |
||||
} |
||||
} |
||||
return $data; |
||||
} |
||||
|
||||
/** |
||||
* get thematic advance list |
||||
* @param int Thematic advance id (optional), get data by thematic advance list |
||||
* @param string Course code (optional) |
||||
* @return array data |
||||
*/ |
||||
public function get_thematic_advance_list($thematic_advance_id = null, $course_code = null) { |
||||
|
||||
// set current course |
||||
if (isset($course_code)) { |
||||
$course_info = api_get_course_info($course_code); |
||||
$tbl_thematic_advance = Database::get_course_table(TABLE_THEMATIC_ADVANCE, $course_info['dbName']); |
||||
} else { |
||||
$tbl_thematic_advance = Database::get_course_table(TABLE_THEMATIC_ADVANCE); |
||||
} |
||||
|
||||
$data = array(); |
||||
|
||||
$condition = ''; |
||||
if (isset($thematic_advance_id)) { |
||||
$thematic_advance_id = intval($thematic_advance_id); |
||||
$condition = " WHERE id = $thematic_advance_id "; |
||||
} |
||||
|
||||
$sql = "SELECT * FROM $tbl_thematic_advance $condition ORDER BY start_date "; |
||||
$res = Database::query($sql); |
||||
if (Database::num_rows($res) > 0) { |
||||
if (!empty($thematic_advance_id)) { |
||||
$data = Database::fetch_array($res); |
||||
} else { |
||||
// group all data group by thematic id |
||||
$tmp = array(); |
||||
while ($row = Database::fetch_array($res)) { |
||||
$tmp[] = $row['thematic_id']; |
||||
if (in_array($row['thematic_id'], $tmp)) { |
||||
$data[$row['thematic_id']][$row['id']] = $row; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return $data; |
||||
} |
||||
|
||||
/** |
||||
* insert or update a thematic advance |
||||
* @return int last thematic advance id |
||||
*/ |
||||
public function thematic_advance_save() { |
||||
|
||||
// definition database table |
||||
$tbl_thematic_advance = Database::get_course_table(TABLE_THEMATIC_ADVANCE); |
||||
|
||||
// protect data |
||||
$id = intval($this->thematic_advance_id); |
||||
$tematic_id = intval($this->thematic_id); |
||||
$attendance_id = intval($this->attendance_id); |
||||
$content = Database::escape_string($this->thematic_advance_content); |
||||
$start_date = Database::escape_string($this->start_date); |
||||
$duration = intval($this->duration); |
||||
|
||||
if (empty($id)) { |
||||
// insert |
||||
$sql = "INSERT INTO $tbl_thematic_advance (thematic_id, attendance_id, content, start_date, duration) VALUES ($tematic_id, $attendance_id, '$content', '".api_get_utc_datetime($start_date)."', $duration) "; |
||||
Database::query($sql); |
||||
$last_id = Database::insert_id(); |
||||
} else { |
||||
// update |
||||
$sql = "UPDATE $tbl_thematic_advance SET thematic_id = $tematic_id, attendance_id = $attendance_id, content = '$content', start_date = '".api_get_utc_datetime($start_date)."', duration = $duration WHERE id = $id "; |
||||
Database::query($sql); |
||||
$last_id = $id; |
||||
} |
||||
|
||||
return $last_id; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* delete thematic advance |
||||
* @param int Thematic advance id |
||||
* @return int Affected rows |
||||
*/ |
||||
public function thematic_advance_destroy($thematic_advance_id) { |
||||
|
||||
// definition database table |
||||
$tbl_thematic_advance = Database::get_course_table(TABLE_THEMATIC_ADVANCE); |
||||
// protect data |
||||
$thematic_advance_id = intval($thematic_advance_id); |
||||
$sql = "DELETE FROM $tbl_thematic_advance WHERE id = $thematic_advance_id "; |
||||
Database::query($sql); |
||||
$affected_rows = Database::affected_rows(); |
||||
|
||||
return $affected_rows; |
||||
} |
||||
|
||||
/** |
||||
* get thematic plan data |
||||
* @param int Thematic id (optional), get data by thematic id |
||||
* @param int Thematic plan description type (optional), get data by description type |
||||
* @return array Thematic plan data |
||||
*/ |
||||
public function get_thematic_plan_data($thematic_id = null, $description_type = null) { |
||||
|
||||
// definition database table |
||||
$tbl_thematic_plan = Database::get_course_table(TABLE_THEMATIC_PLAN); |
||||
$data = array(); |
||||
$condition = ''; |
||||
if (isset($thematic_id)) { |
||||
$thematic_id = intval($thematic_id); |
||||
$condition .= " AND thematic_id = $thematic_id "; |
||||
} |
||||
if (isset($description_type)) { |
||||
$description_type = intval($description_type); |
||||
$condition .= " AND description_type = $description_type "; |
||||
} |
||||
|
||||
$sql = "SELECT * FROM $tbl_thematic_plan WHERE 1 $condition"; |
||||
$rs = Database::query($sql); |
||||
if (Database::num_rows($rs) > 0) { |
||||
if (!isset($thematic_id) && !isset($description_type)) { |
||||
// group all data group by thematic id |
||||
$tmp = array(); |
||||
while ($row = Database::fetch_array($rs)) { |
||||
$tmp[] = $row['thematic_id']; |
||||
if (in_array($row['thematic_id'], $tmp)) { |
||||
$data[$row['thematic_id']][$row['id']] = $row; |
||||
} |
||||
} |
||||
} else { |
||||
while ($row = Database::fetch_array($rs)) { |
||||
$data[] = $row; |
||||
} |
||||
} |
||||
} |
||||
return $data; |
||||
} |
||||
|
||||
/** |
||||
* insert or update a thematic plan |
||||
* @return int affected rows |
||||
*/ |
||||
public function thematic_plan_save() { |
||||
|
||||
// definition database table |
||||
$tbl_thematic_plan = Database::get_course_table(TABLE_THEMATIC_PLAN); |
||||
|
||||
// protect data |
||||
$thematic_id = intval($this->thematic_id); |
||||
$title = Database::escape_string($this->thematic_plan_title); |
||||
$description = Database::escape_string($this->thematic_plan_description); |
||||
$description_type = intval($this->thematic_plan_description_type); |
||||
|
||||
// check thematic plan type already exists |
||||
$sql = "SELECT id FROM $tbl_thematic_plan WHERE thematic_id = $thematic_id AND description_type = $description_type "; |
||||
$rs = Database::query($sql); |
||||
|
||||
$affected_rows = 0; |
||||
if (Database::num_rows($rs) > 0) { |
||||
// update |
||||
$upd = "UPDATE $tbl_thematic_plan SET title = '$title', description = '$description' WHERE thematic_id = $thematic_id AND description_type = $description_type "; |
||||
Database::query($upd); |
||||
$affected_rows = Database::affected_rows(); |
||||
} else { |
||||
// insert |
||||
$ins = "INSERT INTO $tbl_thematic_plan(thematic_id, title, description, description_type) VALUES($thematic_id, '$title', '$description', $description_type) "; |
||||
Database::query($ins); |
||||
$affected_rows = Database::affected_rows(); |
||||
} |
||||
|
||||
return $affected_rows; |
||||
} |
||||
|
||||
/** |
||||
* delete a thematic plan description |
||||
* @param int Thematic id |
||||
* @param int Description type |
||||
* @return int Affected rows |
||||
*/ |
||||
public function thematic_plan_destroy($thematic_id, $description_type) { |
||||
|
||||
// definition database table |
||||
$tbl_thematic_plan = Database::get_course_table(TABLE_THEMATIC_PLAN); |
||||
|
||||
// protect data |
||||
$thematic_id = intval($thematic_id); |
||||
$description_type = intval($description_type); |
||||
|
||||
$sql = "DELETE FROM $tbl_thematic_plan WHERE thematic_id = $thematic_id AND description_type = $description_type "; |
||||
Database::query($sql); |
||||
$affected_rows = Database::affected_rows(); |
||||
|
||||
return $affected_rows; |
||||
} |
||||
|
||||
/** |
||||
* update done thematic advances from thematic details interface |
||||
* @param int Thematic id |
||||
* @return int Affected rows |
||||
*/ |
||||
public function update_done_thematic_advances ($thematic_advance_id) { |
||||
|
||||
$thematic_data = $this->get_thematic_list(); |
||||
$thematic_advance_data = $this->get_thematic_advance_list(); |
||||
$tbl_thematic_advance = Database::get_course_table(TABLE_THEMATIC_ADVANCE); |
||||
$affected_rows = 0; |
||||
|
||||
$a_thematic_advance_ids = array(); |
||||
if (!empty($thematic_data)) { |
||||
foreach ($thematic_data as $thematic) { |
||||
$thematic_id = $thematic['id']; |
||||
if (!empty($thematic_advance_data[$thematic['id']])) { |
||||
foreach ($thematic_advance_data[$thematic['id']] as $thematic_advance) { |
||||
$a_thematic_advance_ids[] = $thematic_advance['id']; |
||||
// update done thematic for previous advances ((done_advance = 1)) |
||||
$upd = "UPDATE $tbl_thematic_advance set done_advance = 1 WHERE id = ".$thematic_advance['id']." "; |
||||
Database::query($upd); |
||||
$affected_rows += Database::affected_rows(); |
||||
if ($thematic_advance['id'] == $thematic_advance_id) { |
||||
break 2; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
// update done thematic for others advances (done_advance = 0) |
||||
if (!empty($a_thematic_advance_ids)) { |
||||
$upd = "UPDATE $tbl_thematic_advance set done_advance = 0 WHERE id NOT IN(".implode(',',$a_thematic_advance_ids).") "; |
||||
Database::query($upd); |
||||
} |
||||
|
||||
return $affected_rows; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* Get last done thematic advance from thematic details interface |
||||
* @return int Last done thematic advance id |
||||
*/ |
||||
public function get_last_done_thematic_advance() { |
||||
|
||||
$thematic_data = $this->get_thematic_list(); |
||||
$thematic_advance_data = $this->get_thematic_advance_list(); |
||||
$a_thematic_advance_ids = array(); |
||||
$last_done_advance_id = 0; |
||||
if (!empty($thematic_data)) { |
||||
foreach ($thematic_data as $thematic) { |
||||
$thematic_id = $thematic['id']; |
||||
if (!empty($thematic_advance_data[$thematic['id']])) { |
||||
foreach ($thematic_advance_data[$thematic['id']] as $thematic_advance) { |
||||
if ($thematic_advance['done_advance'] == 1) { |
||||
$a_thematic_advance_ids[] = $thematic_advance['id']; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (!empty($a_thematic_advance_ids)) { |
||||
$last_done_advance_id = array_pop($a_thematic_advance_ids); |
||||
$last_done_advance_id = intval($last_done_advance_id); |
||||
} |
||||
|
||||
return $last_done_advance_id; |
||||
} |
||||
|
||||
/** |
||||
* Get total average of thematic advances |
||||
* @param string Course code (optional) |
||||
* @param int Session id (optional) |
||||
* @return float Average of thematic advances |
||||
*/ |
||||
public function get_total_average_of_thematic_advances($course_code = null, $session_id = null) { |
||||
|
||||
$thematic_data = $this->get_thematic_list(null, $course_code, $session_id); |
||||
$thematic_advance_data = $this->get_thematic_advance_list(null, $course_code); |
||||
$a_average_of_advances_by_thematic = array(); |
||||
$total_average = 0; |
||||
if (!empty($thematic_data)) { |
||||
foreach ($thematic_data as $thematic) { |
||||
$thematic_id = $thematic['id']; |
||||
$a_average_of_advances_by_thematic[$thematic_id] = $this->get_average_of_advances_by_thematic($thematic_id, $course_code); |
||||
} |
||||
} |
||||
|
||||
// calculate total average |
||||
if (!empty($a_average_of_advances_by_thematic)) { |
||||
$count_tematics = count($thematic_data); |
||||
$score = array_sum($a_average_of_advances_by_thematic); |
||||
$total_average = round(($score*100)/($count_tematics*100),2); |
||||
} |
||||
|
||||
return $total_average; |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get average of advances by thematic |
||||
* @param int Thematic id |
||||
* @param string Course code (optional) |
||||
* @return float Average of thematic advances |
||||
*/ |
||||
public function get_average_of_advances_by_thematic($thematic_id, $course_code = null) { |
||||
|
||||
$thematic_advance_data = $this->get_thematic_advance_by_thematic_id($thematic_id, $course_code); |
||||
$average = 0; |
||||
if (!empty($thematic_advance_data)) { |
||||
// get all done advances by thematic |
||||
$advances = array(); |
||||
$count_done_advances = 0; |
||||
$average = 0; |
||||
foreach ($thematic_advance_data as $thematic_advance) { |
||||
if ($thematic_advance['done_advance'] == 1) { |
||||
$count_done_advances++; |
||||
} |
||||
$advances[] = $thematic_advance['done_advance']; |
||||
} |
||||
// calculate average by thematic |
||||
$count_total_advances = count($advances); |
||||
$average = round(($count_done_advances*100)/$count_total_advances,2); |
||||
} |
||||
|
||||
return $average; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* set attributes for fields of thematic table |
||||
* @param int Thematic id |
||||
* @param string Thematic title |
||||
* @param string Thematic content |
||||
* @param int Session id |
||||
* @return void |
||||
*/ |
||||
public function set_thematic_attributes($id = null, $title = '', $content = '', $session_id = 0) { |
||||
$this->thematic_id = $id; |
||||
$this->thematic_title = $title; |
||||
$this->thematic_content = $content; |
||||
$this->session_id = $session_id; |
||||
} |
||||
|
||||
/** |
||||
* set attributes for fields of thematic_plan table |
||||
* @param int Thematic id |
||||
* @param string Thematic plan title |
||||
* @param string Thematic plan description |
||||
* @param int Thematic plan description type |
||||
* @return void |
||||
*/ |
||||
public function set_thematic_plan_attributes($thematic_id = 0, $title = '', $description = '', $description_type = 0) { |
||||
$this->thematic_id = $thematic_id; |
||||
$this->thematic_plan_title = $title; |
||||
$this->thematic_plan_description = $description; |
||||
$this->thematic_plan_description_type = $description_type; |
||||
} |
||||
|
||||
/** |
||||
* set attributes for fields of thematic_advance table |
||||
* @param int Thematic advance id |
||||
* @param int Thematic id |
||||
* @param int Attendance id |
||||
* @param string Content |
||||
* @param string Date and time |
||||
* @param int Duration in hours |
||||
* @return void |
||||
*/ |
||||
public function set_thematic_advance_attributes($id = null, $thematic_id = 0, $attendance_id = 0, $content = '', $start_date = '0000-00-00 00:00:00', $duration = 0) { |
||||
$this->thematic_advance_id = $id; |
||||
$this->thematic_id = $thematic_id; |
||||
$this->attendance_id = $attendance_id; |
||||
$this->thematic_advance_content = $content; |
||||
$this->start_date = $start_date; |
||||
$this->duration = $duration; |
||||
} |
||||
|
||||
/** |
||||
* set thematic id |
||||
* @param int Thematic id |
||||
* @return void |
||||
*/ |
||||
public function set_thematic_id($thematic_id) { |
||||
$this->thematic_id = $thematic_id; |
||||
} |
||||
|
||||
/** |
||||
* get thematic id |
||||
* @return void |
||||
*/ |
||||
public function get_thematic_id() { |
||||
return $this->thematic_id; |
||||
} |
||||
|
||||
/** |
||||
* Get thematic plan titles by default |
||||
* @return array |
||||
*/ |
||||
public function get_default_thematic_plan_title() { |
||||
$default_thematic_plan_titles = array(); |
||||
$default_thematic_plan_titles[1]= get_lang('Objectives'); |
||||
$default_thematic_plan_titles[2]= get_lang('SkillToAcquire'); |
||||
$default_thematic_plan_titles[3]= get_lang('Infrastructure'); |
||||
$default_thematic_plan_titles[4]= get_lang('Methodology'); |
||||
$default_thematic_plan_titles[5]= get_lang('AditionalNotes'); |
||||
$default_thematic_plan_titles[6]= get_lang('Others'); |
||||
return $default_thematic_plan_titles; |
||||
} |
||||
|
||||
/** |
||||
* Get thematic plan icons by default |
||||
* @return array |
||||
*/ |
||||
public function get_default_thematic_plan_icon() { |
||||
$default_thematic_plan_icon = array(); |
||||
$default_thematic_plan_icon[1]= 'spire.gif'; |
||||
$default_thematic_plan_icon[2]= 'korganizer.gif'; |
||||
$default_thematic_plan_icon[3]= 'kcmdf_big.gif'; |
||||
$default_thematic_plan_icon[4]= 'misc.gif'; |
||||
$default_thematic_plan_icon[5]= 'ktip.gif'; |
||||
$default_thematic_plan_icon[6]= 'new_test.gif'; |
||||
return $default_thematic_plan_icon; |
||||
} |
||||
|
||||
/** |
||||
* Get questions by default for help |
||||
* @return array |
||||
*/ |
||||
public function get_default_question() { |
||||
$question = array(); |
||||
$question[1]= get_lang('ObjectivesQuestions'); |
||||
$question[2]= get_lang('DestrezaQuestions'); |
||||
$question[3]= get_lang('InfraestructuraQuestions'); |
||||
$question[4]= get_lang('MethodologyQuestions'); |
||||
$question[5]= get_lang('AditionalsNotesQuestions'); |
||||
return $question; |
||||
} |
||||
|
||||
/** |
||||
* buid a string datetime from array |
||||
* @param array array containing data e.g: $array('Y'=>'2010', 'F' => '02', 'd' => '10', 'H' => '12', 'i' => '30') |
||||
* @return string date and time e.g: '2010-02-10 12:30:00' |
||||
*/ |
||||
public function build_datetime_from_array($array) { |
||||
$year = '0000'; |
||||
$month = $day = $hours = $minutes = $seconds = '00'; |
||||
if (isset($array['Y']) && isset($array['F']) && isset($array['d']) && isset($array['H']) && isset($array['i'])) { |
||||
$year = $array['Y']; |
||||
$month = $array['F']; |
||||
if (intval($month) < 10 ) $month = '0'.$month; |
||||
$day = $array['d']; |
||||
if (intval($day) < 10 ) $day = '0'.$day; |
||||
$hours = $array['H']; |
||||
if (intval($hours) < 10 ) $hours = '0'.$hours; |
||||
$minutes = $array['i']; |
||||
if (intval($minutes) < 10 ) $minutes = '0'.$minutes; |
||||
} |
||||
if (checkdate($month,$day,$year)) { |
||||
$datetime = $year.'-'.$month.'-'.$day.' '.$hours.':'.$minutes.':'.$seconds; |
||||
} |
||||
return $datetime; |
||||
} |
||||
|
||||
} |
||||
?> |
Loading…
Reference in new issue