function send_form($url, $_title, $_author, $_email = '*****@*****.**', $_link, $_filename) { $post = array("action" => "save", "title" => utf8_to_cp1251($_title), "author" => utf8_to_cp1251($_author), "email" => $_email, "link" => $_link, "file" => "ufile", "rules_agree" => "1", "ufile" => "@{$_filename}"); $ch = curl_init($url); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $postResult = curl_exec($ch); curl_close($ch); print "{$postResult}"; return true; }
//header('Location: http://'.$_SERVER['HTTP_HOST'].''); echo "<script>window.location='http://".$_SERVER['HTTP_HOST']."'</script>"; } function is_utf($t) { if (@preg_match ('/.+/u', $t)) return true; else return false; } function utf8_to_cp1251($t) { return iconv("UTF-8", "CP1251", $t);} function cp1251_to_utf8($t) { return iconv( "CP1251","UTF-8", $t);} // запускается - не функция if(!headers_sent() && !isset($print)) { header('Content-type: text/html; charset=windows-1251'); } foreach ($_GET as $key => $val) { if (is_utf($val)) ${$key}=utf8_to_cp1251($val); } foreach ($_POST as $key => $val) { if (is_utf($val)) ${$key}=utf8_to_cp1251($val); } importmodules(); if (!isset($dbname)) $dbname='zaompp'; if (!mySQLconnect()) { my_error('Not connect to base!'); } ?>
$admin_name = htmlentities($result->admin_nick, ENT_QUOTES) . " (" . htmlentities($result2 ? $result2->nickname : "", ENT_QUOTES) . ")"; //$server_name = $result->server_name; $server_name = cp1251_to_utf8($result->server_name); } else { $admin_name = cp1251_to_utf8($result->admin_nick); $server_name = "Website"; } $ban_info = array("player_name" => $player_name, "player_id" => $player_id, "player_ip" => $playa_ip, "ban_start" => $ban_start, "ban_duration" => $ban_duration, "ban_end" => $ban_end, "ban_type" => $ban_type, "ban_reason" => $ban_reason, "admin_name" => $admin_name, "server_name" => $server_name); } } } else { if ($_POST['action'] == "apply") { $player_nick = $_POST['player_nick']; $ban_reason = $_POST['ban_reason']; $player_nick = utf8_to_cp1251($player_nick); $ban_reason = utf8_to_cp1251($ban_reason); if ($_POST['player_ip'] == "") { $resource = mysql_query("UPDATE `{$config->bans}` SET `player_ip` = NULL, `player_id` = '" . $_POST['player_id'] . "', `player_nick` = '{$player_nick}', `ban_type` = '" . $_POST['ban_type'] . "', `ban_reason` = '{$ban_reason}', `ban_length` = '" . min($_POST['ban_length'], 43800 * 3) . "' WHERE `bid` = '" . $_POST['bid'] . "'") or die(mysql_error()); $superban = mysql_query("UPDATE `superban` SET `sid` = '" . $_POST['player_id'] . "', `banname` = '{$player_nick}', `reason` = '{$ban_reason}', `unbantime` = `bantime` + 60*'" . min($_POST['ban_length'], 43800 * 3) . "' WHERE `banname` = '{$superban_name}'") or die(mysql_error()); } else { $resource = mysql_query("UPDATE `{$config->bans}` SET `player_ip` = '" . $_POST['player_ip'] . "', `player_id` = '" . $_POST['player_id'] . "', `player_nick` = '{$player_nick}', `ban_type` = '" . $_POST['ban_type'] . "', `ban_reason` = '{$ban_reason}', `ban_length` = '" . min($_POST['ban_length'], 43800 * 3) . "' WHERE `bid` = '" . $_POST['bid'] . "'") or die(mysql_error()); $superban = mysql_query("UPDATE `superban` SET `ip` = '" . $_POST['player_ip'] . "', `ipcookie` = '" . $_POST['player_ip'] . "', `sid` = '" . $_POST['player_id'] . "', `banname` = '{$player_nick}', `reason` = '{$ban_reason}', `unbantime` = `bantime` + 60*'" . min($_POST['ban_length'], 43800 * 3) . "' WHERE `banname` = '{$superban_name}'") or die(mysql_error()); } $now = date("U"); $add_log = mysql_query("INSERT INTO {$config->logs} (timestamp, ip, username, action, remarks) VALUES ('{$now}', '" . $_SERVER['REMOTE_ADDR'] . "', '" . $_SESSION['uid'] . "', 'edit ban', 'Ban with BanID " . $_POST['bid'] . " (" . $_POST['player_id'] . ")(" . $_POST['player_ip'] . ") edited')") or die(mysql_error()); $url = "{$config->document_root}"; $delay = "0"; //echo "Edited bid ".$_POST['bid'].". Redirecting..."; echo "<meta http-equiv=\"refresh\" content=\"" . $delay . ";url='http://" . $_SERVER["HTTP_HOST"] . "{$url}'\">"; exit; } else {
/** * @param string $LoginName * @param string $Password * @param string $Period * @return string $XML */ function SDMRestAccount($LoginName, $Password, $Period = false) { $Dir_path = str_replace('\\', '/', __DIR__); $logger = new Logger('logger_service'); $logger->pushHandler(new StreamHandler($Dir_path . '/../logs/sdm_json_debbug-' . $LoginName . '.log', Logger::DEBUG, false)); $logger->pushHandler(new StreamHandler($Dir_path . '/../logs/sdm_json_error-' . $LoginName . '.log', Logger::WARNING, false)); $logger->pushHandler(new StreamHandler($Dir_path . '/../logs/sdm_json_info-' . $LoginName . '.log', Logger::INFO, false)); $logger->pushHandler(new FirePHPHandler()); $logger->addInfo('------------------------------------------------------------------------------------------'); $logger->addInfo('Start running SDMRestAccount class'); $sLogin = $LoginName; $sPassword = $Password; $postData = 'password='******'&username='******'https://retail.sdm.ru/logon', true, $postData, false, '', 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 60); if (!$data) { $logger->addError('нет ответа от сервера'); return 'нет ответа от сервера'; } //echo($data); $logger->addDebug('Starting SDM Http trafic for: ' . $postData . '; Result Data:' . $data); $cookie = substr($data, strpos($data, 'cookie=') + 7, strlen($data)); if (!$cookie) { $logger->addError('не смогли залогиниться - нет кукисов'); return 'не смогли залогиниться - нет кукисов'; } $logger->addDebug('Cookie- ' . $cookie); //$data= http_requestSDM('https://retail.sdm.ru//user/confirmlogon',false,'','https://retail.sdm.ru','','Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',60); //echo $data; $RequestToken = str_replace('__RequestVerificationToken" type="hidden" value="', '', strstr($data, '__RequestVerificationToken" type="hidden" value="')); $RequestToken = substr($RequestToken, 0, strpos($RequestToken, '"')); //echo '$RequestToken='.$RequestToken; $postData = 'otp=&mode=nosms&returnUrl=&__RequestVerificationToken=' . $RequestToken; $data = http_requestSDM('https://retail.sdm.ru/user/confirmlogon', true, $postData, 'https://retail.sdm.ru', '', 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 60); //echo '$postData='.$postData; //echo $data; if (!$data) { $logger->addError('не можем получить информацию по счетам'); return 'не можем получить информацию по счетам'; } $json = array("AccountsList" => array(), "CardList" => array(), "AcountStatements" => array()); $logger->addDebug('NEXT SDM Http trfafic; Result Data:' . $data); $body = substr($data, strpos($data, 'body=') + 5, strlen($body) - 8); //echo($body); $doc = new DOMDocument(); libxml_use_internal_errors(true); $doc->loadHTML($body); libxml_clear_errors(); $xpath = new DOMXPath($doc); $TableTrAccount = $xpath->query('//div[@class="Content-Center"]/div[1]//table/tr/td'); $CountAccount = $TableTrAccount->length / 4; //По счетам $ArrayAccountID = array(); for ($i = 0; $i < $CountAccount; $i++) { for ($j = 0; $j < 4; $j++) { $logger->addInfo('i=' . $i . ';j=' . $j . ';' . nodeContent($TableTrAccount->item($i * 4 + $j))); switch ($j) { case 3: $AccountId = str_replace('" "ajax-window"История платежей/a', '', str_replace('a href="/finances/account/', '', nodeContent($TableTrAccount->item($i * 4 + $j)))); $ArrayAccountID[] = $AccountId; break; default: break; } } } $ArrayAccount = array(); $logger->addInfo('$ArrayAccountID: ' . implode(' ', $ArrayAccountID)); foreach ($ArrayAccountID as $ArrayAccountID_) { $logger->addInfo('Дергаем информацию по счету с ID=' . $ArrayAccountID_); $Start_date = date("d.m.Y", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))); switch ($Period) { case "7days": $Start_date = date("d.m.Y", mktime(0, 0, 0, date("m"), date("d") - 7, date("Y"))); break; case "month": $Start_date = date("d.m.Y", mktime(0, 0, 0, date("m") - 1, date("d"), date("Y"))); break; case "halfyear": $Start_date = date("d.m.Y", mktime(0, 0, 0, date("m") - 6, date("d"), date("Y"))); break; case "year": $Start_date = date("d.m.Y", mktime(0, 0, 0, date("m"), date("d"), date("Y") - 1)); break; case "5years": $Start_date = date("d.m.Y", mktime(0, 0, 0, date("m"), date("d"), date("Y") - 5)); break; default: break; } $postData = 'endDate=' . date("d.m.Y") . '&id=' . $ArrayAccountID_ . '&periodtype=&startDate=' . $Start_date; $logger->addInfo('PostData:' . $postData); $data = http_requestSDM('https://retail.sdm.ru/finances/account/' . $ArrayAccountID_, true, $postData, false, $cookie, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 120); $logger->addDebug('SDM extract account http trafic for: ' . $postData . '; Result Data:' . $data); if (!$data) { $logger->addError('не можем получить информацию по выписке'); return 'не можем получить информацию по выписке'; } $body = substr($data, strpos($data, 'body=') + 5, strlen($data) - 8 - strpos($data, 'body=')); //$logger->addInfo( 'BODY_1='. $body ); $doc->loadHTML($body); libxml_clear_errors(); $xpath = new DOMXPath($doc); //Выписка $TableTrStatement = $xpath->query('/html/body/div/div[1]/form/div[4]/div[2]/table/tbody/tr/td'); $TableTrStatementBlocking = $xpath->query('/html/body/div/div[1]/form/div[5]/table/tbody/tr/td'); $StatementIncoming = $xpath->query('//*[@id="account_data"]/table/tr[2]/td[1]'); $Account = $xpath->query('//*[@id="account_data"]/table/tr[1]/td[1]'); $Account_ = utf8_decode($Account->item(0)->nodeValue); $ArrayAccount[] = array("AccountId" => $ArrayAccountID_, "Account" => substr($Account_, 0, strpos($Account_, " "))); $StatementIncoming_ = str_replace(chr(194), '', str_replace(chr(160), '', str_replace(chr(13), '', str_replace(chr(10), '', $StatementIncoming->item(0)->nodeValue)))); $StatementIncoming_ = substr($StatementIncoming_, 0, strlen($StatementIncoming_) - strpos($StatementIncoming_, ' ')); $StatementIncoming_float = floatval($StatementIncoming_); $td_count = 8; $CountStatement = ($TableTrStatement->length - 4) / $td_count; $CountStatementBlocking = $TableTrStatementBlocking->length / 3; $logger->addInfo('CountStatement:' . $CountStatement); $logger->addInfo('CountStatementBlocking:' . $CountStatementBlocking); $logger->addInfo('StatementIncoming:' . $StatementIncoming_); //$ExtractList=Array(); /* foreach ($TableTrStatement as $tag1) { $logger->addInfo('NodeContent1:'.(utf8_decode($tag1->nodeValue))); }*/ //По выписке for ($i = 0; $i < $CountStatement; $i++) { //По td_count строчек в каждом table/tr for ($j = 0; $j < $td_count; $j++) { $logger->addInfo('i=' . $i . ';j=' . $j . ';' . utf8_decode($TableTrStatement->item($i * $td_count + $j)->nodeValue) . '|'); switch ($j) { case 0: $DocumentDate = $TableTrStatement->item($i * $td_count + $j)->nodeValue; break; case 1: $DocumentNumber = $TableTrStatement->item($i * $td_count + $j)->nodeValue; break; case 2: $Debit = str_replace('P', '', cp1251_to_utf8(preg_replace('#\\s#', '', utf8_to_cp1251($TableTrStatement->item($i * $td_count + $j)->nodeValue)))); break; case 3: $Credit = str_replace('P', '', cp1251_to_utf8(preg_replace('#\\s#', '', utf8_to_cp1251($TableTrStatement->item($i * $td_count + $j)->nodeValue)))); break; case 4: $Ground = utf8_decode($TableTrStatement->item($i * $td_count + $j)->nodeValue); break; case 5: $DateOperation = nodeContent($TableTrStatement->item($i * $td_count + $j)); break; case 6: $CardNumber = nodeContent($TableTrStatement->item($i * $td_count + $j)); break; case 7: $Ammount_Curr = $TableTrStatement->item($i * $td_count + $j)->nodeValue; $StatementIncoming = $StatementIncoming_float; break; default: break; } } //$ExtractList[]=Array($ArrayAccountID_=>Array("DocumentDate"=>$DocumentDate, $ExtractList[] = array("DocumentDate" => $DocumentDate, "DocumentNumber" => $DocumentNumber, "Debit" => $Debit, "Credit" => $Credit, "Ground" => $Ground, "DateOperation" => $DateOperation, "Ammount_Curr" => $Ammount_Curr, "CardNumber" => $CardNumber, "StatementIncoming" => $StatementIncoming, "AbsId" => $ArrayAccountID_); } if (count($ExtractList) > 1) { $json["AcountStatements"] = $ExtractList; //unset($ExtractList); } //else $json["AcountStatements"][]=Array($ArrayAccountID_=>Array()); /* //По блокировкам $xmlAcountStatementsBlocking = $xml->createElement("AcountStatementsBlocking"); $xmlAcountStatementsBlockingAttribute1= $xml->createAttribute("Count"); $xmlAcountStatementsBlockingAttribute1->value=$CountStatementBlocking; $xmlAcountStatementsBlocking->appendChild($xmlAcountStatementsBlockingAttribute1); $xmlAcountStatementsBlockingAttribute2= $xml->createAttribute("AccountId"); $xmlAcountStatementsBlockingAttribute2->value=$ArrayAccountID_; $xmlAcountStatementsBlocking->appendChild($xmlAcountStatementsBlockingAttribute2); $xmlRoot->appendChild($xmlAcountStatementsBlocking); $td_count=3; for ($i=0; $i<$CountStatementBlocking;$i++) { //По td_count строчек в каждом table/tr $xmlExtractBlockingList=$xml->createElement("ExtractBlockingList"); $xmlExtractBlockingListAttribute1= $xml->createAttribute("Count"); $xmlExtractBlockingListAttribute1->value=$CountStatementBlocking; $xmlAcountStatementsBlocking->appendChild($xmlExtractBlockingListAttribute1); $xmlAcountStatementsBlocking->appendChild($xmlExtractBlockingList); for ($j = 0; $j < $td_count; $j++) //td_count <td> { switch ($j) { case 0: $xmlDocumentDateBlocking=$xml->createElement("DocumentDate"); $xmlExtractBlockingList->appendChild($xmlDocumentDateBlocking); $xmlDocumentDateBlocking->nodeValue=utf8_decode($TableTrStatementBlocking->item($i*$td_count+j)->nodeValue); break; case 1: $xmlAmountBlocking=$xml->createElement("AmountBlocking"); $xmlExtractBlockingList->appendChild($xmlAmountBlocking); $xmlAmountBlocking->nodeValue=utf8_decode($TableTrStatementBlocking->item($i*$td_count+$j)->nodeValue); break; case 2: $xmlWhereBlocking=$xml->createElement("WhereBlocking"); $xmlExtractBlockingList->appendChild($xmlWhereBlocking); $xmlWhereBlocking->nodeValue=utf8_decode($TableTrStatementBlocking->item($i*$td_count+$j)->nodeValue); break; default: break; } } } */ } $data = http_requestSDM('https://retail.sdm.ru/', false, '', 'https://retail.sdm.ru', '', 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 60); if (!$data) { $logger->addError('не можем получить информацию по счетам'); return 'не можем получить информацию по счетам'; } $logger->addDebug('NEXT SDM Http trfafic; Result Data:' . $data); $body = substr($data, strpos($data, 'body=') + 5, -8); $doc = new DOMDocument(); libxml_use_internal_errors(true); $doc->loadHTML($body); libxml_clear_errors(); $xpath = new DOMXPath($doc); $TableTrAccount = $xpath->query('//div[@class="Content-Center"]/div[1]//table/tr/td'); $TableTrCard = $xpath->query('//div[@class="Content-Center"]/div[2]//table/tr/td'); if ($TableTrAccount->length > 1) { $CountAccount = $TableTrAccount->length / 4; } else { $CountAccount = 0; } if ($TableTrCard->length > 1) { $CountCard = $TableTrCard->length / 6; } else { $CountCard = 0; } $logger->addInfo('CountAccount=' . $CountAccount); $logger->addInfo('CountCard=' . $CountCard); //По счетам $ArrayAccountID = array(); for ($i = 0; $i < $CountAccount; $i++) { for ($j = 0; $j < 4; $j++) { // $logger->addInfo('i='.$i.';j='.$j.';'.nodeContent($TableTrAccount->item($i*4+$j))); switch ($j) { case 0: $CurrCode = GetSdmTextFromAlt($TableTrAccount->item($i * 4)); break; case 1: $AccountName = $TableTrAccount->item($i * 4 + 1)->nodeValue; //$AccountName=nodeContent($TableTrAccount->item($i*4 +j+1)); break; case 2: $Rest = HtmlToFloat($TableTrAccount->item($i * 4 + $j)); break; case 3: $AccountId = str_replace('" "ajax-window"История платежей/a', '', str_replace('a href="/finances/account/', '', nodeContent($TableTrAccount->item($i * 4 + $j)))); $ArrayAccountID[] = $AccountId; break; default: break; } } foreach ($ArrayAccount as $ArrayAccount_) { if ($ArrayAccount_["AccountId"] == $AccountId) { $Account = $ArrayAccount_["Account"]; } } $json["AccountsList"][] = array("CurrCode" => $CurrCode, "AccountName" => $AccountName, "Account" => $Account, "Rest" => $Rest, "AcountID" => $AccountId); $Account = ""; } //По картам for ($i = 0; $i < $CountCard; $i++) { for ($j = 0; $j < 6; $j++) { $logger->addInfo('i=' . $i . ';j=' . $j . ';' . nodeContent($TableTrCard->item($i * 6 + $j))); // printf('i='.$i.';j='.$j.';'.nodeContent($TableTrCard->item($i*6+$j)).'<br>'); switch ($j) { case 0: $CurrCodeCard = GetSdmTextFromAlt($TableTrCard->item($i * 6 + $j)); break; case 1: //$CardType=GetSdmTextFromAlt($TableTrCard->item($i*6+$j)); break; case 2: $CardType = $TableTrCard->item($i * 6 + $j)->nodeValue; $CardID = GetSdmCardId($TableTrCard->item($i * 6 + $j)); break; case 4: $RestCard = nodeContent($TableTrCard->item($i * 6 + $j)); break; case 5: $CardClose = str_replace('срок действия: ', '', nodeContent($TableTrCard->item($i * 6 + $j))); break; default: break; } } $json["CardList"][] = array("CurrCode" => $CurrCodeCard, "CardType" => $CardType, "CardID" => $CardID, "RestCard" => $Rest, "CardClose" => $CardClose); } $logger->addInfo('Good result: ' . Json::json_encode($json)); $logger->addInfo('End SDMRestAccount class'); return Json::json_encode($json); }