1<?php require_once 'engine/init.php';
2znote_csrf_protect_public_post();
3if ($config['require_login']['guilds']) protect_page();
4
5// These functions are page-specific and only used in this file.
6function guild_list($TFSVersion) {
7 $cache = new Cache('engine/cache/guildlist');
8 if ($cache->hasExpired()) {
9 $guilds = db()->fetchAll("
10 SELECT
11 `id`,
12 `name`,
13 `creationdata`,
14 `motd`,
15 ( SELECT
16 COUNT('guild_id')
17 FROM `guild_membership`
18 WHERE `guild_id`=`id`
19 ) AS `total`
20 FROM `guilds`
21 ORDER BY `name`;
22 ");
23
24 // Add level data info to guilds
25 if ($guilds !== false)
26 for ($i = 0; $i < count($guilds); $i++)
27 $guilds[$i]['level'] = get_guild_level_data($guilds[$i]['id']);
28
29 $cache->setContent($guilds);
30 $cache->save();
31 } else {
32 $guilds = $cache->load();
33 }
34 return $guilds;
35}
36
37function get_guild_position($rid) {
38 $data = db()->fetchOne("SELECT `level` FROM `guild_ranks` WHERE `id` = ?;", [(int)$rid]);
39 return ($data !== false) ? $data['level'] : false;
40}
41
42// Check guild logo
43function logo_exists($guild) {
44 if (function_exists('theme_guild_logo')) {
45 $themed = theme_guild_logo($guild);
46 if ($themed !== null) {
47 echo $themed;
48 return;
49 }
50 }
51
52 $guild = sanitize($guild);
53 echo (file_exists('engine/guildimg/'.$guild.'.gif')) ? 'engine/guildimg/'.$guild.'.gif' : 'engine/guildimg/default@logo.gif';
54}
55
56// Remove cid invitation from guild (gid)
57function guild_remove_invitation($cid, $gid) {
58 db()->execute("
59 DELETE FROM `guild_invites`
60 WHERE `player_id` = ?
61 AND `guild_id` = ?
62 ;", [(int)$cid, (int)$gid]);
63}
64
65function update_player_guildnick_10($cid, $nick) {
66 $nick = sanitize($nick);
67 db()->execute("UPDATE `guild_membership` SET `nick` = ? WHERE `player_id` = ?", [$nick, (int)$cid]);
68}
69
70function guild_player_join($cid, $gid) {
71 $cid = (int)$cid;
72 $gid = (int)$gid;
73
74 // Find rank id for regular member in this guild
75 $guildrank = db()->fetchOne("
76 SELECT `id`
77 FROM `guild_ranks`
78 WHERE `guild_id` = ?
79 AND `level` = 1 LIMIT 1;
80 ", [$gid]);
81
82 if ($guildrank !== false) {
83 $rid = $guildrank['id'];
84 // Remove invite
85 db()->execute("DELETE FROM `guild_invites` WHERE `player_id` = ?;", [$cid]);
86 // Add to guild
87 db()->execute("
88 INSERT INTO `guild_membership` (`player_id`, `guild_id`, `rank_id`, `nick`)
89 VALUES (?, ?, ?, '')
90 ;", [$cid, $gid, $rid]);
91 // Return success
92 return true;
93 }
94
95 return false;
96}
97
98function guild_player_leave_10($cid) {
99 db()->execute("DELETE FROM `guild_membership` WHERE `player_id` = ? LIMIT 1;", [(int)$cid]);
100}
101
102function update_player_guild_position_10($cid, $rid) {
103 db()->execute("UPDATE `guild_membership` SET `rank_id` = ? WHERE `player_id` = ?", [(int)$rid, (int)$cid]);
104}
105
106function guild_invite_player($cid, $gid) {
107 db()->execute("INSERT INTO `guild_invites` (`player_id`, `guild_id`) VALUES (?, ?)", [(int)$cid, (int)$gid]);
108}
109
110function guild_remove_invites($gid) {
111 db()->execute("DELETE FROM `guild_invites` WHERE `guild_id` = ?;", [(int)$gid]);
112}
113
114function guild_delete($gid) {
115 db()->execute("DELETE FROM `guilds` WHERE `id` = ?;", [(int)$gid]);
116}
117
118// Get guild data, using guild id.
119function get_guild_rank_data($gid) {
120 return db()->fetchAll("SELECT `id`, `guild_id`, `name`, `level` FROM `guild_ranks` WHERE `guild_id` = ? ORDER BY `id` DESC LIMIT 0, 30", [(int)$gid]);
121}
122
123// Changes leadership of a guild to player_id
124function guild_new_leader($new_leader, $gid) {
125 db()->execute("UPDATE `guilds` SET `ownerid` = ? WHERE `id` = ?", [(int)$new_leader, (int)$gid]);
126}
127
128// Change guild leader (parameters: cid, new and old leader).
129function guild_change_leader($nCid, $oCid) {
130 $nCid = (int)$nCid;
131 $oCid = (int)$oCid;
132 $gid = guild_leader_gid($oCid);
133 $ranks = get_guild_rank_data($gid);
134 $leader_rid = 0;
135 $vice_rid = 0;
136
137 // Get rank id for leader and vice leader.
138 foreach ($ranks as $rank) {
139 if ($rank['level'] == 3) $leader_rid = $rank['id'];
140 if ($rank['level'] == 2) $vice_rid = $rank['id'];
141 }
142
143 $status = ($leader_rid > 0 && $vice_rid > 0) ? true : false;
144
145 if ($status) {
146 // Update players and set their new rank id
147 db()->execute("UPDATE `guild_membership` SET `rank_id` = ? WHERE `player_id` = ? LIMIT 1;", [$leader_rid, $nCid]);
148 db()->execute("UPDATE `guild_membership` SET `rank_id` = ? WHERE `player_id` = ? LIMIT 1;", [$vice_rid, $oCid]);
149
150 // Update guilds set new ownerid
151 guild_new_leader($nCid, $gid);
152 }
153
154 return $status;
155}
156
157// Creates a guild, where cid is the owner of the guild, and name is the name of guild.
158function create_guild($cid, $name) {
159 $cid = (int)$cid;
160 $name = trim(preg_replace('/\s\s+/', ' ', str_replace("\n", " ", sanitize($name))));
161 $time = time();
162
163 // Create the guild
164 db()->execute("INSERT INTO `guilds` (`name`, `ownerid`, `creationdata`, `motd`) VALUES (?, ?, ?, '');", [$name, $cid, $time]);
165
166 // Get guild id
167 $gid = get_guild_id($name);
168
169 // Get rank id for guild leader
170 $data = db()->fetchOne("SELECT `id` FROM `guild_ranks` WHERE `guild_id` = ? AND `level` = 3 LIMIT 1;", [$gid]);
171 $rid = ($data !== false) ? $data['id'] : false;
172
173 // Give player rank id for leader of his guild
174 db()->execute("INSERT INTO `guild_membership` (`player_id`, `guild_id`, `rank_id`, `nick`) VALUES (?, ?, ?, '');", [$cid, $gid, $rid]);
175}
176
177// Returns total members in a guild (integer)
178function count_guild_members($gid) {
179 $data = db()->fetchOne("SELECT COUNT('guild_id') AS `total` FROM `guild_membership` WHERE `guild_id` = ?;", [(int)$gid]);
180 return ($data !== false) ? $data['total'] : false;
181}
182
183// Guildwar functions
184function guild_war_invitation($cid, $gid) {
185 $cid = (int)$cid;
186 $gid = (int)$gid;
187 $gname = get_guild_name($cid);
188 $ename = get_guild_name($gid);
189 $time = time();
190 db()->execute("
191 INSERT INTO `guild_wars` (`guild1`, `guild2`, `name1`, `name2`, `status`, `started`, `ended`)
192 VALUES (?, ?, ?, ?, 0, ?, 0)
193 ;", [$cid, $gid, $gname, $ename, $time]);
194}
195
196function accept_war_invitation($cid, $gid) {
197 db()->execute("UPDATE `guild_wars` SET `status` = 1 WHERE `guild1` = ? AND `guild2` = ? AND `status` = 0;", [(int)$cid, (int)$gid]);
198}
199
200function reject_war_invitation($cid, $gid) {
201 db()->execute("UPDATE `guild_wars` SET `status` = 2, `ended` = ? WHERE `guild1` = ? AND `guild2` = ?;", [time(), (int)$cid, (int)$gid]);
202}
203
204function cancel_war_invitation($cid, $gid) {
205 db()->execute("UPDATE `guild_wars` SET `status` = 3, `ended` = ? WHERE `guild2` = ? AND `guild1` = ?;", [time(), (int)$cid, (int)$gid]);
206}
207
208theme_open();
209
210if (user_logged_in() === true) {
211 // fetch data
212 $char_count = user_character_list_count($session_user_id);
213 $char_array = user_character_list($user_data['id']);
214 $characters = array();
215 $charactersId = array();
216 $charactersRank = array();
217 if ($char_array !== false) {
218 foreach ($char_array as $value) {
219 $characters[] = $value['name'];
220 $charactersId[] = $value['id'];
221 $charactersRank[] = $value['rank_id'];
222 }
223 }
224} else {
225 $char_count = 0;
226}
227
228// Display the guild list
229if (empty($_GET['name'])) {
230//data_dump($guild, false, "guild data");
231$guilds = guild_list(znote_server_adapter()->normalizedEngine());
232
233if (isset($guilds) && !empty($guilds) && $guilds !== false) {
234 //data_dump($guilds, false, "Guilds");
235 if (theme_file('views/guilds.php') !== null) {
236 view('guilds', array('guilds' => $guilds));
237 } else {
238 ?>
239 <style type="text/css">
240 #guildsTable tr {
241 cursor: pointer;
242 }
243 </style>
244 <table id="guildsTable" class="table table-striped table-hover">
245 <tr class="yellow">
246 <th><?= t('guild.logo_label') ?></th>
247 <th><?= t('common.description') ?></th>
248 <th><?= t('guild.data') ?></th>
249 </tr>
250 <?php
251 foreach ($guilds as $guild) {
252 if ($guild['total'] >= 1) {
253 $url = url("guilds.php?name=". $guild['name']);
254 ?>
255 <tr class="special" onclick="javascript:window.location.href='<?php echo $url; ?>'">
256 <td style="width: 100px;">
257 <img style="max-height: 100px; margin: auto; display: block;"
258 src="<?php logo_exists($guild['name']); ?>">
259 </td>
260 <td>
261 <b><?php echo $guild['name']; ?></b>
262 <?php if (strlen($guild['motd']) > 0) echo '<br>'.$guild['motd']; ?>
263 </td>
264 <td>
265 <?php echo "Total members: ".$guild['level']['players']; ?>
266 <br><?php echo "Average level: ".$guild['level']['avg'].""; ?>
267 <br><?php echo "Guild level: ".$guild['level']['total']; ?>
268 </td>
269 </tr>
270 <?php
271 //echo '<td>'. getClock($guild['creationdata'], true) .'</td>';
272 }
273 }
274 ?>
275 </table>
276 <?php
277 }
278} else echo '<p>'. t('guild.empty_list'). '</p>';?>
279
280<!-- POST action: create guild -->
281<?php
282ob_start();
283if (user_logged_in() === true) {
284 // post verifications
285 // CREATE GUILD
286 if (!empty($_POST['selected_char']) && !empty($_POST['guild_name'])) {
287 data_dump($_POST, false, "debug");
288 if ((int)user_character_account_id($_POST['selected_char']) === $session_user_id) {
289 data_dump($_POST, false, "debug2");
290 //code here
291 $name = sanitize($_POST['selected_char']);
292 $user_id = user_character_id($name);
293
294 $char_data = user_character_data($user_id, 'level');
295 $char_data['online'] = (user_is_online_10($user_id)) ? 1 : 0;
296
297 // If character level is high enough
298 if ($char_data['level'] >= $config['create_guild_level']) {
299
300 // If character is offline
301 if ($char_data['online'] == 0) {
302
303 // If character is premium
304 if ($config['guild_require_premium'] == false || $user_data['premdays'] > 0) {
305
306 if (get_character_guild_rank($user_id) < 1) {
307
308 if (preg_match("/^[a-zA-Z_ ]+$/", $_POST['guild_name'])) {
309 // Only allow normal symbols as guild name
310 if (strlen($_POST['guild_name']) < 31) {
311
312 $guildname = sanitize($_POST['guild_name']);
313
314 $gid = get_guild_id($guildname);
315 if ($gid === false) {
316 create_guild($user_id, $guildname);
317 // Re-cache the guild list
318 $guilds = guild_list(znote_server_adapter()->normalizedEngine());
319 header('Location: success.php');
320 exit();
321 } else echo 'A guild with that name already exist.';
322 } else echo t('guild.name_too_long2');
323 } else echo t('guild.name_letters');
324 } else echo t('guild.already_in');
325 } else echo t('guild.need_premium');
326 } else echo t('guild.must_offline');
327 } else echo $name .' is level '. $char_data['level'] .'. But you need level '. $config['create_guild_level'] .'+ to create your own guild!';
328 }
329 }
330 // end
331 ?>
332
333
334 <!-- FORMS TO CREATE GUILD-->
335 <form action="" method="post">
336 <ul>
337 <li>
338 <?= t('guild.create_btn') ?>:<br>
339 <select name="selected_char">
340 <?php
341 for ($i = 0; $i < $char_count; $i++) {
342 echo '<option value="'. $characters[$i] .'">'. $characters[$i] .'</option>';
343 }
344 ?>
345 </select>
346 <input type="text" name="guild_name">
347 <input type="submit" value="<?= t('guild.create_btn') ?>">
348 </li>
349 </ul>
350 </form>
351
352 <?php
353} else echo t('guild.need_login');
354$guildCreateFormHtml = ob_get_clean();
355view('guild_create_form', ['guildCreateFormHtml' => $guildCreateFormHtml]);
356?>
357<!-- end user-->
358
359<?php
360} else { // GUILD OVERVIEW
361 $guild = get_guild_data($_GET['name'] ?? '');
362 if (!is_array($guild) || empty($guild['id'])) {
363 header('Location: guilds.php');
364 exit();
365 }
366 $gid = (int)$guild['id'];
367 $gcount = count_guild_members($gid);
368 if ($gcount < 1) {
369 header('Location: guilds.php');
370 exit();
371 }
372 $inv_data = guild_invite_list($gid);
373 $players = get_guild_players($gid);
374 $inv_count = 0;
375
376 // Calculate invite count
377 if ($inv_data !== false) {
378 foreach ($inv_data as $inv) {
379 ++$inv_count;
380 }
381 }
382
383 // calculate visitor access
384 $highest_access = 0;
385 if (user_logged_in() === true) {
386 // Get visitor access in this guild
387 foreach ($players as $player) {
388 $rid = $player['rank_id'];
389
390 for ($i = 0; $i < $char_count; $i++) {
391
392 $playerRank = $charactersRank[$i];
393
394 if ($playerRank == $rid) {
395 // Get a player guild position ID, using his rank_id
396 $access = get_guild_position($playerRank);
397 if ($access == 2 || $access == 3) { //If player got access level vice leader or leader
398 if ($access > $highest_access) $highest_access = $access;
399 }
400 }
401
402 }
403 }
404 }
405 // Display the specific guild page
406 ob_start();
407 ?>
408
409 <!-- Guild information above table -->
410 <div id="guildTitleDiv">
411 <?php
412 if (isset($_GET['error']))
413 echo "<font size='5' color='red'>".sanitize($_GET['error'])."</font><br><br>";
414
415 if ($config['use_guild_logos']): ?>
416 <div id="guildImageDiv" style="float: left; margin-right: 10px;">
417 <img style="max-width: 100px; max-height: 100px;" src="<?php logo_exists(sanitize($_GET['name'])); ?>">
418 </div>
419 <?php
420 endif; ?>
421 <div id="guildDescription">
422 <h1><?= t('guild.title_char', ['name' => sanitize($_GET['name'])]) ?></h1>
423 <p><?php echo $guild['motd']; ?></p>
424 </div>
425 </div>
426
427 <!-- Guild information -->
428 <table id="guildViewTable" class="table table-striped">
429 <tr class="yellow">
430 <th><?= t('common.rank_label') ?></th>
431 <th><?= t('common.name_label') ?></th>
432 <th><?= t('common.level_label') ?></th>
433 <th><?= t('common.vocation_label') ?></th>
434 <th><?= t('guild.status') ?></th>
435 </tr>
436 <?php
437 $onlinelist = array();
438 $gplayers = array();
439 foreach ($players as $player) {
440 $gplayers[] = $player['id'];
441 }
442 $gplayerPlaceholders = implode(',', array_fill(0, count($gplayers), '?'));
443 $onlinequery = db()->fetchAll("
444 SELECT `player_id`
445 FROM `players_online`
446 WHERE `player_id` IN({$gplayerPlaceholders});
447 ", $gplayers);
448 if ($onlinequery !== false) foreach ($onlinequery as $online) {
449 $onlinelist[] = $online['player_id'];
450 }
451 //data_dump($players, false, "Data");
452 $rankName = '';
453 foreach ($players as $player) {
454 $chardata['online'] = (in_array($player['id'], $onlinelist)) ? 1 : 0;
455 echo '<tr>';
456 echo '<td>' . ($rankName !== $player['rank_name'] ? $player['rank_name'] : '') . '</td>';
457 $rankName = $player['rank_name'];
458 echo '<td><a href="characterprofile.php?name='. $player['name'] .'">'. $player['name'] .'</a>';
459 if (!empty($player['guildnick'])) {
460 echo ' ('. $player['guildnick'] .')';
461 }
462 echo '</td>';
463 echo '<td>'. $player['level'] .'</td>';
464 echo '<td>'. $config['vocations'][$player['vocation']]['name'] .'</td>';
465 if ($chardata['online'] == 1) echo '<td> <b><font color="green"> Online </font></b></td>';
466 else echo '<td> Offline </td>';
467 echo '</tr>';
468 }
469 ?>
470 </table>
471
472 <?php // Invited characters
473 if ($inv_count > 0): ?>
474 <h3><?= t('guild.invited_chars') ?></h3>
475 <table>
476 <tr class="yellow">
477 <td>Name:</td>
478 <?php
479 if ($highest_access == 2 || $highest_access == 3) {
480 echo '<td>'. t('guild.remove'). '</td>';
481 }
482 // Shuffle through visitor characters
483 for ($i = 0; $i < $char_count; $i++) {
484 $exist = false;
485 // Shuffle through invited character, see if they match your character.
486 if ($inv_data !== false) foreach ($inv_data as $inv) {
487 if ($charactersId[$i] == $inv['player_id']) {
488 $exist = true;
489 }
490 }
491 if ($exist) echo '<td>'. t('guild.join2'). '</td><td>'. t('guild.reject2'). '</td>';
492 }
493 ?>
494 </tr>
495 <?php
496 $bool = false;
497 if ($inv_data !== false) foreach ($inv_data as $inv) {
498 echo '<tr>';
499 echo '<td>'. $inv['name'] .'</td>';
500 // Remove invitation
501 if ($highest_access == 2 || $highest_access == 3) {
502 ?> <form action="" method="post"> <?php
503 echo '<td>';
504 echo '<input type="hidden" name="uninvite" value="' . $inv['player_id'] . '" />';
505 echo '<input type="submit" value="'. t('guild.remove_invite') .'">';
506 echo '</td>';
507 ?> </form> <?php
508 }
509 // Join Guild
510 ?> <form action="" method="post"> <?php
511 for ($i = 0; $i < $char_count; $i++) {
512 if ($charactersId[$i] == $inv['player_id']) {
513 echo '<td>';
514 echo '<input type="hidden" name="joinguild" value="' . $inv['player_id'] . '" />';
515 echo '<input type="submit" value="'. t('guild.join_btn') .'">';
516 echo '</td>';
517 $bool = true;
518 }
519 }
520 if (isset($bool, $exist) && !$bool && $exist) {
521 echo '<td></td>';
522 $bool = false;
523 }
524 ?> </form> <?php
525 // Reject invitation
526 ?> <form action="" method="post"> <?php
527 for ($i = 0; $i < $char_count; $i++) {
528 if ($charactersId[$i] == $inv['player_id']) {
529 echo '<td>';
530 echo '<input type="hidden" name="uninvite" value="' . $inv['player_id'] . '" />';
531 echo '<input type="submit" value="'. t('guild.reject_btn') .'">';
532 echo '</td>';
533 $bool = true;
534 }
535 }
536 if (isset($bool, $exist) && !$bool && $exist) {
537 echo '<td></td>';
538 $bool = false;
539 }
540 ?> </form> <?php
541 echo '</tr>';
542 }
543 ?>
544 </table>
545 <?php endif; ?>
546
547 <!-- <?= t('guild.leader') ?> stuff -->
548 <?php
549 if (user_logged_in() === true) {
550
551 // Uninvite and joinguild is also used for visitors who reject their invitation.
552 if (!empty($_POST['uninvite'])) {
553 // Is this action being triggered by a vice leader+, or the invited player?
554 $u_player = (int)$_POST['uninvite'];
555 $u_player = user_character_name($u_player);
556 $u_player = (int)user_character_account_id($u_player);
557 if (in_array($highest_access, array(2,3)) || $u_player === $session_user_id) {
558 guild_remove_invitation($_POST['uninvite'], $gid);
559 header('Location: guilds.php?name='. $_GET['name']);
560 exit();
561 }
562 }
563
564 // Join guild
565 if (!empty($_POST['joinguild'])) {
566 $joining_player_id = (int)$_POST['joinguild'];
567 $join_account = (int)user_character_account_id(user_character_name($joining_player_id));
568
569 if ($join_account !== $session_user_id) {
570 echo '<font color="red" size="4">'. t('guild.wrong_acc_join2'). '</font>';
571 theme_close();
572 exit();
573 }
574
575 // Join a guild
576 if ($inv_data !== false) foreach ($inv_data as $inv) {
577 if ((int)$inv['player_id'] == $joining_player_id) {
578 $chardata['online'] = (user_is_online_10($joining_player_id)) ? 1 : 0;
579 if ($chardata['online'] == 0) {
580
581 // Ensure player is not already a member of another guild
582 if (get_character_guild_rank($joining_player_id) === false) {
583 if (guild_player_join($joining_player_id, (int)$gid)) {
584 header('Location: guilds.php?name='. $_GET['name']);
585 exit();
586 } else echo '<font color="red" size="4">'. t('guild.no_position2'). '</font>';
587
588 } else {
589 $already_guild = get_player_guild_data($joining_player_id);
590 $already_guild_name = get_guild_name($already_guild['guild_id']);
591
592 echo '<font color="red" size="4">' . t('guild.you_are_already') . ' <strong>' . htmlspecialchars((string)$already_guild['rank_name'], ENT_QUOTES, 'UTF-8') . '</strong> ' . t('guild.of_another_guild') . ': <strong><a href="guilds.php?name=' . htmlspecialchars((string)$already_guild_name, ENT_QUOTES, 'UTF-8') . '">' . htmlspecialchars((string)$already_guild_name, ENT_QUOTES, 'UTF-8') . '</a></strong>.<br>' . t('guild.leave_first') . '</font>';
593 }
594
595 } else echo '<font color="red" size="4">'. t('guild.offline_join2'). '</font>';
596 }
597 }
598 }
599
600 // leave guild
601 if (!empty($_POST['leave_guild'])) {
602 $name = sanitize($_POST['leave_guild']);
603 $cidd = user_character_id($name);
604
605 $leave_account = (int)user_character_account_id($name);
606 if ($leave_account !== $session_user_id) {
607 echo '<font color="red" size="4">'. t('guild.wrong_acc_leave2'). '</font>';
608 theme_close();
609 exit();
610 }
611
612 // If character is offline
613 $chardata['online'] = (user_is_online_10($cidd)) ? 1 : 0;
614 if ($chardata['online'] == 0) {
615 guild_player_leave_10($cidd);
616 header('Location: guilds.php?name='. $_GET['name']);
617 exit();
618 } else echo '<font color="red" size="4">'. t('guild.offline_first2'). '</font>';
619 }
620
621 // vice leader (and guild leader) actions
622 if ($highest_access >= 2) {
623 // Vice-leaders and leaders
624 // Change Guild Nick
625 if (!empty($_POST['player_guildnick'])) {
626 if ($config['guild_allow_nicknames']) {
627 $p_cid = user_character_id($_POST['player_guildnick']);
628 $p_guild = get_player_guild_data($p_cid);
629
630 if (preg_match("/^[a-zA-Z_ ]+$/", $_POST['guildnick']) || empty($_POST['guildnick'])) {
631 // Only allow normal symbols as guild nick
632 $p_nick = sanitize($_POST['guildnick']);
633
634 if ($p_guild['guild_id'] == $gid) {
635 $chardata['online'] = (user_is_online_10($p_cid)) ? 1 : 0;
636
637 if ($chardata['online'] == 0) {
638 update_player_guildnick_10($p_cid, $p_nick);
639 header('Location: guilds.php?name='. $_GET['name']);
640 exit();
641 } else echo '<font color="red" size="4">'. t('guild.not_offline'). '</font>';
642 }
643
644 } else echo '<font color="red" size="4">Character guild nick may only contain a-z, A-Z and spaces.</font>';
645 } else echo '<font color="red" size="4">'. t('guild.nick_disabled2'). '</font>';
646 }
647
648 // Invite character to guild
649 if (!empty($_POST['invite'])) {
650 if (user_character_exist($_POST['invite'])) {
651 // Make sure they are not in another guild
652 $charid = user_character_id($_POST['invite']);
653 $membership = db()->fetchOne("SELECT `rank_id` FROM `guild_membership` WHERE `player_id` = ? LIMIT 1;", [$charid]);
654 if (!$membership) {
655 $status = false;
656 if ($inv_data !== false) {
657 foreach ($inv_data as $inv) {
658 if ($inv['player_id'] == user_character_id($_POST['invite'])) $status = true;
659 }
660 }
661 foreach ($players as $player) {
662 if ($player['name'] == $_POST['invite']) $status = true;
663 }
664
665 if ($status == false) {
666 guild_invite_player($charid, $gid);
667 header('Location: guilds.php?name='. $_GET['name']);
668 exit();
669 } else echo '<font color="red" size="4">That character is already invited(or a member) on this guild.</font>';
670 } else echo '<font color="red" size="4">'. t('guild.char_in_guild'). '</font>';
671
672 } else echo '<font color="red" size="4">'. t('guild.char_not_found'). '</font>';
673 }
674
675 // Guild Message (motd)
676 if (!empty($_POST['motd'])) {
677 $motd = sanitize($_POST['motd']);
678 db()->execute("UPDATE `guilds` SET `motd` = ? WHERE `id` = ? LIMIT 1;", [$motd, $gid]);
679 header('Location: guilds.php?name='. $_GET['name']);
680 exit();
681 }
682
683 // Remove guild member
684 if (!empty($_POST['remove_member'])) {
685 $name = sanitize($_POST['remove_member']);
686 $cid = user_character_id($name);
687
688 $p_guild = get_player_guild_data($cid);
689 if ($p_guild['guild_id'] == $gid) {
690 guild_remove_member_10($cid);
691 header('Location: guilds.php?name='. $_GET['name']);
692 exit();
693 }
694 }
695
696 // Create forum guild board
697 if (!empty($_POST['forumGuildId'])) {
698
699 if ($config['forum']['guildboard'] === true) {
700 $forumExist = db()->fetchOne("SELECT `id` FROM `znote_forum` WHERE `guild_id` = ? LIMIT 1;", [$gid]);
701
702 if ($forumExist === false) {
703 // Insert data
704 db()->execute("
705 INSERT INTO `znote_forum`
706 (`name`, `access`, `closed`, `hidden`, `guild_id`)
707 VALUES ('Guild', 1, 0, 0, ?)
708 ;", [$gid]);
709 echo '<h1>'. t('guild.board_created2'). '</h1>';
710 } else echo '<h1>'. t('guild.board_exists2'). '</h1>';
711
712 } else {
713 echo '<h1>'. t('guild.board_disabled2'). '</h1>';
714 }
715 }
716
717 // Guildwar actions
718 if ($config['guildwar_enabled'] === true) {
719
720 // Invite another guild to war
721 if (!empty($_POST['warinvite'])) {
722 $targetGuild = get_guild_id($_POST['warinvite']);
723 if ($targetGuild) {
724 $status = false;
725
726 $war_invite = db()->fetchOne("SELECT `id` FROM `guilds` WHERE `id` = ?;", [$gid]);
727 if ($war_invite !== false) {
728 foreach ($war_invite as $inv) {
729 if ($inv['id'] == $targetGuild) $status = true;
730 }
731 }
732
733 $check_guild = get_guild_name($gid);
734 foreach ($check_guild as $guild) {
735 if ($guild['name'] == $_POST['warinvite']) $status = true;
736 }
737
738 if ((int)$gid === (int)$targetGuild) $status = true;
739
740 $wars = db()->fetchAll("
741 SELECT
742 `id`, `guild1`, `guild2`, `status`
743 FROM `guild_wars`
744 WHERE (`guild1` = ? OR `guild1` = ?)
745 AND (`guild2` = ? OR `guild2` = ?)
746 AND `status` IN (0, 1)
747 ;", [$gid, $targetGuild, $gid, $targetGuild]);
748
749 if ($status == false && $wars == false) {
750 guild_war_invitation($gid, $targetGuild);
751 $limit = (empty($_POST['limit'])) ? 100 : (int)$_POST['limit'];
752 db()->execute("INSERT INTO `znote_guild_wars` (`limit`) VALUES (?);", [$limit]);
753 header('Location: guilds.php?name='. $_GET['name']);
754 exit();
755 } else echo '<font color="red" size="4">This guild has already been invited to war(or you\'re trying to invite your own).</FONT>';
756
757 } else echo '<font color="red" size="4">'. t('guild.not_found'). '</font>';
758 }
759
760 if (!empty($_POST['cancel_war_invite'])) {
761 cancel_war_invitation($_POST['cancel_war_invite'], $gid);
762 header('Location: guilds.php?name='. $_GET['name']);
763 exit();
764 }
765
766 if (!empty($_POST['reject_war_invite'])) {
767 reject_war_invitation($_POST['reject_war_invite'], $gid);
768 header('Location: guilds.php?name='. $_GET['name']);
769 exit();
770 }
771
772 if (!empty($_POST['accept_war_invite'])) {
773 accept_war_invitation($_POST['accept_war_invite'], $gid);
774 header('Location: guilds.php?name='. $_GET['name']);
775 exit();
776 }
777 }
778
779 $members = count_guild_members($gid);
780 $ranks = get_guild_rank_data($gid);
781
782 // Form to create guild board
783 if ($config['forum']['guildboard'] === true && $config['forum']['enabled'] === true) {
784 $forumExist = db()->fetchOne("SELECT `id` FROM `znote_forum` WHERE `guild_id` = ? LIMIT 1;", [$gid]);
785 if ($forumExist === false) {
786 ?>
787 <form action="" method="post">
788 <ul>
789 <li><?= t('guild.create_board2') ?><br>
790 <input type="hidden" name="forumGuildId" value="<?php echo $gid; ?>">
791 <input type="submit" value="<?= t('guild.create_board_btn') ?>">
792 </ul>
793 </form>
794 <?php
795 }
796 }
797
798 // Form to upload guild logo
799 if ($config['use_guild_logos']) {
800 ?>
801 <form action="" method="post" enctype="multipart/form-data">
802 <ul>
803 <li>Upload guild logo [.gif images only, 100x100px size]:<br>
804 <input type="file" name="file" id="file" accept="image/gif">
805 <input type="submit" name="submit" value="<?= t('guild.upload_logo') ?>">
806 </li>
807 </ul>
808 </form>
809 <?php
810 if (!empty($_FILES['file'])) {
811 check_image($_FILES['file']);
812 echo '<br><br>';
813 }
814 }
815 ?>
816
817 <!-- forms to invite character -->
818 <form action="" method="post">
819 <ul>
820 <li><?= t('guild.invite_btn') ?> to guild:<br>
821 <input type="text" name="invite" placeholder="<?= t('guild.char_name_placeholder') ?>">
822 <input type="submit" value="<?= t('guild.invite_btn') ?>">
823 </li>
824 </ul>
825 </form>
826
827 <!-- Guild message of the day motd -->
828 <form action="" method="post">
829 <ul>
830 <li><?= t('guild.change_motd') ?></li>
831 <li>
832 <textarea name="motd" placeholder="<?= t('guild.message_placeholder') ?>" cols="50" rows="3"><?php echo $guild['motd']; ?></textarea><br>
833 <input type="submit" value="<?= t('guild.update_motd') ?>">
834 </li>
835 </ul>
836 </form>
837
838 <?php if ($config['guild_allow_nicknames']): ?>
839 <!-- FORMS TO CHANGE GUILD NICK -->
840 <form action="" method="post">
841 <ul>
842 <li>
843 Change Guild Nick:<br>
844 <select name="player_guildnick">
845 <?php
846 //$gid = get_guild_id($_GET['name']);
847 //$players = get_guild_players($gid);
848 foreach ($players as $player) {
849 if ($player['rank_level'] != 3) {
850 echo '<option value="'. $player['name'] .'">'. $player['name'] .'</option>';
851 } else {
852 if ($highest_access == 3) {
853 echo '<option value="'. $player['name'] .'">'. $player['name'] .'</option>';
854 }
855 }
856 }
857 ?>
858 </select>
859 <input type="text" name="guildnick" maxlength="15" placeholder="<?= t('guild.leave_blank_placeholder') ?>">
860 <input type="submit" value="<?= t('guild.change_nick_btn') ?>">
861 </li>
862 </ul>
863 </form>
864 <?php endif; ?>
865
866 <?php if ($members > 1): ?>
867 <!-- FORMS TO PROMOTE CHARACTER-->
868 <form action="" method="post">
869 <ul>
870 <li>
871 Promote Character:<br>
872 <select name="promote_character">
873 <?php
874 //$gid = get_guild_id($_GET['name']);
875 //$players = get_guild_players($gid);
876 foreach ($players as $player) {
877 if ($player['rank_level'] != 3) {
878 echo '<option value="'. $player['name'] .'">'. $player['name'] .'</option>';
879 }
880 }
881 ?>
882 </select>
883 <select name="promote_position">
884 <?php
885 foreach ($ranks as $rank) {
886 if ($rank['level'] != 3) {
887 if ($rank['level'] != 2) {
888 echo '<option value="'. $rank['id'] .'">'. $rank['name'] .'</option>';
889 } else {
890 if ($highest_access == 3) {
891 echo '<option value="'. $rank['id'] .'">'. $rank['name'] .'</option>';
892 }
893 }
894 }
895 }
896 ?>
897 </select>
898 <input type="submit" value="<?= t('guild.promote') ?>">
899 </li>
900 </ul>
901 </form>
902
903 <!-- Remove member from guild -->
904 <form action="" method="post">
905 <ul>
906 <li>
907 Kick member from guild:<br>
908 <select name="remove_member">
909 <?php
910 //$gid = get_guild_id($_GET['name']);
911 //$players = get_guild_players($gid);
912 foreach ($players as $player) {
913 if ($player['rank_level'] != 3) {
914 if ($player['rank_level'] != 2) {
915 echo '<option value="'. $player['name'] .'">'. $player['name'] .'</option>';
916 } else {
917 if ($highest_access == 3) {
918 echo '<option value="'. $player['name'] .'">'. $player['name'] .'</option>';
919 }
920 }
921 }
922 }
923 ?>
924 </select>
925 <input type="submit" value="<?= t('guild.remove_member') ?>">
926 </li>
927 </ul>
928 </form>
929 <?php endif; ?>
930 <br><br>
931 <?php
932 } // end vice leader+
933
934 // Guild leaders only
935 if ($highest_access == 3) {
936 // Promote character to guild position
937 if (!empty($_POST['promote_character']) && !empty($_POST['promote_position'])) {
938 // Verify that promoted character is from this guild.
939 $p_rid = $_POST['promote_position'];
940 $p_cid = user_character_id($_POST['promote_character']);
941 $p_guild = get_player_guild_data($p_cid);
942
943 if ($p_guild['guild_id'] == $gid) {
944 $chardata['online'] = (user_is_online_10($p_cid)) ? 1 : 0;
945 if ($chardata['online'] == 0) {
946 update_player_guild_position_10($p_cid, $p_rid);
947 header('Location: guilds.php?name='. $_GET['name']);
948 exit();
949 } else echo '<font color="red" size="4">'. t('guild.not_offline'). '</font>';
950 }
951 }
952
953 // Disband guild
954 if (!empty($_POST['disband'])) {
955 //$gidd = (int)$_POST['disband'];
956 $members = get_guild_players($gid);
957 $online = false;
958
959 // First figure out if anyone are online.
960 foreach ($members as $member) {
961 $chardata['online'] = (user_is_online_10(user_character_id($member['name']))) ? 1 : 0;
962 if ($chardata['online'] == 1) {
963 $online = true;
964 }
965 }
966
967 if (!$online) {
968 // Then remove guild rank from every player.
969 foreach ($members as $member)
970 guild_player_leave_10(user_character_id($member['name']));
971
972 // Remove all guild invitations to this guild
973 if ($inv_count > 0)
974 guild_remove_invites($gid);
975
976 // Then remove the guild itself.
977 guild_delete($gid);
978 header('Location: success.php');
979 exit();
980 } else echo '<font color="red" size="4">'. t('guild.disband_offline'). '</font>';
981 }
982
983 // Change guild leader
984 if (!empty($_POST['new_leader'])) {
985 $new_leader = (int)$_POST['new_leader'];
986 $old_leader = guild_leader($gid);
987
988 $online = false;
989 $newData['online'] = (user_is_online_10($new_leader)) ? 1 : 0;
990 $oldData['online'] = (user_is_online_10($old_leader)) ? 1 : 0;
991
992 if ($newData['online'] == 1 || $oldData['online'] == 1) $online = true;
993
994 if ($online == false) {
995 if (guild_change_leader($new_leader, $old_leader)) {
996 header('Location: guilds.php?name='. $_GET['name']);
997 exit();
998 } else echo '<font color="red" size="4">Something went wrong when attempting to change leadership.</font>';
999 } else echo '<font color="red" size="4">The new and old leader must be offline to change leadership.</font>';
1000 }
1001
1002 // Change guild ranks
1003 if (!empty($_POST['change_ranks'])) {
1004 //$c_gid = (int)$_POST['change_ranks'];
1005 $c_ranks = get_guild_rank_data($gid);
1006 $rank_data = array();
1007 $rank_ids = array();
1008
1009 // Feed new rank data
1010 foreach ($c_ranks as $rank) {
1011 $tmp = 'rank_name!'. $rank['level'];
1012 if (!empty($_POST[$tmp])) {
1013 $rank_data[$rank['level']] = sanitize($_POST[$tmp]);
1014 $rank_ids[$rank['level']] = $rank['id'];
1015 }
1016 }
1017
1018 // Change guild rank name.
1019 foreach ($rank_data as $level => $name) {
1020 $rid = (int)$rank_ids[$level];
1021 $name = sanitize($name);
1022 db()->execute("UPDATE `guild_ranks` SET `name` = ? WHERE `id` = ?", [$name, $rid]);
1023 }
1024
1025 header('Location: guilds.php?name='. $_GET['name']);
1026 exit();
1027 }
1028 ?>
1029
1030 <!-- forms to change rank titles -->
1031 <form action="" method="post">
1032 <ul>
1033 <li><b><?= t('guild.change_ranks') ?></b><br>
1034 <?php
1035 $rank_count = 1;
1036 foreach ($ranks as $rank) {
1037 echo '<input type="text" name="rank_name!'. $rank['level'] .'" value="'. $rank['name'] .'">';
1038 }
1039 echo '<input type="hidden" name="change_ranks" value="' . $gid . '" />';
1040 ?>
1041 <input type="submit" value="<?= t('guild.update_ranks') ?>">
1042 </li>
1043 </ul>
1044 </form>
1045
1046 <!-- forms to disband guild -->
1047 <form action="" method="post">
1048 <ul>
1049 <li><b>DELETE GUILD (All members must be offline):</b><br>
1050 <?php echo '<input type="hidden" name="disband" value="' . $gid . '" />'; ?>
1051 <input type="submit" value="<?= t('guild.disband_btn') ?>">
1052 </li>
1053 </ul>
1054 </form>
1055
1056 <!-- forms to change leadership-->
1057 <?php if ($members > 1): ?>
1058 <form action="" method="post">
1059 <ul>
1060 <li><b><?= t('guild.change_leader') ?></b><br>
1061 <select name="new_leader">
1062 <?php
1063 //$gid = get_guild_id($_GET['name']);
1064 //$players = get_guild_players($gid);
1065 foreach ($players as $player) {
1066 if ($player['rank_level'] != 3) {
1067 echo '<option value="'. $player['id'] .'">'. $player['name'] .'</option>';
1068 }
1069 }
1070 ?>
1071 </select>
1072 <input type="submit" value="<?= t('guild.change_leader_btn') ?>">
1073 </li>
1074 </ul>
1075 </form>
1076 <?php endif; ?>
1077
1078 <!-- Guild war management -->
1079 <?php if ($config['guildwar_enabled'] === true) { ?>
1080 <h2><?= t('guild.war_management2') ?></h2>
1081 <form action="" method="post">
1082 <ul>
1083 <li><?= t('guild.invite_war') ?><br>
1084 <input type="text" name="warinvite" placeholder="<?= t('guild.name_placeholder') ?>">
1085 <input type="number" min="10" max="999" name="limit">
1086 <input type="submit" value="<?= t('guild.invite_guild_btn') ?>">
1087 </li>
1088 </ul>
1089 </form>
1090
1091 <style type="text/css">
1092 form {display: inline;}
1093 #btnspace{margin-left:100px;}
1094 </style>
1095
1096 <table id="guildsTable" class="table table-striped table-hover">
1097 <tr class="yellow">
1098 <th><?= t('guild.aggressor') ?></th>
1099 <th><?= t('guild.information') ?></th>
1100 <th><?= t('guild.enemy') ?></th>
1101 </tr>
1102 <?php
1103 $i = 0;
1104 $wars = db()->fetchAll("
1105 SELECT
1106 `guild1`, `guild2`, `name1`, `name2`, `started`,
1107 ( SELECT `limit`
1108 FROM `znote_guild_wars`
1109 WHERE `znote_guild_wars`.`id` = `guild_wars`.`id`
1110 ) AS `limit`
1111 FROM `guild_wars`
1112 WHERE (`guild1` = ? OR `guild2` = ?)
1113 AND `status` = 0
1114 ORDER BY `started` DESC
1115 ", [$gid, $gid]);
1116 if (!empty($wars) || $wars !== false) {
1117 foreach($wars as $war):
1118 $i++;
1119 $row = "<tr>";
1120 $row .= "<td><a href='guilds.php?name={$war['name1']}'>{$war['name1']}</a></td>";
1121
1122 $row .= '<td><center>';
1123
1124 $row .= '<b>'. t('guild.pending_invite'). '</b>';
1125 $row .= '<br />'. t('guild.invited_on'). ' '. getClock($war['started'], true) .'.';
1126 $row .= "<br />The frag limit is set to {$war['limit']} frags.<br />";
1127
1128 if ($war['guild1'] == $gid) {
1129 $row .= '<br><form action="" method="post">';
1130 $row .= "<input type='hidden' name='cancel_war_invite' value='{$war['guild2']}' />";
1131 $row .= '<input type="submit" value="'. t('guild.cancel_btn') .'">';
1132 $row .= '</form>';
1133 } else if ($war['guild2'] == $gid) {
1134 $row .= '<br><form action="" method="post">';
1135 $row .= "<input type='hidden' name='accept_war_invite' value='{$war['guild1']}' />";
1136 $row .= '<input type="submit" value="'. t('guild.accept_btn') .'">';
1137 $row .= '</form>';
1138
1139 $row .= '<form action="" method="post">';
1140 $row .= "<input type='hidden' name='reject_war_invite' value='{$war['guild1']}' />";
1141 $row .= '<input type="submit" ID="btnspace" value="'. t('guild.reject_btn') .'">';
1142 $row .= '</form>';
1143 }
1144 $row .= '</center></td>';
1145 $row .= "<td><a href='guilds.php?name={$war['name2']}'>{$war['name2']}</a></td>";
1146 $row .= '</tr>';
1147 echo $row;
1148 endforeach;
1149 }
1150
1151 if ($i == 0) echo '<tr><td colspan="3"><center>'. t('guild.no_invites2'). '</center></td></tr>';
1152 ?>
1153 </table>
1154 <?php
1155 }
1156 } // end leader+
1157 } // end user_logged_in() === true
1158 ?>
1159 <!-- end leader and vice leader -->
1160
1161 <?php
1162 if ($config['guildwar_enabled'] === true) {
1163 $wardata = get_guild_wars();
1164 $war_exist = false;
1165 if ($wardata !== false) {
1166 foreach ($wardata as $wars) {
1167 if ($wars['guild1'] == $gid || $wars['guild2'] == $gid) $war_exist = true;
1168 }
1169 }
1170
1171 if ($war_exist) {
1172 ?>
1173 <h2><?= t('guild.war_overview') ?></h2>
1174 <table>
1175 <tr class="yellow">
1176 <td><?= t('guild.attacker') ?></td>
1177 <td><?= t('guild.defender') ?></td>
1178 <td>status:</td>
1179 <td>started:</td>
1180 </tr>
1181 <?php
1182 foreach ($wardata as $wars):
1183 if ($wars['guild1'] == $gid || $wars['guild2'] == $gid):
1184 $url = url("guildwar.php?warid=". $wars['id']);
1185 ?>
1186 <tr class="special" onclick="javascript:window.location.href='<?php echo $url; ?>'">
1187 <td><?php echo $wars['name1']; ?></td>
1188 <td><?php echo $wars['name2']; ?></td>
1189 <td><?php echo $config['war_status'][$wars['status']]; ?></td>
1190 <td><?php echo getClock($wars['started'], true); ?></td>
1191 </tr>
1192 <?php
1193 endif;
1194 endforeach;
1195 ?>
1196 </table>
1197 <?php
1198 }
1199 }
1200 ?>
1201
1202 <!-- leave guild with character -->
1203 <?php
1204 $bool = false;
1205 if (user_logged_in() === true) {
1206 for ($i = 0; $i < $char_count; $i++) {
1207 foreach ($players as $player) {
1208 if ($player['name'] == $characters[$i]) $bool = true;
1209 }
1210 }
1211 if ($bool) {
1212 $forumExist = db()->fetchOne("SELECT `id` FROM `znote_forum` WHERE `guild_id` = ? LIMIT 1;", [$gid]);
1213 if ($forumExist !== false) {
1214 ?> - <font size="4"><a href="forum.php?cat=<?php echo $forumExist['id']; ?>"><?= t('guild.visit_board') ?></a></font><br><br><br><?php
1215 }
1216 ?>
1217 <form action="" method="post">
1218 <ul>
1219 <li>
1220 <?= t('guild.leave_btn') ?>:<br>
1221 <select name="leave_guild">
1222 <option disabled><?= t('guild.with_placeholder') ?></option>
1223 <?php
1224 for ($i = 0; $i < $char_count; $i++) {
1225 foreach ($players as $player) {
1226 if ($player['name'] == $characters[$i]) {
1227 $data = get_player_guild_data($player['id']);
1228 if ($data['rank_level'] != 3) echo '<option value="'. $characters[$i] .'">'. $characters[$i] .'</option>';
1229 else echo '<option disabled>'. $characters[$i] .' [disabled:'. t('guild.leader'). ']</option>';
1230 }
1231 }
1232 }
1233 ?>
1234 </select>
1235 <input type="submit" value="<?= t('guild.leave_btn') ?>">
1236 </li>
1237 </ul>
1238 </form>
1239 <?php
1240 } // display form if user has a character in guild
1241 } // user logged in
1242 $guildOverviewHtml = ob_get_clean();
1243 view('guild_overview', ['guildOverviewHtml' => $guildOverviewHtml, 'guild' => $guild]);
1244} // end view specific guild
1245theme_close(); ?>
1246