Ejemplo n.º 1
0
 /**
  * <p>Функция добавляет новую группу местоположений с параметрами из массива arFields. </p>
  *
  *
  *
  *
  * @param array $arFields  Массив значений параметров группы местоположений, ключами в
  * котором являются имена параметров.<br><br> Допустимые ключи: <ul> <li>
  * <b>SORT</b> - индекс сортировки;</li> <li> <b>LOCATION_ID</b> - массив кодов
  * местоположений, которые входят в эту группу;</li> <li> <b>LANG</b> - массив
  * языкозависимых параметров группы, каждый элемент которого имеет
  * вид <pre class="syntax"> array("LID"=&gt;"язык параметров", "NAME"=&gt;"Название
  * группы")</pre> </li> </ul>
  *
  *
  *
  * @return int <p>Возвращается код добавленной группы или <i>false</i> в случае
  * ошибки.</p> <a name="examples"></a>
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $arFields = array(
  *    "SORT" =&gt; 150,
  *    "LOCATION_ID" =&gt; array(12, 34, 35, 36, 37),
  *    "LANG" =&gt; array(
  *       array("LID" =&gt; "ru", "NAME" =&gt; "Группа 1"),
  *       array("LID" =&gt; "en", "NAME" =&gt; "Group 1")
  *    )
  * );<br>
  * $ID = CSaleLocationGroup::Add($arFields);
  * if (IntVal($ID)&lt;=0)
  *    echo "Ошибка добавления группы";<br>?&gt;
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalelocationgroup/csalelocationgroup__add.3520254b.php
  * @author Bitrix
  */
 public static function Add($arFields)
 {
     global $DB;
     if (!CSaleLocationGroup::CheckFields("ADD", $arFields)) {
         return false;
     }
     $db_events = GetModuleEvents("sale", "OnBeforeLocationGroupAdd");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($arFields)) === false) {
             return false;
         }
     }
     $arInsert = $DB->PrepareInsert("b_sale_location_group", $arFields);
     $strSql = "INSERT INTO b_sale_location_group(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $ID = IntVal($DB->LastID());
     $countFieldLang = count($arFields["LANG"]);
     for ($i = 0; $i < $countFieldLang; $i++) {
         $arInsert = $DB->PrepareInsert("b_sale_location_group_lang", $arFields["LANG"][$i]);
         $strSql = "INSERT INTO b_sale_location_group_lang(LOCATION_GROUP_ID, " . $arInsert[0] . ") " . "VALUES(" . $ID . ", " . $arInsert[1] . ")";
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     $strSqlHead = "INSERT INTO b_sale_location2location_group (LOCATION_ID, LOCATION_GROUP_ID) VALUES ";
     $strSqlHeadLength = strlen($strSqlHead);
     $res = $DB->Query('SHOW VARIABLES LIKE \'max_allowed_packet\'');
     $maxPack = $res->Fetch();
     if (isset($maxPack["Value"])) {
         $max_allowed_packet = $maxPack["Value"] - $strSqlHeadLength - 100;
     } else {
         $max_allowed_packet = 0;
     }
     $tmpSql = '';
     $strSql = '';
     $countFieldLoc = count($arFields["LOCATION_ID"]);
     for ($i = 0; $i < $countFieldLoc; $i++) {
         $tmpSql = "(" . $arFields["LOCATION_ID"][$i] . ", " . $ID . ")";
         $strSqlLen = strlen($strSql);
         if ($strSqlHeadLength + $strSqlLen + strlen($tmpSql) < $max_allowed_packet || $max_allowed_packet <= 0) {
             if ($strSqlLen > 0) {
                 $strSql .= ",";
             }
             $strSql .= $tmpSql;
         } else {
             $DB->Query($strSqlHead . $strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             $strSql = $tmpSql;
         }
     }
     if (strlen($strSql) > 0) {
         $DB->Query($strSqlHead . $strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     $events = GetModuleEvents("sale", "OnLocationGroupAdd");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     return $ID;
 }
Ejemplo n.º 2
0
 /**
  * <p>Метод обновляет параметры местоположения с кодом ID в соответствии с параметрами из массива arFields. Обновляются также страна и город этого местоположения. Метод динамичный.</p>
  *
  *
  * @param int $ID  Код местоположения. </h
  *
  * @param array $arFields  Ассоциативный массив параметров местоположения с ключами: <ul> <li>
  * <b>SORT</b> - индекс сортировки; </li> <li> <b>COUNTRY_ID</b> - код страны (если такая
  * страна уже есть, иначе код должен быть нулем, и должен быть
  * заполнен ключ COUNTRY);</li> <li> <b>COUNTRY</b> - массив с параметрами страны
  * (должен быть заполнен, если не установлен ключ COUNTRY_ID или если ключ
  * CHANGE_COUNTRY установлен в значение Y); </li> <li> <b>CHANGE_COUNTRY</b> - флаг (Y/N),
  * изменять ли параметры страны (долны быть установлены ключи COUNTRY_ID
  * и COUNTRY); </li> <li> <b>WITHOUT_CITY</b> - флаг (Y/N), означающий, что это
  * местоположение без города (только страна) (если значением с этим
  * ключем является N, то необходимо заполнить ключ CITY);</li> <li> <b>CITY_ID</b> -
  * код города (если такой город уже есть, иначе код должен быть нулем,
  * и должен быть заполнен ключ CITY);</li> <li> <b>CITY</b> - массив с параметрами
  * города (если установлен флаг WITHOUT_CITY в значение Y, то этот ключ
  * заполнять не нужно);</li> <li> <b>LOCATION_ID</b> - массив кодов
  * местоположений, которые привязаны к данной группе
  * местоположений.</li> </ul> Массив с параметрами страны должен
  * содержать ключи: <ul> <li> <b>NAME</b> - название страны (не зависящее от
  * языка);</li> <li> <b>SHORT_NAME</b> - сокращенное название страны - абревиатура
  * (не зависящее от языка);</li> <li> <b>&lt;код языка&gt;</b> - ключем является
  * код языка, а значением ассоциативный массив вида <pre class="syntax">
  * array("LID" =&gt; "код языка", "NAME" =&gt; "название страны на этом языке",
  * "SHORT_NAME" =&gt; "сокращенное название страны (аббревиатура) на этом
  * языке")</pre> Эта пара ключ-значение должна присутствовать для
  * каждого языка системы. </li> </ul> Массив с параметрами города должен
  * содержать ключи: <ul> <li> <b>NAME</b> - название города (не зависящее от
  * языка);</li> <li> <b>SHORT_NAME</b> - сокращенное название города -
  * аббревиатура (не зависящее от языка);</li> <li> <b>&lt;код языка&gt;</b> -
  * ключем является код языка, а значением ассоциативный массив вида
  * <pre class="syntax"> array("LID" =&gt; "код языка", "NAME" =&gt; "название города на этом
  * языке", "SHORT_NAME" =&gt; "сокращенное название города (аббревиатура) на
  * этом языке")</pre> Эта пара ключ-значение должна присутствовать для
  * каждого языка системы.</li> </ul>
  *
  * @return int <p>Возвращается код измененного местоположения или <i>false</i> у
  * случае ошибки.</p> <a name="examples"></a>
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $arFields = array(
  *    "SORT" =&gt; 100,
  *    "COUNTRY_ID" =&gt; 8,
  *    "WITHOUT_CITY" =&gt; "N"
  * );
  *  
  * $arCity = array(
  *    "NAME" =&gt; "Kaliningrad",
  *    "SHORT_NAME" =&gt; "Kaliningrad",
  *    "ru" =&gt; array(
  *       "LID" =&gt; "ru",
  *       "NAME" =&gt; "Калининград",
  *       "SHORT_NAME" =&gt; "Калининград"
  *       ),
  *    "en" =&gt; array(
  *       "LID" =&gt; "en",
  *       "NAME" =&gt; "Kaliningrad",
  *       "SHORT_NAME" =&gt; "Kaliningrad"
  *       )
  * );
  *  
  * $arFields["CITY"] = $arCity;
  *  
  * if (!CSaleLocation::Update(6, $arFields))
  *    echo "Ошибка изменения местоположения";
  * ?&gt;
  * 
  * 
  * 
  *  function CreateCityRussia($arFields, $regionName, &amp;$strError) {
  *    // Ищем группу местоположений, к которой необходимо привязать местоположение
  *    $locGroupID = 0;
  *    $resLocationGroup = CSaleLocationGroup::GetList(array("ID"=&gt;"ASC"), array());
  *    while($arLocationGroup = $resLocationGroup-&gt;Fetch()) {
  *      if(mb_strtolower($arLocationGroup["NAME"], "Windows-1251") == mb_strtolower($regionName, "Windows-1251")) $locGroupID = $arLocationGroup["ID"];
  *    }
  *    
  *    // Если группа найдена, определяем список привязанных к ней местоположений и добавляем к списку новое
  *    if($locGroupID) {
  *      // Создаем новый город в стране Россия и новое местоположение
  *      $arCoutry = CSaleLocation::GetList(array(), array("LID" =&gt; LANGUAGE_ID, "CITY_NAME" =&gt; false, "COUNTRY_NAME" =&gt; "Россия"))-&gt;Fetch();
  *      $cityId = CSaleLocation::AddCity($arFields);
  *      $ID = CSaleLocation::AddLocation(array("COUNTRY_ID" =&gt; $arCoutry['COUNTRY_ID'], "CITY_ID" =&gt; $cityId));
  *      
  *      // Формируем новый список местоположений группы
  *      $resLocGroup = CSaleLocationGroup::GetLocationList(array("LOCATION_GROUP_ID" =&gt; $locGroupID));
  *      $locList = array();
  *      while($arLocGroup = $resLocGroup-&gt;Fetch()) {
  *        $locList[] = $arLocGroup["LOCATION_ID"];
  *      }
  *      $locList[] = $ID;
  *      
  *      // Записываем новый список местоположений группы
  *      $arFields = CSaleLocationGroup::GetByID($locGroupID);
  *      $arFields["LOCATION_ID"] = $locList;
  *      if (!CSaleLocationGroup::Update($locGroupID, $arFields))
  *         $strError = "Ошибка добавления местоположения к группе местоположений";
  *      return $ID;
  *    } else {
  *      // В противном случае записываем сообщение об ошибке
  *      $strError = "Ошибка создания местоположения: Не найдена группа местоположений $regionName";
  *      return false; 
  *    }
  *     }
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalelocationgroup/csalelocationgroup__update.c02c467b.php
  * @author Bitrix
  */
 public static function Update($ID, $arFields)
 {
     global $DB;
     $ID = IntVal($ID);
     if (!CSaleLocationGroup::CheckFields("UPDATE", $arFields)) {
         return false;
     }
     $db_events = GetModuleEvents("sale", "OnBeforeLocationGroupUpdate");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     $events = GetModuleEvents("sale", "OnLocationGroupUpdate");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     $strUpdate = $DB->PrepareUpdate("b_sale_location_group", $arFields);
     $strSql = "UPDATE b_sale_location_group SET " . $strUpdate . " WHERE ID = " . $ID . "";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if (is_set($arFields, "LANG")) {
         $DB->Query("DELETE FROM b_sale_location_group_lang WHERE LOCATION_GROUP_ID = " . $ID . "");
         $countFieldLang = count($arFields["LANG"]);
         for ($i = 0; $i < $countFieldLang; $i++) {
             $arInsert = $DB->PrepareInsert("b_sale_location_group_lang", $arFields["LANG"][$i]);
             $strSql = "INSERT INTO b_sale_location_group_lang(LOCATION_GROUP_ID, " . $arInsert[0] . ") " . "VALUES(" . $ID . ", " . $arInsert[1] . ")";
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
     }
     if (is_set($arFields, "LOCATION_ID")) {
         if (CSaleLocation::isLocationProMigrated()) {
             try {
                 $entityClass = self::CONN_ENTITY_NAME . 'Table';
                 $entityClass::resetMultipleForOwner($ID, array(Location\Connector::DB_LOCATION_FLAG => $entityClass::normalizeLocationList($arFields["LOCATION_ID"])));
             } catch (Exception $e) {
             }
         } else {
             $DB->Query("DELETE FROM b_sale_location2location_group WHERE LOCATION_GROUP_ID = " . $ID . "");
             $countArFieldLoc = count($arFields["LOCATION_ID"]);
             for ($i = 0; $i < $countArFieldLoc; $i++) {
                 $strSql = "INSERT INTO b_sale_location2location_group(LOCATION_ID, LOCATION_GROUP_ID) " . "VALUES(" . $arFields["LOCATION_ID"][$i] . ", " . $ID . ")";
                 $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             }
         }
     }
     return $ID;
 }
Ejemplo n.º 3
0
 /**
  * <p>Функция обновляет параметры местоположения с кодом ID в соответствии с параметрами из массива arFields. Обновляются так же страна и город этого местоположения. </p>
  *
  *
  *
  *
  * @param int $ID  Код местоположения. </h
  *
  *
  *
  * @param array $arFields  Ассоциативный массив параметров местоположения с ключами: <ul> <li>
  * <b>SORT</b> - индекс сортировки; </li> <li> <b>COUNTRY_ID</b> - код страны (если такая
  * страна уже есть, иначе код должен быть нулем, и должен быть
  * заполнен ключ COUNTRY);</li> <li> <b>COUNTRY</b> - массив с параметрами страны
  * (должен быть заполнен, если не установлен ключ COUNTRY_ID или если ключ
  * CHANGE_COUNTRY установлен в значение Y); </li> <li> <b>CHANGE_COUNTRY</b> - флаг (Y/N),
  * изменять ли параметры страны (долны быть установлены ключи COUNTRY_ID
  * и COUNTRY); </li> <li> <b>WITHOUT_CITY</b> - флаг (Y/N), означающий, что это
  * местоположение без города (только страна) (если значением с этим
  * ключем является N, то необходимо заполнить ключ CITY);</li> <li> <b>CITY_ID</b> -
  * код города (если такой город уже есть, иначе код должен быть нулем,
  * и должен быть заполнен ключ CITY);</li> <li> <b>CITY</b> - массив с параметрами
  * города (если установлен флаг WITHOUT_CITY в значение Y, то этот ключ
  * заполнять не нужно);</li> <li> <b>LOCATION_ID</b> - массив кодов
  * местоположений, которые привязаны к данной группе
  * местоположений.</li> </ul> Массив с параметрами страны должен
  * содержать ключи: <ul> <li> <b>NAME</b> - название страны (не зависящее от
  * языка);</li> <li> <b>SHORT_NAME</b> - сокращенное название страны - абревиатура
  * (не зависящее от языка);</li> <li> <b>&lt;код языка&gt;</b> - ключем является
  * код языка, а значением ассоциативный массив вида <pre class="syntax">
  * array("LID" =&gt; "код языка", "NAME" =&gt; "название страны на этом языке",
  * "SHORT_NAME" =&gt; "сокращенное название страны (аббревиатура) на этом
  * языке")</pre> Эта пара ключ-значение должна присутствовать для
  * каждого языка системы. </li> </ul> Массив с параметрами города должен
  * содержать ключи: <ul> <li> <b>NAME</b> - название города (не зависящее от
  * языка);</li> <li> <b>SHORT_NAME</b> - сокращенное название города - абревиатура
  * (не зависящее от языка);</li> <li> <b>&lt;код языка&gt;</b> - ключем является
  * код языка, а значением ассоциативный массив вида <pre class="syntax">
  * array("LID" =&gt; "код языка", "NAME" =&gt; "название города на этом языке",
  * "SHORT_NAME" =&gt; "сокращенное название города (аббревиатура) на этом
  * языке")</pre> Эта пара ключ-значение должна присутствовать для
  * каждого языка системы.</li> </ul>
  *
  *
  *
  * @return int <p>Возвращается код измененного местоположения или <i>false</i> у
  * случае ошибки.</p> <a name="examples"></a>
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $arFields = array(
  *    "SORT" =&gt; 100,
  *    "COUNTRY_ID" =&gt; 8,
  *    "WITHOUT_CITY" =&gt; "N"
  * );
  *  
  * $arCity = array(
  *    "NAME" =&gt; "Kaliningrad",
  *    "SHORT_NAME" =&gt; "Kaliningrad",
  *    "ru" =&gt; array(
  *       "LID" =&gt; "ru",
  *       "NAME" =&gt; "Калининград",
  *       "SHORT_NAME" =&gt; "Калининград"
  *       ),
  *    "en" =&gt; array(
  *       "LID" =&gt; "en",
  *       "NAME" =&gt; "Kaliningrad",
  *       "SHORT_NAME" =&gt; "Kaliningrad"
  *       )
  * );
  *  
  * $arFields["CITY"] = $arCity;
  *  
  * if (!CSaleLocation::Update(6, $arFields))
  *    echo "Ошибка изменения местоположения";
  * ?&gt;
  * 
  * 
  * 
  *  function CreateCityRussia($arFields, $regionName, &amp;$strError) {
  *    // Ищем группу местоположений, к которой необходимо привязать местоположение
  *    $locGroupID = 0;
  *    $resLocationGroup = CSaleLocationGroup::GetList(array("ID"=&gt;"ASC"), array());
  *    while($arLocationGroup = $resLocationGroup-&gt;Fetch()) {
  *      if(mb_strtolower($arLocationGroup["NAME"], "Windows-1251") == mb_strtolower($regionName, "Windows-1251")) $locGroupID = $arLocationGroup["ID"];
  *    }
  *    
  *    // Если группа найдена, определяем список привязанных к ней местоположений и добавляем к списку новое
  *    if($locGroupID) {
  *      // Создаем новый город в стране Россия и новое местоположение
  *      $arCoutry = CSaleLocation::GetList(array(), array("LID" =&gt; LANGUAGE_ID, "CITY_NAME" =&gt; false, "COUNTRY_NAME" =&gt; "Россия"))-&gt;Fetch();
  *      $cityId = CSaleLocation::AddCity($arFields);
  *      $ID = CSaleLocation::AddLocation(array("COUNTRY_ID" =&gt; $arCoutry['COUNTRY_ID'], "CITY_ID" =&gt; $cityId));
  *      
  *      // Формируем новый список местоположений группы
  *      $resLocGroup = CSaleLocationGroup::GetLocationList(array("LOCATION_GROUP_ID" =&gt; $locGroupID));
  *      $locList = array();
  *      while($arLocGroup = $resLocGroup-&gt;Fetch()) {
  *        $locList[] = $arLocGroup["LOCATION_ID"];
  *      }
  *      $locList[] = $ID;
  *      
  *      // Записываем новый список местоположений группы
  *      $arFields = CSaleLocationGroup::GetByID($locGroupID);
  *      $arFields["LOCATION_ID"] = $locList;
  *      if (!CSaleLocationGroup::Update($locGroupID, $arFields))
  *         $strError = "Ошибка добавления местоположения к группе местоположений";
  *      return $ID;
  *    } else {
  *      // В противном случае записываем сообщение об ошибке
  *      $strError = "Ошибка создания местоположения: Не найдена группа местоположений $regionName";
  *      return false; 
  *    }
  *     }
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalelocationgroup/csalelocationgroup__update.c02c467b.php
  * @author Bitrix
  */
 public static function Update($ID, $arFields)
 {
     global $DB;
     $ID = IntVal($ID);
     if (!CSaleLocationGroup::CheckFields("UPDATE", $arFields)) {
         return false;
     }
     $db_events = GetModuleEvents("sale", "OnBeforeLocationGroupUpdate");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     $events = GetModuleEvents("sale", "OnLocationGroupUpdate");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     $strUpdate = $DB->PrepareUpdate("b_sale_location_group", $arFields);
     $strSql = "UPDATE b_sale_location_group SET " . $strUpdate . " WHERE ID = " . $ID . "";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if (is_set($arFields, "LANG")) {
         $DB->Query("DELETE FROM b_sale_location_group_lang WHERE LOCATION_GROUP_ID = " . $ID . "");
         $countFieldLang = count($arFields["LANG"]);
         for ($i = 0; $i < $countFieldLang; $i++) {
             $arInsert = $DB->PrepareInsert("b_sale_location_group_lang", $arFields["LANG"][$i]);
             $strSql = "INSERT INTO b_sale_location_group_lang(LOCATION_GROUP_ID, " . $arInsert[0] . ") " . "VALUES(" . $ID . ", " . $arInsert[1] . ")";
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
     }
     if (is_set($arFields, "LOCATION_ID")) {
         $DB->Query("DELETE FROM b_sale_location2location_group WHERE LOCATION_GROUP_ID = " . $ID . "");
         $countArFieldLoc = count($arFields["LOCATION_ID"]);
         for ($i = 0; $i < $countArFieldLoc; $i++) {
             $strSql = "INSERT INTO b_sale_location2location_group(LOCATION_ID, LOCATION_GROUP_ID) " . "VALUES(" . $arFields["LOCATION_ID"][$i] . ", " . $ID . ")";
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
     }
     return $ID;
 }
Ejemplo n.º 4
0
 function Add($arFields)
 {
     global $DB;
     if (!CSaleLocationGroup::CheckFields("ADD", $arFields)) {
         return false;
     }
     $db_events = GetModuleEvents("sale", "OnBeforeLocationGroupAdd");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($arFields)) === false) {
             return false;
         }
     }
     $arInsert = $DB->PrepareInsert("b_sale_location_group", $arFields);
     $strSql = "INSERT INTO b_sale_location_group(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $ID = IntVal($DB->LastID());
     $countFieldLang = count($arFields["LANG"]);
     for ($i = 0; $i < $countFieldLang; $i++) {
         $arInsert = $DB->PrepareInsert("b_sale_location_group_lang", $arFields["LANG"][$i]);
         $strSql = "INSERT INTO b_sale_location_group_lang(LOCATION_GROUP_ID, " . $arInsert[0] . ") " . "VALUES(" . $ID . ", " . $arInsert[1] . ")";
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     $countFieldLoc = count($arFields["LOCATION_ID"]);
     for ($i = 0; $i < $countFieldLoc; $i++) {
         $strSql = "INSERT INTO b_sale_location2location_group(LOCATION_ID, LOCATION_GROUP_ID) " . "VALUES(" . $arFields["LOCATION_ID"][$i] . ", " . $ID . ")";
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     $events = GetModuleEvents("sale", "OnLocationGroupAdd");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     return $ID;
 }
Ejemplo n.º 5
0
 function Add($arFields)
 {
     global $DB;
     if (!CSaleLocationGroup::CheckFields("ADD", $arFields)) {
         return false;
     }
     // make IX_B_SALE_LOC_GROUP_CODE feel happy
     $arFields['CODE'] = 'randstr' . rand(999, 999999);
     $db_events = GetModuleEvents("sale", "OnBeforeLocationGroupAdd");
     while ($arEvent = $db_events->Fetch()) {
         if (ExecuteModuleEventEx($arEvent, array($arFields)) === false) {
             return false;
         }
     }
     $arInsert = $DB->PrepareInsert("b_sale_location_group", $arFields);
     $strSql = "INSERT INTO b_sale_location_group(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $ID = IntVal($DB->LastID());
     // make IX_B_SALE_LOC_CODE feel happy
     Location\GroupTable::update($ID, array('CODE' => $ID));
     $countFieldLang = count($arFields["LANG"]);
     for ($i = 0; $i < $countFieldLang; $i++) {
         $arInsert = $DB->PrepareInsert("b_sale_location_group_lang", $arFields["LANG"][$i]);
         $strSql = "INSERT INTO b_sale_location_group_lang(LOCATION_GROUP_ID, " . $arInsert[0] . ") " . "VALUES(" . $ID . ", " . $arInsert[1] . ")";
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     if (CSaleLocation::isLocationProMigrated()) {
         try {
             $entityClass = self::CONN_ENTITY_NAME . 'Table';
             $entityClass::resetMultipleForOwner($ID, array(Location\Connector::DB_LOCATION_FLAG => $entityClass::normalizeLocationList($arFields["LOCATION_ID"])));
         } catch (Exception $e) {
         }
     } else {
         $strSqlHead = "INSERT INTO b_sale_location2location_group (LOCATION_ID, LOCATION_GROUP_ID) VALUES ";
         $strSqlHeadLength = strlen($strSqlHead);
         $res = $DB->Query('SHOW VARIABLES LIKE \'max_allowed_packet\'');
         $maxPack = $res->Fetch();
         if (isset($maxPack["Value"])) {
             $max_allowed_packet = $maxPack["Value"] - $strSqlHeadLength - 100;
         } else {
             $max_allowed_packet = 0;
         }
         $tmpSql = '';
         $strSql = '';
         $countFieldLoc = count($arFields["LOCATION_ID"]);
         for ($i = 0; $i < $countFieldLoc; $i++) {
             $tmpSql = "(" . $arFields["LOCATION_ID"][$i] . ", " . $ID . ")";
             $strSqlLen = strlen($strSql);
             if ($strSqlHeadLength + $strSqlLen + strlen($tmpSql) < $max_allowed_packet || $max_allowed_packet <= 0) {
                 if ($strSqlLen > 0) {
                     $strSql .= ",";
                 }
                 $strSql .= $tmpSql;
             } else {
                 $DB->Query($strSqlHead . $strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
                 $strSql = $tmpSql;
             }
         }
         if (strlen($strSql) > 0) {
             $DB->Query($strSqlHead . $strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
     }
     $events = GetModuleEvents("sale", "OnLocationGroupAdd");
     while ($arEvent = $events->Fetch()) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     return $ID;
 }