Add configurable note quota to limit the number of notes per user.
This commit is contained in:
parent
a87ce1ee73
commit
dbd5776b8f
@ -12,11 +12,21 @@
|
||||
|
||||
$note = new Note("", "", getRequestUser()->getUID(), null);
|
||||
|
||||
$newnote = true;
|
||||
if (!empty($VARS['id'])) {
|
||||
try {
|
||||
$note = Note::loadNote($VARS['id']);
|
||||
$newnote = false;
|
||||
} catch (Exception $ex) {
|
||||
// It's a new note I guess
|
||||
$newnote = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($newnote && $SETTINGS['note_limit'] !== false && !getRequestUser()->hasPermission($SETTINGS['unlimited_permission'])) {
|
||||
$notecount = $database->count("notes", ['ownerid' => $_SESSION['uid']]);
|
||||
if ($notecount >= $SETTINGS['note_limit']) {
|
||||
sendJsonResp($Strings->get("You've reached your quota limit and can't make new notes.", false), "ERROR");
|
||||
}
|
||||
}
|
||||
|
||||
|
8
langs/en/quota.json
Normal file
8
langs/en/quota.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"You've reached your quota limit and can't make new notes.": "You've reached your quota limit and can't make new notes.",
|
||||
"Note quota reached": "Note quota reached",
|
||||
"Note quota": "Note quota",
|
||||
"Note quota: {x} of {y} used.": "Note quota: {x} of {y} used.",
|
||||
"Note quota: Unlimited": "Note quota: Unlimited",
|
||||
"unlimited": "unlimited"
|
||||
}
|
@ -20,5 +20,9 @@ define("MESSAGES", [
|
||||
"note_deleted" => [
|
||||
"string" => "Note deleted",
|
||||
"type" => "success"
|
||||
],
|
||||
"quota_reached" => [
|
||||
"string" => "You've reached your quota limit and can't make new notes.",
|
||||
"type" => "danger"
|
||||
]
|
||||
]);
|
||||
|
@ -5,13 +5,16 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
$newnote = true;
|
||||
$note = new Note("", "", $_SESSION['uid'], null);
|
||||
|
||||
if (!empty($VARS['note'])) {
|
||||
try {
|
||||
$note = Note::loadNote($VARS['note']);
|
||||
$newnote = false;
|
||||
} catch (Exception $ex) {
|
||||
// It's a new note I guess
|
||||
$newnote = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,6 +24,13 @@ if ($note->getOwnerID() != $_SESSION['uid']) {
|
||||
die();
|
||||
}
|
||||
|
||||
if ($newnote && $SETTINGS['note_limit'] !== false && !(new User($_SESSION['uid']))->hasPermission($SETTINGS['unlimited_permission'])) {
|
||||
$notecount = $database->count("notes", ['ownerid' => $_SESSION['uid']]);
|
||||
if ($notecount >= $SETTINGS['note_limit']) {
|
||||
header("Location: app.php?msg=quota_reached");
|
||||
}
|
||||
}
|
||||
|
||||
$note->saveNote();
|
||||
?>
|
||||
|
||||
|
@ -10,6 +10,23 @@ $notes = [];
|
||||
foreach ($noteids as $n) {
|
||||
$notes[] = Note::loadNote($n);
|
||||
}
|
||||
|
||||
// Check note quota
|
||||
$notequota = $SETTINGS['note_limit'];
|
||||
$notequotaset = $SETTINGS['note_limit'] !== false;
|
||||
$notequotareached = false;
|
||||
$usernotecount = 0;
|
||||
$userunlimited = false;
|
||||
if ($notequotaset) {
|
||||
$usernotecount = $database->count("notes", ['ownerid' => $_SESSION['uid']]);
|
||||
$usernotelimit = $SETTINGS['note_limit'];
|
||||
if ((new User($_SESSION['uid']))->hasPermission($SETTINGS['unlimited_permission'])) {
|
||||
$userunlimited = true;
|
||||
}
|
||||
if (!$userunlimited && $usernotecount >= $usernotelimit) {
|
||||
$notequotareached = true;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<style nonce="<?php echo $SECURE_NONCE; ?>">
|
||||
@ -70,7 +87,13 @@ foreach ($colors as $c) {
|
||||
</style>
|
||||
|
||||
<div class="btn-group mb-4">
|
||||
<a href="app.php?page=newnote" class="btn btn-success"><i class="fas fa-plus"></i> <?php $Strings->get("New note"); ?></a>
|
||||
<?php if ($notequotareached) { ?>
|
||||
<button type="button" class="btn btn-success" data-toggle="modal" data-target="#quotamodal">
|
||||
<i class="fas fa-plus"></i> <?php $Strings->get("New note"); ?>
|
||||
</button>
|
||||
<?php } else { ?>
|
||||
<a href="app.php?page=newnote" class="btn btn-success"><i class="fas fa-plus"></i> <?php $Strings->get("New note"); ?></a>
|
||||
<?php } ?>
|
||||
<a href="app.php?page=home" class="btn btn-light"><i class="fas fa-sync-alt"></i> <?php $Strings->get("Refresh"); ?></a>
|
||||
</div>
|
||||
|
||||
@ -185,6 +208,40 @@ foreach ($colors as $c) {
|
||||
|
||||
</div>
|
||||
|
||||
<?php if ($notequotaset) { ?>
|
||||
<div class="quotamsg" data-toggle="modal" data-target="#quotamodal">
|
||||
<?php
|
||||
if ($userunlimited) {
|
||||
$Strings->get("Note quota: Unlimited");
|
||||
} else {
|
||||
$Strings->build("Note quota: {x} of {y} used.", ["x" => $usernotecount, "y" => $notequota]);
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="quotamodal" tabindex="-1" role="dialog" aria-labelledby="quotamodallabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="quotamodallabel"><i class="fas fa-tachometer-alt"></i> <?php $Strings->get("Note quota"); ?></h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<?php
|
||||
$quotamsg = str_replace(["{{notecount}}", "{{notelimit}}"], [$usernotecount, ($userunlimited ? $Strings->get("unlimited", false) : $notequota)], $SETTINGS['quota_msg_content']);
|
||||
echo $quotamsg;
|
||||
?>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal"><?php $Strings->get("Close"); ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="modal fade" tabindex="-1" role="dialog" id="colormodal">
|
||||
<div class="modal-dialog" role="document">
|
||||
<form class="modal-content" action="action.php" method="POST">
|
||||
|
@ -42,6 +42,13 @@ $SETTINGS = [
|
||||
// List of required user permissions to access this app.
|
||||
"permissions" => [
|
||||
],
|
||||
// Set to a number to limit the number of notes each user can create.
|
||||
"note_limit" => false,
|
||||
// User permission required to bypass the note limit.
|
||||
"unlimited_permission" => "",
|
||||
// HTML to show when the quota is reached. "{{notecount}}" and "{{notelimit}}"
|
||||
// will be replaced with the number of notes the user has and the note_limit.
|
||||
"quota_msg_content" => "",
|
||||
// For supported values, see http://php.net/manual/en/timezones.php
|
||||
"timezone" => "America/Denver",
|
||||
// Language to use for localization. See langs folder to add a language.
|
||||
|
@ -59,4 +59,11 @@ li:not(.parsedown-task-list-close):not(.parsedown-task-list-open) {
|
||||
|
||||
.parsedown-task-list-open {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.quotamsg {
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
margin-top: 100px;
|
||||
margin-bottom: -100px;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user