/** * Redigere en artikkel */ protected function article_edit(ff_avis_artikkel $ffna) { ess::$b->page->add_title("Rediger artikkel"); // publisert? // redaktører kan redigere publiserte artikler - også sine egne - så lenge utgivelsen ikke er publisert if ($ffna->data['ffna_published'] != 0 && !$this->ff->mod) { if (!$this->ff->access(2)) { ess::$b->page->add_message("Artikkelen er publisert og kan ikke redigeres.", "error"); redirect::handle(); } elseif ($ffna->ffn && $ffna->ffn->data['ffn_published'] != 0) { ess::$b->page->add_message("Utgivelsen denne artikkelen tilhører er publisert. Artikkelen kan derfor ikke redigeres.", "error"); redirect::handle(); } } // lagre endringer? if (isset($_POST['title'])) { $title = trim(postval("title")); $text = trim(postval("text")); $text_plain = strip_tags(game::format_data($text)); // sjekk tittel if (mb_strlen($title) < 5) { ess::$b->page->add_message("Tittelen må inneholde minimum 5 tegn.", "error"); } elseif (mb_strlen($title) > 30) { ess::$b->page->add_message("Tittelen kan ikke inneholde mer enn 30 tegn.", "error"); } elseif (mb_strlen($text_plain) > 10000) { ess::$b->page->add_message("Innholdet kan ikke inneholde mer enn 10 000 bokstaver/tall.", "error"); } else { // ingen endringer? if ($title == $ffna->data['ffna_title'] && $text == $ffna->data['ffna_text']) { ess::$b->page->add_message("Ingen endringer ble utført."); } else { \Kofradia\DB::get()->exec("UPDATE ff_newspapers_articles SET ffna_title = " . \Kofradia\DB::quote($title) . ", ffna_text = " . \Kofradia\DB::quote($text) . ", ffna_updated_time = " . time() . " WHERE ffna_id = {$ffna->id}"); ess::$b->page->add_message("Endringene ble lagret."); // lagre i loggen? // hvis artikkelen er publisert er det kun moderator og redaktør som kan redigere // hvis det er en redaktør som endrer, lagre i loggen if ($ffna->data['ffna_published'] != 0 && !$this->ff->mod) { // data: ffna_id,up_id,ffna_up_id,ffna_title_org,ffna_title_new,ffna_text_old,ffna_text_new $data = array($ffna->data['ffna_id'], login::$user->player->id, $ffna->data['ffna_up_id'], $ffna->data['ffna_title'], $title, $ffna->data['ffna_text'], $text); $this->ff->add_log("article_edited", implode(":", array_map("urlencode", $data))); } } redirect::handle(); } } echo ' <p class="c">Rediger artikkel | <a href="avis?ff_id=' . $this->ff->id . '&a&ffna=' . $ffna->id . '">Tilbake</a></p> <form action="" method="post"> <div class="section center w400"> <h2>Rediger artikkel</h2> <dl class="dd_right dl_2x"> <dt>Tittel</dt> <dd><input type="text" name="title" value="' . htmlspecialchars(postval("title", $ffna->data['ffna_title'])) . '" maxlength="30" class="styled w200" /></dd> <dt>Innhold</dt> <dd><textarea name="text" rows="30" cols="10" class="w300">' . htmlspecialchars(postval("text", $ffna->data['ffna_text'])) . '</textarea></dd> </dl> <p class="c">' . show_sbutton("Lagre endringer") . '</p> </div> </form>'; }
/** * Behandle endring av beskrivelse */ protected function page_description_handle() { ess::$b->page->add_title("Beskrivelse for {$this->ff->type['refobj']}"); redirect::store("panel?ff_id={$this->ff->id}&a=beskrivelse"); // lagre? if (isset($_POST['description']) && isset($_POST['save']) && validate_sid(false)) { if ($_POST['description'] == $this->ff->data['ff_description']) { ess::$b->page->add_message("Beskrivelsen ble ikke endret."); redirect::handle(); } // oppdater \Kofradia\DB::get()->exec("UPDATE ff SET ff_description = " . \Kofradia\DB::quote($_POST['description']) . " WHERE ff_id = {$this->ff->id}"); ess::$b->page->add_message("Beskrivelsen er nå oppdatert."); $this->ff->add_log("description", login::$user->player->id, $this->ff->data['ff_description']); redirect::handle("panel?ff_id={$this->ff->id}"); } ess::$b->page->add_js_domready(' $("previewButton").addEvent("click", function() { $("previewContainer").set("html", "<p>Laster inn forhåndsvisning..</p>"); $("previewOuter").setStyle("display", "block"); if ($("previewOuter").getPosition().y > window.getScroll().y + window.getSize().y) { $("previewOuter").goto(-15); } preview($("textContent").get("value"), $("previewContainer")); });'); echo ' <div class="section" style="width: 500px"> <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <h2>Beskrivelse av ' . $this->ff->type['refobj'] . '</h2> <p class="h_right"><a href="panel?ff_id=' . $this->ff->id . '">Tilbake</a></p> <p>Dette er hva som vil stå øverst på forsiden av ' . $this->ff->type['refobj'] . ' og er ment som en beskrivelse av ' . $this->ff->type['refobj'] . '.</p> <p><textarea name="description" rows="20" cols="75" style="width: 490px" id="textContent">' . htmlspecialchars(postval("description", $this->ff->data['ff_description'])) . '</textarea></p> <p> ' . show_sbutton("Lagre", 'name="save" accesskey="s"') . ' ' . show_button("Forhåndsvis", 'accesskey="p" id="previewButton"') . ' </p> </form> </div> <div style="display: none" id="previewOuter"> <p class="c">Forhåndsvisning:</p> <div class="p" style="' . ($this->ff->type['type'] == "familie" ? 'background-color: #1A1A1A; width: 408px; border: 5px solid #292929; padding: 5px 5px; margin: 10px auto' : 'margin: 10px 0; padding: 5px 0; border: 5px solid #292929; border-left: 0; border-right: 0') . '" id="previewContainer"></div> </div>'; $this->ff->load_page(); }
/** * Kaste ut en spiller */ protected function kick_handle() { // valider sid validate_sid(); // kan vi ikke kaste ut noen spillere nå? if (login::$user->player->fengsel_check() || login::$user->player->bomberom_check() || login::$user->player->data['up_b_id'] != $this->ff->data['br_b_id'] || !$this->kick_hour_ok) { redirect::handle(); } // mangler spillervalg? if (!isset($_POST['player'])) { ess::$b->page->add_message("Du må velge en spiller du vil kaste ut.", "error"); redirect::handle(); } // er ikke spilleren i bomberommet? $up_id = (int) $_POST['player']; $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT u_email, up_id, up_name, up_access_level, up_brom_expire\n\t\t\tFROM users_players JOIN users ON up_u_id = u_id\n\t\t\tWHERE up_id = {$up_id} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire > " . time() . " AND up_access_level != 0"); $cost = $this->fam ? self::KICK_PLAYER_COST_FAMILIE : self::KICK_PLAYER_COST; $up = $result->fetch(); if (!$up) { ess::$b->page->add_message("Fant ikke spilleren.", "error"); redirect::handle(); } // sett opp skjema $form = \Kofradia\Form::getByDomain("other", login::$user); // har vi bekreftet ønsket om å kaste ut en spiller? if (isset($_POST['confirm']) && $form->validateHashOrAlert(null, "Kast ut spiller fra bomberom")) { \Kofradia\DB::get()->beginTransaction(); // forsøk å trekk fra pengene if (!$this->ff->bank(ff::BANK_BETALING, $cost, "Kaste ut spilleren [user id={$up['up_id']}] fra bomberommet")) { ess::$b->page->add_message("Det er ikke nok penger i " . ($this->fam ? "broderskapbanken" : "firmabanken") . ".", "error"); \Kofradia\DB::get()->commit(); } else { // finn en tilfeldig bydel å plassere spilleren $result = \Kofradia\DB::get()->query("SELECT id, name FROM bydeler WHERE active != 0 ORDER BY RAND() LIMIT 1"); $b_id = $result->fetchColumn(0); // forsøk å trekk ut spilleren fra bomberommet $a = \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_brom_expire = 0, up_b_id = {$b_id}\n\t\t\t\t\tWHERE up_id = {$up['up_id']} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire = {$up['up_brom_expire']} AND up_access_level != 0"); // feilet? if ($a == 0) { // avbryt transaksjon \Kofradia\DB::get()->rollback(); ess::$b->page->add_message("Kunne ikke kaste ut spilleren fra bomberommet.", "error"); } else { // legg til hendelse hos spilleren player::add_log_static("bomberom_kicked", login::$user->player->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$up['up_brom_expire']}", $this->ff->id, $up['up_id']); // send e-post til spilleren $email = new email(); $email->text = 'Hei, Din spiller ble kastet ut fra bomberommet av ' . ($this->fam ? 'broderskapet' : 'firmaet') . ' som styrer bomberommet. -- www.kofradia.no'; $email->send($up['u_email'], "Kastet ut av bomberom"); // firmalogg $this->ff->add_log("bomberom_kick", login::$user->player->id . ":{$up['up_id']}:{$up['up_brom_expire']}"); // logg putlog("DF", "BOMBEROM: {$up['up_name']} ble kastet ut av bomberommet {$this->ff->data['ff_name']} av " . login::$user->player->data['up_name'] . " " . ess::$s['spath'] . "/min_side?up_id={$up['up_id']}"); ess::$b->page->add_message('Du kastet ut <user id="' . $up['up_id'] . '" /> fra bomberommet. ' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' betalte et gebyr på ' . game::format_cash($cost) . '.'); \Kofradia\DB::get()->commit(); redirect::handle(); } } } ess::$b->page->add_title("Kaste ut spiller"); // vis informasjon echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Kaste ut spiller fra bomberommet<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Du er i ferd med å kaste ut ' . game::profile_link($up['up_id'], $up['up_name'], $up['up_access_level']) . ' fra bomberommet.</p> <p>Spilleren skal i utgangspunktet sitte i bomberommet til ' . ess::$b->date->get($up['up_brom_expire'])->format(date::FORMAT_SEC) . ' (' . game::counter($up['up_brom_expire'] - time()) . ' gjenstår).</p> <p>For å kaste ut spilleren må det betales en avgift på <b>' . game::format_cash($cost) . '</b> som betales fra ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '.</p>'; // har vi ikke nok penger i firmakontoen? if ($this->ff->data['ff_bank'] < $cost) { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket kun ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto, noe som ikke er nok. ' . ($this->ff->access(1) ? '<a href="' . ess::$s['relative_path'] . '/ff/banken?ff_id=' . $this->ff->id . '">Sett inn penger på ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '</a>' : '<a href="' . ess::$s['relative_path'] . '/ff/panel?ff_id=' . $this->ff->id . '">Donér til ' . ($this->fam ? 'broderskapet' : 'firmaet') . '</a>') . ' først for å kunne kaste ut spilleren.</p> <p class="c"><a href="bomberom?ff_id=' . $this->ff->id . '">Tilbake</a></p>'; } else { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto.</p> <form action="" method="post"> ' . $form->getHTMLInput() . ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="player" value="' . $up['up_id'] . '" /> <input type="hidden" name="kick" /> <p class="c">' . show_sbutton("Bekreft, kast ut spilleren", 'name="confirm"') . ' <a href="bomberom?ff_id=' . $this->ff->id . '">Avbryt</a></p> </form>'; } echo ' </div> </div>'; $this->ff->load_page(); }
/** * Endre posisjon * @param int $priority hvilken posisjon * @param int $parent underordnet hvem * @param bool $anonymous anonym handling (med tanke på loggen til brukeren) */ public function change_priority($priority, $parent = NULL, $anonymous = false) { if (!$anonymous && !login::$logged_in) { throw new HSNotLoggedIn(); } global $_game; $priority = (int) $priority; $parent = (int) $parent; $action_player = $anonymous ? 0 : login::$user->player->id; $sell = $anonymous == "sell"; $old_priority = $this->data['ffm_priority']; $old_parent = $this->data['ffm_parent_up_id']; // ikke medlem? if ($this->status != self::STATUS_MEMBER || $this->crew) { throw new HSException("Brukeren er ikke medlem av FF."); } // ikke gyldig posisjon? if (!isset($this->ff->type['priority'][$priority])) { throw new HSException("Ugyldig posisjon."); } // kan ikke ha parent? if (!empty($parent) && $priority != 4) { throw new HSException("Kun soldiers kan ha parent."); } // ugyldig parent? if ($parent == $this->id) { throw new HSException("Du kan ikke sette brukeren som parent av seg selv."); } // ingenting endret if ($priority == $this->data['ffm_priority'] && $parent == $this->data['ffm_parent_up_id']) { return false; } // sjekk om brukeren er involvert i salg av FF if (!$sell) { $this->sell_remove(); } // flytt medlemmet \Kofradia\DB::get()->exec("UPDATE ff_members SET ffm_priority = {$priority}, ffm_parent_up_id = {$parent} WHERE ffm_ff_id = {$this->ff->id} AND ffm_up_id = {$this->id}"); // kun endret overordnet? if ($priority == $this->data['ffm_priority']) { // brukerlogg $info = $this->ff->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$this->data['ffm_parent_up_id']}:{$parent}"; player::add_log_static("ff_member_parent", $info, $action_player, $this->id); // FF-logg $this->ff->add_log("member_parent", "{$action_player}:{$this->id}:{$this->data['ffm_parent_up_id']}:{$parent}"); } elseif (!$sell) { // brukerlogg $info = $this->ff->id . ":" . urlencode($this->ff->data['ff_name']) . ":" . urlencode($this->ff->type['priority'][$this->data['ffm_priority']]) . ":" . urlencode($this->ff->type['priority'][$priority]) . ":{$this->data['ffm_parent_up_id']}:{$parent}"; player::add_log_static("ff_member_priority", $info, $action_player, $this->id); // FF-logg $this->ff->add_log("member_priority", "{$action_player}:{$this->id}:" . urlencode($this->ff->type['priority'][$this->data['ffm_priority']]) . ":" . urlencode($this->ff->type['priority'][$priority]) . ":{$this->data['ffm_parent_up_id']}:{$parent}"); } // var capo før? if ($this->data['ffm_priority'] == 3 && $priority != 3) { $this->leave_capo_priority(); } // reattach $this->data['ffm_priority'] = $priority; $this->data['ffm_parent_up_id'] = $parent; $this->reattach(); // trigger player::get($this->id)->trigger("ff_priority_change", array("ff" => $this->ff, "member" => $this, "priority_old" => $old_priority, "parent_old" => $old_parent, "up_id" => $action_player)); return true; }