/**
  * Czy wygenerowany plik jest przedawniony?
  * @return bool
  */
 protected function isExpired()
 {
     $output = $this->getPath();
     // przypuszczalnie na produkcji można sobie wygenerować pliki ręcznie
     if (file_exists($output) && $this->outputLifeTime === 0 && !$this->outputForceRefresh) {
         return false;
     }
     // wymuś odświeżanie pliku
     if (empty($this->cacheDb)) {
         return true;
     } else {
         $cache = $this->cacheDb->select($output);
         // brak danych w pamięci podręcznej
         if ($cache === false && empty($cache['data'])) {
             return true;
         }
         // jeśli brak listy plików
         if (empty($cache['data']['files'])) {
             return true;
         }
         // jeśli czas życia ustawiono na zero
         // to znaczy że plik jest wieczny
         if ($this->outputLifeTime === 0 && !$this->outputForceRefresh) {
             return false;
         } else {
             // test na plikach zostanie przeprowadzony...
             // tylko wtedy gdy wygenerowany plik jest przedawniony
             // lub ustawiono wymuszenie odświerzania
             if ($cache['data']['generate_time'] + $this->outputLifeTime < time() || $this->outputForceRefresh) {
                 // oznacz jako przestarzały jeśli daty modyfikacji pliku się nie zgadzają
                 foreach ($cache['data']['files'] as $filename => $modifytime) {
                     if (@filemtime($filename) != $modifytime) {
                         return true;
                     }
                 }
                 // oznacz jako przestarzały jeśli suma kontrolna się nie zgadza
                 $list = array();
                 foreach ($this->sources as &$source) {
                     $list[] = $this->inputDir . $source;
                 }
                 if ($cache['data']['files_checksum'] != $this->checksum($list)) {
                     return true;
                 }
             }
             return false;
         }
     }
 }