function handle_lead_request($request_id, $new_status, $approver, $user_uid, $reason, $signer)
{
    $ma_url = get_first_service_of_type(SR_SERVICE_TYPE::MEMBER_AUTHORITY);
    $conn = portal_conn();
    if ($new_status == "approved") {
        $response = add_member_privilege($ma_url, $signer, $user_uid, "PROJECT_LEAD");
        if (!$response) {
            error_log("User {$user_uid} already a project lead, cannot be made a project lead");
        } else {
            send_approved_mail(geni_load_user_by_member_id($user_uid), $reason, $approver);
        }
    }
    $sql = "UPDATE lead_request set " . "status = " . $conn->quote($new_status, 'text') . ", " . "reason = " . $conn->quote($reason, 'text') . ", " . "approver = " . $conn->quote($approver, 'text') . "where id = " . $conn->quote($request_id, 'text');
    $db_response = db_execute_statement($sql, "Update lead request id#:" . $request_id);
    $db_error = $db_response[RESPONSE_ARGUMENT::OUTPUT];
    if ($db_error == "") {
        print "Response successfully stored";
    } else {
        print "DB error: " . $db_error;
        error_log("DB error when updating lead request table: " . $db_error);
    }
}
Example #2
0
function removeFromGroup($project_id, $group_name, $member_id, $user)
{
    if (!isset($project_id) || $project_id == "-1" || !uuid_is_valid($project_id)) {
        error_log("iRODS removeFromGroup: not a valid project ID. Nothing to do. {$project_id}");
        return -1;
    }
    if (!isset($group_name) || is_null($group_name) || $group_name === '') {
        error_log("iRODS removeFromGroup: not a valid group name. Nothing to do. {$project_id}, {$group_name}");
        return -1;
    }
    if (!isset($member_id) || $member_id == "-1" || !uuid_is_valid($member_id)) {
        error_log("iRODS removeFromGroup: not a valid member ID. Nothing to do. {$member_id}");
        return -1;
    }
    global $disable_irods;
    if (isset($disable_irods)) {
        error_log("irods removeFromGroup: disable_irods was set. Doing nothing.");
        return -1;
    }
    // must get member username
    $member = geni_load_user_by_member_id($member_id);
    $username = base_username($member);
    error_log("iRODS removeFromGroup {$group_name} member {$member_id} with username {$username}");
    global $irods_url;
    global $portal_irods_user;
    global $portal_irods_pw;
    global $irods_cert;
    $removed = -1;
    // -1=Error, 0=Success, 1=Already gone
    try {
        // Note the method is called doRESTCall, but the op arg tells the real method
        $rmstruct = doRESTCall($irods_url . IRODS_REMOVE_USER_URI1 . $group_name . IRODS_REMOVE_USER_URI2 . $username, $portal_irods_user, $portal_irods_pw, "DELETE", "", "", $irods_cert);
        // look for (\r or \n or \r\n){2} and move past that
        preg_match("/(\r|\n|\r\n){2}([^\r\n].+)\$/", $rmstruct, $m);
        if (!array_key_exists(2, $m)) {
            error_log("irods removeFromGroup: Malformed DELETE result from iRODS - error? Got: " . $rmstruct);
            throw new Exception("Failed to remove member from iRODS group - server error: " . $rmstruct);
        }
        //    error_log("DELETE result content: " . $m[2]);
        $rmjson = json_decode($m[2], true);
        // Parse the json return
        //    error_log("remove user from group result: " . print_r($rmjson, true));
        if (is_array($rmjson)) {
            $status = null;
            $msg = null;
            $groupCmdStatus = null;
            if (array_key_exists("status", $rmjson)) {
                $status = $rmjson["status"];
                // Return true if 0 if removed the user, 1 if user wasnt in the group, -1 on error
                if ($status == IRODS_STATUS_ERROR) {
                    $removed = -1;
                } elseif ($status == IRODS_STATUS_SUCCESS) {
                    $removed = 0;
                }
            }
            if (array_key_exists("message", $rmjson)) {
                $msg = $rmjson["message"];
                //	error_log("removeFromGroup result: '$msg'");
            }
            if (array_key_exists(IRODS_USER_GROUP_COMMAND_STATUS, $rmjson)) {
                $groupCmdStatus = $rmjson[IRODS_USER_GROUP_COMMAND_STATUS];
                if ($groupCmdStatus != IRODS_STATUS_SUCCESS) {
                    if ($groupCmdStatus === IRODS_STATUS_BAD_USER) {
                        error_log("iRODS: user {$username} was not in group {$group_name} to delete. ({$groupCmdStatus}: '{$msg}')");
                    } else {
                        error_log("iRODS failed to remove {$username} from group {$group_name}: {$groupCmdStatus}: '{$msg}'");
                    }
                }
            } elseif ($removed !== 0) {
                error_log("iRODS failed to remove user {$username} from group {$group_name}: '{$msg}'");
            }
        } else {
            $removed = -1;
            error_log("iRODS malformed return from removeUserFromGroup: " . print_r($rmjson, true));
        }
    } catch (Exception $e) {
        error_log("Error doing iRODS delete to remove member from group: " . $e->getMessage());
        $removed = -1;
    }
    // Return 0 if removed the user, 1 if user already not in the group, -1 on error
    return $removed;
}