updateRecords ($entities, $initial); $this->discontinueUnusedEntities ($updated); } protected function updateRecords ($entities, $initial) { $updated = array (); foreach ($entities as $entity) { $record = ORM::factory ($this->getModelName (), $entity->getId ()); if (! $initial) { if ($this->hasSettingName ()) { if (Setting_Model::get ($this->getSettingName ()) == 0) { if (! $record->isExist ()) { continue; } } } } $this->onUpdate ($record, $entity); $record->renew ($initial); $updated [] = $record->getId (); } return $updated; } protected function discontinueUnusedEntities (array $updated) { foreach (ORM::factory ($this->getModelName ())->find_all () as $record) { if (! in_array ($record->id, $updated)) { $this->discontinue ($record); } } } protected function onUpdate ($record, $entity) { $record->name = $entity->getName (); } function clear () { ORM::factory ($this->getModelName ())->delete_all (); } protected function discontinue (DAL $record) { throw new Exception("Method `discontinue` must be overriden by descendants."); } protected function unlinkRelatedTemplates ($record) { foreach ($record->templates as $template) { $template->delete (); } } function setModelName ($model_name) { $this->model_name = $model_name; } function getModelName () { return $this->model_name; } function setSettingName ($setting_name) { $this->setting_name = $setting_name; } function getSettingName () { return $this->setting_name; } function hasSettingName () { return isset($this->setting_name); } }