<?php
namespace Khansia\Access\Session\SaveHandler;

class DbTableGateway extends \Laminas\Session\SaveHandler\DbTableGateway {

    protected $owner = null;

    public function setOwner($owner) {

        $this->owner = $owner;
    }

    public function getOwner() {

        return $this->owner;
    }

    /* override read, no lifetime check
    public function read($id, $destroyExpired = true) {
        $rows = $this->tableGateway->select(array(
            $this->options->getIdColumn()   => $id,
            $this->options->getNameColumn() => $this->sessionName,
        ));

        if ($row = $rows->current()) {
            // if ($row->{$this->options->getModifiedColumn()} +
            //    $row->{$this->options->getLifetimeColumn()} > time()) {
                return $row->{$this->options->getDataColumn()};
            // }
            // $this->destroy($id);
        }
        return '';
    }
     */

    public function read($id, $destroyExpired = true){
        $rows = $this->tableGateway->select(array(
            $this->options->getIdColumn()   => $id,
            $this->options->getNameColumn() => $this->sessionName,
        ));

        if ($row = $rows->current()) {
            // if ($row->{$this->options->getModifiedColumn()} +
            //    $row->{$this->options->getLifetimeColumn()} > time()) {
                return $row->{$this->options->getDataColumn()};
            // }
            // $this->destroy($id);
        }
        return '';
    }

    /* override write, to handle owner */
    public function write($id, $data) {

        $data = array(
            $this->options->getModifiedColumn() => time(),
            $this->options->getDataColumn()     => (string) $data,
            $this->options->getOwnerColumn()    => $this->owner,
        );

        $rows = $this->tableGateway->select(array(
            $this->options->getIdColumn()   => $id,
            $this->options->getNameColumn() => $this->sessionName,
        ));

        if ($row = $rows->current()) {
            return (bool) $this->tableGateway->update($data, array(
                $this->options->getIdColumn()   => $id,
                $this->options->getNameColumn() => $this->sessionName,
            ));
        }
        $data[$this->options->getLifetimeColumn()] = $this->lifetime;
        $data[$this->options->getIdColumn()]       = $id;
        $data[$this->options->getNameColumn()]     = $this->sessionName;

        return (bool) $this->tableGateway->insert($data);
    }

}