sql = "INSERT INTO request(user, collection, created, request_mode, `status`, comments, assigned_to) VALUES (?, ?, NOW(), 1, 0, ?, ?)"; $request_query->parameters = array("i",$user_ref, "i",$collection_ref, "s",$message->get_text(), "i",$assigned_administrator); $assigned_to_user = get_user($assigned_administrator); if (!$assigned_to_user) { return false; } $notify_manage_request_admin = true; // If we've got this far, make sure auto assigning managed requests based on resource types won't overwrite this $manage_request_admin = array(); // Initialise the global array instead of attempting to unset it which does not work return true; } function HookAutoassign_mrequestsAllAutoassign_collection_requests($user_ref, $collection_data, $message, $manage_collection_request) { global $manage_request_admin, $assigned_to_user, $baseurl, $applicationname, $request_query, $notify_manage_request_admin, $username, $user_mail_template; // Do not process this any further as this should only handle collection requests if (!$manage_collection_request) { return false; } $resources = get_collection_resources($collection_data['ref']); $mapped_fields = get_mapped_fields(); $collection_resources_by_assigned_user = array(); $collections = array(); // Build the collections map between assigned user and resources the collection should contain foreach ($resources as $resource) { // Don't use permissions as requesting user may not have access to field $resource_data = get_resource_field_data($resource, false, false, null, false, false, false, false); $assigned_administrator = 0; $resource_not_assigned = true; foreach ($resource_data as $r_data) { if (in_array($r_data['ref'], $mapped_fields)) { $assigned_administrator = get_mapped_user_by_field($r_data['ref'], $r_data['value']); if ($assigned_administrator === 0) { debug("autoassign_mrequests: Assigning resource " . $resource . " to unmanaged"); $collection_resources_by_assigned_user['not_managed'][] = $resource; } else { debug("autoassign_mrequests: Assigning resource " . $resource . " to " . $assigned_administrator); $collection_resources_by_assigned_user[$assigned_administrator][] = $resource; } $resource_not_assigned = false; break; } } if ($resource_not_assigned && !isset($manage_request_admin)) { $collection_resources_by_assigned_user['not_managed'][] = $resource; } } // Create collections based on who is supposed to handle the request foreach ($collection_resources_by_assigned_user as $assigned_user_id => $collection_resources) { if ($assigned_user_id === 'not_managed') { $collections['not_managed'] = create_collection($user_ref, $collection_data['name'] . ' request for unmanaged resources'); foreach ($collection_resources as $collection_resource_id) { add_resource_to_collection($collection_resource_id, $collections['not_managed']); } continue; } $user = get_user($assigned_user_id); $collections[$assigned_user_id] = create_collection($user_ref, $collection_data['name'] . ' request - managed by ' . $user['email']); foreach ($collection_resources as $collection_resource_id) { add_resource_to_collection($collection_resource_id, $collections[$assigned_user_id]); } // Attach assigned admin to this collection add_collection($assigned_user_id, $collections[$assigned_user_id]); } if (!empty($collections)) { foreach ($collections as $assigned_to => $collection_id) { $request_query = new PreparedStatementQuery(); $request_query->sql = "INSERT INTO request(user, collection, created, request_mode, `status`, comments, assigned_to) VALUES (?, ?, NOW(), 1, 0, ?, ?)"; $request_query->parameters = array("i",$user_ref, "i",$collection_id, "s",$message->get_text(), "i",$assigned_to); if ($assigned_to === 'not_managed') { if (is_array($assigned_to_user) && isset($assigned_to_user["ref"])) { $assigned_to = [$assigned_to_user["ref"]]; debug("autoassign_mrequests: Send collection " . $collection_id . " to " . $assigned_to_user["ref"]); } else { // No valid user assigned by $manage_request_admin $assigned_to = get_notification_users("RESOURCE_ACCESS"); $request_query->sql = "INSERT INTO request(user, collection, created, request_mode, `status`, comments) VALUES (?, ?, NOW(), 1, 0, ?)"; $request_query->parameters = array("i",$user_ref, "i",$collection_id, "s",$message->get_text()); debug("autoassign_mrequests: Send collection " . $collection_id . " to default notify admins"); } } else { // Change assigned user into an array $assigned_to = [$assigned_to]; } ps_query($request_query->sql, $request_query->parameters); $request = sql_insert_id(); $eventdata = [ "type" => MANAGED_REQUEST, "ref" => $request, ]; // Send message for this request $request_url = $baseurl . "/?q=" . $request; $templatevars['request_id'] = $request; $templatevars['requesturl'] = $request_url; $templatevars['requestreason'] = $message->get_text(); $adminmessage = new ResourceSpaceUserNotification(); $adminmessage->set_subject($applicationname . ": "); $adminmessage->append_subject("lang_requestassignedtoyou"); $adminmessage->set_text("lang_requestassignedtoyoumail"); $adminmessage->append_text("

"); $adminmessage->append_text("lang_username"); $adminmessage->append_text(": " . $username . "
"); // Add core message text (reason, custom fields etc.) $adminmessage->append_text_multi($message->get_text(true)); $adminmessage->url = $request_url; $adminmessage->eventdata = $eventdata; $adminmessage->templatevars = $templatevars; $adminmessage->eventdata = $eventdata; send_user_notification($assigned_to, $adminmessage); } $collection_url = $baseurl . "/?c=" . $collection_data['ref']; $usermessage = new ResourceSpaceUserNotification(); $usermessage->set_subject($applicationname . ": "); $usermessage->append_subject("lang_requestsent"); $usermessage->set_text("lang_requestsenttext"); $usermessage->append_text("

