/** * Функция сохраняет текущее состояние записи, * восстанавливает состояние записи из резервной копии * и удаляет все резервные копии, превысившие лимит * * @param $id * * @return string * @throws Exception */ public function restore($id) { /** * Находим запись резервной копии для восстановления */ $version = $this->essence->where('id', $id)->with(['metas', 'blocks.metas', 'seos'])->first(); if (!isset($version) || !is_object($version) || $version->version_of == NULL) { return Redirect::to(URL::previous()); } #Helper::tad($version); /** * Находим запись оригинала */ $element = $this->essence->where('id', $version->version_of)->with(['metas', 'blocks.metas', 'seos', 'versions'])->first(); if (!isset($element) || !is_object($element) || $element->version_of != NULL) { return Redirect::to(URL::previous()); } #Helper::ta($version); #Helper::ta($element); #dd(); #Helper::ta($element->versions); /** * Создаем резервную копию оригинальной записи */ $create_backup_result = $this->create_backup($version->version_of, FALSE); if (!$create_backup_result) { throw new Exception("Can't create backup of original record"); } #Helper::tad($element->versions); /** * Восстанавливаем содержимое записи из резервной копии */ $restore_backup_result = $this->restore_backup($version->id); if (!$restore_backup_result) { throw new Exception("Can't restore backup of original record"); } /** * Удаляем старые резервные копии (если их больше лимита) */ $delete_backup_result = $this->delete_backups($element->id); if (!$delete_backup_result) { throw new Exception("Can't delete over backups of original record"); } #Helper::dd((int)$create_backup_result . ' / ' . (int)$restore_backup_result . ' / ' . (int)$delete_backup_result); $url = action('page.edit', array('id' => $element->id)) . (Request::getQueryString() ? '?' . Request::getQueryString() : ''); #Helper::d($element); #Helper::dd($url); ## Clear & reload pages cache Page::drop_cache(); Page::preload(); #return Redirect::to($url); Redirect($url); return ''; }