set_subject("lang_newresearchrequestwaiting"); $userconfirmmessage->set_text("'$username' ($userfullname - $useremail) "); $userconfirmmessage->append_text("lang_haspostedresearchrequest"); $userconfirmmessage->append_text(".\n\n"); $userconfirmmessage->user_preference = "user_pref_resource_access_notifications"; $userconfirmmessage->template = "emailnewresearchrequestwaiting"; $userconfirmmessage->templatevars = $templatevars; $userconfirmmessage->url = $templatevars["teamresearchurl"]; // Hook needs to update the ResourceSpaceUserNotification object hook("modifyresearchrequestemail", "", array($userconfirmmessage)); send_user_notification($research_notify_users, $userconfirmmessage); } /** * Retrieves research requests from the database, optionally filtering by a search term * and sorting the results by a specified field. * * @param string $find Optional search term to filter research requests by name, description, contact, or reference number. * @param string $order_by The field to sort the results by. Valid options are 'ref', 'name', 'created', 'status', or 'assigned_to'. * @param string $sort The sort direction, either 'ASC' or 'DESC'. Defaults to 'ASC'. * * @return array An array of research requests that match the search criteria. */ function get_research_requests($find = "", $order_by = "name", $sort = "ASC") { $searchsql = ""; $use_order_by = ""; $use_sort = validate_sort_value($sort) ? $sort : 'ASC'; $parameters = array(); if ($find != "") { $searchsql = "WHERE name like ? or description like ? or contact like ? or ref=?"; $parameters = array("s","%{$find}%", "s","%{$find}%", "s","%{$find}%", "i",(int)$find); } if (in_array($order_by, array("ref","name","created","status","assigned_to","collection"))) { $use_order_by = $order_by; } return ps_query("select " . columns_in("research_request", "r") . ",(select username from user u where u.ref=r.user) username, (select username from user u where u.ref=r.assigned_to) assigned_username from research_request r $searchsql order by $use_order_by $use_sort", $parameters); } /** * Retrieves a research request by its reference number, returning its details including name, description, deadline, contact information, user assignment, status, and custom fields. * * @param int $ref The reference number of the research request to retrieve. * @return array|false An associative array with the research request details if found, or false if no request exists. */ function get_research_request($ref) { $rr_sql = "SELECT rr.ref,rr.name,rr.description,rr.deadline,rr.email,rr.contact,rr.finaluse,rr.resource_types,rr.noresources,rr.shape, rr.created,rr.user,rr.assigned_to,rr.status,rr.collection,rr.custom_fields_json, (select u.username from user u where u.ref=rr.user) username, (select u.username from user u where u.ref=rr.assigned_to) assigned_username from research_request rr where rr.ref=?"; $rr_parameters = array("i",$ref); $return = ps_query($rr_sql, $rr_parameters); if (count($return) == 0) { return false; } return $return[0]; } /** * Saves a research request by updating its status and assigned user, sending notifications to the originator if the status changes, and optionally deleting the request or copying existing collection resources. * * @param int $ref The reference number of the research request to be saved. * @return bool True if the operation was successful, false otherwise. */ function save_research_request($ref) { # Save global $baseurl,$email_from,$applicationname,$lang; $parameters = array("i",$ref); if (getval("delete", "") != "") { # Delete this request. ps_query("delete from research_request where ref=? limit 1", $parameters); return true; } # Check the status, if changed e-mail the originator $currentrequest = ps_query("select status, assigned_to, collection from research_request where ref=?", $parameters); $oldstatus = (count($currentrequest) > 0) ? $currentrequest[0]["status"] : 0; $newstatus = getval("status", 0); $collection = (count($currentrequest) > 0) ? $currentrequest[0]["collection"] : 0; $oldassigned_to = (count($currentrequest) > 0) ? $currentrequest[0]["assigned_to"] : 0; $assigned_to = getval("assigned_to", 0); $templatevars['url'] = $baseurl . "/?c=" . $collection; $templatevars['teamresearchurl'] = $baseurl . "/pages/team/team_research_edit.php?ref=" . $ref; if ($oldstatus != $newstatus) { $requesting_user = ps_query("SELECT u.email, u.ref FROM user u,research_request r WHERE u.ref=r.user AND r.ref = ?", $parameters); $requesting_user = $requesting_user[0]; if ($newstatus == 1) { $assignedmessage = new ResourceSpaceUserNotification(); $assignedmessage->set_subject("lang_researchrequestassigned"); $assignedmessage->set_text("lang_researchrequestassignedmessage"); $assignedmessage->template = "emailresearchrequestassigned"; $assignedmessage->templatevars = $templatevars; $assignedmessage->url = $templatevars["teamresearchurl"]; send_user_notification([$requesting_user['ref']], $assignedmessage); # Log this daily_stat("Assigned research request", 0); } if ($newstatus == 2) { $completemessage = new ResourceSpaceUserNotification(); $completemessage->set_subject("lang_researchrequestcomplete"); $completemessage->set_text("lang_researchrequestcompletemessage"); $completemessage->append_text("\n\n"); $completemessage->append_text("lang_clicklinkviewcollection"); $completemessage->template = "emailresearchrequestcomplete"; $completemessage->templatevars = $templatevars; $completemessage->url = $templatevars["teamresearchurl"]; send_user_notification([$requesting_user['ref']], $completemessage); # Log this daily_stat("Processed research request", 0); } } if ($oldassigned_to != $assigned_to) { $assignedmessage = new ResourceSpaceUserNotification(); $assignedmessage->set_subject("lang_researchrequestassigned"); $assignedmessage->set_text("lang_researchrequestassignedmessage"); $assignedmessage->template = "emailresearchrequestassigned"; $assignedmessage->templatevars = $templatevars; $assignedmessage->url = $templatevars["teamresearchurl"]; send_user_notification([$assigned_to], $assignedmessage); } $parameters = array("i",$newstatus, "i",$assigned_to, "i",$ref); ps_query("UPDATE research_request SET status = ?, assigned_to = ? WHERE ref= ?", $parameters); # Copy existing collection $rr_copyexisting = getval("copyexisting", ""); $rr_copyexistingref = getval("copyexistingref", ""); if ($rr_copyexisting != "" && is_numeric($collection)) { $parameters = array("i",$collection, "i",$rr_copyexistingref, "i",$collection); ps_query("INSERT INTO collection_resource(collection,resource) SELECT ?, resource FROM collection_resource WHERE collection = ? AND resource NOT IN (SELECT resource FROM collection_resource WHERE collection = ?)", $parameters); } return true; } /** * Retrieves the collection reference associated with a given research request. * * @param int $ref The reference number of the research request. * @return int|false The collection reference if found, or false if not. */ function get_research_request_collection($ref) { $parameters = array("i",$ref); $return = ps_value("select collection value from research_request where ref=?", $parameters, 0); if (($return == 0) || (strlen($return) == 0)) { return false; } else { return $return; } } /** * Updates the collection reference associated with a specified research request. * * @param int $research The reference number of the research request. * @param int $collection The reference number of the collection to associate. * @return void */ function set_research_collection($research, $collection) { $parameters = array("i",$collection, "i",$research); ps_query("update research_request set collection=? where ref=?", $parameters); }