You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
610 lines
17 KiB
610 lines
17 KiB
<?php
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
/**
|
|
* This file contains a class used like library provides functions for
|
|
* course description tool. It's also used like model to
|
|
* course_description_controller (MVC pattern).
|
|
*
|
|
* @author Christian Fasanando <christian1827@gmail.com>
|
|
*
|
|
* @package chamilo.course_description
|
|
*/
|
|
|
|
/**
|
|
* Class CourseDescription course descriptions.
|
|
*
|
|
* @package chamilo.course_description
|
|
*/
|
|
class CourseDescription
|
|
{
|
|
private $id;
|
|
private $course_id;
|
|
private $title;
|
|
private $content;
|
|
private $session_id;
|
|
private $description_type;
|
|
private $progress;
|
|
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Returns an array of objects of type CourseDescription corresponding to
|
|
* a specific course, without session ids (session id = 0).
|
|
*
|
|
* @param int $course_id
|
|
*
|
|
* @return array Array of CourseDescriptions
|
|
*/
|
|
public static function get_descriptions($course_id)
|
|
{
|
|
// Get course code
|
|
$course_info = api_get_course_info_by_id($course_id);
|
|
if (!empty($course_info)) {
|
|
$course_id = $course_info['real_id'];
|
|
} else {
|
|
return [];
|
|
}
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
$sql = "SELECT * FROM $table
|
|
WHERE c_id = $course_id AND session_id = '0'";
|
|
$sql_result = Database::query($sql);
|
|
$results = [];
|
|
while ($row = Database::fetch_array($sql_result)) {
|
|
$desc_tmp = new CourseDescription();
|
|
$desc_tmp->set_id($row['id']);
|
|
$desc_tmp->set_title($row['title']);
|
|
|
|
$desc_tmp->set_content($row['content']);
|
|
$desc_tmp->set_session_id($row['session_id']);
|
|
$desc_tmp->set_description_type($row['description_type']);
|
|
$desc_tmp->set_progress($row['progress']);
|
|
$results[] = $desc_tmp;
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
/**
|
|
* Get all data of course description by session id,
|
|
* first you must set session_id property with the object CourseDescription.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_description_data()
|
|
{
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
$condition_session = api_get_session_condition(
|
|
$this->session_id,
|
|
true,
|
|
true
|
|
);
|
|
$course_id = $this->course_id ?: api_get_course_int_id();
|
|
$sql = "SELECT * FROM $table
|
|
WHERE c_id = $course_id $condition_session
|
|
ORDER BY id ";
|
|
$rs = Database::query($sql);
|
|
$data = [];
|
|
while ($description = Database::fetch_array($rs)) {
|
|
$data['descriptions'][$description['id']] = $description;
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Get all data by description and session id,
|
|
* first you must set session_id property with the object CourseDescription.
|
|
*
|
|
* @param int $description_type Description type
|
|
* @param string $courseId Course code (optional)
|
|
* @param int $session_id Session id (optional)
|
|
*
|
|
* @return array List of fields from the descriptions found of the given type
|
|
*/
|
|
public function get_data_by_description_type(
|
|
$description_type,
|
|
$courseId = null,
|
|
$session_id = null
|
|
) {
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
if (empty($courseId)) {
|
|
$courseId = api_get_course_int_id();
|
|
}
|
|
|
|
if (!isset($session_id)) {
|
|
$session_id = $this->session_id;
|
|
}
|
|
$condition_session = api_get_session_condition($session_id);
|
|
$description_type = intval($description_type);
|
|
$sql = "SELECT * FROM $table
|
|
WHERE
|
|
c_id = $courseId AND
|
|
description_type = '$description_type'
|
|
$condition_session ";
|
|
$rs = Database::query($sql);
|
|
$data = [];
|
|
if ($description = Database::fetch_array($rs)) {
|
|
$data['description_title'] = $description['title'];
|
|
$data['description_content'] = $description['content'];
|
|
$data['progress'] = $description['progress'];
|
|
$data['id'] = $description['id'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* @param int $id
|
|
* @param string $course_code
|
|
* @param int $session_id
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_data_by_id($id, $course_code = '', $session_id = null)
|
|
{
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
$course_id = api_get_course_int_id();
|
|
|
|
if (!isset($session_id)) {
|
|
$session_id = $this->session_id;
|
|
}
|
|
$condition_session = api_get_session_condition($session_id);
|
|
if (!empty($course_code)) {
|
|
$course_info = api_get_course_info($course_code);
|
|
$course_id = $course_info['real_id'];
|
|
}
|
|
$id = intval($id);
|
|
$sql = "SELECT * FROM $table
|
|
WHERE c_id = $course_id AND id='$id' $condition_session ";
|
|
$rs = Database::query($sql);
|
|
$data = [];
|
|
if ($description = Database::fetch_array($rs)) {
|
|
$data['description_type'] = $description['description_type'];
|
|
$data['description_title'] = $description['title'];
|
|
$data['description_content'] = $description['content'];
|
|
$data['progress'] = $description['progress'];
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Get maximum description type by session id,
|
|
* first you must set session_id properties with the object CourseDescription.
|
|
*
|
|
* @return int maximum description time adding one
|
|
*/
|
|
public function get_max_description_type()
|
|
{
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
$course_id = api_get_course_int_id();
|
|
|
|
$sql = "SELECT MAX(description_type) as MAX
|
|
FROM $table
|
|
WHERE c_id = $course_id AND session_id='".$this->session_id."'";
|
|
$rs = Database::query($sql);
|
|
$max = Database::fetch_array($rs);
|
|
|
|
if ($max['MAX'] >= 8) {
|
|
$description_type = 8;
|
|
} else {
|
|
$description_type = $max['MAX'] + 1;
|
|
}
|
|
|
|
if ($description_type < ADD_BLOCK) {
|
|
$description_type = ADD_BLOCK;
|
|
}
|
|
|
|
return $description_type;
|
|
}
|
|
|
|
/**
|
|
* Insert a description to the course_description table,
|
|
* first you must set description_type, title, content, progress and
|
|
* session_id properties with the object CourseDescription.
|
|
*
|
|
* @return int affected rows
|
|
*/
|
|
public function insert()
|
|
{
|
|
if (empty($this->course_id)) {
|
|
$course_id = api_get_course_int_id();
|
|
} else {
|
|
$course_id = $this->course_id;
|
|
}
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
|
|
$params = [
|
|
'c_id' => $course_id,
|
|
'description_type' => $this->description_type,
|
|
'title' => $this->title,
|
|
'content' => $this->content,
|
|
'progress' => intval($this->progress),
|
|
'session_id' => $this->session_id,
|
|
];
|
|
|
|
$last_id = Database::insert($table, $params);
|
|
|
|
if ($last_id > 0) {
|
|
$sql = "UPDATE $table SET id = iid WHERE iid = $last_id";
|
|
Database::query($sql);
|
|
|
|
// insert into item_property
|
|
api_item_property_update(
|
|
api_get_course_info(),
|
|
TOOL_COURSE_DESCRIPTION,
|
|
$last_id,
|
|
'CourseDescriptionAdded',
|
|
api_get_user_id()
|
|
);
|
|
}
|
|
|
|
return $last_id > 0 ? 1 : 0;
|
|
}
|
|
|
|
/**
|
|
* Insert a row like history inside track_e_item_property table
|
|
* first you must set description_type, title, content, progress and
|
|
* session_id properties with the object CourseDescription.
|
|
*
|
|
* @param int $description_type
|
|
*
|
|
* @return int affected rows
|
|
*/
|
|
public function insert_stats($description_type)
|
|
{
|
|
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ITEM_PROPERTY);
|
|
$description_id = $this->get_id_by_description_type($description_type);
|
|
$course_id = api_get_course_int_id();
|
|
$course_code = api_get_course_id();
|
|
$item_property_id = api_get_item_property_id(
|
|
$course_code,
|
|
TOOL_COURSE_DESCRIPTION,
|
|
$description_id
|
|
);
|
|
|
|
$params = [
|
|
'c_id' => api_get_course_int_id(),
|
|
'course_id' => $course_id,
|
|
'item_property_id' => $item_property_id,
|
|
'title' => $this->title,
|
|
'content' => $this->content,
|
|
'progress' => $this->progress,
|
|
'lastedit_date' => api_get_utc_datetime(),
|
|
'lastedit_user_id' => api_get_user_id(),
|
|
'session_id' => $this->session_id,
|
|
];
|
|
|
|
$result = Database::insert($table, $params);
|
|
|
|
return $result ? 1 : 0;
|
|
}
|
|
|
|
/**
|
|
* Update a description, first you must set description_type, title, content, progress
|
|
* and session_id properties with the object CourseDescription.
|
|
*
|
|
* @return int affected rows
|
|
*/
|
|
public function update()
|
|
{
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
$params = [
|
|
'title' => $this->title,
|
|
'content' => $this->content,
|
|
'progress' => intval($this->progress),
|
|
];
|
|
|
|
Database::update(
|
|
$table,
|
|
$params,
|
|
[
|
|
'id = ? AND session_id = ? AND c_id = ?' => [
|
|
$this->id,
|
|
$this->session_id,
|
|
$this->course_id ? $this->course_id : api_get_course_int_id(),
|
|
],
|
|
]
|
|
);
|
|
|
|
if ($this->id > 0) {
|
|
// Insert into item_property
|
|
api_item_property_update(
|
|
api_get_course_info(),
|
|
TOOL_COURSE_DESCRIPTION,
|
|
$this->id,
|
|
'CourseDescriptionUpdated',
|
|
api_get_user_id()
|
|
);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/**
|
|
* Delete a description, first you must set description_type and session_id
|
|
* properties with the object CourseDescription.
|
|
*
|
|
* @return int affected rows
|
|
*/
|
|
public function delete()
|
|
{
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
$course_id = api_get_course_int_id();
|
|
$sql = "DELETE FROM $table
|
|
WHERE
|
|
c_id = $course_id AND
|
|
id = '".intval($this->id)."' AND
|
|
session_id = '".intval($this->session_id)."'";
|
|
$result = Database::query($sql);
|
|
$affected_rows = Database::affected_rows($result);
|
|
if ($this->id > 0) {
|
|
//insert into item_property
|
|
api_item_property_update(
|
|
api_get_course_info(),
|
|
TOOL_COURSE_DESCRIPTION,
|
|
$this->id,
|
|
'CourseDescriptionDeleted',
|
|
api_get_user_id()
|
|
);
|
|
}
|
|
|
|
return $affected_rows;
|
|
}
|
|
|
|
/**
|
|
* Get description id by description type.
|
|
*
|
|
* @param int $description_type
|
|
*
|
|
* @return int description id
|
|
*/
|
|
public function get_id_by_description_type($description_type)
|
|
{
|
|
$table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
|
|
$course_id = api_get_course_int_id();
|
|
|
|
$sql = "SELECT id FROM $table
|
|
WHERE
|
|
c_id = $course_id AND
|
|
description_type = '".intval($description_type)."'";
|
|
$rs = Database::query($sql);
|
|
$row = Database::fetch_array($rs);
|
|
$description_id = $row['id'];
|
|
|
|
return $description_id;
|
|
}
|
|
|
|
/**
|
|
* Get description titles by default.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_default_description_title()
|
|
{
|
|
$default_description_titles = [];
|
|
$default_description_titles[1] = get_lang('GeneralDescription');
|
|
$default_description_titles[2] = get_lang('Objectives');
|
|
$default_description_titles[3] = get_lang('Topics');
|
|
$default_description_titles[4] = get_lang('Methodology');
|
|
$default_description_titles[5] = get_lang('CourseMaterial');
|
|
$default_description_titles[6] = get_lang('HumanAndTechnicalResources');
|
|
$default_description_titles[7] = get_lang('Assessment');
|
|
$default_description_titles[8] = get_lang('Other');
|
|
|
|
return $default_description_titles;
|
|
}
|
|
|
|
/**
|
|
* Get description titles editable by default.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_default_description_title_editable()
|
|
{
|
|
$default_description_title_editable = [];
|
|
$default_description_title_editable[1] = true;
|
|
$default_description_title_editable[2] = true;
|
|
$default_description_title_editable[3] = true;
|
|
$default_description_title_editable[4] = true;
|
|
$default_description_title_editable[5] = true;
|
|
$default_description_title_editable[6] = true;
|
|
$default_description_title_editable[7] = true;
|
|
//$default_description_title_editable[8] = true;
|
|
|
|
return $default_description_title_editable;
|
|
}
|
|
|
|
/**
|
|
* Get description icons by default.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_default_description_icon()
|
|
{
|
|
$default_description_icon = [];
|
|
$default_description_icon[1] = 'info.png';
|
|
$default_description_icon[2] = 'objective.png';
|
|
$default_description_icon[3] = 'topics.png';
|
|
$default_description_icon[4] = 'strategy.png';
|
|
$default_description_icon[5] = 'laptop.png';
|
|
$default_description_icon[6] = 'teacher.png';
|
|
$default_description_icon[7] = 'assessment.png';
|
|
//$default_description_icon[8]= 'porcent.png';
|
|
$default_description_icon[8] = 'wizard.png';
|
|
|
|
return $default_description_icon;
|
|
}
|
|
|
|
/**
|
|
* Get questions by default for help.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_default_question()
|
|
{
|
|
$question = [];
|
|
$question[1] = get_lang('GeneralDescriptionQuestions');
|
|
$question[2] = get_lang('ObjectivesQuestions');
|
|
$question[3] = get_lang('TopicsQuestions');
|
|
$question[4] = get_lang('MethodologyQuestions');
|
|
$question[5] = get_lang('CourseMaterialQuestions');
|
|
$question[6] = get_lang('HumanAndTechnicalResourcesQuestions');
|
|
$question[7] = get_lang('AssessmentQuestions');
|
|
//$question[8]= get_lang('ThematicAdvanceQuestions');
|
|
|
|
return $question;
|
|
}
|
|
|
|
/**
|
|
* Get informations by default for help.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_default_information()
|
|
{
|
|
$information = [];
|
|
$information[1] = get_lang('GeneralDescriptionInformation');
|
|
$information[2] = get_lang('ObjectivesInformation');
|
|
$information[3] = get_lang('TopicsInformation');
|
|
$information[4] = get_lang('MethodologyInformation');
|
|
$information[5] = get_lang('CourseMaterialInformation');
|
|
$information[6] = get_lang('HumanAndTechnicalResourcesInformation');
|
|
$information[7] = get_lang('AssessmentInformation');
|
|
//$information[8]= get_lang('ThematicAdvanceInformation');
|
|
|
|
return $information;
|
|
}
|
|
|
|
/**
|
|
* Set description id.
|
|
*/
|
|
public function set_id($id)
|
|
{
|
|
$this->id = $id;
|
|
}
|
|
|
|
/**
|
|
* Set description's course id.
|
|
*
|
|
* @param int $id Course ID
|
|
*/
|
|
public function set_course_id($id)
|
|
{
|
|
$this->course_id = intval($id);
|
|
}
|
|
|
|
/**
|
|
* Set description title.
|
|
*
|
|
* @param string $title
|
|
*/
|
|
public function set_title($title)
|
|
{
|
|
$this->title = $title;
|
|
}
|
|
|
|
/**
|
|
* Set description content.
|
|
*
|
|
* @param string $content
|
|
*/
|
|
public function set_content($content)
|
|
{
|
|
$this->content = $content;
|
|
}
|
|
|
|
/**
|
|
* Set description session id.
|
|
*
|
|
* @param int $session_id
|
|
*/
|
|
public function set_session_id($session_id)
|
|
{
|
|
$this->session_id = $session_id;
|
|
}
|
|
|
|
/**
|
|
* Set description type.
|
|
*/
|
|
public function set_description_type($description_type)
|
|
{
|
|
$this->description_type = $description_type;
|
|
}
|
|
|
|
/**
|
|
* Set progress of a description.
|
|
*
|
|
* @param string $progress
|
|
*/
|
|
public function set_progress($progress)
|
|
{
|
|
$this->progress = $progress;
|
|
}
|
|
|
|
/**
|
|
* get description id.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function get_id()
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
/**
|
|
* get description title.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_title()
|
|
{
|
|
return $this->title;
|
|
}
|
|
|
|
/**
|
|
* get description content.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_content()
|
|
{
|
|
return $this->content;
|
|
}
|
|
|
|
/**
|
|
* get session id.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function get_session_id()
|
|
{
|
|
return $this->session_id;
|
|
}
|
|
|
|
/**
|
|
* get description type.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function get_description_type()
|
|
{
|
|
return $this->description_type;
|
|
}
|
|
|
|
/**
|
|
* get progress of a description.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function get_progress()
|
|
{
|
|
return $this->progress;
|
|
}
|
|
}
|
|
|