|
|
|
<?php
|
|
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class CourseDescriptionController
|
|
|
|
* This file contains class used like controller,
|
|
|
|
* it should be included inside a dispatcher file (e.g: index.php)
|
|
|
|
* @author Christian Fasanando <christian1827@gmail.com>
|
|
|
|
* @package chamilo.course_description
|
|
|
|
*/
|
|
|
|
class CourseDescriptionController
|
|
|
|
{
|
|
|
|
private $toolname;
|
|
|
|
private $view;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
*/
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
$this->toolname = 'course_description';
|
|
|
|
$this->view = new View($this->toolname);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* It's used for listing course description,
|
|
|
|
* render to listing view
|
|
|
|
* @param boolean true for listing history (optional)
|
|
|
|
* @param array message for showing by action['edit','add','destroy'] (optional)
|
|
|
|
*/
|
|
|
|
public function listing($history = false, $messages = array())
|
|
|
|
{
|
|
|
|
$course_description = new CourseDescription();
|
|
|
|
$session_id = api_get_session_id();
|
|
|
|
$course_description->set_session_id($session_id);
|
|
|
|
$data = array();
|
|
|
|
$course_description_data = $course_description->get_description_data();
|
|
|
|
$data['descriptions'] = isset($course_description_data['descriptions']) ? $course_description_data['descriptions'] : '';
|
|
|
|
$data['default_description_titles'] = $course_description->get_default_description_title();
|
|
|
|
$data['default_description_title_editable'] = $course_description->get_default_description_title_editable();
|
|
|
|
$data['default_description_icon'] = $course_description->get_default_description_icon();
|
|
|
|
$data['messages'] = $messages;
|
|
|
|
$browser = api_get_navigator();
|
|
|
|
|
|
|
|
if (!is_array($data['descriptions'])) {
|
|
|
|
$data['descriptions'] = array($data['descriptions']);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($data['descriptions'] as $description) {
|
|
|
|
if (!empty($description['content'])
|
|
|
|
&& strpos($description['content'], '<iframe') !== false
|
|
|
|
&& $browser['name'] == 'Chrome'
|
|
|
|
) {
|
|
|
|
header("X-XSS-Protection: 0");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// render to the view
|
|
|
|
$this->view->set_data($data);
|
|
|
|
$this->view->set_layout('layout');
|
|
|
|
$this->view->set_template('listing');
|
|
|
|
$this->view->render();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* It's used for editing a course description,
|
|
|
|
* render to listing or edit view
|
|
|
|
* @param int $id description item id
|
|
|
|
* @param int $description_type description type id
|
|
|
|
*/
|
|
|
|
public function edit($id, $description_type)
|
|
|
|
{
|
|
|
|
$course_description = new CourseDescription();
|
|
|
|
$session_id = api_get_session_id();
|
|
|
|
$course_description->set_session_id($session_id);
|
|
|
|
$data = array();
|
|
|
|
$data['id'] = $id;
|
|
|
|
$affected_rows = null;
|
|
|
|
$message = array();
|
|
|
|
if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
|
|
|
|
if (!empty($_POST['title']) && !empty($_POST['contentDescription'])) {
|
|
|
|
$check = Security::check_token();
|
|
|
|
if ($check) {
|
|
|
|
$title = $_POST['title'];
|
|
|
|
$content = $_POST['contentDescription'];
|
|
|
|
$description_type = $_POST['description_type'];
|
|
|
|
$id = $_POST['id'];
|
|
|
|
if (empty($id)) {
|
|
|
|
// If the ID was not provided, find the first matching description item given the item type
|
|
|
|
$description = $course_description->get_data_by_description_type($description_type);
|
|
|
|
if (count($description) > 0) {
|
|
|
|
$id = $description['id'];
|
|
|
|
}
|
|
|
|
// If no corresponding description is found, edit a new one
|
|
|
|
}
|
|
|
|
$progress = isset($_POST['progress']) ? $_POST['progress'] : '';
|
|
|
|
$course_description->set_description_type($description_type);
|
|
|
|
$course_description->set_title($title);
|
|
|
|
$course_description->set_content($content);
|
|
|
|
$course_description->set_progress($progress);
|
|
|
|
$thematic_advance = $course_description->get_data_by_id($id);
|
|
|
|
|
|
|
|
if (!empty($thematic_advance)) {
|
|
|
|
$course_description->set_id($id);
|
|
|
|
$affected_rows = $course_description->update();
|
|
|
|
} else {
|
|
|
|
$affected_rows = $course_description->insert();
|
|
|
|
}
|
|
|
|
Security::clear_token();
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($affected_rows) {
|
|
|
|
$message['edit'] = true;
|
|
|
|
}
|
|
|
|
$this->listing(false, $message);
|
|
|
|
} else {
|
|
|
|
$data['error'] = 1;
|
|
|
|
$data['default_description_titles'] = $course_description->get_default_description_title();
|
|
|
|
$data['default_description_title_editable'] = $course_description->get_default_description_title_editable();
|
|
|
|
$data['default_description_icon'] = $course_description->get_default_description_icon();
|
|
|
|
$data['question'] = $course_description->get_default_question();
|
|
|
|
$data['information'] = $course_description->get_default_information();
|
|
|
|
$data['description_title'] = $_POST['title'];
|
|
|
|
$data['description_content'] = $_POST['contentDescription'];
|
|
|
|
$data['description_type'] = $_POST['description_type'];
|
|
|
|
$data['progress'] = $_POST['progress'];
|
|
|
|
$data['descriptions'] = $course_description->get_data_by_id($_POST['id']);
|
|
|
|
// render to the view
|
|
|
|
$this->view->set_data($data);
|
|
|
|
$this->view->set_layout('layout');
|
|
|
|
$this->view->set_template('edit');
|
|
|
|
$this->view->render();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
|
|
|
|
$data['default_description_titles'] = $course_description->get_default_description_title();
|
|
|
|
$data['default_description_title_editable'] = $course_description->get_default_description_title_editable();
|
|
|
|
$data['default_description_icon'] = $course_description->get_default_description_icon();
|
|
|
|
$data['question'] = $course_description->get_default_question();
|
|
|
|
$data['information'] = $course_description->get_default_information();
|
|
|
|
|
|
|
|
$data['description_type'] = $description_type;
|
|
|
|
if (empty($id)) {
|
|
|
|
// If the ID was not provided, find the first matching description item given the item type
|
|
|
|
$description = $course_description->get_data_by_description_type($description_type);
|
|
|
|
if (count($description) > 0) {
|
|
|
|
$id = $description['id'];
|
|
|
|
}
|
|
|
|
// If no corresponding description is found, edit a new one
|
|
|
|
}
|
|
|
|
if (!empty($id)) {
|
|
|
|
if (isset($_GET['id_session'])) {
|
|
|
|
$session_id = intval($_GET['id_session']);
|
|
|
|
}
|
|
|
|
$course_description_data = $course_description->get_data_by_id(
|
|
|
|
$id,
|
|
|
|
null,
|
|
|
|
$session_id
|
|
|
|
);
|
|
|
|
$data['description_type'] = $course_description_data['description_type'];
|
|
|
|
$data['description_title'] = $course_description_data['description_title'];
|
|
|
|
$data['description_content'] = $course_description_data['description_content'];
|
|
|
|
$data['progress'] = $course_description_data['progress'];
|
|
|
|
$data['descriptions'] = $course_description->get_data_by_description_type(
|
|
|
|
$description_type,
|
|
|
|
null,
|
|
|
|
$session_id
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// render to the view
|
|
|
|
$this->view->set_data($data);
|
|
|
|
$this->view->set_layout('layout');
|
|
|
|
$this->view->set_template('edit');
|
|
|
|
$this->view->render();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* It's used for adding a course description,
|
|
|
|
* render to listing or add view
|
|
|
|
*/
|
|
|
|
public function add()
|
|
|
|
{
|
|
|
|
$course_description = new CourseDescription();
|
|
|
|
$session_id = api_get_session_id();
|
|
|
|
$course_description->set_session_id($session_id);
|
|
|
|
|
|
|
|
$data = array();
|
|
|
|
if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
|
|
|
|
if (!empty($_POST['title']) && !empty($_POST['contentDescription'])) {
|
|
|
|
|
|
|
|
$check = Security::check_token();
|
|
|
|
if ($check) {
|
|
|
|
$title = $_POST['title'];
|
|
|
|
$content = $_POST['contentDescription'];
|
|
|
|
$description_type = $_POST['description_type'];
|
|
|
|
if ($description_type >= ADD_BLOCK) {
|
|
|
|
$course_description->set_description_type($description_type);
|
|
|
|
$course_description->set_title($title);
|
|
|
|
$course_description->set_content($content);
|
|
|
|
$affected_rows = $course_description->insert(api_get_course_int_id());
|
|
|
|
}
|
|
|
|
Security::clear_token();
|
|
|
|
}
|
|
|
|
if ($affected_rows) {
|
|
|
|
$message['add'] = true;
|
|
|
|
}
|
|
|
|
$this->listing(false, $message);
|
|
|
|
} else {
|
|
|
|
$data['error'] = 1;
|
|
|
|
$data['default_description_titles'] = $course_description->get_default_description_title();
|
|
|
|
$data['default_description_title_editable'] = $course_description->get_default_description_title_editable();
|
|
|
|
$data['default_description_icon'] = $course_description->get_default_description_icon();
|
|
|
|
$data['question'] = $course_description->get_default_question();
|
|
|
|
$data['information'] = $course_description->get_default_information();
|
|
|
|
$data['description_title'] = $_POST['title'];
|
|
|
|
$data['description_content'] = $_POST['contentDescription'];
|
|
|
|
$data['description_type'] = $_POST['description_type'];
|
|
|
|
$this->view->set_data($data);
|
|
|
|
$this->view->set_layout('layout');
|
|
|
|
$this->view->set_template('add');
|
|
|
|
$this->view->render();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$data['default_description_titles'] = $course_description->get_default_description_title();
|
|
|
|
$data['default_description_title_editable'] = $course_description->get_default_description_title_editable();
|
|
|
|
$data['default_description_icon'] = $course_description->get_default_description_icon();
|
|
|
|
$data['question'] = $course_description->get_default_question();
|
|
|
|
$data['information'] = $course_description->get_default_information();
|
|
|
|
$data['description_type'] = $course_description->get_max_description_type();
|
|
|
|
// render to the view
|
|
|
|
$this->view->set_data($data);
|
|
|
|
$this->view->set_layout('layout');
|
|
|
|
$this->view->set_template('add');
|
|
|
|
$this->view->render();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* It's used for destroy a course description,
|
|
|
|
* render to listing view
|
|
|
|
* @param int description type
|
|
|
|
*/
|
|
|
|
public function destroy($id)
|
|
|
|
{
|
|
|
|
$course_description = new CourseDescription();
|
|
|
|
$session_id = api_get_session_id();
|
|
|
|
$course_description->set_session_id($session_id);
|
|
|
|
if (!empty($id)) {
|
|
|
|
$course_description->set_id($id);
|
|
|
|
$affected_rows = $course_description->delete();
|
|
|
|
}
|
|
|
|
if ($affected_rows) {
|
|
|
|
$message['destroy'] = true;
|
|
|
|
}
|
|
|
|
$this->listing(false, $message);
|
|
|
|
}
|
|
|
|
}
|