// warn that no cert has been generated $warnings[] = '<p class="warn">No certificate has been generated.' . ' Please <a href="kmcert.php?close=1" target="_blank">' . 'generate a certificate' . '</a>.' . '</p>'; } // FIXME: hardcoded path $download_url = 'https://' . $_SERVER['SERVER_NAME'] . '/secure/kmcert.php?close=1'; $download_text = 'Create and download your certificate'; if ($has_certificate) { $download_text = 'Download your certificate'; } /* --------- PROJECTS ---------- */ $all_project_ids = get_projects_for_member($sa_url, $user, $user->account_id, true); $num_projects = count($all_project_ids); $project_ids = array(); // Filter out expired projects if ($num_projects > 0) { $projects = lookup_project_details($sa_url, $user, $all_project_ids); foreach ($projects as $proj) { if (!convert_boolean($proj[PA_PROJECT_TABLE_FIELDNAME::EXPIRED])) { $project_ids[] = $proj[PA_PROJECT_TABLE_FIELDNAME::PROJECT_ID]; } } } // Update the count to only the active projects $num_projects = count($project_ids); $is_project_lead = $user->isAllowed(PA_ACTION::CREATE_PROJECT, CS_CONTEXT_TYPE::RESOURCE, null); if ($num_projects == 0) { // warn that the user has no projects $warn = '<p class="warn">You are not a member of any projects.' . ' No default project can be chosen unless you'; if ($is_project_lead) { $warn .= ' <button onClick="window.location=\'edit-project.php\'"><b>create a project</b></button> or'; }
function get_user_project_info($user_id, $name, $signer) { $sa_url = get_first_service_of_type(SR_SERVICE_TYPE::SLICE_AUTHORITY); $projects = get_projects_for_member($sa_url, $signer, $user_id, true); $project_info = lookup_project_details($sa_url, $signer, $projects); $project_data = "<b style='text-decoration: underline;'>{$name}'s projects</b><br>"; foreach ($project_info as $project_id => $project_details) { if ($project_details['expired'] != 1) { $project_data .= "<b>Project name: </b>" . $project_details[PA_PROJECT_TABLE_FIELDNAME::PROJECT_NAME] . "<br>"; $project_data .= $project_details[PA_PROJECT_TABLE_FIELDNAME::LEAD_ID] == $user_id ? "<b>{$name} is lead on this project</b><br>" : ""; $project_data .= "<button onclick='remove_from_project(\"{$user_id}\", \"{$project_id}\");'>Remove</button>"; $project_data .= "<hr style='height: 1px; background-color: #5F584E; margin: 3px'>"; } } if (count($project_info) == 0) { $project_data .= "<i>user has no projects</i>"; } return $project_data; }
function get_project_slice_member_info($sa_url, $ma_url, $user, $allow_expired = False, $project_id = null) { $member_ids = array(); $slice_ids = array(); $slice_objects = array(); $project_objects = array(); $member_objects = array(); $project_slice_map = array(); $project_activeslice_map = array(); if (!is_null($project_id)) { $projects = array($project_id); } else { // This is all project IDs the member belongs to, even expired $projects = get_projects_for_member($sa_url, $user, $user->account_id, true); } if (count($projects) > 0) { // These are the details of these projects $project_objects = lookup_project_details($sa_url, $user, $projects); // We get back all the projects. But optionally filter out expired projects. if (!$allow_expired) { $unexpired_projects = array(); $unexpired_project_objects = array(); $now = new DateTime(); foreach ($project_objects as $project) { $project_id = $project[PA_PROJECT_TABLE_FIELDNAME::PROJECT_ID]; $project_expired = $project[PA_PROJECT_TABLE_FIELDNAME::EXPIRED]; $project_name = $project[PA_PROJECT_TABLE_FIELDNAME::PROJECT_NAME]; // error_log("PEXP = " . $project_id . " " . $project_name . // " " . $project_expired); if (convert_boolean($project_expired)) { continue; } $unexpired_project_objects[] = $project; $unexpired_projects[] = $project_id; } $projects = $unexpired_projects; $project_objects = $unexpired_project_objects; } // At this point, $projects and $project_objects have all // the projects we're interested in: expired or not // Get all slices of which user is a member (expired or not) $slice_member_role_ids = get_slices_for_member($sa_url, $user, $user->account_id, True); $slice_member_ids = array(); foreach ($slice_member_role_ids as $slice_member_role_id) { //NOTE: FOR NOW ONLY ALLOW UNEXPIRED SLICES if (!$slice_member_role_id[SA_SLICE_TABLE_FIELDNAME::EXPIRED]) { $slice_member_id = $slice_member_role_id[SA_SLICE_MEMBER_TABLE_FIELDNAME::SLICE_ID]; $slice_member_ids[] = $slice_member_id; } } // $slice_member_ids is the ID's of slices to which the member belongs // This is indexed by project_id, containing an array of slice data // CHAPI: this doesn't generally work any more, since non-members aren't allowed // to get details for slices they aren't members of //$slice_data = get_slices_for_projects($sa_url, $user, $projects, $allow_expired); $slice_data = get_slices_in_projects($sa_url, $user, $slice_member_ids, $projects, $allow_expired); // error_log("SLICE_MEMBER_IDS = " . print_r($slice_member_ids, true)); // error_log("SLICE_DATA = = " . print_r($slice_data, true)); // error_log("PROJECTS = " . print_r($projects, true)); foreach ($project_objects as $project) { $project_id = $project[PA_PROJECT_TABLE_FIELDNAME::PROJECT_ID]; $proj_lead_id = $project[PA_PROJECT_TABLE_FIELDNAME::LEAD_ID]; $proj_slices = $slice_data[$project_id]; $member_ids[] = $proj_lead_id; $proj_slice_ids = array(); $proj_activeslice_ids = array(); foreach ($proj_slices as $proj_slice) { $proj_slice_id = $proj_slice[SA_SLICE_TABLE_FIELDNAME::SLICE_ID]; $proj_slice_id_expired = $proj_slice[SA_SLICE_TABLE_FIELDNAME::EXPIRED]; if (!in_array($proj_slice_id, $slice_member_ids)) { continue; } $proj_slice_ids[] = $proj_slice_id; //error_log("slice id = ". $proj_slice_id . " expired = " . $proj_slice_id_expired); if (!$proj_slice_id_expired) { //error_log("Adding active slice to list ...."); $proj_activeslice_ids[] = $proj_slice_id; } $owner_id = $proj_slice[SA_SLICE_TABLE_FIELDNAME::OWNER_ID]; if (!in_array($owner_id, $member_ids)) { $member_ids[] = $owner_id; } // Optionally filter out expired slices if (!convert_boolean($proj_slice_id_expired) || $allow_expired) { $slice_objects[$proj_slice_id] = $proj_slice; } } // $proj_slice_ids = lookup_slice_ids($sa_url, $user, $project_id); $project_slice_map[$project_id] = $proj_slice_ids; $project_activeslice_map[$project_id] = $proj_activeslice_ids; //error_log("GPSMI: project ".$project_id." ids = ".print_r($proj_activeslice_ids,true)); $slice_ids = array_merge($slice_ids, $proj_slice_ids); // is this ok } } if (count($member_ids) > 0) { $member_objects = lookup_member_details($ma_url, $user, $member_ids); } // error_log("SIDS = " . print_r($slice_ids, true)); // error_log("MIDS = " . print_r($member_ids, true)); // error_log("SMIDS = " . print_r($slice_member_ids, true)); // foreach($project_objects as $po) { error_log("PO = " . print_r($po, true)); } // foreach($slice_objects as $so) { error_log("SO = " . print_r($so, true)); } // foreach($member_objects as $mo) { error_log("MO = " . print_r($mo, true)); } // error_log("PSM = " . print_r($project_slice_map, true)); // error_log("PASM = " . print_r($project_activeslice_map, true)); // At this point, we should have // project_objects has all the projects to which the member belongs // expired or not by request // slice_objects has all the slices to which the member belongs // expired or not by request // member_objects // all the members who are leads of slices or projects in previous lists return array($project_objects, $slice_objects, $member_objects, $project_slice_map, $project_activeslice_map); }
print "<p>You have " . count($rpids) . " open <a href='dashboard.php#projects'>request(s) to join a project</a>.</p>"; } } else { print "<h2>Select a project to join</h2>\n"; print "<p><i>Please do not try to join arbitrary projects. Abuse of\n this functionality may result in revocation of your GENI account.\n </i></p>"; /* datatables.net (for sortable/searchable tables) */ echo '<script type="text/javascript">'; echo '$(document).ready( function () {'; echo ' $(\'#projects\').DataTable({paging: false});'; echo '} );'; echo '</script>'; print "<table id=\"projects\" class=\"display\">\n"; print "<thead>\n"; print "<tr><th>Project</th><th>Purpose</th><th>Project Lead</th><th>Join</th></tr>\n"; $jointhis_url = "join-this-project.php?project_id="; $project_details = lookup_project_details($sa_url, $user, $pids); usort($project_details, "project_name_compare"); // error_log("PROJ_DETAILS = " . print_r($project_details, true)); $ma_url = get_first_service_of_type(SR_SERVICE_TYPE::MEMBER_AUTHORITY); $member_names = lookup_member_names_for_rows($ma_url, $user, $project_details, PA_PROJECT_TABLE_FIELDNAME::LEAD_ID); // error_log("MEMBER_DETAILS = " . print_r($member_names, true)); print "</thead><tbody>\n"; foreach ($project_details as $project) { // $project = lookup_project($sa_url, $user, $project_id); $expired = $project[PA_PROJECT_TABLE_FIELDNAME::EXPIRED]; if (convert_boolean($expired)) { continue; } print "<tr><td>"; print $project[PA_PROJECT_TABLE_FIELDNAME::PROJECT_NAME]; print "</td><td>";