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')); }
public function testconfiguration() { $config = new Configuration(); $config->setCurrentUser($this->ZfcUserMock); $prefix = "prefix"; $config->setTablePrefix($prefix); $suffix = "suffix"; $config->setTableSuffix($suffix); $fieldName = "fieldName"; $config->setRevisionFieldName($fieldName); $revisionIdFieldType = "string"; $config->setRevisionIdFieldType($revisionIdFieldType); $tableName = "tableName"; $config->setRevisionTableName($tableName); $revisionTypeFieldName = "string"; $config->setRevisionTypeFieldName($revisionTypeFieldName); $ipaddress = $config->getIpAddress(); $config->setAuditedEntityClasses(array('ZF2EntityAuditTest\\Entity\\Article', 'ZF2EntityAuditTest\\Entity\\Writer')); $config->setNote("default note"); $this->auditManager = new Manager($config); $this->auditManager->registerEvents($this->em->getEventManager()); /// creating the tables $this->schemaTool = $this->getSchemaTool(); $this->schemaTool->createSchema(array($this->em->getClassMetadata('ZF2EntityAuditTest\\Entity\\Article'), $this->em->getClassMetadata('ZF2EntityAuditTest\\Entity\\Writer'))); $this->assertInstanceOf("ZfcUser\\Entity\\User", $this->ZfcUserMock); $this->assertEquals($prefix, $config->getTablePrefix()); $this->assertEquals($suffix, $config->getTableSuffix()); $this->assertEquals($fieldName, $config->getRevisionFieldName()); $this->assertEquals($tableName, $config->getRevisionTableName()); $this->assertEquals($revisionIdFieldType, $config->getRevisionIdFieldType()); $this->assertEquals($revisionTypeFieldName, $config->getRevisionIdFieldType()); $this->assertEquals($ipaddress, "1.1.1.9"); }
private function getRevisionId() { if ($this->revisionId === null) { $date = date_create("now")->format($this->platform->getDateTimeFormatString()); if ($this->config->getCurrentUser() != null) { $userId = $this->config->getCurrentUser()->getId(); } else { $userId = null; } $this->conn->insert($this->config->getRevisionTableName(), array('timestamp' => $date, 'user_id' => $userId, 'note' => $this->config->getNote(), 'ipaddress' => $this->config->getIpAddress())); $sequenceName = $this->platform->supportsSequences() ? 'REVISIONS_ID_SEQ' : null; $this->revisionId = $this->conn->lastInsertId($sequenceName); } return $this->revisionId; }