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
"; //$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 "%s"', $metadata->name) . '
'; 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 . '
'; 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; } }