PageRenderTime 26ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/modules/blog/mysql/blog_user.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 433 lines | 361 code | 64 blank | 8 comment | 58 complexity | c37230a52d8c70965ffb68bd1f4d2a1f MD5 | raw file
  1. <?
  2. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/blog/general/blog_user.php");
  3. class CBlogUser extends CAllBlogUser
  4. {
  5. /*************** ADD, UPDATE, DELETE *****************/
  6. function Add($arFields)
  7. {
  8. global $DB;
  9. if(strlen($arFields["PATH"]) > 0)
  10. {
  11. $path = $arFields["PATH"];
  12. unset($arFields["PATH"]);
  13. }
  14. $arFields1 = array();
  15. foreach ($arFields as $key => $value)
  16. {
  17. if (substr($key, 0, 1) == "=")
  18. {
  19. $arFields1[substr($key, 1)] = $value;
  20. unset($arFields[$key]);
  21. }
  22. }
  23. if (!CBlogUser::CheckFields("ADD", $arFields))
  24. return false;
  25. if (
  26. array_key_exists("AVATAR", $arFields)
  27. && is_array($arFields["AVATAR"])
  28. && (
  29. !array_key_exists("MODULE_ID", $arFields["AVATAR"])
  30. || strlen($arFields["AVATAR"]["MODULE_ID"]) <= 0
  31. )
  32. )
  33. $arFields["AVATAR"]["MODULE_ID"] = "blog";
  34. CFile::SaveForDB($arFields, "AVATAR", "blog/avatar");
  35. $arInsert = $DB->PrepareInsert("b_blog_user", $arFields);
  36. foreach ($arFields1 as $key => $value)
  37. {
  38. if (strlen($arInsert[0]) > 0)
  39. $arInsert[0] .= ", ";
  40. $arInsert[0] .= $key;
  41. if (strlen($arInsert[1]) > 0)
  42. $arInsert[1] .= ", ";
  43. $arInsert[1] .= $value;
  44. }
  45. $ID = False;
  46. if (strlen($arInsert[0]) > 0)
  47. {
  48. $strSql =
  49. "INSERT INTO b_blog_user(".$arInsert[0].") ".
  50. "VALUES(".$arInsert[1].")";
  51. $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
  52. $ID = IntVal($DB->LastID());
  53. }
  54. if ($ID)
  55. {
  56. if (CModule::IncludeModule("search"))
  57. {
  58. $arBlogUser = CBlogUser::GetByID($ID);
  59. $dbUser = CUser::GetByID($arBlogUser["USER_ID"]);
  60. $arUser = $dbUser->Fetch();
  61. $arBlog = CBlog::GetByOwnerID($arBlogUser["USER_ID"]);
  62. if ($arBlog)
  63. {
  64. $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
  65. if(strlen($path) > 0)
  66. {
  67. $arPostSite = array($arGroup["SITE_ID"] => $path);
  68. }
  69. else
  70. {
  71. $arPostSite = array(
  72. $arGroup["SITE_ID"] => CBlogUser::PreparePath(
  73. $arBlogUser["USER_ID"],
  74. $arGroup["SITE_ID"]
  75. )
  76. );
  77. }
  78. }
  79. else
  80. {
  81. if(strlen($arUser["LID"]) <= 0)
  82. $arUser["LID"] = SITE_ID;
  83. if(strlen($path) > 0)
  84. {
  85. $arPostSite = array($arUser["LID"] => $path);
  86. }
  87. else
  88. {
  89. $arPostSite = array($arUser["LID"] => CBlogUser::PreparePath($arBlogUser["USER_ID"], $arUser["LID"]));
  90. }
  91. }
  92. $arSearchIndex = array(
  93. "SITE_ID" => $arPostSite,
  94. "LAST_MODIFIED" => ConvertTimeStamp(false, "FULL", false),
  95. "PARAM1" => "USER",
  96. "PARAM2" => $arBlogUser["USER_ID"],
  97. "PERMISSIONS" => array(2),
  98. "TITLE" => CBlogUser::GetUserName($arBlogUser["ALIAS"], $arUser["NAME"], $arUser["LAST_NAME"], $arUser["LOGIN"], $arUser["SECOND_NAME"]),
  99. "BODY" => blogTextParser::killAllTags($arBlogUser["INTERESTS"]." ".$arBlogUser["DESCRIPTION"])
  100. );
  101. CSearch::Index("blog", "U".$ID, $arSearchIndex);
  102. }
  103. }
  104. return $ID;
  105. }
  106. function Update($ID, $arFields)
  107. {
  108. global $DB;
  109. $ID = IntVal($ID);
  110. if(strlen($arFields["PATH"]) > 0)
  111. {
  112. $path = $arFields["PATH"];
  113. unset($arFields["PATH"]);
  114. }
  115. $arFields1 = array();
  116. foreach ($arFields as $key => $value)
  117. {
  118. if (substr($key, 0, 1) == "=")
  119. {
  120. $arFields1[substr($key, 1)] = $value;
  121. unset($arFields[$key]);
  122. }
  123. }
  124. if (!CBlogUser::CheckFields("UPDATE", $arFields, $ID))
  125. return false;
  126. if (
  127. array_key_exists("AVATAR", $arFields)
  128. && is_array($arFields["AVATAR"])
  129. && (
  130. !array_key_exists("MODULE_ID", $arFields["AVATAR"])
  131. || strlen($arFields["AVATAR"]["MODULE_ID"]) <= 0
  132. )
  133. )
  134. $arFields["AVATAR"]["MODULE_ID"] = "blog";
  135. CFile::SaveForDB($arFields, "AVATAR", "blog/avatar");
  136. $strUpdate = $DB->PrepareUpdate("b_blog_user", $arFields);
  137. foreach ($arFields1 as $key => $value)
  138. {
  139. if (strlen($strUpdate) > 0)
  140. $strUpdate .= ", ";
  141. $strUpdate .= $key."=".$value." ";
  142. }
  143. if (strlen($strUpdate) > 0)
  144. {
  145. $arUser = CBlogUser::GetByID($ID, BLOG_BY_BLOG_USER_ID);
  146. $strSql =
  147. "UPDATE b_blog_user SET ".
  148. " ".$strUpdate." ".
  149. "WHERE ID = ".$ID." ";
  150. $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
  151. unset($GLOBALS["BLOG_USER"]["BLOG_USER_CACHE_".$ID]);
  152. unset($GLOBALS["BLOG_USER"]["BLOG_USER1_CACHE_".$arUser["USER_ID"]]);
  153. }
  154. else
  155. {
  156. $ID = false;
  157. }
  158. if ($ID && !(count($arFields1)==1 && strlen($arFields1["LAST_VISIT"])>0))
  159. {
  160. if (CModule::IncludeModule("search"))
  161. {
  162. $arBlogUser = CBlogUser::GetByID($ID);
  163. $dbUser = CUser::GetByID($arBlogUser["USER_ID"]);
  164. $arUser = $dbUser->Fetch();
  165. $arBlog = CBlog::GetByOwnerID($arBlogUser["USER_ID"]);
  166. if ($arBlog)
  167. {
  168. $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
  169. if(strlen($path) > 0)
  170. {
  171. $arPostSite = array($arGroup["SITE_ID"] => $path);
  172. }
  173. else
  174. {
  175. $arPostSite = array(
  176. $arGroup["SITE_ID"] => CBlogUser::PreparePath(
  177. $arBlogUser["USER_ID"],
  178. $arGroup["SITE_ID"]
  179. )
  180. );
  181. }
  182. }
  183. else
  184. {
  185. if(strlen($arUser["LID"]) <= 0)
  186. $arUser["LID"] = SITE_ID;
  187. if(strlen($path) > 0)
  188. {
  189. $arPostSite = array($arUser["LID"] => $path);
  190. }
  191. else
  192. {
  193. $arPostSite = array($arUser["LID"] => CBlogUser::PreparePath($arBlogUser["USER_ID"], $arUser["LID"]));
  194. }
  195. }
  196. if(strlen($arBlogUser["LAST_VISIT"])<=0)
  197. $arBlogUser["LAST_VISIT"] = ConvertTimeStamp(false, "FULL", false);
  198. $arSearchIndex = array(
  199. "SITE_ID" => $arPostSite,
  200. "LAST_MODIFIED" => $arBlogUser["LAST_VISIT"],
  201. "PARAM1" => "USER",
  202. "PARAM2" => $arBlogUser["USER_ID"],
  203. "PERMISSIONS" => array(2),
  204. "TITLE" => CBlogUser::GetUserName($arBlogUser["ALIAS"], $arUser["NAME"], $arUser["LAST_NAME"], $arUser["LOGIN"], $arUser["SECOND_NAME"]),
  205. "BODY" => blogTextParser::killAllTags($arBlogUser["INTERESTS"]." ".$arBlogUser["DESCRIPTION"])
  206. );
  207. CSearch::Index("blog", "U".$ID, $arSearchIndex);
  208. }
  209. }
  210. return $ID;
  211. }
  212. //*************** SELECT *********************/
  213. function GetList($arOrder = Array("ID" => "DESC"), $arFilter = Array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
  214. {
  215. global $DB;
  216. if (count($arSelectFields) <= 0)
  217. $arSelectFields = array("ID", "USER_ID", "ALIAS", "DESCRIPTION", "AVATAR", "INTERESTS", "LAST_VISIT", "DATE_REG", "ALLOW_POST");
  218. // FIELDS -->
  219. $arFields = array(
  220. "ID" => array("FIELD" => "B.ID", "TYPE" => "int"),
  221. "USER_ID" => array("FIELD" => "B.USER_ID", "TYPE" => "int"),
  222. "ALIAS" => array("FIELD" => "B.ALIAS", "TYPE" => "string"),
  223. "DESCRIPTION" => array("FIELD" => "B.DESCRIPTION", "TYPE" => "string"),
  224. "AVATAR" => array("FIELD" => "B.AVATAR", "TYPE" => "int"),
  225. "INTERESTS" => array("FIELD" => "B.INTERESTS", "TYPE" => "string"),
  226. "LAST_VISIT" => array("FIELD" => "B.LAST_VISIT", "TYPE" => "datetime"),
  227. "DATE_REG" => array("FIELD" => "B.DATE_REG", "TYPE" => "datetime"),
  228. "ALLOW_POST" => array("FIELD" => "B.ALLOW_POST", "TYPE" => "char"),
  229. "USER_LOGIN" => array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (B.USER_ID = U.ID)"),
  230. "USER_NAME" => array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (B.USER_ID = U.ID)"),
  231. "USER_LAST_NAME" => array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (B.USER_ID = U.ID)"),
  232. "USER_SECOND_NAME" => array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (B.USER_ID = U.ID)"),
  233. "USER_EMAIL" => array("FIELD" => "U.EMAIL", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (B.USER_ID = U.ID)"),
  234. "USER" => array("FIELD" => "U.LOGIN,U.NAME,U.LAST_NAME,U.SECOND_NAME,U.EMAIL,U.ID", "WHERE_ONLY" => "Y", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (B.USER_ID = U.ID)"),
  235. "GROUP_GROUP_ID" => array("FIELD" => "U2UG.USER_GROUP_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID)"),
  236. "GROUP_BLOG_ID" => array("FIELD" => "U2UG.BLOG_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_blog_user2user_group U2UG ON (B.USER_ID = U2UG.USER_ID)"),
  237. );
  238. // <-- FIELDS
  239. $arSqls = CBlog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
  240. $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
  241. if (is_array($arGroupBy) && count($arGroupBy)==0)
  242. {
  243. $strSql =
  244. "SELECT ".$arSqls["SELECT"]." ".
  245. "FROM b_blog_user B ".
  246. " ".$arSqls["FROM"]." ";
  247. if (strlen($arSqls["WHERE"]) > 0)
  248. $strSql .= "WHERE ".$arSqls["WHERE"]." ";
  249. if (strlen($arSqls["GROUPBY"]) > 0)
  250. $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
  251. //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
  252. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  253. if ($arRes = $dbRes->Fetch())
  254. return $arRes["CNT"];
  255. else
  256. return False;
  257. }
  258. $strSql =
  259. "SELECT ".$arSqls["SELECT"]." ".
  260. "FROM b_blog_user B ".
  261. " ".$arSqls["FROM"]." ";
  262. if (strlen($arSqls["WHERE"]) > 0)
  263. $strSql .= "WHERE ".$arSqls["WHERE"]." ";
  264. if (strlen($arSqls["GROUPBY"]) > 0)
  265. $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
  266. if (strlen($arSqls["ORDERBY"]) > 0)
  267. $strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
  268. if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"])<=0)
  269. {
  270. $strSql_tmp =
  271. "SELECT COUNT('x') as CNT ".
  272. "FROM b_blog_user B ".
  273. " ".$arSqls["FROM"]." ";
  274. if (strlen($arSqls["WHERE"]) > 0)
  275. $strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ";
  276. if (strlen($arSqls["GROUPBY"]) > 0)
  277. $strSql_tmp .= "GROUP BY ".$arSqls["GROUPBY"]." ";
  278. //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
  279. $dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  280. $cnt = 0;
  281. if (strlen($arSqls["GROUPBY"]) <= 0)
  282. {
  283. if ($arRes = $dbRes->Fetch())
  284. $cnt = $arRes["CNT"];
  285. }
  286. else
  287. {
  288. $cnt = $dbRes->SelectedRowsCount();
  289. }
  290. $dbRes = new CDBResult();
  291. //echo "!2.2!=".htmlspecialcharsbx($strSql)."<br>";
  292. $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
  293. }
  294. else
  295. {
  296. if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0)
  297. $strSql .= "LIMIT ".IntVal($arNavStartParams["nTopCount"]);
  298. //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
  299. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  300. }
  301. return $dbRes;
  302. }
  303. function GetUserFriendsList($ID, $userID = False, $bAuth = False, $limit = 20, $arGroup = Array())
  304. {
  305. global $DB;
  306. $ID = IntVal($ID);
  307. $userID = IntVal($userID);
  308. $bAuth = ($bAuth ? True : False);
  309. $limit = IntVal($limit);
  310. if ($limit <= 0)
  311. $limit = 20;
  312. $strSql =
  313. "SELECT BP.ID, BP.DATE_PUBLISH, B.ID as BLOG_ID, B.URL ".
  314. "FROM b_blog B1 ".
  315. " INNER JOIN b_blog_user2user_group U2UG ".
  316. " ON (B1.ID = U2UG.BLOG_ID) ".
  317. " INNER JOIN b_blog B ".
  318. " ON (U2UG.USER_ID = B.OWNER_ID) ".
  319. " INNER JOIN b_blog_post BP ".
  320. " ON (B.ID = BP.BLOG_ID ".
  321. " AND BP.DATE_PUBLISH <= ".$DB->CurrentTimeFunction()." ".
  322. " AND BP.PUBLISH_STATUS = '".$DB->ForSql(BLOG_PUBLISH_STATUS_PUBLISH)."') ".
  323. " INNER JOIN b_blog_user_group_perms UGP2 ".
  324. " ON (B.ID = UGP2.BLOG_ID ".
  325. " AND UGP2.USER_GROUP_ID = 1 ".
  326. " AND BP.ID = UGP2.POST_ID) ";
  327. if ($bAuth)
  328. $strSql .=
  329. " INNER JOIN b_blog_user_group_perms UGP3 ".
  330. " ON (B.ID = UGP3.BLOG_ID ".
  331. " AND UGP3.USER_GROUP_ID = 2 ".
  332. " AND BP.ID = UGP3.POST_ID) ";
  333. $strSql .=
  334. " LEFT JOIN b_blog_user2user_group U2UG1 ".
  335. " ON (B.ID = U2UG1.BLOG_ID AND U2UG1.USER_ID = ".$userID.") ".
  336. " LEFT JOIN b_blog_user_group_perms UGP ".
  337. " ON (B.ID = UGP.BLOG_ID ".
  338. " AND U2UG1.USER_GROUP_ID = UGP.USER_GROUP_ID ".
  339. " AND BP.ID = UGP.POST_ID) ".
  340. "WHERE B1.OWNER_ID = ".$ID." ".
  341. " AND B.ACTIVE = 'Y' ".
  342. " AND B1.ACTIVE = 'Y' ";
  343. if(!empty($arGroup))
  344. {
  345. foreach($arGroup as $k => $v)
  346. {
  347. if(IntVal($v) <= 0)
  348. unset($arGroup[$k]);
  349. else
  350. $arGroup[$k] = IntVal($v);
  351. }
  352. $strGroupID = implode(",", $arGroup);
  353. $strSql .= " AND B.GROUP_ID in (".$strGroupID.") ".
  354. " AND B1.GROUP_ID in (".$strGroupID.") ";
  355. }
  356. $strSql .= " AND (UGP.PERMS > '".$DB->ForSql(BLOG_PERMS_DENY)."' ".
  357. " OR UGP2.PERMS > '".$DB->ForSql(BLOG_PERMS_DENY)."' ";
  358. if ($bAuth)
  359. $strSql .= " OR UGP3.PERMS > '".$DB->ForSql(BLOG_PERMS_DENY)."' ";
  360. $strSql .=
  361. ") ".
  362. "GROUP BY BP.ID, BP.DATE_PUBLISH, B.ID, B.URL ".
  363. "ORDER BY BP.DATE_PUBLISH DESC ".
  364. "LIMIT ".$limit." ";
  365. $dbResult = $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
  366. return $dbResult;
  367. }
  368. }
  369. ?>