mirror of
https://github.com/OPSnet/Gazelle.git
synced 2026-10-04 10:13:07 -04:00
103 lines
3.4 KiB
PHP
103 lines
3.4 KiB
PHP
<?php
|
|
/** @phpstan-var \Gazelle\User $Viewer */
|
|
/** @phpstan-var \Twig\Environment $Twig */
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Gazelle;
|
|
|
|
$userMan = new Manager\User();
|
|
if (!isset($_GET['id'])) {
|
|
$user = $Viewer;
|
|
} else {
|
|
$user = $userMan->findById((int)$_GET['id']);
|
|
if (is_null($user)) {
|
|
Error404::error();
|
|
}
|
|
}
|
|
$ownProfile = $user->id === $Viewer->id;
|
|
if (!$Viewer->permitted('users_view_invites') && !$ownProfile) {
|
|
Error403::error();
|
|
}
|
|
|
|
$inviteSourceMan = $Viewer->permitted('users_view_invites')
|
|
|| $user->isInterviewer()
|
|
|| $user->isRecruiter()
|
|
? new Manager\InviteSource()
|
|
: null;
|
|
|
|
if ($inviteSourceMan && isset($_GET['edit'])) {
|
|
/**
|
|
* We have:
|
|
* {
|
|
* "user-9112": "17",
|
|
* "reason-9112": "https:\/\/whe.re\/user\/4567",
|
|
* },
|
|
*/
|
|
|
|
$update = [];
|
|
foreach (array_key_filter_and_map('user-', $_POST) as $userId => $source) {
|
|
if (!isset($update[$userId])) {
|
|
$update[$userId] = ['user_id' => $userId];
|
|
}
|
|
$update[$userId]['source'] = (int)$source;
|
|
}
|
|
foreach (array_key_filter_and_map('reason-', $_POST) as $userId => $reason) {
|
|
if (!isset($update[$userId])) {
|
|
$update[$userId] = [];
|
|
}
|
|
$update[$userId]['profile'] = trim($reason);
|
|
}
|
|
|
|
/**
|
|
* Now we have:
|
|
* {
|
|
* "9112": {
|
|
* "user_id": 9112,
|
|
* "source": 17,
|
|
* "profile": "https:\/\/whe.re\/user\/4567"
|
|
* }
|
|
* }
|
|
*/
|
|
|
|
if ($update) {
|
|
authorize();
|
|
$inviteSourceMan->modifyInviteeSource($update);
|
|
}
|
|
}
|
|
|
|
$heading = new Util\SortableTableHeader('created', [
|
|
// see User\Invite::page() for these table aliases
|
|
'id' => ['dbColumn' => 'um.ID', 'defaultSort' => 'desc'],
|
|
'username' => ['dbColumn' => 'um.Username', 'defaultSort' => 'desc', 'text' => 'Username'],
|
|
'email' => ['dbColumn' => 'um.Email', 'defaultSort' => 'desc', 'text' => 'Email'],
|
|
'created' => ['dbColumn' => 'um.created' , 'defaultSort' => 'desc', 'text' => 'Joined'],
|
|
'lastseen' => ['dbColumn' => 'ula.last_access', 'defaultSort' => 'desc', 'text' => 'Last Seen'],
|
|
'uploaded' => ['dbColumn' => 'uls.Uploaded', 'defaultSort' => 'desc', 'text' => 'Uploaded'],
|
|
'downloaded' => ['dbColumn' => 'uls.Downloaded', 'defaultSort' => 'desc', 'text' => 'Downloaded'],
|
|
'ratio' => ['dbColumn' => '(uls.Uploaded / uls.Downloaded)', 'defaultSort' => 'desc', 'text' => 'Ratio'],
|
|
]);
|
|
|
|
$paginator = new Util\Paginator(ITEMS_PER_PAGE, (int)($_REQUEST['page'] ?? 1));
|
|
$paginator->setTotal($user->invite()->total());
|
|
|
|
echo $Twig->render('user/invited.twig', [
|
|
'edit_source' => $inviteSourceMan && ($_GET['edit'] ?? '') === 'source',
|
|
'heading' => $heading,
|
|
'invited' => array_map(
|
|
fn ($id) => $userMan->findById($id),
|
|
$user->invite()->page(
|
|
$heading->orderBy(), $heading->dir(), $paginator->limit(), $paginator->offset()
|
|
)
|
|
),
|
|
'invites_open' => new Stats\Users()->newUsersAllowed($user),
|
|
'invite_source' => $inviteSourceMan,
|
|
'notes' => new Util\Textarea('notes', '', 60, 4),
|
|
'own_profile' => $ownProfile,
|
|
'paginator' => $paginator,
|
|
'user' => $user,
|
|
'viewer' => $Viewer,
|
|
'wiki_user_classes' => 4,
|
|
'wiki_ratio_watch' => 503,
|
|
]);
|