diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/gallery/models/item.php | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/modules/gallery/models/item.php b/modules/gallery/models/item.php index 036ad796..a7f73d0e 100644 --- a/modules/gallery/models/item.php +++ b/modules/gallery/models/item.php @@ -22,6 +22,21 @@ class Item_Model extends ORM_MPTT { protected $sorting = array(); protected $data_file = null; + public function __construct($id=null) { + parent::__construct($id); + + if (!$this->loaded()) { + // Set reasonable defaults + $this->created = time(); + $this->rand_key = ((float)mt_rand()) / (float)mt_getrandmax(); + $this->thumb_dirty = 1; + $this->resize_dirty = 1; + $this->sort_column = "created"; + $this->sort_order = "ASC"; + $this->owner_id = identity::active_user()->id; + } + } + /** * Add a set of restrictions to any following queries to restrict access only to items * viewable by the active user. @@ -298,20 +313,12 @@ class Item_Model extends ORM_MPTT { if (!empty($this->changed) && $significant_changes) { $this->updated = time(); if (!$this->loaded()) { - // Create a new item. Use whatever fields are set, and specify defaults for the rest. - $this->created = $this->updated; - $this->weight = item::get_max_weight(); - $this->rand_key = ((float)mt_rand()) / (float)mt_getrandmax(); - $this->thumb_dirty = 1; - $this->resize_dirty = 1; - if (empty($this->sort_column)) { - $this->sort_column = "created"; - } - if (empty($this->sort_order)) { - $this->sort_order = "ASC"; - } - if (empty($this->owner_id)) { - $this->owner_id = identity::active_user()->id; + // Create a new item. + + // Set a weight if it's missing. We don't do this in the constructor because it's not a + // simple assignment. + if (empty($this->weight)) { + $this->weight = item::get_max_weight(); } // Make an url friendly slug from the name, if necessary @@ -829,15 +836,20 @@ class Item_Model extends ORM_MPTT { $v->add_error("parent_id", "invalid"); } } else { - if (db::build() - ->from("items") - ->where("id", "=", $this->parent_id) - ->where("type", "=", "album") - ->and_open() + $query = db::build() + ->from("items") + ->where("id", "=", $this->parent_id) + ->where("type", "=", "album"); + + // If this is an existing item, make sure the new parent is not part of our hierarchy + if ($this->loaded()) { + $query->and_open() ->where("left_ptr", "<", $this->left_ptr) ->or_where("right_ptr", ">", $this->right_ptr) - ->close() - ->count_records() != 1) { + ->close(); + } + + if ($query->count_records() != 1) { $v->add_error("parent_id", "invalid"); } } |