Skip to content

Commit

Permalink
implement edit groups for admins
Browse files Browse the repository at this point in the history
  • Loading branch information
bratkartoffel committed Jan 31, 2023
1 parent a84ed9b commit 6758777
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 36 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added

- (admin) add filter for mafia log type and success
- (admin) implement edit groups

## [1.11.1] - 2023-01-29

Expand Down
4 changes: 2 additions & 2 deletions actions/admin_benutzer.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,12 @@
$lager[$i] = getOrDefault($_POST, 'lager_' . $i, 0);
}

$backlink = sprintf('/?p=admin_benutzer_bearbeiten&id=' . $id . '_bearbeiten&id=%d&o=%d', $id, $offset);
$backlink = sprintf('/?p=admin_benutzer_bearbeiten&id=%d&o=%d', $id, $offset);
switch (getOrDefault($_REQUEST, 'a', 0)) {
// update basic information
case 1:
$backlink .= sprintf('&username=%s&email=%s&email_aktiviert=%d&geld=%f&bank=%f&igm_gesendet=%d&igm_empfangen=%d&admin=%d&betatester=%d&ewige_punkte=%d&onlinezeit=%d&gruppe=%d&verwarnungen=%d&gesperrt=%d',
$username, $email, $email_aktiviert, $geld, $bank, $igm_gesendet, $igm_empfangen,
urlencode($username), urlencode($email), $email_aktiviert, $geld, $bank, $igm_gesendet, $igm_empfangen,
$admin, $betatester, $ewige_punkte, $onlinezeit, $gruppe, $verwarnungen, $gesperrt);

Database::getInstance()->begin();
Expand Down
121 changes: 121 additions & 0 deletions actions/admin_gruppe.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
<?php
/*
* MIT Licence
* Copyright (c) 2023 Simon Frankenberger
*
* Please see LICENCE.md for complete licence text.
*/
require_once __DIR__ . '/../include/functions.inc.php';
require_once __DIR__ . '/../include/database.class.php';

ob_start();
requireAdmin();

$id = getOrDefault($_REQUEST, 'id', 0);
$offset = getOrDefault($_REQUEST, 'o', 0);

$backlink = sprintf('/?p=admin_gruppe_bearbeiten&id=%d&o=%d', $id, $offset);
switch (getOrDefault($_REQUEST, 'a', 0)) {
// update basic information
case 1:
$name = getOrDefault($_POST, 'name');
$kuerzel = getOrDefault($_POST, 'kuerzel');
$password = getOrDefault($_POST, 'password');
$beschreibung = getOrDefault($_POST, 'beschreibung');
$kasse = getOrDefault($_POST, 'kasse', 0.0);
$backlink .= sprintf('&name=%s&kuerzel=%s&beschreibung=%d&kasse=%f', urlencode($name), urlencode($kuerzel), urlencode($beschreibung), $kasse);

Database::getInstance()->begin();
$fields = array(
'Name' => $name,
'Kuerzel' => $kuerzel,
'Beschreibung' => $beschreibung,
'Kasse' => $kasse,
);
if ($password !== null && strlen($password) > 0) {
$fields['Passwort'] = hashPassword($password);
}

if (Database::getInstance()->updateTableEntry(Database::TABLE_GROUP, $id, $fields) === null) {
Database::getInstance()->rollBack();
redirectTo($backlink, 142, __LINE__);
} else {
Database::getInstance()->commit();
redirectTo('/?p=admin_gruppe_bearbeiten&id=' . $id . '&o=' . $offset, 248);
}
break;

// edit group cash for user
case 2:
$user_id = getOrDefault($_POST, 'user_id', 0);
$amount = getOrDefault($_POST, 'amount', 0.0);
Database::getInstance()->begin();

if (Database::getInstance()->updateTableEntry(Database::TABLE_GROUP_CASH, null,
array('amount' => $amount), array('group_id = :whr0' => $id, 'user_id = :whr1' => $user_id)) === null) {
Database::getInstance()->rollBack();
redirectTo($backlink, 142, __LINE__);
} else {
Database::getInstance()->commit();
redirectTo('/?p=admin_gruppe_bearbeiten&id=' . $id . '&o=' . $offset, 248);
}
break;

// edit group rights for user
case 3:
$user_id = getOrDefault($_POST, 'user_id', 0);
$message_write = getOrDefault($_POST, 'message_write', 0);
$message_pin = getOrDefault($_POST, 'message_pin', 0);
$message_delete = getOrDefault($_POST, 'message_delete', 0);
$edit_description = getOrDefault($_POST, 'edit_description', 0);
$edit_image = getOrDefault($_POST, 'edit_image', 0);
$edit_password = getOrDefault($_POST, 'edit_password', 0);
$member_rights = getOrDefault($_POST, 'member_rights', 0);
$member_kick = getOrDefault($_POST, 'member_kick', 0);
$group_cash = getOrDefault($_POST, 'group_cash', 0);
$group_diplomacy = getOrDefault($_POST, 'group_diplomacy', 0);
$group_delete = getOrDefault($_POST, 'group_delete', 0);
Database::getInstance()->begin();
$fields = array(
'message_write' => $message_write,
'message_pin' => $message_pin,
'message_delete' => $message_delete,
'edit_description' => $edit_description,
'edit_image' => $edit_image,
'edit_password' => $edit_password,
'member_rights' => $member_rights,
'member_kick' => $member_kick,
'group_cash' => $group_cash,
'group_diplomacy' => $group_diplomacy,
'group_delete' => $group_delete,
);

if (Database::getInstance()->updateTableEntry(Database::TABLE_GROUP_RIGHTS, null,
$fields, array('group_id = :whr0' => $id, 'user_id = :whr1' => $user_id)) === null) {
Database::getInstance()->rollBack();
redirectTo($backlink, 142, __LINE__);
} else {
Database::getInstance()->commit();
redirectTo('/?p=admin_gruppe_bearbeiten&id=' . $id . '&o=' . $offset, 248);
}
break;

// delete group
case 4:
requireXsrfToken($backlink);
Database::getInstance()->begin();
$status = Database::getInstance()->deleteGroup($id);
if ($status !== null) {
Database::getInstance()->rollBack();
redirectTo($backlink, 143, __LINE__ . '_' . $status);
} else {
Database::getInstance()->commit();
redirectTo('/?p=admin_gruppe&o=' . $offset, 228);
}
break;

// unknown action
default:
redirectBack('/?p=admin_gruppe_bearbeiten&id=' . $id . '&o=' . $offset, 112, __LINE__);
break;
}
7 changes: 5 additions & 2 deletions include/functions.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,9 @@ function getMessageBox(int $msg_id): ?string
case 247:
$text = 'Der Benutzer wurde gespeichert.';
break;
case 248:
$text = 'Die Gruppe wurde gespeichert.';
break;


case 999:
Expand Down Expand Up @@ -840,10 +843,10 @@ function verifyOffset(int $offset, int $entriesCount, int $entriesPerPage): int
}
}

