public function get_table_class_files()
 {
     $table_class_files = array();
     /*
      * The default table class file.
      */
     $default_table_class_file = new FileSystem_PHPClassFile(PROJECT_ROOT . '/plug-ins/database/classes/elements/' . 'Database_Table.inc.php');
     $mysql_user_factory = Database_MySQLUserFactory::get_instance();
     $mysql_user = $mysql_user_factory->get_for_this_project();
     $database = $mysql_user->get_database();
     $table_names = $database->get_table_names();
     $project_directory = $this->get_project_directory();
     $php_class_files = $project_directory->get_php_class_files();
     $table_reflection_class = $default_table_class_file->get_reflection_class();
     foreach ($table_names as $table_name) {
         $table_class_files[$table_name][] = $default_table_class_file;
         foreach ($php_class_files as $php_class_file) {
             $php_class_file->declare_class();
             $php_class_file_reflection_class = $php_class_file->get_reflection_class();
             if (!$php_class_file_reflection_class->isAbstract() && $php_class_file_reflection_class->isSubclassOf($table_reflection_class)) {
                 $table_class_files[$table_name][] = $php_class_file;
             }
         }
     }
     return $table_class_files;
 }
 public function get_selection_manager($table_name)
 {
     #print_r($this->selection_managers);
     if (!isset($this->selection_managers[$table_name])) {
         #print_r($this->selection_managers_file);
         $mysql_user_factory = Database_MySQLUserFactory::get_instance();
         $mysql_user = $mysql_user_factory->get_for_this_project();
         $database = $mysql_user->get_database();
         $table = $database->get_table($table_name);
         if (isset($this->selection_managers_file) && $this->selection_managers_file->has_selection_manager($table_name)) {
             $selection_manager_filename = $this->selection_managers_file->get_selection_manager_filename($table_name);
             #echo "\$selection_manager_filename: $selection_manager_filename\n";
             $selection_manager_file = new FileSystem_PHPClassFile($selection_manager_filename);
             $selection_manager_file->declare_class();
             $selection_manager_reflection_class = new ReflectionClass($selection_manager_file->get_php_class_name());
             $this->selection_managers[$table_name] = $selection_manager_reflection_class->newInstance($table);
         } else {
             #echo "Using default selection manager for $table_name\n";
             $this->selection_managers[$table_name] = $this->default_selection_manager_reflection_class->newInstance($table);
         }
     }
     return $this->selection_managers[$table_name];
 }
 public function get_field_renderer_class($table_name, $field_name)
 {
     if (isset($_SESSION['database-class-names'][$table_name]['fields'][$field_name]['renderer']['class_file'])) {
         require_once PROJECT_ROOT . $_SESSION['database-class-names'][$table_name]['fields'][$field_name]['renderer']['class_file'];
         return new ReflectionClass($_SESSION['database-class-names'][$table_name]['fields'][$field_name]['renderer']['class_name']);
     }
     if (DEBUG) {
         echo DEBUG_DELIM_OPEN;
         echo "Just entered: Database_DatabaseClassFactory::get_field_renderer_class(...)\n";
         echo "\$table_name: {$table_name}\n";
         echo "\$field_name: {$field_name}\n";
         $execution_timer = CLWDProjects_ExecutionTimer::get_instance();
         $execution_timer->mark();
         echo DEBUG_DELIM_CLOSE;
     }
     if (isset($this->field_renderer_classes[$table_name][$field_name])) {
         if (DEBUG) {
             echo DEBUG_DELIM_OPEN;
             echo "\$this->field_renderer_classes[{$table_name}][{$field_name}] is already set.\n";
             $execution_timer->mark();
             echo DEBUG_DELIM_CLOSE;
         }
     } else {
         $this->field_renderer_classes[$table_name][$field_name] = null;
         $project_directory_finder = HaddockProjectOrganisation_ProjectDirectoryFinder::get_instance();
         $project_directory = $project_directory_finder->get_project_directory_for_this_project();
         $project_specific_directory = $project_directory->get_project_specific_directory();
         $field_renderer_class_file = null;
         if ($project_specific_directory->has_database_class_name_file()) {
             $database_class_name_file = $project_specific_directory->get_database_class_name_file();
             if ($database_class_name_file->has_field_renderer_class_file($table_name, $field_name)) {
                 $field_renderer_class_file = $database_class_name_file->get_field_renderer_class_file($table_name, $field_name);
             }
         }
         # Fallback.
         if (!isset($field_renderer_class_file)) {
             $field_renderer_class_file = new FileSystem_PHPClassFile(PROJECT_ROOT . '/haddock/database/classes/renderers/Database_FieldRenderer.inc.php');
         }
         $field_renderer_class_file->declare_class();
         $this->field_renderer_classes[$table_name][$field_name] = new ReflectionClass($field_renderer_class_file->get_php_class_name());
     }
     if (DEBUG) {
         echo DEBUG_DELIM_OPEN;
         echo "About to return from: Database_DatabaseClassFactory::get_field_renderer_class(...)\n";
         $execution_timer->mark();
         echo "\$this->field_renderer_classes[{$table_name}][{$field_name}]:\n";
         print_r($this->field_renderer_classes[$table_name][$field_name]);
         echo DEBUG_DELIM_CLOSE;
     }
     return $this->field_renderer_classes[$table_name][$field_name];
 }
 public function get_table_class_files()
 {
     $table_class_files = array();
     /*
      * The default table class file.
      */
     $default_table_class_file = new FileSystem_PHPClassFile(PROJECT_ROOT . '/haddock/database/classes/elements/' . 'Database_Table.inc.php');
     $mysql_user_factory = Database_MySQLUserFactory::get_instance();
     $mysql_user = $mysql_user_factory->get_for_this_project();
     $database = $mysql_user->get_database();
     $table_names = $database->get_table_names();
     $project_directory = $this->get_project_directory();
     $php_class_files = $project_directory->get_php_class_files();
     #print_r($php_class_files);
     #$table_reflection_class = new ReflectionClass('Database_Table');
     $table_reflection_class = $default_table_class_file->get_reflection_class();
     #print_r($table_reflection_class);
     foreach ($table_names as $table_name) {
         $table_class_files[$table_name][] = $default_table_class_file;
         foreach ($php_class_files as $php_class_file) {
             $php_class_file->declare_class();
             $php_class_file_reflection_class = $php_class_file->get_reflection_class();
             #echo $php_class_file_reflection_class->getName() . "<br />\n";
             #print_r($php_class_file_reflection_class);
             #
             #echo '$php_class_file_reflection_class->isAbstract(): ' . "\n";
             #echo $php_class_file_reflection_class->isAbstract() . "\n";
             #
             #echo '$php_class_file_reflection_class->isSubclassOf($table_reflection_class): ' . "\n";
             #echo $php_class_file_reflection_class->isSubclassOf($table_reflection_class) . "\n";
             if (!$php_class_file_reflection_class->isAbstract() && $php_class_file_reflection_class->isSubclassOf($table_reflection_class)) {
                 #echo 'Appending '
                 #    . $php_class_file->get_php_class_name()
                 #    . " to the array.\n";
                 $table_class_files[$table_name][] = $php_class_file;
             }
         }
     }
     #print_r($table_class_files);
     return $table_class_files;
 }
 public static function convert_php_class_file_to_cli_script_php_class_file(FileSystem_PHPClassFile $php_class_file)
 {
     return new CLIScripts_CLIScriptPHPClassFile($php_class_file->get_name());
 }
 /**
  * Should this be deprecated and moved to a helper class?
  */
 public static function cmp_php_class_names(FileSystem_PHPClassFile $a, FileSystem_PHPClassFile $b)
 {
     return strcasecmp($a->get_php_class_name(), $b->get_php_class_name());
 }