show(ORM::factory("item", 1)); } public function show($album) { if (!is_object($album)) { // show() must be public because we route to it in url::parse_url(), so make // sure that we're actually receiving an object throw new Kohana_404_Exception(); } access::required("view", $album); $page_size = module::get_var("gallery", "page_size", 9); $input = Input::instance(); $show = $input->get("show"); if ($show) { $child = ORM::factory("item", $show); $index = $album->get_position($child); if ($index) { $page = ceil($index / $page_size); if ($page == 1) { url::redirect($album->abs_url()); } else { url::redirect($album->abs_url("page=$page")); } } } $page = $input->get("page", "1"); $children_count = $album->viewable()->children_count(); $offset = ($page - 1) * $page_size; $max_pages = max(ceil($children_count / $page_size), 1); // Make sure that the page references a valid offset if ($page < 1) { url::redirect($album->abs_url()); } else if ($page > $max_pages) { url::redirect($album->abs_url("page=$max_pages")); } $template = new Theme_View("page.html", "collection", "album"); $template->set_global("page", $page); $template->set_global("page_title", null); $template->set_global("max_pages", $max_pages); $template->set_global("page_size", $page_size); $template->set_global("item", $album); $template->set_global("children", $album->viewable()->children($page_size, $offset)); $template->set_global("children_count", $children_count); $template->set_global("parents", $album->parents()); $template->content = new View("album.html"); // We can't use math in ORM or the query builder, so do this by hand. It's important // that we do this with math, otherwise concurrent accesses will damage accuracy. db::query("UPDATE {items} SET `view_count` = `view_count` + 1 WHERE `id` = $album->id") ->execute(); print $template; } public function create($parent_id) { access::verify_csrf(); $album = ORM::factory("item", $parent_id); access::required("view", $album); access::required("add", $album); $form = album::get_add_form($album); try { $valid = $form->validate(); $album = ORM::factory("item"); $album->type = "album"; $album->parent_id = $parent_id; $album->name = $form->add_album->inputs["name"]->value; $album->title = $form->add_album->title->value ? $form->add_album->title->value : $form->add_album->inputs["name"]->value; $album->description = $form->add_album->description->value; $album->slug = $form->add_album->slug->value; $album->validate(); } catch (ORM_Validation_Exception $e) { // Translate ORM validation errors into form error messages foreach ($e->validation->errors() as $key => $error) { $form->add_album->inputs[$key]->add_error($error, 1); } $valid = false; } if ($valid) { $album->save(); module::event("album_add_form_completed", $album, $form); log::success("content", "Created an album", html::anchor("albums/$album->id", "view album")); message::success(t("Created album %album_title", array("album_title" => html::purify($album->title)))); print json_encode(array("result" => "success", "location" => $album->url())); } else { print json_encode(array("result" => "error", "form" => (string) $form)); } } public function update($album_id) { access::verify_csrf(); $album = ORM::factory("item", $album_id); access::required("view", $album); access::required("edit", $album); $form = album::get_edit_form($album); try { $valid = $form->validate(); $album->title = $form->edit_item->title->value; $album->description = $form->edit_item->description->value; $album->sort_column = $form->edit_item->sort_order->column->value; $album->sort_order = $form->edit_item->sort_order->direction->value; $album->name = $form->edit_item->inputs["name"]->value; $album->slug = $form->edit_item->slug->value; $album->validate(); } catch (ORM_Validation_Exception $e) { // Translate ORM validation errors into form error messages foreach ($e->validation->errors() as $key => $error) { $form->edit_item->inputs[$key]->add_error($error, 1); } $valid = false; } if ($valid) { $album->save(); module::event("item_edit_form_completed", $album, $form); log::success("content", "Updated album", "id\">view"); message::success(t("Saved album %album_title", array("album_title" => html::purify($album->title)))); if ($form->from_id->value == $album->id) { // Use the new url; it might have changed. print json_encode(array("result" => "success", "location" => $album->url())); } else { // Stay on the same page print json_encode(array("result" => "success")); } } else { print json_encode(array("result" => "error", "form" => (string) $form)); } } public function form_add($album_id) { $album = ORM::factory("item", $album_id); access::required("view", $album); access::required("add", $album); print album::get_add_form($album); } public function form_edit($album_id) { $album = ORM::factory("item", $album_id); access::required("view", $album); access::required("edit", $album); print album::get_edit_form($album); } }