function createProfileLink(?int $blm_user, string $name): string
function createProfileLink(?int $blm_user, string $name, string $page = 'profil'): string
{
if ($blm_user === null || $blm_user === 0) return $name;
return sprintf('<a href="/?p=profil&amp;id=%d">%s</a>', $blm_user, escapeForOutput($name));
return sprintf('<a href="/?p=%s&amp;id=%d">%s</a>', $page, $blm_user, escapeForOutput($name));
}

function createGroupLink(?int $group_id, string $name): string
Expand Down
2 changes: 1 addition & 1 deletion pages/admin.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<li><a href="/?p=admin_test">Variablen Testseite</a></li>
<li><a href="/?p=admin_markt">Marktplatz</a></li>
<li><a href="/?p=admin_vertrag">Verträge</a></li>
<li><a href="/?p=admin_gruppe">Gruppen</a> (readonly / TODO)</li>
<li><a href="/?p=admin_gruppe">Gruppen</a></li>
<li><a href="/?p=admin_gruppe_diplomatie">Gruppendiplomatie</a> (TODO)</li>
<li><a href="/?p=admin_benutzer">Benutzer</a></li>
<li><a href="/?p=admin_auftrag">Aufträge</a> (TODO)</li>
Expand Down
2 changes: 1 addition & 1 deletion pages/admin_gruppe.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
<td>
<a href="/?p=admin_gruppe_bearbeiten&amp;id=<?= $row['ID']; ?>&amp;o=<?= $offset; ?>">Bearbeiten</a> |
<a class="delete_group" data-groupname="<?= escapeForOutput($row['Name']); ?>"
href="/actions/admin_gruppe.php?a=6&amp;id=<?= $row['ID']; ?>&amp;o=<?= $offset; ?>&amp;token=<?= $_SESSION['blm_xsrf_token']; ?>">Löschen</a>
href="/actions/admin_gruppe.php?a=4&amp;id=<?= $row['ID']; ?>&amp;o=<?= $offset; ?>&amp;token=<?= $_SESSION['blm_xsrf_token']; ?>">Löschen</a>
</td>
</tr>
<?php
Expand Down
35 changes: 5 additions & 30 deletions pages/admin_gruppe_bearbeiten.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,50 +65,25 @@
</form>
</div>

