add an admin option to update the site:enabled field on the site view page.
[plewww.git] / planetlab / common / actions.php
index b7b2bc8..c05d0b0 100644 (file)
@@ -67,8 +67,24 @@ $known_actions []= "update-site";
 //     expects:        site_id & name abbreviated_name url latitude longitude [login_base max_slices]
 
 //////////////////////////////////////// slices
+$known_actions []= "delete-slice";
+//      expects:        slice_id
+$known_actions []= "update-slice";     
+//     expects:        slice_id, name, description, url
 $known_actions []= "renew-slice";
 //     expects:        slice_id & expires
+$known_actions []= 'remove-persons-from-slice';
+//     expects:        slice_id & person_ids
+$known_actions []= 'add-persons-in-slice';
+//     expects:        slice_id & person_ids
+$known_actions []= 'remove-nodes-from-slice';
+//     expects:        slice_id & node_ids
+$known_actions []= 'add-nodes-in-slice';
+//     expects:        slice_id & node_ids
+$known_actions []= 'delete-slice-tags';
+//      expects:        slice_tag_id
+$known_actions []= 'add-slice-tag';
+//      expects:        slice_id & tag_type_id & node_id & nodegroup_id
 
 //////////////////////////////////////// tag types
 $known_actions []= "update-tag-type";
@@ -168,7 +184,7 @@ switch ($action) {
 
  case 'become-person' : {
    $plc->BecomePerson (intval($person_id));
-   plc_redirect (l_persons());
+   plc_redirect (l_person(intval($person_id)));
  }
 
  case 'delete-person' : {
@@ -224,7 +240,7 @@ switch ($action) {
    
    $key_id = $api->AddPersonKey( intval( $person_id ), array( "key_type"=> 'ssh', "key"=> $key ) );
    
-   if ( $key_id == 1) 
+   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());
@@ -418,6 +434,9 @@ switch ($action) {
      $fields['login_base'] = $_POST['login_base'];
    if ($_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) 
@@ -430,18 +449,51 @@ switch ($action) {
  }
 
 //////////////////////////////////////////////////////////// slices
- case 'renew_slice': {
+ 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=date();
+   $now=mktime();
+   $WEEK=7*24*3600;
    $WEEKS=8;
-   $MAX_FUTURE=$WEEKS*7*24*3600;
+   $MAX_FUTURE=$WEEKS*$WEEK;
    if ( ($expires-$now) > $MAX_FUTURE) {
-     drupal_set_error("Cannot renew slice that far in the future, max is $WEEKS from now");
+     drupal_set_error("Cannot renew slice that far in the future, max is $WEEKS weeks from now");
      plc_redirect(l_slice($slice_id));
    }
+   plc_debug('slice_id',$slice_id);
+   plc_debug('expires',$expires);
    if ($api->UpdateSlice ($slice_id, array('expires'=>$expires)) == 1)
      drupal_set_message("Slice renewed");
    else
@@ -450,6 +502,114 @@ switch ($action) {
    break;
  }
 
+ case 'remove-persons-from-slice': {
+   $slice_id = intval ($_POST['slice_id']);    
+   $person_ids = $_POST['person_ids'];
+   
+   $success=true;
+   $counter=0;
+   foreach( $person_ids as $person_id ) {
+     if ($api->DeletePersonFromSlice(intval($person_id),$slice_id) != 1) 
+       $success=false;
+     else
+       $counter++;
+   }
+   if ($success) 
+     drupal_set_message ("Deleted $counter person(s)");
+   else
+     drupal_set_error ("Could not delete all selected persons, only $counter were removed");
+   plc_redirect(l_slice($slice_id) . " &show_persons=true");
+   break;
+ }
+
+ case 'add-persons-in-slice': {
+   $slice_id = intval ($_POST['slice_id']);    
+   $person_ids = $_POST['person_ids'];
+   
+   $success=true;
+   $counter=0;
+   foreach ($person_ids as $person_id) {
+     if ($api->AddPersonToSlice(intval($person_id),$slice_id) != 1) 
+       $success=false;
+     else
+       $counter++;
+   }
+   if ($success) 
+     drupal_set_message ("Added $counter person(s)");
+   else
+     drupal_set_error ("Could not add all selected persons, only $counter were added");
+   plc_redirect(l_slice($slice_id) . "&show_persons=true" );
+   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($slice_id) . " &show_nodes=true");
+   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($slice_id) . "&show_nodes=true" );
+   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=true" );
+   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
 
@@ -459,7 +619,7 @@ switch ($action) {
    $tagname = $_POST['tagname'];
    $min_role_id= intval( $_POST['min_role_id'] );
    $description= $_POST['description'];  
-   $category= $_POST['category'];  
+   $category= $_POST['category'];
   
    // make tag_type_fields dict
    $tag_type_fields= array( "min_role_id" => $min_role_id,