Chamilo is a learning management system focused on ease of use and accessibility
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.
chamilo-lms/main/course_description/course_description.class.php

627 lines
18 KiB

<?php
namespace CourseDescription;
/**
* Object Model for the "Course Description" database table. Allows to
*
* - query database
* - create/insert new course descriptions
* - update/edit course descriptions
* - delete course descriptions
*
* Course descriptions used to provide descriptions for course/sessions.
* A course/session can have several descriptions associated to it from various types.
* Course descriptions are primarily made primarily of
*
* - a title
* - some content
* - a type (for ex: info, objectives, etc)
*
* Usage:
*
* Create
*
* $des = new CourseDescription();
* $des->set_title('...');
* $des->set_content('...');
* $des->set_description_type(...);
* $des->insert();
*
* Update
*
* $des = CourseDescription::get_by_id(..., ...);
* $des->set_title('...');
* $des->update();
*
* Delete
*
* $des = CourseDescription::get_by_id(..., ...);
* $des->delete();
*
* @package chamilo.course_description
* @author Christian Fasanando <christian1827@gmail.com>
* @author Laurent Opprecht <laurent@opprecht.info> for the University of Geneva
* @licence /license.txt
*/
class CourseDescription
{
/**
* Return the repository.
*
* @return \CourseDescription\CourseDescriptionRepository
*/
public static function repository()
{
return CourseDescriptionRepository::instance();
}
/**
* Returns the list of all available types
*
* @return array
*/
public static function get_types()
{
return CourseDescriptionType::all();
}
// /**
// * Deprecated (still used by web services)
// *
// * @param int Course id
// * @deprecated use get_descriptions_by_course
// * @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 array();
// }
// $t_course_desc = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
// $sql = "SELECT * FROM $t_course_desc WHERE c_id = $course_id AND session_id = '0';";
// $sql_result = Database::query($sql);
// $results = array();
// 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;
// }
/**
*
* @param object $data
* @return \CourseDescription\CourseDescription
*/
public static function create($data = null)
{
return new self($data);
}
protected $c_id;
protected $id;
protected $title;
protected $content;
protected $session_id;
protected $description_type;
protected $progress;
protected $type = null;
function __construct($data = null)
{
if ($data) {
foreach ($this as $key => $value) {
if (isset($data->{$key})) {
$this->{$key} = $data->{$key};
}
}
}
}
function __get($name)
{
$f = array($this, "get_$name");
return call_user_func($f);
}
function __isset($name)
{
$f = array($this, "get_$name");
return is_callable($f);
}
function __set($name, $value)
{
$f = array($this, "set_$name");
if (!is_callable($f)) {
return;
}
call_user_func($f, $value);
}
// /**
// * Insert the course description object into the course_description table.
// *
// * @return bool True on success, false on failure
// */
// public function insert()
// {
// $course_id = $this->get_c_id();
// $description_type = $this->get_description_type();
// $title = Database::escape_string($this->get_title());
// $content = Database::escape_string($this->get_content());
// $progress = $this->get_progress();
// $progress = $progress ? $progress : '0';
// $session_id = $this->get_session_id();
//
// $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
// $sql = "INSERT IGNORE INTO $table SET
// c_id = $course_id,
// description_type = $description_type,
// title = '$title',
// content = '$content',
// progress = $progress,
// session_id = $session_id";
//
// Database::query($sql);
//
// $id = Database::insert_id();
// if (empty($id)) {
// return false;
// }
// $this->id = $id;
//
// /**
// * @todo: course info should come from c_id
// */
// api_item_property_update(api_get_course_info(), TOOL_COURSE_DESCRIPTION, $id, 'CourseDescriptionAdded', api_get_user_id());
//
// return true;
// }
// /**
// * Insert a row like history inside track_e_item_property table
// *
// * @param int description type
// * @return int affected rows
// */
// public function insert_stats($description_type)
// {
// $tbl_stats_item_property = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ITEM_PROPERTY);
// $description_id = $this->get_id_by_description_type($description_type);
// $course_id = api_get_real_course_id();
// $course_code = api_get_course_id();
// $item_property_id = api_get_item_property_id($course_code, TOOL_COURSE_DESCRIPTION, $description_id);
// $sql = "INSERT IGNORE INTO $tbl_stats_item_property SET
// c_id = " . api_get_course_int_id() . ",
// course_id = '$course_id',
// item_property_id = '$item_property_id',
// title = '" . Database::escape_string($this->title) . "',
// content = '" . Database::escape_string($this->content) . "',
// progress = '" . intval($this->progress) . "',
// lastedit_date = '" . date('Y-m-d H:i:s') . "',
// lastedit_user_id = '" . api_get_user_id() . "',
// session_id = '" . intval($this->session_id) . "'";
// Database::query($sql);
// $affected_rows = Database::affected_rows();
// return $affected_rows;
// }
// /**
// * Update a course description object to the database.
// *
// * @return bool True on success, false on failure.
// */
// public function update()
// {
// $course_id = $this->get_c_id();
// $id = $this->get_id();
// $description_type = $this->get_description_type();
// $title = Database::escape_string($this->get_title());
// $content = Database::escape_string($this->get_content());
// $progress = $this->get_progress();
// $progress = $progress ? $progress : '0';
// $session_id = $this->get_session_id();
//
// $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
// $sql = "UPDATE $table SET
// title = '$title',
// content = '$content',
// progress = $progress
// WHERE id = $id AND
// c_id = $course_id ";
//
// Database::query($sql);
// $result = (bool) Database::affected_rows();
//
// if ($result) {
// //insert into item_property
// /**
// * @todo: course info should come from c_id
// */
// api_item_property_update(api_get_course_info(), TOOL_COURSE_DESCRIPTION, $this->id, 'CourseDescriptionUpdated', api_get_user_id());
// }
// return $result;
// }
// /**
// * Delete a course description object from the database.
// *
// * @return bool True on success false on failure
// */
// public function delete()
// {
// $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
// $course_id = $this->get_c_id();
// $id = $this->get_id();
//
// $sql = "DELETE FROM $table WHERE c_id = $course_id AND id = $id";
// Database::query($sql);
// $result = (bool) Database::affected_rows();
// if ($result) {
// /**
// * @todo: should get course info from $this->c_id
// */
// api_item_property_update(api_get_course_info(), TOOL_COURSE_DESCRIPTION, $this->id, 'CourseDescriptionDeleted', api_get_user_id());
// }
// return $result;
// }
// /**
// * Get description id by description type
// * @param int description type
// * @return int description id
// */
// public function get_id_by_description_type($description_type)
// {
// $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
// $course_id = api_get_course_int_id();
//
// $sql = "SELECT id FROM $tbl_course_description 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 thematic progress in porcent for a course,
// * first you must set session_id property with the object CourseDescription
// * @param bool true for showing a icon about the progress, false otherwise (optional)
// * @param int Description type (optional)
// * @return string img html
// */
// public function get_progress_porcent($with_icon = false, $description_type = THEMATIC_ADVANCE)
// {
// $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
// $session_id = intval($session_id);
// $course_id = api_get_course_int_id();
//
// $sql = "SELECT progress FROM $tbl_course_description WHERE c_id = $course_id AND description_type = '" . intval($description_type) . "' AND session_id = '" . intval($this->session_id) . "' ";
// $rs = Database::query($sql);
// $progress = '';
// $img = '';
// $title = '0%';
// $image = 'level_0.png';
// if (Database::num_rows($rs) > 0) {
// $row = Database::fetch_array($rs);
// $progress = $row['progress'] . '%';
// $image = 'level_' . $row['progress'] . '.png';
// }
// if ($with_icon) {
// $img = Display::return_icon($image, get_lang('ThematicAdvance'), array('style' => 'vertical-align:middle'));
// }
// $progress = $img . $progress;
// return $progress;
// }
// /**
// * Get description titles by default
// * @return array
// */
// public function get_default_description_title()
// {
// $default_description_titles = array();
// $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;
// }
/**
* The course id.
*
* @see get_course() property to get access to the course object
* @return int
*/
public function get_c_id()
{
return $this->c_id;
}
/**
* @return void
*/
public function set_c_id($value)
{
$this->c_id = intval($value);
}
/**
* The id of the object.
*
* @return int
*/
public function get_id()
{
return $this->id;
}
/**
*
* @return void
*/
public function set_id($value)
{
$this->id = intval($value);
}
/**
* The title of the course description.
*
* @return string
*/
public function get_title()
{
return $this->title;
}
/**
*
* @return void
*/
public function set_title($title)
{
$this->title = $title;
}
/**
* The content/description of the course description.
* @return string
*/
public function get_content()
{
return $this->content;
}
/**
*
* @return void
*/
public function set_content($content)
{
$this->content = $content;
}
/**
* The session id the object is associated with.
*
* @return int
*/
public function get_session_id()
{
return $this->session_id;
}
/**
*
* @return void
*/
public function set_session_id($value)
{
$this->session_id = intval($value);
}
/**
* The type of the course description. Should match one of the id returns
* by CourseDescription::get_types().
*
* @return int
*/
public function get_description_type()
{
return $this->description_type;
}
/**
*
* @return void
*/
public function set_description_type($value)
{
$this->description_type = intval($value);
}
/**
* ???
* @return int
*/
public function get_progress()
{
return $this->progress;
}
/**
*
* @return void
*/
public function set_progress($value)
{
$this->progress = intval($value);
}
/**
* Return one type from its id
*
* @return \CourseDescription\CourseDescriptionType
*/
public function get_type()
{
$type_id = $this->get_description_type();
if ($this->type && $this->type->id == $type_id) {
return $this->type;
}
$this->type = CourseDescriptionType::repository()->find_one_by_id($type_id);
return $this->type;
}
/**
* Returns the course object this object is associated with.
* Lazy loaded from the value returned by get_c_id().
* @return \Model\Course
*/
public function get_course()
{
if ($this->course && $this->course->get_id() == $this->c_id) {
return $this->course;
}
$this->course = Course::get_by_id($this->c_id);
return $this->course;
}
/**
* The item property this object is associated with.
*
* @return \Model\ItemProperty
*/
public function get_item_property()
{
if ($this->item_property && $this->item_property->get_c_id() == $this->c_id && $this->item_property->get_ref() == $this->id) {
return $this->item_property;
}
$this->item_property = ItemProperty::get_by_ref($this->id, TOOL_COURSE_DESCRIPTION);
return $this->item_property;
}
}
//
///**
// * The common routes (urls) for course description objects:
// *
// * - create new course description
// * - edit course description
// * - delete course description
// *
// * @author Laurent Opprecht <laurent@opprecht.info> for the University of Geneva
// * @licence /license.txt
// */
//class CourseDescriptionRoutes
//{
//
// /**
// *
// * @return CourseDescriptionRoutes
// */
// public static function instance()
// {
// static $result = null;
// if (empty($result)) {
// $result = new self();
// }
// return $result;
// }
//
// protected function __construct()
// {
// ;
// }
//
// /**
// * Returns the url used to create a new course description from a specific type.
// *
// * @param CourseDescriptionType $type
// * @param bool $html True to html escape the url, false otherwise.
// * @return string
// */
// function create($type = null, $html = true)
// {
// $type = is_object($type) ? $type->get_id() : (int) $type;
//
// $params = Uri::course_params();
// $params['action'] = 'add';
// if ($type) {
// $params['description_type'] = $type;
// }
// $result = Chamilo::url('/main/course_description/index.php', $params, $html);
// return $result;
// }
//
// /**
// * The url to edit a course description object
// *
// * @param CourseDescription $description
// * @param bool $html True to html escape the url, false otherwise.
// * @return string
// */
// function edit($description, $html = true)
// {
// $params = array();
// $params['id'] = $description->get_id();
// $params['cidReq'] = api_get_course_id();
// $params['id_session'] = $description->get_session_id();
// $params['description_type'] = $description->get_description_type();
// $params['action'] = 'edit';
// $result = Chamilo::url('/main/course_description/index.php', $params, $html);
// return $result;
// }
//
// /**
// * The index route to list all course descriptions for the current course/session
// *
// * @param bool $html True to html escape the url, false otherwise.
// * @return type
// */
// function index($html = true)
// {
// $params = Uri::course_params();
// $result = Chamilo::url('/main/course_description/index.php', $params, $html);
// return $result;
// }
//
// /**
// * Url to delete a course description object.
// *
// * @param CourseDescription $description
// * @param bool $html True to html escape the url, false otherwise.
// * @return string
// */
// function delete($description, $html = true)
// {
// $params = array();
// $params['id'] = $description->get_id();
// $params['cidReq'] = api_get_course_id();
// $params['id_session'] = $description->get_session_id();
// $params['description_type'] = $description->get_description_type();
// $params['action'] = 'delete';
// $result = Chamilo::url('/main/course_description/index.php', $params, $html);
// return $result;
// }
//
//}
//