<br>

<div class="form AdminEditGroup">
<form action="/actions/admin_gruppe.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="a" value="2"/>
<input type="hidden" name="id" value="<?= $id; ?>"/>
<input type="hidden" name="o" value="<?= $offset; ?>"/>
<header>Gruppenbild ändern</header>
<div>
Um das aktuelle Bild zu löschen, einfach den<br/>
Speichern-Button drücken, ohne ein Bild auszuwählen.
</div>
<div class="GroupImage"><img id="group_image"
src="/pics/profile.php?gid=<?= $id; ?>&amp;ts=<?= ($entry['LastImageChange'] == null ? 0 : strtotime($entry['LastImageChange'])); ?>"
alt="Gruppenbild"/></div>
<div>
<input type="file" name="bild" accept="image/*"/>
</div>
<div>
<input type="submit" value="Speichern" id="image_save"/>
</div>
</form>
</div>


<div class="form">
<header>Gruppenkasse</header>
<?php
$data = Database::getInstance()->getAllGroupCashById($id);
foreach ($data as $entry) {
?>
<form action="/actions/admin_gruppe.php" method="post">
<input type="hidden" name="a" value="3"/>
<input type="hidden" name="a" value="2"/>
<input type="hidden" name="id" value="<?= $id; ?>"/>
<input type="hidden" name="user_id" value="<?= escapeForOutput($entry['UserID']); ?>"/>
<input type="hidden" name="o" value="<?= $offset; ?>"/>
<div>
<label for="amount_<?= escapeForOutput($entry['UserID']); ?>"><?php
echo createProfileLink($entry['UserID'], $entry['UserName']);
echo createProfileLink($entry['UserID'], $entry['UserName'], 'admin_benutzer_bearbeiten');
if ($entry['IstMitglied'] != 1 && $entry['UserID'] !== null) {
echo ' (ausgetreten)';
}
?>:</label>
<input type="number" name="amount" id="amount_<?= $entry['UserID']; ?>" size="9" min="0" step="0.01"
<input type="number" name="amount" id="amount_<?= $entry['UserID']; ?>" size="12" min="0" step="0.01"
value="<?= $entry['amount']; ?>"/> €
<input type="submit" value="Speichern"
id="cash_save_<?= escapeForOutput($entry['UserID']); ?>"/>
Expand Down Expand Up @@ -146,12 +121,12 @@
foreach ($data as $row) {
?>
<form action="/actions/admin_gruppe.php" method="post">
<input type="hidden" name="a" value="4"/>
<input type="hidden" name="a" value="3"/>
<input type="hidden" name="id" value="<?= $id; ?>"/>
<input type="hidden" name="user_id" value="<?= escapeForOutput($row['UserId']); ?>"/>
<input type="hidden" name="o" value="<?= $offset; ?>"/>
<tr>
<td><?= createProfileLink($row['UserId'], $row['UserName']); ?></td>
<td><?= createProfileLink($row['UserId'], $row['UserName'], 'admin_benutzer_bearbeiten'); ?></td>
<td><input type="checkbox" name="message_write" id="message_write_<?= $id; ?>"
value="1" <?= ($row['message_write'] == 1 ? 'checked' : ''); ?>/></td>
<td><input type="checkbox" name="message_pin" id="message_pin_<?= $id; ?>"
Expand Down

0 comments on commit 6758777

Please sign in to comment.