示例#1
0
 /**
  * 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));
 }
示例#2
0
 /**
  * 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);
 }
示例#3
0
 /**
  * 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;
 }