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.
302 lines
7.0 KiB
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);
|
|
}
|
|
|
|
} |