PageRenderTime 51ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/modules/catalog/mysql/store.php

https://gitlab.com/Rad1calDreamer/honey
PHP | 245 lines | 193 code | 45 blank | 7 comment | 46 complexity | 7cd0434ce2a12b36443b27d11db29b7a MD5 | raw file
  1. <?php
  2. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/catalog/general/store.php");
  3. class CCatalogStore
  4. extends CAllCatalogStore
  5. {
  6. /** Add new store in table b_catalog_store,
  7. * @static
  8. * @param $arFields
  9. * @return bool|int
  10. */
  11. static function Add($arFields)
  12. {
  13. /** @global CDataBase $DB */
  14. global $DB;
  15. if(!CBXFeatures::IsFeatureEnabled('CatMultiStore'))
  16. {
  17. $dbResultList = CCatalogStore::GetList(array(), array(), false, array('NAV_PARAMS' => array("nTopCount" => "1")), array("ID"));
  18. if($arResult = $dbResultList->Fetch())
  19. {
  20. $GLOBALS["APPLICATION"]->ThrowException(GetMessage("CS_ALREADY_HAVE_STORE"));
  21. return false;
  22. }
  23. }
  24. foreach (GetModuleEvents("catalog", "OnBeforeCatalogStoreAdd", true) as $arEvent)
  25. {
  26. if(ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
  27. return false;
  28. }
  29. if(array_key_exists('DATE_CREATE', $arFields))
  30. unset($arFields['DATE_CREATE']);
  31. if(array_key_exists('DATE_MODIFY', $arFields))
  32. unset($arFields['DATE_MODIFY']);
  33. $arFields['~DATE_MODIFY'] = $DB->GetNowFunction();
  34. $arFields['~DATE_CREATE'] = $DB->GetNowFunction();
  35. if(!self::CheckFields('ADD',$arFields))
  36. return false;
  37. $arInsert = $DB->PrepareInsert("b_catalog_store", $arFields);
  38. $strSql = "INSERT INTO b_catalog_store (".$arInsert[0].") VALUES(".$arInsert[1].")";
  39. $res = $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__);
  40. if(!$res)
  41. return false;
  42. $lastId = intval($DB->LastID());
  43. foreach(GetModuleEvents("catalog", "OnCatalogStoreAdd", true) as $arEvent)
  44. ExecuteModuleEventEx($arEvent, array($lastId, $arFields));
  45. return $lastId;
  46. }
  47. static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
  48. {
  49. global $DB;
  50. if (empty($arSelectFields))
  51. $arSelectFields = array(
  52. "ID",
  53. "ACTIVE",
  54. "TITLE",
  55. "PHONE",
  56. "SCHEDULE",
  57. "ADDRESS",
  58. "DESCRIPTION",
  59. "GPS_N",
  60. "GPS_S",
  61. "IMAGE_ID",
  62. "DATE_CREATE",
  63. "DATE_MODIFY",
  64. "USER_ID",
  65. "XML_ID",
  66. "SORT",
  67. "EMAIL",
  68. "ISSUING_CENTER",
  69. "SHIPPING_CENTER",
  70. "SITE_ID"
  71. /*, "BASE"*/
  72. );
  73. $keyForDelete = array_search("PRODUCT_AMOUNT", $arSelectFields);
  74. if (!isset($arFilter["PRODUCT_ID"]) && $keyForDelete !== false)
  75. unset($arSelectFields[$keyForDelete]);
  76. if ($keyForDelete == false)
  77. {
  78. $keyForDelete = array_search("ELEMENT_ID", $arSelectFields);
  79. if($keyForDelete !== false)
  80. unset($arSelectFields[$keyForDelete]);
  81. }
  82. $productID = '(';
  83. if (is_array($arFilter["PRODUCT_ID"]))
  84. {
  85. foreach($arFilter["PRODUCT_ID"] as $id)
  86. $productID .= intval($id).',';
  87. $productID = rtrim($productID, ',').')';
  88. }
  89. else
  90. {
  91. $productID .= intval($arFilter["PRODUCT_ID"]) . ')';
  92. }
  93. $arFields = array(
  94. "ID" => array("FIELD" => "CS.ID", "TYPE" => "int"),
  95. "ACTIVE" => array("FIELD" => "CS.ACTIVE", "TYPE" => "string"),
  96. "TITLE" => array("FIELD" => "CS.TITLE", "TYPE" => "string"),
  97. "PHONE" => array("FIELD" => "CS.PHONE", "TYPE" => "string"),
  98. "SCHEDULE" => array("FIELD" => "CS.SCHEDULE", "TYPE" => "string"),
  99. "ADDRESS" => array("FIELD" => "CS.ADDRESS", "TYPE" => "string"),
  100. "DESCRIPTION" => array("FIELD" => "CS.DESCRIPTION", "TYPE" => "string"),
  101. "GPS_N" => array("FIELD" => "CS.GPS_N", "TYPE" => "string"),
  102. "GPS_S" => array("FIELD" => "CS.GPS_S", "TYPE" => "string"),
  103. "IMAGE_ID" => array("FIELD" => "CS.IMAGE_ID", "TYPE" => "int"),
  104. "LOCATION_ID" => array("FIELD" => "CS.LOCATION_ID", "TYPE" => "int"),
  105. "DATE_CREATE" => array("FIELD" => "CS.DATE_CREATE", "TYPE" => "datetime"),
  106. "DATE_MODIFY" => array("FIELD" => "CS.DATE_MODIFY", "TYPE" => "datetime"),
  107. "USER_ID" => array("FIELD" => "CS.USER_ID", "TYPE" => "int"),
  108. "MODIFIED_BY" => array("FIELD" => "CS.MODIFIED_BY", "TYPE" => "int"),
  109. "XML_ID" => array("FIELD" => "CS.XML_ID", "TYPE" => "string"),
  110. "SORT" => array("FIELD" => "CS.SORT", "TYPE" => "int"),
  111. "EMAIL" => array("FIELD" => "CS.EMAIL", "TYPE" => "string"),
  112. "ISSUING_CENTER" => array("FIELD" => "CS.ISSUING_CENTER", "TYPE" => "char"),
  113. "SHIPPING_CENTER" => array("FIELD" => "CS.SHIPPING_CENTER", "TYPE" => "char"),
  114. "SITE_ID" => array("FIELD" => "CS.SITE_ID", "TYPE" => "string"),
  115. "PRODUCT_AMOUNT" => array("FIELD" => "CP.AMOUNT", "TYPE" => "double", "FROM" => "LEFT JOIN b_catalog_store_product CP ON (CS.ID = CP.STORE_ID AND CP.PRODUCT_ID IN ".$productID.")"),
  116. "ELEMENT_ID" => array("FIELD" => "CP.PRODUCT_ID", "TYPE" => "int")
  117. );
  118. $userField = new CUserTypeSQL();
  119. $userField->SetEntity("CAT_STORE", "CS.ID");
  120. $userField->SetSelect($arSelectFields);
  121. $userField->SetFilter($arFilter);
  122. $userField->SetOrder($arOrder);
  123. $strUfFilter = $userField->GetFilter();
  124. $strSqlUfFilter = (strlen($strUfFilter) > 0) ? " (".$strUfFilter.") " : "";
  125. $strSqlUfOrder = "";
  126. foreach ($arOrder as $field => $by)
  127. {
  128. $field = $userField->GetOrder($field);
  129. if (empty($field))
  130. continue;
  131. if (strlen($strSqlUfOrder) > 0)
  132. $strSqlUfOrder .= ', ';
  133. $strSqlUfOrder .= $field." ".$by;
  134. }
  135. $arSqls = CCatalog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
  136. $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
  137. if (empty($arGroupBy) && is_array($arGroupBy))
  138. {
  139. $strSql = "SELECT ".$arSqls["SELECT"]." ".$userField->GetSelect()." FROM b_catalog_store CS ".$arSqls["FROM"]. " ".$userField->GetJoin("CS.ID");
  140. if (!empty($arSqls["WHERE"]))
  141. $strSql .= " WHERE ".$arSqls["WHERE"]." ";
  142. if (strlen($arSqls["WHERE"]) > 0 && strlen($strSqlUfFilter) > 0)
  143. $strSql .= " AND ".$strSqlUfFilter." ";
  144. elseif (strlen($arSqls["WHERE"]) == 0 && strlen($strSqlUfFilter) > 0)
  145. $strSql .= " WHERE ".$strSqlUfFilter." ";
  146. if (!empty($arSqls["GROUPBY"]))
  147. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  148. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  149. if ($arRes = $dbRes->Fetch())
  150. return $arRes["CNT"];
  151. else
  152. return false;
  153. }
  154. $strSql = "SELECT ".$arSqls["SELECT"]." ".$userField->GetSelect()." FROM b_catalog_store CS ".$arSqls["FROM"]." ".$userField->GetJoin("CS.ID");
  155. if (!empty($arSqls["WHERE"]))
  156. $strSql .= " WHERE ".$arSqls["WHERE"]." ";
  157. if (strlen($arSqls["WHERE"]) > 0 && strlen($strSqlUfFilter) > 0)
  158. $strSql .= " AND ".$strSqlUfFilter." ";
  159. elseif (strlen($arSqls["WHERE"]) <= 0 && strlen($strSqlUfFilter) > 0)
  160. $strSql .= " WHERE ".$strSqlUfFilter." ";
  161. if (!empty($arSqls["GROUPBY"]))
  162. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  163. if (!empty($arSqls["ORDERBY"]))
  164. $strSql .= " ORDER BY ".$arSqls["ORDERBY"];
  165. elseif (strlen($arSqls["ORDERBY"]) <= 0 && strlen($strSqlUfOrder) > 0)
  166. $strSql .= " ORDER BY ".$strSqlUfOrder;
  167. $intTopCount = 0;
  168. $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
  169. if ($boolNavStartParams && array_key_exists('nTopCount', $arNavStartParams))
  170. $intTopCount = intval($arNavStartParams["nTopCount"]);
  171. if ($boolNavStartParams && 0 >= $intTopCount)
  172. {
  173. $strSql_tmp = "SELECT COUNT('x') as CNT FROM b_catalog_store CS ".$arSqls["FROM"]. " ".$userField->GetJoin("CS.ID");
  174. if (!empty($arSqls["WHERE"]))
  175. $strSql_tmp .= " WHERE ".$arSqls["WHERE"];
  176. if (strlen($arSqls["WHERE"]) > 0 && strlen($strSqlUfFilter) > 0)
  177. $strSql_tmp .= " AND ".$strSqlUfFilter." ";
  178. elseif (strlen($arSqls["WHERE"]) <= 0 && strlen($strSqlUfFilter) > 0)
  179. $strSql_tmp .= " WHERE ".$strSqlUfFilter." ";
  180. if (!empty($arSqls["GROUPBY"]))
  181. $strSql_tmp .= " GROUP BY ".$arSqls["GROUPBY"];
  182. $dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  183. $cnt = 0;
  184. if (empty($arSqls["GROUPBY"]))
  185. if ($arRes = $dbRes->Fetch())
  186. $cnt = $arRes["CNT"];
  187. else
  188. $cnt = $dbRes->SelectedRowsCount();
  189. $dbRes = new CDBResult();
  190. $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
  191. }
  192. else
  193. {
  194. if($boolNavStartParams && 0 < $intTopCount)
  195. $strSql .= " LIMIT ".$intTopCount;
  196. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  197. }
  198. return $dbRes;
  199. }
  200. }