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.
		
		
		
		
		
			
		
			
				
					
					
						
							583 lines
						
					
					
						
							17 KiB
						
					
					
				
			
		
		
	
	
							583 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 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;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
     * 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()
 | 
						|
    {
 | 
						|
        $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
 | 
						|
        $condition_session = api_get_session_condition($this->session_id, true, true);
 | 
						|
        $course_id = api_get_course_int_id();
 | 
						|
        $sql = "SELECT * FROM $tbl_course_description
 | 
						|
		        WHERE c_id = $course_id $condition_session
 | 
						|
		        ORDER BY id ";
 | 
						|
        $rs = Database::query($sql);
 | 
						|
        $data = array();
 | 
						|
        while ($description = Database::fetch_array($rs)) {
 | 
						|
            $data['descriptions'][$description['id']] = Security::remove_XSS($description, STUDENT);
 | 
						|
        }
 | 
						|
 | 
						|
        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
 | 
						|
    ) {
 | 
						|
        $tbl_course_description = 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 $tbl_course_description
 | 
						|
		        WHERE c_id = $courseId AND description_type='$description_type' $condition_session ";
 | 
						|
        $rs = Database::query($sql);
 | 
						|
        $data = array();
 | 
						|
        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)
 | 
						|
    {
 | 
						|
        $tbl_course_description = 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 $tbl_course_description
 | 
						|
		        WHERE c_id = $course_id AND id='$id' $condition_session ";
 | 
						|
        $rs = Database::query($sql);
 | 
						|
        $data = array();
 | 
						|
        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()
 | 
						|
    {
 | 
						|
        $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
 | 
						|
        $course_id = api_get_course_int_id();
 | 
						|
 | 
						|
        $sql = "SELECT MAX(description_type) as MAX
 | 
						|
                FROM $tbl_course_description
 | 
						|
		        WHERE c_id = $course_id AND session_id='" . $this->session_id . "'";
 | 
						|
        $rs = Database::query($sql);
 | 
						|
        $max = Database::fetch_array($rs);
 | 
						|
        $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)
 | 
						|
    {
 | 
						|
        $tbl_stats_item_property = 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($tbl_stats_item_property, $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()
 | 
						|
    {
 | 
						|
        $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
 | 
						|
        $course_id = api_get_course_int_id();
 | 
						|
        $sql = "DELETE FROM $tbl_course_description
 | 
						|
			 	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)
 | 
						|
    {
 | 
						|
        $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 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;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get description titles editable by default
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function get_default_description_title_editable()
 | 
						|
    {
 | 
						|
        $default_description_title_editable = array();
 | 
						|
        $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 = array();
 | 
						|
        $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 = array();
 | 
						|
        $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 = array();
 | 
						|
        $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
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function set_id($id)
 | 
						|
    {
 | 
						|
        $this->id = $id;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set description's course id
 | 
						|
     * @param int $id Course ID
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    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
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    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;
 | 
						|
    }
 | 
						|
}
 | 
						|
 |