nodes can set tags, tags and nodegroups are mostly OK
[plewww.git] / planetlab / includes / plc_peers.php
1 <?php
2   
3   // $Id$
4
5 require_once 'plc_functions.php';
6
7 // all known peers hashed on peer_id
8 class Peers {
9   var $hash;
10   
11   function Peers ($api) {
12     $hash=array();
13     // fake entry fot the local myplc
14     $local_fake_peer = array ('peername' => PLC_NAME,
15                               'shortname' => PLC_SHORTNAME,
16                               'peer_id'=>'local');
17     $hash['local']=$local_fake_peer;
18     // remote
19     $peer_columns=array('peer_id','shortname','peername');
20     $peer_filter=NULL;
21     $peers = $api->GetPeers($peer_filter,$peer_columns);
22     if ($peers) foreach ($peers as $peer) {
23         $hash[$peer['peer_id']]=$peer;
24       }
25     $this->hash=$hash;
26   }
27
28   public static function is_local ($peer) {
29     return $peer['peer_id'] == 'local';
30   }
31
32   function peer ($peer_id) {
33     // use the fake local entry 
34     if (!$peer_id)
35       $peer_id='local';
36     return $this->hash[$peer_id];
37   }
38
39   public function peername ($peer_id) {
40     $peer = $this->peer ($peer_id);
41     return $peer['peername'];
42   }
43
44   public function shortname ($peer_id) {
45     $peer = $this->peer ($peer_id);
46     return $peer['shortname'];
47   }
48
49   public function label ($peer_id) {
50     $peer = $this->peer ($peer_id);
51     $result = $peer['peername'] . " (" . $peer['shortname'] . ")";
52     if (Peers::is_local ($peer))
53       $result = "[local] " . $result;
54     return $result;
55   }
56   
57   public function link ($peer_id,$text) {
58     if (! $peer_id)
59       return href("/",$text);
60     $peer = $this->peer ($peer_id);
61     return l_peer_t($peer['peer_id'],$text);
62   }
63
64   public function peer_link ($peer_id) {
65     if (! $peer_id)
66       return href("/",$this->label($peer_id));
67     $peer = $this->peer ($peer_id);
68     return l_peer_t($peer['peer_id'],$this->label($peer_id));
69   }
70
71   function classname ($peer_id) {
72     if ( ! $peer_id) 
73       return "";
74     $peer = $this->peer ($peer_id);
75     $shortname=$peer['shortname'];
76     return "plc-$shortname";
77   }
78   
79   function block_start ($peer_id) {
80     // to set the background to grey on foreign objects
81     // return true if the peer is local 
82     if ( ! $peer_id ) {
83       print "<div>";
84     } else {
85       $classname=strtolower($this->classname($peer_id));
86       // set two classes, one generic to all foreign, and one based on the peer's shortname for finer grain tuning
87       printf ("<div class=\"plc-foreign %s\">",$classname);
88     }
89   }
90
91   function block_end ($peer_id) {
92     print "</div>\n";
93   }
94 }
95
96 ////////////////////////////////////////////////////////////
97 class PeerScope {
98   var $filter;
99   var $label;
100
101   function PeerScope ($api, $peerscope) {
102     switch ($peerscope) {
103     case '':
104       $this->filter=array();
105       $this->label="all peers";
106       break;
107     case 'local':
108       $this->filter=array("peer_id"=>NULL);
109       $this->label=PLC_SHORTNAME;
110       break;
111     case 'foreign':
112       $this->filter=array("~peer_id"=>NULL);
113       $this->label="foreign peers";
114       break;
115     default:
116       if (my_is_int ($peerscope)) {
117         $peer_id=intval($peerscope);
118         $peers=$api->GetPeers(array("peer_id"=>$peer_id));
119       } else {
120         $peers=$api->GetPeers(array("shortname"=>$peerscope));
121       }
122       if ($peers) {
123         $peer=$peers[0];
124         $peer_id=$peer['peer_id'];
125         $this->filter=array("peer_id"=>$peer_id);
126         $this->label='peer "' . $peer['shortname'] . '"';
127       } else {
128         $this->filter=array();
129         $this->label="[no such peerscope " . $peerscope . "]";
130       }
131       break;
132     }
133   }
134
135   public function filter() {
136     return $this->filter;
137   }
138   public function label() {
139     return $this->label;
140   }
141 }
142
143 ?>