TableFactory.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. Lib::loadClass('SchemaException');
  3. Lib::loadClass('Schema_TableBase');
  4. /**
  5. * Base class for all tables - Schema_TableBase
  6. * CoreTableClass extends from Schema_TableBase
  7. * CompanyTableClass extend from CoreTableClass
  8. *
  9. * WARNING: to add CompanyTableClass, add CoreTableClass first
  10. */
  11. class Schema_TableFactory {
  12. public static function build($tableName, $idSource = null, $hostName = '') {
  13. //_schemaClass
  14. $objectClassName = 'Schema_TableBase';
  15. $cleanHostName = str_replace(array(".", "-"), '_', $hostName);
  16. $cleanTableName = strtolower($tableName);
  17. $cleanSourceName = ($idSource == DB::getPDO()->getZasobId()) ? 'default_db' : "p5_{$idSource}";
  18. DBG::log("Schema({$tableName}): cleanHostName({$cleanHostName}) cleanTableName({$cleanTableName}) cleanSourceName({$cleanSourceName})");
  19. // TODO: fetch form widgets from file config
  20. // "schema/gui/core/{$cleanSourceName}.{$cleanTableName}.php";
  21. // class Schema_Core_{$cleanSourceName}_{$cleanTableName};
  22. // TODO: override by company file config
  23. // "schema/gui/{$cleanHostName}/{$cleanSourceName}.{$cleanTableName}.php";
  24. // class Schema_{$cleanHostName}_{$cleanSourceName}_{$cleanTableName};
  25. $pathCoreClass = APP_PATH_SCHEMA . "/gui/core/{$cleanSourceName}.{$cleanTableName}.php";
  26. //if (!file_exists($pathCoreClass)) throw new SchemaException("Core Class file not found '{$cleanSourceName}.{$cleanTableName}'");
  27. if (file_exists($pathCoreClass)) {
  28. require_once $pathCoreClass;
  29. $coreClassName = "Schema__Core__{$cleanSourceName}__{$cleanTableName}";
  30. if (!class_exists($coreClassName)) throw new SchemaException("Config error for schema core class {$cleanSourceName}:{$cleanTableName}");
  31. $pathCompanyClass = APP_PATH_SCHEMA . "/gui/company/{$cleanHostName}/{$cleanSourceName}.{$cleanTableName}.php";
  32. $companyClassName = "Schema__{$cleanHostName}__{$cleanSourceName}__{$cleanTableName}";
  33. //if (!file_exists($pathCompanyClass)) throw new SchemaException("Host Class file not found '{$cleanHostName}/{$cleanSourceName}.{$cleanTableName}'");
  34. if ($cleanHostName && file_exists($pathCompanyClass)) {
  35. require_once $pathCompanyClass;
  36. if (!class_exists($companyClassName)) throw new SchemaException("Config error for schema company class {$cleanSourceName}:{$cleanTableName}");
  37. $objectClassName = $companyClassName;
  38. } else {
  39. $objectClassName = $coreClassName;
  40. }
  41. }
  42. DBG::log("Schema({$tableName}): objectClassName('{$objectClassName}')");
  43. return new $objectClassName($idSource, $cleanTableName);
  44. }
  45. }