123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- <?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;
- }
- }
|