Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ can be a little slow because we are a small company with only two developers. I
Requirements
------------

* [Zend Framework 2](https://github.com/zendframework/zf2) (latest master).
* [ZfcBase](https://github.com/ZF-Commons/ZfcBase) (latest master).
* [Laminas]() (latest master).
* [ZfcUser](https://github.com/ZF-Commons/ZfcUser) (latest master).
* [GoalioMailService](https://github.com/goalio/GoalioMailService) (latest master).

Expand Down Expand Up @@ -58,7 +57,6 @@ Installation
return array(
'modules' => array(
// ...
'ZfcBase',
'ZfcUser',
'GoalioMailService',
'GoalioForgotPassword'
Expand Down
4 changes: 2 additions & 2 deletions src/GoalioForgotPassword/Form/Forgot.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
namespace GoalioForgotPassword\Form;

use Laminas\Form\Element;
use ZfcBase\Form\ProvidesEventsForm;
use Laminas\Form\Form;
use GoalioForgotPassword\Options\ForgotOptionsInterface;

class Forgot extends ProvidesEventsForm
class Forgot extends Form
{
/**
* @var AuthenticationOptionsInterface
Expand Down
3 changes: 1 addition & 2 deletions src/GoalioForgotPassword/Form/Reset.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@

use Laminas\Form\Form;
use Laminas\Form\Element;
use ZfcBase\Form\ProvidesEventsForm;
use GoalioForgotPassword\Options\ForgotOptionsInterface;

class Reset extends ProvidesEventsForm
class Reset extends Form
{
/**
* @var ForgotOptionsInterface
Expand Down
2 changes: 1 addition & 1 deletion src/GoalioForgotPassword/Form/ResetFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace GoalioForgotPassword\Form;

use ZfcBase\InputFilter\ProvidesEventsInputFilter as InputFilter;
use Laminas\InputFilter\InputFilter;
use GoalioForgotPassword\Options\ForgotOptionsInterface;

class ResetFilter extends InputFilter
Expand Down
339 changes: 339 additions & 0 deletions src/GoalioForgotPassword/Mapper/AbstractDbMapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,339 @@
<?php

namespace GoalioForgotPassword\Mapper;

use Laminas\Db\Adapter\Adapter;
use Laminas\Db\Adapter\Driver\ResultInterface;
use Laminas\Db\ResultSet\HydratingResultSet;
use Laminas\Db\Sql\Select;
use Laminas\Db\Sql\Sql;
use Laminas\Db\Sql\TableIdentifier;
use Laminas\Hydrator\HydratorInterface;
use Laminas\Hydrator\ClassMethods;

abstract class AbstractDbMapper
{
/**
* @var Adapter
*/
protected $dbAdapter;

/**
* @var Adapter
*/
protected $dbSlaveAdapter;

/**
* @var HydratorInterface
*/
protected $hydrator;

/**
* @var object
*/
protected $entityPrototype;

/**
* @var HydratingResultSet
*/
protected $resultSetPrototype;

/**
* @var Select
*/
protected $selectPrototype;

/**
* @var Sql
*/
private $sql;

/**
* @var Sql
*/
private $slaveSql;

/**
* @var string
*/
protected $tableName;

/**
* @var boolean
*/
private $isInitialized = false;

/**
* Performs some basic initialization setup and checks before running a query
* @throws \Exception
* @return null
*/
protected function initialize()
{
if ($this->isInitialized) {
return;
}

if (!$this->dbAdapter instanceof Adapter) {
throw new \Exception('No db adapter present');
}

if (!$this->hydrator instanceof HydratorInterface) {
$this->hydrator = new ClassMethods;
}

if (!is_object($this->entityPrototype)) {
throw new \Exception('No entity prototype set');
}

$this->isInitialized = true;
}

/**
* @param string|null $table
* @return Select
*/
protected function getSelect($table = null)
{
$this->initialize();
return $this->getSlaveSql()->select($table ?: $this->getTableName());
}

/**
* @param Select $select
* @param object|null $entityPrototype
* @param HydratorInterface|null $hydrator
* @return HydratingResultSet
*/
protected function select(Select $select, $entityPrototype = null, HydratorInterface $hydrator = null)
{
$this->initialize();

$stmt = $this->getSlaveSql()->prepareStatementForSqlObject($select);

$resultSet = new HydratingResultSet($hydrator ?: $this->getHydrator(),
$entityPrototype ?: $this->getEntityPrototype());

$resultSet->initialize($stmt->execute());
return $resultSet;
}

/**
* @param object|array $entity
* @param string|TableIdentifier|null $tableName
* @param HydratorInterface|null $hydrator
* @return ResultInterface
*/
protected function insert($entity, $tableName = null, HydratorInterface $hydrator = null)
{
$this->initialize();
$tableName = $tableName ?: $this->tableName;

$sql = $this->getSql()->setTable($tableName);
$insert = $sql->insert();

$rowData = $this->entityToArray($entity, $hydrator);
$insert->values($rowData);

$statement = $sql->prepareStatementForSqlObject($insert);

return $statement->execute();
}

/**
* @param object|array $entity
* @param string|array|\Closure $where
* @param string|TableIdentifier|null $tableName
* @param HydratorInterface|null $hydrator
* @return ResultInterface
*/
protected function update($entity, $where, $tableName = null, HydratorInterface $hydrator = null)
{
$this->initialize();
$tableName = $tableName ?: $this->tableName;

$sql = $this->getSql()->setTable($tableName);
$update = $sql->update();

$rowData = $this->entityToArray($entity, $hydrator);
$update->set($rowData)
->where($where);

$statement = $sql->prepareStatementForSqlObject($update);

return $statement->execute();
}

/**
* @param string|array|\Closure $where
* @param string|TableIdentifier|null $tableName
* @return ResultInterface
*/
protected function delete($where, $tableName = null)
{
$tableName = $tableName ?: $this->tableName;

$sql = $this->getSql()->setTable($tableName);
$delete = $sql->delete();

$delete->where($where);

$statement = $sql->prepareStatementForSqlObject($delete);

return $statement->execute();
}

/**
* @return string
*/
protected function getTableName()
{
return $this->tableName;
}

/**
* @return object
*/
public function getEntityPrototype()
{
return $this->entityPrototype;
}

/**
* @param object $entityPrototype
* @return AbstractDbMapper
*/
public function setEntityPrototype($entityPrototype)
{
$this->entityPrototype = $entityPrototype;
$this->resultSetPrototype = null;
return $this;
}

/**
* @return Adapter
*/
public function getDbAdapter()
{
return $this->dbAdapter;
}

/**
* @param Adapter $dbAdapter
* @return AbstractDbMapper
*/
public function setDbAdapter(Adapter $dbAdapter)
{
$this->dbAdapter = $dbAdapter;
if ($dbAdapter instanceof MasterSlaveAdapterInterface) {
$this->setDbSlaveAdapter($dbAdapter->getSlaveAdapter());
}
return $this;
}

/**
* @return Adapter
*/
public function getDbSlaveAdapter()
{
return $this->dbSlaveAdapter ?: $this->dbAdapter;
}

/**
* @param Adapter $dbSlaveAdapter
* @return AbstractDbMapper
*/
public function setDbSlaveAdapter(Adapter $dbSlaveAdapter)
{
$this->dbSlaveAdapter = $dbSlaveAdapter;
return $this;
}

/**
* @return HydratorInterface
*/
public function getHydrator()
{
if (!$this->hydrator) {
$this->hydrator = new ClassMethods(false);
}
return $this->hydrator;
}

/**
* @param HydratorInterface $hydrator
* @return AbstractDbMapper
*/
public function setHydrator(HydratorInterface $hydrator)
{
$this->hydrator = $hydrator;
$this->resultSetPrototype = null;
return $this;
}

/**
* @return Sql
*/
protected function getSql()
{
if (!$this->sql instanceof Sql) {
$this->sql = new Sql($this->getDbAdapter());
}

return $this->sql;
}

/**
* @param Sql $sql
* @return AbstractDbMapper
*/
protected function setSql(Sql $sql)
{
$this->sql = $sql;
return $this;
}

/**
* @return Sql
*/
protected function getSlaveSql()
{
if (!$this->slaveSql instanceof Sql) {
$this->slaveSql = new Sql($this->getDbSlaveAdapter());
}

return $this->slaveSql;
}

/**
* @param Sql $sql
* @return AbstractDbMapper
*/
protected function setSlaveSql(Sql $sql)
{
$this->slaveSql = $sql;
return $this;
}

/**
* Uses the hydrator to convert the entity to an array.
*
* Use this method to ensure that you're working with an array.
*
* @param object $entity
* @param HydratorInterface|null $hydrator
* @return array
*/
protected function entityToArray($entity, HydratorInterface $hydrator = null)
{
if (is_array($entity)) {
return $entity; // cut down on duplicate code
} elseif (is_object($entity)) {
if (!$hydrator) {
$hydrator = $this->getHydrator();
}
return $hydrator->extract($entity);
}
throw new Exception\InvalidArgumentException('Entity passed to db mapper should be an array or object.');
}
}
Loading