示例#1
0
文件: avis.php 项目: Kuzat/kofradia
    /**
     * 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 . '&amp;a&amp;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>';
    }
示例#2
0
文件: panel.php 项目: Kuzat/kofradia
    /**
     * 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();
    }
示例#3
0
    /**
     * 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();
    }
示例#4
0
 /**
  * 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;
 }