Example #1
0
 /**
  * Creates a Datatype object for insertion into the passed table. The table's
  * database engine type is checked first. This allows database specific data
  * type instructions to be used.
  *
  * @param \Database\Table $table
  * @param string $name Name of column/data type
  * @param string $type Data type
  * @param string $value Default value for column
  * @return \Database\Datatype Returns an extension of Datatype
  * @throws \Exception
  */
 public static function factory(Table $table, $name, $type, $value = null)
 {
     $engine = $table->db->getDatabaseType();
     $alltypes = $table->getDatatypeList();
     $type = strtolower($type);
     if (empty($type)) {
         throw new \Exception(\t('Data type was empty'));
     }
     if (!isset($alltypes[$type])) {
         throw new \Exception(\t('Unknown data type "%s"', $type));
     }
     $class_name = ucwords($alltypes[$type]);
     $class_file = PHPWS_SOURCE_DIR . "Global/Database/Datatype/{$class_name}.php";
     $engine_file = PHPWS_SOURCE_DIR . "Global/Database/Engine/{$engine}/Datatype/{$class_name}.php";
     if (is_file($engine_file)) {
         $datatype_name = "\\Database\\Engine\\{$engine}\\Datatype\\{$class_name}";
     } elseif (is_file($class_file)) {
         $datatype_name = "\\Database\\Datatype\\{$class_name}";
     } else {
         throw new \Exception(\t('Unknown class name "%s"', $class_name));
     }
     $object = new $datatype_name($table, $name);
     if ($object->default instanceof \Variable) {
         $object->setDefault($value);
     }
     return $object;
 }