array("rules" => array("required", "length[4,255]"))); /** * @see ORM::delete() */ public function delete($id=null) { $old = clone $this; module::event("group_before_delete", $this); parent::delete($id); module::event("group_deleted", $old); } public function users() { return $this->users->find_all(); } /** * Add some custom per-instance rules. */ public function validate($array=null) { // validate() is recursive, only modify the rules on the outermost call. if (!$array) { $this->rules["name"]["callbacks"] = array(array($this, "valid_name")); } parent::validate($array); } public function save() { if (!$this->loaded()) { // New group parent::save(); module::event("group_created", $this); } else { // Updated group $original = clone $this->original(); parent::save(); module::event("group_updated", $original, $this); } return $this; } /** * Validate the user name. Make sure there are no conflicts. */ public function valid_name(Validation $v, $field) { if (db::build()->from("groups") ->where("name", "=", $this->name) ->where("id", "<>", $this->id) ->count_records() == 1) { $v->add_error("name", "in_use"); } } }