diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2014-10-14 23:24:40 +0200 |
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2014-10-14 23:24:40 +0200 |
| commit | 6c8ad60e9888fa5625dad2460ca073f93ac1ae0d (patch) | |
| tree | b68bddc4eed7071b62ca3c88e5820b9247290079 | |
| parent | 2cb2fae10d986db73bb0ad517df8c5334cab713c (diff) | |
| download | grauphel-6c8ad60e9888fa5625dad2460ca073f93ac1ae0d.tar.gz grauphel-6c8ad60e9888fa5625dad2460ca073f93ac1ae0d.zip | |
Add database management page
| -rw-r--r-- | appinfo/routes.php | 10 | ||||
| -rw-r--r-- | controller/guicontroller.php | 35 | ||||
| -rw-r--r-- | grauphel.css | 7 | ||||
| -rw-r--r-- | lib/notestorage.php | 30 | ||||
| -rw-r--r-- | templates/appnavigation.php | 1 | ||||
| -rw-r--r-- | templates/gui-database.php | 40 |
6 files changed, 123 insertions, 0 deletions
diff --git a/appinfo/routes.php b/appinfo/routes.php index 28ba16d..19a4b93 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -73,6 +73,16 @@ $application->registerRoutes( 'name' => 'gui#tokens', 'verb' => 'GET', ), + array( + 'url' => '/database', + 'name' => 'gui#database', + 'verb' => 'GET', + ), + array( + 'url' => '/database', + 'name' => 'gui#databaseReset', + 'verb' => 'POST', + ), array( 'url' => '/tokens/{username}/{tokenKey}', diff --git a/controller/guicontroller.php b/controller/guicontroller.php index 58768f2..6f0a15c 100644 --- a/controller/guicontroller.php +++ b/controller/guicontroller.php @@ -119,6 +119,41 @@ class GuiController extends Controller return $res; } + /** + * Allow the user to clear his database + * + * @NoAdminRequired + * @NoCSRFRequired + */ + public function database($reset = null) + { + $res = new TemplateResponse('grauphel', 'gui-database'); + $res->setParams(array('reset' => $reset)); + $this->addNavigation($res, null); + $this->addStats($res); + + return $res; + } + + /** + * Resets the database by deleting all notes and deleting the user's + * sync data. + * + * @NoAdminRequired + */ + public function databaseReset() + { + $reset = false; + if ($_POST['username'] != '' && $_POST['username'] == $this->user->getUid()) { + $notes = $this->getNotes(); + $notes->deleteAll(); + $notes->deleteSyncData(); + $reset = true; + } + + return $this->database($reset); + } + protected function addNavigation(TemplateResponse $res, $selectedRawtag = null) { $nav = new \OCP\Template('grauphel', 'appnavigation', ''); diff --git a/grauphel.css b/grauphel.css index cac269c..6ba1cde 100644 --- a/grauphel.css +++ b/grauphel.css @@ -47,6 +47,13 @@ text-decoration: underline; } +.app-grauphel #app-content .error { + color: red; +} +.app-grauphel #app-content .success { + color: green; +} + .app-grauphel .oauth-authorize { margin: 2ex; text-align: center; diff --git a/lib/notestorage.php b/lib/notestorage.php index c665903..fb68030 100644 --- a/lib/notestorage.php +++ b/lib/notestorage.php @@ -190,6 +190,22 @@ class NoteStorage } /** + * Delete synchronization data for the given user. + * + * @param SyncData $syncdata Synchronization data object + * + * @return void + */ + public function deleteSyncData() + { + \OC_DB::executeAudited( + 'DELETE FROM `*PREFIX*grauphel_syncdata`' + . ' WHERE `syncdata_user` = ?', + array($this->username) + ); + } + + /** * Load a note from the storage. * * @param string $guid Note identifier @@ -281,6 +297,20 @@ class NoteStorage } /** + * Delete all notes from storage. + * + * @return void + */ + public function deleteAll() + { + \OC_DB::executeAudited( + 'DELETE FROM `*PREFIX*grauphel_notes`' + . ' WHERE `note_user` = ?', + array($this->username) + ); + } + + /** * Load notes for the given user in short form. * Optionally only those changed after $since revision * diff --git a/templates/appnavigation.php b/templates/appnavigation.php index 8b15238..b0657e1 100644 --- a/templates/appnavigation.php +++ b/templates/appnavigation.php @@ -14,6 +14,7 @@ <li><a href="<?php p(OCP\Util::linkToRoute('grauphel.gui.index')); ?>">Info and stats</a></li> <?php if (OCP\User::isLoggedIn()) { ?> <li><a href="<?php p(OCP\Util::linkToRoute('grauphel.gui.tokens')); ?>">Manage access tokens</a></li> + <li><a href="<?php p(OCP\Util::linkToRoute('grauphel.gui.database')); ?>">Manage database</a></li> <?php } ?> </ul> </div> diff --git a/templates/gui-database.php b/templates/gui-database.php new file mode 100644 index 0000000..6fc057a --- /dev/null +++ b/templates/gui-database.php @@ -0,0 +1,40 @@ +<link rel="stylesheet" href="<?php p(OCP\Util::linkTo('grauphel','grauphel.css')); ?>" type="text/css"/> + +<?php /** @var $l OC_L10N */ ?> +<?php $_['appNavigation']->printPage(); ?> + +<script type="text/javascript" src="<?php p(OCP\Util::linkTo('grauphel','js/grauphel.js')); ?>"></script> + +<div id="app-content" class="content"> + <h1>Manage database</h1> + <p> + In case something went seriously wrong during synchronization, you may reset your + database. + It will delete all your notes and the synchronization status - as if you + never synced to this server before. + </p> + + <?php isset($_['stats']) && $_['stats']->printPage(); ?> + + <h2>Reset database</h2> + <?php if ($_['reset'] === true) { ?> + <p class="success"> + Database has been reset! + </p> + <?php } else if ($_['reset'] === false) { ?> + <p class="error"> + Database has <b>not</b> been reset! + </p> + <?php } ?> + + <p> + To reset the database, enter your user name and click "reset database": + </p> + <form method="POST" action="<?php p(OCP\Util::linkToRoute('grauphel.gui.databaseReset')); ?>"> + <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>"/> + <p> + <label>Username: <input type="text" name="username" value="" autocomplete="off" /></label> + <button type="submit">Reset database</button> + </p> + </form> +</div> |
