function asset_process_session_request() { $t =& $GLOBALS["t"]; $tname = $t["title"]; $tview = $t["view"]; $tfolder = $t["folder"]; if (SYNC4J and !empty($GLOBALS["sel_folder"]["anchor"])) { _asset_process_syncml_requests(); } if ($tview == "search") { if (empty($_SESSION["_" . $tfolder]["request"]["search"])) { $_SESSION["_" . $tfolder]["request"]["search"] = array("query" => "*", "module" => "", "subfolders" => 1); } if (isset($_REQUEST["search"])) { if (empty($_REQUEST["module"])) { $_REQUEST["module"] = ""; } if (empty($_REQUEST["similar"])) { $_REQUEST["similar"] = ""; } if (!isset($_REQUEST["subfolders"])) { $_REQUEST["subfolders"] = 1; } $_SESSION["_" . $tfolder]["request"]["search"] = array("query" => $_REQUEST["search"], "module" => $_REQUEST["module"], "similar" => $_REQUEST["similar"], "subfolders" => $_REQUEST["subfolders"]); } $t["search"] = $_SESSION["_" . $tfolder]["request"]["search"]; $value = modify::searchindex($t["search"]["query"]); $search_snd = ""; if (!empty($t["search"]["similar"])) { $search_arr = explode(" ", $value); foreach ($search_arr as $key => $value) { $val = soundex($value); if ($val != "0000") { $search_arr[$key] = $val; } else { unset($search_arr[$key]); } } $search_snd = implode(" ", $search_arr); } if ($search_snd != "") { $search_snd = "%" . $search_snd . "%"; } if ($value != "") { $term_two = "%" . $value . "%"; } else { $term_two = ""; } $search_rights = str_replace("r@right@_", "t.rread_", $_SESSION["permission_sql"]) . " and " . str_replace("r@right@_", "s.rread_", $_SESSION["permission_sql"]); if (!isset($GLOBALS["sel_folder"]["lft"])) { $folder = array("lft" => 0, "rgt" => 0); } else { $folder = $GLOBALS["sel_folder"]; } $vars = array("lft" => $folder["lft"], "rgt" => $folder["rgt"], "search" => $value, "search2" => $term_two, "search_snd" => $search_snd, "module" => $t["search"]["module"], "subfolders" => $t["search"]["subfolders"]); $t["sqlvars"] = array_merge($t["sqlvars"], $vars); $t["sqlvarsnoquote"] = array_merge($t["sqlvarsnoquote"], array("search_rights" => $search_rights)); } if ($t["default_sql"] != "" and $t["default_sql"] != "no_select") { $matches = ""; if (preg_match_all("|@(.*?)@|i", $t["default_sql"], $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { if (count($match) != 2) { continue; } $req_key = $match[1]; if (isset($_SESSION[$req_key])) { $t["default_sql"] = str_replace("@" . $req_key . "@", sys_correct_quote($_SESSION[$req_key]), $t["default_sql"]); } } } } if (isset($_REQUEST["session_remove_request"])) { $_SESSION["_" . $tfolder]["request"] = array(); $_SESSION["_" . $tfolder][$tview] = array(); } if (isset($_REQUEST["subitem"])) { $_SESSION["_" . $tfolder][$tview]["subitem"] = $_REQUEST["subitem"]; } if (isset($_SESSION["_" . $tfolder][$tview]["subitem"])) { $t["subitem"] = $_SESSION["_" . $tfolder][$tview]["subitem"]; } if (isset($_REQUEST["filters"])) { $_SESSION["_" . $tfolder][$tview]["filters"] = $_REQUEST["filters"]; } if (isset($_SESSION["_" . $tfolder][$tview]["filters"])) { $t["filter"] = $_SESSION["_" . $tfolder][$tview]["filters"]; } if ($t["filter"] != "") { $t["sqlfilters"] = array(); $ops = array("eq", "neq", "lt", "gt", "like", "nlike", "starts", "oneof"); foreach (explode("||", $t["filter"]) as $key => $filter) { $filter = explode("|", $filter); if (count($filter) == 3 and isset($t["fields"][$filter[0]]) and in_array($filter[1], $ops)) { if (trim($filter[2]) == "") { continue; } if (!empty($t["search"])) { if ($filter[0] == "lastmodifiedby") { $t["search"]["user"] = $filter[2]; } if ($filter[0] == "lastmodified") { $t["search"]["modified"] = array("type" => $filter[1], "value" => $filter[2]); } } $t["sqlfilters"][] = array("field" => $filter[0], "type" => $filter[1], "value" => $filter[2]); if ($t["fields"][$filter[0]]["SIMPLE_TYPE"] == "checkbox") { $filter[2] = $filter[2] == "{t}yes{/t}" ? "1" : "0"; } if ($filter[1] == "oneof") { $filter[2] = explode(",", $filter[2]); } if (in_array($t["fields"][$filter[0]]["SIMPLE_TYPE"], array("date", "dateselect", "time", "datetime"))) { $filter[2] = modify::datetime_to_int($filter[2]); } $op = "="; $key_var = "@filter_value_" . $key . "@"; switch ($filter[1]) { case "neq": $op = "!="; break; case "oneof": $op = "in"; $key_var = "(" . $key_var . ")"; break; case "lt": $op = "<"; break; case "gt": $op = ">"; break; case "like": $op = "like"; $filter[2] = "%" . $filter[2] . "%"; break; case "nlike": $op = "not like"; $filter[2] = "%" . $filter[2] . "%"; break; case "starts": $op = "like"; $filter[2] = $filter[2] . "%"; break; } $t["sqlvars"]["filter_value_" . $key] = $filter[2]; $t["sqlwhere"][] = $filter[0] . " " . $op . " " . $key_var; $t["sqlwhere_default"][] = $filter[0] . " " . $op . " " . $key_var; } } } if (!empty($t["att"]["ENABLE_ASSET_RIGHTS"])) { $t["sqlvarsnoquote"]["permission_sql_read_nq"] = $_SESSION["permission_sql_read"]; $t["sqlvarsnoquote"]["permission_sql_write_nq"] = $_SESSION["permission_sql_write"]; } foreach ($t["sqlwhere_default"] as $key => $value) { if (!preg_match_all("|@(.*?)@|i", $value, $matches, PREG_SET_ORDER)) { continue; } foreach ($matches as $match) { if (count($match) != 2) { continue; } $req_key = $match[1]; if (isset($_SESSION[$req_key])) { $t["sqlvars"][$req_key] = $_SESSION[$req_key]; } } } if ($t["default_sql"] == "" or $t["default_sql"] != "no_select") { $vars = array("handler" => $t["handler"], "sqlvarsnoquote" => $t["sqlvarsnoquote"], "default_sql" => $t["default_sql"], "custom_name" => $t["custom_name"]); $fcount = $GLOBALS["sel_folder"]["fcount"]; if (!empty($vars["handler"]) or !empty($vars["default_sql"]) or count($t["sqlvars"]["folders"]) > 1 or !empty($t["custom_name"])) { $t["maxdatasets"] = db_count($tname, $t["sqlwhere_default"], $t["sqlvars"], $vars); } else { if (!sys_strbegins($tname, "simple_sys_") and ($t["sqlwhere_default"] == array("folder in (@folders@)") or $fcount == 0)) { $t["maxdatasets"] = $fcount; } else { if ($fcount > 100) { $cid = "dbcount_" . sha1(serialize(array($t["sqlvars"], $t["sqlwhere_default"], $fcount))); $t["maxdatasets"] = sys_cache_get($cid); if ($t["maxdatasets"] === false) { $t["maxdatasets"] = db_count($tname, $t["sqlwhere_default"], $t["sqlvars"], $vars); sys_cache_set($cid, $t["maxdatasets"], OUTPUT_CACHE); } } else { $t["maxdatasets"] = db_count($tname, $t["sqlwhere_default"], $t["sqlvars"], $vars); } } } } else { $t["maxdatasets"] = 0; } if (isset($_REQUEST["orderby"]) and isset($_REQUEST["order"])) { $_SESSION[$tname][$tview]["orderby"] = $_REQUEST["orderby"]; $_SESSION[$tname][$tview]["order"] = $_REQUEST["order"]; } $t["hidden_fields"] = array(); if (isset($_REQUEST["hide_fields"])) { $_SESSION[$tname][$tview]["hidden"] = explode(",", $_REQUEST["hide_fields"]); } if (!empty($_SESSION[$tname][$tview]["hidden"]) and empty($t["views"][$tview]["SCHEMA_MODE"])) { $t["hidden_fields"] = $_SESSION[$tname][$tview]["hidden"]; foreach ($t["hidden_fields"] as $field) { unset($t["fields"][$field]); } } if (isset($_SESSION[$tname][$tview]["order"]) and isset($_SESSION[$tname][$tview]["orderby"]) and in_array($_SESSION[$tname][$tview]["order"], array("asc", "desc")) and isset($t["fields"][$_SESSION[$tname][$tview]["orderby"]])) { $t["orderby"] = $_SESSION[$tname][$tview]["orderby"]; $t["order"] = $_SESSION[$tname][$tview]["order"]; } foreach ($t["sqlwhere"] as $key => $value) { if (!preg_match_all("|@(.*?)@|i", $value, $matches, PREG_SET_ORDER)) { continue; } foreach ($matches as $match) { if (count($match) != 2) { continue; } $req_key = $match[1]; if ($req_key == "folders") { continue; } if ($req_key == "item") { $skey = $tview; } else { $skey = "request"; } if (isset($_SESSION["_" . $tfolder][$skey][$req_key])) { $t["sqlvars"][$req_key] = $_SESSION["_" . $tfolder][$skey][$req_key]; } if (isset($_SESSION[$req_key])) { $t["sqlvars"][$req_key] = $_SESSION[$req_key]; } if (isset($_REQUEST[$req_key])) { $t["sqlvars"][$req_key] = $_REQUEST[$req_key]; $_SESSION["_" . $tfolder][$skey][$req_key] = $_REQUEST[$req_key]; } if (!isset($t["sqlvars"][$req_key]) and empty($t["sqlvarsnoquote"][$req_key])) { $t["sqlwhere"][$key] = "1=1"; } } } if (!isset($_SESSION[$tname][$tview]["group"])) { $_SESSION[$tname][$tview]["group"] = $t["group"]; } if (!isset($_SESSION[$tname][$tview]["groupby"])) { $_SESSION[$tname][$tview]["groupby"] = $t["groupby"]; } if (isset($_REQUEST["group"])) { if ($_SESSION[$tname][$tview]["groupby"] == "") { $_SESSION[$tname][$tview]["groupby"] = $t["orderby"]; $_SESSION[$tname][$tview]["group"] = $t["order"]; } else { $_SESSION[$tname][$tview]["groupby"] = ""; $_SESSION[$tname][$tview]["group"] = ""; } } if (!isset($_REQUEST["plain"])) { $t["groupby"] = $_SESSION[$tname][$tview]["groupby"]; $t["group"] = $_SESSION[$tname][$tview]["group"]; } else { $t["groupby"] = ""; $t["group"] = ""; } if ($t["groupby"] != "" and isset($t["fields"][$t["groupby"]])) { $field = $t["fields"][$t["groupby"]]; $field["WIDTH"] = 0; unset($t["fields"][$t["groupby"]]); unset($t["fields_query"][$t["groupby"]]); $t["fields"] = array_merge(array($t["groupby"] => $field), $t["fields"]); $t["fields_query"] = array_unique(array_merge(array($t["groupby"]), $t["fields_query"])); } _asset_process_pages($t["maxdatasets"]); if (!isset($t["views"][$tview]["NOSQLORDER"])) { $t["sqlorder"] = ($t["groupby"] != "" ? $t["groupby"] . " " . $t["group"] . "," : "") . $t["orderby"] . " " . $t["order"]; } if (!isset($t["views"][$tview]["NOSQLLIMIT"]) and empty($_REQUEST["print_all"]) and (empty($_REQUEST["export"]) or !empty($_REQUEST["limit"]))) { $t["sqllimit"] = array(($t["page"] - 1) * $t["limit"], $t["limit"]); } if (!empty($_REQUEST["iframe"]) and isset($_REQUEST["session_remove_request"])) { $t["sqllimit"] = array(); } // offline reading if (!empty($t["sqlvars"]["item"]) and $t["views"][$tview]["SCHEMA_MODE"] == "edit" and $t["maxdatasets"] == 0) { sys_warning("{t}Item(s) not found or access denied.{/t}"); } if ($t["maxdatasets"] != 0) { _asset_get_rows(); } if ((!empty($_REQUEST["form_submit_create"]) or !empty($_REQUEST["form_submit_edit"])) and $t["rights"]["write"] and $t["schema_mode"] != "") { $mode = $t["schema_mode"] == "edit" ? "edit" : "create"; list($t["errors"], $defaults, $form_ids, $saved_ids) = asset::create_edit($tfolder, $tview, $mode); foreach ($t["limits"] as $key => $val) { if (in_array($val, $form_ids)) { unset($t["limits"][$key]); } } if (count($t["errors"]) == 0) { $t["limits"] = range(0, $t["limit"] - 1); if (!empty($_REQUEST["form_submit_return"])) { $arr = array_pop(array_slice($_SESSION["history"], -2, 1)); if (empty($arr[2])) { $arr[2] = "default"; } sys_redirect("index.php?view=" . $arr[2] . "&" . sys::$urladdon); } if (!empty($_REQUEST["form_submit_go_edit"])) { $items = ""; foreach ($saved_ids as $id) { $items .= "&item[]=" . rawurlencode($id); } sys_redirect("index.php?view=edit" . $items . "&" . sys::$urladdon); } } foreach ($defaults as $id => $field) { foreach ($field as $field_name => $value) { $t["fields"][$field_name]["SIMPLE_DEFAULTS"][$id] = $value; $t["fields"][$field_name]["SIMPLE_DEFAULT"] = ""; } } } sys::$smarty->assign_by_ref("t", $t); }
if ($user['authlevel'] < 3) { AdminMessage($lang['adm_err_denied']); } global $config; ini_set('memory_limit', $config->stats_php_memory ? $config->stats_php_memory : '256M'); lng_include('admin'); $sort_fields = array(SORT_ID => 'id', SORT_NAME => 'username', SORT_EMAIL => 'email', SORT_IP => 'user_lastip', SORT_TIME_REGISTERED => 'register_time', SORT_TIME_LAST_VISIT => 'onlinetime', SORT_TIME_BAN_UNTIL => 'banaday', SORT_REFERRAL_COUNT => 'referral_count', SORT_REFERRAL_DM => 'referral_dm'); $sort = sys_get_param_int('sort', SORT_ID); $sort = $sort_fields[$sort] ? $sort : SORT_ID; if (($action = sys_get_param_int('action')) && ($user_id = sys_get_param_id('uid'))) { $user_selected = db_user_by_id($user_id, false, 'id, username, authlevel'); if ($user_selected['authlevel'] < $user['authlevel'] && $user['authlevel'] >= 3) { switch ($action) { case ACTION_DELETE: DeleteSelectedUser($user_id); sys_redirect("{$_SERVER['SCRIPT_NAME']}?sort={$sort}"); break; case ACTION_USE: // Impersonate sn_sys_impersonate($user_selected); break; } } else { // Restricted try to delete user higher or equal level AdminMessage($lang['adm_err_denied']); } } $template = gettemplate('admin/userlist', true); $multi_ip = array(); $ip_query = db_user_list_admin_multiaccounts(); while ($ip = db_fetch($ip_query)) {
<?php include_once 'common.' . substr(strrchr(__FILE__, '.'), 1); if (sn_module_get_active_count('payment') && !defined('SN_GOOGLE')) { sys_redirect('metamatter.php'); } $template = gettemplate('dark_matter', true); lng_include('infos'); $template->assign_vars(array('URL_DARK_MATTER' => $config->url_dark_matter, 'DARK_MATTER_DESCRIPTION' => $lang['info'][RES_DARK_MATTER]['description'], 'PAYMENT_AVAILABLE' => sn_module_get_active_count('payment') && !defined('SN_GOOGLE'), 'PAGE_HEADER' => $lang['sys_dark_matter'])); display($template, $lang['sys_dark_matter']);
<?php // Придумать какой статус должен быть у глобальных ответов, что бы не перекрывать статусы платежных систем // Может добавить спецстатус "Ответ системы платежа" и парсить дальше getMessage // см constants.php include_once 'common.' . substr(strrchr(__FILE__, '.'), 1); if (!sn_module_get_active_count('payment')) { sys_redirect('overview.php'); die; } global $config; lng_include('payment'); $template = gettemplate('metamatter', true); $player_currency_default = player_load_option($user, PLAYER_OPTION_CURRENCY_DEFAULT); $player_currency = sys_get_param_str('player_currency', $player_currency_default); empty($lang['pay_currency_list'][$player_currency]) ? $player_currency = $player_currency_default ? $player_currency_default : $config->payment_currency_default : false; $player_currency_default != $player_currency ? player_save_option($user, PLAYER_OPTION_CURRENCY_DEFAULT, $player_currency) : false; // Конвертация ММ в ТМ if (sys_get_param('mm_convert_do')) { try { if (!($mm_convert = sys_get_param_id('mm_convert'))) { throw new exception($lang['pay_msg_mm_convert_wrong_amount'], ERR_ERROR); } sn_db_transaction_start(); $user = db_user_by_id($user['id'], true); if ($mm_convert > mrc_get_level($user, null, RES_METAMATTER)) { throw new exception($lang['pay_msg_mm_convert_not_enough'], ERR_ERROR); } $payment_comment = sprintf("Игрок сконвертировал %d Метаматерии в Тёмную Материю", $mm_convert); if (!mm_points_change($user['id'], RPG_CONVERT_MM, -$mm_convert, $payment_comment)) { throw new exception($lang['pay_msg_mm_convert_mm_error'], ERR_ERROR);
function que_build($user, $planet, $build_mode = BUILD_CREATE, $redirect = true) { global $lang; $unit_amount_qued = 0; try { if (!$user['id']) { throw new exception('{Нет идентификатора пользователя - сообщите Администрации}', ERR_ERROR); // TODO EXCEPTION } $unit_id = sys_get_param_int('unit_id'); /* if(!$unit_id && is_array($unit_list = sys_get_param('fmenge'))) { foreach($unit_list as $unit_id => $unit_amount) if($unit_amount) break; } */ if (!$unit_id) { throw new exception('{Нет идентификатора юнита - сообщите Администрации}', ERR_ERROR); // TODO EXCEPTION } $que_id = que_get_unit_que($unit_id); if (!$que_id) { throw new exception('{Неправильный тип очереди - сообщите Администрации}', ERR_ERROR); // TODO EXCEPTION } if ($build_mode == BUILD_DESTROY && $que_id != QUE_STRUCTURES) { throw new exception('{Уничтожать можно только здания на планете}', ERR_ERROR); // TODO EXCEPTION } $que_data = sn_get_groups('ques'); $que_data = $que_data[$que_id]; // die(); // TODO Переделать под подочереди if ($que_id == QUE_STRUCTURES) { $sn_groups_build_allow = sn_get_groups('build_allow'); $que_data['unit_list'] = $sn_groups_build_allow[$planet['planet_type']]; if (!isset($que_data['unit_list'][$unit_id])) { throw new exception('{Это здание нельзя строить на ' . ($planet['planet_type'] == PT_PLANET ? 'планете' : 'луне'), ERR_ERROR); // TODO EXCEPTION } } /* // TODO Разделить очереди для Верфи и Обороны elseif($que_id == QUE_HANGAR) { $que_data['mercenary'] = in_array($unit_id, sn_get_groups('defense')) ? MRC_FORTIFIER : MRC_ENGINEER; } elseif($que_id == QUE_HANGAR) { $que_data['mercenary'] = in_array($unit_id, sn_get_groups('defense')) ? MRC_FORTIFIER : MRC_ENGINEER; } */ sn_db_transaction_start(); // Это нужно, что бы заблокировать пользователя и работу с очередями $user = db_user_by_id($user['id']); // Это нужно, что бы заблокировать планету от списания ресурсов if (isset($planet['id']) && $planet['id']) { $planet = db_planet_by_id($planet['id'], true); } else { $planet['id'] = 0; } $planet_id = $que_id == QUE_RESEARCH ? 0 : intval($planet['id']); $que = que_get($user['id'], $planet['id'], $que_id, true); $in_que =& $que['in_que'][$que_id][$user['id']][$planet_id]; $que_max_length = que_get_max_que_length($user, $planet, $que_id, $que_data); // TODO Добавить вызовы функций проверок текущей и максимальной длин очередей if (count($in_que) >= $que_max_length) { throw new exception('{Все слоты очереди заняты}', ERR_ERROR); // TODO EXCEPTION } // TODO Отдельно посмотреть на уничтожение зданий - что бы можно было уничтожать их без планов switch (eco_can_build_unit($user, $planet, $unit_id)) { case BUILD_ALLOWED: break; case BUILD_UNIT_BUSY: throw new exception('{Строение занято}', ERR_ERROR); break; // TODO EXCEPTION eco_bld_msg_err_laboratory_upgrading // case BUILD_REQUIRE_NOT_MEET: // TODO EXCEPTION eco_bld_msg_err_laboratory_upgrading // case BUILD_REQUIRE_NOT_MEET: default: if ($build_mode == BUILD_CREATE) { throw new exception('{Требования не удовлетворены}', ERR_ERROR); } break; // TODO EXCEPTION eco_bld_msg_err_requirements_not_meet } $unit_amount = floor(sys_get_param_float('unit_amount', 1)); $unit_amount_qued = $unit_amount; $units_qued = isset($in_que[$unit_id]) ? $in_que[$unit_id] : 0; $unit_level = mrc_get_level($user, $planet, $unit_id, true, true) + $units_qued; if ($unit_max = get_unit_param($unit_id, P_MAX_STACK)) { if ($unit_level >= $unit_max) { throw new exception('{Максимальное количество юнитов данного типа уже достигнуто или будет достигнуто по окончанию очереди}', ERR_ERROR); // TODO EXCEPTION } $unit_amount = max(0, min($unit_amount, $unit_max - $unit_level)); } if ($unit_amount < 1) { throw new exception('{Неправильное количество юнитов - сообщите Администрации}', ERR_ERROR); // TODO EXCEPTION } /* if($unit_max && $unit_level + $unit_amount > $unit_max) { throw new exception("Постройка {$unit_amount} {$lang['tech'][$unit_id]} приведет к привышению максимально возможного количества юнитов данного типа", ERR_ERROR); // TODO EXCEPTION } */ // TODO Переделать eco_unit_busy для всех типов зданий // if(eco_unit_busy($user, $planet, $que, $unit_id)) // { // die('Unit busy'); // TODO EXCEPTION // } if (get_unit_param($unit_id, P_STACKABLE)) { // TODO Поле 'max_Lot_size' для ограничения размера стэка в очереди - то ли в юниты, то ли в очередь if (in_array($unit_id, $group_missile = sn_get_groups('missile'))) { // TODO Поле 'container' - указывает на родительску структуру, в которой хранится данный юнит и по вместительности которой нужно применять размер юнита $used_silo = 0; foreach ($group_missile as $missile_id) { $missile_qued = isset($in_que[$missile_id]) ? $in_que[$missile_id] : 0; $used_silo += (mrc_get_level($user, $planet, $missile_id, true, true) + $missile_qued) * get_unit_param($missile_id, P_UNIT_SIZE); } $free_silo = mrc_get_level($user, $planet, STRUC_SILO) * get_unit_param(STRUC_SILO, P_CAPACITY) - $used_silo; if ($free_silo <= 0) { throw new exception('{Ракетная шахта уже заполнена или будет заполнена по окончанию очереди}', ERR_ERROR); // TODO EXCEPTION } $unit_size = get_unit_param($unit_id, P_UNIT_SIZE); if ($free_silo < $unit_size) { throw new exception("{В ракетной шахте нет места для {$lang['tech'][$unit_id]}}", ERR_ERROR); // TODO EXCEPTION } $unit_amount = max(0, min($unit_amount, floor($free_silo / $unit_size))); } $unit_level = $new_unit_level = 0; } else { $unit_amount = 1; if ($que_id == QUE_STRUCTURES) { // if($build_mode == BUILD_CREATE && eco_planet_fields_max($planet) - $planet['field_current'] - $que['sectors'][$planet['id']] <= 0) $sectors_qued = is_array($in_que) ? array_sum($in_que) : 0; if ($build_mode == BUILD_CREATE && eco_planet_fields_max($planet) - $planet['field_current'] - $sectors_qued <= 0) { throw new exception('{Не хватает секторов на планете}', ERR_ERROR); // TODO EXCEPTION } // И что это я такое написал? Зачем? //if($build_mode == BUILD_DESTROY && $planet['field_current'] <= $que['amounts'][$que_id]) //{ // die('Too much buildings'); // TODO EXCEPTION //} } $build_multiplier = $build_mode == BUILD_CREATE ? 1 : -1; $new_unit_level = $unit_level + $unit_amount * $build_multiplier; } $build_data = eco_get_build_data($user, $planet, $unit_id, $unit_level); $unit_amount = min($build_data['CAN'][$build_mode], $unit_amount); if ($unit_amount < 0) { throw new exception('{Не хватает ресурсов}', ERR_ERROR); // TODO EXCEPTION } if ($new_unit_level < 0) { throw new exception('{Нельзя уничтожить больше юнитов, чем есть}', ERR_ERROR); // TODO EXCEPTION } if ($build_data['RESULT'][$build_mode] != BUILD_ALLOWED) { throw new exception('{Строительство блокировано}', ERR_ERROR); // TODO EXCEPTION } // $unit_amount = min($unit_amount, MAX_FLEET_OR_DEFS_PER_ROW); $unit_amount_qued = 0; while ($unit_amount > 0 && count($que['ques'][$que_id][$user['id']][$planet_id]) < $que_max_length) { $place = min($unit_amount, MAX_FLEET_OR_DEFS_PER_ROW); que_add_unit($unit_id, $user, $planet, $build_data, $new_unit_level, $place, $build_mode); $unit_amount -= $place; $que = que_get($user['id'], $planet['id'], $que_id, true); $unit_amount_qued += $place; } // pdump($que); /* pdump($que = que_get($user['id'], $planet['id'], $que_id, true)); */ // die(); // if(count($que['ques'][$que_id][$user['id']][$planet_id]) >= $que_max_length) sn_db_transaction_commit(); if ($redirect) { sys_redirect("{$_SERVER['PHP_SELF']}?mode=" . sys_get_param_str('mode') . "&ally_id=" . sys_get_param_id('ally_id')); die; } $operation_result = array('STATUS' => ERR_NONE, 'MESSAGE' => '{Строительство начато}'); } catch (exception $e) { sn_db_transaction_rollback(); $operation_result = array('STATUS' => in_array($e->getCode(), array(ERR_NONE, ERR_WARNING, ERR_ERROR)) ? $e->getCode() : ERR_ERROR, 'MESSAGE' => $e->getMessage()); } if (!empty($operation_result['MESSAGE'])) { $operation_result['MESSAGE'] .= ' ' . ($unit_amount_qued ? $unit_amount_qued : $unit_amount) . 'x[' . $lang['tech'][$unit_id] . ']' . (isset($planet['id']) ? ' на ' . $planet['name'] : '') . '}'; } return $operation_result; }
<?php global $debug; // Придумать какой статус должен быть у глобальных ответов, что бы не перекрывать статусы платежных систем // Может добавить спецстатус "Ответ системы платежа" и парсить дальше getMessage // см constants.php include_once 'common.' . substr(strrchr(__FILE__, '.'), 1); if (!sn_module_get_active_count('payment')) { sys_redirect('dark_matter.php'); die; } global $config; lng_include('payment'); lng_include('infos'); $template = gettemplate('metamatter', true); // $player_currency_default = player_load_option($user, PLAYER_OPTION_CURRENCY_DEFAULT); $player_currency_default = classSupernova::$user_options[PLAYER_OPTION_CURRENCY_DEFAULT]; $player_currency = sys_get_param_str('player_currency', $player_currency_default); empty($lang['pay_currency_list'][$player_currency]) ? $player_currency = $player_currency_default ? $player_currency_default : $config->payment_currency_default : false; // $player_currency_default != $player_currency ? player_save_option($user, PLAYER_OPTION_CURRENCY_DEFAULT, $player_currency) : false; $player_currency_default != $player_currency ? classSupernova::$user_options[PLAYER_OPTION_CURRENCY_DEFAULT] = $player_currency : false; //// Конвертация ММ в ТМ //if(sys_get_param('mm_convert_do')) { // try { // if(!($mm_convert = sys_get_param_id('mm_convert'))) { // throw new exception($lang['pay_msg_mm_convert_wrong_amount'], ERR_ERROR); // } // // sn_db_transaction_start(); // $user = db_user_by_id($user['id'], true); // if($mm_convert > mrc_get_level($user, null, RES_METAMATTER)) {
function mrc_mercenary_hire($mode, $user, $mercenary_id) { global $config, $lang, $sn_powerup_buy_discounts; try { $is_permanent = $mode == UNIT_PLANS || !$config->empire_mercenary_temporary; $cost_alliance_multiplyer = SN_IN_ALLY === true && $mode == UNIT_PLANS ? $config->ali_bonus_members : 1; $cost_alliance_multiplyer = $cost_alliance_multiplyer >= 1 ? $cost_alliance_multiplyer : 1; if (!in_array($mercenary_id, sn_get_groups($mode == UNIT_PLANS ? 'plans' : 'mercenaries'))) { throw new Exception($lang['mrc_msg_error_wrong_mercenary'], ERR_ERROR); } if (!mrc_officer_accessible($user, $mercenary_id)) { throw new Exception($lang['mrc_msg_error_requirements'], ERR_ERROR); } $mercenary_level = sys_get_param_int('mercenary_level'); if ($mercenary_level < 0 || $mercenary_level > get_unit_param($mercenary_id, P_MAX_STACK)) { throw new Exception($lang['mrc_msg_error_wrong_level'], ERR_ERROR); } if ($mercenary_level && !array_key_exists($mercenary_period = sys_get_param_int('mercenary_period'), $sn_powerup_buy_discounts)) { throw new Exception($lang['mrc_msg_error_wrong_period'], ERR_ERROR); } sn_db_transaction_start(); $mercenary_level_old = mrc_get_level($user, $planetrow, $mercenary_id, true, true); if ($config->empire_mercenary_temporary && $mercenary_level_old && $mercenary_level) { throw new Exception($lang['mrc_msg_error_already_hired'], ERR_ERROR); // Can't hire already hired temp mercenary - dismiss first } elseif ($config->empire_mercenary_temporary && !$mercenary_level_old && !$mercenary_level) { throw new Exception('', ERR_NONE); // Can't dismiss (!$mercenary_level) not hired (!$mercenary_level_old) temp mercenary. But no error } if ($mercenary_level) { $darkmater_cost = eco_get_total_cost($mercenary_id, $mercenary_level); if (!$config->empire_mercenary_temporary && $mercenary_level_old) { $darkmater_cost_old = eco_get_total_cost($mercenary_id, $mercenary_level_old); $darkmater_cost[BUILD_CREATE][RES_DARK_MATTER] -= $darkmater_cost_old[BUILD_CREATE][RES_DARK_MATTER]; } $darkmater_cost = ceil($darkmater_cost[BUILD_CREATE][RES_DARK_MATTER] * $mercenary_period * $sn_powerup_buy_discounts[$mercenary_period] / $config->empire_mercenary_base_period); } else { $darkmater_cost = 0; } $darkmater_cost *= $cost_alliance_multiplyer; if (mrc_get_level($user, null, RES_DARK_MATTER) < $darkmater_cost) { throw new Exception($lang['mrc_msg_error_no_resource'], ERR_ERROR); } if ($darkmater_cost && $mercenary_level || !$is_permanent) { $unit_row = db_unit_by_location($user['id'], LOC_USER, $user['id'], $mercenary_id); if (is_array($unit_row) && ($dismiss_left_days = floor((strtotime($unit_row['unit_time_finish']) - SN_TIME_NOW) / PERIOD_DAY))) { $dismiss_full_cost = eco_get_total_cost($mercenary_id, $unit_row['unit_level']); $dismiss_full_cost = $dismiss_full_cost[BUILD_CREATE][RES_DARK_MATTER]; $dismiss_full_days = round((strtotime($unit_row['unit_time_finish']) - strtotime($unit_row['unit_time_start'])) / PERIOD_DAY); /* print(sprintf($lang['mrc_mercenary_dismissed_log'], $lang['tech'][$mercenary_id], $mercenary_id, $dismiss_full_cost, $dismiss_full_days, $unit_row['unit_time_start'], $unit_row['unit_time_finish'], $dismiss_left_days, floor($dismiss_full_cost * $dismiss_left_days / $dismiss_full_days) )); */ rpg_points_change($user['id'], RPG_MERCENARY_DISMISSED, 0, sprintf($lang['mrc_mercenary_dismissed_log'], $lang['tech'][$mercenary_id], $mercenary_id, $dismiss_full_cost, $dismiss_full_days, $unit_row['unit_time_start'], $unit_row['unit_time_finish'], $dismiss_left_days, floor($dismiss_full_cost * $dismiss_left_days / $dismiss_full_days))); } db_unit_list_delete($user['id'], LOC_USER, $user['id'], $mercenary_id); } if ($darkmater_cost && $mercenary_level) { db_unit_set_insert("unit_player_id = {$user['id']},\n unit_location_type = " . LOC_USER . ",\n unit_location_id = {$user['id']},\n unit_type = {$mode},\n unit_snid = {$mercenary_id},\n unit_level = {$mercenary_level},\n unit_time_start = " . (!$is_permanent ? 'FROM_UNIXTIME(' . SN_TIME_NOW . ')' : 'null') . ",\n unit_time_finish = " . (!$is_permanent ? 'FROM_UNIXTIME(' . (SN_TIME_NOW + $mercenary_period) . ')' : 'null')); rpg_points_change($user['id'], $mode == UNIT_PLANS ? RPG_PLANS : RPG_MERCENARY, -$darkmater_cost, sprintf($lang[$mode == UNIT_PLANS ? 'mrc_plan_bought_log' : 'mrc_mercenary_hired_log'], $lang['tech'][$mercenary_id], $mercenary_id, $darkmater_cost, round($mercenary_period / PERIOD_DAY))); } sn_db_transaction_commit(); sys_redirect($_SERVER['REQUEST_URI']); } catch (Exception $e) { sn_db_transaction_rollback(); $operation_result = array('STATUS' => in_array($e->getCode(), array(ERR_NONE, ERR_WARNING, ERR_ERROR)) ? $e->getCode() : ERR_ERROR, 'MESSAGE' => $e->getMessage()); } return $operation_result; }
} $uni_row = doquery("select * from `{{universe}}` where `universe_galaxy` = {$uni_galaxy} and `universe_system` = {$uni_system} limit 1;", '', true); $uni_row['universe_price'] += $uni_system ? $config->uni_price_system : $config->uni_price_galaxy; $uni_row['universe_name'] = strip_tags($uni_row['universe_name'] ? $uni_row['universe_name'] : ($uni_system ? "{$lang['sys_system']} [{$uni_galaxy}:{$uni_system}]" : "{$lang['sys_galaxy']} {$uni_galaxy}")); if (sys_get_param_str('uni_name_submit')) { $uni_row['universe_name'] = strip_tags(sys_get_param_str('uni_name')); $uni_price = sys_get_param_float('uni_price'); if ($uni_price < $uni_row['universe_price']) { throw new exception($lang['uni_msg_error_low_price'], ERR_ERROR); } $uni_row['universe_price'] = $uni_price; sn_db_transaction_start(); $user = db_user_by_id($user['id'], true); // if($user[get_unit_param(RES_DARK_MATTER, P_NAME)] < $uni_price) if (mrc_get_level($user, null, RES_DARK_MATTER) < $uni_price) { throw new exception($lang['uni_msg_error_no_dm'], ERR_ERROR); } if (!rpg_points_change($user['id'], RPG_RENAME, -$uni_price, "Renaming [{$uni_galaxy}:{$uni_system}] to " . sys_get_param_str_unsafe('uni_name'))) { throw new exception($lang['sys_msg_err_update_dm'], ERR_ERROR); } doquery("replace {{universe}} set `universe_galaxy` = {$uni_galaxy}, `universe_system` = {$uni_system}, `universe_name` = '{$uni_row['universe_name']}', `universe_price` = {$uni_row['universe_price']};"); $debug->warning(sprintf($lang['uni_msg_admin_rename'], $user['id'], $user['username'], $uni_price, $uni_system ? $lang['uni_system_of'] : $lang['uni_galaxy_of'], $uni_galaxy, $uni_system ? ":{$uni_system}" : '', strip_tags(sys_get_param_str_unsafe('uni_name'))), $lang['uni_naming'], LOG_INFO_UNI_RENAME); sn_db_transaction_commit(); sys_redirect("galaxy.php?mode=name&galaxy={$uni_galaxy}&system={$uni_system}"); } } catch (exception $e) { sn_db_transaction_rollback(); $template->assign_block_vars('result', array('STATUS' => in_array($e->getCode(), array(ERR_NONE, ERR_WARNING, ERR_ERROR)) ? $e->getCode() : ERR_ERROR, 'MESSAGE' => $e->getMessage())); } $template->assign_vars(array('GALAXY' => $uni_galaxy, 'SYSTEM' => $uni_system, 'NAME' => sys_safe_output($uni_row['universe_name']), 'PRICE' => $uni_row['universe_price'], 'PAGE_HINT' => $lang['uni_name_page_hint'])); display($template, $lang['sys_universe'] . ' - ' . $lang['uni_naming'], true, '', false);
protected function payment_request_process($options = array()) { global $lang, $config; if (!$this->manifest['active']) { throw new Exception($lang['pay_msg_module_disabled'], SN_MODULE_DISABLED); } // Если есть payment_id - загружаем под него данные if (!empty($this->payment_params['payment_id'])) { $this->request_payment_id = sys_get_param_id($this->payment_params['payment_id']); if (!$this->request_payment_id) { throw new Exception($lang['pay_msg_request_payment_id_invalid'], SN_PAYMENT_REQUEST_INTERNAL_ID_WRONG); } if (!$this->db_get_by_id($this->request_payment_id)) { throw new Exception($lang['pay_msg_request_payment_id_invalid'], SN_PAYMENT_REQUEST_INTERNAL_ID_WRONG); } // Проверяем - был ли этот платеж обработан? // TODO - Статусы бывают разные. Нужен спецфлаг payment_processed if ($this->payment_status != PAYMENT_STATUS_NONE) { sn_db_transaction_rollback(); sys_redirect(SN_ROOT_VIRTUAL . 'metamatter.php?payment_id=' . $this->payment_id); die; } } // Пытаемся получить из запроса ИД аккаунта $request_account_id = !empty($this->payment_params['account_id']) ? sys_get_param_id($this->payment_params['account_id']) : 0; // Если в запросе нет ИД аккаунта - пытаемся использовать payment_account_id if (empty($request_account_id) && !empty($this->payment_account_id)) { $request_account_id = $this->payment_account_id; } // Если теперь у нас нету ИД аккаунта ни в запросе, ни в записи таблицы - можно паниковать if (empty($request_account_id)) { // TODO - аккаунт throw new Exception($lang['pay_msg_request_user_invalid'], $this->retranslate_error(SN_PAYMENT_REQUEST_USER_NOT_FOUND, $options)); } // Если нет записи в таблице - тогда берем payment_account_id из запроса if (empty($this->payment_account_id)) { $this->payment_account_id = $request_account_id; } // Если у нас отличаются ИД аккаунта в запросе и ИД аккаунта в записи - тоже можно паниковать if ($this->payment_account_id != $request_account_id) { // TODO - Поменять сообщение об ошибке throw new Exception($lang['pay_msg_request_user_invalid'], $this->retranslate_error(SN_PAYMENT_REQUEST_USER_NOT_FOUND, $options)); } // Проверяем существование аккаунта с данным ИД if (!$this->account->db_get_by_id($this->payment_account_id)) { throw new Exception($lang['pay_msg_request_user_invalid'] . ' ID ' . $this->payment_account_id, $this->retranslate_error(SN_PAYMENT_REQUEST_USER_NOT_FOUND, $options)); } // TODO Проверка на сервер_ид - как бы и не нужна, наверное? if (!empty($this->payment_params['server_id'])) { $this->request_server_id = sys_get_param_str($this->payment_params['server_id']); if (SN_ROOT_VIRTUAL != $this->request_server_id) { throw new Exception($lang['pay_msg_request_server_wrong'] . " {$this->request_server_id} вместо " . SN_ROOT_VIRTUAL, SN_PAYMENT_REQUEST_SERVER_WRONG); } } // Сверка количества оплаченной ММ с учётом бонусов if (!empty($this->payment_params['payment_dark_matter_gained'])) { $request_mm_amount = sys_get_param_id($this->payment_params['payment_dark_matter_gained']); if ($request_mm_amount != $this->payment_dark_matter_gained && $this->is_loaded) { throw new Exception($lang['pay_msg_mm_request_amount_invalid'] . " пришло {$request_mm_amount} ММ вместо {$this->payment_dark_matter_gained} ММ", SN_PAYMENT_REQUEST_MM_AMOUNT_INVALID); } empty($this->payment_dark_matter_gained) ? $this->payment_dark_matter_gained = $request_mm_amount : false; } if (empty($this->payment_dark_matter_paid)) { // TODO - обратный расчёт из gained } // Проверка наличия внешнего ИД платежа if (!empty($this->payment_params['payment_external_id'])) { $request_payment_external_id = sys_get_param_id($this->payment_params['payment_external_id']); if (empty($request_payment_external_id)) { throw new exception($lang['pay_msg_request_payment_id_invalid'], SN_PAYMENT_REQUEST_EXTERNAL_ID_WRONG); } elseif (!empty($this->payment_external_id) && $this->payment_external_id != $request_payment_external_id) { // TODO - Может быть поменять сообщение throw new exception($lang['pay_msg_request_payment_id_invalid'], SN_PAYMENT_REQUEST_EXTERNAL_ID_WRONG); } $this->payment_external_id = $request_payment_external_id; } // Сверка суммы, запрошенной СН к оплате if (!empty($this->payment_params['payment_external_money'])) { $request_money_out = sys_get_param_float($this->payment_params['payment_external_money']); if ($request_money_out != $this->payment_external_amount && $this->is_loaded) { throw new Exception($lang['pay_msg_request_payment_amount_invalid'] . " пришло {$request_money_out} денег вместо {$this->payment_external_amount} денег", SN_PAYMENT_REQUEST_CURRENCY_AMOUNT_INVALID); } empty($this->payment_external_amount) ? $this->payment_external_amount = $request_money_out : false; } // Заполняем поле валюты платёжной системы if (!empty($this->payment_params['payment_external_currency'])) { $this->payment_external_currency = sys_get_param_str($this->payment_params['payment_external_currency']); if (empty($this->payment_external_currency)) { // TODO - поменять сообщение throw new Exception($lang['pay_msg_request_payment_amount_invalid'] . " {$this->payment_external_currency}", SN_PAYMENT_REQUEST_CURRENCY_AMOUNT_INVALID); } } if (empty($this->payment_external_currency)) { $this->payment_external_currency = $this->config['currency']; } // Заполнение внутренней суммы и валюты из внешних данных if (empty($this->payment_currency)) { $this->payment_currency = $config->payment_currency_default; } if (empty($this->payment_amount) && !empty($this->payment_external_currency)) { $this->payment_amount = self::currency_convert($this->payment_external_amount, $this->payment_external_currency, $this->payment_currency); } // TODO - Тестовый режим if (!empty($this->payment_params['test'])) { $this->payment_test = $this->config['test'] || sys_get_param_int($this->payment_params['test']); } $this->generate_description(); // // TODO - REMOVE // return array( // 'payer' => $this->account, // ); }
/** * Имперсонация * * @param $user_selected */ public function impersonate($user_selected) { if ($_COOKIE[SN_COOKIE_U_I]) { die('You already impersonating someone. Go back to living other\'s life! Or clear your cookies and try again'); // TODO: Log it } if ($this->auth_level_max_local < AUTH_LEVEL_ADMINISTRATOR) { die('You can\'t impersonate - too low level'); // TODO: Log it } if ($this->auth_level_max_local <= $user_selected['authlevel']) { die('You can\'t impersonate this account - level is greater or equal to yours'); // TODO: Log it } $account_translate = PlayerToAccountTranslate::db_translate_get_account_by_user_id($user_selected['id'], self::$main_provider->provider_id); $account_translate = reset($account_translate[$user_selected['id']][self::$main_provider->provider_id]); $account_to_impersonate = new Account(self::$main_provider->db); $account_to_impersonate->db_get_by_id($account_translate['provider_account_id']); if (!$account_to_impersonate->is_exists) { die('Какая-то ошибка - не могу найти аккаунт для имперсонации'); // TODO: Log it } self::$main_provider->impersonate($account_to_impersonate); self::cookie_set($_COOKIE[SN_COOKIE_U], true, 0); // TODO - Имперсонейт - только на одну сессию self::cookie_set($user_selected['id']); // sec_set_cookie_by_user($user_selected, 0); sys_redirect(SN_ROOT_RELATIVE); }
header("Pragma: private"); readfile(cms::$cache_file); exit; } if (!empty($_REQUEST["file"]) and !empty($_REQUEST["page"])) { header("Location: {$base_dir}/download.php?find=asset|simple_cms|1|pagename=" . $_REQUEST["page"] . "&view=details&field=attachment&subitem=" . $_REQUEST["file"]); exit; } if (CHECK_DOS and APC and !DEBUG) { cms::checkdos(); } $cms = new cms(); if (isset($_REQUEST["logout"])) { if (!empty($_SESSION["username"])) { login::process_logout(); } if (isset($_COOKIE[SESSION_NAME])) { unset($_COOKIE[SESSION_NAME]); } $_SESSION = array(); } if ((ENABLE_ANONYMOUS or ENABLE_ANONYMOUS_CMS) and empty($_SESSION["username"])) { login_anonymous_session(); } if (empty($_SESSION["username"])) { sys_redirect("{$base_dir}/index.php?logout&page=" . $_REQUEST["page"]); } error_reporting(E_ALL); require_once "lib/pmwiki/pmwiki.php"; $cms->render_page(); $cms->output();
/** * * admin/overview.php * * @version 2.0 copyright (c) 2014 Gorlum for http://supernova.ws * */ define('INSIDE', true); define('INSTALL', false); define('IN_ADMIN', true); require '../common.' . substr(strrchr(__FILE__, '.'), 1); if ($user['authlevel'] < 1) { AdminMessage($lang['adm_err_denied']); } elseif ($user['authlevel'] < 3) { sys_redirect(SN_ROOT_VIRTUAL . 'admin/banned.php'); } $TypeSort = sys_get_param_str('type', 'id'); $template = gettemplate('admin/adm_overview', true); $Last15Mins = db_user_list_online_sorted($TypeSort); $Count = 0; while ($TheUser = db_fetch($Last15Mins)) { $TheUser['NAME'] = htmlentities($TheUser['NAME'], ENT_COMPAT, 'UTF-8'); // $TheUser['BROWSER'] = htmlentities($TheUser['BROWSER'], ENT_COMPAT, 'UTF-8'); $TheUser['ALLY'] = htmlentities($TheUser['ALLY'], ENT_COMPAT, 'UTF-8'); $TheUser['STAT_POINTS'] = pretty_number($TheUser['STAT_POINTS']); $TheUser['ACTIVITY'] = pretty_time(SN_TIME_NOW - $TheUser['ACTIVITY']); $template->assign_block_vars('user', $TheUser); $Count++; } $template->assign_vars(array('USERS' => $Count, 'PAGE_HINT' => $lang['adm_ov_hint']));
/** * @param bool|string $redirect нужно ли сделать перенаправление после логаута * <p><b>false</b> - не перенаправлять</p> * <p><i><b>true</b></i> - перенаправить на главную страницу</p> * <p><b>string</b> - перенаправить на указанный URL</p> * * @param bool $only_impersonator Если установлен - то логаут происходит только при имперсонации */ function sn_sys_logout($redirect = true, $only_impersonator = false) { global $user_impersonator; if ($only_impersonator && !$user_impersonator) { return; } if ($_COOKIE[SN_COOKIE_I] && $user_impersonator['authlevel'] >= 3) { // sn_cookie_set_user($user_impersonator, 1); // sec_set_cookie_by_fields($user_impersonator['id'], $user_impersonator['username'], $user_impersonator['password'], 1); sec_set_cookie_by_user($user_impersonator, 1); $redirect = $redirect === true ? 'admin/userlist.php' : $redirect; } else { sn_setcookie(SN_COOKIE, '', time() - PERIOD_WEEK, SN_ROOT_RELATIVE); } sn_setcookie(SN_COOKIE_I, '', time() - PERIOD_WEEK, SN_ROOT_RELATIVE); if ($redirect === true) { sys_redirect(SN_ROOT_RELATIVE . 'login.php'); } elseif ($redirect !== false) { sys_redirect($redirect); } }
<?php /** * dark_matter.php * * Adjust Dark Matter quantity * * @version 1.0 (c) copyright 2013 by Gorlum for http://supernova.ws * */ define('INSIDE', true); define('INSTALL', false); define('IN_ADMIN', true); require '../common.' . substr(strrchr(__FILE__, '.'), 1); if (!sn_module_get_active_count('payment')) { sys_redirect(SN_ROOT_VIRTUAL . 'admin/overview.php'); } if ($user['authlevel'] < 3) { AdminMessage($lang['adm_err_denied']); } $template = gettemplate("admin/adm_metamatter", true); $message = ''; $message_status = ERR_ERROR; if ($points = sys_get_param_float('points')) { try { $username = sys_get_param_str_unsafe('id_user'); if (empty($username)) { throw new Exception($lang['adm_mm_no_dest']); } $an_account = new Account(classSupernova::$auth->account->db); if (!$an_account->db_get_by_id($username) && !$an_account->db_get_by_name($username) && !$an_account->db_get_by_email($username)) {
function sn_sys_sector_buy($redirect = 'overview.php') { global $lang, $user, $planetrow; if (!sys_get_param_str('sector_buy') || $planetrow['planet_type'] != PT_PLANET) { return; } sn_db_transaction_start(); $user = db_user_by_id($user['id'], true, '*'); $planetrow = db_planet_by_id($planetrow['id'], true, '*'); // Тут не надо делать обсчет - ресурсы мы уже посчитали, очередь (и количество зданий) - тоже // $planetrow = sys_o_get_updated($user, $planetrow, SN_TIME_NOW); // $user = $planetrow['user']; // $planetrow = $planetrow['planet']; $sector_cost = eco_get_build_data($user, $planetrow, UNIT_SECTOR, mrc_get_level($user, $planetrow, UNIT_SECTOR), true); $sector_cost = $sector_cost[BUILD_CREATE][RES_DARK_MATTER]; if ($sector_cost <= $user[get_unit_param(RES_DARK_MATTER, P_NAME)]) { $planet_name_text = uni_render_planet($planetrow); if (rpg_points_change($user['id'], RPG_SECTOR, -$sector_cost, sprintf($lang['sys_sector_purchase_log'], $user['username'], $user['id'], $planet_name_text, $lang['sys_planet_type'][$planetrow['planet_type']], $planetrow['id'], $sector_cost))) { $sector_db_name = pname_resource_name(UNIT_SECTOR); db_planet_set_by_id($planetrow['id'], "{$sector_db_name} = {$sector_db_name} + 1"); } else { sn_db_transaction_rollback(); } } sn_db_transaction_commit(); sys_redirect($redirect); }
if ($note_id_edit) { $check_note_id = doquery("SELECT `id`, `owner` FROM {{notes}} WHERE `id` = {$note_id_edit} LIMIT 1 FOR UPDATE", true); if (!$check_note_id) { throw new exception('note_err_note_not_found', ERR_ERROR); } } if ($note_id_edit) { if ($check_note_id['owner'] != $user['id']) { throw new exception('note_err_owner_wrong', ERR_ERROR); } doquery("UPDATE {{notes}} SET `time` = " . SN_TIME_NOW . ", `priority` = {$note_priority}, `title` = '{$note_title}', `text` = '{$note_text}',\n `galaxy` = {$note_galaxy}, `system` = {$note_system}, `planet` = {$note_planet}, `planet_type` = {$note_planet_type}, `sticky` = {$note_sticky}\n WHERE `id` = {$note_id_edit} LIMIT 1;"); } else { doquery("INSERT INTO {{notes}} SET `owner` = {$user['id']}, `time` = " . SN_TIME_NOW . ", `priority` = {$note_priority}, `title` = '{$note_title}', `text` = '{$note_text}',\n `galaxy` = {$note_galaxy}, `system` = {$note_system}, `planet` = {$note_planet}, `planet_type` = {$note_planet_type}, `sticky` = {$note_sticky};"); } sn_db_transaction_commit(); sys_redirect('notes.php?STATUS=' . ERR_NONE . '&MESSAGE=' . ($note_id_edit ? 'note_err_none_changed' : 'note_err_none_added')); // throw new exception($note_id_edit ? 'note_err_none_changed' : 'note_err_none_added', ERR_NONE); } catch (exception $e) { $note_id_edit = 0; sn_db_transaction_rollback(); $result[] = array('STATUS' => in_array($e->getCode(), array(ERR_NONE, ERR_WARNING, ERR_ERROR)) ? $e->getCode() : ERR_ERROR, 'MESSAGE' => $lang[$e->getMessage()]); } } if (!$note_id_edit) { note_assign($template, array('id' => 0, 'time' => SN_TIME_NOW, 'priority' => 2, 'planet_type' => PT_PLANET, 'title' => $lang['note_new_title'], 'text' => $lang['note_new_text'])); } $note_exist = false; $notes_query = doquery("SELECT * FROM {{notes}} WHERE owner={$user['id']} ORDER BY priority DESC, time DESC"); while ($note_row = db_fetch($notes_query)) { note_assign($template, $note_row); $note_exist = $note_exist || $note_row['id'] == $note_id_edit;
protected function password_reset_confirm() { global $lang, $config; if (!$this->is_password_reset_confirm) { return $this->account_login_status; } if ($this->account_login_status != LOGIN_UNDEFINED) { return $this->account_login_status; } // Проверяем поддержку сброса пароля if (!$this->is_feature_supported(AUTH_FEATURE_PASSWORD_RESET)) { return $this->account_login_status; } try { $code_unsafe = sys_get_param_str_unsafe('password_reset_code'); if (empty($code_unsafe)) { throw new Exception(PASSWORD_RESTORE_ERROR_CODE_EMPTY, ERR_ERROR); } sn_db_transaction_start(); $confirmation = $this->confirmation->db_confirmation_get_by_type_and_code(CONFIRM_PASSWORD_RESET, $code_unsafe); // OK 4.5 if (empty($confirmation)) { throw new Exception(PASSWORD_RESTORE_ERROR_CODE_WRONG, ERR_ERROR); } if (SN_TIME_NOW - strtotime($confirmation['create_time']) > AUTH_PASSWORD_RESET_CONFIRMATION_EXPIRE) { throw new Exception(PASSWORD_RESTORE_ERROR_CODE_TOO_OLD, ERR_ERROR); } unset($this->account); $this->account = new Account($this->db); if (!$this->account->db_get_by_email($confirmation['email'])) { throw new Exception(PASSWORD_RESTORE_ERROR_CODE_OK_BUT_NO_ACCOUNT_FOR_EMAIL, ERR_ERROR); } $new_password_unsafe = $this->make_random_password(); $salt_unsafe = $this->password_salt_generate(); if (!$this->account->db_set_password($new_password_unsafe, $salt_unsafe)) { // Ошибка смены пароля throw new Exception(AUTH_ERROR_INTERNAL_PASSWORD_CHANGE_ON_RESTORE, ERR_ERROR); } $this->account_login_status = LOGIN_UNDEFINED; $this->remember_me = 1; $this->cookie_set(); $this->login_cookie(); if ($this->account_login_status == LOGIN_SUCCESS) { // TODO - НЕ ОБЯЗАТЕЛЬНО ОТПРАВЛЯТЬ ЧЕРЕЗ ЕМЕЙЛ! ЕСЛИ ЭТО ФЕЙСБУЧЕК ИЛИ ВКШЕЧКА - МОЖНО ЧЕРЕЗ ЛС ПИСАТЬ!! $message_header = sprintf($lang['log_lost_email_title'], $config->game_name); $message = sprintf($lang['log_lost_email_pass'], $config->game_name, $this->account->account_name, $new_password_unsafe); @($operation_result = mymail($confirmation['email'], $message_header, htmlspecialchars($message))); // $users_translated = classSupernova::$auth->db_translate_get_users_from_account_list($this->provider_id, $this->account->account_id); // OK 4.5 $users_translated = PlayerToAccountTranslate::db_translate_get_users_from_account_list($this->provider_id, $this->account->account_id); // OK 4.5 if (!empty($users_translated)) { // Отправляем в лички письмо о сбросе пароля // ПО ОПРЕДЕЛЕНИЮ в $users_translated только // - аккаунты, поддерживающие сброс пароля // - список аккаунтов, имеющих тот же емейл, что указан в Подтверждении // - игроки, привязанные только к этим аккаунтам // Значит им всем сразу скопом можно отправлять сообщения $message = sprintf($lang['sys_password_reset_message_body'], $new_password_unsafe); $message = sys_bbcodeParse($message) . '<br><br>'; // msg_send_simple_message($found_provider->data[F_USER_ID], 0, SN_TIME_NOW, MSG_TYPE_ADMIN, $lang['sys_administration'], $lang['sys_login_register_message_title'], $message); foreach ($users_translated as $user_id => $providers_list) { msg_send_simple_message($user_id, 0, SN_TIME_NOW, MSG_TYPE_ADMIN, $lang['sys_administration'], $lang['sys_login_register_message_title'], $message); } } else { // Фигня - может быть и пустой, если у нас есть только аккаунт, но нет пользователей // throw new Exception(AUTH_PASSWORD_RESET_INSIDE_ERROR_NO_ACCOUNT_FOR_CONFIRMATION, ERR_ERROR); } } $this->confirmation->db_confirmation_delete_by_type_and_email(CONFIRM_PASSWORD_RESET, $confirmation['email']); // OK 4.5 sn_db_transaction_commit(); sys_redirect('overview.php'); } catch (Exception $e) { sn_db_transaction_rollback(); $this->account_login_status = $e->getMessage(); } return $this->account_login_status; }
* * @version 1.1st Security checks & tests by Gorlum for http://supernova.ws * @version 1.1 * @copyright 2008 By Chlorel for XNova */ include 'common.' . substr(strrchr(__FILE__, '.'), 1); $unit_id = sys_get_param_id('gid'); if ($unit_id == RES_DARK_MATTER) { sys_redirect('dark_matter.php'); } if ($unit_id == RES_METAMATTER) { sys_redirect('metamatter.php'); } lng_include('infos'); if (!$unit_id || !get_unit_param($unit_id) && !isset($lang['info'][$unit_id])) { sys_redirect('index.php?page=techtree'); } $template = gettemplate('novapedia', true); $unit_data = get_unit_param($unit_id); $unit_type = $unit_data['type']; if ($unit_type == UNIT_SHIPS) { $template_result['UNIT_IS_SHIP'] = true; $ship_data = get_ship_data($unit_id, $user); $template_result += array('BASE_SPEED' => pretty_number($ship_data['speed_base']), 'ACTUAL_SPEED' => pretty_number($ship_data['speed']), 'BASE_CONSUMPTION' => pretty_number($ship_data['consumption_base']), 'ACTUAL_CONSUMPTION' => pretty_number($ship_data['consumption']), 'BASE_CAPACITY' => pretty_number($unit_data['capacity']), 'ACTUAL_CAPACITY' => pretty_number($ship_data['capacity'])); $engine_template_info = array(); foreach ($unit_data['engine'] as $unit_engine_data) { $unit_engine_data = get_engine_data($user, $unit_engine_data); $engine_template_info[] = array('NAME' => $lang['tech'][$unit_engine_data['tech']], 'MIN_LEVEL' => $unit_engine_data['min_level'], 'USER_TECH_LEVEL' => mrc_get_level($user, null, $unit_engine_data['tech']), 'BASE_SPEED' => pretty_number($unit_engine_data['speed_base']), 'BASE_CONSUMPTION' => pretty_number($unit_engine_data['consumption_base']), 'ACTUAL_SPEED' => pretty_number($unit_engine_data['speed']), 'ACTUAL_CONSUMPTION' => pretty_number($unit_engine_data['consumption'])); } $template_result['.']['engine'] = $engine_template_info; }
private static function _redirect($url) { session_write_close(); sys_redirect($url); }
static function process_action_sys() { @set_time_limit(900); switch ($_REQUEST["action_sys"]) { case "maintenance": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } $lock_file = SIMPLE_STORE . "/maintenance.lck"; if (!file_exists($lock_file)) { touch($lock_file); sys_log_message_alert("info", "{t}Maintenance mode{/t}: {t}Active{/t}"); } else { unlink($lock_file); sys_log_message_alert("info", "{t}Maintenance mode{/t}: {t}Inactive{/t}"); } break; case "clear_locking": self::_remove_locks(); dirs_create_empty_dir(SIMPLE_STORE . "/locking"); sys_log_message_log("clean", "{t}Locking{/t}"); break; case "clear_output": dirs_create_empty_dir(SIMPLE_CACHE . "/smarty"); dirs_create_empty_dir(SIMPLE_CACHE . "/output"); dirs_create_empty_dir(SIMPLE_CACHE . "/artichow"); dirs_create_empty_dir(SIMPLE_CACHE . "/thumbs"); dirs_create_empty_dir(SIMPLE_CACHE . "/lang"); self::build_css(); self::build_js(); self::build_icons(); sys_log_message_log("clean", "{t}Output{/t}"); break; case "clear_debug": dirs_create_empty_dir(SIMPLE_CACHE . "/debug"); sys_log_message_log("clean", "{t}Debug-dir{/t}"); break; case "clear_cms": dirs_create_empty_dir(SIMPLE_CACHE . "/cms"); sys_log_message_log("clean", "{t}CMS{/t}"); break; case "clear_ip": dirs_create_empty_dir(SIMPLE_CACHE . "/ip"); if (APC) { apc_clear_cache("user"); } sys_log_message_log("clean", "IP"); break; case "clear_schema": dirs_create_empty_dir(SIMPLE_CACHE . "/schema"); if (APC) { apc_clear_cache("user"); } sys_log_message_log("clean", "{t}Schema{/t}"); break; case "clear_schemadata": dirs_create_empty_dir(SIMPLE_CACHE . "/schema_data"); dirs_create_empty_dir(SIMPLE_CACHE . "/preview"); if (APC) { apc_clear_cache("user"); } sys_log_message_log("clean", "{t}Schema data{/t}"); break; case "clear_email": dirs_create_empty_dir(SIMPLE_CACHE . "/imap"); dirs_create_empty_dir(SIMPLE_CACHE . "/pop3"); sys_log_message_log("clean", "{t}E-mail{/t}"); break; case "clean_notifications": db_delete("simple_sys_notifications", array("sent='1'"), array()); sql_table_optimize("simple_sys_notifications"); sys_log_message_log("clean", "{t}Notifications{/t}"); break; case "clear_upload": dirs_create_empty_dir(SIMPLE_CACHE . "/upload"); sys_log_message_log("clean", "{t}Uploaded files{/t}"); break; case "clean_tables": db_optimize_tables(); sys_log_message_log("clean", "{t}Optimize Tables{/t}"); break; case "clean_statistics": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } db_delete("simple_sys_stats", array(), array()); sql_table_optimize("simple_sys_stats"); sys_log_message_log("clean", "{t}Statistics{/t}"); break; case "clean_events": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } db_delete("simple_sys_events", array(), array()); $folder = db_select_value("simple_sys_tree", "id", "ftype=@type@", array("type" => "sys_events")); if (!empty($folder)) { db_delete("simple_sys_search", array("folder=@folder@"), array("folder" => $folder)); } sql_table_optimize("simple_sys_events"); sql_table_optimize("simple_sys_search"); sys_log_message_log("clean", "{t}Events{/t}"); break; case "clean_trash": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } $trash = db_select_value("simple_sys_tree", "id", "anchor=@anchor@", array("anchor" => "trash")); if (!empty($trash)) { $folders = db_select("simple_sys_tree", array("id", "fmountpoint"), "parent=@parent@", "", "", array("parent" => $trash)); if (is_array($folders) and count($folders) > 0) { foreach ($folders as $folder) { if (!empty($folder["fmountpoint"])) { continue; } folders::delete($folder["id"]); } } } dirs_create_empty_dir(SIMPLE_STORE . "/trash"); sys_log_message_log("clean", "{t}Trash{/t}"); sys_redirect("index.php?" . sys::$urladdon); break; case "clean_cache": $dirs = array(SIMPLE_STORE . "/cron", SIMPLE_CACHE . "/imap", SIMPLE_CACHE . "/pop3", SIMPLE_CACHE . "/smarty", SIMPLE_CACHE . "/cms", SIMPLE_CACHE . "/cifs", SIMPLE_CACHE . "/gdocs", SIMPLE_CACHE . "/lang", SIMPLE_CACHE . "/output", SIMPLE_CACHE . "/artichow", SIMPLE_CACHE . "/thumbs", SIMPLE_CACHE . "/schema"); foreach ($dirs as $dir) { self::_dirs_clean_dir($dir, 2592000); } // 30 days self::_remove_locks(); $dirs = array(SIMPLE_CACHE . "/schema_data", SIMPLE_CACHE . "/preview", SIMPLE_STORE . "/locking", SIMPLE_CACHE . "/upload", SIMPLE_CACHE . "/ip", SIMPLE_CACHE . "/debug", SIMPLE_CACHE . "/updater", SIMPLE_CACHE . "/backup"); foreach ($dirs as $dir) { self::_dirs_clean_dir($dir, 86400); } // 1 day sys_log_message_log("clean", "{t}Clean Cache{/t}"); sys_redirect("index.php?" . sys::$urladdon); break; case "clear_setup": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } @unlink("simple_store/config.php"); @unlink("simple_store/config_old.php"); header("Location: index.php"); exit; break; case "backup": self::_create_backup($_SESSION["folder"]); self::_out("<br><a href='index.php?folder=^system/!sys_nodb_backups'>{t}Continue{/t}</a>"); exit; break; case "restore_newer": self::$_restore_onlynewer = true; echo self::_restore($_REQUEST["file"]); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "restore": echo self::_restore($_REQUEST["file"]); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "restore_here": self::$_restore_here = true; echo self::_restore($_REQUEST["file"]); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "restore_missing": self::$_restore_missing = true; echo self::_restore($_REQUEST["file"]); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "rebuild_search": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } self::rebuild_schema(true); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "clear_session": if (!sys_validate_token()) { sys_die("{t}Invalid security token{/t}"); } db_delete("simple_sys_session", array(), array()); if (APC) { apc_clear_cache("user"); } sys_log_message_log("clean", "{t}Sessions{/t}"); self::_out("<br><a href='index.php'>{t}Continue{/t}</a>"); exit; break; case "phpinfo": echo "System time: " . date("c") . "<br>"; echo "Database time: " . sgsml_parser::sql_date(); phpinfo(); exit; break; } }
<?php /** * login.php * * @version 2.0 Security checks & tests by Gorlum for http://supernova.ws * @version 1.1 Security checks & tests by Gorlum for http://supernova.ws * @version 1.0 * @copyright 2008 by ?????? for XNova */ define('LOGIN_LOGOUT', true); $allow_anonymous = true; include 'includes/init.' . substr(strrchr(__FILE__, '.'), 1); // die(); if ($template_result[F_USER_IS_AUTHORIZED]) { sys_redirect('index' . DOT_PHP_EX); } lng_include('login'); lng_include('admin'); $username_unsafe = sys_get_param_str_unsafe('username'); $password_raw = trim(sys_get_param('password')); $password_repeat_raw = trim(sys_get_param('password_repeat')); $email = sys_get_param_str('email'); $template = gettemplate('login_body', true); $template->assign_vars(array('last_user' => db_user_last_registered_username(), 'online_users' => db_user_count(true), 'id_ref' => sys_get_param_int('id_ref'), 'F_LOGIN_MESSAGE' => $template_result[F_LOGIN_MESSAGE], 'F_LOGIN_STATUS' => $template_result[F_LOGIN_STATUS], 'LOGIN_ERROR_USERNAME' => LOGIN_ERROR_USERNAME, 'LOGIN_ERROR_PASSWORD' => LOGIN_ERROR_PASSWORD, 'REGISTER_ERROR_EMAIL_EXISTS' => REGISTER_ERROR_EMAIL_EXISTS, 'PASSWORD_RESTORE_ERROR_WRONG_EMAIL' => PASSWORD_RESTORE_ERROR_EMAIL_NOT_EXISTS, 'USERNAME' => htmlentities($username_unsafe, ENT_QUOTES, 'UTF-8'), 'EMAIL' => htmlentities($email, ENT_QUOTES, 'UTF-8'), 'PASSWORD' => htmlentities($password_raw, ENT_QUOTES, 'UTF-8'), 'PASSWORD_REPEAT' => htmlentities($password_repeat_raw, ENT_QUOTES, 'UTF-8'), 'URL_RULES' => $config->url_rules, 'URL_FORUM' => $config->url_forum, 'URL_FAQ' => $config->url_faq, 'GAME_BLITZ' => $config->game_mode == GAME_BLITZ)); tpl_login_lang($template); display($template, $lang['Login'], false, '', false, false);
if ($build_data['CAN'][BUILD_CREATE]) { if ($planetrow['PLANET_GOVERNOR_ID'] == $hire) { $planetrow['PLANET_GOVERNOR_LEVEL']++; $query = '`PLANET_GOVERNOR_LEVEL` + 1'; } else { $planetrow['PLANET_GOVERNOR_LEVEL'] = 1; $planetrow['PLANET_GOVERNOR_ID'] = $hire; $query = '1'; } db_planet_set_by_id($planetrow['id'], "`PLANET_GOVERNOR_ID` = {$hire}, `PLANET_GOVERNOR_LEVEL` = {$query}"); rpg_points_change($user['id'], RPG_GOVERNOR, -$build_data[BUILD_CREATE][RES_DARK_MATTER], sprintf($lang['ov_governor_purchase'], $lang['tech'][$hire], $hire, $planetrow['PLANET_GOVERNOR_LEVEL'], uni_render_planet_full($planetrow, '', false, true))); // => 'Игрок купил Губернатора %1$s ID %2$d уровня %3$d на планету %4$s', // die(); } sn_db_transaction_commit(); sys_redirect('overview.php?mode=manage'); die; } lng_include('mrc_mercenary'); int_planet_pretemplate($planetrow, $template); foreach (sn_get_groups('governors') as $governor_id) { if ($planetrow['planet_type'] == PT_MOON && $governor_id == MRC_TECHNOLOGIST) { continue; } $governor_level = $planetrow['PLANET_GOVERNOR_ID'] == $governor_id ? $planetrow['PLANET_GOVERNOR_LEVEL'] : 0; $build_data = eco_get_build_data($user, $planetrow, $governor_id, $governor_level); $template->assign_block_vars('governors', array('ID' => $governor_id, 'NAME' => $lang['tech'][$governor_id], 'COST' => $build_data[BUILD_CREATE][RES_DARK_MATTER], 'MAX' => get_unit_param($governor_id, P_MAX_STACK), 'LEVEL' => $governor_level)); } $user_dark_matter = mrc_get_level($user, false, RES_DARK_MATTER); $planet_density_index = $planetrow['density_index']; $density_price_chart = planet_density_price_chart($planet_density_index);
// TODO ban if ($template_result[F_BANNED_STATUS] && !$skip_ban_check) { if (defined('IN_API')) { return; } $bantime = date(FMT_DATE_TIME, $template_result[F_BANNED_STATUS]); // TODO: Add ban reason. Add vacation time. Add message window sn_sys_logout(false, true); message("{$lang['sys_banned_msg']} {$bantime}", $lang['ban_title']); die("{$lang['sys_banned_msg']} {$bantime}"); } $template_result[F_USER_AUTHORIZED] = $sys_user_logged_in = !empty($user) && isset($user['id']) && $user['id']; // !!! Просто $allow_anonymous используется в платежных модулях !!! $allow_anonymous = $allow_anonymous || isset($sn_page_data['allow_anonymous']) && $sn_page_data['allow_anonymous']; if (!$allow_anonymous && !$sys_user_logged_in) { sn_setcookie(SN_COOKIE, '', time() - PERIOD_WEEK, SN_ROOT_RELATIVE); sys_redirect(SN_ROOT_VIRTUAL . 'login.php'); } $user_time_diff = user_time_diff_get(); //defined('SN_CLIENT_TIME_DIFF_SECONDS') or define('SN_CLIENT_TIME_DIFF_SECONDS', $user_time_diff[PLAYER_OPTION_TIME_DIFF]); //defined('SN_CLIENT_TIME_UTC_OFFSET') or define('SN_CLIENT_TIME_UTC_OFFSET', $user_time_diff[PLAYER_OPTION_TIME_DIFF_UTC_OFFSET]); //$time_diff = SN_CLIENT_TIME_DIFF_SECONDS + SN_CLIENT_TIME_UTC_OFFSET; //defined('SN_CLIENT_TIME_DIFF') or define('SN_CLIENT_TIME_DIFF', $time_diff); //defined('SN_CLIENT_TIME_LOCAL') or define('SN_CLIENT_TIME_LOCAL', SN_TIME_NOW + SN_CLIENT_TIME_DIFF); global $time_diff; define('SN_CLIENT_TIME_DIFF', $time_diff = $user_time_diff[PLAYER_OPTION_TIME_DIFF] + $user_time_diff[PLAYER_OPTION_TIME_DIFF_UTC_OFFSET]); define('SN_CLIENT_TIME_LOCAL', SN_TIME_NOW + SN_CLIENT_TIME_DIFF); !empty($user) && sys_get_param_id('only_hide_news') ? die(nws_mark_read($user)) : false; !empty($user) && sys_get_param_id('survey_vote') ? die(survey_vote($user)) : false; lng_load_i18n($sn_mvc['i18n'][$sn_page_name]); execute_hooks($sn_mvc['model'][''], $template);