edit_ustats.pl
Copying Source is Forbidden
1442 lines of code
1
#!/usr/local/bin/perl
2
3
# must have's!
4
use strict;
5
use warnings;
6
use CGI::Carp qw(fatalsToBrowser);
7
use HTML::Restrict;
8
use URI::Escape;
9
use JSON;
10
11
use lib "/var/www/html/Pm";
12
13
use Bc_chef qw(cookie_get cookie_delete);
14
use Bc_sql qw(get_constant
15
user_exists
16
get_site_name
17
get_country_id
18
get_city_id
19
get_error_message
20
sql_execute
21
get_security_asWord
22
get_users
23
get_users_forDropdowns
24
ban_exists
25
$QUERY_PAGE
26
$QUERY_UID
27
$LOGGEDIN
28
validate_new_user_data
29
is_debuggerAllowed
30
31
$DB
32
);
33
use Bc_misc qw(
34
get_param
35
new_id
36
pluralize
37
shorten_str
38
commafied
39
);
40
41
use Date qw(get_month expand_date get_today);
42
use Html qw(get_config_forDropdowns
43
dropdown
44
img
45
display_city_names_asDropdown
46
display_country_names_asDropdown
47
header
48
pre_html_header
49
);
50
use Html2 qw(
51
center_content
52
tag
53
br
54
hr
55
embolden
56
italicize
57
navdd
58
small
59
);
60
use Redir qw(notice_redir error_redir);
61
use User qw(
62
isUserAdmin
63
isUserModerator
64
isUserSuperAdmin
65
isUserBeta
66
isFriend
67
get_user_stats
68
get_user_stat
69
get_user_friends
70
get_user_blocked_users
71
set_user_stats
72
check_user_stats
73
);
74
use Security;
75
76
# the following vars are values used by $update
77
my $uUPDATE = 1;
78
my $uCC = 2;
79
my $uDEL_FRIEND = 3;
80
my $uDEL_BLOCKED = 4;
81
my $uBAN = 5;
82
my $uUNBAN = 6;
83
my $uDEL_USER = 7;
84
my $uUNDEL_USER = 8;
85
my $uADD_FRIEND = 9;
86
my $uADD_BLOCKED = 10;
87
# end vars for $update
88
89
my $TABLE_BORDER = 0;
90
my $DEBUG = 0;
91
if (not user_exists($LOGGEDIN) or banned($LOGGEDIN) or not isUserModerator($LOGGEDIN)) {
92
my $msg = "Access Denied";
93
if ($DEBUG) { $msg .= " (edit_ustats.pl)"; }
94
print error_redir("/", $msg);
95
96
exit 1;
97
}
98
99
my $tab = get_param("t");
100
if ($tab ne "bio" and
101
$tab ne "vit" and
102
$tab ne "loc" and
103
$tab ne "desc" and
104
$tab ne "other" and
105
$tab ne "sub" and
106
$tab ne "friends" and
107
$tab ne "blocks" and
108
$tab ne "coins") {
109
$tab = "bio";
110
}
111
my $uid = get_param($QUERY_UID);
112
my $stats = \{};
113
if (user_exists($uid) and not isUserSuperAdmin($uid)) {
114
$stats = {get_user_stats($uid)};
115
} # end if (user_exists($uid) and not isUserSuperAdmin($uid))
116
else {
117
print cookie_delete("e");
118
print pre_html_header();
119
print header("User Editor", "?nobg_img=1&nogrid=1", 0, "setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");", "", "style=\"width: 100vw; padding: 0;\" class=flexboxed");
120
121
{ my %centered;
122
$centered{tag} = "div";
123
$centered{class} = "centered";
124
$centered{innerHTML} = "";
125
126
{ my %container;
127
$container{tag} = "div";
128
$container{class} = "center";
129
$container{innerHTML} = "";
130
131
{ my %usernav;
132
$usernav{tag} = "div";
133
$usernav{class} = "padded center";
134
$usernav{innerHTML} = "";
135
136
my $framed = get_param("framed");
137
138
{ my %img;
139
$img{tag} = "img";
140
if ($framed)
141
{ $img{src} = "/img.pl?i=site/arrow_prev.png&s=i"; } else
142
{ $img{src} = "/img.pl?i=site/friends.png&s=i"; }
143
$img{style} = "margin-right: 10px;";
144
145
$usernav{innerHTML} .= tag(\%img);
146
} # end img
147
148
$usernav{innerHTML} .= "Select a User";
149
150
if (not $framed) {
151
$usernav{class} .= " purple-panel";
152
{ my %js;
153
$js{tag} = "script";
154
$js{defer} = 1;
155
$js{innerHTML} = "function gotoUser() {\n" .
156
" let s = document.getElementById(\"userdd\");\n" .
157
" document.location=\"?$QUERY_UID=\" + s.value;\n" .
158
"}\n" .
159
"\n" .
160
"\n";
161
162
$usernav{innerHTML} .= tag(\%js);
163
} # end js
164
165
$usernav{innerHTML} .= br;
166
167
# valid keys for <i>$attr:</i>
168
# {list} (array ref) (each element is a name=value pair)
169
# {mini} (1 or 0) (make all buttons and dd as tiny as possible)
170
# {debug} (1 or 0) (include debug content)
171
# {navclass} (css class name) (class for the navcontainer)
172
# {page} (1+) (the current page number)
173
# {lastpage} (1+) (the last page number)
174
175
# {endlabel} (an image/text) (icon/text for end button)
176
# {prevlabel} (an image/text) (icon/text for prev button)
177
# {nextlabel} (an image/text) (icon/text for next button)
178
# {homelabel} (an image/text) (icon/text for home button)
179
# {pickonelabel} (text) (a label for the pickone option)
180
181
# {endclick} (javascript) (js for when end is clicked)
182
# {prevclick} (javascript) (js for when prev is clicked)
183
# {nextclick} (javascript) (js for when next is clicked)
184
# {homeclick} (javascript) (js for when home is clicked)
185
# {reloadclick} (javascript) (js for when reload is clicked)
186
# {pagechange} (javascript) (js for when page input changes)
187
188
# {pickoneclass} (css class name) (class for the pickone option)
189
# {containerclass} (css class name) (class for the encapsulating container)
190
191
# {dropdownicon} (a url) (include an "icon" for the SELECT element)
192
# {disablepickone} (1 or 0) (toggle 'pick one' option)
193
# {inline} (1 or 0) (toggles move dropbox to left of nav)
194
195
# {html attribute} (any html attr) (any html attr. eg: onchange)*
196
197
{ my %attr;
198
my @list = get_users_forDropdowns();
199
$attr{list} = \@list;
200
$attr{mini} = 1;
201
$attr{onchange} = "gotoUser();";
202
$attr{id} = "userdd";
203
$attr{title} = $attr{onchange};
204
205
$usernav{innerHTML} .= navdd(\%attr);
206
} # end attr
207
} # end if framed
208
else {
209
$usernav{class} .= " yellow-panel";
210
} # end else of if framed
211
212
$container{innerHTML} .= tag(\%usernav);
213
} # end user nav
214
215
if ($uid and isUserSuperAdmin($uid)) {
216
$container{innerHTML} .= br;
217
218
my %super;
219
$super{tag} = "div";
220
$super{id} = "MSGS";
221
$super{style} = "margin-top: 5px;";
222
$super{class} = "error";
223
$super{innerHTML} = "Super Admins Cannot be Modified";
224
225
$container{innerHTML} .= tag(\%super);
226
} # end of if user_exists($uid) and isUserSuperAdmin($uid)
227
228
$centered{innerHTML} .= tag(\%container);
229
} # end container
230
231
print tag(\%centered);
232
} # end centered
233
234
print "</body></html>\n";
235
exit 1;
236
} # end else of if (user_exists($uid) and not isUserSuperAdmin($uid))
237
238
###########################################################################################################################################
239
### IF WE GET HERE, THERE WERE NO SECURITY ISSUES #########################################################################################
240
###########################################################################################################################################
241
242
my $e = cookie_get("e");
243
my $n = cookie_get("n");
244
my $rv = cookie_delete("e") . cookie_delete("n");
245
246
my $update = get_param("u");
247
if ($update) {
248
my $update_msg = "";
249
my $error = 0;
250
my $notice = 0;
251
if ($update eq $uUPDATE) {
252
# will update only the user's stats data
253
# the other inputs, refer to data stored in
254
# other tables. these will be dealt with
255
# "elsif"where
256
my $nickname = get_param("unickname", 1);
257
my $email = get_param("uemail", 1);
258
my $showbday = get_param("ushowbday");
259
my $doby = get_param("udoby");
260
my $dobm = get_param("udobm");
261
my $dobd = get_param("udobd");
262
my $orientation = get_param("uorientation");
263
my $gender = get_param("ugender");
264
my $seeking_gender = get_param("useeking_gender");
265
my $seeking = get_param("useeking");
266
my $race = get_param("urace");
267
my $eyes = get_param("ueyes");
268
my $hair = get_param("uhair");
269
my $height = get_param("uheight");
270
my $weight = get_param("uweight");
271
my $erection = get_param("uerection");
272
my $bust = get_param("ubust");
273
my $body = get_param("ubody");
274
my $wheels = get_param("uwheels");
275
my $canhost = get_param("ucan_host");
276
my $smoker = get_param("usmoker");
277
my $drinker = get_param("udrinker");
278
my $drugs = get_param("udrugs");
279
my $city = get_param("ucity");
280
my $country = get_param("ucountry");
281
my $desc = get_param("udesc");
282
283
my $nohtml = HTML::Restrict->new();
284
my $desc_processed = $nohtml->process($desc);
285
if ($desc_processed ne $e) { $desc = $desc_processed; }
286
287
my $security = get_param("usecurity");
288
my $subscriber = get_param("usub");
289
my $subscription_type = get_param("usubtype");
290
291
if (%$stats) {
292
# change the appropriate data (pw, and some others, will not be changed)
293
$stats->{nickname} = $nickname;
294
$stats->{email} = $email;
295
if ($showbday eq "on") { $stats->{showbday} = 2; } else { $stats->{showbday} = 1; }
296
$stats->{dob} = "$doby-$dobm-$dobd";
297
$stats->{orientation} = $orientation;
298
$stats->{gender} = $gender;
299
$stats->{seeking} = $seeking;
300
$stats->{seeking_gender} = $seeking_gender;
301
$stats->{race} = $race;
302
$stats->{eye_clr} = $eyes;
303
$stats->{hair_clr} = $hair;
304
$stats->{height} = $height;
305
$stats->{weight} = $weight;
306
$stats->{erection} = $erection;
307
$stats->{bust} = $bust;
308
$stats->{body} = $body;
309
$stats->{wheels} = $wheels;
310
$stats->{can_host} = $canhost;
311
$stats->{smoker} = $smoker;
312
$stats->{drinker} = $drinker;
313
$stats->{drugs} = $drugs;
314
$stats->{location} = "$country-$city";
315
$stats->{description} = $desc;
316
317
$stats->{security} = $security;
318
$stats->{subscriber} = $subscriber;
319
$stats->{subscription_type} = $subscription_type;
320
321
if ($DEBUG) {
322
print pre_html_header() . header("User Editor", "?nobg_img=1", 0, "setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");", "", "");
323
print "new stats<hr>\n";
324
foreach my $key (sort keys %$stats) {
325
print "$key -> $stats->{$key}<br>\n";
326
}
327
print "<hr align=left width=123>\n";
328
329
my $statscheck = validate_new_user_data($stats);
330
331
if ($statscheck < 0) {
332
print "user stats look dirty: $statscheck<br>\n";
333
} elsif ($statscheck eq 0) {
334
print "user stats check failed!<br>\n";
335
} else {
336
print "user stats look clean<br>\n";
337
}
338
} else {
339
my $status = set_user_stats($stats);
340
if ($status eq 1) {
341
$notice = 1;
342
if ($DEBUG)
343
{ $update_msg = "$uid stats updated"; } else
344
{ $update_msg = "stats updated"; }
345
} else {
346
$error = 1;
347
$update_msg = get_error_message($status);
348
}
349
}
350
} else {
351
print pre_html_header() . header("User Editor", "?nobg_img=1", 0, "setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");", "", "");
352
print "$uid: no stats\n";
353
354
exit 1;
355
}
356
} elsif ($update eq $uCC) {
357
# updates ccinfo (be it to delete the data, or alter it.)
358
$error = 1;
359
$update_msg = "process under development";
360
} elsif ($update eq $uDEL_FRIEND) {
361
# removes friends
362
$error = 1;
363
$update_msg = "process under development";
364
} elsif ($update eq $uDEL_BLOCKED) {
365
# removes blocked users
366
$error = 1;
367
$update_msg = "process under development";
368
} elsif ($update eq $uBAN) {
369
# bans UID's
370
my $why = get_param("why");
371
372
if ($DEBUG) {
373
print pre_html_header() . header("User Editor", "?nobg_img=1", 0, "setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");", "", "");
374
my $newBID = new_uid();
375
my $banTableSql = "insert into bans values (" . $DB->quote($newBID) . ", " . $DB->quote($uid) . ", " . $DB->quote($LOGGEDIN) . ", " . $DB->quote(get_today("db", 0)) . ", " . $DB->quote($why) . ")";
376
my $userTableSql = "update users set banned = '2' where ID = " . $DB->quote($uid);
377
378
print "banning: $uid<br>\n";
379
if (user_exists($uid)) { print "user exists<br>\n"; } else { print "user does not exist<br>\n"; }
380
if (banned($uid)) {
381
print "user is already banned<br>\n";
382
print "update ignored<br>\n";
383
} else {
384
print "user is not currently banned<br>\n";
385
print "so now we can: <br>\n";
386
print "<b>" . $banTableSql . "</b><br>\n";
387
print "<b>" . $userTableSql . "</b><br>\n";
388
}
389
} else {
390
my $newBID = new_id(10); while (ban_exists($newBID)) { $newBID = new_id(10); }
391
my $banTableSql = "insert into bans (BID, ByID, dob, why) values (" . $DB->quote($uid) . ", " . $DB->quote($LOGGEDIN) . ", " . $DB->quote(get_today("db", 0)) . ", " . $DB->quote($why) . ")";
392
my $userTableSql = "update users set banned = '2' where ID = " . $DB->quote($uid);
393
394
if (banned($uid)) {
395
$error = 1;
396
if ($DEBUG)
397
{ $update_msg = "$uid already banned"; } else
398
{ $update_msg = "already banned"; }
399
} elsif (sql_execute($userTableSql, "edit_ustats.pl - uid already banned")) {
400
my $bResults = sql_execute($banTableSql, "edit_ustats.pl - banning uid");
401
402
if ($bResults) {
403
$notice = 1;
404
if ($DEBUG)
405
{ $update_msg = "$uid is now banned"; } else
406
{ $update_msg = "Banned"; }
407
} else {
408
$error = 1;
409
if ($DEBUG)
410
{ $update_msg = "ban failed: $uid"; } else
411
{ $update_msg = "ban failed"; }
412
}
413
} else {
414
$error = 1;
415
if ($DEBUG)
416
{ $update_msg = "ban failed (db): $uid"; } else
417
{ $update_msg = "ban failed (db)"; }
418
}
419
}
420
} elsif ($update eq $uUNBAN) {
421
# unbans UID's
422
423
if ($DEBUG) {
424
print pre_html_header() . header("User Editor", "?nobg_img=1", 0, "setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");", "", "");
425
my $banTableSql = "delete from bans where BID = " . $DB->quote($uid);
426
my $userTableSql = "update users set banned = '1' where ID = " . $DB->quote($uid);
427
428
print "unbanning: $uid<br>\n";
429
if (user_exists($uid)) { print "user exists<br>\n"; } else { print "user does not exist<br>\n"; }
430
if (banned($uid)) {
431
print "user is banned<br>\n";
432
print "so now we can: <br>\n";
433
print "<b>" . $banTableSql . "</b><br>\n";
434
print "<b>" . $userTableSql . "</b><br>\n";
435
} else {
436
print "user is not currently banned<br>\n";
437
print "update ignored<br>\n";
438
}
439
440
} else {
441
442
my $banTableSql = "delete from bans where BID = " . $DB->quote($uid);
443
my $userTableSql = "update users set banned = '1' where ID = " . $DB->quote($uid);
444
445
if (not banned($uid)) {
446
$error = 1;
447
$update_msg = "$uid not already banned!";
448
} elsif (sql_execute($userTableSql, "edit_ustats.pl - updating user table")) {
449
if (sql_execute($banTableSql, "edit_ustats.pl - deleting from bans table")) {
450
$notice = 1;
451
if ($DEBUG)
452
{ $update_msg = "$uid unbanned"; } else
453
{ $update_msg = "Unbanned"; }
454
} else {
455
$error = 1;
456
if ($DEBUG)
457
{ $update_msg = "unban failed: $uid"; } else
458
{ $update_msg = "unban failed"; }
459
}
460
} else {
461
$error = 1;
462
$update_msg = "$uid does not exist!";
463
}
464
}
465
} elsif ($update eq $uDEL_USER) {
466
# delete accounts
467
468
# it's not enough to delete just the user from the users table
469
# must also delete all references to the user in almost all other tables
470
# tables to update:
471
# theme purchases
472
# inbox
473
# from friends lists (both theirs, and others)
474
# images
475
# gifts
476
# points (aka coins)
477
# profile_views
478
# others?
479
480
my $sql = "delete from users where ID=" . $DB->quote($uid);
481
my $themesql = "delete from theme_purchases where UID=" . $DB->quote($uid);
482
my $inboxsql = "delete from messages where to_ID=" . $DB->quote($uid);
483
my $friendsql = "delete from friends where UID=" . $DB->quote($uid) . " or FID=" . $DB->quote($uid);
484
my $imagesql = "delete from images where UID=" . $DB->quote($uid);
485
my $giftsql = "delete from purchased_gifts where UID=" . $DB->quote($uid);
486
my $pointssql = "delete from coins where ID=" . $DB->quote($uid);
487
my $pvsql = "delete from profile_views where UID=" . $DB->quote($uid);
488
489
if (user_exists($uid)) {
490
my $confirmed = get_param("c");
491
492
if (not $confirmed) {
493
{ my %form;
494
$form{tag} = "form";
495
$form{class} = "centered";
496
$form{style} = "height: 98vh; width: 98vw;";
497
$form{method} = "post";
498
$form{action} = "/edit_ustats.pl";
499
$form{innerHTML} = "";
500
501
{ my %query;
502
$query{tag} = "div";
503
$query{class} = "center";
504
$query{innerHTML} = "";
505
506
{ my %div;
507
$div{tag} = "div";
508
$div{class} = "yellow-panel center block";
509
$div{style} = "margin-bottom: 5px;";
510
$div{innerHTML} = "About to Delete " . br . italicize(shorten_str(get_user_stat($uid, "nickname"), 20));
511
512
$query{innerHTML} .= tag(\%div);
513
}
514
515
{ my %input;
516
$input{tag} = "input";
517
$input{type} = "hidden";
518
$input{name} = "u";
519
$input{value} = $uDEL_USER;
520
521
$query{innerHTML} .= tag(\%input);
522
} # end hidden delete user input
523
524
{ my %input;
525
$input{tag} = "input";
526
$input{type} = "hidden";
527
$input{name} = $QUERY_UID;
528
$input{value} = $uid;
529
530
$query{innerHTML} .= tag(\%input);
531
} # end hidden uid input
532
533
{ my %button;
534
$button{tag} = "button";
535
$button{class} = "green";
536
$button{name} = "c";
537
$button{value} = "1";
538
$button{innerHTML} = "Proceed";
539
540
$query{innerHTML} .= tag(\%button);
541
} # end proceed button
542
543
{ my %button;
544
$button{tag} = "button";
545
$button{class} = "red";
546
$button{innerHTML} = "Cancel";
547
548
$query{innerHTML} .= tag(\%button);
549
} # end cancel button
550
551
$form{innerHTML} .= tag(\%query);
552
} # end query div
553
554
print pre_html_header() . header("User Editor - Confirm Delete", "?nobg_img=1", 0, "setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");", "", "");
555
print tag(\%form);
556
557
exit 1;
558
} # end confirm form
559
} else {
560
if (sql_execute($sql, "edit_ustats.pl - deleting user")) {
561
sql_execute($themesql, "edit ustats, themesql");
562
sql_execute($inboxsql, "edit ustats, inboxsql");
563
sql_execute($friendsql, "edit ustats, friendsql");
564
sql_execute($imagesql, "edit ustats, imagesql");
565
sql_execute($giftsql, "edit ustats, giftsql");
566
sql_execute($pointssql, "edit ustats, pointssql");
567
sql_execute($pvsql, "edit ustats, pvsql");
568
569
$notice = 1;
570
$update_msg = "<div class='centered' style='height: 98vh;'><div class=red-panel>$uid is now deled - reloading...</div></div>";
571
print pre_html_header() . header("User Editor", "?nobg_img=1", 0, "setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");", "", "");
572
print "<script defer async>\n";
573
print " var url = \"/?" . $QUERY_PAGE . "=" . get_constant("ADMIN_PAGE") . "&" . get_constant("QUERY_ADMIN_PAGE") . "=" . get_constant("ADMIN_USER_EDITOR_PAGE") . "\";";
574
print " console_msg(url);\n";
575
print " top.document.location = url;\n";
576
print "</script>\n";
577
print $update_msg;
578
579
exit 1;
580
} else {
581
$error = 1;
582
$update_msg = "$uid failed to delete";
583
}
584
}
585
} else {
586
$error = 1;
587
$update_msg = "$uid does not exist";
588
}
589
}
590
591
if (not $DEBUG) {
592
if ($notice) {
593
print notice_redir("?$QUERY_UID=$uid", $update_msg);
594
} elsif ($error) {
595
print error_redir("?$QUERY_UID=$uid", $update_msg);
596
} else {
597
print error_redir("?$QUERY_UID=$uid", "some other error occured");
598
}
599
}
600
601
exit 1;
602
}
603
604
###########################################################################################################################################
605
### IF WE GET HERE, THEN WE DISPLAY THE EDITOR ############################################################################################
606
###########################################################################################################################################
607
608
if (ref $stats eq "HASH") {
609
$rv .= pre_html_header();
610
$rv .= header(
611
"User Editor",
612
"?nobg_img=1",
613
"?let=$tab",
614
"setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");",
615
"",
616
"style='display: flex;'"
617
);
618
619
{ my %form;
620
$form{tag} = "form";
621
$form{id} = "f";
622
$form{method} = "post";
623
$form{action} = "/edit_ustats.pl";
624
$form{innerHTML} = "<table border=$TABLE_BORDER cellpadding=0 cellspacing=0 class=subnavbar width=100%><tr><td>";
625
626
{ my %button;
627
$button{tag} = "button";
628
$button{class} = "yellow";
629
$button{onclick} = "document.body.innerHTML=\"<div class='centered' style='height: 100%;'><font class=notice>Reloading stats...</font></div>\"; document.location.reload(); return false;";
630
$button{title} = "Reload Stats";
631
$button{innerHTML} = "";
632
633
{ my %img;
634
$img{tag} = "img";
635
$img{src} = "/img.pl?i=site/reload.png&s=u";
636
637
$button{innerHTML} .= tag(\%img);
638
}
639
640
$form{innerHTML} .= tag(\%button);
641
} # end reload button
642
$form{innerHTML} .= "</td><td align=center width=100% nowrap>";
643
if ($e or $n) {
644
if ($n) { $n = shorten_str($n, 24); }
645
if ($e) { $e = shorten_str($e, 24); }
646
$form{innerHTML} .= "<table border=$TABLE_BORDER cellpadding=0 cellspacing=0><tr><td>";
647
648
{ my %div;
649
$div{tag} = "div";
650
$div{id} = "MSGS";
651
652
if ($n) {
653
$div{class} = "notice";
654
$div{innerHTML} = $n;
655
} elsif ($e) {
656
$div{class} = "error";
657
$div{innerHTML} = $e;
658
} else {
659
$div{class} = "red-panel";
660
$div{innerHTML} = "no error/notice data";
661
}
662
663
$form{innerHTML} .= tag(\%div);
664
} # end MSGS div
665
$form{innerHTML} .= "</td></tr></table>\n";
666
} # end if $e or $n
667
$form{innerHTML} .= " </td><td nowrap>\n";
668
669
# the next bit displays a "ban" or "unban" button, if the selected
670
# user nickname is not "JamRoll"
671
if ($stats->{ID} ne get_constant("SITE_ADMIN")) {
672
if ($stats->{banned} eq 1) {
673
{ my %js;
674
$js{tag} = "script";
675
$js{async} = 1;
676
$js{defer} = 1;
677
678
$js{innerHTML} = "\n";
679
$js{innerHTML} .= "function ban(f) {\n";
680
$js{innerHTML} .= " // f = form (pass in as 'this'\n";
681
$js{innerHTML} .= " var r = prompt('why ban this soul?', '(no reason given)');\n";
682
$js{innerHTML} .= " if (r && r != \"\") {\n";
683
$js{innerHTML} .= " document.getElementById('why').value = r;\n";
684
$js{innerHTML} .= " document.getElementById('updateinput').value = '" . $uBAN . "';\n";
685
$js{innerHTML} .= " f.submit();\n";
686
$js{innerHTML} .= " }\n";
687
$js{innerHTML} .= "}\n";
688
if (isUserAdmin()) {
689
$js{innerHTML} .= "\n";
690
$js{innerHTML} .= "function dele(f) {\n";
691
$js{innerHTML} .= " // f = form (pass in as 'this'\n";
692
$js{innerHTML} .= " document.getElementById('updateinput').value = '" . $uDEL_USER . "';\n";
693
$js{innerHTML} .= " f.submit();\n";
694
$js{innerHTML} .= "}\n";
695
$js{innerHTML} .= "\n";
696
$js{innerHTML} .= "function save(f) {\n";
697
$js{innerHTML} .= " // f = form (pass in as 'this'\n";
698
$js{innerHTML} .= " document.getElementById('updateinput').value = '" . $uUPDATE . "';\n";
699
$js{innerHTML} .= " f.submit();\n";
700
$js{innerHTML} .= "}\n";
701
}
702
703
$form{innerHTML} .= tag(\%js);
704
} # end js
705
706
{ my %banbutton;
707
$banbutton{tag} = "button";
708
$banbutton{type} = "button";
709
$banbutton{class} = "blue";
710
$banbutton{onclick} = "ban(document.getElementById('f')); return false;";
711
$banbutton{title} = "Ban User";
712
$banbutton{innerHTML} = img("i=site/admin/lock_unlocked.png&s=u", "", "", "height=14", "", 0);
713
714
$form{innerHTML} .= tag(\%banbutton);
715
} # end ban button
716
} else {
717
{ my %unbanbutton;
718
$unbanbutton{tag} = "button";
719
$unbanbutton{type} = "button";
720
$unbanbutton{class} = "blue";
721
$unbanbutton{onclick} = "document.getElementById('updateinput').value = '" . $uUNBAN . "'; document.getElementById('f').submit(); return false;";
722
$unbanbutton{title} = "Unban User";
723
$unbanbutton{innerHTML} = img("i=site/admin/lock_locked.png&s=u", "", "", "", "", 0);
724
725
$form{innerHTML} .= tag(\%unbanbutton);
726
}
727
}
728
729
if (isUserAdmin()) {
730
$form{innerHTML} .= " </td><td class=nowrap width=1>\n";
731
$form{innerHTML} .= " | \n";
732
$form{innerHTML} .= " </td><td nowrap>\n";
733
}
734
}
735
$form{innerHTML} .= " <input id=updateinput type=hidden name=u value=1>\n";
736
$form{innerHTML} .= " <input id=why type=hidden name=why value=\"(no reason given)\">\n";
737
$form{innerHTML} .= " <input type=hidden id=$QUERY_UID name=$QUERY_UID value=\"$uid\">\n";
738
if (isUserAdmin()) {
739
{ my %savebutton;
740
$savebutton{tag} = "button";
741
$savebutton{type} = "submit";
742
$savebutton{class} = "green";
743
$savebutton{title} = "Save Changes";
744
$savebutton{onclick} = "save(document.getElementById('f')); return false;";
745
$savebutton{innerHTML} = img("i=blue/diskette.png&s=u", "", "", "", "", 0);
746
747
$form{innerHTML} .= tag(\%savebutton);
748
}
749
}
750
751
if ($stats->{ID} ne get_constant("SITE_ADMIN")) {
752
$form{innerHTML} .= " </td><td class=nowrap width=1>\n";
753
if (isUserAdmin()) {
754
$form{innerHTML} .= " | \n";
755
$form{innerHTML} .= " </td><td width=1 nowrap>\n";
756
{ my %delbutton;
757
$delbutton{tag} = "button";
758
$delbutton{type} = "button";
759
$delbutton{class} = "red";
760
$delbutton{onclick} = "dele(document.getElementById('f')); return false;";
761
$delbutton{title} = "Delete User";
762
$delbutton{innerHTML} = img("i=red/cancel.png&s=u", "", "", "", "", 0);
763
764
$form{innerHTML} .= tag(\%delbutton);
765
}
766
}
767
}
768
$form{innerHTML} .= " </td></tr></table>\n";
769
$form{innerHTML} .= "</td></tr><tr><td class=spacery>\n";
770
$form{innerHTML} .= "</td></tr><tr><td>\n";
771
{ my %div;
772
$div{tag} = "div";
773
$div{innerHTML} = "";
774
775
$div{innerHTML} .= " <table border=$TABLE_BORDER cellpadding=0 cellspacing=0 style='margin: auto;'><tr><td align=center colspan=5>\n";
776
{ my %input;
777
$input{tag} = "input";
778
$input{style} = "font-size: 14pt; text-align: center; margin-bottom: 0;";
779
$input{name} = "unickname";
780
$input{title} = "Edit Nickname";
781
$input{placeholder} = "Billy-Joe-Bob";
782
$input{value} = uri_unescape($stats->{nickname});
783
$input{size} = "25";
784
if (not isUserAdmin()) { $input{disabled} = 1; }
785
786
$div{innerHTML} .= tag(\%input);
787
} # end nickname input
788
$div{innerHTML} .= " </td></tr><tr><td class=nowrap width=1>\n";
789
{ my %seclevlabel;
790
$seclevlabel{tag} = "small";
791
$seclevlabel{innerHTML} = "Security Level";
792
if (not isUserAdmin()) { $seclevlabel{innerHTML} .= ":"; }
793
$seclevlabel{innerHTML} .= " ";
794
795
$div{innerHTML} .= tag(\%seclevlabel);
796
} # end seclev label
797
$div{innerHTML} .= " </td><td nowrap width=1>\n";
798
my @cfgData = get_config_forDropdowns("sec_levels");
799
if (isUserAdmin($LOGGEDIN)) {
800
$div{innerHTML} .= dropdown("usecurity", "", $stats->{security}, "", "", " ", "name=usecurity title='Security Level' style='width: 100px;'", "\n", \@cfgData);
801
} else {
802
{ my %seclevhidden;
803
$seclevhidden{tag} = "input";
804
$seclevhidden{type} = "hidden";
805
$seclevhidden{name} = "usecurity";
806
$seclevhidden{value} = $stats->{security};
807
808
$div{innerHTML} .= tag(\%seclevhidden);
809
}
810
811
$div{innerHTML} .= small(embolden(get_security_asWord($stats->{security})));
812
}
813
$div{innerHTML} .= " <td></td><td align=right width=1 style='white-space: nowrap;'>\n";
814
$div{innerHTML} .= small("UID: ");
815
$div{innerHTML} .= "</td><td width=1 nowrap>\n";
816
$div{innerHTML} .= small(embolden($stats->{ID}));
817
$div{innerHTML} .= " </td></tr></table>\n";
818
if (isUserAdmin()) {
819
$div{innerHTML} .= " <table border=$TABLE_BORDER cellpadding=0 cellspacing=0 style='margin: 5px auto;'><tr><td>Email ";
820
{ my %email;
821
$email{tag} = "input";
822
$email{type} = "email";
823
$email{name} = "uemail";
824
$email{value} = uri_unescape($stats->{email});
825
$email{size} = "25";
826
827
$div{innerHTML} .= tag(\%email);
828
829
}
830
$div{innerHTML} .= " </td><td>\n";
831
{ my %button;
832
$button{tag} = "button";
833
$button{type} = "button";
834
$button{class} = "green";
835
$button{onclick} = "document.location.href='/sendemail.pl?$QUERY_UID=$stats->{ID}';";
836
$button{title} = "Send Message";
837
$button{innerHTML} = "";
838
839
{ my %innerimg;
840
$innerimg{tag} = "img";
841
$innerimg{src} = "/img.pl?i=site/msg.png&s=u&cid=" . new_id();
842
$innerimg{style} = "margin-bottom: 2px;";
843
844
$button{innerHTML} .= tag(\%innerimg);
845
} # end image
846
847
$div{innerHTML} .= tag(\%button);
848
} # end send msg button
849
$div{innerHTML} .= " </td></tr></table>\n";
850
} # end if isUserAdmin()
851
852
$form{innerHTML} .= tag(\%div);
853
} # end nick and email div
854
$form{innerHTML} .= "</td></tr><tr><td class=spacery>\n";
855
856
###################################################################################################################################
857
### NAVIGATION ####################################################################################################################
858
859
$form{innerHTML} .= "</td></tr><tr><td align=center>\n";
860
{ my %editnavbar;
861
$editnavbar{tag} = "div";
862
$editnavbar{class} = "ueditor_navbar padded subnavbar";
863
$editnavbar{style} = "margin: auto; margin-bottom: 8px; height: ";
864
$editnavbar{innerHTML} = "";
865
866
{ my %js;
867
$js{tag} = "script";
868
$js{defer} = 1;
869
$js{innerHTML} = "lastElementToggled = '$tab'; console_msg(lastElementToggled);";
870
871
$editnavbar{innerHTML} .= tag(\%js);
872
}
873
874
if (isUserAdmin()) {
875
$editnavbar{style} .= "50px;";
876
{ my %a; # bio
877
$a{tag} = "a";
878
$a{onclick} = "toggle_display_element('bio', 'biolink'); return false;";
879
$a{id} = "biolink";
880
$a{innerHTML} = "";
881
882
{ my %div;
883
$div{tag} = "div";
884
if ($tab eq "bio") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
885
$div{class} .= " small";
886
$div{id} = "biodiv";
887
$div{style} = "height: 100%;";
888
$div{innerHTML} = "Bio";
889
890
$a{innerHTML} .= tag(\%div);
891
}
892
893
$editnavbar{innerHTML} .= tag(\%a);
894
} # end bio
895
896
{ my %a; # vitals
897
$a{tag} = "a";
898
$a{onclick} = "toggle_display_element('vit', 'vitlink'); return false;";
899
$a{id} = "vitlink";
900
$a{innerHTML} = "";
901
902
{ my %div;
903
$div{tag} = "div";
904
if ($tab eq "vit") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
905
$div{class} .= " small";
906
$div{id} = "vitdiv";
907
$div{style} = "height: 100%;";
908
$div{innerHTML} = "Vitals";
909
910
$a{innerHTML} .= tag(\%div);
911
}
912
913
$editnavbar{innerHTML} .= tag(\%a);
914
} # end vitals
915
916
{ my %a; # location
917
$a{tag} = "a";
918
$a{onclick} = "toggle_display_element('loc', 'loclink'); return false;";
919
$a{id} = "loclink";
920
$a{innerHTML} = "";
921
922
{ my %div;
923
$div{tag} = "div";
924
if ($tab eq "loc") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
925
$div{class} .= " small";
926
$div{id} = "locdiv";
927
$div{style} = "height: 100%;";
928
$div{innerHTML} = "Location";
929
930
$a{innerHTML} .= tag(\%div);
931
}
932
933
$editnavbar{innerHTML} .= tag(\%a);
934
} # end location
935
936
} else {
937
$editnavbar{style} .= "27px; width: 50%;";
938
}
939
940
{ my %a; # description
941
$a{tag} = "a";
942
$a{onclick} = "toggle_display_element('desc', 'desclink'); return false;";
943
$a{id} = "desclink";
944
$a{innerHTML} = "";
945
946
{ my %div;
947
$div{tag} = "div";
948
if ($tab eq "desc") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
949
$div{class} .= " small";
950
$div{id} = "descdiv";
951
$div{style} = "height: 100%;";
952
$div{innerHTML} = "Description";
953
954
$a{innerHTML} .= tag(\%div);
955
}
956
957
$editnavbar{innerHTML} .= tag(\%a);
958
} # end description
959
960
{ my %a; # other
961
$a{tag} = "a";
962
$a{onclick} = "toggle_display_element('other', 'otherlink'); return false;";
963
$a{id} = "otherlink";
964
$a{innerHTML} = "";
965
966
{ my %div;
967
$div{tag} = "div";
968
if ($tab eq "other") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
969
$div{class} .= " small";
970
$div{id} = "otherdiv";
971
$div{style} = "height: 100%;";
972
$div{innerHTML} = "Other";
973
974
$a{innerHTML} .= tag(\%div);
975
}
976
977
$editnavbar{innerHTML} .= tag(\%a);
978
} # end other
979
980
if (isUserAdmin()) {
981
{ my %a; # subscription / membership
982
$a{tag} = "a";
983
$a{onclick} = "toggle_display_element('sub', 'sublink'); return false;";
984
$a{id} = "sublink";
985
$a{innerHTML} = "";
986
987
{ my %div;
988
$div{tag} = "div";
989
if ($tab eq "sub") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
990
$div{class} .= " small";
991
$div{id} = "subdiv";
992
$div{style} = "height: 100%;";
993
$div{innerHTML} = "Membership";
994
995
$a{innerHTML} .= tag(\%div);
996
}
997
998
$editnavbar{innerHTML} .= tag(\%a);
999
} # end subscription / membership
1000
1001
{ my %a; # friends
1002
$a{tag} = "a";
1003
$a{onclick} = "toggle_display_element('friends', 'friendslink'); return false;";
1004
$a{id} = "friendslink";
1005
$a{innerHTML} = "";
1006
1007
{ my %div;
1008
$div{tag} = "div";
1009
if ($tab eq "friends") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
1010
$div{class} .= " small";
1011
$div{id} = "friendsdiv";
1012
$div{style} = "height: 100%;";
1013
$div{innerHTML} = "Buddies";
1014
1015
$a{innerHTML} .= tag(\%div);
1016
}
1017
1018
$editnavbar{innerHTML} .= tag(\%a);
1019
} # end friends
1020
1021
{ my %a; # blocks
1022
$a{tag} = "a";
1023
$a{onclick} = "toggle_display_element('blocks', 'blockslink'); return false;";
1024
$a{id} = "blockslink";
1025
$a{innerHTML} = "";
1026
1027
{ my %div;
1028
$div{tag} = "div";
1029
if ($tab eq "blocks") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
1030
$div{class} .= " small";
1031
$div{id} = "blocksdiv";
1032
$div{style} = "height: 100%;";
1033
$div{innerHTML} = "Blocks";
1034
1035
$a{innerHTML} .= tag(\%div);
1036
}
1037
1038
$editnavbar{innerHTML} .= tag(\%a);
1039
} # end blocks
1040
} # end if isUserAdmin()
1041
1042
{ my %a; # coins
1043
$a{tag} = "a";
1044
$a{onclick} = "toggle_display_element('coins', 'coinslink'); return false;";
1045
$a{id} = "coinslink";
1046
$a{innerHTML} = "";
1047
1048
{ my %div;
1049
$div{tag} = "div";
1050
if ($tab eq "coins") { $div{class} = "navbutton_selected"; } else { $div{class} = "navbutton"; }
1051
$div{class} .= " small";
1052
$div{id} = "coinsdiv";
1053
$div{style} = "height: 100%;";
1054
$div{innerHTML} = "Coins";
1055
1056
$a{innerHTML} .= tag(\%div);
1057
}
1058
1059
$editnavbar{innerHTML} .= tag(\%a);
1060
} # end coins
1061
1062
$form{innerHTML} .= tag(\%editnavbar);
1063
} # end edit navbar
1064
1065
{
1066
my $mh = "178px";
1067
$form{innerHTML} .= "</td></tr><tr><td><div class='sunken' style='height: $mh; display: flex;'>";
1068
$form{innerHTML} .= "<div style='margin: auto auto;'>";
1069
}
1070
1071
###################################################################################################################################
1072
### THE DIVS ######################################################################################################################
1073
if (isUserAdmin()) {
1074
my @cfgData;
1075
1076
###################################################################################################################################
1077
{ my %div;
1078
$div{tag} = "div";
1079
$div{id} = "bio";
1080
$div{class} = "center";
1081
$div{style} = "display: ";
1082
if ($tab eq "bio") { $div{style} .= "block"; } else { $div{style} .= "none"; }
1083
1084
$div{innerHTML} .= " <table border=$TABLE_BORDER cellpadding=0 cellspacing=0 style='margin: auto;'><tr><td>";
1085
{ my %input;
1086
$input{tag} = "input";
1087
$input{type} = "checkbox";
1088
$input{name} = "ushowbday";
1089
if ($stats->{showbday} eq 2) { $input{checked} = 1; }
1090
1091
$div{innerHTML} .= tag(\%input);
1092
} # end show bday checkbox
1093
$div{innerHTML} .= "</td><td class=spacerx></td><td nowrap>\n";
1094
$div{innerHTML} .= " Show Birthday:\n";
1095
$div{innerHTML} .= " </td><td>\n";
1096
$div{innerHTML} .= " \n";
1097
$div{innerHTML} .= " </td><td>\n";
1098
1099
my @months = ();
1100
for (my $m = 1; $m < 13; $m++) {
1101
if ($m < 10) {
1102
push @months, "0$m=" . get_month($m);
1103
} else {
1104
push @months, "$m=" . get_month($m);
1105
}
1106
}
1107
$div{innerHTML} .= dropdown("udobm", "", get_user_stat($stats->{ID}, "dob", "dobm"), "", "", " ", "name=udobm style='width: 80px;'", "\n", \@months);
1108
$div{innerHTML} .= "</td><td>\n";
1109
1110
my @days = ();
1111
for (my $d = 1; $d <= 31; $d++) {
1112
if ($d < 10) {
1113
push @days, "0$d=$d";
1114
} else {
1115
push @days, "$d=$d";
1116
}
1117
}
1118
$div{innerHTML} .= dropdown("udobd", "", get_user_stat($stats->{ID}, "dob", "dobd"), "", "", " ", "name=udobd", "<br>\n", \@days);
1119
$div{innerHTML} .= "</td><td>\n";
1120
1121
my @years = ();
1122
for (my $y = get_today("y", 0) - 123; $y <= get_today("y", 0) - 18; $y++) {
1123
push @years, "$y=$y";
1124
}
1125
@years = reverse @years;
1126
$div{innerHTML} .= dropdown("udoby", "", get_user_stat($stats->{ID}, "dob", "doby"), "", "", " ", "name=udoby", "\n", \@years);
1127
$div{innerHTML} .= " </td></tr></table>\n";
1128
1129
@cfgData = get_config_forDropdowns("orientations");
1130
$div{innerHTML} .= dropdown("uorientation", "Sexuality: ", $stats->{orientation}, "", "", " ", "name=uorientation", " |\n", \@cfgData);
1131
@cfgData = get_config_forDropdowns("genders");
1132
$div{innerHTML} .= dropdown("ugender", "", $stats->{gender}, "", "", " ", "name=ugender", "<br>\n", \@cfgData);
1133
$div{innerHTML} .= br;
1134
$div{innerHTML} .= dropdown("useeking_gender", "Seeking a ", $stats->{seeking_gender}, "", "", " ", "name=useeking_gender style='margin-right: 0;'", "\n", \@cfgData);
1135
@cfgData = get_config_forDropdowns("styles");
1136
$div{innerHTML} .= dropdown("useeking", " for", $stats->{seeking}, "", "", " ", "name=useeking", "<br>\n", \@cfgData);
1137
$div{innerHTML} .= " </td></tr></table></td></tr></table>";
1138
1139
$form{innerHTML} .= tag(\%div);
1140
} # end bio div
1141
1142
###################################################################################################################################
1143
$form{innerHTML} .= " <div id=vit class=center style='display: ";
1144
if ($tab eq "vit") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1145
$form{innerHTML} .= ";'>\n";
1146
{ my %grid;
1147
$grid{tag} = "div";
1148
$grid{innerHTML} = "";
1149
1150
@cfgData = get_config_forDropdowns("races");
1151
$grid{innerHTML} .= dropdown("urace", "Race", $stats->{race}, "tiny", "", " ", "name=urace style='background: url(/images/site/ethnicity-tiny.png) no-repeat center;'", "", \@cfgData);
1152
@cfgData = get_config_forDropdowns("bodies");
1153
$grid{innerHTML} .= dropdown("ubody", "Body", $stats->{body}, "tiny", "", " ", "name=ubody style='background: url(/images/site/stickman.png) no-repeat center;'", "\n", \@cfgData);
1154
@cfgData = get_config_forDropdowns("eyes");
1155
$grid{innerHTML} .= dropdown("ueyes", "Eyes", $stats->{eye_clr}, "tiny", "", " ", "name=ueye style='background: url(/images/site/read.png) no-repeat center;'", "\n", \@cfgData);
1156
@cfgData = get_config_forDropdowns("hair");
1157
$grid{innerHTML} .= dropdown("uhair", "Hair", $stats->{hair_clr}, "tiny", "", " ", "name=uhair style='background: url(/images/site/haircolor.png) no-repeat center;'", "\n", \@cfgData);
1158
@cfgData = get_config_forDropdowns("yesno");
1159
$grid{innerHTML} .= dropdown("ucan_host", "Can Host", $stats->{can_host}, "tiny", "", " ", "name=ucan_host style='background: url(/images/site/home.png) no-repeat center;'", "\n", \@cfgData);
1160
@cfgData = get_config_forDropdowns("yesno");
1161
$grid{innerHTML} .= dropdown("usmoker", "Smoking OK", $stats->{smoker}, "tiny", "", " ", "name=usmoker style='background: url(/images/site/cigarette.png) no-repeat center;'", "\n", \@cfgData);
1162
@cfgData = get_config_forDropdowns("yesno");
1163
$grid{innerHTML} .= dropdown("udrinker", "Drinking OK", $stats->{drinker}, "tiny", "", " ", "name=udrinker style='background: url(/images/site/beer.png) no-repeat center;'", "\n", \@cfgData);
1164
@cfgData = get_config_forDropdowns("yesno");
1165
$grid{innerHTML} .= dropdown("udrugs", "Drugs OK", $stats->{drugs}, "tiny", "", " ", "name=udrugs style='background: url(/images/site/pothead.png) no-repeat center;'", "\n", \@cfgData);
1166
@cfgData = get_config_forDropdowns("yesno");
1167
$grid{innerHTML} .= dropdown("uwheels", "Wheels", $stats->{wheels}, "tiny", "", " ", "name=uwheels style='background: url(/images/site/car.png) no-repeat center;'", "\n", \@cfgData);
1168
@cfgData = get_config_forDropdowns("heights");
1169
$grid{innerHTML} .= dropdown("uheight", "Height", $stats->{height}, "tiny", "", " ", "name=uheight style='background: url(/images/site/height.png) no-repeat center;'", "\n", \@cfgData);
1170
@cfgData = get_config_forDropdowns("weights");
1171
$grid{innerHTML} .= dropdown("uweight", "Weight", $stats->{weight}, "tiny", "", " ", "name=uweight style='background: url(/images/site/weight-scale.png) no-repeat center;'", "\n", \@cfgData);
1172
if ($stats->{gender} eq 1) {
1173
@cfgData = get_config_forDropdowns("erections");
1174
$grid{innerHTML} .= dropdown("uerection", "Erection", $stats->{erection}, "tiny", "", " ", "name=uerection style='background: url(/images/site/hardon.png) no-repeat center;'", "\n", \@cfgData);
1175
$grid{innerHTML} .= " <input type=hidden name=ubust value=\"1\">\n";
1176
} else {
1177
@cfgData = get_config_forDropdowns("busts");
1178
$grid{innerHTML} .= dropdown("ubust", "Bust", $stats->{bust}, "tiny", "", " ", "name=ubust style='background: url(/images/site/bra.png) no-repeat center;'", "\n", \@cfgData);
1179
$grid{innerHTML} .= " <input type=hidden name=uerection value=\"1\">\n";
1180
}
1181
1182
$form{innerHTML} .= tag(\%grid);
1183
} # end vitals grid div
1184
$form{innerHTML} .= " </div>\n";
1185
1186
###################################################################################################################################
1187
$form{innerHTML} .= " <div id=loc class=center style='display: ";
1188
if ($tab eq "loc") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1189
$form{innerHTML} .= ";'>\n";
1190
$form{innerHTML} .= display_city_names_asDropdown(get_country_id($stats->{location}), get_city_id($stats->{location}), "ucity", "city:", "", " ", "<br>\n", 0);
1191
$form{innerHTML} .= display_country_names_asDropdown(get_country_id($stats->{location}), "ucountry onchange=\"populate_with_cities('ucountry', 'ucity', 0);\"", "country:", "", "", "");
1192
$form{innerHTML} .= " </div>\n\n";
1193
} # end if is user admin
1194
1195
###################################################################################################################################
1196
if (isUserAdmin()) {
1197
$form{innerHTML} .= " <div id=desc class=center style='display: ";
1198
if ($tab eq "desc") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1199
$form{innerHTML} .= ";'>\n";
1200
} else {
1201
$form{innerHTML} .= " <div id=desc class=center style='display: ";
1202
if ($tab eq "desc") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1203
$form{innerHTML} .= ";'>\n";
1204
}
1205
$form{innerHTML} .= " <textarea cols=40";
1206
if (not isUserAdmin()) { $form{innerHTML} .= " disabled"; }
1207
$form{innerHTML} .= " rows=6 name=udesc style=\"resize: none;\">" . uri_unescape($stats->{description}) . "</textarea>\n";
1208
$form{innerHTML} .= " </div>\n\n";
1209
1210
if (isUserAdmin()) {
1211
###################################################################################################################################
1212
$form{innerHTML} .= " <div id=sub class=center style='display: ";
1213
if ($tab eq "sub") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1214
$form{innerHTML} .= ";'>\n";
1215
my @cfgData = get_config_forDropdowns("yesno");
1216
$form{innerHTML} .= dropdown("usub", "subscriber", $stats->{subscriber}, "", "", " ", "", "", \@cfgData);
1217
$form{innerHTML} .= br;
1218
@cfgData = get_config_forDropdowns("membership_types");
1219
$form{innerHTML} .= dropdown("usubtype", "subscription type", $stats->{subscription_type}, "", "", " ", "", "", \@cfgData);
1220
$form{innerHTML} .= br;
1221
$form{innerHTML} .= " Member Since: " . embolden(expand_date($stats->{enrolled})) . br;
1222
$form{innerHTML} .= " Expires: ";
1223
if ($stats->{subscription_type} ne 4) {
1224
$form{innerHTML} .= embolden(expand_date($stats->{subscription_date}));
1225
} else {
1226
$form{innerHTML} .= embolden("NEVER!");
1227
}
1228
$form{innerHTML} .= br . " </div>\n\n";
1229
} # end if is user admin
1230
1231
###################################################################################################################################
1232
$form{innerHTML} .= " <div id=other class=center style='display: ";
1233
if ($tab eq "other") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1234
$form{innerHTML} .= ";'>\n";
1235
$form{innerHTML} .= " <button class=red type=button onclick=\"document.location.href='./sendresetpw.pl?$QUERY_UID=$uid';\">Reset Password</button><br>\n";
1236
if (isUserAdmin())
1237
{ $form{innerHTML} .= small("emails new password to " . italicize(uri_unescape($stats->{email}))) . br; } else
1238
{ $form{innerHTML} .= small("emails new password to this " . italicize("member")); }
1239
$form{innerHTML} .= " <hr>\n";
1240
$form{innerHTML} .= " last ip: <b>$stats->{lastip}</b>";
1241
my $geoloc_url = "http://ip-api.com/json/$stats->{lastip}";
1242
my $geoloc_curl = `curl -H "Accept: application/json" $geoloc_url`;
1243
my $loc = decode_json($geoloc_curl);
1244
1245
if (isUserAdmin()) {
1246
$form{innerHTML} .= " <input type=button value='Clear' class=yellow>" . br;
1247
1248
my %location; {
1249
$location{tag} = "div";
1250
$location{class} = "sunken inline padded-left-right small";
1251
if ($loc->{status} ne "fail") {
1252
$location{innerHTML} = $loc->{city} . ", " . $loc->{country};
1253
} else {
1254
$location{innerHTML} .= "Geo-Location not Found";
1255
}
1256
1257
$form{innerHTML} .= tag(\%location);
1258
}
1259
1260
$form{innerHTML} .= hr . " debugger allowed: ";
1261
if (is_debuggerAllowed($uid)) {
1262
$form{innerHTML} .= "<b>yes</b>\n";
1263
$form{innerHTML} .= " <button class=red type=button onclick=\"document.location='/add_debug_user.pl?$QUERY_UID=$uid&d=1'\">Disallow</button>";
1264
} else {
1265
$form{innerHTML} .= "<b>no</b>\n";
1266
$form{innerHTML} .= " <button class=green type=button onclick=\"document.location='/add_debug_user.pl?$QUERY_UID=$uid&da=0'\">Allow</button>";
1267
}
1268
$form{innerHTML} .= "<br>\n\n";
1269
} else {
1270
$form{innerHTML} .= "<br>\n";
1271
}
1272
1273
$form{innerHTML} .= " Beta Tester: ";
1274
if (isUserBeta($uid))
1275
{ $form{innerHTML} .= "<b>yes</b>\n"; } else
1276
{ $form{innerHTML} .= "<b>no</b>\n"; }
1277
1278
if (isUserBeta($stats->{ID})) {
1279
$form{innerHTML} .= "<button class=red type=button onclick=\"document.location.href='/beta.pl?$QUERY_UID=$stats->{ID}&beta=0';\">Remove as Beta Tester</button><br>\n";
1280
} else {
1281
$form{innerHTML} .= "<button class=green type=button onclick=\"document.location.href='/beta.pl?$QUERY_UID=$stats->{ID}&beta=1';\">Set as Beta Tester</button><br>\n";
1282
}
1283
$form{innerHTML} .= " </div>\n\n";
1284
1285
###################################################################################################################################
1286
$form{innerHTML} .= " <div id=coins class=center style='display: ";
1287
if ($tab eq "coins") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1288
$form{innerHTML} .= ";'>\n";
1289
$form{innerHTML} .= " Member has <b>" . commafied(User::get_user_points($stats->{ID})) . "</b> coins";
1290
if (isUserAdmin()) { $form{innerHTML} .= " <input class=yellow type=button value='Clear' title='removes all coins from this account' onclick='addcoins(-1);'><br>\n"; } else { $form{innerHTML} .= "<br>\n"; }
1291
$form{innerHTML} .= " <script defer>\n";
1292
$form{innerHTML} .= " function addcoins(clear = 0) {\n";
1293
$form{innerHTML} .= " var c = document.getElementById('addc');\n";
1294
$form{innerHTML} .= " var u = document.getElementById('$QUERY_UID');\n";
1295
$form{innerHTML} .= " if (clear) { document.location.href = \"/addcoins.pl?clear=1&$QUERY_UID=\" + u.value; }\n";
1296
$form{innerHTML} .= " else if (c.value) { document.location.href = \"/addcoins.pl?c=\" + c.value + \"&$QUERY_UID=\" + u.value; }\n";
1297
$form{innerHTML} .= " }\n";
1298
$form{innerHTML} .= " </script>\n";
1299
$form{innerHTML} .= "\n";
1300
$form{innerHTML} .= " <input id=addc size=10 title='add coins to this account' placeholder='1234567890'>\n";
1301
$form{innerHTML} .= " <input class=green type=button value='Add' onclick='addcoins();'>\n";
1302
$form{innerHTML} .= " </div>\n\n";
1303
1304
###################################################################################################################################
1305
if (isUserAdmin()) {
1306
$form{innerHTML} .= " <div class='center' id=friends style='display: ";
1307
if ($tab eq "friends") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1308
$form{innerHTML} .= ";' class=scrolling_vertical>";
1309
1310
my %script; {
1311
$script{tag} = "script";
1312
$script{defer} = 1;
1313
$script{innerHTML} = "\n" .
1314
"function addFriend() {\n" .
1315
" console_msg('addFriend');\n" .
1316
"}\n" .
1317
"\n" .
1318
"function removeFriend() {\n" .
1319
" console_msg('removeFriend');\n" .
1320
"}\n" .
1321
"\n";
1322
1323
$form{innerHTML} .= tag(\%script);
1324
}
1325
1326
my @friends = get_user_friends($stats->{ID});
1327
{ my %input;
1328
$input{tag} = "input";
1329
$input{type} = "text";
1330
$input{style} = "width: 123px;";
1331
$input{name} = "newFriend";
1332
$input{placeholder} = "UID or Nickname";
1333
$input{title} = "Type in a UID or a Member's Nickname";
1334
1335
$form{innerHTML} .= tag(\%input);
1336
} # end new friend input
1337
1338
{ my %button;
1339
$button{tag} = "button";
1340
$button{type} = "button";
1341
$button{class} = "green";
1342
$button{onclick} = "addFriend(); return false;";
1343
$button{innerHTML} = "+";
1344
1345
$form{innerHTML} .= tag(\%button);
1346
} # end add new friend button
1347
1348
if (@friends) {
1349
{ my %scrollingdiv;
1350
$scrollingdiv{tag} = "div";
1351
$scrollingdiv{class} = "sunken scrolling_vertical padded-small text-align-left";
1352
my $sh = "115px";
1353
my $sw = "250px";
1354
$scrollingdiv{style} = "min-height: $sh; max-height: $sh; min-width: $sw; max-width: $sw;";
1355
$scrollingdiv{innerHTML} = "";
1356
1357
foreach my $friend (@friends) {
1358
if (user_exists($friend)) {
1359
my $fn = get_user_stat($friend, "nickname");
1360
1361
{ my %button;
1362
$button{tag} = "button";
1363
$button{class} = "red padding-none";
1364
$button{title} = "Remove";
1365
$button{onclick} = "removeFriend();";
1366
$button{innerHTML} = " X ";
1367
1368
$scrollingdiv{innerHTML} .= tag(\%button);
1369
} # end remove friend button
1370
$scrollingdiv{innerHTML} .= "| ";
1371
1372
{ my %link;
1373
$link{tag} = "a";
1374
$link{href} = "?$QUERY_UID=" . $friend;
1375
$link{class} = "small";
1376
$link{title} = "UID: " . $friend;
1377
$link{innerHTML} = embolden(shorten_str($fn, 25));
1378
1379
$scrollingdiv{innerHTML} .= tag(\%link);
1380
}
1381
1382
$scrollingdiv{innerHTML} .= br;
1383
}
1384
}
1385
1386
$form{innerHTML} .= tag(\%scrollingdiv);
1387
} # end scrolling div
1388
} else {
1389
$form{innerHTML} .= " friends list is empty!\n";
1390
}
1391
$form{innerHTML} .= " </div>\n\n";
1392
1393
###################################################################################################################################
1394
$form{innerHTML} .= " <div id=blocks class=center style='display: ";
1395
if ($tab eq "blocks") { $form{innerHTML} .= "block"; } else { $form{innerHTML} .= "none"; }
1396
$form{innerHTML} .= ";'>\n";
1397
# well, let's see how many times this user has been blocked
1398
my $blockedsql = "select * from blocks where BID=" . $DB->quote($stats->{ID});
1399
my $blockedCount = 0;
1400
my $blockedList = sql_execute($blockedsql, "edit ustats, blockedsql");
1401
if (ref $blockedList eq "HASH") { $blockedCount = 1; } else { $blockedCount = @$blockedList; }
1402
my @blocked = get_user_blocked_users($stats->{ID});
1403
$form{innerHTML} .= "This user has been blocked by <b>$blockedCount</b> " . pluralize("user", $blockedCount) . "<hr>\n";
1404
if (@blocked) {
1405
foreach my $block (@blocked) {
1406
my $n = get_user_stat($block, "nickname");
1407
$form{innerHTML} .= " <button class=green_button title='Remove' onClick='return false;'>x</button> | <b>$n</b> <small>($block)</small><br>\n";
1408
}
1409
} else {
1410
$form{innerHTML} .= " no blocked users\n";
1411
}
1412
$form{innerHTML} .= " </div>\n";
1413
}
1414
1415
$form{innerHTML} .= "</div></div></td></tr></table>\n";
1416
1417
$rv .= tag(\%form);
1418
} # end form
1419
} else {
1420
my %notice; {
1421
my %img; {
1422
$img{tag} = "img";
1423
$img{src} = "/images/site/arrow_prev.png";
1424
$img{height} = 24;
1425
$img{style} = "margin-top: 4px;";
1426
}
1427
1428
$notice{tag} = "div";
1429
$notice{id} = "MSGS";
1430
$notice{class} = "notice";
1431
$notice{innerHTML} = tag(\%img) . " Select a User";
1432
}
1433
1434
$rv .= pre_html_header() .
1435
header("User Editor", "?nobg_img=1", "", "setTimeout(removeMsg, " . get_constant("REMOVE_MSG_TIMEOUT") . ");", "", "style='width: 100vw; height: 100vh; margin: 0; padding: 0;'") .
1436
center_content(tag(\%notice), "100vw", "100vh");
1437
}
1438
1439
$rv .= "\n</body>\n</html>\n";
1440
print $rv;
1441
1442
exit 1;