/** * Hent Facebook-cache */ protected function get_facebook_cache() { // har vi cache? $data = cache::fetch("facebook_posts"); if ($data) { return $data; } // authentiser $app_id = KOF_FB_APP_ID; $app_secret = KOF_FB_APP_SECRET; if (!$app_id || !$app_secret) { return null; } $ret = @file_get_contents("https://graph.facebook.com/oauth/access_token?client_id={$app_id}&client_secret={$app_secret}&grant_type=client_credentials"); if ($ret === false) { // kunne ikke hente data putlog("CREWCHAN", "Henting av Facebook-data feilet."); cache::store("facebook_posts", array()); } $info = null; parse_str($ret, $info); // hent JSON $json = @file_get_contents("https://graph.facebook.com/kofradia/posts?access_token={$info['access_token']}"); $data = json_decode($json, true); cache::store("facebook_posts", $data); return $data; }
/** * Sjekk etter nye ting */ public static function check_new($data) { global $_base, $_game; $last_prev = isset(game::$settings['wordpress_last']) ? intval(game::$settings['wordpress_last']['value']) : false; $last = 0; // hent siste data $last_data = isset(game::$settings['wordpress_last_data']) ? unserialize(game::$settings['wordpress_last_data']['value']) : NULL; // reverser data så nyeste kommer til slutt $data = array_reverse($data); // gå gjennom og se om noe er nyere $time_old = time() - 600; foreach ($data as $row) { $last = max($row['time'], $last); // ny? if ($last_prev !== false && $row['time'] > $last_prev) { // loggmelding $time = $row['time'] < $time_old ? ' (' . $_base->date->get($row['time'])->format() . ')' : ''; putlog("INFO", '%bNytt innlegg i bloggen:%b %u' . $row['title'] . '%u' . $time . ' ' . $row['link']); } } // lagre hvis det var noe nytt if ($last > 0 && ($last_prev === false || $last_prev < $last || isset($last_data) && ($row['link'] != $last_data['link'] || $row['title'] != $last_data['title']))) { $data = \Kofradia\DB::quote(serialize($row)); \Kofradia\DB::get()->exec("REPLACE INTO settings SET name = 'wordpress_last', value = {$last}"); \Kofradia\DB::get()->exec("REPLACE INTO settings SET name = 'wordpress_last_data', value = {$data}"); } }
/** * Oppdater en Hall of Fame (oppnådd) */ protected static function set_data($name, $sub, $data, $extra = null) { $a = \Kofradia\DB::get()->exec("\n\t\t\tINSERT IGNORE INTO hall_of_fame\n\t\t\tSET\n\t\t\t\thof_name = " . \Kofradia\DB::quote($name) . ",\n\t\t\t\thof_sub = " . \Kofradia\DB::quote($sub) . ",\n\t\t\t\thof_time = " . time() . ",\n\t\t\t\thof_data = " . \Kofradia\DB::quote(serialize($data))); $affected = $a > 0; // logg list($subject, $url) = self::get_subject($name, $extra); $text = self::get_text($name, $sub, $data); putlog("INFO", "%bHALL OF FAME:%b %u" . $subject . "%u ble " . $text . " {$url}"); // spillerlogg $up = null; if ($name != "familie" && $name != "familie_rank") { $up = $extra; } if ($name == "ff_owner") { $up = $extra[1]; } if ($up) { $up->add_log("hall_of_fame", $text); } // ff-logg if ($name == "familie") { $extra->add_log("info", 'Broderskapet ble det første broderskap i spillet og havnet på <a href="&rpath;/hall_of_fame">Hall of Fame</a>!'); } elseif ($name == "familie_rank") { $extra->add_log("info", 'Broderskapet har for øyeblikket flest poeng av alle broderskap på spillet i historien og havnet på <a href="&rpath;/hall_of_fame">Hall of Fame</a>!'); } self::cache_load(true); return $affected; }
/** Send en bestemt artikkel på e-post */ protected function send_email($row) { $this->email->text('Hei, Siden du ikke lengre er med i avisfirmaet "' . $row['ff_name'] . '" har din artikkel blitt slettet fordi den ikke tilhørte noen utgivelse. I tilfelle du kanskje ønsker å beholde teksten fra artikkelen, sender vi den på e-post. Avisfirma: ' . $row['ff_name'] . ' <' . ess::$s['path'] . '/ff/?ff_id=' . $row['ff_id'] . '> Tittel: ' . $row['ffna_title'] . ' Opprettet: ' . ess::$b->date->get($row['ffna_created_time'])->format(date::FORMAT_SEC) . ($row['ffna_updated_time'] ? ' Sist oppdatert: ' . ess::$b->date->get($row['ffna_updated_time'])->format(date::FORMAT_SEC) : '') . ($row['ffna_published'] ? ' Publisert: ' . ess::$b->date->get($row['ffna_published_time'])->format(date::FORMAT_SEC) : '') . ' Pris: ' . game::format_cash($row['ffna_price']) . ' Innhold: -- START -- ' . $row['ffna_text'] . ' -- SLUTT -- -- Kofradia.no Denne e-posten er sendt til ' . $row['u_email'] . ' som ' . ($row['up_access_level'] == 0 ? 'tidligere tilhørte' : 'tilhører') . ' ' . $row['up_name'] . ' ' . ess::$s['path']); $this->email->format(); mailer::add_emails($this->email, $row['u_email'], "Din tidligere artikkel: {$row['ffna_title']} - Kofradia", true); putlog("CREWCHAN", "AVISARTIKKEL SLETTET: E-post planlagt for utsendelse. %c4Mailer scriptet må kjøres!"); }
/** * Juster kapasiteten i bomberommene */ public static function adjust_capacity() { // finn antall pålogget siste 48 timer $expire = time() - 86400 * 2; $result = \Kofradia\DB::get()->query("SELECT COUNT(*) FROM users_players WHERE up_access_level != 0 AND up_last_online > {$expire}"); $ant_online = $result->fetchColumn(0); // for julaften og nyttår $d = array("12-24", "12-30", "12-31"); $f = 1; if (in_array(ess::$b->date->get()->format("m-d"), $d)) { $f = 3; // 3 ganger så mange plasser } // antall som skal fordeles (minimum 5 stk) $ant_fordeles = max(5, ceil($ant_online * self::CAPACITY_FACTOR * $f)); \Kofradia\DB::get()->beginTransaction(); // hent ut alle bomberommene $result = \Kofradia\DB::get()->query("SELECT ff_id, ff_params FROM ff WHERE ff_type = 4 AND ff_inactive = 0 FOR UPDATE"); $bomberom = array(); while ($row = $result->fetch()) { $row['rest'] = 0; // antall ekstra plasser det skal settes av (de som blir fordelt tilfeldig) $bomberom[] = $row; } // ingen bomberom? $ant_bomberom = count($bomberom); if ($ant_bomberom == 0) { putlog("LOG", "BOMBEROM KAPASITET: Ingen bomberom eksisterer."); \Kofradia\DB::get()->commit(); return; } // fordel plasser på bomberommene $per_bomberom = floor($ant_fordeles / $ant_bomberom); $rest = $ant_fordeles % $ant_bomberom; // eksta å fordele tilfeldig? if ($rest > 0) { // plukk ut tilfeldige bomberom $tilfeldige = (array) array_rand($bomberom, $rest); foreach ($tilfeldige as $key) { $bomberom[$key]['rest']++; } } // oppdater bomberommene foreach ($bomberom as $row) { // antall bomberommet skal ha plass til $ant = $row['rest'] + $per_bomberom; // frihavnen får dobbelt så mange plasser if ($row['ff_id'] == 44) { $ant += $per_bomberom; } // oppdater $params = new params($row['ff_params']); $params->update("bomberom_kapasitet", $ant); // lagre \Kofradia\DB::get()->exec("UPDATE ff SET ff_params = " . \Kofradia\DB::quote($params->build()) . " WHERE ff_id = {$row['ff_id']}"); } // lagre \Kofradia\DB::get()->commit(); }
/** * Tunnel til putlog funksjonen * @return unknown */ protected static function putlog(Category $forum, $location, $msg) { // ff? if ($forum->ff) { return putlog("FF", ucfirst($forum->ff->type['refobj']) . " {$forum->ff->data["ff_name"]} - " . $msg); } return putlog($location, $msg); }
/** * Legg til søknad */ public static function add($type, $params, $reason, $rel_id = NULL) { global $_base, $__server; $type = (int) $type; $rel_id = $rel_id === NULL ? 'NULL' : intval($rel_id); // kontroller typen if (!isset(self::$types[$type])) { throw new HSException("Fant ikke typen."); } // legg til \Kofradia\DB::get()->exec("INSERT INTO div_soknader SET ds_type = {$type}, ds_up_id = " . self::up_id() . ", ds_rel_id = {$rel_id}, ds_time = " . time() . ", ds_reason = " . \Kofradia\DB::quote($reason) . ", ds_params = " . \Kofradia\DB::quote(serialize($params))); // oppdater cache tasks::set("soknader", \Kofradia\DB::get()->query("SELECT COUNT(ds_id) FROM div_soknader WHERE ds_reply_decision = 0")->fetchColumn(0)); // logg putlog("NOTICE", "%bNY SØKNAD:%b {$__server['https_path']}{$__server['relative_path']}/crew/soknader"); return \Kofradia\DB::get()->lastInsertId(); }
public function __construct() { // fjern alle kulene som ikke er kjøpt allerede \Kofradia\DB::get()->exec("TRUNCATE bullets"); // sett opp tidsperiode $this->get_time_period(); // sett opp firmaene hvor kulene skal bli fordelt mellom $this->get_ff_list(); // har vi ingen firmaer? if (count($this->ff_list) == 0) { putlog("CREWCHAN", "KULEPLANLEGGING: Det er ingen firmaer som kan selge kuler."); return; } // finn ut antall kuler vi skal fordele til hvert firma $this->get_count(); // logg antall kuler putlog("CREWCHAN", "KULEPLANLEGGING: {$this->count_total} kuler planlagt for salg."); // legg til kulene i databasen $this->add(); }
protected function load_user() { $user = login::$user; // vise en spesiell bruker? if (isset($_GET['u_id']) && access::has("admin")) { // hent bruker $user = user::get((int) $_GET['u_id']); // fant ikke? if (!$user) { echo ' <h1>Meldinger</h1> <p>Fant ingen bruker med ID <b>' . htmlspecialchars($_GET['u_id']) . '</b>.</p>'; $this->load_page(); } $this->show_deleted = true; } $this->inbox = new user_innboks($user); // logg visning av innboks putlog("PROFILVIS", "%c5%bVIS-MELDINGER:%b%c %u" . login::$user->player->data['up_name'] . "%u ({$_SERVER['REQUEST_URI']})"); // lagre redirect adresse redirect::store($this->addr()); }
/** * Handle notify URLs from PayPal */ public function action_notify() { file_put_contents(PATH_ROOT . "/paypal.log", print_r($_POST, true), FILE_APPEND); // TODO: remove this when tested on production if (!isset($_POST['receiver_email']) || $_POST['receiver_email'] != '*****@*****.**') { die; } // should really check for duplicates, but we don't // but it must be "completed" if (!isset($_POST['payment_status']) || $_POST['payment_status'] != 'Completed') { die; } // verify it $verify = Donation::verifyPayPalData($_POST); if (!$verify) { die; } // check for user etc $custom = postval("custom"); if (!preg_match('~^(.*):(.*);public=(0|1)$~', $custom, $matches)) { die; } trigger_error("should add"); $player = null; if ($matches[1] != "gjest") { // find this player $result = DB::get()->query("\n\t\t\t\tSELECT up_id\n\t\t\t\tFROM users_players\n\t\t\t\t\tLEFT JOIN users ON up_u_id = u_id\n\t\t\t\t\tLEFT JOIN sessions ON u_id = ses_u_id\n\t\t\t\tWHERE ses_id = " . DB::quote($matches[1]) . " AND up_id = " . DB::quote($matches[2]) . " LIMIT 1"); if ($up_id = $result->fetchColumn(0)) { $player = \player::get($up_id); } } $time = \ess::$b->date->parse(postval("payment_date")); // add it $d = Donation::create(postval("mc_gross"), $time, $matches[3] ? $player->id : null); putlog("CREWCHAN", sprintf("%%uDONASJON:%%u %s %s ble donert av %s", postval("mc_currency"), postval("mc_gross"), $player ? $player->data['up_name'] . ($matches[3] ? ' (synlig)' : ' (som anonym)') : 'anonym gjest')); // no output die; }
/** * Behandle angrep */ protected function handle_attack() { // har vi ingen kuler? if (login::$user->player->data['up_weapon_bullets'] == 0) { return; } $bullets = max(0, (int) postval("kuler")); // har vi ikke så mange kuler? if ($bullets > login::$user->player->data['up_weapon_bullets']) { ess::$b->page->add_message("Du har ikke så mange kuler.", "error"); return; } // har ikke skrevet inn noe? if ($bullets == 0) { ess::$b->page->add_message("Du må fylle inn antall kuler du ønsker å benytte.", "error"); return; } // er offeret i fengsel? if ($this->up_offer->fengsel_check()) { ess::$b->page->add_message('<user id="' . $this->up_offer->id . '" /> er i fengsel og kan ikke angripes nå.', "error"); return; } // kontroller skjema if (!$this->form->validateHashOrAlert(null, "Angrip spiller: {$this->up_offer->data['up_name']}")) { return; } // oppdater tidspunkt for siste angrep \Kofradia\DB::get()->exec("UPDATE users_players SET up_df_time = " . time() . " WHERE up_id = " . login::$user->player->id); // er i annen bydel, bomberom eller vi klarte ikke å finne spilleren? $not_found_b = $this->up_offer->data['up_b_id'] != login::$user->player->data['up_b_id']; $not_found_brom = $this->up_offer->bomberom_check(); $prob = rand(1, 100); $find_prob = $this->up_offer->calc_find_player_prob() * 100; $not_found_prob = $prob > $find_prob; if ($not_found_b || $not_found_brom || $not_found_prob) { // logg if ($not_found_b) { $reason = 'Ikke i samme bydel (' . login::$user->player->bydel['name'] . ' mot ' . $this->up_offer->bydel['name'] . ').'; if ($not_found_brom) { $reason .= ' Offeret er også i bomberom.'; } } elseif ($not_found_brom) { $reason = 'Offeret er i bomberom.'; } else { $reason = 'Traff ikke på sannsynligheten (' . $prob . ' > ' . ceil($find_prob) . ').'; } putlog("DF", "ANGREP FEILET: " . login::$user->player->data['up_name'] . " skulle angripe%c3 " . $this->up_offer->data['up_name'] . "%c med {$bullets} " . fword("kule", "kuler", $bullets) . ". {$reason}"); // øk telleren over antall ganger vi ikke har funnet spiller \Kofradia\DB::get()->exec("UPDATE users_players SET up_attack_failed_num = up_attack_failed_num + 1 WHERE up_id = " . login::$user->player->id); // øk telleren over antall ganger vi ikke har funnet spiller (for familien spilleren er medlem i) login::$user->player->attack_ff_update("failed"); // øk teller for ff for offeret $this->up_offer->attacked_ff_update("failed"); // sett i fengsel i 2-4 minutter $fengsel = login::$user->player->fengsel_rank(100, true, true, rand(120, 240)); // mist energi login::$user->player->energy_use(self::ENERGY_NOT_FOUND); // øk anti-bot $this->antibot->increase_counter(); // trigger login::$user->player->trigger("attack_notfound", array("not_found_b" => $not_found_b, "not_found_brom" => $not_found_brom, "not_found_prob" => $not_found_prob, "bullets" => $bullets, "up" => $this->up_offer)); // vis resultat og last inn siden $this->attack_result_notfound_show($fengsel, $bullets); redirect::handle(); } // angrip spilleren $result = login::$user->player->weapon->attack($this->up_offer, $bullets); // sett ned antall kuler spilleren har \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = GREATEST(0, up_weapon_bullets - {$bullets}) WHERE up_id = " . login::$user->player->id); login::$user->player->data['up_weapon_bullets'] = max(0, login::$user->player->data['up_weapon_bullets'] - $bullets); // trigger login::$user->player->trigger("attack", array("attack" => $result, "up" => $this->up_offer)); // vis resultat og last inn siden $this->attack_result_show($result, $bullets); }
function step4() { global $__server, $_game; // er skjemaet sendt inn? if ($_SERVER['REQUEST_METHOD'] == "POST") { // sjekk for gyldig trinn if (!isset($_POST['step']) || $_POST['step'] != 4) { redirect::handle(); } // betingelser, alder, forste_bruker $betingelser = isset($_POST['betingelser']); $alder = isset($_POST['alder']); $forste_bruker = isset($_POST['forste_bruker']); // er ikke betingelsene godtatt? if (!$betingelser) { ess::$b->page->add_message("Hvis du ikke godtar betingelsene kan du dessverre ikke registrere deg her.", "error"); } elseif (!$alder) { ess::$b->page->add_message("Hvis du ikke har fylt 13 år kan du dessverre ikke registrere deg her.", "error"); } elseif (!$forste_bruker) { ess::$b->page->add_message("Hvis du allerede har en bruker fra før så bruk den! Å opprette ny konto gjør det bare dumt for deg selv og kan i værste tilfelle føre til politianmeldelse.", "error"); } else { // finn en tilfeldig bydel $result = \Kofradia\DB::get()->query("SELECT id FROM bydeler WHERE active = 1 ORDER BY RAND()"); $bydel = $result->fetchColumn(0); // sett opp nødvendig info $user = \Kofradia\DB::quote($this->info['user']); $pass = \Kofradia\DB::quote($this->info['pass']); $email = \Kofradia\DB::quote($this->info['email']); $referer = \Kofradia\DB::quote($this->info['referer']); $tos_version = intval(game::$settings['tos_version']['value']); $birth = \Kofradia\DB::quote($this->info['birth']); $recruiter = array("up_id" => 'NULL', "up_u_id" => 'NULL'); global $__server; // er denne brukeren vervet? if (isset($_COOKIE[$__server['cookie_prefix'] . "rid"])) { $rid = $_COOKIE[$__server['cookie_prefix'] . "rid"]; // finnes denne brukeren? $result = \Kofradia\DB::get()->query("SELECT up_id, up_u_id FROM users_players WHERE up_id = " . \Kofradia\DB::quote($rid)); if ($row = $result->fetch()) { $recruiter = $row; } } \Kofradia\DB::get()->beginTransaction(); // deaktiver kontroll av foreign key \Kofradia\DB::get()->exec("SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0"); // opprett bruker $time = time(); \Kofradia\DB::get()->exec("INSERT INTO users SET u_email = {$email}, u_pass = {$pass}, u_birth = {$birth}, u_tos_version = {$tos_version}, u_created_time = {$time}, u_created_ip = " . \Kofradia\DB::quote($_SERVER['REMOTE_ADDR']) . ", u_created_referer = {$referer}, u_recruiter_u_id = {$recruiter['up_u_id']}, u_recruiter_points_last = 0"); $u_id = \Kofradia\DB::get()->lastInsertId(); // opprett spiller og tilknytt brukeren \Kofradia\DB::get()->exec("INSERT INTO users_players SET up_u_id = {$u_id}, up_name = {$user}, up_created_time = {$time}, up_recruiter_up_id = {$recruiter['up_id']}, up_b_id = {$bydel}"); $up_id = \Kofradia\DB::get()->lastInsertId(); \Kofradia\DB::get()->exec("UPDATE users SET u_active_up_id = {$up_id} WHERE u_id = {$u_id}"); // aktiver kontroll av foreign key \Kofradia\DB::get()->exec("SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS"); // sett opp riktig rank plassering #\Kofradia\DB::get()->exec("UPDATE users_players AS main, (SELECT COUNT(users_players.up_id)+1 AS pos, ref.up_id FROM users_players AS ref LEFT JOIN users_players ON users_players.up_points > ref.up_points AND users_players.up_access_level < {$_game['access_noplay']} AND users_players.up_access_level != 0 WHERE ref.up_id = $up_id GROUP BY ref.up_id) AS rp SET main.up_rank_pos = rp.pos WHERE main.up_id = rp.up_id"); \Kofradia\DB::get()->exec("INSERT INTO users_players_rank SET upr_up_id = {$up_id}"); ranklist::update(); // slett registrasjonsoppføringen \Kofradia\DB::get()->exec("DELETE FROM registration WHERE id = {$this->id}"); \Kofradia\DB::get()->commit(); // send e-post $email = new email(); $email->text = 'Hei, Du har registrert deg som ' . $this->info['user'] . ' på Kofradia. Velkommen til spillet! -- www.kofradia.no'; $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR']; $email->headers['Reply-To'] = "*****@*****.**"; $email->send($this->info['email'], "Velkommen til Kofradia"); ess::$b->page->add_message('Velkommen til Kofradia!<br /><br />Du er nå registrert som <b>' . $this->info['user'] . '</b> og automatisk logget inn.<br /><br />Sjekk ut menyen til venstre så ser du hva vi har å tilby i dag.<br /><br />Hvis du har noen spørsmål ta en titt under <a href="' . ess::$s['relative_path'] . '/node">hjelp</a> og ta evt. kontakt med <a href="support/">support</a> om du ikke finner svar på det du lurer på!<br /><br />Ikke glem og les gjennom <a href="' . ess::$s['relative_path'] . '/node/6">reglene for forumene</a> før du skriver i forumet. Lykke til i spillet!'); // hent antall medlemmer $result = \Kofradia\DB::get()->query("SELECT COUNT(up_id) FROM users_players WHERE up_access_level < {$_game['access_noplay']} AND up_access_level != 0"); putlog("INFO", "%bNY SPILLER:%b (#{$up_id} - Nummer %b" . $result->fetchColumn(0) . "%b) %u{$this->info['user']}%u registrerte seg! {$__server['absolute_path']}{$__server['relative_path']}/p/" . rawurlencode($this->info['user'])); // logg inn brukeren login::do_login($u_id, $this->info['pass'], LOGIN_TYPE_TIMEOUT, false); // slett registrasjonsoppføringen fra session etc $this->trash(); // sjekk om det er mulig multi $result = \Kofradia\DB::get()->query("\n\t\t\t\t\tSELECT up_name\n\t\t\t\t\tFROM users_players, users\n\t\t\t\t\tWHERE u_online_ip = " . \Kofradia\DB::quote($_SERVER['REMOTE_ADDR']) . "\n\t\t\t\t\t\tAND u_id != {$u_id}\n\t\t\t\t\t\tAND u_active_up_id = up_id AND up_access_level != 0\n\t\t\t\t\t\tAND up_last_online > " . (time() - 86400 * 30) . "\n\t\t\t\t\tLIMIT 10"); if ($result->rowCount() > 0) { $names = array(); while ($row = $result->fetch()) { $names[] = $row['up_name']; } putlog("CREWCHAN", "%b%c4NY REGISTERT, MULIG MULTI:%c%b (#{$up_id}) %u{$this->info['user']}%u registrerte seg. Andre spillere på IP-en: " . implode(", ", $names) . ". {$__server['path']}/admin/brukere/finn?ip=" . rawurlencode($_SERVER['REMOTE_ADDR'])); } // videresend til hovedsiden redirect::handle("", redirect::ROOT); } } echo ' <form action="registrer" method="post"> <input type="hidden" name="abort" /> <h1>Bekreftelse av betingelsene</h1> <p class="h_right">' . show_sbutton("Avbryt registrering", 'onclick="return confirm(\'Er du sikker på at du vil AVBRYTE?\')"') . '</p> </form> <p> På denne siden finner du en oversikt over betingelsene. Betingelsene er ikke lange og er kjapt å lese igjennom. Det er viktig at du er klar over innholdet i disse betingelsene og at du følger dem. Følger du ikke disse betingelsene vil brukeren din bli deaktivert. For å kunne opprette må du godta betingelsene. </p> <boxes /> <form action="registrer" method="post"> <input type="hidden" name="step" value="4" /> <p> Betingelser:<br /> <div id="betingelser_content">' . game::$settings['tos']['value'] . '</div> </p> <p> <input type="checkbox" name="betingelser" id="betingelser" /><label for="betingelser"> Jeg har lest gjennom og aksepterer betingelsene</label> </p> <p> <input type="checkbox" name="alder" id="alder" /><label for="alder"> Jeg har fylt 13 år</label> </p> <p> <input type="checkbox" name="forste_bruker" id="forste_bruker" /><label for="forste_bruker"> Jeg har ingen bruker som er aktivert fra før av</label> <span class="dark">(Hvis du allerede har en bruker, må du deaktivere den <u>før</u> du registrerer deg på nytt.)</span> </p> <p> ' . show_sbutton("Opprett bruker") . ' </p> </form> <form action="registrer" method="post"> <input type="hidden" name="abort" /> <p> ' . show_sbutton("Avbryt registrering", 'onclick="return confirm(\'Er du sikker på at du vil AVBRYTE?\')"') . ' </p> </form>'; }
/** * Sett opp og kontroller mottakere */ protected function parse_receivers() { // sett opp søk $where = $this->get_receivers(); if (!$where) { return null; } // hent brukere og evt. blokk $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT u_active_up_id, u_access_level, up_id, up_name, up_access_level, uc_id, uc_info\n\t\t\tFROM (\n\t\t\t\tSELECT u_active_up_id, u_access_level, up_id, up_name, up_access_level, uc_id, uc_info\n\t\t\t\tFROM users_players, users LEFT JOIN users_contacts ON u_id = uc_u_id AND uc_contact_up_id = " . login::$user->player->id . " AND uc_type = 2\n\t\t\t\tWHERE up_u_id = u_id AND {$where}\n\t\t\t\tORDER BY up_access_level = 0, up_last_online DESC\n\t\t\t) ref\n\t\t\tGROUP BY up_name"); $this->errors = array(); $this->infos = array(); $receivers = array(); while ($row = $result->fetch()) { // seg selv? if ($row['up_id'] == login::$user->player->id) { $this->remove_player($row); $this->errors[] = 'Du kan ikke legge til deg selv som mottaker. Du er mottaker av meldingen automatisk.'; } elseif ($row['up_access_level'] == 0 && (!access::has("crewet") || $row['u_access_level'] == 0 || count($this->players_list) > 1 || $row['u_active_up_id'] != $row['up_id'])) { if (!access::has("crewet") || $row['u_access_level'] == 0 || $row['u_active_up_id'] != $row['up_id']) { $this->remove_player($row); $this->errors[] = '<user id="' . $row['up_id'] . '" /> er død og kan ikke motta meldinger.'; } else { $receivers[] = $row; $this->errors[] = '<user id="' . $row['up_id'] . '" /> er død, men brukeren er aktivert. Kan motta meldinger hvis spilleren er den eneste mottakeren.'; } } elseif ($row['uc_id'] && !access::has("crewet")) { $this->remove_player($row); // sett opp begrunnelse $info = $row['uc_info']; $reason = game::bb_to_html($info); $reason = empty($reason) ? '' : ' Begrunnelse: ' . $reason; $this->errors[] = '<user id="' . $row['up_id'] . '" /> har blokkert deg og kan ikke legges til som mottaker.' . $reason; } else { // forbeholdt mot å motta meldinger? -> men crew if (in_array($row['up_access_level'], ess::$g['access']['block_pm']) && access::has("crewet")) { $this->infos[] = '<user id="' . $row['up_id'] . '" /> er egentlig reservert mot meldinger.'; } elseif (in_array($row['up_access_level'], ess::$g['access']['block_pm'])) { $result2 = \Kofradia\DB::get()->query("\n\t\t\t\t\t\tSELECT uc_contact_up_id\n\t\t\t\t\t\tFROM users_players, users_contacts\n\t\t\t\t\t\tWHERE up_id = {$row['up_id']}\n\t\t\t\t\t\t AND up_u_id = uc_u_id\n\t\t\t\t\t\t AND uc_contact_up_id = " . login::$user->player->id . "\n\t\t\t\t\t\t AND uc_type = 1"); $kontakt = $result2->rowCount() > 0; // ikke kontakt? sjekk for mottatt melding innen 24 timer if (!$kontakt) { $expire = time() - 86400; $result2 = \Kofradia\DB::get()->query("\n\t\t\t\t\t\t\tSELECT MAX(ir2.ir_restrict_im_time)\n\t\t\t\t\t\t\tFROM inbox_rel AS ir1, inbox_rel AS ir2\n\t\t\t\t\t\t\tWHERE ir1.ir_up_id = {$row['up_id']} AND ir1.ir_it_id = ir2.ir_it_id AND ir2.ir_up_id = " . login::$user->player->id . " AND ir1.ir_deleted = 0"); // for lenger enn 24 timer siden? --> kan ikke sende melding if ($result2->rowCount() == 0 || $result2->fetchColumn(0) < $expire) { $this->remove_player($row); $this->errors[] = '<user id="' . $row['up_id'] . '" /> kan ikke legges til som mottaker fordi spilleren er reservert mot dette. For å kunne sende melding til denne spilleren må du være i kontaklisten til personen, eller ha mottatt en melding fra personen i løpet av de siste 24 timene.'; putlog("NOTICE", "%bMELDING SPERRET%b: %u" . login::$user->player->data['up_name'] . "%u forsøkte å sende melding til %u{$row['up_name']}%u men var ikke i kontaktlisten!"); // lagre logg $file = GAMELOG_DIR . "/message_reject_" . date("Ymd_His") . ".log"; $fh = @fopen($file, "w"); if ($fh) { fwrite($fh, "Melding fra " . login::$user->player->data['up_name'] . " (ID: " . login::$user->player->id . ")\n\n\n" . print_r($_POST, true)); fclose($fh); putlog("NOTICE", "%c4%bMESSAGE LOG SAVED TO %u{$file}%u"); } else { putlog("NOTICE", "%c0,4%bERROR SAVING MESSAGE LOG TO FILE {$file}"); } continue; } } } // kan sende melding $receivers[] = $row; // blokkert men vi er crew? (testet ovenfor hvis man ikke var crew) if ($row['uc_id']) { $info = $row['uc_info']; $reason = game::bb_to_html($info); $reason = empty($reason) ? '' : ' Begrunnelse: ' . $reason; $this->infos[] = '<user id="' . $row['up_id'] . '" /> har egentlig blokkert deg.' . $reason; } } } $this->receivers = $receivers; }
} $q = $_POST['q']; // limit $limit = intval(min(100, max(1, postval("limit", 10)))); // ekskluder? $exclude = ""; $exclude_ids = array(); if (isset($_POST['exclude'])) { $exclude_ids = array_unique(array_map("intval", explode(",", $_POST['exclude']))); if (count($exclude_ids) > 0) { $exclude = "up_id NOT IN (" . implode(",", $exclude_ids) . ") AND "; } } // ignorere egne deaktiverte spillere? if (isset($_POST['is'])) { $exclude .= "up_u_id != " . login::$user->id . " AND "; } // hent brukere $q2 = \Kofradia\DB::quote(str_replace("_", "\\_", $q)); $result = \Kofradia\DB::get()->query("SELECT SQL_CALC_FOUND_ROWS up_id, up_name, up_access_level FROM users_players WHERE {$exclude}up_name LIKE {$q2} ORDER BY LENGTH(up_name), up_name LIMIT {$limit}"); $result2 = \Kofradia\DB::get()->query("SELECT FOUND_ROWS()"); $num = $result2->fetchColumn(0); // logg putlog("LOG", "%c3%bFINN-SPILLER:%b%c %u" . login::$user->player->data['up_name'] . "%u søkte etter %u{$q}%u!"); // xml $data = '<userlist query="' . htmlspecialchars($q) . '" limit="' . $limit . '" results="' . $num . '">'; while ($row = $result->fetch()) { $data .= '<user up_id="' . $row['up_id'] . '" up_name="' . htmlspecialchars($row['up_name']) . '">' . htmlspecialchars(game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level'])) . '</user>'; } $data .= '</userlist>'; ajax::xml($data);
ess::$b->page->add_message('Brukeren til <user id="' . $up['up_id'] . '" /> er deaktivert. Endringer må gjøres manuelt.', "error"); redirect::handle(); } // er spilleren deaktivert? if ($up['up_access_level'] == 0) { ess::$b->page->add_message('Spilleren <user id="' . $up['up_id'] . '" /> er deaktivert. Endringer må gjøres manuelt.', "error"); redirect::handle(); } // overfør nivå \Kofradia\DB::get()->exec("UPDATE users, users_players SET up_access_level = u_access_level WHERE u_active_up_id = up_id AND up_id = {$up['up_id']} AND u_access_level != 0 AND up_access_level != 0"); ess::$b->page->add_message('Tilgangsnivået til brukeren <user id="' . $up['up_id'] . '" /> ble overført til spilleren.'); // ranklista \Kofradia\DB::get()->exec("UPDATE users, users_players_rank SET upr_up_access_level = u_access_level WHERE upr_up_id = {$up['up_id']} AND upr_up_id = u_active_up_id"); ranklist::update(); // logg putlog("CREWCHAN", "TILGANGSNIVÅ OVERFØRT: Tilgangsnivået til {$up['up_name']} ble overført fra brukeren (nivå: {$up['u_access_level']}) til spilleren (gammelt nivå: {$up['up_access_level']})."); redirect::handle(); } $result = \Kofradia\DB::get()->query("\n\t\tSELECT u_id, u_access_level, up_access_level, up_id, up_name, up_last_online\n\t\tFROM users, users_players\n\t\tWHERE u_active_up_id = up_id AND up_u_id = u_id AND u_access_level != up_access_level AND (up_access_level != 0 || u_access_level != 1)\n\t\tORDER BY up_name"); if ($result->rowCount() > 0) { $admin = access::has("admin"); echo ' <div class="bg1_c medium"> <h1 class="bg1">Forskjell mellom brukernivå og spillernivå<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes />' . ($admin ? ' <form action="" method="post">' : '') . ' <table class="table ' . ($admin ? 'tablemt' : 'tablem') . ' center"> <thead> <tr> <th>U_ID</th>
/** * Internt: Legg til en rapportering * @param int $up_id * @param int $type * @param int $type_id * @param string $message * @return int r_id */ private static function add($up_id, $type, $type_id, $message) { global $__server; // sørg for at brukeren er logget inn if (!login::$logged_in) { throw new HSException("Brukeren er ikke logget inn."); } // samle sammen data $source_up_id = intval(login::$user->player->id); $up_id = intval($up_id); $type = intval($type); $type_id = intval($type_id); $message = \Kofradia\DB::quote($message); // legg til \Kofradia\DB::get()->exec("INSERT INTO rapportering SET r_source_up_id = {$source_up_id}, r_up_id = {$up_id}, r_type = {$type}, r_type_id = {$type_id}, r_time = " . time() . ", r_note = {$message}"); $id = \Kofradia\DB::get()->lastInsertId(); // melding på IRC putlog("CREWCHAN", "%bNY RAPPORTERING:%b {$__server['path']}/crew/rapportering"); // øk rapporteringstelleren tasks::increment("rapporteringer"); // returner iden return $id; }
/** Redirecte */ public static function handle($location = false, $from = NULL, $https = NULL) { global $__server, $_base; if ($from === NULL) { $from = self::CURRENT; } if ($location === false) { // refresh if (self::$location !== false) { $location = self::$location; $from = self::$from; } else { $location = $_SERVER['REQUEST_URI']; //$location = PHP_SELF; $from = self::SERVER; } } // prefix $prefix = (HTTPS && $https !== false || $https) && $__server['https_support'] ? $__server['https_path'] : $__server['http_path']; // fra sideroot if ($from == self::ROOT) { if (mb_substr($location, 0, 1) != "/") { $location = "/" . $location; } $location = $prefix . $__server['relative_path'] . $location; } elseif ($from == self::SERVER) { if (mb_substr($location, 0, 1) != "/") { $location = "/" . $location; } $location = $prefix . $location; } elseif ($from != self::ABSOLUTE) { $p = str_replace("\\", "/", dirname(PHP_SELF)); if ($p == "/") { $p = ""; } if (mb_substr($location, 0, 1) != "/") { $location = "/" . $location; } $location = $prefix . $p . $location; } // definer brukernavnet $user = login::$logged_in ? login::$user->player->data['up_name'] : false; if (empty($user)) { if (defined("AUTOSCRIPT")) { $user = "******"; } else { $user = "******"; } } // lagre logg putlog("INT", "(" . str_pad($_SERVER['REMOTE_ADDR'], 15, "_") . ") (" . str_pad($user, 15, "_") . ") (REDIRECT) (" . str_pad($_SERVER['REQUEST_METHOD'], 4, "_") . ") (http" . (isset($_SERVER["SERVER_PORT_SECURE"]) ? 's' : '') . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}) for {$location}"); // oppdater brukerinfo if (login::$logged_in) { \Kofradia\DB::get()->exec("UPDATE users_players SET up_hits_redirect = up_hits_redirect + 1 WHERE up_id = " . login::$user->player->id); \Kofradia\DB::get()->exec("UPDATE users_hits SET uhi_hits_redirect = uhi_hits_redirect + 1 WHERE uhi_up_id = " . login::$user->player->id . " AND uhi_secs_hour = " . login::$info['secs_hour']); } else { $date = $_base->date->get()->format("Y-m-d"); // oppdater \Kofradia\DB::get()->exec("\n\t\t\t\tINSERT INTO stats_daily SET sd_date = '{$date}', sd_hits_redirect_g = 1\n\t\t\t\tON DUPLICATE KEY UPDATE sd_hits_redirect_g = sd_hits_redirect_g + 1"); } // send til siden @header("Location: {$location}"); @ob_clean(); die('<HTML><HEAD><TITLE>302 Found</TITLE></HEAD><BODY><H1>Found</H1>You have been redirected <A HREF="' . $location . '">here</A>.<P></BODY></HTML>'); }
<?php require "base.php"; global $_base; // kontroller link if (getval("sid") != login::$info['ses_id']) { $_base->page->add_message("Ugyldig inntasting. Prøv på nytt.", "error"); $_base->page->load(); } // loggmelding putlog("NOTICE", "%c5%bLOGG UT%b%c: (%u{$_SERVER['REMOTE_ADDR']}%u) %u" . login::$user->player->data['up_name'] . "%u (" . login::$user->data['u_email'] . ") ({$_SERVER['HTTP_USER_AGENT']})"); // logg ut login::logout(); redirect::handle("");
/** * Try to attack a specific player * * @param array Data about the player * @param int Cash to get * @return bool|null True on success */ protected function handleSuccessPlayer($player, $cash) { $rank = \Kofradia\Game\Rank\Points::getRank($player['up_points']); $affect = $this->ut->getAffectedTable($rank); // can not have too little energy if ($player['up_energy'] < $affect['energy'] * 2) { return; } // now take money $a = \Kofradia\DB::get()->prepare("\n\t\t\tUPDATE users_players\n\t\t\tSET up_bank = IF(up_cash < ?, up_bank - ?, up_bank),\n\t\t\t\tup_cash = IF(up_cash >= ?, up_cash - ?, up_cash)\n\t\t\tWHERE up_id = ? AND (up_cash >= ? OR up_bank >= ?)"); if (!$a->execute(array($cash, $cash, $cash, $cash, $player['up_id'], $cash, $cash))) { // did not succeed return; } $this->result->up = \player::get($player['up_id']); $this->result->cashLost = $cash; $this->result->fromBank = $this->result->up->data['up_cash'] < $cash; // TODO: this cannot be checked this way? // notify victim $this->result->up->add_log("utpressing", $this->ut->up->id, $cash); // log putlog("SPAMLOG", "%c11%bUTPRESSING:%b%c %u{$this->ut->up->data['up_name']}%u presset %u{$this->result->up->data['up_name']}%u for %u" . \game::format_cash($cash) . "%u" . ($this->result->fromBank ? ' (fra bankkonto)' : '')); \Kofradia\DB::get()->prepare("\n\t\t\tINSERT INTO utpressinger\n\t\t\tSET\n\t\t\t\tut_action_up_id = ?,\n\t\t\t\tut_affected_up_id = ?,\n\t\t\t\tut_b_id = ?,\n\t\t\t\tut_time = ?")->execute(array($this->ut->up->id, $this->result->up->id, $this->ut->up->data['up_b_id'], time())); // the victim always looses energy // but only health if the money comes from the hand // (don't really know why we made it this way) $this->result->up->energy_use($affect['energy']); if (!$this->result->fromBank) { $this->result->attack = $this->result->up->health_decrease($affect['health'], $this->ut->up, \player::ATTACK_TYPE_UTPRESSING); } return true; }
</dl> <h3 class="c"> ' . show_sbutton("Hent informasjon") . ' </h3>'; } echo ' </form> </div> </div>'; } else { $wpInfo = $result->fetch(); // fjerne fra Kofradia kontoen? if (isset($_POST['wpFjern'])) { \Kofradia\DB::get()->exec("DELETE FROM stats_whatpulse WHERE sw_up_id = " . $player->id); $_base->page->add_message("WhatPulse informasjonen er nå fjernet fra din konto."); putlog("NOTICE", "%c12%bWHATPULSE-FJERNING:%b%c (%u" . $player->data['up_name'] . "%u) fjernet WhatPulse fra sin profil (WPID: %u{$wpInfo['sw_userid']}%u)."); redirect::handle(); } $wp = new whatpulse($wpInfo['sw_userid']); $wp->set_user_data($wpInfo); $wp->update(); // les data (XML) if (!$wp->update()) { echo ' <h1>WhatPulse</h1> <div style="width: 300px" class="center"> <div class="section"> <h3>Feil oppstått med WhatPulse</h3> <p>Noe gikk feil ved henting og lesing av data fra WhatPulse serveren.</p> <p>Du kan forsøke å laste inn data med en annen brukerkonto ved å fjerne tilknytningen til WhatPulse og deretter legge den til på nytt.</p> <form action="" method="post">
<?php require dirname(dirname(__FILE__)) . "/essentials.php"; $user = getenv("USER"); try { @putlog("CREWCHAN", "%bPRODUCTION PULL:%b %u{$user}%u oppdaterte koden mot master."); } catch (Exception $e) { } try { @putlog("INFO", "%bPRODUCTION PULL:%b %u{$user}%u oppdaterte koden mot master."); } catch (Exception $e) { }
/** * Oppdater anti-bot status - for å loggføre de som bruker lang tid mellom anti-bot handlingene */ public function update_status($step, $param = NULL) { global $__server; $n = time(); // steps: // redir // new_img // new_img_wait // test_init // test_repeat // failed // success // har vi noe status fra før? if (isset($_SESSION[$__server['session_prefix'] . 'antibot_status'][$this->name])) { $p = array_reverse($_SESSION[$__server['session_prefix'] . 'antibot_status'][$this->name]); if (count($p) > 6) { putlog("ABUSE", "%c10%bANTIBOT-LOG%b: %u" . login::$user->player->data['up_name'] . "%u har utført mange forskjellige handlinger på rad uten å ha fullført anti-boten (%u{$this->name}%u) - handlingslogg:"); putlog("ABUSE", "%c10%bANTIBOT-LOG%b: {$step}"); $time_last = $n; foreach ($p as $row) { $time = $time_last - $row['time']; $time_last = $row['time']; putlog("ABUSE", "%c10%bANTIBOT-LOG%b: {$time} sekunder --> {$row['step']}"); } $_SESSION[$__server['session_prefix'] . 'antibot_status'][$this->name] = array_slice($_SESSION[$__server['session_prefix'] . 'antibot_status'][$this->name], -2); } $last = $p[0]; $last_time = $n - $last['time']; // utført anti-bot, men forrige handling var ikke init/repeat? if ($step == "success" && $last['step'] != "test_init" && $last['step'] != "test_repeat") { putlog("ABUSE", "%c10%bANTIBOT-LOG%b: %u" . login::$user->player->data['up_name'] . "%u utførte anti-bot vellykket, men forrige handling var ikke å vise anti-bot testen ({$last_time} sekunder siden forrige handling: {$last['step']}) (%u{$this->name}%u)"); } elseif ($last_time > 60 && $step == "success") { putlog("ABUSE", "%c10%bANTIBOT-LOG%b: %u" . login::$user->player->data['up_name'] . "%u utførte anti-bot vellykket, men brukte lang tid ({$last_time} sekunder siden forrige handling: {$last['step']}) (%u{$this->name}%u)"); } } // fjerne? if ($step == "success") { unset($_SESSION[$__server['session_prefix'] . 'antibot_status'][$this->name]); } else { $_SESSION[$__server['session_prefix'] . 'antibot_status'][$this->name][] = array("step" => $step, "time" => time()); } switch ($step) { case "redir": // trenger sjekk putlog("ANTIBOT", "%c10%bVIDERESENDING%b: %u" . login::$user->player->data['up_name'] . "%u blir nå videresendt til anti-bot testen %u{$this->name}%u"); break; case "new_img_wait": putlog("ANTIBOT", "%c8%bNYE BILDER%b: %u" . login::$user->player->data['up_name'] . "%u ba om nye bilder for %u{$this->name}%u men må vente %u{$param}%u sekunder"); break; case "new_img": putlog("ANTIBOT", "%c9%bNYE BILDER%b: %u" . login::$user->player->data['up_name'] . "%u ba om nye bilder for %u{$this->name}%u"); break; case "test_repeat": putlog("ANTIBOT", "%c13%bSJEKK%b: %u" . login::$user->player->data['up_name'] . "%u viste anti-boten for %u{$this->name}%u på nytt"); break; case "test_init": putlog("ANTIBOT", "%bSJEKK OPPRETT BILDER%b: %u" . login::$user->player->data['up_name'] . "%u opprettet anti-bot bilder for %u{$this->name}%u"); break; case "failed": putlog("ANTIBOT_ERROR", "%c4%bSJEKK MISLYKKET%b: %u" . login::$user->player->data['up_name'] . "%u mislykket anti-boten ({$this->name}) med %u{$param}%u " . fword("riktig alternativ", "riktige alternativer", $param)); break; case "success": putlog("ANTIBOT", "%bSJEKK VELLYKKET%b: %u" . login::$user->player->data['up_name'] . "%u utførte anti-boten for %u{$this->name}%u"); break; } }
/** * Behandle nytt passord */ protected function solve_pass() { // lagre passord if (isset($_POST['save_pass'])) { // kontroller alle feltene $pass_new = trim(postval("pass_new")); $pass_repeat = trim(postval("pass_repeat")); // kontroller at alle feltene er fylt ut if ($pass_new == "" || $pass_repeat == "") { ess::$b->page->add_message("Alle feltene må fylles ut.", "error"); } elseif ($pass_new != $pass_repeat) { ess::$b->page->add_message("De nye passordene var ikke like.", "error"); } elseif (mb_strlen($pass_new) < 6) { ess::$b->page->add_message("Det nye passordet må inneholde minimum 6 tegn.", "error"); } elseif (password::validate($pass_new, password::LEVEL_LOGIN) != 0) { ess::$b->page->add_message("Du må velge et vanskeligere passord.", "error"); } elseif (password::verify_hash($pass_new, login::$user->data['u_bank_auth'], 'bank_auth')) { ess::$b->page->add_message("Velg et annet passord enn du har i banken."); } else { \Kofradia\DB::get()->exec("UPDATE users SET u_pass = "******", u_pass_change = NULL WHERE u_id = " . login::$user->id); // melding ess::$b->page->add_message("Du har nå lagret et nytt passord for brukeren din."); putlog("NOTICE", "%bPASSORD%b: %u" . login::$user->player->data['up_name'] . "%u lagret nytt passord på sin bruker (var nullstilt). " . ess::$s['path'] . "/min_side?u_id=" . login::$user->id); // send ut e-post for å informere $email = new email(); $email->text = 'Hei, Det er nå blitt opprettet et nytt passord fra ' . $_SERVER['REMOTE_ADDR'] . ' (' . $_SERVER['HTTP_USER_AGENT'] . '). Bruker ID: ' . login::$user->data['u_id'] . ' E-post: ' . login::$user->data['u_email'] . ' Vi sender selvfølgelig ikke ditt nye passord på e-post. Det skal du kunne selv! -- www.kofradia.no'; $email->send(login::$user->data['u_email'], "Nytt passord"); // logg ut alle andre brukere \Kofradia\DB::get()->exec("UPDATE sessions SET ses_active = 0, ses_logout_time = " . time() . " WHERE ses_active = 1 AND ses_u_id = " . login::$user->id . " AND ses_id != " . login::$info['ses_id']); redirect::handle(); } } ess::$b->page->add_js_domready('$("lockpass").focus();'); echo ' <div class="bg1_c small"> <h1 class="bg1">Lagre nytt passord<span class="left"></span><span class="right"></span></h1> <p class="h_left"><a href="' . htmlspecialchars($this->url) . '">Tilbake</a></p> <div class="bg1"> <p>Ditt passord har blitt nullstilt. Du vil ikke kunne logge inn uten å måtte benytte <i>glemt passord</i> funksjonen før du har opprettet et nytt passord.</p> <form action="" method="post" autocomplete="off"> <dl class="dd_right dl_2x center" style="width: 80%"> <dt>Nytt passord</dt> <dd><input type="password" class="styled w100" name="pass_new" id="lockpass" /></dd> <dt>Gjenta nytt passord</dt> <dd><input type="password" class="styled w100" name="pass_repeat" /></dd> </dl> <p class="c">' . show_sbutton("Lagre passordet", 'name="save_pass"') . '</p> </form> </div> </div>'; }
<?php require "../../app/ajax.php"; // mangler tekst? if (!isset($_POST['text'])) { ajax::text("ERROR:MISSING", ajax::TYPE_INVALID); } global $__server; ajax::essentials(); // logg $name = login::$logged_in ? login::$user->player->data['up_name'] : '*ukjent spiller*'; $ref = isset($_SERVER['HTTP_REFERER']) ? ' - referer: ' . $_SERVER['HTTP_REFERER'] : ' - ingen referer'; putlog("LOG", "%c3%bMIN-STATUS:%b%c %u{$name}%u hentet HTML for BB-kode{$ref}"); // sett opp html $bb = parse_html(game::bb_to_html($_POST['text'])); // send raw html? if (isset($_POST['plain'])) { ajax::text($bb); } // send inni xml element ajax::xml('<content>' . htmlspecialchars($bb) . '</content>');
<?php global $files; // kjør session for å unngå feil når player::get lastes session_start(); // eksporter databasen med exportscriptet require "export_to_devdb.php"; // initialiser crewfiles systemet med SYSTEM-brukeren crewfiles::init(player::get(SYSTEM_USER_ID), true); // hvilke filer i crewfiles som skal oppdateres $data = array(array(190, $files[0], "main")); // oppdaterer filene i crewfiles foreach ($data as $r) { // hent filobjekt i crewfiles $file = crewfiles::get_file($r[0]); if (!$file) { echo "Fant ikke filen med ID {$r[0]}\n"; continue; } echo "Kjører {$r[1]} gjennom gzip.\n"; shell_exec("gzip -9 " . escapeshellarg($r[1])); $r[1] .= ".gz"; echo "Laster opp {$r[1]} til crewfiles...\n"; $revision = $file->upload($r[1], "Automatisk eksportert", "application/x-gzip-compressed", $r[1], true); $path = ess::$s['spath'] . '/crewstuff/f/rev/' . $revision->id . '-' . urlencode(crewfiles::generate_tagname($revision->info['cfr_title'])); putlog("CREWCHAN", "Dev-database {$r[2]}: {$path}"); echo "Lastet opp!\n"; // slett filen unlink($r[1]); }
/** * Deaktiver brukeren */ public function deactivate($reason, $note, player $by_up = null) { global $_game, $__server; if (!$by_up) { $by_up = $this->player; } // er ikke aktivert? if ($this->data['u_access_level'] == 0) { return false; } // deaktivere spilleren? if ($this->player->active) { $this->player->deactivate($reason, $note, $by_up); } $this->data['u_access_level'] = 0; $this->data['u_deactivated_time'] = time(); $this->data['u_deactivated_up_id'] = $by_up->id; $this->data['u_deactivated_reason'] = empty($reason) ? NULL : $reason; $this->data['u_deactivated_note'] = empty($note) ? NULL : $note; // deaktiver brukeren $a = \Kofradia\DB::get()->exec("UPDATE users SET u_access_level = 0, u_deactivated_time = {$this->data['u_deactivated_time']}, u_deactivated_up_id = {$by_up->id}, u_deactivated_reason = " . \Kofradia\DB::quote($reason) . ", u_deactivated_note = " . \Kofradia\DB::quote($note) . " WHERE u_id = {$this->id} AND u_access_level != 0"); if ($a == 0) { return false; } // logg ut alle øktene \Kofradia\DB::get()->exec("UPDATE sessions SET ses_active = 0, ses_logout_time = " . time() . " WHERE ses_u_id = {$this->id} AND ses_active = 1"); if ($by_up->id == $this->player->id) { $info = 'deaktiverte seg selv'; } else { $info = 'ble deaktivert'; if (login::$logged_in) { $info .= ' av ' . login::$user->player->data['up_name']; } } putlog("CREWCHAN", "%bDeaktivering%b: Brukeren {$this->data['u_email']} ({$this->player->data['up_name']}) {$info} {$__server['path']}/min_side?u_id={$this->id}"); return true; }
/** * Opprett auksjon for FF */ public static function create_auksjon_ff(ff $ff, $start = null, $end = null) { $time = time(); if (!$start) { $start = $time; } else { $start = (int) $start; } if (!$end) { // varighet er til 21:00 med minimum 12 timer $date = ess::$b->date->get(); $date->setTime(21, 0, 0); $min_time = 3600 * 12; if ($date->format("U") < $time + $min_time) { $date->modify("+1 day"); } $expire = $date->format("U"); } else { $expire = (int) $end; } // sett opp params for ff_id $params = new params(); $params->update("ff_id", $ff->id); // opprett auksjonen \Kofradia\DB::get()->exec("INSERT INTO auksjoner SET a_type = " . self::TYPE_FIRMA . ", a_title = " . \Kofradia\DB::quote($ff->data['ff_name']) . ", a_start = {$start}, a_end = {$expire}, a_bid_start = 1000000, a_bid_jump = 500000, a_active = 1, a_params = " . \Kofradia\DB::quote($params->build())); $a_id = \Kofradia\DB::get()->lastInsertId(); // logg putlog("INFO", "%bAUKSJON:%b Auksjon for %u" . $ff->data['ff_name'] . "%u ble opprettet " . ess::$s['spath'] . "/auksjoner?a_id={$a_id}"); // live-feed livefeed::add_row('<a href="' . ess::$s['rpath'] . '/auksjoner?a_id=' . $a_id . '">Auksjon</a> for <a href="' . ess::$s['rpath'] . '/ff/?ff_id=' . $ff->id . '">' . htmlspecialchars($ff->data['ff_name']) . '</a> ble opprettet.'); self::update_cache(); }
} ess::$b->page->add_title($player->data['up_name']); // moderasjon if (access::has("crewet", NULL, NULL, true)) { // javascript ess::$b->page->add_js_domready(' new KeySequence("esc,M,esc", function() { navigateTo(relative_path+"/min_side?up_id=' . $player->id . '&a=crew"); });'); } // loggfør visning if (!login::$logged_in) { putlog("PROFILVIS", "%c6%bVIS-PROFIL:%b%c Ikke-innlogget-person viste profilen til %u{$player->data['up_name']}%u (up_id: " . $player->id . ")"); } elseif (login::$user->player->id != $player->id) { putlog("PROFILVIS", "%c6%bVIS-PROFIL:%b%c %u" . login::$user->player->data['up_name'] . "%u viste profilen til %u{$player->data['up_name']}%u (up_id: " . $player->id . ")"); } // legg til som besøkende til denne profilen if (!login::$logged_in || !access::is_nostat() && login::$user->id != $player->data['up_u_id']) { // anonym if (!login::$logged_in) { $siste = $player->data['up_profile_anon_time']; $player->data['up_profile_anon_time'] = time(); \Kofradia\DB::get()->exec("UPDATE users_players SET up_profile_anon_time = {$player->data['up_profile_anon_time']} WHERE up_id = {$player->id}"); } elseif (!access::is_nostat() && login::$user->id != $player->data['up_u_id']) { // når besøkte vi profilen sist? $siste = 0; $result = \Kofradia\DB::get()->query("SELECT time FROM users_views WHERE uv_up_id = {$player->id} AND uv_visitor_up_id = " . login::$user->player->id); if ($result->rowCount()) { $siste = $result->fetchColumn(0); }
} } set_time_limit(0); define("SCHEDULER", true); define("SCHEDULER_REPEATING", true); sess_start(); echo "Utfører rutine regelmessig.\n"; // kjør rutiner (autoload klassen) ess::$b->scheduler = new scheduler(); // utfør rutiner regelmessig while (true) { // finn ut når neste rutine skal utføres $result = \Kofradia\DB::get()->query("\n\t\tSELECT GREATEST(s_next, s_expire) next\n\t\tFROM scheduler\n\t\tWHERE s_active = 1\n\t\tORDER BY next\n\t\tLIMIT 1"); $row = $result->fetch(); $next = false; if ($row) { $next = $row['next']; } $t = time(); $s = ess::$b->date->get($t)->format("s"); $max = $t + 60 - $s; if (!$next || $next > $max) { $next = $max; } printf("Neste: %s\n", ess::$b->date->get($next)->format(date::FORMAT_SEC)); // sov $sleep = max(0.1, $next - microtime(true)); putlog("LOG", sprintf("Venter %.2f sekunder til neste.\n", $sleep)); usleep($sleep * 1000000); ess::$b->scheduler->__construct(); }
return; } $list = "(" . implode(",", $ff_ids) . ")"; \Kofradia\DB::get()->beginTransaction(); // deaktiver referansesjekk \Kofradia\DB::get()->exec("/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS */"); \Kofradia\DB::get()->exec("/*!40014 SET UNIQUE_CHECKS=0 */"); \Kofradia\DB::get()->exec("/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS */"); \Kofradia\DB::get()->exec("/*!40014 SET FOREIGN_KEY_CHECKS=0 */"); // flytt all informasjon om familiene \Kofradia\DB::get()->exec("INSERT INTO " . DBNAMEARCHIVE . ".ff SELECT * FROM ff WHERE ff_id IN {$list}"); \Kofradia\DB::get()->exec("INSERT INTO " . DBNAMEARCHIVE . ".ff_bank_log SELECT * FROM ff_bank_log WHERE ffbl_ff_id IN {$list}"); \Kofradia\DB::get()->exec("INSERT INTO " . DBNAMEARCHIVE . ".ff_log SELECT * FROM ff_log WHERE ffl_ff_id IN {$list}"); \Kofradia\DB::get()->exec("INSERT INTO " . DBNAMEARCHIVE . ".ff_members SELECT * FROM ff_members WHERE ffm_ff_id IN {$list}"); \Kofradia\DB::get()->exec("INSERT INTO " . DBNAMEARCHIVE . ".f_forum_log\n\tSELECT f_forum_log.* FROM f_forum_log JOIN f_forum_topics ON ffl_fft_id = fft_id\n\tWHERE fft_ff_id IN {$list}"); \Kofradia\DB::get()->exec("INSERT INTO " . DBNAMEARCHIVE . ".f_forum_replies\n\tSELECT f_forum_replies.* FROM f_forum_replies JOIN f_forum_topics ON ffr_fft_id = fft_id\n\tWHERE fft_ff_id IN {$list}"); \Kofradia\DB::get()->exec("INSERT INTO " . DBNAMEARCHIVE . ".f_forum_topics\n\tSELECT f_forum_topics.* FROM f_forum_topics\n\tWHERE fft_ff_id IN {$list}"); // slett gammel informasjon \Kofradia\DB::get()->exec("DELETE FROM ff WHERE ff_id IN {$list}"); \Kofradia\DB::get()->exec("DELETE FROM ff_bank_log WHERE ffbl_ff_id IN {$list}"); \Kofradia\DB::get()->exec("DELETE FROM ff_log WHERE ffl_ff_id IN {$list}"); \Kofradia\DB::get()->exec("DELETE FROM ff_members WHERE ffm_ff_id IN {$list}"); \Kofradia\DB::get()->exec("DELETE f_forum_log FROM f_forum_log JOIN f_forum_topics ON ffl_fft_id = fft_id WHERE fft_ff_id IN {$list}"); \Kofradia\DB::get()->exec("DELETE f_forum_replies FROM f_forum_replies JOIN f_forum_topics ON ffr_fft_id = fft_id WHERE fft_ff_id IN {$list}"); \Kofradia\DB::get()->exec("DELETE f_forum_topics FROM f_forum_topics WHERE fft_ff_id IN {$list}"); // aktiver refernsesjekk \Kofradia\DB::get()->exec("/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */"); \Kofradia\DB::get()->exec("/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */"); \Kofradia\DB::get()->commit(); putlog("CREWCHAN", "%bArkivering:%b Informasjon om broderskapene " . implode(", ", $ff_names) . " ble flyttet til arkivdatabasen.");