mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-03 22:20:57 +08:00
322 lines
16 KiB
PHP
322 lines
16 KiB
PHP
<?php
|
|
require "../include/bittorrent.php";
|
|
dbconn();
|
|
require_once(get_langfile_path());
|
|
loggedinorreturn();
|
|
parked();
|
|
$id = intval($_GET["id"] ?? 0);
|
|
$type = unesc($_GET["type"] ?? '');
|
|
$menuSelected = $_REQUEST['menu'] ?? 'invitee';
|
|
$pageSize = 50;
|
|
if (($CURUSER['id'] != $id && !user_can('viewinvite')) || !is_valid_id($id))
|
|
stderr($lang_invite['std_sorry'],$lang_invite['std_permission_denied'], true, false);
|
|
$userRep = new \App\Repositories\UserRepository();
|
|
function inviteMenu ($selected = "invitee") {
|
|
global $lang_invite, $id, $CURUSER, $invitesystem, $userRep;
|
|
begin_main_frame("", false, "100%");
|
|
print ("<div id=\"invitenav\" style='position: relative'><ul id=\"invitemenu\" class=\"menu\">");
|
|
print ("<li" . ($selected == "invitee" ? " class=selected" : "") . "><a href=\"?id=".$id."&menu=invitee\">".$lang_invite['text_invite_status']."</a></li>");
|
|
print ("<li" . ($selected == "sent" ? " class=selected" : "") . "><a href=\"?id=".$id."&menu=sent\">".$lang_invite['text_sent_invites_status']."</a></li>");
|
|
print ("<li" . ($selected == "tmp" ? " class=selected" : "") . "><a href=\"?id=".$id."&menu=tmp\">".$lang_invite['text_tmp_status']."</a></li>");
|
|
try {
|
|
$sendBtnText = $userRep->getInviteBtnText($CURUSER['id']);
|
|
$disabled = '';
|
|
} catch (\Exception $exception) {
|
|
$sendBtnText = $exception->getMessage();
|
|
$disabled = ' disabled';
|
|
}
|
|
if ($CURUSER['id'] == $id) {
|
|
print ("</ul><form style='position: absolute;top:0;right:0' method=post action=invite.php?id=".htmlspecialchars($id)."&type=new><input type=submit ".$disabled." value='".$sendBtnText."'></form></div>");
|
|
}
|
|
end_main_frame();
|
|
}
|
|
|
|
$res = sql_query("SELECT * FROM users WHERE id = ".mysql_real_escape_string($id)) or sqlerr();
|
|
$user = mysql_fetch_assoc($res);
|
|
if (!$user) {
|
|
stderr($lang_invite['std_sorry'], 'Invalid id');
|
|
}
|
|
stdhead($lang_invite['head_invites']);
|
|
print("<table width=100% class=main border=0 cellspacing=0 cellpadding=0><tr><td class=embedded>");
|
|
|
|
print("<h1 align=center><a href=\"invite.php?id=".$id."\">".$user['username'].$lang_invite['text_invite_system']."</a></h1>");
|
|
$sent = htmlspecialchars($_GET['sent'] ?? '');
|
|
if ($sent == 1){
|
|
$msg = $lang_invite['text_invite_code_sent'];
|
|
print("<p align=center><font color=red>".$msg."</font></p>");
|
|
}
|
|
|
|
$inv = $user;
|
|
|
|
//for one or more. "invite"/"invites"
|
|
if ($inv["invites"] != 1){
|
|
$_s = $lang_invite['text_s'];
|
|
} else {
|
|
$_s = "";
|
|
}
|
|
|
|
if ($type == 'new'){
|
|
if ($CURUSER['id'] != $id) {
|
|
stderr($lang_invite['std_sorry'],$lang_invite['std_permission_denied'], true, false);
|
|
}
|
|
try {
|
|
$sendBtnText = $userRep->getInviteBtnText($CURUSER['id']);
|
|
} catch (\Exception $exception) {
|
|
stdmsg($lang_invite['std_sorry'],$exception->getMessage().
|
|
" <a class=altlink href=invite.php?id={$CURUSER['id']}>".$lang_invite['here_to_go_back'],false);
|
|
print("</td></tr></table>");
|
|
stdfoot();
|
|
die;
|
|
}
|
|
registration_check('invitesystem',true,false);
|
|
$temporaryInvites = \App\Models\Invite::query()->where('inviter', $CURUSER['id'])
|
|
->where('invitee', '')
|
|
->where('expired_at', '>', now())
|
|
->orderBy('expired_at', 'asc')
|
|
->get()
|
|
;
|
|
$invitation_body = sprintf($lang_invite['text_invitation_body'], \App\Models\Setting::getSiteName()).$CURUSER['username'];
|
|
//$invitation_body_insite = str_replace("<br />","\n",$invitation_body);
|
|
$inviteSelectOptions = '';
|
|
if ($inv['invites'] > 0) {
|
|
$inviteSelectOptions = '<option value="permanent">'.$lang_invite['text_permanent'].'</option>';
|
|
}
|
|
foreach ($temporaryInvites as $tmp) {
|
|
$inviteSelectOptions .= sprintf('<option value="%s">%s (%s: %s)</option>', $tmp->hash, $tmp->hash, $lang_invite['text_expired_at'], $tmp->expired_at);
|
|
}
|
|
$preUsernameTr = "";
|
|
if (get_setting("system.is_invite_pre_email_and_username") == "yes") {
|
|
$preUsernameTr = "<tr><td class=\"rowhead nowrap\" valign=\"top\" align=\"right\">".nexus_trans("invite.pre_register_username")."</td><td align=left><input type=text size=40 name=pre_register_username><br /><font align=left class=small>".nexus_trans("invite.pre_register_username_help")."</font></td></tr>";
|
|
}
|
|
print("<form method=post action=takeinvite.php?id=".htmlspecialchars($id).">".
|
|
"<table border=1 width=100% cellspacing=0 cellpadding=5>".
|
|
"<tr align=center><td colspan=2><b>".$lang_invite['text_invite_someone']."$SITENAME ({$inv['invites']}".$lang_invite['text_invitation'].$_s.$lang_invite['text_left'] .' + '.sprintf($lang_invite['text_temporary_left'], $temporaryInvites->count()).")</b></td></tr>".
|
|
"<tr><td class=\"rowhead nowrap\" valign=\"top\" align=\"right\">".$lang_invite['text_email_address']."</td><td align=left><input type=text size=40 name=email><br /><font align=left class=small>".$lang_invite['text_email_address_note']."</font>".($restrictemaildomain == 'yes' ? "<br />".$lang_invite['text_email_restriction_note'].allowedemails() : "")."</td></tr>".$preUsernameTr.
|
|
"<tr><td class=\"rowhead nowrap\" valign=\"top\" align=\"right\">".$lang_invite['text_consume_invite']."</td><td align=left><select name='hash'>".$inviteSelectOptions."</select></td></tr>".
|
|
"<tr><td class=\"rowhead nowrap\" valign=\"top\" align=\"right\">".$lang_invite['text_message']."</td><td align=left><textarea name=body rows=10 style='width: 100%'>" .$invitation_body. "</textarea></td></tr>".
|
|
"<tr><td align=center colspan=2><input type=submit value='".$lang_invite['submit_invite']."'></td></tr>".
|
|
"</form></table></td></tr></table>");
|
|
|
|
} else {
|
|
inviteMenu($menuSelected);
|
|
if ($menuSelected == 'invitee') {
|
|
$whereStr = "u.invited_by = " . sqlesc($id);
|
|
if (!empty($_GET['status'])) {
|
|
$whereStr .= " and u.status = " . sqlesc($_GET['status']);
|
|
}
|
|
if (!empty($_GET['enabled'])) {
|
|
$whereStr .= " and u.enabled = " . sqlesc($_GET['enabled']);
|
|
}
|
|
$rel = sql_query("SELECT COUNT(*) FROM users u WHERE $whereStr") or sqlerr(__FILE__, __LINE__);
|
|
$arro = mysql_fetch_row($rel);
|
|
$number = $arro[0];
|
|
$textSelectOnePlease = nexus_trans('nexus.select_one_please');
|
|
$enabledOptions = $statusOptions = '';
|
|
foreach (['yes', 'no'] as $item) {
|
|
$enabledOptions .= sprintf(
|
|
'<option value="%s"%s>%s</option>',
|
|
$item, isset($_GET['enabled']) && $_GET['enabled'] == $item ? ' selected' : '', strtoupper($item)
|
|
);
|
|
}
|
|
foreach (['pending' => $lang_invite['text_pending'], 'confirmed' => $lang_invite['text_confirmed']] as $name => $text) {
|
|
$statusOptions .= sprintf(
|
|
'<option value="%s"%s>%s</option>',
|
|
$name, isset($_GET['status']) && $_GET['status'] == $name ? ' selected' : '', $text
|
|
);
|
|
}
|
|
|
|
$resetText = nexus_trans('label.reset');
|
|
$submitText = nexus_trans('label.submit');
|
|
$filterForm = <<<FORM
|
|
<div>
|
|
<form id="filterForm" action="{$_SERVER['REQUEST_URI']}" method="get">
|
|
<input type="hidden" name="menu" value="{$menuSelected}" />
|
|
<input type="hidden" name="id" value="{$id}" />
|
|
<span>{$lang_invite['text_enabled']}:</span>
|
|
<select name="enabled">
|
|
<option value="">-{$textSelectOnePlease}-</option>
|
|
{$enabledOptions}
|
|
</select>
|
|
|
|
<span>{$lang_invite['text_status']}:</span>
|
|
<select name="status">
|
|
<option value="">-{$textSelectOnePlease}-</option>
|
|
{$statusOptions}
|
|
</select>
|
|
|
|
<input type="submit" value="{$submitText}">
|
|
<input type="button" id="reset" value="{$resetText}">
|
|
</form>
|
|
</div>
|
|
FORM;
|
|
$resetJs = <<<JS
|
|
jQuery("#reset").on('click', function () {
|
|
jQuery("select[name=status]").val('')
|
|
jQuery("select[name=enabled]").val('')
|
|
})
|
|
JS;
|
|
\Nexus\Nexus::js($resetJs, 'footer', false);
|
|
print($filterForm."<table border=1 width=100% cellspacing=0 cellpadding=5>".
|
|
"<form method=post action=takeconfirm.php?id=".htmlspecialchars($id).">");
|
|
|
|
if(!$number){
|
|
print("<tr><td colspan=7 align=center>".$lang_invite['text_no_invites']."</tr>");
|
|
} else {
|
|
list($pagertop, $pagerbottom, $limit) = pager($pageSize, $number, "?id=$id&menu=$menuSelected&");
|
|
$haremAdditionFactor = (float)get_setting('bonus.harem_addition');
|
|
$ret = sql_query("SELECT u.id, u.username, u.email, u.uploaded, u.downloaded, u.status, u.warned, u.enabled, u.donor, u.email, u.seed_points_per_hour, u.seeding_torrent_count, u.seeding_torrent_size, u.last_announce_at, COUNT(t.id) AS torrent_count FROM users u LEFT JOIN torrents t ON t.owner = u.id WHERE $whereStr GROUP BY u.id $limit") or sqlerr();
|
|
$num = mysql_num_rows($ret);
|
|
|
|
print("<tr>
|
|
<td class=colhead><b>".$lang_invite['text_username']."</b></td>
|
|
<td class=colhead><b>".$lang_invite['text_email']."</b></td>
|
|
<td class=colhead><b>".$lang_invite['text_enabled']."</b></td>
|
|
<td class=colhead><b>".$lang_invite['text_uploaded_count']."</b></td>
|
|
<td class=colhead><b>".$lang_invite['text_uploaded']."</b></td>
|
|
<td class=colhead><b>".$lang_invite['text_downloaded']."</b></td>
|
|
<td class=colhead><b>".$lang_invite['text_ratio']."</b></td>
|
|
<td class=colhead><b>".$lang_invite['text_seed_torrent_count']."</b></td>
|
|
<td class=colhead><b>".$lang_invite['text_seed_torrent_size']."</b></td>
|
|
<td class=colhead title={$lang_invite['text_seed_torrent_bonus_per_hour_help']}><b>".$lang_invite['text_seed_torrent_bonus_per_hour']."</b></td>
|
|
"
|
|
);
|
|
if ($haremAdditionFactor > 0) {
|
|
print('<td class="colhead">'.$lang_invite['harem_addition'].'</td>');
|
|
}
|
|
print("<td class=colhead><b>".$lang_invite['text_seed_torrent_last_announce_at']."</b></td>");
|
|
print("<td class=colhead><b>".$lang_invite['text_status']."</b></td>");
|
|
if ($CURUSER['id'] == $id || get_user_class() >= UC_SYSOP) {
|
|
print("<td class=colhead><b>".$lang_invite['text_confirm']."</b></td>");
|
|
}
|
|
|
|
print("</tr>");
|
|
for ($i = 0; $i < $num; ++$i)
|
|
{
|
|
$arr = mysql_fetch_assoc($ret);
|
|
|
|
if ($arr["downloaded"] > 0) {
|
|
$ratio = number_format($arr["uploaded"] / $arr["downloaded"], 3);
|
|
$ratio = "<font color=" . get_ratio_color($ratio) . ">$ratio</font>";
|
|
} else {
|
|
if ($arr["uploaded"] > 0) {
|
|
$ratio = "Inf.";
|
|
}
|
|
else {
|
|
$ratio = "---";
|
|
}
|
|
}
|
|
if ($arr["status"] == 'confirmed')
|
|
$status = "<a href=userdetails.php?id={$arr['id']}><font color=#1f7309>".$lang_invite['text_confirmed']."</font></a>";
|
|
else
|
|
$status = "<a href=checkuser.php?id={$arr['id']}><font color=#ca0226>".$lang_invite['text_pending']."</font></a>";
|
|
print("<tr class=rowfollow>
|
|
<td class=rowfollow>".get_username($arr['id'])."</td>
|
|
<td class=rowfollow>".$arr['email']."</td>
|
|
<td class=rowfollow>".$arr['enabled']."</td>
|
|
<td class=rowfollow>" . $arr['torrent_count'] . "</td>
|
|
<td class=rowfollow>" . mksize($arr['uploaded']) . "</td>
|
|
<td class=rowfollow>" . mksize($arr['downloaded']) . "</td>
|
|
<td class=rowfollow>".$ratio."</td>
|
|
<td class=rowfollow>".number_format($arr['seeding_torrent_count'])."</td>
|
|
<td class=rowfollow>".mksize($arr['seeding_torrent_size'])."</td>
|
|
<td class=rowfollow>".number_format($arr['seed_points_per_hour'], 3)."</td>
|
|
");
|
|
|
|
if ($haremAdditionFactor > 0) {
|
|
print ("<td class=rowfollow>".number_format(floatval($arr['seed_points_per_hour']) * $haremAdditionFactor, 3)."</td>");
|
|
}
|
|
print("<td class=rowfollow>{$arr['last_announce_at']}</td>");
|
|
print("<td class=rowfollow>{$status}</td>");
|
|
if ($CURUSER['id'] == $id || get_user_class() >= UC_SYSOP){
|
|
print("<td class=rowfollow>");
|
|
if ($arr['status'] == 'pending')
|
|
print("<input type=\"checkbox\" name=\"conusr[]\" value=\"" . $arr['id'] . "\" />");
|
|
print("</td>");
|
|
}
|
|
|
|
print("</tr>");
|
|
}
|
|
}
|
|
|
|
if ($CURUSER['id'] == $id || get_user_class() >= UC_SYSOP)
|
|
{
|
|
$pendingcount = number_format(get_row_count("users", "WHERE status='pending' AND invited_by={$CURUSER['id']}"));
|
|
$colSpan = 12;
|
|
if (isset($haremAdditionFactor) && $haremAdditionFactor > 0) {
|
|
$colSpan += 1;
|
|
}
|
|
if ($pendingcount){
|
|
print("<input type=hidden name=email value={$arr['email']}>");
|
|
print("<tr><td colspan=$colSpan align=right><input type=submit style='height: 20px' value=".$lang_invite['submit_confirm_users']."></td></tr>");
|
|
}
|
|
print("</form>");
|
|
}
|
|
print("</table>");
|
|
print("</td></tr></table>" . ($pagertop ?? ''));
|
|
} elseif (in_array($menuSelected, ['sent', 'tmp'])) {
|
|
$whereStr = "inviter = " . sqlesc($id);
|
|
if ($menuSelected == 'sent') {
|
|
$whereStr .= " and invitee != ''";
|
|
} elseif ($menuSelected == 'tmp') {
|
|
$whereStr .= " and invitee = '' and expired_at is not null";
|
|
}
|
|
$rul = sql_query("SELECT COUNT(*) FROM invites WHERE $whereStr");
|
|
$arre = mysql_fetch_row($rul);
|
|
$number1 = $arre[0];
|
|
print("<table border=1 width=100% cellspacing=0 cellpadding=5>");
|
|
|
|
if(!$number1){
|
|
print("<tr align=center><td colspan=6>".$lang_functions['text_none']."</tr>");
|
|
} else {
|
|
list($pagertop, $pagerbottom, $limit) = pager($pageSize, $number1, "?id=$id&menu=$menuSelected&");
|
|
|
|
$rer = sql_query("SELECT * FROM invites WHERE $whereStr $limit") or sqlerr();
|
|
$num1 = mysql_num_rows($rer);
|
|
|
|
print("<tr><td class=colhead>".$lang_invite['text_email']."</td><td class=colhead>".$lang_invite['text_hash']."</td><td class=colhead>".$lang_invite['text_send_date']."</td>");
|
|
if ($menuSelected == 'sent') {
|
|
print("<td class='colhead'>".$lang_invite['text_hash_status']."</td>");
|
|
}
|
|
print "<td class='colhead'>".$lang_invite['text_invitee_user']."</td>";
|
|
if ($menuSelected == 'tmp') {
|
|
print("<td class='colhead'>".$lang_invite['text_expired_at']."</td>");
|
|
print("<td class='colhead'>".nexus_trans('label.created_at')."</td>");
|
|
}
|
|
print("</tr>");
|
|
for ($i = 0; $i < $num1; ++$i)
|
|
{
|
|
$arr1 = mysql_fetch_assoc($rer);
|
|
$isHashValid = $arr1['valid'] == \App\Models\Invite::VALID_YES;
|
|
$registerLink = '';
|
|
if ($isHashValid) {
|
|
$registerLink = sprintf(' <a href="signup.php?type=invite&invitenumber=%s" title="%s" target="_blank"><small>[%s]</small></a>', $arr1['hash'], $lang_invite['signup_link_help'], $lang_invite['signup_link']);
|
|
}
|
|
$tr = "<tr>";
|
|
$tr .= "<td class=rowfollow>{$arr1['invitee']}</td>";
|
|
$tr .= sprintf('<td class="rowfollow">%s%s</td>', $arr1['hash'], $registerLink);
|
|
$tr .= "<td class=rowfollow>{$arr1['time_invited']}</td>";
|
|
if ($menuSelected == 'sent') {
|
|
$tr .= "<td class=rowfollow>".\App\Models\Invite::$validInfo[$arr1['valid']]['text']."</td>";
|
|
}
|
|
if (!$isHashValid) {
|
|
$tr .= "<td class=rowfollow><a href=userdetails.php?id={$arr1['invitee_register_uid']}><font color=#1f7309>".$arr1['invitee_register_username']."</font></a></td>";
|
|
} else {
|
|
$tr .= "<td class='rowfollow'></td>";
|
|
}
|
|
if ($menuSelected == 'tmp') {
|
|
$tr .= "<td class=rowfollow>{$arr1['expired_at']}</td>";
|
|
$tr .= "<td class=rowfollow>{$arr1['created_at']}</td>";
|
|
}
|
|
$tr .= "</tr>";
|
|
print($tr);
|
|
}
|
|
}
|
|
print("</table>");
|
|
print("</td></tr></table>$pagertop");
|
|
}
|
|
|
|
}
|
|
stdfoot();
|
|
die;
|
|
?>
|