Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
14 / 14
StateManager
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
9
100.00% covered (success)
100.00%
14 / 14
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 clearState
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 loadDate
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
2 / 2
 loadState
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
2 / 2
 saveDate
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 saveState
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
<?php
/**
 * OAI-PMH State Manager (for persisting harvest state)
 *
 * PHP version 7
 *
 * Copyright (c) Demian Katz 2010.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2,
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category VuFind
 * @package  Harvest_Tools
 * @author   Demian Katz <demian.katz@villanova.edu>
 * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
 * @link     https://vufind.org/wiki/indexing:oai-pmh Wiki
 */
namespace VuFindHarvest\OaiPmh;
/**
 * OAI-PMH State Manager (for persisting harvest state)
 *
 * This class actually serves two distinct functions:
 *
 * Long-term state management: remembering/retrieving the end date of the most
 * recent harvest through saveDate()/loadDate().
 *
 * Short-term state management: remembering resumption tokens to allow for
 * continuation of an interrupted harvest through saveState()/loadState().
 *
 * @category VuFind
 * @package  Harvest_Tools
 * @author   Demian Katz <demian.katz@villanova.edu>
 * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
 * @link     https://vufind.org/wiki/indexing:oai-pmh Wiki
 */
class StateManager
{
    /**
     * File for tracking last harvest date
     *
     * @var string
     */
    protected $lastHarvestFile;
    /**
     * File for tracking last harvest state (for continuing interrupted
     * connection).
     *
     * @var string
     */
    protected $lastStateFile;
    /**
     * Constructor.
     *
     * @param string $basePath Directory to contain state files
     */
    public function __construct($basePath)
    {
        // Check if there is a file containing a start date:
        $this->lastHarvestFile = $basePath . 'last_harvest.txt';
        $this->lastStateFile = $basePath . 'last_state.txt';
    }
    /**
     * Clear the state most recently saved to saveState().
     *
     * @return void
     */
    public function clearState()
    {
        if (file_exists($this->lastStateFile)) {
            unlink($this->lastStateFile);
        }
    }
    /**
     * Retrieve the date from the "last harvested" file and use it as our start
     * date if it is available.
     *
     * @return string
     */
    public function loadDate()
    {
        return (file_exists($this->lastHarvestFile))
            ? trim(current(file($this->lastHarvestFile))) : null;
    }
    /**
     * Load the last saved harvest state. Returns an array of
     * [set, resumption token, start date] if found; false otherwise.
     *
     * @return array|bool
     */
    public function loadState()
    {
        return file_exists($this->lastStateFile)
            ? explode("\t", file_get_contents($this->lastStateFile)) : false;
    }
    /**
     * Save a date to the "last harvested" file.
     *
     * @param string $date Date to save.
     *
     * @return void
     */
    public function saveDate($date)
    {
        file_put_contents($this->lastHarvestFile, $date);
    }
    /**
     * Save a harvest state.
     *
     * @param string $set       Set being harvested
     * @param string $token     Current resumption token
     * @param string $startDate Start date of harvest
     *
     * @return void
     */
    public function saveState($set, $token, $startDate)
    {
        file_put_contents($this->lastStateFile, "$set\t$token\t$startDate");
    }
}