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/inc/lib/document.class.php

302 lines
7.0 KiB

<?php
namespace Model;
use Database;
use ResultSet;
/**
* Represent a database "document" object - i.e. a file or a folder.
*
* Note:
*
* Each database column is mapped to a property.
*
* The item_property table is available through its own property but is loaded
* alongside document data.
*
* Some db query functions exists in this class and would need to be adapted
* to Symphony once it is moved to production. Yet the object structure should
* stay.
*
* @see \Model\ItemProperty
* @see table c_document
* @license see /license.txt
* @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva
*/
class Document
{
/**
*
* @param string $where
* @return \ResultSet
*/
public static function query($where)
{
$table_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY);
$table_document = Database::get_course_table(TABLE_DOCUMENT);
$tool = TOOL_DOCUMENT;
$sql = "SELECT doc.*,
prop.id AS property_id,
prop.tool,
prop.insert_user_id,
prop.insert_date,
prop.lastedit_date,
prop.ref,
prop.lastedit_type,
prop.lastedit_user_id,
prop.to_group_id,
prop.to_user_id,
prop.visibility,
prop.start_visible,
prop.end_visible,
prop.id_session
FROM
$table_document AS doc,
$table_item_property AS prop
WHERE
(doc.id = prop.ref AND
doc.c_id = prop.c_id AND
prop.tool = '$tool')";
$sql .= $where ? "AND ($where)" : '';
$result = new ResultSet($sql);
return $result->return_type(__CLASS__);
}
/**
*
* @param int|Course $c_id
* @param int $id
* @return \Model\Document
*/
public static function get_by_id($c_id, $id)
{
$c_id = is_object($c_id) ? $c_id->get_id() : (int) $c_id;
return self::query("doc.c_id = $c_id AND doc.id = $id")->first();
}
/**
*
* @param int|Course $c_id
* @param int $id
* @return \Model\Document
*/
public static function get_by_path($c_id, $path)
{
$c_id = is_object($c_id) ? $c_id->get_id() : (int) $c_id;
return self::query("doc.c_id = $c_id AND doc.path = '$path'")->first();
}
protected $c_id = 0;
protected $id = 0;
protected $path = '';
protected $comment = '';
protected $title = '';
protected $filetype = '';
protected $size = 0;
protected $readonly = false;
protected $session_id = 0;
protected $course = null;
protected $item_property = null;
public function __construct($data)
{
$data = (object) $data;
$this->c_id = (int) $data->c_id;
$this->id = (int) $data->id;
$this->path = $data->path;
$this->comment = $data->comment;
$this->title = $data->title;
$this->filetype = $data->filetype;
$this->size = (int) $data->size;
$this->readonly = (bool) $data->readonly;
$this->session_id = (int) $data->session_id;
$this->course = null;
if (isset($data->property_id)) {
$property = (array) $data;
$property = (object) $property;
$property->id = $property->property_id;
$this->item_property = ItemProperty::create($property);
} else {
$this->item_property = null;
}
}
public function get_c_id()
{
return $this->c_id;
}
public function set_c_id($value)
{
$this->c_id = (int) $value;
$this->course = null;
$this->item_property = null;
}
public function get_id()
{
return $this->id;
}
public function set_id($value)
{
$this->id = (int) $value;
$this->item_property = null;
}
public function get_path()
{
return $this->path;
}
public function set_path($value)
{
$this->path = $value;
}
public function get_comment()
{
return $this->comment;
}
public function set_comment($value)
{
$this->comment = $value;
}
public function get_title()
{
return $this->title;
}
public function set_title($value)
{
$this->title = $value;
}
public function get_filetype()
{
return $this->filetype;
}
public function set_filetype($value)
{
$this->filetype = $value;
}
public function get_size()
{
return $this->size;
}
public function set_size($value)
{
$this->size = (int) $value;
}
public function get_readonly()
{
return $this->readonly;
}
public function set_readonly($value)
{
$this->readonly = (bool) $value;
}
public function get_session_id()
{
return $this->session_id;
}
public function set_session_id($value)
{
$this->session_id = (int) $value;
}
public function is_folder()
{
return $this->filetype == 'folder';
}
public function is_file()
{
return $this->filetype == 'file';
}
public function is_visible()
{
$this->get_item_property()->get_visibility() == 1;
}
public function is_accessible()
{
return api_is_allowed_to_edit() || $this->is_visible();
}
/**
*
* @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;
}
/**
*
* @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_DOCUMENT);
return $this->item_property;
}
public function get_absolute_path()
{
$course = $this->get_course();
return $course->get_path() . 'document' . $this->path;
}
public function __toString()
{
return $this->get_absolute_path();
}
/**
*
* @param bool $all
* @return ResultSet|array
*/
public function get_children($all = false)
{
if (!$this->is_folder()) {
return array();
}
$path = $this->path;
$c_id = $this->c_id;
if ($this->all) {
$where = "doc.c_id = $c_id AND doc.path LIKE '$path/%'";
} else {
$where = "doc.c_id = $c_id AND doc.path LIKE '$path/%' AND doc.path NOT LIKE '$path/%/%'";
}
return self::query($where);
}
}