1
0
This repository has been archived on 2021-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
gallery3-contrib/modules/photoannotation/controllers/photoannotation.php
hukoeth daf1d8a66c Fixed typo in admin area
Added option to hide the user cloud for guests
Don't send notification mail on new comment when notification module is active and user is watching item
2010-09-11 16:11:07 +08:00

249 lines
10 KiB
PHP

<?php defined("SYSPATH") or die("No direct script access.");
/**
* Gallery - a web based photo album viewer and editor
* Copyright (C) 2000-2010 Bharat Mediratta
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class photoannotation_Controller extends Controller {
public function showuser() {
if (identity::active_user()->guest && !module::get_var("photoannotation", "allowguestsearch", false)) {
message::error(t("You have to log in to perform a user search."));
url::redirect(url::site());
return;
}
$form = photoannotation::get_user_search_form("g-user-cloud-form");
$user_id = Input::instance()->get("name", "");
if ($user_id == "") {
$user_id = Input::instance()->post("name", "");
}
$getuser = photoannotation::getuser($user_id);
if ($getuser->found) {
url::redirect(user_profile::url($getuser->user->id));
return;
}
$page_size = module::get_var("gallery", "page_size", 9);
$page = Input::instance()->get("page", 1);
$offset = ($page - 1) * $page_size;
// Make sure that the page references a valid offset
if ($page < 1) {
$page = 1;
}
list ($count, $result) = photoannotation::search_user($user_id, $page_size, $offset);
$max_pages = max(ceil($count / $page_size), 1);
if ($page > 1) {
$previous_page_url = url::site("photoannotation/showuser?name=". $user_id ."&amp;page=". ($page - 1));
}
if ($page < $max_pages) {
$next_page_url = url::site("photoannotation/showuser?name=". $user_id ."&amp;page=". ($page + 1));
}
if ($user_id == "") {
$user_id = "*";
}
$template = new Theme_View("page.html", "other", "usersearch");
$template->set_global("position", $page);
$template->set_global("total", $max_pages);
$template->content = new View("photoannotation_user_search.html");
$template->content->search_form = photoannotation::get_user_search_form(g-user-search-form);
$template->content->users = $result;
$template->content->q = $user_id;
$template->content->count = $count;
$template->content->paginator = new View("paginator.html");
$template->content->paginator->previous_page_url = $previous_page_url;
$template->content->paginator->next_page_url = $next_page_url;
print $template;
}
public function save($item_id) {
// Prevent Cross Site Request Forgery
access::verify_csrf();
//Get form data
$item = ORM::factory("item", $item_id);
$annotate_id = $_POST["noteid"];
$notetype = $_POST["notetype"];
$str_y1 = $_POST["top"];
$str_x1 = $_POST["left"];
$str_y2 = $_POST["height"] + $str_y1; //Annotation uses area size, tagfaces uses positions
$str_x2 = $_POST["width"] + $str_x1; //Annotation uses area size, tagfaces uses positions
$item_title = $_POST["text"];
$tag_data = $_POST["tagsList"];
$user_id = "";
$user_id = $_POST["userlist"];
$description = $_POST["desc"];
$redir_uri = url::abs_site("{$item->type}s/{$item->id}");
//If this is a user then get the id
if ($user_id != "") {
$getuser = photoannotation::getuser($user_id);
if (!$getuser->found) {
message::error(t("Could not find user %user.", array("user" => $user_id)));
url::redirect($redir_uri);
return;
}
if ($getuser->isguest) {
message::error(t("You cannot create an annotation for the guest user."));
url::redirect($redir_uri);
return;
}
$user_id = $getuser->user->id;
}
//Add tag to item, create tag if not exists
if ($tag_data != "") {
$tag = ORM::factory("tag")->where("name", "=", $tag_data)->find();
if (!$tag->loaded()) {
$tag->name = $tag_data;
$tag->count = 0;
}
$tag->add($item);
$tag->count++;
$tag->save();
$tag_data = $tag->id;
} else {
$tag_data = -1;
}
//Save annotation
if ($annotate_id == "new") { //This is a new annotation
if ($user_id > -1) { //Save user
photoannotation::saveuser($user_id, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
} elseif ($tag_data > -1) { //Conversion user -> face
photoannotation::saveface($tag_data, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
} elseif ($item_title != "") { //Conversion user -> note
photoannotation::savenote($item_title, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
} else { //Somethings wrong
message::error(t("Please select a User or Tag or specify a Title."));
url::redirect($redir_uri);
return;
}
} else { //This is an update to an existing annotation
switch ($notetype) {
case "user": //the original annotation is a user
$updateduser = ORM::factory("items_user") //load the existing user
->where("id", "=", $annotate_id)
->find();
if ($user_id > -1) { //Conversion user -> user
photoannotation::saveuser($user_id, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
} elseif ($tag_data > -1) { //Conversion user -> face
photoannotation::saveface($tag_data, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
$updateduser->delete(); //delete old user
} elseif ($item_title != "") { //Conversion user -> note
photoannotation::savenote($item_title, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
$updateduser->delete(); //delete old user
} else { //Somethings wrong
message::error(t("Please select a User or Tag or specify a Title."));
url::redirect($redir_uri);
return;
}
break;
case "face": //the original annotation is a face
$updatedface = ORM::factory("items_face") //load the existing user
->where("id", "=", $annotate_id)
->find();
if ($user_id > -1) { //Conversion face -> user
photoannotation::saveuser($user_id, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
$updatedface->delete(); //delete old face
} elseif ($tag_data > -1) { //Conversion face -> face
photoannotation::saveface($tag_data, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description, $annotate_id);
} elseif ($item_title != "") { //Conversion face -> note
photoannotation::savenote($item_title, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
$updatedface->delete(); //delete old face
} else { //Somethings wrong
message::error(t("Please select a User or Tag or specify a Title."));
url::redirect($redir_uri);
return;
}
break;
case "note": //the original annotation is a note
$updatednote = ORM::factory("items_note") //load the existing user
->where("id", "=", $annotate_id)
->find();
if ($user_id > -1) { //Conversion note -> user
photoannotation::saveuser($user_id, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
$updatednote->delete(); //delete old note
} elseif ($tag_data > -1) { //Conversion note -> face
photoannotation::saveface($tag_data, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description);
$updatednote->delete(); //delete old note
} elseif ($item_title != "") { //Conversion note -> note
photoannotation::savenote($item_title, $item_id, $str_x1, $str_y1, $str_x2, $str_y2, $description, $annotate_id);
} else { //Somethings wrong
message::error(t("Please select a User or Tag or specify a Title."));
url::redirect($redir_uri);
return;
}
break;
default:
message::error(t("Please select a User or Tag or specify a Title."));
url::redirect($redir_uri);
return;
}
}
message::success(t("Annotation saved."));
url::redirect($redir_uri);
return;
}
public function delete($item_data) {
// Prevent Cross Site Request Forgery
access::verify_csrf();
//Get form data
$item = ORM::factory("item", $item_data);
$noteid = $_POST["noteid"];
$notetype = $_POST["notetype"];
$redir_uri = url::abs_site("{$item->type}s/{$item->id}");
if ($noteid == "") {
message::error(t("Please select a tag or note to delete."));
url::redirect($redir_uri);
return;
}
switch ($notetype) {
case "user":
db::build()->delete("items_users")->where("id", "=", $noteid)->execute();
break;
case "face":
db::build()->delete("items_faces")->where("id", "=", $noteid)->execute();
break;
case "note":
db::build()->delete("items_notes")->where("id", "=", $noteid)->execute();
break;
default:
message::error(t("Please select a tag or note to delete."));
url::redirect($redir_uri);
return;
}
message::success(t("Annotation deleted."));
url::redirect($redir_uri);
}
public function autocomplete() {
$users = array();
$user_parts = explode(",", Input::instance()->get("q"));
$limit = Input::instance()->get("limit");
$user_part = ltrim(end($user_parts));
$user_list = ORM::factory("user")
->where("name", "LIKE", "{$user_part}%")
->order_by("name", "ASC")
->limit($limit)
->find_all();
foreach ($user_list as $user) {
if ($user->name != "guest") {
$users[] = $user->display_name() ." (". $user->name .")";
}
}
print implode("\n", $users);
}
}