bugfix: the slice page was broken when nobody is in slice
[plewww.git] / modules / planetlab.module
index 378d1f9..b20412c 100644 (file)
@@ -54,12 +54,36 @@ function planetlab_menu($may_cache) {
   return $items;
 }
 
-// formatting helpers
+//////////////////// formatting helpers - specific to module presentation
 function ul_start () { return '<ul class="menu">'; }
 function ul_end () { return '</ul>'; }
 function leaf($text) { return '<li class="leaf">' . $text . '</li>'; }
 function expanded($text) { return '<li class="expanded">' . $text . '</li>'; }
 function p($text) { return '<p>' . $text . '</p>'; }
+
+# this should get embedded into a ul_start()/ul_end() pair
+function plc_my_site_links() {
+  $html = '';
+  $sites = plc_my_sites();
+  if (count($sites)>1) foreach ($sites as $site) {
+      $html .= leaf( href(l_site($site['site_id']),$site['abbreviated_name']));
+    } else {
+    $html .= leaf( href(l_site(plc_my_site_id()),"My Site"));
+  }
+  return $html;
+}
+
+// ditto
+function plc_my_node_links () {
+  $html = '';
+  if (count (plc_my_site_ids()) == 1) {
+    $html .= leaf( href (l_nodes_my_site() ,"My Site Nodes"));
+  } else {
+    $html .= leaf( href (l_nodes_all_my_site(),"All My Sites Nodes"));
+  }
+  return $html;
+}
+
 // fake theme to look like menu
 function menu_theme ($menu) {
   $result = '';
@@ -80,7 +104,10 @@ function planetlab_block($op = 'list', $delta = 0, $edit = array()) {
   } else if ($op == 'view') {
     $block = array();
 
-    if (!$plc->person) {
+    if (property_exists($plc, 'hide_planetlab_block')) {
+      // do nothing
+      // this is a private hook from the Vicci module to hide the planetlab module
+    } else if (!$plc->person) {
       // Force login via HTTPS
       unset($_GET['time']);
       $form['#action'] = "https://" . $_SERVER['HTTP_HOST'] . url($_GET['q'], drupal_get_destination());
@@ -109,23 +136,23 @@ function planetlab_block($op = 'list', $delta = 0, $edit = array()) {
     } else {
       $block['subject'] = truncate($plc->person['email'],30);
 
-      //////////////////// Logout 
+      //////////////////// Logout
       $bullet_item = '';
       if ($user->uid) {
        // Drupal logout (destroys the session and cleans up $user)
        // Thierry unclear when this triggers, I suspect this is obsolete
-       $bullet_item .= l(t('Logout of %s', 
+       $bullet_item .= l(t('Logout of %s',
                          array('%s' => variable_get('site_name', 'local'))), 'logout');
       } else {
        // PlanetLab logout (just destroy the session)
        $bullet_item .= href (l_logout(),'Logout');
       }
       $bullet_item .= ul_start();
-      // logout 
+      // logout
       if ( $plc->alt_person && $plc->alt_auth) {
-       $email = truncate($plc->person['email'],20); 
+       $email = truncate($plc->person['email'],20);
        $bullet_item .= leaf( href( l_sulogout(),"Un-become $email"));
-      }        
+      }
       $bullet_item .= ul_end();
       $items []= expanded ($bullet_item);
 
@@ -133,13 +160,13 @@ function planetlab_block($op = 'list', $delta = 0, $edit = array()) {
       $bullet_item = '';
       $bullet_item .=  l_person_t(plc_my_person_id(),"My Account");
       $bullet_item .= ul_start();
-      if (plc_is_admin() || plc_is_pi()) 
-       $bullet_item .= leaf( href( l_persons_site(plc_my_site_id()), "My Users"));
+      if (plc_is_admin() || plc_is_pi())
+       $bullet_item .= leaf( href( l_persons_site(plc_my_site_id()), "My Site Accounts"));
       if (plc_is_admin()) {
-       $bullet_item .= leaf(href(l_persons_peer('local'),'Local users (looong)'));
-       $bullet_item .= leaf(href(l_persons(),'All users (looong)'));
+       $bullet_item .= leaf(href(l_persons_peer('local'),'Local Accounts (slow)'));
+       $bullet_item .= leaf(href(l_persons(),'All Accounts (slow)'));
       }
-       
+
       $bullet_item .= ul_end();
       $items [] = expanded($bullet_item);
 
@@ -147,9 +174,9 @@ function planetlab_block($op = 'list', $delta = 0, $edit = array()) {
       $bullet_item = '';
       $bullet_item .= href(l_sites(),"Sites");
       $bullet_item .= ul_start();
-      $bullet_item .= leaf( href(l_site(plc_my_site_id()),"My Site"));
-      if ( plc_is_admin() ) 
-       $bullet_item .= leaf( href(l_sites_pending(),"Pending Requests"));
+      $bullet_item .= plc_my_site_links();
+      if ( plc_is_admin() )
+             $bullet_item .= leaf( href(l_sites_pending(),"Pending Requests"));
       $bullet_item .= ul_end();
       $items[] = expanded($bullet_item);
 
@@ -157,23 +184,28 @@ function planetlab_block($op = 'list', $delta = 0, $edit = array()) {
       $bullet_item = '';
       $bullet_item .= href(l_nodes(),"Nodes");
       $bullet_item .= ul_start();
-      $bullet_item .= leaf( href (l_nodes_site (plc_my_site_id()),"My Site Nodes"));
-      $bullet_item .= leaf( href (l_node_add(),"Add Node"));
-      $bullet_item .= leaf( href (l_register_node(),"Register Node"));
+      $bullet_item .= plc_my_node_links();
+      if (plc_is_admin() || plc_is_pi() || plc_is_tech()) {
+             $bullet_item .= leaf( href (l_register_node(), "Register Node (ko)"));
+      }
       $bullet_item .= ul_end();
       $items [] = expanded($bullet_item);
 
       //////////////////// Slices
       $bullet_item = '';
-      //if( !( plc_is_tech() && ! plc_is_user() && ! plc_is_pi() && ! plc_is_admin() ) ) 
-      $bullet_item .= href(l_slices(),"Slices");
+      //if( !( plc_is_tech() && ! plc_is_user() && ! plc_is_pi() && ! plc_is_admin() ) )
+      if (plc_is_admin()) {
+        $bullet_item .= href(l_slices(),"Slices");
+      } else {
+        $bullet_item .= href(l_slices(),"My Slices");
+      }
       $bullet_item .= ul_start();
-      if (plc_is_admin()) 
-       $bullet_item .= leaf ( href(l_slices_site(plc_my_site_id()), 'My Site Slices'));
+      if (plc_is_admin())
+       $bullet_item .= leaf ( href(l_slices_my_site(), 'My Site Slices'));
       if( plc_is_admin() || plc_is_pi() ) {
        $bullet_item .= leaf(href(l_slice_add(),"Create Slice"));
       }
-      if( !( plc_is_tech() && ! plc_is_user() && ! plc_is_pi() && ! plc_is_admin() ) ) 
+      if( !( plc_is_tech() && ! plc_is_user() && ! plc_is_pi() && ! plc_is_admin() ) )
        $bullet_item .= leaf(href(l_sirius(),"Sirius"));
       $bullet_item .= ul_end();
       $items [] = expanded($bullet_item);
@@ -183,7 +215,8 @@ function planetlab_block($op = 'list', $delta = 0, $edit = array()) {
        $bullet_item = '';
        $bullet_item .= href(l_admin(),"Admin search");
        $bullet_item .= ul_start();
-    $bullet_item .= leaf( href (l_node_add(),"Add Node"));
+       if ( plc_is_admin() )
+         $bullet_item .= leaf( href (l_node_add(),"Add Node"));
        $bullet_item .= leaf( href( l_tags(),"Tags"));
        $bullet_item .= leaf( href( l_nodegroups(),"Node groups"));
        $bullet_item .= leaf (href(l_peers(),'Peers'));
@@ -251,14 +284,16 @@ function planetlab_login_submit($form_id, $form_values) {
 
   // Our referring page is encased in a query string of the form
   // "destination=referrer".
-  parse_str(drupal_get_destination()); // => $destination
+  parse_str(drupal_get_destination(), $variables);
+  $destination = $variables['destination'];
 
   // The referrer itself is a URL path with the original query string,
   // e.g. "referer.php?query".
   extract(parse_url($destination)); // => $query
 
   // Which we then have to parse again as a query string.
-  parse_str($query); // => $url
+  parse_str($query, $variables);
+  $url = $variables['url'];
 
   if ($plc->person) {
     // To handle the edge case where this function is called during a
@@ -314,6 +349,14 @@ function planetlab_user($type, &$edit, &$user, $category = NULL) {
   }
 }
 
+function isValidFileName($file) {
+
+    /* don't allow .. and allow any "word" character \ / */
+
+    return preg_match('/^(((?:\.)(?!\.))|\w)+$/', $file);
+
+}
+
 function planetlab_page() {
   $path = $_SERVER['DOCUMENT_ROOT'] . preg_replace('/^db\//', '/planetlab/', $_GET['q']);
 
@@ -335,11 +378,16 @@ function planetlab_page() {
       $output = ob_get_contents();
       ob_end_clean();
     } else {
-      $output = file_get_contents($path);
+         if (isValidFileName($path)) {
+            $output = file_get_contents($path);
+         }
+         else {
+            $output = "";
+         }
     }
     return $output;
   }
-           
+
   drupal_not_found();
 }