public function __construct(&$result_file)
 {
     $columns = array();
     $hw = array();
     $sw = array();
     foreach ($result_file->get_systems() as $system) {
         $columns[] = $system->get_identifier();
         $hw[] = $system->get_hardware();
         $sw[] = $system->get_software();
     }
     $rows = array();
     $table_data = array();
     pts_result_file_analyzer::system_components_to_table($table_data, $columns, $rows, $hw);
     pts_result_file_analyzer::system_components_to_table($table_data, $columns, $rows, $sw);
     pts_result_file_analyzer::compact_result_table_data($table_data, $columns, true);
     // TODO: see if this true value works fine but if rendering starts messing up, disable it
     if (defined('OPENBENCHMARKING_IDS')) {
         foreach ($columns as &$column) {
             $column = new pts_graph_ir_value($column);
             $column->set_attribute('href', 'http://openbenchmarking.org/system/' . OPENBENCHMARKING_IDS . '/' . $column);
         }
     }
     parent::__construct($rows, $columns, $table_data, $result_file);
     $this->i['identifier_size'] *= 0.8;
     $this->column_heading_vertical = false;
     $this->graph_title = $result_file->get_title();
     if (!defined('PHOROMATIC_EXPORT_VIEWER')) {
         pts_render::report_system_notes_to_table($result_file, $this);
     }
 }
 public static function analyze_result_file_intent(&$result_file, &$flagged_results = -1, $return_all_changed_indexes = false)
 {
     $identifiers = array();
     $hw = array();
     $sw = array();
     foreach ($result_file->get_systems() as $system) {
         array_push($identifiers, $system->get_identifier());
         array_push($hw, $system->get_hardware());
         array_push($sw, $system->get_software());
     }
     if (count($identifiers) < 2) {
         // Not enough tests to be valid for anything
         return false;
     }
     foreach ($identifiers as $identifier) {
         if (pts_strings::string_only_contains($identifier, pts_strings::CHAR_NUMERIC | pts_strings::CHAR_DASH | pts_strings::CHAR_SPACE)) {
             // All the identifiers are just dates or other junk
             return false;
         }
     }
     $hw_unique = array_unique($hw);
     $sw_unique = array_unique($sw);
     $desc = false;
     if (count($hw_unique) == 1 && count($sw_unique) == 1) {
         // The hardware and software is maintained throughout the testing, so if there's a change in results its something we aren't monitoring
         // TODO XXX: Not sure this below check is needed anymore...
         if (true || count($hw) > 2 && $result_file->get_test_count() != count($hw)) {
             $desc = array('Unknown', implode(', ', $identifiers));
         }
     } else {
         if (count($sw_unique) == 1) {
             // The software is being maintained, but the hardware is being flipped out
             $rows = array();
             $data = array();
             pts_result_file_analyzer::system_components_to_table($data, $identifiers, $rows, $hw);
             pts_result_file_analyzer::compact_result_table_data($data, $identifiers, true);
             $desc = pts_result_file_analyzer::analyze_system_component_changes($data, $rows, array(array('Processor', 'Motherboard', 'Chipset', 'Audio', 'Network'), array('Processor', 'Motherboard', 'Chipset', 'Network'), array('Processor', 'Chipset', 'Graphics'), array('Processor', 'Graphics'), array('Processor', 'Chipset'), array('Motherboard', 'Chipset'), array('Motherboard', 'Chipset', 'Audio', 'Network'), array('Graphics', 'Audio')), $return_all_changed_indexes);
         } else {
             if (count($hw_unique) == 1) {
                 // The hardware is being maintained, but the software is being flipped out
                 $rows = array();
                 $data = array();
                 pts_result_file_analyzer::system_components_to_table($data, $identifiers, $rows, $sw);
                 pts_result_file_analyzer::compact_result_table_data($data, $identifiers, true);
                 $desc = pts_result_file_analyzer::analyze_system_component_changes($data, $rows, array(array('Display Driver', 'OpenGL'), array('OpenGL'), array('Display Driver')), $return_all_changed_indexes);
             } else {
                 // Both software and hardware are being flipped out
                 $rows = array();
                 $data = array();
                 pts_result_file_analyzer::system_components_to_table($data, $identifiers, $rows, $hw);
                 pts_result_file_analyzer::system_components_to_table($data, $identifiers, $rows, $sw);
                 pts_result_file_analyzer::compact_result_table_data($data, $identifiers, true);
                 $desc = pts_result_file_analyzer::analyze_system_component_changes($data, $rows, array(array('Memory', 'Graphics', 'Display Driver', 'OpenGL'), array('Graphics', 'Monitor', 'Kernel', 'Display Driver', 'OpenGL'), array('Graphics', 'Monitor', 'Display Driver', 'OpenGL'), array('Graphics', 'Kernel', 'Display Driver', 'OpenGL'), array('Graphics', 'Display Driver', 'OpenGL'), array('Graphics', 'OpenGL'), array('Graphics', 'Kernel'), array('Graphics', 'Display Driver')), $return_all_changed_indexes);
             }
         }
     }
     if ($desc) {
         if ($flagged_results === -1) {
             return $desc;
         } else {
             $mark_results = self::locate_interesting_results($result_file, $flagged_results);
             return array($desc[0], $desc[1], $mark_results);
         }
     }
     return false;
 }