/** * Endre posisjon for et medlem */ protected function change_priority() { ess::$b->page->add_title("Endre posisjon på medlem"); // har ikke merket av en spiller? if (!isset($_REQUEST['up_id']) && !isset($_REQUEST['up_ids'])) { ess::$b->page->add_message("Du må merke en eller flere spillere.", "error"); redirect::handle(); } // kontroller medlemmene $up_ids = isset($_REQUEST['up_ids']) ? array_map("intval", explode(",", $_REQUEST['up_ids'])) : array_map("intval", (array) $_REQUEST['up_id']); $priority_list = array(); $members = array(); $rank_points_low = null; // rankpoengene til spilleren med dårligst rank foreach ($up_ids as $up_id) { // er ikke medlem? if (!isset($this->ff->members['members'][$up_id])) { ess::$b->page->add_message('Spilleren <user id="' . $up_id . '" /> er ikke medlem av ' . $this->ff->type['refobj'] . '.', "error"); redirect::handle(); } $member = $this->ff->members['members'][$up_id]; // kan ikke endre posisjon på seg selv if ($member->id == login::$user->player->id && !$this->ff->mod) { ess::$b->page->add_message('Du kan ikke omplassere deg selv.'); redirect::handle(); } // eier kan ikke omplasseres if ($member->data['ffm_priority'] == 1 && !$this->ff->mod) { ess::$b->page->add_message(ucfirst($this->ff->type['priority'][1]) . " kan ikke omplasseres."); redirect::handle(); } // har høyere prioritering? if ($member->data['ffm_priority'] <= $this->ff->uinfo->data['ffm_priority'] && !$this->ff->mod) { ess::$b->page->add_message('Du kan ikke omplassere <user id="' . $member->id . '" /> som har høyere eller samme posisjon som deg.', "error"); redirect::handle(); } // sett opp rank informasjon for spilleren if ($rank_points_low === null || $member->data['up_points'] < $rank_points_low) { $rank_points_low = $member->data['up_points']; } $members[] = $member; $priority_list[] = $member->data['ffm_priority']; } // ingen medlemmer? $c = count($members); if ($c == 0) { ess::$b->page->add_message("Du må merke en eller flere spillere.", "error"); redirect::handle(); } // sorter slik at medlemmene med høyest posisjon kommer først array_multisort($priority_list, $members); ksort($priority_list); // sett opp nåværende prioritering hvis det kun er 1 spiller eller alle har samme prioritering $priority_old = array_unique($priority_list); if (count($priority_old) == 1) { $priority_old = $priority_old[0]; } else { $priority_old = null; } // rank info for den dårligste ranken $rank_info = game::rank_info($rank_points_low); $rank_number = $rank_info['number']; // hent oversikt over ledige plasser og fjern eier/medeier posisjon om nødvendig $limits_data = $this->ff->check_limits($members); if (!$this->ff->mod) { unset($limits_data['priorities'][1]); if ($this->ff->uinfo->data['ffm_priority'] > 1) { unset($limits_data['priorities'][2]); } } // valg posisjon? if ((isset($_POST['pick_priority']) || isset($_POST['priority'])) && validate_sid()) { // har ikke valgt posisjon? $priority = isset($_POST['priority']) && isset($limits_data['priorities'][$_POST['priority']]) ? $limits_data['priorities'][$_POST['priority']] : false; if (!isset($_POST['priority'])) { ess::$b->page->add_message("Du må velge en posisjon.", "error"); } elseif (!$priority || $priority['max'] == -1 && !$this->ff->mod) { ess::$b->page->add_message("Ugyldig posisjon.", "error"); } elseif ($rank_number < $priority['min_rank'] && !$this->ff->mod && $priority['priority'] != $priority_old) { ess::$b->page->add_message('En eller flere av spillerene valgt har ikke høy nok rank for å bli ' . $this->ff->type['priority'][$priority['priority']] . ".", "error"); } elseif ($priority['free'] < $c && !$this->ff->mod && $priority['priority'] != $priority_old) { ess::$b->page->add_message("Det er ingen ledige plasser som " . $this->ff->type['priority'][$priority['priority']] . ".", "error"); } elseif ($this->ff->type['parent'] && $priority['priority'] == 4 && $limits_data['priorities'][3]['members'] == 0) { ess::$b->page->add_message("Det finnes ingen spillere med posisjon {$this->ff->type['priority'][3]} du kan tilegne en {$this->ff->type['priority'][4]}. Du må først sette en spiller som {$this->ff->type['priority'][3]} før du kan sette en {$this->ff->type['priority'][4]}.", "error"); } elseif ($priority['priority'] == $priority_old && (!$this->ff->type['parent'] || $priority['priority'] != 4)) { ess::$b->page->add_message("Du må velge en annen posisjon enn den som er satt."); } else { // fjern de som er valgt og som allerede har denne prioriteringen if ($priority_old === null && ($priority['priority'] != 4 || !$this->ff->type['parent'])) { foreach ($members as $key => $member) { if ($member->data['ffm_priority'] == $priority['priority']) { unset($members[$key]); unset($priority_list[$key]); } } $c = count($members); } $parent = $this->pick_parent($priority, $members, null, 'medlemmer?ff_id=' . $this->ff->id . '&change_priority&up_ids=' . implode(",", $up_ids), ' <input type="hidden" name="change_priority" /> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />'); // fjern de som er valgt og som har samme parent if ($priority['priority'] == 4 && $this->ff->type['parent']) { foreach ($members as $key => $member) { if ($member->data['ffm_priority'] == $priority['priority'] && $member->data['ffm_parent_up_id'] == $parent) { unset($members[$key]); unset($priority_list[$key]); } } $c = count($members); } // godkjent? if (isset($_POST['confirm']) && validate_sid(false)) { // sorter slik at medlemmene med lavest posisjon kommer først array_multisort($priority_list, SORT_DESC, $members); // flytt spillerene $changed = array(); $error = array(); foreach ($members as $member) { // flytt spilleren $old_priority = $member->data['ffm_priority']; $old_parent = $member->data['ffm_parent_up_id']; if ($member->change_priority($priority['priority'], $parent)) { $changed[] = '<user id="' . $member->id . '" /> fra ' . $this->ff->type['priority'][$old_priority] . ($old_parent ? ' underordnet <user id="' . $old_parent . '" />' : ''); } else { $error[] = '<user id="' . $member->id . '" /> (' . $this->ff->type['priority'][$old_priority] . ($old_parent ? ' underordnet <user id="' . $old_parent . '" />' : '') . ')'; } } if (count($changed) == 1) { ess::$b->page->add_message("Du endret posisjonen til {$changed[0]} til " . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '.'); } elseif (count($changed) > 1) { ess::$b->page->add_message("Du endret posisjonene til følgende spillere til " . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . ':<ul><li>' . implode("</li><li>", $changed) . '</li></ul>'); } if (count($error) == 1) { ess::$b->page->add_message("Posisjonen til {$error[0]} kunne ikke bli endret til " . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '.', "error"); } elseif (count($error) > 1) { ess::$b->page->add_message("Posisjonene til følgende spillere kunne ikke bli satt til " . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . ':<ul><li>' . implode("</li><li>", $error) . '</li></ul>'); } redirect::handle(); } // vis bekreftskjema ess::$b->page->add_title("Bekreft endring av posisjon"); $width = 180; if ($c > 1) { $width = 300; } elseif ($parent || $members[0]->data['ffm_parent_up_id']) { $width = 300; } echo ' <div class="section" style="width: ' . $width . 'px"> <h1>Bekreft endring av posisjon</h1> <p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '&change_priority&up_ids=' . implode(",", $up_ids) . '">Tilbake</a></p> <boxes /> <form action="" method="post"> <input type="hidden" name="change_priority" /> <input type="hidden" name="up_ids" value="' . implode(",", $up_ids) . '" /> <input type="hidden" name="priority" value="' . $priority['priority'] . '" />' . ($parent ? ' <input type="hidden" name="parent" value="' . $parent . '" />' : '') . ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />'; if ($c == 1) { $member = $members[0]; echo ' <dl class="dd_right"> <dt>Spiller</dt> <dd>' . game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) . '</dd> <dt>Nåværende posisjon</dt> <dd>' . ucfirst($member->get_priority_name()) . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . '</dd> <dt>Ny posisjon</dt> <dd>' . ucfirst($this->ff->type['priority'][$priority['priority']]) . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '</dd> </dl>'; } else { $list = array(); foreach ($members as $member) { $list[] = '<li><user id="' . $member->id . '" /> (' . $member->get_priority_name() . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . ')</li>'; } echo ' <p>Spillere som flyttes:</p> <ul>' . implode("", $list) . '</ul> <dl class="dd_right"> <dt>Ny posisjon</dt> <dd>' . ucfirst($this->ff->type['priority'][$priority['priority']]) . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '</dd> </dl>'; } echo ($rank_number < $priority['min_rank'] ? ' <p>En eller flere spillere har i utgangspunktet for lav rank.</p>' : '') . ($priority['free'] < $c && $priority['priority'] != $priority_old ? ' <p>Det er i utgangspunktet ikke mange nok ledige plasser for denne posisjonen.</p>' : ''); // kontroller for underordnede spillere if ($this->ff->type['parent']) { $subs = array(); $pri3_count = 0; foreach ($members as $member) { if ($member->data['ffm_priority'] == 3) { $pri3_count++; } if ($member->data['ffm_priority'] == 3 && isset($this->ff->members['members_parent'][$member->id])) { foreach ($this->ff->members['members_parent'][$member->id] as $member_sub) { // hopp over om det er en av de som skal bytte plass if (in_array($member_sub->id, $up_ids)) { continue; } $subs[] = '<li><user id="' . $member_sub->id . '" />' . ($c == 1 ? '' : '(Underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />)') . '</li>'; } } } if (count($subs) > 0) { // er det noen pri3 etter alle blir kastet ut? $pri3 = count($this->ff->members['members_priority'][3]) - $pri3_count > 0; if ($c == 1) { echo ' <p>Medlemmet har følgende medlemmer underordnet seg:</p>'; } else { echo ' <p>Følgende medlemmer er underordnet av en av spillerene du har valgt:</p>'; } echo ' <ul>' . implode("", $subs) . '</ul>' . ($pri3 ? ' <p>Underordnede medlemmer vil bli flyttet til tilfeldige spillere med posisjon ' . $this->ff->type['priority'][3] . '.</p>' : ' <p>Spilleren med posisjonen ' . $this->ff->type['priority'][4] . ' som har vært medlem lengst bli utvalgt til ' . $this->ff->type['priority'][3] . '.') . '</p>'; } } echo ' <p class="c"> ' . show_sbutton("Endre posisjon", 'name="confirm"') . ' <a href="medlemmer?ff_id=' . $this->ff->id . '&change_priority&up_ids=' . implode(",", $up_ids) . '">Tilbake</a> </p> </form> </div>'; $this->ff->load_page(); } } ess::$b->page->add_title("Velg ny posisjon"); // vis oversikt over de ulike posisjonene man kan velge echo ' <div class="section" style="width: 400px"> <h1>Velg ny posisjon</h1> <p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a></p> <boxes /> <form action="" method="post">'; if ($c == 1) { $member = reset($members); echo ' <p>Valgt spiller: ' . game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) . ' (' . $member->get_priority_name() . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . ')</p>'; } else { $list = array(); foreach ($members as $member) { $list[] = '<li>' . game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) . ' (' . $member->get_priority_name() . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . ')</li>'; } echo ' <p>Valgte spillere:</p> <ul>' . implode("", $list) . '</ul>'; } echo ' <input type="hidden" name="change_priority" /> <input type="hidden" name="up_ids" value="' . implode(",", $up_ids) . '" /> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <p>Du må nå velge ny posisjon du ønsker ' . fword("spilleren", "spillerene", $c) . ' skal få i ' . $this->ff->type['refobj'] . '.</p>'; $this->pick_position($limits_data, $rank_info['number'], $members); echo ' <p class="c"> ' . show_sbutton("Velg posisjon", 'name="pick_priority"') . ' <a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a> </p> </form> </div>'; $this->ff->load_page(); }