diff --git a/ajax/sessionController.php b/ajax/sessionController.php index fee50ad2..8b2ab3ee 100644 --- a/ajax/sessionController.php +++ b/ajax/sessionController.php @@ -83,18 +83,22 @@ class SessionController extends Controller{ throw new \Exception('Session does not exist'); } $sessionData = $session->getData(); - $file = new File($sessionData['file_id']); - if (!$file->isPublicShare()){ - self::preDispatch(); - } else { - self::preDispatchGuest(); - } - - list($view, $path) = $file->getOwnerViewAndPath(); - - $isWritable = ($view->file_exists($path) && $view->isUpdatable($path)) || $view->isCreatable($path); - if (!$isWritable){ - throw new \Exception($path . ' does not exist or is not writable for user ' . $uid); + try { + $file = new File($sessionData['file_id']); + if (!$file->isPublicShare()){ + self::preDispatch(); + } else { + self::preDispatchGuest(); + } + list($view, $path) = $file->getOwnerViewAndPath(); + } catch (\Exception $e){ + //File was deleted or unshared. We need to save content as new file anyway + //Sorry, but for guests it would be lost :( + $uid = self::preDispatch(); + $view = new \OC\Files\View('/' . $uid . '/files'); + + $dir = \OCP\Config::getUserValue(\OCP\User::getUser(), 'documents', 'save_path', ''); + $path = Helper::getNewFileName($view, $dir . 'New Document.odt'); } $member = new Db_Member(); diff --git a/lib/storage.php b/lib/storage.php index e8f8f162..d8f0e3fc 100644 --- a/lib/storage.php +++ b/lib/storage.php @@ -81,6 +81,14 @@ class Storage { return; } + $member = new Db_Member(); + $sessionMembers = $member->getCollectionBy('es_id', $session['es_id']); + foreach ($sessionMembers as $memberData){ + if (intval($memberData['status'])===Db_Member::MEMBER_STATUS_ACTIVE){ + return; + } + } + Db_Session::cleanUp($session['es_id']); }