public function postGenerateSchema(GenerateSchemaEventArgs $eventArgs)
 {
     $schema = $eventArgs->getSchema();
     //get the entity meta
     $meta = $eventArgs->getEntityManager()->getClassMetadata($this->config->getZfcUserEntityClass());
     //get the table name from the entity
     $revisionsTable = $schema->createTable($this->config->getRevisionTableName());
     $revisionsTable->addColumn('id', $this->config->getRevisionIdFieldType(), array('autoincrement' => true));
     $revisionsTable->addColumn('timestamp', 'datetime');
     $revisionsTable->addColumn('note', 'text', array('notnull' => false));
     $revisionsTable->addColumn('ipaddress', 'text', array('notnull' => false));
     $localColumnNames = array();
     $foreignColumnNames = array();
     foreach ($meta->getIdentifier() as $primaryKey) {
         $columnName = $meta->getColumnName($primaryKey);
         $foreignColumnNames[] = $columnName;
         $columnName = preg_replace('/user[^a-zA-Z0-9]*/', '', $columnName);
         $localColumnName = 'user_' . $columnName;
         $localColumnNames[] = $localColumnName;
         $fieldType = $meta->getTypeOfField($primaryKey);
         $revisionsTable->addColumn($localColumnName, $fieldType, array('notnull' => false));
     }
     //add the tablename and primary key from the entity meta
     $revisionsTable->addForeignKeyConstraint($meta->getTableName(), $localColumnNames, $foreignColumnNames);
     $revisionsTable->setPrimaryKey(array('id'));
 }
Exemplo n.º 2
0
 /**
  * @param GenerateSchemaEventArgs $args
  */
 public function postGenerateSchema(GenerateSchemaEventArgs $args)
 {
     $schema = $args->getSchema();
     try {
         if (!$schema->hasTable(MAUTIC_TABLE_PREFIX . 'lead_fields')) {
             return;
         }
         $objects = ['lead' => 'leads', 'company' => 'companies'];
         foreach ($objects as $object => $tableName) {
             $table = $schema->getTable(MAUTIC_TABLE_PREFIX . $tableName);
             //get a list of fields
             $fields = $args->getEntityManager()->getConnection()->createQueryBuilder()->select('f.alias, f.is_unique_identifer as is_unique, f.type, f.object')->from(MAUTIC_TABLE_PREFIX . 'lead_fields', 'f')->where("f.object = '{$object}'")->orderBy('f.field_order', 'ASC')->execute()->fetchAll();
             // Compile which ones are unique identifiers
             // Email will always be included first
             $uniqueFields = 'lead' === $object ? ['email' => 'email'] : ['companyemail' => 'companyemail'];
             foreach ($fields as $f) {
                 if ($f['is_unique'] && $f['alias'] != 'email') {
                     $uniqueFields[$f['alias']] = $f['alias'];
                 }
                 $columnDef = FieldModel::getSchemaDefinition($f['alias'], $f['type'], !empty($f['is_unique']));
                 $table->addColumn($columnDef['name'], $columnDef['type'], $columnDef['options']);
                 if ('text' != $columnDef['type']) {
                     $table->addIndex([$columnDef['name']], MAUTIC_TABLE_PREFIX . $f['alias'] . '_search');
                 }
             }
             // Only allow indexes for string types
             $columns = $table->getColumns();
             /** @var \Doctrine\DBAL\Schema\Column $column */
             foreach ($columns as $column) {
                 $type = $column->getType();
                 $name = $column->getName();
                 if (!$type instanceof StringType) {
                     unset($uniqueFields[$name]);
                 } elseif (isset($uniqueFields[$name])) {
                     $uniqueFields[$name] = $uniqueFields[$name];
                 }
             }
             if (count($uniqueFields) > 1) {
                 // Only use three to prevent max key length errors
                 $uniqueFields = array_slice($uniqueFields, 0, 3);
                 $table->addIndex($uniqueFields, MAUTIC_TABLE_PREFIX . 'unique_identifier_search');
             }
             switch ($object) {
                 case 'lead':
                     $table->addIndex(['attribution', 'attribution_date'], MAUTIC_TABLE_PREFIX . 'contact_attribution');
                     break;
                 case 'company':
                     $table->addIndex(['companyname', 'companyemail'], MAUTIC_TABLE_PREFIX . 'company_filter');
                     $table->addIndex(['companyname', 'companycity', 'companycountry', 'companystate'], MAUTIC_TABLE_PREFIX . 'company_match');
                     break;
             }
         }
     } catch (\Exception $e) {
         //table doesn't exist or something bad happened so oh well
         $this->logger->addError('SCHEMA ERROR: ' . $e->getMessage());
     }
 }
 public function postGenerateSchema(\Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs $event)
 {
     $schema = $event->getSchema();
     // When using multiple entity managers ignore events that are triggered by other entity managers.
     if ($event->getEntityManager()->getMetadataFactory()->isTransient('JMS\\JobQueueBundle\\Entity\\Job')) {
         return;
     }
     $table = $schema->createTable('jms_job_related_entities');
     $table->addColumn('job_id', 'bigint', array('nullable' => false, 'unsigned' => true));
     $table->addColumn('related_class', 'string', array('nullable' => false, 'length' => '150'));
     $table->addColumn('related_id', 'string', array('nullable' => false, 'length' => '100'));
     $table->setPrimaryKey(array('job_id', 'related_class', 'related_id'));
     $table->addForeignKeyConstraint('jms_jobs', array('job_id'), array('id'));
 }
 public function postGenerateSchema(GenerateSchemaEventArgs $event)
 {
     $schema = $event->getSchema();
     // When using multiple entity managers ignore events that are triggered by other entity managers.
     if ($event->getEntityManager()->getMetadataFactory()->isTransient('JMS\\JobQueueBundle\\Entity\\Job')) {
         return;
     }
     $table = $schema->createTable('jms_job_statistics');
     $table->addColumn('job_id', 'bigint', array('nullable' => false, 'unsigned' => true));
     $table->addColumn('characteristic', 'string', array('length' => 30, 'nullable' => false));
     $table->addColumn('createdAt', 'datetime', array('nullable' => false));
     $table->addColumn('charValue', 'float', array('nullable' => false));
     $table->setPrimaryKey(array('job_id', 'characteristic', 'createdAt'));
 }