<?php
/*
* (C) Copyright 2014 Design And Programming Community
* E-Mail: [email protected]
* Website: www.dapf.ru
*/
class DAPFYandexSearch_DataWriter_Discussion_Thread extends XFCP_DAPFYandexSearch_DataWriter_Discussion_Thread
{
public function save()
{
$response = parent::save();
$db = XenForo_Application::get('db');
$thread = $this->get('thread_id');
if(XenForo_Application::get('options')->get('yandexsearchon'))
{
$getthread = XenForo_Model::create('XenForo_Model_Thread')->getThreadById($thread);
$url = XenForo_Link::buildPublicLink('canonical:threads', $getthread);
$url_h = explode('://', $url);
$postdata = http_build_query(array(
'key' => XenForo_Application::get('options')->get('yakey'),
'login' => XenForo_Application::get('options')->get('yalogin'),
'search_id' => XenForo_Application::get('options')->get('yasearchid'),
'pluginid' => '1.2.0',
'cmsver' => 'XenForo_1.4.0',
'publishdate' => 0,
'urls' => DAPFYandexSearch_DataWriter_Discussion_Thread::fullURLEncode($url_h[1])
));
DAPFYandexSearch_DataWriter_Discussion_Thread::YandexPing($postdata);
}
return $response;
}
static function YandexPing($postdata)
{
$host = 'site.yandex.ru';
$length = strlen($postdata);
$out = "POST /ping.xml HTTP/1.0\r\n";
$out.= "HOST: ".$host."\r\n";
$out.= "Content-Type: application/x-www-form-urlencoded\r\n";
$out.= "Content-Length: ".$length."\r\n\r\n";
$out.= $postdata."\r\n\r\n";
try{
$errno='';
$errstr = '';
$result = '';
$socket = @fsockopen($host, 443, $errno, $errstr, 30);
if($socket){
if(!fwrite($socket, $out)){
throw new Exception("unable to write");
} else {
while ($in = @fgets ($socket, 1024)){
$result.=$in;
}
}
} else {
throw new Exception("unable to create socket");
}
fclose($socket);
$result_xml = array();
preg_match('/(<.*>)/u', $result, $result_xml);
if(count($result_xml) && function_exists('simplexml_load_string')) {
$result = array_pop($result_xml);
$xml = simplexml_load_string($result);
if(isset( $xml -> error ) && isset( $xml -> error -> code)) {
if($xml -> error -> code){
$errorcode = (string)$xml -> error -> code;
if (($errorcode=="ILLEGAL_VALUE_TYPE")||($errorcode=="SEARCH_NOT_OWNED_BY_USER")||($errorcode=="NO_SUCH_USER_IN_PASSPORT"))
$message = "Один или несколько параметров в настройках плагина указаны неверно - ключ (key), логин (login) или ID поиска (searchid).";
elseif ($errorcode == "TOO_DELAYED_PUBLISH")
$message = "Максимальный срок отложенной публикации - 6 месяцев.";
elseif ($errorcode=="USER_NOT_PERMITTED")
{
$errorparam = (string)$xml -> error -> param;
$errorvalue = (string)$xml -> error -> value;
if ($errorparam=="key")
$message = "Неверный ключ (key) ".$errorvalue.". Проверьте настройки плагина.";
elseif ($errorparam=="ip")
$message = "Запрос приходит с IP адреса ".$errorvalue.", который не указан в списке адресов в настройках вашего поиска.";
else
$message = "Запрос приходит с IP адреса, который не указан в списке адресов в настройках вашего поиска, либо Вы указали неправильный ключ (key) в настройках плагина.";
}
else $message=$errorcode;
}
}
elseif(isset($xml -> invalid)) {
$invalidurl = $xml->invalid->url;
$errorcode = $xml->invalid["reason"];
if ($errorcode=="NOT_CONFIRMED_IN_WMC")
$message = "Сайт не подтвержден в сервисе Яндекс.Вебмастер для указанного имени пользователя";
elseif ($errorcode=="OUT_OF_SEARCH_AREA")
$message = "Адрес ".$invalidurl." не принадлежит области поиска вашей поисковой площадки.";
elseif ($errorcode=="MALFORMED_URLS")
$message = "Невозможно принять некорректный адрес: ".$invalidurl;
else $message=$errorcode;
} elseif( isset($xml -> added)
&& isset($xml -> added['count'])
&& $xml -> added['count'] >0) {
$addedaddress = $xml->added->url;
$message = "Плагин работает корректно. Последний принятый адрес: ".$addedaddress;
}
if(isset($message) && $message) {
$db = XenForo_Application::get('db');
$db->fetchRow("UPDATE `xf_option` SET `option_value` = '".$message."' WHERE `option_id` = 'yames'");
}
}
return true;
}
catch(exception $e){
return false;
}
return false;
}
static function fullURLEncode($url) {
$url1parsed = parse_url($url);
$pathArr = explode('/', @$url1parsed['path']);
parse_str(@$url1parsed['query'], $queryArr);
foreach ($pathArr as $i => $pathPart) {
$pathArr[$i] = urlencode(urldecode($pathPart));
}
$newQueryArr = array();
foreach ($queryArr as $key => $value) {
$newQueryArr[$key] = $value;
}
@$url1parsed['path'] = implode('/', $pathArr);
@$url1parsed['query'] = http_build_query($newQueryArr);
$url = @$url1parsed['path'];
if (@$url1parsed['query']) {
$url .= '?'.@$url1parsed['query'];
}
return $url;
}
}