setComponents([]); $this->setIsAllowedToSave(true); } /** * Add configuration component to stats * * @param string $component Filename of the configuration component file * @return $this */ public function addComponent($component) { $comps = $this->getComponents(); if (is_readable($component)) { $comps[$component] = ['mtime' => filemtime($component)]; } $this->setComponents($comps); return $this; } /** * Validate components in the stats * * @param array $data * @return boolean */ public function validateComponents($data) { if (empty($data) || !is_array($data)) { return false; } // check that no source files were changed or check file exists foreach ($data as $sourceFile => $stat) { if (empty($stat['mtime']) || !is_file($sourceFile) || filemtime($sourceFile) !== $stat['mtime']) { return false; } } return true; } /** * @return string */ public function getComponentsHash() { $sum = ''; foreach ($this->getComponents() as $comp) { $sum .= $comp['mtime'] . ':'; } $hash = md5($sum); return $hash; } /** * @return bool */ abstract public function load(); /** * @return bool */ abstract public function save(); }