123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- <?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);
- }
- }
|