/**
* convey to descendants
*
* @param ConfigEntity $config config instance
* @param callable $filter filter function
* @param array $items item key list
* @return void
*/
protected function convey(ConfigEntity $config, callable $filter = null, array $items = null)
{
$descendants = $this->repo->fetchChildren($config->siteKey, $config->name);
/** @var ConfigEntity $descendant */
foreach ($descendants as $descendant) {
if ($filter === null || call_user_func($filter, $descendant) === true) {
if ($items === null) {
$descendant->clear();
} else {
foreach ($items as $item) {
$val = $config->getPure($item);
if ($val instanceof Closure) {
continue;
}
$descendant->set($item, $val);
}
}
$this->repo->save($descendant);
}
}
}