"); $usermessage->append_text_multi($message->get_text(true)); $usermessage->append_text("

"); $usermessage->append_text("lang_clicktoviewresource"); $usermessage->url = $collection_url; $templatevars['requesturl'] = $collection_url; $usermessage->template = $user_mail_template; $usermessage->templatevars = $templatevars; send_user_notification([$user_ref], $usermessage); $notify_manage_request_admin = false; } // If we've got this far, disable features which may conflict $manage_request_admin = array(); $GLOBALS['owner_field'] = 0; return true; } function HookAutoassign_mrequestsAllBypass_end_managed_collection_request($manage_individual_requests, $collection_id, $request_query, $message, $templatevars, $assigned_to_user, $admin_mail_template, $user_mail_template) { global $applicationname, $baseurl, $email_from, $resource_type_request_emails_and_email_notify, $lang, $username, $userref, $notify_manage_request_admin, $resource_type_request_emails; // Collection level requests have already been created and e-mails sent so skip this step if (!$manage_individual_requests) { // Because we are bypassing the end of managed_collection_request function we need to return true return true; } // If we don't have an assigned user, it probably means system is misconfigured so go ahead and run this normally via // RS own logic for dealing with requests. if (is_null($assigned_to_user) || !$assigned_to_user) { return false; } // Create resource level request using SQL which was setup earlier in resource level hook or regular processing ps_query($request_query->sql, $request_query->parameters); $request = sql_insert_id(); $eventdata = [ "type" => MANAGED_REQUEST, "ref" => $request, ]; $request_url = $baseurl . "/?q=" . $request; // Update message with request url specific to this collection $templatevars['request_id'] = $request; $templatevars['requesturl'] = $request_url; $templatevars['requestreason'] = $message->get_text(); $adminmessage = new ResourceSpaceUserNotification(); $adminmessage->set_subject($applicationname . ": "); $adminmessage->append_subject("lang_requestassignedtoyou"); $adminmessage->set_text("lang_requestassignedtoyoumail"); $adminmessage->append_text("

"); $adminmessage->append_text("lang_username"); $adminmessage->append_text(": " . $username . "
"); $coremessage_arr = $message->get_text(true); if (is_array($coremessage_arr) && count($coremessage_arr) > 0) { foreach ($coremessage_arr as $messagepart) { $adminmessage->append_text($messagepart[0], $messagepart[1], $messagepart[2]); } } $adminmessage->url = $request_url; $adminmessage->eventdata = $eventdata; $adminmessage->templatevars = $templatevars; // Attach assigned admin to this collection add_collection($assigned_to_user['ref'], $collection_id); if ($notify_manage_request_admin) { send_user_notification([$assigned_to_user['ref']], $adminmessage); $notification_sent = true; } $notify_users = []; $notify_emails = []; # Check if alternative request email notification address is set, only valid if collection contains resources of the same type if (isset($resource_type_request_emails)) { $parameters = array("i",$collection_id); $requestrestypes = ps_array("SELECT r.resource_type AS value FROM collection_resource cr LEFT JOIN resource r ON cr.resource=r.ref WHERE cr.collection = ?", $parameters); $requestrestypes = array_unique($requestrestypes); if (count($requestrestypes) == 1 && isset($resource_type_request_emails[$requestrestypes[0]])) { // Is this a system user? If so we can send a notification instead of an email $emailusers = get_user_by_email($resource_type_request_emails[$requestrestypes[0]]); if (is_array($emailusers) && count($emailusers) > 0) { $notify_users = array_merge($notify_users, $emailusers); } else { $notify_emails[] = $resource_type_request_emails[$requestrestypes[0]]; } } } if (!$notification_sent && (!isset($resource_type_request_emails) || $resource_type_request_emails_and_email_notify)) { $admin_notify_users = get_notification_users("RESOURCE_ACCESS"); $notify_users = array_merge($notify_users, $admin_notify_users); # Send the e-mails and/or notification messages $adminmessage = new ResourceSpaceUserNotification(); $adminmessage->set_subject($applicationname . ": "); $adminmessage->append_subject("lang_requestcollection"); $adminmessage->append_subject(" - " . $collection_id); $adminmessage->template = $admin_mail_template; $adminmessage->templatevars = $templatevars; foreach ($notify_emails as $notify_email) { // These are not system users so emails must be sent send_mail($notify_email, $applicationname . ": " . $lang["requestcollection"] . " - $collection_id", $adminmessage->get_text(), $email_from, $email_from, $admin_mail_template, $templatevars); } send_user_notification($notify_users, $adminmessage); } $collection_url = $baseurl . "/?c=" . $collection_id; $usermessage = new ResourceSpaceUserNotification(); $usermessage->set_subject($applicationname . ": "); $usermessage->append_subject("lang_requestsent"); $usermessage->set_text("lang_requestsenttext"); $usermessage->append_text("

"); $usermessage->append_text_multi($message->get_text(true)); $usermessage->append_text("

"); $usermessage->append_text("lang_viewrequesturl"); $usermessage->url = $collection_url; $templatevars['requesturl'] = $collection_url; $usermessage->template = $user_mail_template; $usermessage->templatevars = $templatevars; send_user_notification([$userref], $usermessage); return true; } function HookAutoassign_mrequestsAllExport_add_tables() { return array("assign_request_map" => array()); } function HookAutoassign_mrequestsAllOn_delete_user($ref) { # The user has been deleted so any mappings for them also need to be removed. ps_query("DELETE FROM assign_request_map WHERE `user_id` = ?", array("i", $ref)); }