Example #1
0
    /**
     * Invitere en spiller
     */
    protected function invite()
    {
        // hent oversikt over ledige plasser
        $limits_data = $this->ff->check_limits();
        // har vi noen ledige plasser?
        if ($limits_data['total_free'] == 0 && !$this->ff->mod) {
            ess::$b->page->add_message("Det er ingen ledige plasser i {$this->ff->type['refobj']}.", "error");
            redirect::handle();
        }
        ess::$b->page->add_title("Inviter spiller");
        $player = false;
        // begrensning i antall ff man kan være med i
        if ($this->ff->type['type'] == "familie") {
            $type_limit = ff::MAX_FAMILIES;
            $type_text = "broderskap";
            $type_where = "ff_type = 1";
        } else {
            $type_limit = ff::FIRMS_MEMBERS_LIMIT;
            $type_text = "firmaer";
            $type_where = "ff_type != 1";
        }
        // finne spiller?
        if (isset($_POST['player']) || isset($_REQUEST['up_id'])) {
            // hent spillerinformasjon
            $where = isset($_REQUEST['up_id']) ? 'up_id = ' . intval($_REQUEST['up_id']) : 'up_name = ' . \Kofradia\DB::quote($_POST['player']);
            $more = isset($_REQUEST['up_id']) ? '' : ' ORDER BY up_access_level = 0, up_last_online DESC LIMIT 1';
            $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT up_id, up_name, up_access_level, up_points, upr_rank_pos, uc_time, uc_info, COUNT(ff_id) ff_num\n\t\t\t\tFROM users_players\n\t\t\t\t\tLEFT JOIN users_players_rank ON upr_up_id = up_id\n\t\t\t\t\tJOIN users ON up_u_id = u_id\n\t\t\t\t\tLEFT JOIN users_contacts ON uc_u_id = u_id AND uc_contact_up_id = " . login::$user->player->id . " AND uc_type = 2\n\t\t\t\t\tLEFT JOIN ff_members ON ffm_up_id = up_id AND (ffm_status = 0 OR ffm_status = 1)\n\t\t\t\t\tLEFT JOIN ff ON ff_id = ffm_ff_id AND ff_is_crew = 0 AND ff_inactive = 0 AND {$type_where}\n\t\t\t\tWHERE {$where}\n\t\t\t\tGROUP BY up_id{$more}");
            $row = $result->fetch();
            // fant ikke spilleren?
            if (!$row || !$row['up_id']) {
                ess::$b->page->add_message("Fant ikke spilleren med " . (isset($_REQUEST['up_id']) ? "id #" . intval($_REQUEST['up_id']) : "navn <b>" . htmlspecialchars($_POST['player']) . "</b>") . ".", "error");
            } else {
                // er i FF?
                if (isset($this->ff->members['list'][$row['up_id']])) {
                    ess::$b->page->add_message('<user id="' . $row['up_id'] . '" /> er allerede foreslått, invitert eller medlem av ' . $this->ff->type['refobj'] . '.', "error");
                } elseif ($row['up_access_level'] == 0) {
                    ess::$b->page->add_message('<user id="' . $row['up_id'] . '" /> er død og kan ikke inviteres.', "error");
                } elseif ($row['uc_time'] && !$this->ff->mod) {
                    $reason = game::bb_to_html($row['uc_info']);
                    $reason = empty($reason) ? '' : ' Begrunnelse: ' . $reason;
                    ess::$b->page->add_message('Denne spilleren blokkerte deg ' . ess::$b->date->get($row['uc_time'])->format() . '. Du kan derfor ikke invitere spilleren til ' . $this->ff->type['refobj'] . '.' . $reason, "error");
                } elseif ($this->ff->data['ff_is_crew'] == 0 && $row['ff_num'] >= $type_limit && !$this->ff->mod) {
                    ess::$b->page->add_message("Spilleren er allerede medlem av eller invitert til for mange {$type_text}.", "error");
                } else {
                    $player = $row;
                }
            }
        }
        // har ikke funnet spiller?
        if (!$player || $_SERVER['REQUEST_METHOD'] == "GET") {
            // vis skjema for å finne spiller
            ess::$b->page->add_title("Velg spiller");
            echo '
<div class="section" style="width: 200px">
	<h1>Inviter spiller</h1>
	<p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a></p>
	<boxes />
	<form action="" method="post">
		<p>Skriv inn navn på spilleren du vil invitere til ' . $this->ff->type['refobj'] . '.</p>
		<dl class="dd_right">
			<dt>Spillernavn</dt>
			<dd><input type="text" name="player" value="' . htmlspecialchars(postval("player", $player ? $player['up_name'] : '')) . '" class="styled w100" /></dd>
		</dl>
		<p class="c">
			' . show_sbutton("Finn spiller") . '
			<a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a>
		</p>
	</form>
</div>';
            $this->ff->load_page();
        }
        // sett opp rank informasjon for spilleren
        $rank_info = game::rank_info($player['up_points'], $player['upr_rank_pos'], $player['up_access_level']);
        // fjern eier og medeier posisjonen om nødvendig
        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'])) {
            // 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_info['number'] < $priority['min_rank'] && !$this->ff->mod) {
                ess::$b->page->add_message('<user id="' . $row['up_id'] . '" /> har ikke høy nok rank for å bli ' . $this->ff->type['priority'][$priority['priority']] . ".", "error");
            } elseif ($priority['free'] == 0 && !$this->ff->mod) {
                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 && !isset($this->ff->members['members_priority'][3])) {
                ess::$b->page->add_message("Det finnes ingen {$this->ff->type['priority'][3]} du kan tilegne en {$this->ff->type['priority'][4]}. Du må først sette en spiller som <b>{$this->ff->type['priority'][3]}</b> før du kan invitere en {$this->ff->type['priority'][4]}.", "error");
            } else {
                $parent = $this->pick_parent($priority, null, $player, 'medlemmer?ff_id=' . $this->ff->id . '&amp;invite&amp;up_id=' . $player['up_id'], '
		<input type="hidden" name="pick_priority" />', true);
                // godkjent?
                if (isset($_POST['confirm']) && validate_sid(false)) {
                    // inviter spilleren
                    if ($this->ff->player_invite($player['up_id'], $priority['priority'], $parent)) {
                        ess::$b->page->add_message('<user id="' . $player['up_id'] . '" /> ble invitert til ' . $this->ff->type['refobj'] . ' som ' . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '.');
                        redirect::handle();
                    } else {
                        ess::$b->page->add_message("Noe gikk galt. Kunne ikke invitere spilleren.", "error");
                    }
                }
                // vis bekreftskjema
                ess::$b->page->add_title("Godkjenn invitasjon");
                echo '
<div class="section" style="width: ' . ($parent ? '220' : '150') . 'px">
	<h1>Godkjenn invitasjon</h1>
	<p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '&amp;invite&amp;up_id=' . $player['up_id'] . '">Tilbake</a></p>
	<boxes />
	<form action="" method="post">
		<input type="hidden" name="up_id" value="' . $player['up_id'] . '" />
		<input type="hidden" name="priority" value="' . $priority['priority'] . '" />
		<input type="hidden" name="pick_priority" />' . ($parent ? '
		<input type="hidden" name="parent" value="' . $parent . '" />' : '') . '
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
		<p>Informasjon:</p>
		<dl class="dd_right">
			<dt>Spiller</dt>
			<dd>' . game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level']) . '</dd>
			<dt>Posisjon</dt>
			<dd>' . ucfirst($this->ff->type['priority'][$priority['priority']]) . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '</dd>
		</dl>' . ($this->ff->data['ff_is_crew'] != 0 && $player['ff_num'] >= $type_limit ? '
		<p>Spilleren er egentlig medlem av eller invitert til for mange andre ' . $type_text . '.</p>' : '') . ($rank_info['number'] < $priority['min_rank'] ? '
		<p>Spilleren har i utgangspunktet for lav rank.</p>' : '') . ($priority['free'] == 0 ? '
		<p>Det er i utgangspunktet ingen ledige plasser for denne posisjonen.</p>' : '') . '
		<p class="c">
			' . show_sbutton("Inviter spiller", 'name="confirm"') . '
			<a href="medlemmer?ff_id=' . $this->ff->id . '&amp;invite&amp;up_id=' . $player['up_id'] . '">Tilbake</a>
		</p>
	</form>
