parent
747f27d7af
commit
d2057cb452
@ -1,395 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* This is a draft |
||||
* |
||||
*/ |
||||
use Doctrine\ORM\Tools\Setup; |
||||
use Doctrine\ORM\EntityManager; |
||||
use Doctrine\ORM\Configuration; |
||||
use Tools\EntityGenerator; |
||||
use Tools\EntityRepositoryGenerator; |
||||
use Doctrine\Common\Util\Inflector; |
||||
use Doctrine\ORM\Mapping\ClassMetadataInfo; |
||||
|
||||
function save($data) |
||||
{ |
||||
db::instance()->save($data); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* @license see /license.txt |
||||
*/ |
||||
class db |
||||
{ |
||||
|
||||
/** |
||||
* @return db |
||||
*/ |
||||
public static function instance() |
||||
{ |
||||
static $result = null; |
||||
if (empty($result)) { |
||||
$result = new self(); |
||||
} |
||||
return $result; |
||||
} |
||||
|
||||
private static function register_autoload() |
||||
{ |
||||
static $has_run = false; |
||||
if ($has_run) { |
||||
return true; |
||||
} |
||||
require_once api_get_path(LIBRARY_PATH) . 'symfony/Doctrine/ORM/Tools/Setup.php'; |
||||
$directory = api_get_path(LIBRARY_PATH) . 'symfony'; |
||||
|
||||
if (!class_exists('Doctrine\Common\ClassLoader', false)) { |
||||
require_once $directory . '/doctrine/Common/ClassLoader.php'; |
||||
} |
||||
|
||||
$loader = new Doctrine\Common\ClassLoader('Doctrine', $directory); |
||||
$loader->register(); |
||||
|
||||
$loader = new Doctrine\Common\ClassLoader('Symfony\Component', $directory); |
||||
$loader->register(); |
||||
|
||||
$has_run = true; |
||||
} |
||||
|
||||
protected $config; |
||||
protected $em; |
||||
|
||||
protected function __construct() |
||||
{ |
||||
self::register_autoload(); |
||||
$connection_parameters = $this->get_connection_parameters(); |
||||
$this->config = Setup::createYAMLMetadataConfiguration(array($this->get_entity_path() . '/mapping'), true); |
||||
$this->em = EntityManager::create($connection_parameters, $this->config); |
||||
} |
||||
|
||||
public function save($data) |
||||
{ |
||||
$em = $this->em; |
||||
$em->persist($data); |
||||
$em->flush(); |
||||
} |
||||
|
||||
public function remove($data) |
||||
{ |
||||
$em = $this->em; |
||||
$em->remove($data); |
||||
$em->flush(); |
||||
} |
||||
|
||||
public function flush($data = null) |
||||
{ |
||||
$em = $this->em; |
||||
$em->flush($data); |
||||
} |
||||
|
||||
function test() |
||||
{ |
||||
$_SESSION['_real_cid'] = 2; |
||||
|
||||
// $repo = Entity\User::repository(); |
||||
// $user = Entity\User::create(); |
||||
// $user->set_username('salut1'); |
||||
// $user->set_password('salut'); |
||||
// $user->set_status(1); |
||||
// $user->set_chatcall_user_id(1); |
||||
// $user->set_chatcall_date(new DateTime()); |
||||
// $user->set_chatcall_text(''); |
||||
// $user->set_registration_date(new DateTime()); |
||||
// $user->set_expiration_date(new DateTime()); |
||||
// $user->set_active(true); |
||||
// $user->set_hr_dept_id(0); |
||||
// $em = $this->em(); |
||||
// $em->persist($user); |
||||
// $em->flush(); |
||||
// echo "Created User with ID " . $user->get_user_id() . "\n"; |
||||
// $user = $repo->find(3); |
||||
// $this->remove($user); |
||||
// $this->flush(); |
||||
|
||||
|
||||
$doc = \Entity\Document::create(); |
||||
$doc->set_path('path'); |
||||
$doc->set_title('title'); |
||||
//$doc->set_c_id(1); |
||||
$doc->set_comment('comment'); |
||||
$doc->set_size(0); |
||||
$doc->set_session_id(0); |
||||
$doc->set_filetype('dd'); |
||||
$doc->set_readonly(false); |
||||
|
||||
//$repo = \Entity\Document::repository(); |
||||
//$id = $repo->next_id($doc); |
||||
//echo "next id: $id <br/>"; |
||||
|
||||
|
||||
//$doc->set_id($id); |
||||
$this->save($doc); |
||||
$this->flush(); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* @return EntityManager The created EntityManager. |
||||
*/ |
||||
public function em() |
||||
{ |
||||
return $this->em; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* @param string $entity_name |
||||
* @return EntityRepository |
||||
*/ |
||||
public function get_repository($entity_name) |
||||
{ |
||||
return $this->em()->getRepository($entity_name); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* @return type |
||||
*/ |
||||
public function get_entity_path() |
||||
{ |
||||
$result = __DIR__ . '/../entity'; |
||||
$result = realpath($result); |
||||
return $result; |
||||
} |
||||
|
||||
public function is_production() |
||||
{ |
||||
return Chamilo::is_production_server(); |
||||
} |
||||
|
||||
public function is_dev() |
||||
{ |
||||
return !Chamilo::is_production_server(); |
||||
} |
||||
|
||||
/** |
||||
* Reverse engineering of the model from the database structure. |
||||
* Write result to the entity folder |
||||
* |
||||
* WARNING THIS WILL OVERWRITE EXISTING MODEL. |
||||
* |
||||
* @return boolean |
||||
*/ |
||||
public function generate_model() |
||||
{ |
||||
if (!$this->is_dev()) { |
||||
return false; |
||||
} |
||||
|
||||
$root = $this->get_entity_path(); |
||||
|
||||
$connection_parameters = $this->get_connection_parameters(); |
||||
$connection = Doctrine\DBAL\DriverManager::getConnection($connection_parameters); |
||||
$platform = $connection->getDatabasePlatform(); |
||||
$platform->registerDoctrineTypeMapping('enum', 'string'); |
||||
$platform->registerDoctrineTypeMapping('set', 'string'); |
||||
|
||||
$config = Setup::createConfiguration($this->is_dev()); |
||||
$config->setMetadataDriverImpl(new Doctrine\ORM\Mapping\Driver\DatabaseDriver(new Doctrine\DBAL\Schema\MySqlSchemaManager($connection))); |
||||
|
||||
$em = EntityManager::create($connection, $config); |
||||
|
||||
$cmf = new Doctrine\ORM\Tools\DisconnectedClassMetadataFactory(); |
||||
$cmf->setEntityManager($em); |
||||
$metadatas = $cmf->getAllMetadata(); |
||||
|
||||
|
||||
$repo_factory = new EntityRepositoryGenerator(); |
||||
|
||||
$course = null; |
||||
foreach ($metadatas as $metadata) { |
||||
$n = strtolower($metadata->name); |
||||
if ($n == 'course') { |
||||
$course = $metadata; |
||||
break; |
||||
} |
||||
} |
||||
|
||||
foreach ($metadatas as $metadata) { |
||||
echo sprintf('Processing entity "<info>%s</info>"', $metadata->name) . '<br/>'; |
||||
|
||||
foreach ($metadata->identifier as $key => $value) { |
||||
//$mapping = $metadata->fieldMappings[$value]; |
||||
$metadata->identifier[$key] = Inflector::tableize($value); |
||||
} |
||||
|
||||
$fields = array(); |
||||
foreach ($metadata->fieldMappings as $fieldMapping) { |
||||
$name = Inflector::tableize($fieldMapping['fieldName']); |
||||
$fieldMapping['fieldName'] = $name; |
||||
$fields[$name] = $fieldMapping; |
||||
} |
||||
$metadata->fieldMappings = $fields; |
||||
|
||||
$n = $metadata->name; |
||||
if ($n == 'CDocument') { |
||||
$i = 1; |
||||
} |
||||
$name = $metadata->name; |
||||
$name = Inflector::tableize($name); |
||||
$is_course_table = (strpos($name, 'c_') === 0); |
||||
if ($is_course_table) { |
||||
$name = substr($name, 2, strlen($name) - 2); |
||||
} |
||||
//$metadata->namespace = 'Entity'; |
||||
$metadata->customRepositoryClassName = 'Entity\\Repository\\' . Inflector::classify($name) . 'Repository'; |
||||
//if(is_course_table){ |
||||
$metadata->name = 'Entity\\' . Inflector::classify($name); |
||||
|
||||
$metadata->lifecycleCallbacks['prePersist'] = array('before_save'); |
||||
|
||||
//} |
||||
//$metadata->rootEntityName = Inflector::classify($name); |
||||
if ($is_course_table) { |
||||
foreach ($metadata->fieldMappings as $mapping) { |
||||
$name = $mapping['columnName']; |
||||
$is_id = isset($mapping['id']) ? $mapping['id'] : false; |
||||
if ($name != 'c_id' && $is_id) { |
||||
|
||||
} |
||||
} |
||||
} |
||||
if ($is_course_table) { |
||||
$metadata->is_course_table = true; |
||||
// $mapping = array(); |
||||
// $mapping['cascade'] = array(); |
||||
// $mapping['joinColumns'][0] = array('name' => 'c_id', 'referencedColumnName' => 'id'); |
||||
// $mapping['sourceToTargetKeyColumns']['c_id'] = 'id'; |
||||
// $mapping['joinColumnFieldNames']['c_id'] = 'c_id'; |
||||
// $mapping['targetToSourceKeyColumns']['id'] = 'c_id'; |
||||
// $mapping['id'] = 1; |
||||
// $mapping['isOwningSide'] = 0; |
||||
// $mapping['isCascadeRemove'] = 0; |
||||
// $mapping['isCascadePersist'] = 0; |
||||
// $mapping['isCascadeRefresh'] = 0; |
||||
// $mapping['isCascadeMerge'] = 0; |
||||
// $mapping['isCascadeDetach'] = 0; |
||||
// $mapping['orphanRemoval'] = 0; |
||||
// $mapping['type'] = ClassMetadataInfo::MANY_TO_ONE; |
||||
// $mapping['fetch'] = ClassMetadataInfo::FETCH_LAZY; |
||||
// $mapping['fieldName'] = 'course'; |
||||
// $mapping['targetEntity'] = 'Entity\\Course'; |
||||
// $mapping['sourceEntity'] = $metadata->name; |
||||
// |
||||
// $metadata->associationMappings['course'] = $mapping; |
||||
// $metadata->identifier['course']; |
||||
|
||||
// unset($metadata->identifier['c_id']); |
||||
// unset($metadata->fieldMappings['c_id']); |
||||
|
||||
|
||||
// $mapping = array(); |
||||
// $mapping['cascade'] = array(); |
||||
// $mapping['joinColumns'][0] = array('name' => 'id', 'referencedColumnName' => 'c_id'); |
||||
// $mapping['sourceToTargetKeyColumns']['id'] = 'c_id'; |
||||
// $mapping['joinColumnFieldNames']['id'] = 'id'; |
||||
// $mapping['targetToSourceKeyColumns']['c_id'] = 'id'; |
||||
// $mapping['id'] = 1; |
||||
// $mapping['isOwningSide'] = 1; |
||||
// $mapping['isCascadeRemove'] = 0; |
||||
// $mapping['isCascadePersist'] = 0; |
||||
// $mapping['isCascadeRefresh'] = 0; |
||||
// $mapping['isCascadeMerge'] = 0; |
||||
// $mapping['isCascadeDetach'] = 0; |
||||
// $mapping['orphanRemoval'] = 0; |
||||
// $mapping['type'] = ClassMetadataInfo::ONE_TO_MANY; |
||||
// $mapping['fetch'] = ClassMetadataInfo::FETCH_LAZY; |
||||
// $name = explode('\\' ,$metadata->name); |
||||
// $name = end($name); |
||||
// $name = Inflector::tableize($name); |
||||
// $mapping['fieldName'] = $name; |
||||
// $mapping['targetEntity'] = $metadata->name; |
||||
// $mapping['sourceEntity'] = 'Entity\\Course'; |
||||
// $course->associationMappings[$name] = $mapping; |
||||
} |
||||
$metadata->class_to_extend = $is_course_table ? 'CourseEntity' : 'Entity'; |
||||
|
||||
|
||||
$repo_factory->writeEntityRepositoryClass($metadata->name, $root . '\\repository\\'); |
||||
} |
||||
|
||||
$generator = new EntityGenerator(); |
||||
|
||||
$generator->setClassToExtend('Entity'); |
||||
$generator->setGenerateAnnotations(false); |
||||
$generator->setGenerateStubMethods(true); |
||||
$generator->setRegenerateEntityIfExists(false); |
||||
$generator->setUpdateEntityIfExists(false); |
||||
$generator->setBackupExisting(false); |
||||
$generator->setExtension('.class.php'); |
||||
$generator->setNumSpaces(4); |
||||
|
||||
// Generating Entities |
||||
$generator->generate($metadatas, $root); |
||||
|
||||
$exporter = new \Doctrine\ORM\Tools\Export\Driver\YamlExporter(); |
||||
$exporter->setOutputDir($root . '/mapping'); |
||||
foreach ($metadatas as $metadata) { |
||||
echo $metadata->name . '<br/>'; |
||||
try { |
||||
$exporter->setMetadata(array($metadata)); |
||||
$exporter->export(); |
||||
} catch (Exception $e) { |
||||
echo $e->getMessage(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public function update_schema($paths, $save_mode) |
||||
{ |
||||
// $is_dev = $this->is_dev(); |
||||
// |
||||
// $ext = explode('.', $path); |
||||
// $ext = end($ext); |
||||
// if ($ext == 'yml') { |
||||
// $config = Setup::createYAMLMetadataConfiguration($paths, $is_dev); |
||||
// } else if ($ext == 'xml') { |
||||
// $config = Setup::createXMLMetadataConfiguration($paths, $is_dev); |
||||
// } else if ($ext == 'php') { |
||||
// $config = Setup::createAnnotationMetadataConfiguration($paths, $is_dev); |
||||
// } else { |
||||
// return false; |
||||
// } |
||||
// |
||||
// $em = $this->em; |
||||
// |
||||
// $cmf = new Doctrine\ORM\Tools\DisconnectedClassMetadataFactory(); |
||||
// $cmf->setEntityManager($em); |
||||
// $classes = $cmf->getAllMetadata(); |
||||
// |
||||
// $tool = new Doctrine\ORM\Tools\SchemaTool($em); |
||||
// return $tool->updateSchema($classes, $save_mode); |
||||
} |
||||
|
||||
protected function get_config() |
||||
{ |
||||
return $this->config; |
||||
} |
||||
|
||||
protected function get_connection_parameters() |
||||
{ |
||||
global $_configuration; |
||||
$result = array( |
||||
'dbname' => $_configuration['main_database'], |
||||
'user' => $_configuration['db_user'], |
||||
'password' => $_configuration['db_password'], |
||||
'host' => $_configuration['db_host'], |
||||
'driver' => 'pdo_mysql', |
||||
); |
||||
return $result; |
||||
} |
||||
|
||||
} |
||||
|
Loading…
Reference in new issue