$until_time) { drupal_set_error("Warning - is after "); return; } $filter=array(); // sort events by time is not good enough, let's use event_id $filter['-SORT']='-event_id'; $filter[']time']=$from_time; $filter['[time']=$until_time; //////////////////////////////////////// Events if ($type == 'Event') { // and the filter applied for fetching events using GetEvent $user_desc=$_GET['event']; if ( ! empty($user_desc)) { // should parse stuff like 45-90,230-3000 - some other day $filter['event_id']=intval($user_desc); } $events = $api->GetEvents($filter); $title="Events [ $from_string - $until_string] matching " . ($user_desc ? $user_desc : "everything"); // see actual display of $title and $events below } else { switch ($type) { case 'Person': $primary_key='person_id'; $string_key='email'; $user_input=$_GET['person']; $method="GetPersons"; $object_type='Person'; break; case 'Node': $primary_key='node_id'; $string_key='hostname'; $user_input=$_GET['node']; $method="GetNodes"; $object_type='Node'; break; case 'Site': $primary_key='site_id'; $string_key='login_base'; $user_input=$_GET['site']; $method="GetSites"; $object_type='Site'; break; case 'Slice': $primary_key='slice_id'; $string_key='name'; $user_input=$_GET['slice']; $method="GetSlices"; $object_type='Slice'; break; } $object_ids=array(); $title="Events [ $from_string - $until_string]"; $title .= " type=$object_type"; $title .= " id(s)="; foreach ( explode(",",$user_input) as $user_desc) { # numeric if (my_is_int($user_desc)) { $obj_check = call_user_func(array($api,$method),array(intval($user_desc)),array($primary_key)); if (empty ($obj_check)) { $messages[] = "No such " . $primary_key . ": " . $user_desc; } else { $object_ids[] = $obj_check[0][$primary_key]; $title .= " $user_desc, " ; } } else { # string $new_object_ids=call_user_func (array($api,$method), array($string_key=>$user_desc),array($primary_key,$string_key)); if (empty($new_object_ids)) { $messages[] = "No " . $string_key . " matching " . $user_desc; } else { foreach ($new_object_ids as $new_obj_id) { $object_ids[] = $new_obj_id[$primary_key]; $title .= $new_obj_id[$primary_key] . ", "; } } } } $event_objs = $api->GetEventObjects(array('object_id'=>$object_ids,'object_type'=>$object_type),array('event_id')); // get set of event_ids $event_ids = array_map ( create_function ('$eo','return $eo["event_id"];') , $event_objs); $events = $api->GetEvents (array('event_id'=>$event_ids)); // see actual display of $title and $events below } drupal_set_title ($title); // Show messages if (!empty($messages)) foreach ($messages as $line) drupal_set_message($line); $headers=array("Id"=>"int", "Time"=>"EnglishDateTime", "Method"=>"string", "Message"=>"string", "Subjects"=>"string", "Issuer"=>"string", "Auth"=>"string", "R"=>"string", "D"=>"none", ); $table = new PlekitTable ("events",$headers,"0r"); $table->set_options (array ('max_pages'=>20)); $table->start (); foreach ($events as $event) { // the call button $message = htmlentities($event['message'], ENT_QUOTES); $call = htmlentities($event['call'], ENT_QUOTES); $text = sprintf("message=<<%s>>\\n\\ncall=<<%s>>\\n\\nruntime=<<%f>>\\n",$message,$call,$event['runtime']); $method = "%s',$call,$method); // the message button $trunc_mess=htmlentities(truncate($event['message'],40),ENT_QUOTES); $message="%s',$message,$message); $message=truncate($event['message'],40); $table->row_start(); $table->cell(e_event($event['event_id'])); $table->cell(date('M/d/Y H:i', $event['time'])); $table->cell($event['call_name']); $table->cell($message); $table->cell(e_subjects($event)); $table->cell(e_issuer($event)); $table->cell(e_auth($event)); $table->cell(e_fault($event)); $table->cell($details); $table->row_end(); } $table->set_options(array('notes'=>array("The R column shows the call result value, a.k.a. fault_code", "Click the button in the D(etails) column to get more details"))); $table->end(); //plekit_linetabs ($tabs,"bottom"); // Print footer include 'plc_footer.php'; ?>