<?php // staff only action user_support_staff_gatekeeper(); $guid = (int) get_input("guid"); $user = elgg_get_logged_in_user_entity(); if (!empty($guid) && ($entity = get_entity($guid))) { if (elgg_instanceof($entity, "object", UserSupportTicket::SUBTYPE, "UserSupportTicket")) { create_annotation($entity->getGUID(), 'generic_comment', elgg_echo("user_support:support_ticket:closed"), "", $user->getGUID(), $entity->access_id); if ($entity->setStatus(UserSupportTicket::CLOSED)) { notify_user($entity->getOwnerGUID(), $user->getGUID(), elgg_echo('generic_comment:email:subject'), elgg_echo('generic_comment:email:body', array($entity->title, $user->name, elgg_echo("user_support:support_ticket:closed"), $entity->getURL(), $user->name, $user->getURL()))); system_message(elgg_echo("user_support:action:ticket:close:success")); } else { register_error(elgg_echo("user_support:action:ticket:close:error:disable")); } } else { register_error(elgg_echo("InvalidClassException:NotValidElggStar", array($guid, "UserSupportTicket"))); } } else { register_error(elgg_echo("InvalidParameterException:MissingParameter")); } forward(REFERER);
/** * Gets called during system init * * @return void */ function user_support_init() { // extend css elgg_extend_view("css/elgg", "css/user_support/site"); elgg_extend_view("css/admin", "css/user_support/admin"); elgg_extend_view("js/elgg", "js/user_support/site"); elgg_extend_view("page/elements/footer", "user_support/button"); elgg_extend_view("forms/comment/save", "user_support/support_ticket/comment"); // register page handler for nice URL's elgg_register_page_handler("user_support", "user_support_page_handler"); // register subtype handlers add_subtype("object", UserSupportFAQ::SUBTYPE, "UserSupportFAQ"); add_subtype("object", UserSupportHelp::SUBTYPE, "UserSupportHelp"); add_subtype("object", UserSupportTicket::SUBTYPE, "UserSupportTicket"); // register subtypes for search elgg_register_entity_type("object", UserSupportFAQ::SUBTYPE); elgg_register_entity_type("object", UserSupportHelp::SUBTYPE); // register notifications elgg_register_notification_event("object", "comment"); elgg_register_plugin_hook_handler("get", "subscriptions", "user_support_get_subscriptions_support_ticket_comment_hook"); elgg_register_plugin_hook_handler("prepare", "notification:create:object:comment", "user_support_prepare_support_ticket_comment_message_hook"); elgg_register_notification_event("object", UserSupportTicket::SUBTYPE); elgg_register_plugin_hook_handler("get", "subscriptions", "user_support_get_subscriptions_support_ticket_hook"); elgg_register_plugin_hook_handler("prepare", "notification:create:object:" . UserSupportTicket::SUBTYPE, "user_support_prepare_support_ticket_message_hook"); // update class for FAQ, since user_support v1.0 if (!get_subtype_class("object", UserSupportFAQ::SUBTYPE)) { run_function_once("user_support_faq_class_update"); } // add a group tool option for FAQ add_group_tool_option("faq", elgg_echo("user_support:group:tool_option"), false); elgg_extend_view("groups/tool_latest", "user_support/faq/group_module"); // register widgets elgg_register_widget_type("faq", elgg_echo("user_support:widgets:faq:title"), elgg_echo("user_support:widgets:faq:description"), array("groups")); elgg_register_widget_type("support_ticket", elgg_echo("user_support:widgets:support_ticket:title"), elgg_echo("user_support:widgets:support_ticket:description"), array("dashboard"), true); if (user_support_staff_gatekeeper(false)) { elgg_register_widget_type("support_staff", elgg_echo("user_support:widgets:support_staff:title"), elgg_echo("user_support:widgets:support_staff:description"), array("dashboard", "admin")); } // register events elgg_register_event_handler("create", "object", "user_support_create_comment_event"); // plugin hooks elgg_register_plugin_hook_handler("register", "menu:entity", "user_support_entity_menu_hook", 550); elgg_register_plugin_hook_handler("register", "menu:owner_block", "user_support_owner_block_menu_hook"); elgg_register_plugin_hook_handler("register", "menu:title", "user_support_title_menu_hook"); elgg_register_plugin_hook_handler("register", "menu:site", "user_support_site_menu_hook"); elgg_register_plugin_hook_handler("register", "menu:page", "user_support_page_menu_hook"); elgg_register_plugin_hook_handler("register", "menu:footer", "user_support_footer_menu_hook"); elgg_register_plugin_hook_handler("register", "menu:user_hover", "user_support_user_hover_menu_hook"); elgg_register_plugin_hook_handler("register", "menu:user_support", "user_support_user_support_menu_hook"); elgg_register_plugin_hook_handler("register", "menu:annotation", "user_support_annotation_menu_hook"); elgg_register_plugin_hook_handler("widget_url", "widget_manager", "user_support_widget_url_hook"); elgg_register_plugin_hook_handler("permissions_check", "object", "user_support_permissions_check_hook"); // register actions elgg_register_action("user_support/help/edit", dirname(__FILE__) . "/actions/help/edit.php", "admin"); elgg_register_action("user_support/help/delete", dirname(__FILE__) . "/actions/help/delete.php", "admin"); elgg_register_action("user_support/support_ticket/edit", dirname(__FILE__) . "/actions/ticket/edit.php"); elgg_register_action("user_support/support_ticket/delete", dirname(__FILE__) . "/actions/ticket/delete.php"); elgg_register_action("user_support/support_ticket/close", dirname(__FILE__) . "/actions/ticket/close.php"); elgg_register_action("user_support/support_ticket/reopen", dirname(__FILE__) . "/actions/ticket/reopen.php"); elgg_register_action("user_support/faq/edit", dirname(__FILE__) . "/actions/faq/edit.php"); elgg_register_action("user_support/faq/delete", dirname(__FILE__) . "/actions/faq/delete.php"); elgg_register_action("user_support/support_staff", dirname(__FILE__) . "/actions/support_staff.php", "admin"); }
/** * Add permissions to support staff * * @param string $hook the name of the hook * @param string $type the type of the hook * @param ElggMenuItem[] $return_value current return value * @param array $params supplied params * * @return ElggMenuItem[] */ function user_support_permissions_check_hook($hook, $type, $return_value, $params) { if ($return_value) { return $return_value; } if (empty($params) || !is_array($params)) { return $return_value; } $entity = elgg_extract("entity", $params); if (empty($entity) || !elgg_instanceof($entity, "object", UserSupportTicket::SUBTYPE)) { return $return_value; } $user = elgg_extract("user", $params); if (empty($user) || !elgg_instanceof($user, "user")) { return $return_value; } return user_support_staff_gatekeeper(false, $user->getGUID()); }
<?php elgg_gatekeeper(); $user = elgg_get_page_owner_entity(); if (!$user->canEdit() && !user_support_staff_gatekeeper(false)) { register_error(elgg_echo("user_support:staff_gatekeeper")); forward(REFERER); } $status = get_input("status", UserSupportTicket::OPEN); if (!in_array($status, array(UserSupportTicket::OPEN, UserSupportTicket::CLOSED))) { $status = UserSupportTicket::OPEN; } $q = get_input("q"); $options = array("type" => "object", "subtype" => UserSupportTicket::SUBTYPE, "owner_guid" => $user->getGUID(), "full_view" => false, "metadata_name_value_pairs" => array("status" => $status), "order_by" => "e.time_updated desc", "no_results" => elgg_echo("notfound")); if (!empty($q)) { $options["joins"] = array("JOIN " . elgg_get_config("dbprefix") . "objects_entity oe ON e.guid = oe.guid"); $options["wheres"] = array("oe.description LIKE '%" . sanitise_string($q) . "%'"); } $search_action = "user_support/support_ticket/owner/" . $user->username; elgg_push_context("support_ticket_title"); // build page elements if ($status == UserSupportTicket::CLOSED) { $search_action .= "/archive"; if ($user->getGUID() == elgg_get_logged_in_user_guid()) { $title_text = elgg_echo("user_support:tickets:mine:archive:title"); } else { $title_text = elgg_echo("user_support:tickets:owner:archive:title", array($user->name)); } } else { if ($user->getGUID() == elgg_get_logged_in_user_guid()) { $title_text = elgg_echo("user_support:tickets:mine:title");
<?php $page_owner = elgg_get_page_owner_entity(); if ($page_owner->getGUID() != elgg_get_logged_in_user_guid()) { return; } if (!user_support_staff_gatekeeper(false, $page_owner->getGUID())) { return; } $plugin = elgg_extract("entity", $vars); $noyes_options = array("no" => elgg_echo("option:no"), "yes" => elgg_echo("option:yes")); $body = "<div>"; $body .= elgg_echo("user_support:usersettings:admin_notify") . "<br />"; $body .= elgg_view("input/dropdown", array("name" => "params[admin_notify]", "options_values" => $noyes_options, "value" => $plugin->getUserSetting("admin_notify", $page_owner->getGUID()))); $body .= "</div>"; echo $body;
elgg_set_page_owner_guid($entity->getOwnerGUID()); // build page elements $title_text = ""; if (!empty($entity->support_type)) { $title_text = elgg_echo("user_support:support_type:" . $entity->support_type) . ": "; } $title = $entity->title; if (strlen($title) > 50) { $title = elgg_get_excerpt($title, 50); } $title_text .= $title; // build breadcrumb if ($entity->getOwnerGUID() == elgg_get_logged_in_user_guid()) { elgg_push_breadcrumb(elgg_echo("user_support:menu:support_tickets:mine"), "user_support/support_ticket/owner/" . $entity->getOwnerEntity()->username); } else { elgg_push_breadcrumb(elgg_echo("user_support:menu:support_tickets"), "user_support/support_ticket"); } elgg_push_breadcrumb($title); // show entity $content = elgg_view_entity($entity); // add comments $comments_ia = elgg_set_ignore_access(true); $content .= elgg_view_comments($entity); elgg_set_ignore_access($comments_ia); // build page $page_data = elgg_view_layout("content", array("title" => $title_text, "content" => $content, "filter" => "")); // restore access if (user_support_staff_gatekeeper(false)) { elgg_set_ignore_access($ia); } echo elgg_view_page($title_text, $page_data);