/** * Restore trashed item * @return boolean * @throws Exception * @Ignored */ public function restore() { if (!$this instanceof TrashInterface) { // When trying to restore normal document instead of trash item throw new Exception(sprintf('Restore can be performed only on `%s` instance', TrashInterface::class)); } $em = new EntityManager($this->data); // Set scenario to `restore` for model, which is just about to be restored ScenarioManager::setScenario($this->data, TrashInterface::ScenarioRestore); if (!Event::valid($this->data, TrashInterface::EventBeforeRestore)) { return false; } $saved = $em->save(); if (!$saved) { return false; } $finder = new Finder($this->data); $model = $finder->find(PkManager::prepareFromModel($this->data)); if (!$model) { return false; } $eventAfter = new RestoreEvent(); $eventAfter->setTrashed($this->data); $eventAfter->setTrash($this); if (!Event::valid($model, TrashInterface::EventAfterRestore, $eventAfter)) { return false; } $trashEm = new EntityManager($this); $this->data = null; // Use deleteOne, to avoid beforeDelete event, // which should be raised only when really removing document: // when emtying trash return $trashEm->deleteOne(PkManager::prepareFromModel($this)); }
/** * Set available languages. This method accepts one parameter, * array contaning language codes prefably in short ISO form. * Example valid array and method calls: * ```php * $languages = ['en', 'pl', 'ru']; * $model->setLanguages($languages); * $model2->setLanguages(['en']); * ``` * @param string[] $languages * @Ignored */ public function setLanguages($languages) { $event = new ModelEvent($this); $event->data = $languages; if (!Event::valid($this, InternationalInterface::EventBeforeLanguagesSet, $event)) { return; } $this->_languages = $languages; Event::trigger($this, InternationalInterface::EventAfterLanguagesSet, $event); }
/** * This method is invoked before deleting a record. * The default implementation raises the {@link onBeforeDelete} event. * You may override this method to do any preparation work for record deletion. * Make sure you call the parent implementation so that the event is raised properly. * @return boolean whether the record should be deleted. Defaults to true. * @since v1.0 */ private function _beforeDelete() { $result = Event::valid($this->model, EntityManagerInterface::EventBeforeDelete); if ($result) { (new Signal())->emit(new BeforeDelete($this->model)); ScenarioManager::setScenario($this->model, ScenariosInterface::Delete); } return $result; }