1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
blog_trackback.php
См. документацию.
1<?php
2
4
6
7$GLOBALS["BLOG_TRACKBACK"] = Array();
8
10{
11 /*************** ADD, UPDATE, DELETE *****************/
12 public static function CheckFields($ACTION, &$arFields, $ID = 0)
13 {
14 global $DB;
15
16 if ((is_set($arFields, "BLOG_ID") || $ACTION=="ADD") && intval($arFields["BLOG_ID"]) <= 0)
17 {
18 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GT_EMPTY_BLOG_ID"), "EMPTY_BLOG_ID");
19 return false;
20 }
21 elseif (is_set($arFields, "BLOG_ID"))
22 {
24 if (!$arResult)
25 {
26 $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["BLOG_ID"], GetMessage("BLG_GT_ERROR_NO_BLOG")), "ERROR_NO_BLOG");
27 return false;
28 }
29 }
30
31 if ((is_set($arFields, "POST_ID") || $ACTION=="ADD") && intval($arFields["POST_ID"]) <= 0)
32 {
33 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GT_EMPTY_POST_ID"), "EMPTY_POST_ID");
34 return false;
35 }
36 elseif (is_set($arFields, "POST_ID"))
37 {
39 if (!$arResult)
40 {
41 $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["POST_ID"], GetMessage("BLG_GT_ERROR_NO_POST")), "ERROR_NO_POST");
42 return false;
43 }
44 }
45
46 if (is_set($arFields, "POST_DATE") && (!$DB->IsDate($arFields["POST_DATE"], false, LANG, "FULL")))
47 {
48 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GT_ERROR_POST_DATE"), "ERROR_POST_DATE");
49 return false;
50 }
51
52 if ((is_set($arFields, "TITLE") || $ACTION=="ADD") && $arFields["TITLE"] == '')
53 {
54 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GT_EMPTY_TITLE"), "EMPTY_TITLE");
55 return false;
56 }
57
58 if ((is_set($arFields, "URL") || $ACTION=="ADD") && $arFields["URL"] == '')
59 {
60 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("BLG_GT_EMPTY_URL"), "EMPTY_URL");
61 return false;
62 }
63
64 return True;
65 }
66
67 public static function Delete($ID)
68 {
69 global $DB;
70
71 $ID = intval($ID);
72
73 $arTrackback = CBlogTrackback::GetByID($ID);
74 if ($arTrackback)
75 CBlogPost::Update($arTrackback["POST_ID"], array("=NUM_TRACKBACKS" => "NUM_TRACKBACKS - 1"));
76
77 unset($GLOBALS["BLOG_TRACKBACK"]["BLOG_TRACKBACK_CACHE_".$ID]);
78
79 return $DB->Query("DELETE FROM b_blog_trackback WHERE ID = ".$ID."", true);
80 }
81
82 //*************** SELECT *********************/
83 public static function GetByID($ID)
84 {
85 global $DB;
86
87 $ID = intval($ID);
88
89 if (isset($GLOBALS["BLOG_TRACKBACK"]["BLOG_TRACKBACK_CACHE_".$ID]) && is_array($GLOBALS["BLOG_TRACKBACK"]["BLOG_TRACKBACK_CACHE_".$ID]) && is_set($GLOBALS["BLOG_TRACKBACK"]["BLOG_TRACKBACK_CACHE_".$ID], "ID"))
90 {
91 return $GLOBALS["BLOG_TRACKBACK"]["BLOG_TRACKBACK_CACHE_".$ID];
92 }
93 else
94 {
95 $strSql =
96 "SELECT T.ID, T.TITLE, T.URL, T.PREVIEW_TEXT, T.BLOG_NAME, T.BLOG_ID, T.POST_ID, ".
97 " ".$DB->DateToCharFunction("T.POST_DATE", "FULL")." as POST_DATE ".
98 "FROM b_blog_trackback T ".
99 "WHERE T.ID = ".$ID."";
100 $dbResult = $DB->Query($strSql);
101 if ($arResult = $dbResult->Fetch())
102 {
103 $GLOBALS["BLOG_TRACKBACK"]["BLOG_TRACKBACK_CACHE_".$ID] = $arResult;
104 return $arResult;
105 }
106 }
107
108 return False;
109 }
110
111 //*************** SEND / RECEIVE PINGS *********************/
112 public static function SendPing($postID, $arPingUrls = array())
113 {
114 $postID = intval($postID);
115
116 if (count($arPingUrls) <= 0)
117 return False;
118
119 $arPost = CBlogPost::GetByID($postID);
120 if ($arPost)
121 {
122 $arBlog = CBlog::GetByID($arPost["BLOG_ID"]);
123 $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
124
125 $title = urlencode($arPost["TITLE"]);
126 $excerpt = urlencode(mb_substr($arPost["DETAIL_TEXT"], 0, 255));
127 $blogName = urlencode($arBlog["NAME"]);
128
129 $serverName = "";
130 $charset = "";
131 $dbSite = CSite::GetList("sort", "asc", array("LID" => $arGroup["SITE_ID"]));
132 if ($arSite = $dbSite->Fetch())
133 {
134 $serverName = $arSite["SERVER_NAME"];
135 $charset = $arSite["CHARSET"];
136 }
137
138 if ($serverName == '')
139 {
140 if (defined("SITE_SERVER_NAME") && SITE_SERVER_NAME <> '')
141 $serverName = SITE_SERVER_NAME;
142 else
143 $serverName = COption::GetOptionString("main", "server_name", "");
144 }
145 $serverName = \Bitrix\Main\Text\HtmlFilter::encode($serverName);
146
147 if ($charset == '')
148 {
149 if (defined("SITE_CHARSET") && SITE_CHARSET <> '')
150 $charset = SITE_CHARSET;
151 else
152 $charset = "windows-1251";
153 }
154
155 $url = urlencode("http://".$serverName.CBlogPost::PreparePath($arBlog["URL"], $postID, $arGroup["SITE_ID"]));
156
157
158 foreach($arPingUrls as $pingUrl)
159 {
160 $pingUrl = str_replace("http://", "", $pingUrl);
161 $pingUrl = str_replace("https://", "", $pingUrl);
162 $arPingUrl = explode("/", $pingUrl);
163
164 $host = trim($arPingUrl[0]);
165 unset($arPingUrl[0]);
166 $path = "/".trim(implode("/", $arPingUrl));
167
168 $arHost = explode(":", $host);
169 $port = ((count($arHost) > 1) ? $arHost[1] : 80);
170 $host = $arHost[0];
171
172 if (!empty($path) && !empty($host))
173 {
174 $query = "title=".$title."&url=".$url."&excerpt=".$excerpt."&blog_name=".$blogName;
175 $fp = @fsockopen($host, $port, $errnum, $errstr, 30);
176 if ($fp)
177 {
178 fputs($fp, "POST {$path} HTTP/1.1\r\n");
179 fputs($fp, "Host: {$host}\r\n");
180 fputs($fp, "Content-type: application/x-www-form-urlencoded; charset=\"".$charset."\"\r\n");
181 fputs($fp, "User-Agent: bitrixBlog\r\n");
182 fputs($fp, "Content-length: ".mb_strlen($query)."\r\n");
183 fputs($fp, "Connection: close\r\n\r\n");
184 fputs($fp, $query."\r\n\r\n");
185 fclose($fp);
186 }
187 }
188 }
189 }
190 }
191
192 public static function GetPing($blogUrl, $postID, $arParams = array())
193 {
194 global $DB;
195
196 $blogUrl = Trim($blogUrl);
197 $postID = intval($postID);
198
199 $bSuccess = True;
200
201 $arPost = CBlogPost::GetByID($postID);
202 if (!$arPost)
203 {
204 CBlogTrackback::SendPingResponce(1, "Invalid target post");
205 $bSuccess = False;
206 }
207
208 if ($bSuccess)
209 {
210 if ($arPost["ENABLE_TRACKBACK"] != "Y" || COption::GetOptionString("blog","enable_trackback", "Y") != "Y")
211 {
212 CBlogTrackback::SendPingResponce(1, "Trackbacks disabled");
213 $bSuccess = False;
214 }
215 }
216
217 if ($bSuccess)
218 {
219 $arBlog = CBlog::GetByID($arPost["BLOG_ID"]);
220 if (!$arBlog || $arBlog["URL"] != $blogUrl)
221 {
222 CBlogTrackback::SendPingResponce(1, "Invalid target blog");
223 $bSuccess = False;
224 }
225 }
226
227 if ($bSuccess)
228 {
229 if (!isset($arParams["title"]) || $arParams["title"] == ''
230 || !isset($arParams["url"]) || $arParams["url"] == '')
231 {
232 CBlogTrackback::SendPingResponce(1, "Missing required fields");
233 $bSuccess = False;
234 }
235 }
236
237 if ($bSuccess)
238 {
239 if (!isset($arParams["excerpt"]))
240 $arParams["excerpt"] = $arParams["title"];
241
242 if (!isset($arParams["blog_name"]))
243 $arParams["blog_name"] = "";
244 }
245
246 if ($bSuccess)
247 {
248 $serverCharset = "";
249 $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
250
251 $dbSite = CSite::GetList("sort", "asc", array("LID" => $arGroup["SITE_ID"]));
252 if ($arSite = $dbSite->Fetch())
253 $serverCharset = $arSite["CHARSET"];
254
255 if ($serverCharset == '')
256 {
257 if (defined("SITE_CHARSET") && SITE_CHARSET <> '')
258 $serverCharset = SITE_CHARSET;
259 else
260 $serverCharset = "windows-1251";
261 }
262
263 preg_match("/charset=(\")*(.*?)(\")*(;|$)/", $_SERVER["CONTENT_TYPE"], $charset);
264 $charset = preg_replace("#[^[:space:]a-zA-Z0-9\-]#is", "", $charset[2]);
265 if($charset == '') $charset = "utf-8";
266
267 if ($charset != $serverCharset)
268 {
269 $arParams["title"] = Encoding::convertEncoding($arParams["title"], $charset, $serverCharset);
270 $arParams["url"] = Encoding::convertEncoding($arParams["url"], $charset, $serverCharset);
271 $arParams["excerpt"] = Encoding::convertEncoding($arParams["excerpt"], $charset, $serverCharset);
272 $arParams["blog_name"] = Encoding::convertEncoding($arParams["blog_name"], $charset, $serverCharset);
273 }
274
276 "TITLE" => $arParams["title"],
277 "URL" => $arParams["url"],
278 "PREVIEW_TEXT" => $arParams["excerpt"],
279 "BLOG_NAME" => $arParams["blog_name"],
280 "=POST_DATE" => $DB->CurrentTimeFunction(),
281 "BLOG_ID" => $arPost["BLOG_ID"],
282 "POST_ID" => $arPost["ID"]
283 );
284 $dbTrackback = CBlogTrackback::GetList(array(), array("BLOG_ID" => $arPost["BLOG_ID"], "POST_ID" => $arPost["ID"], "URL" => $arParams["url"]));
285 if ($arTrackback = $dbTrackback->Fetch())
286 {
287 if (!CBlogTrackback::Update($arTrackback["ID"], $arFields))
288 {
289 if ($ex = $GLOBALS["APPLICATION"]->GetException())
290 $errorMessage = $ex->GetString().".<br>";
291 else
292 $errorMessage = "Unknown error".".<br>";
294 }
295 }
296 else
297 {
299 {
300 if ($ex = $GLOBALS["APPLICATION"]->GetException())
301 $errorMessage = $ex->GetString().".<br>";
302 else
303 $errorMessage = "Unknown error".".<br>";
305 }
306 }
307
308 CBlogTrackback::SendPingResponce(0, "Ping accepted");
309 }
310
311 return $bSuccess;
312 }
313
314 public static function SendPingResponce($error = 0, $text = "")
315 {
316 header("Content-type: text/xml; charset=".LANG_CHARSET);
317 echo "<"."?xml version=\"1.0\" encoding=\"".SITE_CHARSET."\"?".">\n";
318 echo "<response>\n";
319 echo "<error>".htmlspecialcharsbx($error)."</error>\n";
320 echo "<message>".htmlspecialcharsbx($text)."</message>\n";
321 echo "</response>";
322 }
323}
$arParams
Определения access_dialog.php:21
$path
Определения access_edit.php:21
$arResult
Определения generate_coupon.php:16
static encode($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения htmlfilter.php:12
static GetByID($ID)
Определения blog_group.php:64
static GetByID($ID)
Определения blog.php:931
static Delete($ID)
Определения blog_trackback.php:67
static GetByID($ID)
Определения blog_trackback.php:83
static CheckFields($ACTION, &$arFields, $ID=0)
Определения blog_trackback.php:12
static SendPingResponce($error=0, $text="")
Определения blog_trackback.php:314
static SendPing($postID, $arPingUrls=array())
Определения blog_trackback.php:112
static GetPing($blogUrl, $postID, $arParams=array())
Определения blog_trackback.php:192
static GetByID($ID)
Определения blog_post.php:511
static Update($ID, $arFields, $bSearchIndex=true)
Определения blog_post.php:224
static Add($arFields)
Определения blog_trackback.php:8
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения blog_trackback.php:102
static Update($ID, $arFields)
Определения blog_trackback.php:57
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$GLOBALS["BLOG_TRACKBACK"]
Определения blog_trackback.php:7
$query
Определения get_search.php:11
if($ajaxMode) $ID
Определения get_user.php:27
$host
Определения .description.php:9
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
$ACTION
Определения csv_new_setup.php:27
const SITE_CHARSET
Определения include.php:62
const LANG_CHARSET
Определения include.php:65
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$text
Определения template_pdf.php:79
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$title
Определения pdf.php:123
$error
Определения subscription_card_product.php:20
$GLOBALS['_____370096793']
Определения update_client.php:1
$dbResult
Определения updtr957.php:3
$url
Определения iframe.php:7