<?php
+namespace Shaarli;
+
+use DateTime;
+use Exception;
+use Shaarli\Bookmark\Bookmark;
+use Shaarli\Helper\FileUtils;
+
/**
* Class History
*
* - UPDATED: link updated
* - DELETED: link deleted
* - SETTINGS: the settings have been updated through the UI.
+ * - IMPORT: bulk bookmarks import
*
* Note: new events are put at the beginning of the file and history array.
*/
/**
* @var string Action key: a new link has been created.
*/
- const CREATED = 'CREATED';
+ public const CREATED = 'CREATED';
/**
* @var string Action key: a link has been updated.
*/
- const UPDATED = 'UPDATED';
+ public const UPDATED = 'UPDATED';
/**
* @var string Action key: a link has been deleted.
*/
- const DELETED = 'DELETED';
+ public const DELETED = 'DELETED';
/**
* @var string Action key: settings have been updated.
*/
- const SETTINGS = 'SETTINGS';
+ public const SETTINGS = 'SETTINGS';
+
+ /**
+ * @var string Action key: a bulk import has been processed.
+ */
+ public const IMPORT = 'IMPORT';
/**
* @var string History file path.
* History constructor.
*
* @param string $historyFilePath History file path.
- * @param int $retentionTime History content rentention time in seconds.
+ * @param int $retentionTime History content retention time in seconds.
*
* @throws Exception if something goes wrong.
*/
/**
* Add Event: new link.
*
- * @param array $link Link data.
+ * @param Bookmark $link Link data.
*/
public function addLink($link)
{
- $this->addEvent(self::CREATED, $link['id']);
+ $this->addEvent(self::CREATED, $link->getId());
}
/**
* Add Event: update existing link.
*
- * @param array $link Link data.
+ * @param Bookmark $link Link data.
*/
public function updateLink($link)
{
- $this->addEvent(self::UPDATED, $link['id']);
+ $this->addEvent(self::UPDATED, $link->getId());
}
/**
* Add Event: delete existing link.
*
- * @param array $link Link data.
+ * @param Bookmark $link Link data.
*/
public function deleteLink($link)
{
- $this->addEvent(self::DELETED, $link['id']);
+ $this->addEvent(self::DELETED, $link->getId());
}
/**
$this->addEvent(self::SETTINGS);
}
+ /**
+ * Add Event: bulk import.
+ *
+ * Note: we don't store bookmarks add/update one by one since it can have a huge impact on performances.
+ */
+ public function importLinks()
+ {
+ $this->addEvent(self::IMPORT);
+ }
+
/**
* Save a new event and write it in the history file.
*
$item = [
'event' => $status,
- 'datetime' => (new DateTime())->format(DateTime::ATOM),
+ 'datetime' => new DateTime(),
'id' => $id !== null ? $id : '',
];
$this->history = array_merge([$item], $this->history);
*/
protected function check()
{
- if (! is_file($this->historyFilePath)) {
+ if (!is_file($this->historyFilePath)) {
FileUtils::writeFlatDB($this->historyFilePath, []);
}
- if (! is_writable($this->historyFilePath)) {
- throw new Exception('History file isn\'t readable or writable');
+ if (!is_writable($this->historyFilePath)) {
+ throw new Exception(t('History file isn\'t readable or writable'));
}
}
{
$this->history = FileUtils::readFlatDB($this->historyFilePath, []);
if ($this->history === false) {
- throw new Exception('Could not parse history file');
+ throw new Exception(t('Could not parse history file'));
}
}
*/
protected function write()
{
- $comparaison = new DateTime('-'. $this->retentionTime . ' seconds');
+ $comparaison = new DateTime('-' . $this->retentionTime . ' seconds');
foreach ($this->history as $key => $value) {
- if (DateTime::createFromFormat(DateTime::ATOM, $value['datetime']) < $comparaison) {
+ if ($value['datetime'] < $comparaison) {
unset($this->history[$key]);
}
}