type}s}/$item->id"); } public function _create($item) { // @todo Productionize this code // 1) Add security checks $user = Session::instance()->get("user"); $owner_id = $user ? $user->id : $item->owner_id; switch ($this->input->post("type")) { case "album": $album = album::create( $item->id, $this->input->post("name"), $this->input->post("title", $this->input->post("name")), $this->input->post("description"), $owner_id); url::redirect("albums/{$album->id}"); break; case "photo": if (is_array($_FILES["file"]["name"])) { for ($i = 0; $i < count($_FILES["file"]["name"]) - 1; $i++) { if ($_FILES["file"]["error"][$i] == 0) { $photo = photo::create( $item->id, $_FILES["file"]["tmp_name"][$i], $_FILES["file"]["name"][$i], $_FILES["file"]["name"][$i], "", $owner_id); } else { throw new Exception("@todo ERROR_IN_UPLOAD_FILE"); } } url::redirect("albums/{$item->id}"); } else { $photo = photo::create( $item->id, $_FILES["file"]["tmp_name"], $_FILES["file"]["name"], $this->input->post("title", $this->input->post("name")), $this->input->post("description"), $owner_id); url::redirect("{$new_item->type}s/{$new_item->id}"); } break; } } public function _delete($item) { // @todo Production this code // 1) Add security checks $parent = $item->parent(); if ($parent->id) { $item->delete(); } url::redirect("{$parent->type}s/{$parent->id}"); } public function _update($item) { // @todo Productionize this // 1) Figure out how to do the right validation here. Validate the form input and apply it to // the model as appropriate. // 2) Figure out how to dispatch according to the needs of the client. Ajax requests from // jeditable will want the changed field back, and possibly the whole item in json. // // For now let's establish a simple protocol where the client passes in a __return parameter // that specifies which field it wants back from the item. Later on we can expand that to // include a data format, etc. // These fields are safe to change $post = $this->input->post(); foreach ($post as $key => $value) { switch ($key) { case "title": case "description": $item->$key = $value; break; } } // @todo Support additional fields // These fields require additional work if you change them // parent_id, owner_id $item->save(); if (array_key_exists("_return", $post)) { print $item->{$post["_return"]}; } } }