X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2FHistory.php;h=8074a0172c634912adf507bcd2236d8419cffe81;hb=bdc5152d486ca75372c271f94623b248bc127800;hp=c06067df80ca454bf0b8d3647e2f2d2b2cc3b35f;hpb=4306b184c4471825f916d895b047ed03fdf58985;p=github%2Fshaarli%2FShaarli.git diff --git a/application/History.php b/application/History.php index c06067df..8074a017 100644 --- a/application/History.php +++ b/application/History.php @@ -1,4 +1,9 @@ retentionTime = $retentionTime; } + } + + /** + * Initialize: read history file. + * + * Allow lazy loading (don't read the file if it isn't necessary). + */ + protected function initialize() + { $this->check(); $this->read(); } @@ -112,17 +132,31 @@ class History $this->addEvent(self::SETTINGS); } + /** + * Add Event: bulk import. + * + * Note: we don't store links 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. * * @param string $status Event key, should be defined as constant. - * @param mixed $id Event item identifier (e.g. link ID). + * @param mixed $id Event item identifier (e.g. link ID). */ protected function addEvent($status, $id = null) { + if ($this->history === null) { + $this->initialize(); + } + $item = [ 'event' => $status, - 'datetime' => (new DateTime())->format(DateTime::ATOM), + 'datetime' => new DateTime(), 'id' => $id !== null ? $id : '', ]; $this->history = array_merge([$item], $this->history); @@ -137,12 +171,12 @@ class 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')); } } @@ -153,7 +187,7 @@ class History { $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')); } } @@ -162,9 +196,9 @@ class History */ 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]); } } @@ -178,6 +212,10 @@ class History */ public function getHistory() { + if ($this->history === null) { + $this->initialize(); + } + return $this->history; } }