Example #1
0
    /**
     * 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 . '&amp;change_priority&amp;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 . '&amp;change_priority&amp;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 . '&amp;change_priority&amp;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();
    }