AddPersonToSite(intval($person_id), intval($site_id)); plc_redirect(l_person($person_id)); } case 'remove-person-from-sites':{ $site_ids = $_POST['site_ids']; if (!$site_ids) { drupal_set_message("action=$action - No site selected"); return; } foreach ($site_ids as $site_id) { $api->DeletePersonFromSite(intval($person_id), intval($site_id)); } plc_redirect(l_person($person_id)); } case 'remove-roles-from-person':{ $role_ids = $_POST['role_ids']; if (!$role_ids) { drupal_set_error("You have not selected role(s) to remove"); } else { foreach ($role_ids as $role_id) { if ($api->DeleteRoleFromPerson(intval($role_id), intval($person_id)) != 1) { drupal_set_error("Could not remove role $role_id from person $person_id"); } } } plc_redirect(l_person_roles($person_id)); } case 'add-role-to-person':{ $role_id = $_POST['role_id']; if (!$role_id) { drupal_set_error("You have not selected a role to add"); } else if ($api->AddRoleToPerson(intval($role_id), intval($person_id)) != 1) { drupal_set_error("Could not add role $role_id to person $person_id"); } plc_redirect(l_person_roles($person_id)); } case 'enable-person':{ $fields = array("enabled" => true); $api->UpdatePerson(intval($person_id), $fields); plc_redirect(l_person($person_id)); } case 'disable-person':{ $fields = array("enabled" => false); $api->UpdatePerson(intval($person_id), $fields); plc_redirect(l_person($person_id)); } case 'become-person':{ $plc->BecomePerson(intval($person_id)); plc_redirect(l_person(intval($person_id))); } case 'delete-person':{ $api->DeletePerson(intval($person_id)); plc_redirect(l_persons()); } case 'delete-keys':{ $key_ids = $_POST['key_ids']; if (!$key_ids) { drupal_set_message("action=$action - No key selected"); return; } $success = true; $counter = 0; foreach ($key_ids as $key_id) { if ($api->DeleteKey(intval($key_id)) != 1) { $success = false; } else { $counter++; } } if ($success) { drupal_set_message("Deleted $counter key(s)"); } else { drupal_set_error("Could not delete all selected keys, only $counter were removed"); } plc_redirect(l_person($person_id)); } case 'upload-key':{ if (!isset($_FILES['key'])) { drupal_set_message("action=$action, no key file set"); return; } $key_file = $_FILES['key']['tmp_name']; if (!$key_file) { plc_error("Please select a valid SSH key file to upload"); return; } $fp = fopen($key_file, "r"); $key = ""; if (!$fp) { plc_error("Unable to open key file $key_file"); return; } // opened the key file, read the one line of contents // The POST operation always creates a file even if the filename // the user specified was garbage. If there was some problem // with the source file, we'll get a zero length read here. $key = fread($fp, filesize($key_file)); fclose($fp); $key_id = $api->AddPersonKey(intval($person_id), array("key_type" => 'ssh', "key" => $key)); if ($key_id >= 1) { drupal_set_message("New key added"); } else { drupal_set_error("Could not add key, please verify your SSH file content\n" . $api->error()); } plc_redirect(l_person($person_id)); } case 'update-person':{ $person_id = $_POST['person_id']; // attempt to update this person $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $title = $_POST['title']; $email = $_POST['email']; $phone = $_POST['phone']; $url = $_POST['url']; $bio = str_replace("\r", "", $_POST['bio']); $password1 = $_POST['password1']; $password2 = $_POST['password2']; if ($password1 != $password2) { drupal_set_error("The passwords do not match"); plc_redirect(l_person($person_id)); } $fields = array(); $fields['first_name'] = $first_name; $fields['last_name'] = $last_name; $fields['title'] = $title; $fields['email'] = $email; $fields['phone'] = $phone; $fields['url'] = $url; $fields['bio'] = $bio; if ($password1 != "") { $fields['password'] = $password1; } if ($api->UpdatePerson(intval($person_id), $fields) == 1) { drupal_set_message("$first_name $last_name updated"); } else { drupal_set_error("Could not update person $person_id" . $api->error()); } plc_redirect(l_person($person_id)); break; } //////////////////////////////////////////////////////////// nodes case 'node-boot-state':{ $node_id = intval($_POST['node_id']); $boot_state = $_POST['boot_state']; $result = $api->UpdateNode($node_id, array("boot_state" => $boot_state)); if ($result == 1) { drupal_set_message("boot state updated"); plc_redirect(l_node($node_id)); } else { drupal_set_error("Could not set boot_state '$boot_state'"); } break; } case 'delete-node':{ $node_id = intval($_POST['node_id']); $result = $api->DeleteNode(intval($node_id)); if ($api == 1) { drupal_set_message("Node $node_id deleted"); plc_redirect(l_nodes()); } else { drupal_set_error("Could not delete node $node_id"); } break; } case 'update-node':{ $node_id = intval($_POST['node_id']); $hostname = $_POST['hostname']; $model = $_POST['model']; $node_type = $_POST['node_type']; $fields = array("hostname" => $hostname, "model" => $model, "node_type" => $node_type); $api->UpdateNode($node_id, $fields); $error = $api->error(); if (empty($error)) { drupal_set_message("Update node $hostname"); plc_redirect(l_node($node_id)); } else { drupal_set_error($error); } break; } // this code will ensure that at most one PCU gets attached to the node case 'attach-pcu':{ $node_id = intval($_POST['node_id']); $pcu_id = intval($_POST['pcu_id']); $port = intval($_POST['port']); // always start with deleting former PCUs $nodes = $api->GetNodes(array($node_id), array('pcu_ids')); $former_pcu_ids = $nodes[0]['pcu_ids']; if ($former_pcu_ids) { foreach ($former_pcu_ids as $former_pcu_id) { if ($api->DeleteNodeFromPCU($node_id, $former_pcu_id) == 1) { drupal_set_message('Detached node ' . $node_id . ' from PCU ' . $pcu_id); } else { drupal_set_error('Could not detach node ' . $node_id . ' from PCU ' . $pcu_id); } } } // re-attach only if provided pcu_id >=0 if ($pcu_id >= 0) { if ($api->AddNodeToPCU($node_id, $pcu_id, $port) == 1) { drupal_set_message('Attached node ' . $node_id . ' to PCU ' . $pcu_id . ' on port ' . $port); } else { drupal_set_error('Failed to attach node ' . $node_id . ' to PCU ' . $pcu_id . ' on port ' . $port); } } else { drupal_set_message('Detached node from all PCUs'); } plc_redirect(l_node($node_id)); break; } case 'reboot-node-with-pcu':{ $node_id = intval($_POST['node_id']); $hostname = $_POST['hostname']; $test = $_POST['test']; settype($test, "boolean"); $ret = $api->RebootNodeWithPCU($node_id, $test); $error = $api->error(); if (empty($error)) { drupal_set_message("Reboot node $hostname: $ret"); plc_redirect(l_node($node_id)); } else { drupal_set_error($error); } break; } //////////////////////////////////////////////////////////// interfaces case 'delete-interfaces':{ $interface_ids = $_POST['interface_ids']; if (!$interface_ids) { drupal_set_message("action=$action - No interface selected"); return; } $success = true; $counter = 0; foreach ($interface_ids as $interface_id) { if ($api->DeleteInterface(intval($interface_id)) != 1) { $success = false; } else { $counter++; } } if ($success) { drupal_set_message("Deleted $counter interface(s)"); } else { drupal_set_error("Could not delete all selected interfaces, only $counter were removed"); } plc_redirect(l_node($_POST['node_id'])); } case 'new-interface':{ plc_redirect(l_interface_add($_POST['node_id'])); } case 'add-interface':{ $node_id = intval($_POST['node_id']); foreach ($interface_details as $field) { $interface[$field] = $_POST[$field]; // these must be integers if (in_array($field, array('bwlimit', 'node_id'))) { if (empty($interface[$field])) { unset($interface[$field]); } else { $interface[$field] = intval($interface[$field]); } } } $interface_id = $api->AddInterface($node_id, $interface); if ($interface_id <= 0) { drupal_set_error("Could not create interface"); drupal_set_error($api->error()); } else { $ip = $interface['ip']; drupal_set_message("Interface $ip added into node $node_id"); if ($_POST['is-virtual']) { $ifname = $_POST['ifname']; if ($api->AddInterfaceTag($interface_id, "ifname", $ifname) <= 0) { drupal_set_error("Could not set tag 'ifname'=$ifname"); } else { drupal_set_message("Set tag 'ifname'=$ifname"); } $alias = $_POST['alias']; // deafult to interface_id if (!$alias) { $alias = strval($interface_id); } if ($api->AddInterfaceTag($interface_id, "alias", $alias) <= 0) { drupal_set_error("Could not set tag 'alias'=$alias"); } else { drupal_set_message("Set tag 'alias'=$alias"); } } } plc_redirect(l_node_interfaces($node_id)); } case 'update-interface':{ $interface_id = $_POST['interface_id']; foreach ($interface_details as $field) { $interface[$field] = $_POST[$field]; if (in_array($field, array('bwlimit', 'node_id'))) { if (intval($interface[$field]) != 0) { $interface[$field] = intval($interface[$field]); } elseif ($field == 'bwlimit') { $interface[$field] = null; } } } $result = $api->UpdateInterface(intval($interface_id), $interface); if ($result == 1) { drupal_set_message("Interface $interface_id updated"); } else { drupal_set_error("Could not update interface: " . $api->error()); } plc_redirect(l_interface($interface_id)); } //////////////////////////////////////////////////////////// sites case 'delete-site':{ $site_id = intval($_POST['site_id']); if ($api->DeleteSite($site_id) == 1) { drupal_set_message("Site $site_id deleted"); } else { drupal_set_error("Failed to delete site $site_id"); } plc_redirect(l_sites()); break; } case 'expire-all-slices-in-site':{ // xxx todo drupal_set_message("action $action not implemented in actions.php -- need tweaks and test"); return; //// old code from sites/expire.php $sites = $api->GetSites(array(intval($site_id))); $site = $sites[0]; // xxx why not 'now?' $expiration = strtotime($_POST['expires']); // loop through all slices for site foreach ($site['slice_ids'] as $slice_id) { $api->UpdateSlice($slice_id, array("expires" => $expiration)); } // update site to not allow slice creation or renewal $api->UpdateSite($site_id, array("max_slices" => 0)); plc_redirect(l_site($site_id)); break; } case 'update-site':{ $site_id = intval($_POST['site_id']); $name = $_POST['name']; $abbreviated_name = $_POST['abbreviated_name']; $url = $_POST['url']; $latitude = floatval($_POST['latitude']); $longitude = floatval($_POST['longitude']); //$max_slivers= $_POST['max_slivers']; $fields = array("name" => $name, "abbreviated_name" => $abbreviated_name, "url" => $url, "latitude" => floatval($latitude), "longitude" => floatval($longitude)); if ($_POST['login_base']) { $fields['login_base'] = $_POST['login_base']; } if (isset($_POST['max_slices'])) { $fields['max_slices'] = intval($_POST['max_slices']); } if (isset($_POST['enabled'])) { $fields['enabled'] = (bool) $_POST['enabled']; } $retcod = $api->UpdateSite(intval($site_id), $fields); if ($retcod == 1) { drupal_set_message("Site $name updated"); } else { drupal_set_error("Could not update site $site_id"); } plc_redirect(l_site($site_id)); break; } //////////////////////////////////////////////////////////// slices case 'delete-slice':{ $slice_id = $_POST['slice_id']; if ($api->DeleteSlice(intval($slice_id)) == 1) { drupal_set_message("Slice $slice_id deleted"); plc_redirect(l_slices()); } else { drupal_set_error("Could not delete slice $slice_id " . $api->error()); } break; } case 'update-slice':{ $slice_id = $_POST['slice_id']; $name = $_POST['name']; $description = $_POST['description']; $url = $_POST['url']; $fields = array("description" => $description, "url" => $url); $api->UpdateSlice(intval($slice_id), $fields); $error = $api->error(); if (empty($error)) { drupal_set_message("Update slice $name"); plc_redirect(l_slice($slice_id)); } else { drupal_set_error($error); } break; } case 'renew-slice': { $slice_id = intval($_POST['slice_id']); $expires = intval($_POST['expires']); // 8 weeks from now // xxx $now = time(); $WEEK = 7 * 24 * 3600; $WEEKS = 8; $MAX_FUTURE = $WEEKS * $WEEK; if (($expires - $now) > $MAX_FUTURE) { drupal_set_error("Cannot renew slice that far in the future, max is $WEEKS weeks from now"); plc_redirect(l_slice($slice_id)); } if ($api->UpdateSlice($slice_id, array('expires' => $expires)) == 1) { drupal_set_message("Slice renewed"); } else { drupal_set_error("Could not update slice $slice_id"); } plc_redirect(l_slice($slice_id)); break; } case 'remove-persons-from-slice':{ $slice_id = intval($_POST['slice_id']); $person_ids = $_POST['person_ids']; $return_url = $_POST['return_url']; if (!$return_url) { $return_url = l_slice($slice_id) . "&show_persons=true"; } $slice_name = ""; $tmp_slices = $api->GetSlices($slice_id, array("name")); if (count($tmp_slices) > 0) { $tmp_slice = $tmp_slices[0]; $slice_name = $tmp_slice["name"]; } $notify_subject = "Removed from slice: " . $slice_name; $notify_body = sprintf("You have been removed from the slice %s. Our support team will be glad to answer any question that you might have. ", $slice_name); $notify_person_ids = array(); $success = true; $counter = 0; foreach ($person_ids as $person_id) { if ($api->DeletePersonFromSlice(intval($person_id), $slice_id) != 1) { $success = false; } else { array_push($notify_person_ids, intval($person_id)); $counter++; } } if ($success) { $adm->NotifyPersons($notify_person_ids, $notify_subject, $notify_body); drupal_set_message("Deleted $counter person(s)"); } else { drupal_set_error("Could not delete all selected persons, only $counter were removed"); } plc_redirect($return_url); break; } case 'add-persons-in-slice':{ $slice_id = intval($_POST['slice_id']); $person_ids = $_POST['person_ids']; $return_url = $_POST['return_url']; if (!$return_url) { $return_url = l_slice($slice_id) . "&show_persons=true"; } $slice_name = ""; $tmp_slices = $api->GetSlices($slice_id, array("name")); if (count($tmp_slices) > 0) { $tmp_slice = $tmp_slices[0]; $slice_name = $tmp_slice["name"]; } $notify_subject = "Added to slice: " . $slice_name; $notify_body = sprintf("You have been added to the slice %s as a user. You can go to your slice page following the link below: https://%s:%d/db/slices/index.php?id=%d Our support team will be glad to answer any question that you might have. ", $slice_name, PLC_WWW_HOST, PLC_WWW_SSL_PORT, $slice_id); $notify_person_ids = array(); $success = true; $counter = 0; foreach ($person_ids as $person_id) { if ($api->AddPersonToSlice(intval($person_id), $slice_id) != 1) { $success = false; } else { array_push($notify_person_ids, intval($person_id)); $counter++; } } if ($success) { $adm->NotifyPersons($notify_person_ids, $notify_subject, $notify_body); drupal_set_message("Added $counter person(s)"); } else { drupal_set_error("Could not add all selected persons, only $counter were added"); } plc_redirect($return_url); break; } case 'remove-nodes-from-slice':{ $slice_id = intval($_POST['slice_id']); $node_ids = array_map("intval", $_POST['node_ids']); $count = count($node_ids); if ($api->DeleteSliceFromNodes($slice_id, $node_ids) == 1) { drupal_set_message("Removed $count node(s)"); } else { drupal_set_error("Could not remove selected nodes"); } plc_redirect(l_slice_nodes($slice_id)); break; } case 'add-nodes-in-slice':{ $slice_id = intval($_POST['slice_id']); $node_ids = array_map("intval", $_POST['node_ids']); $count = count($node_ids); if ($api->AddSliceToNodes($slice_id, $node_ids) == 1) { drupal_set_message("Added $count node(s)"); } else { drupal_set_error("Could not add all selected nodes"); } plc_redirect(l_slice_nodes($slice_id)); break; } case 'update-initscripts':{ // expects: slice_id & name & previous-initscript & previous-initscript-code // & initscript & initscript-code $slice_id = intval($_POST['slice_id']); $previous_initscript = $_POST['previous-initscript']; $initscript = $_POST['initscript']; $previous_initscript_code = html_entity_decode($_POST['previous-initscript-code']); $initscript_code = $_POST['initscript-code']; $changes = false; if (strcmp($initscript, $previous_initscript) != 0) { $newvalue = $api->SetSliceInitscript($slice_id, $initscript); $status = (strcmp($newvalue, $initscript) == 0) ? "OK" : "failed"; if (!$initscript) { drupal_set_message("Removed shared initscript '" . $previous_initscript . "' " . $status); } else { drupal_set_message("Replaced shared initscript with '" . $initscript . "' " . $status); } $changes = true; } // somehow some \r chars make it here; just ignore them $previous_initscript_code = str_replace("\r", "", $previous_initscript_code); // plc_debug_txt('previous initscript_code after cr',$previous_initscript_code); $initscript_code = str_replace("\r", "", $initscript_code); // make sure the script ends with a single \n $initscript_code = trim($initscript_code); if (!empty($initscript_code) && $initscript_code[strlen($initscript_code) - 1] != "\n") { $initscript_code .= "\n"; } // plc_debug_txt('initscript_code after cr & nl/eof',$initscript_code); if (strcmp($initscript_code, $previous_initscript_code) != 0) { $newvalue = $api->SetSliceInitscriptCode($slice_id, $initscript_code); // plc_debug_txt('newvalue',$newvalue); $status = (strcmp($newvalue, $initscript_code) == 0) ? "OK" : "failed"; if (!$initscript_code) { drupal_set_message("Removed initscript code " . $status); } else { drupal_set_message("Installed new initscript code " . $status); } $changes = true; } if (!$changes) { drupal_set_message("No changes required in initscript"); } plc_redirect(l_slice($slice_id) . "&show_details=0&show_initscripts=1"); break; } case 'delete-slice-tags':{ $slice_id = intval($_POST['slice_id']); $slice_tag_ids = array_map("intval", $_POST['slice_tag_ids']); $count = 0; $success = true; foreach ($slice_tag_ids as $slice_tag_id) { if ($api->DeleteSliceTag($slice_tag_id)) { $count += 1; } else { drupal_set_error("Could not delete slice tag: slice_tag_id = $slice_tag_id"); $success = false; } } if ($success) { drupal_set_message("Deleted $count slice tag(s)"); } plc_redirect(l_slice($slice_id) . "&show_tags=1"); break; } case 'add-slice-tag':{ $slice_id = intval($_POST['slice_id']); $tag_type_id = intval($_POST['tag_type_id']); $value = $_POST['value']; $node_id = intval($_POST['node_id']); $nodegroup_id = intval($_POST['nodegroup_id']); $result = null; if ($node_id) { $result = $api->AddSliceTag($slice_id, $tag_type_id, $value, $node_id); } elseif ($nodegroup_id) { $result = $api->AddSliceTag($slice_id, $tag_type_id, $value, null, $nodegroup_id); } else { $result = $api->AddSliceTag($slice_id, $tag_type_id, $value); } if ($result) { drupal_set_message("Added slice tag."); } else { drupal_set_error("Could not add slice tag"); } if ($_POST['sliver_action']) { plc_redirect(l_sliver($node_id, $slice_id)); } else { plc_redirect(l_slice($slice_id) . "&show_tags=true"); } break; } //////////////////////////////////////////////////////////// tag types case 'update-tag-type':{ // get post vars $tag_type_id = intval($_POST['tag_type_id']); $tagname = $_POST['tagname']; $min_role_id = intval($_POST['min_role_id']); $description = $_POST['description']; $category = $_POST['category']; // make tag_type_fields dict $tag_type_fields = array("min_role_id" => $min_role_id, "tagname" => $tagname, "description" => $description, "category" => $category, ); if ($api->UpdateTagType($tag_type_id, $tag_type_fields) == 1) { drupal_set_message("Tag type $tagname updated"); } else { drupal_set_error("Could not update tag type $tag_type_id\n" . $api->error()); } plc_redirect(l_tag($tag_type_id)); break; } case 'add-tag-type':{ // get post vars $tagname = $_POST['tagname']; $min_role_id = intval($_POST['min_role_id']); $description = $_POST['description']; $category = $_POST['category']; // make tag_type_fields dict $tag_type_fields = array("min_role_id" => $min_role_id, "tagname" => $tagname, "description" => $description, "category" => $category, ); // Add it! $tag_type_id = $api->AddTagType($tag_type_fields); if ($tag_type_id > 0) { drupal_set_message("tag type $tag_type_id created"); } else { drupal_set_error("Could not create tag type $tagname"); } plc_redirect(l_tags()); break; } case 'delete-tag-types':{ $tag_type_ids = $_POST['tag_type_ids']; if (!$tag_type_ids) { drupal_set_message("action=$action - No tag selected"); return; } $success = true; $counter = 0; foreach ($tag_type_ids as $tag_type_id) { if ($api->DeleteTagType(intval($tag_type_id)) != 1) { $success = false; } else { $counter++; } } if ($success) { drupal_set_message("Deleted $counter tag(s)"); } else { drupal_set_error("Could not delete all selected tags, only $counter were removed"); } plc_redirect(l_tags()); break; } case 'remove-roles-from-tag-type':{ $tag_type_id = $_POST['tag_type_id']; $role_ids = $_POST['role_ids']; if (!$role_ids) { drupal_set_error("You have not selected role(s) to remove"); } else { foreach ($role_ids as $role_id) { if ($api->DeleteRoleFromTagType(intval($role_id), intval($tag_type_id)) != 1) { drupal_set_error("Could not remove role $role_id from tag type $tag_type_id"); } } } plc_redirect(l_tag_roles($tag_type_id)); } case 'add-role-to-tag-type':{ $tag_type_id = $_POST['tag_type_id']; $role_id = $_POST['role_id']; if (!$role_id) { drupal_set_error("You have not selected a role to add"); } else if ($api->AddRoleToTagType(intval($role_id), intval($tag_type_id)) != 1) { drupal_set_error("Could not add role $role_id to tag $tag_type_id"); } plc_redirect(l_tag_roles($tag_type_id)); } //////////////////////////////////////// tags case 'set-tag-on-node': case 'set-tag-on-site': case 'set-tag-on-person': case 'set-tag-on-interface': { $mode = null; if ($action == 'set-tag-on-node') { $mode = 'node'; } if ($action == 'set-tag-on-site') { $mode = 'site'; } if ($action == 'set-tag-on-person') { $mode = 'person'; } if ($action == 'set-tag-on-interface') { $mode = 'interface'; } if ($mode == 'node') { $id = intval($_POST['node_id']); } else if ($mode == 'site') { $id = intval($_POST['site_id']); } else if ($mode == 'person') { $id = intval($_POST['person_id']); } else { $id = intval($_POST['interface_id']); } $tag_type_id = intval($_POST['tag_type_id']); $value = $_POST['value']; $tag_types = $api->GetTagTypes(array($tag_type_id)); if (count($tag_types) != 1) { drupal_set_error("Could not locate tag_type_id $tag_type_id
Tag not set."); } else { if ($mode == 'node') { $tags = $api->GetNodeTags(array('node_id' => $id, 'tag_type_id' => $tag_type_id)); } else if ($mode == 'site') { $tags = $api->GetSiteTags(array('site_id' => $id, 'tag_type_id' => $tag_type_id)); } else if ($mode == 'person') { $tags = $api->GetPersonTags(array('person_id' => $id, 'tag_type_id' => $tag_type_id)); } else { $tags = $api->GetInterfaceTags(array('interface_id' => $id, 'tag_type_id' => $tag_type_id)); } // already has a tag set if (count($tags) == 1) { $tag = $tags[0]; if ($mode == 'node') { $result = $api->UpdateNodeTag($tag['node_tag_id'], $value); } else if ($mode == 'site') { $result = $api->UpdateSiteTag($tag['site_tag_id'], $value); } else if ($mode == 'person') { $result = $api->UpdatePersonTag($tag['person_tag_id'], $value); } else { $result = $api->UpdateInterfaceTag($tag['interface_tag_id'], $value); } if ($result == 1) { drupal_set_message("Updated tag, new value = $value"); } else { drupal_set_error("Could not update tag"); } // no such tag set yet on that object } else { if ($mode == 'node') { $tag_id = $api->AddNodeTag($id, $tag_type_id, $value); } else if ($mode == 'site') { $tag_id = $api->AddSiteTag($id, $tag_type_id, $value); } else if ($mode == 'person') { $tag_id = $api->AddPersonTag($id, $tag_type_id, $value); } else { $tag_id = $api->AddInterfaceTag($id, $tag_type_id, $value); } if ($tag_id) { drupal_set_message("Created tag, new value = $value"); } else { drupal_set_error("Could not create tag"); } } } if ($mode == 'node') { plc_redirect(l_node_tags($id)); } else if ($mode == 'site') { plc_redirect(l_site_tags($id)); } else if ($mode == 'person') { plc_redirect(l_person_tags($id)); } else { plc_redirect(l_interface_tags($id)); } } case 'delete-node-tags': case 'delete-site-tags': case 'delete-person-tags': case 'delete-interface-tags':{ $mode = null; if ($action == 'delete-node-tags') { $mode = 'node'; } if ($action == 'delete-site-tags') { $mode = 'site'; } if ($action == 'delete-person-tags') { $mode = 'person'; } if ($action == 'delete-interface-tags') { $mode = 'interface'; } if ($mode == 'node') { $id = $_POST['node_id']; $tag_ids = $_POST['node_tag_ids']; } else if ($mode == 'site') { $id = $_POST['site_id']; $tag_ids = $_POST['site_tag_ids']; } else if ($mode == 'person') { $id = $_POST['person_id']; $tag_ids = $_POST['person_tag_ids']; } else { $id = $_POST['interface_id']; $tag_ids = $_POST['interface_tag_ids']; } if (!$tag_ids) { drupal_set_message("action=$action - No tag selected"); return; } $success = true; $counter = 0; foreach ($tag_ids as $tag_id) { if ($mode == 'node') { $retcod = $api->DeleteNodeTag(intval($tag_id)); } else if ($mode == 'site') { $retcod = $api->DeleteSiteTag(intval($tag_id)); } else if ($mode == 'person') { $retcod = $api->DeletePersonTag(intval($tag_id)); } else { $retcod = $api->DeleteInterfaceTag(intval($tag_id)); } if ($retcod != 1) { $success = false; } else { $counter++; } } if ($success) { drupal_set_message("Deleted $counter tag(s)"); } else { drupal_set_error("Could not delete all selected tags, only $counter were removed"); } if ($mode == 'node') { plc_redirect(l_node_tags($id)); } else if ($mode == 'site') { plc_redirect(l_site_tags($id)); } else if ($mode == 'person') { plc_redirect(l_person_tags($id)); } else { plc_redirect(l_interface_tags($id)); } } //////////////////////////////////////// nodegroups case 'update-nodegroup':{ $nodegroup_id = $_POST['nodegroup_id']; $groupname = $_POST['groupname']; $value = $_POST['value']; $fields = array(); $fields['groupname'] = $groupname; $fields['value'] = $value; if ($api->UpdateNodeGroup($nodegroup_id, $fields) == 1) { drupal_set_message('Nodegroup updated'); } else { drupal_set_error("Could not update nodegroup $groupname"); } plc_redirect(l_nodegroup($nodegroup_id)); } case 'add-nodegroup':{ $groupname = $_POST['groupname']; if (!$groupname) { drupal_set_error('Empty groupname'); plc_redirect(l_nodegroups()); } $tag_type_id = intval($_POST['tag_type_id']); if (!$tag_type_id) { drupal_set_error('You must select a tag in the dropdown list'); plc_redirect(l_nodegroups()); } $value = $_POST['value']; if (!$value) { drupal_set_message("Empty value.. let's see .."); } if ($api->AddNodeGroup($groupname, $tag_type_id, $value) > 0) { drupal_set_message("Nodegroup $groupname created"); } else { drupal_set_error("Could not create nodegroup $groupname"); } plc_redirect(l_nodegroups()); break; } case 'delete-nodegroups':{ $nodegroup_ids = $_POST['nodegroup_ids']; if (!$nodegroup_ids) { drupal_set_message("action=delete-nodegroups - No group selected"); plc_redirect(l_nodegroups()); } $success = true; $counter = 0; foreach ($nodegroup_ids as $nodegroup_id) { if ($api->DeleteNodeGroup(intval($nodegroup_id)) != 1) { $success = false; } else { $counter++; } } if ($success) { drupal_set_message("Deleted $counter group(s)"); } else { drupal_set_error("Could not delete all selected groups, only $counter were removed"); } plc_redirect(l_nodegroups()); break; } //////////////////////////////////////// leases case 'manage-leases':{ $actions = json_decode($_POST['actions']); $add_requested = 0; $add_done = 0; $del_requested = 0; $del_done = 0; $errors = array(); foreach ($actions as $action) { if ($action[0] == 'add-leases') { $nodenames = $action[1]; $add_requested += count($nodenames); $slicename = $action[2]; $t_from = intval($action[3]); $t_until = intval($action[4]); $hash = $api->AddLeases($nodenames, $slicename, $t_from, $t_until); // update number of added leases $ids = $hash['new_ids']; $add_done += count($ids); // update global errors array foreach ($api_errors = $hash['errors'] as $error) { $errors[] = $error; } } else if ($action[0] == 'delete-leases') { $lease_id = intval($action[1]); $del_requested += 1; if ($api->DeleteLeases(array($lease_id)) == 1) { $del_done += 1; } else { $errors[] = "Could not delete lease " . $lease_id; } } else { $errors[] = "in actions.php, manage-leases, wrong action " . $action[0]; } } if (count($errors) == 0) { echo ("All leases updated (" . $add_done . " added and " . $del_done . " deleted)"); } else { foreach ($errors as $error) { echo ($error . "\n"); } echo ("Leases updated only partially (" . $add_done . "/" . $add_requested . " added and " . $del_done . "/" . $del_requested . " deleted)"); } break; } //////////////////////////////////////// case 'debug':{ plc_debug('GET', $_GET); plc_debug('POST', $_POST); plc_debug('FILES', $_FILES); return; } default:{ plc_error("Unknown action $action in actions.php"); return; } } ?>