</div>';
                $this->ff->load_page();
            }
        }
        ess::$b->page->add_title("Velg posisjon");
        // maks antall medlemmer en familie kan ha
        $members_limit_max = $this->ff->competition ? ff::MEMBERS_LIMIT_TOTAL_MAX_COMP : ff::MEMBERS_LIMIT_TOTAL_MAX;
        // vis oversikt over de ulike posisjonene man kan velge
        echo '
<div class="section" style="width: 400px">
	<h1>Inviter spiller</h1>
	<p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '&amp;invite">Tilbake</a></p>
	<boxes />
	<form action="" method="post">
		<p>Valgt spiller: ' . game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level']) . '</p>
		<input type="hidden" name="player" value="' . htmlspecialchars($player['up_name']) . '" />
		<input type="hidden" name="up_id" value="' . $player['up_id'] . '" />
		<p>Du må nå velge en posisjon du ønsker spilleren skal få i ' . $this->ff->type['refobj'] . '. Maks antall plasser i ' . $this->ff->type['refobj'] . ': ' . $limits_data['max'] . '.' . ($this->ff->type['type'] == "familie" && $limits_data['max'] < $members_limit_max ? ' <a href="panel?ff_id=' . $this->ff->id . '&amp;a=members_limit">Øk begrensning &raquo;</a>' : '') . '</p>';
        $this->pick_position($limits_data, $rank_info['number']);
        echo '
		<p class="c">
			' . show_sbutton("Velg posisjon", 'name="pick_priority"') . '
			<a href="medlemmer?ff_id=' . $this->ff->id . '&amp;invite&amp;up_id=' . $player['up_id'] . '">Tilbake</a>
		</p>
	</form>
</div>';
        $this->ff->load_page();
    }