aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2014-10-14 23:24:40 +0200
committerChristian Weiske <cweiske@cweiske.de>2014-10-14 23:24:40 +0200
commit6c8ad60e9888fa5625dad2460ca073f93ac1ae0d (patch)
treeb68bddc4eed7071b62ca3c88e5820b9247290079
parent2cb2fae10d986db73bb0ad517df8c5334cab713c (diff)
downloadgrauphel-6c8ad60e9888fa5625dad2460ca073f93ac1ae0d.tar.gz
grauphel-6c8ad60e9888fa5625dad2460ca073f93ac1ae0d.zip
Add database management page
-rw-r--r--appinfo/routes.php10
-rw-r--r--controller/guicontroller.php35
-rw-r--r--grauphel.css7
-rw-r--r--lib/notestorage.php30
-rw-r--r--templates/appnavigation.php1
-rw-r--r--templates/gui-database.php40
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>