public static function GetPing($blogUrl, $postID, $arParams = array()) { global $DB; $blogUrl = Trim($blogUrl); $postID = IntVal($postID); $bSuccess = True; $arPost = CBlogPost::GetByID($postID); if (!$arPost) { CBlogTrackback::SendPingResponce(1, "Invalid target post"); $bSuccess = False; } if ($bSuccess) { if ($arPost["ENABLE_TRACKBACK"] != "Y" || COption::GetOptionString("blog", "enable_trackback", "Y") != "Y") { CBlogTrackback::SendPingResponce(1, "Trackbacks disabled"); $bSuccess = False; } } if ($bSuccess) { $arBlog = CBlog::GetByID($arPost["BLOG_ID"]); if (!$arBlog || $arBlog["URL"] != $blogUrl) { CBlogTrackback::SendPingResponce(1, "Invalid target blog"); $bSuccess = False; } } if ($bSuccess) { if (!isset($arParams["title"]) || strlen($arParams["title"]) <= 0 || !isset($arParams["url"]) || strlen($arParams["url"]) <= 0) { CBlogTrackback::SendPingResponce(1, "Missing required fields"); $bSuccess = False; } } if ($bSuccess) { if (!isset($arParams["excerpt"])) { $arParams["excerpt"] = $arParams["title"]; } if (!isset($arParams["blog_name"])) { $arParams["blog_name"] = ""; } } if ($bSuccess) { $serverCharset = ""; $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]); $dbSite = CSite::GetList($b = "sort", $o = "asc", array("LID" => $arGroup["SITE_ID"])); if ($arSite = $dbSite->Fetch()) { $serverCharset = $arSite["CHARSET"]; } if (strlen($serverCharset) <= 0) { if (defined("SITE_CHARSET") && strlen(SITE_CHARSET) > 0) { $serverCharset = SITE_CHARSET; } else { $serverCharset = "windows-1251"; } } preg_match("/charset=(\")*(.*?)(\")*(;|\$)/", $_SERVER["CONTENT_TYPE"], $charset); $charset = preg_replace("#[^[:space:]a-zA-Z0-9\\-]#is", "", $charset[2]); if (strlen($charset) <= 0) { $charset = "utf-8"; } if ($charset != $serverCharset) { $arParams["title"] = $GLOBALS["APPLICATION"]->ConvertCharset($arParams["title"], $charset, $serverCharset); $arParams["url"] = $GLOBALS["APPLICATION"]->ConvertCharset($arParams["url"], $charset, $serverCharset); $arParams["excerpt"] = $GLOBALS["APPLICATION"]->ConvertCharset($arParams["excerpt"], $charset, $serverCharset); $arParams["blog_name"] = $GLOBALS["APPLICATION"]->ConvertCharset($arParams["blog_name"], $charset, $serverCharset); } $arFields = array("TITLE" => $arParams["title"], "URL" => $arParams["url"], "PREVIEW_TEXT" => $arParams["excerpt"], "BLOG_NAME" => $arParams["blog_name"], "=POST_DATE" => $DB->CurrentTimeFunction(), "BLOG_ID" => $arPost["BLOG_ID"], "POST_ID" => $arPost["ID"]); $dbTrackback = CBlogTrackback::GetList(array(), array("BLOG_ID" => $arPost["BLOG_ID"], "POST_ID" => $arPost["ID"], "URL" => $arParams["url"])); if ($arTrackback = $dbTrackback->Fetch()) { if (!CBlogTrackback::Update($arTrackback["ID"], $arFields)) { if ($ex = $GLOBALS["APPLICATION"]->GetException()) { $errorMessage = $ex->GetString() . ".<br>"; } else { $errorMessage = "Unknown error" . ".<br>"; } CBlogTrackback::SendPingResponce(1, $errorMessage); } } else { if (!CBlogTrackback::Add($arFields)) { if ($ex = $GLOBALS["APPLICATION"]->GetException()) { $errorMessage = $ex->GetString() . ".<br>"; } else { $errorMessage = "Unknown error" . ".<br>"; } CBlogTrackback::SendPingResponce(1, $errorMessage); } } CBlogTrackback::SendPingResponce(0, "Ping accepted"); } return $bSuccess; }