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