/** * 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 . '&invite&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 . '&invite&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 . '&invite&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 . '&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 . '&a=members_limit">Øk begrensning »</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 . '&invite&up_id=' . $player['up_id'] . '">Tilbake</a> </p> </form> </div>'; $this->ff->load_page(); }