diff --git a/system/pages/guilds/change_rank.php b/system/pages/guilds/change_rank.php index f0503f40..4ceaaf49 100644 --- a/system/pages/guilds/change_rank.php +++ b/system/pages/guilds/change_rank.php @@ -64,9 +64,94 @@ foreach($account_players as $player) } if($guild_vice) +{ + if(isset($_REQUEST['todo']) && $_REQUEST['todo'] === 'save') + { + $player_name = stripslashes($_REQUEST['name']); + $new_rank = (int) $_REQUEST['rankid']; + if(!Validator::characterName($player_name)) + $errors[] = 'Invalid player name format.'; + $rank = new OTS_GuildRank(); + $rank->load($new_rank); + if(!$rank->isLoaded()) + $errors[] = "Rank with this ID doesn't exist."; + if($level_in_guild <= $rank->getLevel() && !$guild_leader) + $errors[] = "You can't set ranks with equal or higher level than your."; + if(empty($errors)) + { + $player_to_change = new OTS_Player(); + $player_to_change->find($player_name); + if(!$player_to_change->isLoaded()) + $errors[] = "Player with name ' . $player_name . ' doesn't exist."; + else + { + $player_in_guild = false; + if($guild->getName() === $player_to_change->getRank()->getGuild()->getName() || $guild_leader) + { + $player_in_guild = true; + $player_has_lower_rank = false; + if($guild_leader || $player_to_change->getRank()->getLevel() < $level_in_guild) + $player_has_lower_rank = true; + } + } + $rank_in_guild = false; + foreach($rank_list as $rank_from_guild) + if($rank_from_guild->getId() === $rank->getId()) + $rank_in_guild = true; + if(!$player_in_guild) + $errors[] = 'This player isn\'t in your guild.'; + if(!$rank_in_guild) + $errors[] = 'This rank isn\'t in your guild.'; + if(!$player_has_lower_rank) + $errors[] = 'This player has higher rank in guild than you. You can\'t change his/her rank.'; + } + + if(empty($errors)) + { + $player_to_change->setRank($rank); + $twig->display('success.html.twig', array( + 'title' => 'Rank Changed', + 'description' => 'Rank of player '.$player_to_change->getName().' has been changed to '.$rank->getName().'.', + 'custom_buttons' => '' + )); + } + else { + $twig->display('error_box.html.twig', array('errors' => $errors)); + } + } + + $result = getPlayersWithLowerRank($rank_list, $guild_leader, $db, $level_in_guild, $guild); + + $twig->display('guilds.change_rank.html.twig', array( + 'players' => isset($result['players']) ? $result['players'] : array(), + 'guild_name' => $guild->getName(), + 'ranks' => $result['ranks'] + )); +} +else { + echo 'Error. You are not a leader or vice leader in guild ' . $guild->getName(); + $twig->display('guilds.back_button.html.twig', array( + 'new_line' => true, + 'action' => getLink('guilds') . '/' . $guild->getName() + )); +} + +/** + * @param OTS_GuildRanks_List $rank_list + * @param $guild_leader + * @param OTS_DB_MySQL $db + * @param int $level_in_guild + * @param OTS_Guild $guild + * @return array + * @throws E_OTS_NotLoaded + */ +function getPlayersWithLowerRank($rank_list, $guild_leader, $db, $level_in_guild, $guild) { $rid = 0; $sid = 0; + /** + * @var OTS_GuildRank $rank + */ foreach($rank_list as $rank) { if($guild_leader || $rank->getLevel() < $level_in_guild) @@ -75,13 +160,15 @@ if($guild_vice) $ranks[$rid]['1'] = $rank->getName(); $rid++; - if($db->hasColumn('players', 'rank_id')) - $players_with_rank = $db->query('SELECT `id`, `rank_id` FROM `players` WHERE `rank_id` = ' . $rank->getId() . ' AND `deleted` = 0;'); - else + if($db->hasTable(GUILD_MEMBERS_TABLE)) { $players_with_rank = $db->query('SELECT `players`.`id` as `id`, `' . GUILD_MEMBERS_TABLE . '`.`rank_id` as `rank_id` FROM `players`, `' . GUILD_MEMBERS_TABLE . '` WHERE `' . GUILD_MEMBERS_TABLE . '`.`rank_id` = ' . $rank->getId() . ' AND `players`.`id` = `' . GUILD_MEMBERS_TABLE . '`.`player_id` ORDER BY `name`;'); + } + else { + $players_with_rank = $db->query('SELECT `id`, `rank_id` FROM `players` WHERE `rank_id` = ' . $rank->getId() . ' AND `deleted` = 0;'); + } $players_with_rank_number = $players_with_rank->rowCount(); - if(count($players_with_rank) > 0) + if($players_with_rank_number > 0) { foreach($players_with_rank as $result) @@ -91,7 +178,7 @@ if($guild_vice) if(!$player->isLoaded()) continue; - if($guild->getOwner()->getId() != $player->getId() || $guild_leader) + if($guild_leader || $guild->getOwner()->getId() !== $player->getId()) { $players_with_lower_rank[$sid][0] = $player->getName(); $players_with_lower_rank[$sid][1] = $player->getName().' ('.$rank->getName().')'; @@ -101,109 +188,6 @@ if($guild_vice) } } } - if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') - { - $player_name = stripslashes($_REQUEST['name']); - $new_rank = (int) $_REQUEST['rankid']; - if(!Validator::characterName($player_name)) - $change_errors[] = 'Invalid player name format.'; - $rank = new OTS_GuildRank(); - $rank->load($new_rank); - if(!$rank->isLoaded()) - $change_errors[] = 'Rank with this ID doesn\'t exist.'; - if($level_in_guild <= $rank->getLevel() && !$guild_leader) - $change_errors[] = 'You can\'t set ranks with equal or higher level than your.'; - if(empty($change_errors)) - { - $player_to_change = new OTS_Player(); - $player_to_change->find($player_name); - if(!$player_to_change->isLoaded()) - $change_errors[] = 'Player with name '.$player_name.' doesn\'t exist.'; - else - { - $player_in_guild = false; - if($guild->getName() == $player_to_change->getRank()->getGuild()->getName() || $guild_leader) - { - $player_in_guild = true; - $player_has_lower_rank = false; - if($player_to_change->getRank()->getLevel() < $level_in_guild || $guild_leader) - $player_has_lower_rank = true; - } - } - $rank_in_guild = false; - foreach($rank_list as $rank_from_guild) - if($rank_from_guild->getId() == $rank->getId()) - $rank_in_guild = true; - if(!$player_in_guild) - $change_errors[] = 'This player isn\'t in your guild.'; - if(!$rank_in_guild) - $change_errors[] = 'This rank isn\'t in your guild.'; - if(!$player_has_lower_rank) - $change_errors[] = 'This player has higher rank in guild than you. You can\'t change his/her rank.'; - } - if(empty($change_errors)) - { - $player_to_change->setRank($rank); - $twig->display('success.html.twig', array( - 'title' => 'Rank Changed', - 'description' => 'Rank of player '.$player_to_change->getName().' has been changed to '.$rank->getName().'.', - 'custom_buttons' => '' - )); - - unset($players_with_lower_rank); - unset($ranks); - $rid = 0; - $sid= 0; - foreach($rank_list as $rank) - { - if($guild_leader || $rank->getLevel() < $level_in_guild) - { - $ranks[$rid]['0'] = $rank->getId(); - $ranks[$rid]['1'] = $rank->getName(); - $rid++; - - if($db->hasColumn('players', 'rank_id')) - $players_with_rank = $db->query('SELECT `id`, `rank_id` FROM `players` WHERE `rank_id` = ' . $rank->getId() . ' AND `deleted` = 0;'); - else - $players_with_rank = $db->query('SELECT `players`.`id` as `id`, `' . GUILD_MEMBERS_TABLE . '`.`rank_id` as `rank_id` FROM `players`, `' . GUILD_MEMBERS_TABLE . '` WHERE `' . GUILD_MEMBERS_TABLE . '`.`rank_id` = ' . $rank->getId() . ' AND `players`.`id` = `' . GUILD_MEMBERS_TABLE . '`.`player_id` ORDER BY `name`;'); - - $players_with_rank_number = $players_with_rank->rowCount(); - if(count($players_with_rank) > 0) - { - foreach($players_with_rank as $result) - { - $player = new OTS_Player(); - $player->load($result['id']); - if(!$player->isLoaded()) - continue; - - if($guild->getOwner()->getId() != $player->getId() || $guild_leader) - { - $players_with_lower_rank[$sid][0] = $player->getName(); - $players_with_lower_rank[$sid][1] = $player->getName().' ('.$rank->getName().')'; - $sid++; - } - } - } - } - } - } - else - { - $twig->display('error_box.html.twig', array('errors' => $change_errors)); - } - } - $twig->display('guilds.change_rank.html.twig', array( - 'players' => $players_with_lower_rank, - 'guild_name' => $guild->getName(), - 'ranks' => $ranks - )); -} -else { - echo 'Error. You are not a leader or vice leader in guild ' . $guild->getName(); - $twig->display('guilds.back_button.html.twig', array( - 'new_line' => true, - 'action' => getLink('guilds') . '/' . $guild->getName() - )); + return array('players' => $players_with_lower_rank, 'ranks' => $ranks); } \ No newline at end of file