'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}',
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', '');
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;
\OC_DB::executeAudited($sql, $params);
}
+ /**
+ * 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.
*
);
}
+ /**
+ * 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
<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>
--- /dev/null
+<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>