public static function setOption($optionName, $optionValue) { $optionName = strtoupper($optionName); if (!isset(static::$arOptions[$optionName])) { $arInsert = array('NAME' => $optionName, 'VALUE' => $optionValue); $result = Tables\OptionsTable::getList(array("filter" => array("NAME" => $optionName))); if ($result) { $query = new Query('update'); $query->setUpdateParams($arInsert, $result[0]['ID'], Tables\OptionsTable::getTableName(), Tables\OptionsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { static::$arOptions[$optionName] = $optionValue; return true; } else { return false; } } else { $query = new Query('insert'); $query->setInsertParams($arInsert, Tables\OptionsTable::getTableName(), Tables\OptionsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { static::$arOptions[$optionName] = $optionValue; return true; } else { return false; } } } else { return true; } }
/** * Добавляет новый автомобиль * * @param array $arData * * @throw Exception\ArgumentNullException * @return \MSergeev\Core\Lib\DBResult */ public static function addNewCar($arData = array()) { try { if (empty($arData)) { throw new Exception\ArgumentNullException('arData'); } } catch (Exception\ArgumentNullException $e) { $e->showException(); return false; } $arMap = MyCarTable::getMapArray(); $arInsert = array(); foreach ($arMap as $field => $obMap) { if (isset($arData[$field])) { $arInsert[0][$field] = $arData[$field]; } } if (isset($arInsert[0]['DEFAULT']) && $arInsert[0]['DEFAULT']) { $res = static::uncheckDefaultAllCars(); } $query = new Query('insert'); $query->setInsertParams($arInsert, MyCarTable::getTableName(), MyCarTable::getMapArray()); $res = $query->exec(); return $res; }
public static function addNewRate($tariffID, $value = 0, $date = null) { if (is_null($date)) { $date = date('d.m.Y'); } $query = new Query('insert'); $query->setInsertParams(array('TARIFF_ID' => $tariffID, 'DATE' => $date, 'VALUE' => $value), RatesTable::getTableName(), RatesTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { self::updateData($date); return $res->getInsertId(); } else { return false; } }
/** * Функция получает с курсы валют по отношению к базовой на указанную дату или на сегодня * * @param string $baseCur Базовая валюта * @param array $arRateCur Массив валют курсов * @param string $date Дата * * @return bool */ public static function getRates($baseCur = null, $arRateCur = null, $date = null) { try { if (is_null($baseCur)) { throw new Exception\ArgumentNullException('$baseCur'); } if (is_null($arRateCur)) { throw new Exception\ArgumentNullException('$arRateCur'); } } catch (Exception\ArgumentNullException $e) { $e->showException(); return false; } if (is_null($date)) { $date = date("d.m.Y"); } $baseCur = strtoupper($baseCur); if (!is_array($arRateCur)) { $arRateCur = array(strtoupper($arRateCur)); } else { foreach ($arRateCur as &$rate) { $rate = strtoupper($rate); } } $arInsert = array(); $i = 0; if ($baseCur == "RUB") { //Если базовой валютой является рубль, загружаем данные с CBR.Ru (Сбербанк России) $date_cbr = str_replace('.', '/', $date); $path = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req=' . $date_cbr; $rates = simplexml_load_file($path); foreach ($rates->Valute as $val) { if (in_array(strval($val->CharCode), $arRateCur)) { $res = Tables\RatesTable::getList(array("filter" => array("DATE" => $date, "CURRENCY_CURRENT" => strval($val->CharCode), "CURRENCY_BASE" => $baseCur))); if (!$res) { $arInsert[$i] = array('DATE' => $date, 'CURRENCY_CURRENT' => strval($val->CharCode), 'CURRENCY_BASE' => $baseCur, 'RATE' => floatval(str_replace(",", ".", $val->Value))); $i++; } } } if (!empty($arInsert)) { $query = new Query("insert"); $query->setInsertParams($arInsert, Tables\RatesTable::getTableName(), Tables\RatesTable::getMapArray()); $res = $query->exec(); } } }
public static function addTariff($code, $counterID, $startValue = 0) { $arRes = TariffsTable::getList(array('select' => array('ID'), 'filter' => array('CODE' => $code))); if ($arRes) { //Если тариф с таким кодом уже существует, ничего не добаляем return false; } else { //Если не существует, добавляем $query = new Query('insert'); $query->setInsertParams(array('CODE' => $code, 'COUNTER_ID' => $counterID, 'START_VALUE' => $startValue), TariffsTable::getTableName(), TariffsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { return false; } } }
public static function addCounter($code, $name = '') { $arRes = CountersTable::getList(array('select' => array('ID'), 'filter' => array('CODE' => $code))); if ($arRes) { //Если счетчик с таким кодом уже есть, не добавляем ничего return false; } else { //Если счетчика с таким кодом еще нет, добавляем новый $query = new Query('insert'); $query->setInsertParams(array('CODE' => $code, 'NAME' => $name), CountersTable::getTableName(), CountersTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { return false; } } }
public static function addNewModel($brandID = null, $modelName = null) { try { if (is_null($modelName)) { throw new ArgumentNullException('model_name'); } else { $modelName = htmlspecialchars($modelName); } if (is_null($brandID)) { throw new ArgumentNullException('brandID'); } $arInsert[0] = array('BRANDS_ID' => $brandID, 'NAME' => $modelName); $query = new Query('insert'); $query->setInsertParams($arInsert, CarModelTable::getTableName(), CarModelTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } } catch (ArgumentNullException $e) { $e->showException(); } }
public static function addValueByTariffID($tariffID, $value, $arDateTime = null) { if (is_null($arDateTime)) { $day = intval(date('d')); $month = intval(date('m')); $year = intval(date('Y')); $hour = date('G'); } else { if (isset($arDateTime['DATE'])) { list($day, $month, $year) = explode('.', $arDateTime['DATE']); } else { if (isset($arDateTime['DAY'])) { $day = intval($arDateTime['DAY']); } else { $day = intval(date('d')); } if (isset($arDateTime['MONTH'])) { $month = intval($arDateTime['MONTH']); } else { $month = intval(date('m')); } if (isset($arDateTime['YEAR'])) { $year = intval($arDateTime['YEAR']); } else { $year = intval(date('Y')); } } if (isset($arDateTime['HOUR'])) { $hour = intval($arDateTime['HOUR']); } else { $hour = intval(date('G')); } } $valuesHourlyTableName = ValuesHourlyTable::getTableName(); //Получаем предыдущее показание счетчика по данному тарифу, сложив все показания за часы $sumValue = self::getCurrentValuesByTariffID($tariffID); //Получаем текущую тарифную ставку $nowRate = Rates::getLastRate($tariffID); //Получаем расход за час $newValue = $value - $sumValue - $nowRate['TARIFF_ID_START_VALUE']; if ($newValue < 0) { $newValue = 0; } //Добавляем часовые значения $arInsert = array('TARIFF_ID' => $tariffID, 'HOUR' => $hour, 'DAY' => $day, 'MONTH' => $month, 'YEAR' => $year, 'VALUE' => $newValue, 'COST' => $newValue * $nowRate['VALUE']); //Проверяем, есть ли данные значения в базе $arRes = ValuesHourlyTable::getList(array('select' => array('ID'), 'filter' => array('TARIFF_ID' => $arInsert['TARIFF_ID'], 'HOUR' => $arInsert['HOUR'], 'DAY' => $arInsert['DAY'], 'MONTH' => $arInsert['MONTH'], 'YEAR' => $arInsert['YEAR']))); if ($arRes) { //Update $query = new Query('update'); $query->setUpdateParams($arInsert, $arRes[0]['ID'], $valuesHourlyTableName, ValuesHourlyTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getAffectedRows(); } else { return false; } } else { //Insert $query = new Query('insert'); $query->setInsertParams($arInsert, $valuesHourlyTableName, ValuesHourlyTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { return false; } } }
protected static function addRepairParts($arAdd = null) { try { if (is_null($arAdd)) { throw new Exception\ArgumentNullException('arAdd'); } elseif (!is_array($arAdd)) { throw new Exception\ArgumentTypeException('arAdd', 'array'); } } catch (Exception\ArgumentNullException $e) { die($e->showException()); } catch (Exception\ArgumentTypeException $e2) { die($e2->showException()); } //msDebug($arAdd); $query = new Query('insert'); $query->setInsertParams($arAdd, Tables\RepairPartsTable::getTableName(), Tables\RepairPartsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { static::$arError['ADD'] = 'Ошибка добавления данных'; return false; } }
protected static function parseSunRiseSet($city, $arWeather) { $dateHelper = new DateHelper(); list($sunRiseDate, $sunRiseTime) = explode('T', $arWeather['sun']['@attributes']['rise']); $sunRiseDate = $dateHelper->convertDateFromDB($sunRiseDate); $sunRiseTime = explode(':', $sunRiseTime); $sunRiseTime[0] += $city['UTC_HOUR']; if ($sunRiseTime[0] > 23) { $sunRiseTime[0] -= 24; $sunRiseDate = $dateHelper->strToTime($sunRiseDate); } list($sunSetDate, $sunSetTime) = explode('T', $arWeather['sun']['@attributes']['set']); $sunSetDate = $dateHelper->convertDateFromDB($sunSetDate); $sunSetTime = explode(':', $sunSetTime); $sunSetTime[0] += $city['UTC_HOUR']; if ($sunSetTime[0] > 23) { $sunSetTime[0] -= 24; $sunSetDate = $dateHelper->strToTime($sunSetDate); } $sunRiseMin = $sunRiseTime[0] * 60 + $sunRiseTime[1]; $sunSetMin = $sunSetTime[0] * 60 + $sunSetTime[1]; if ($sunSetMin >= $sunRiseMin) { $sunDayMin = $sunSetMin - $sunRiseMin; } else { $sunDayMin = $sunSetMin + 24 * 60 - $sunRiseMin; } $sunDayHour = floor($sunDayMin / 60); $sunDayMin -= $sunDayHour * 60; $arSunRise = SunTable::getList(array('filter' => array('CITY_ID' => $city['ID'], 'DATE' => $sunRiseDate))); $arInsertUpdate = array('CITY_ID' => $city['ID'], 'DATE' => $sunRiseDate, 'SUNRISE' => $sunRiseTime[0] . ':' . $sunRiseTime[1] . ':' . $sunRiseTime[2], 'SUNSET' => $sunSetTime[0] . ':' . $sunSetTime[1] . ':' . $sunSetTime[2], 'DAYTIME' => $sunDayHour . ':' . $sunDayMin . ':00'); if ($arSunRise) { //Update $query = new Query('update'); $query->setUpdateParams($arInsertUpdate, $arSunRise[0]['ID'], SunTable::getTableName(), SunTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { return false; } } else { //Insert $query = new Query('insert'); $query->setInsertParams($arInsertUpdate, SunTable::getTableName(), SunTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getAffectedRows(); } else { return false; } } }
/** * Добавляет данные о заправки в БД * * @param array $arData * * @return bool|int */ protected static function addFuel($arData = null) { try { if (is_null($arData)) { throw new Exception\ArgumentNullException('arData'); } elseif (!is_array($arData)) { throw new Exception\ArgumentTypeException('arData', 'array'); } } catch (Exception\ArgumentNullException $e) { die($e->showException()); } catch (Exception\ArgumentTypeException $e2) { die($e2->showException()); } $query = new Query('insert'); $query->setInsertParams($arData, Tables\FuelTable::getTableName(), Tables\FuelTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { Points::increasePointPopular($arData['POINTS_ID']); static::recalculateExpence($arData); return $res->getInsertId(); } else { return false; } }
public static function insertDefaultRows() { $arDefaultValues = static::getArrayDefaultValues(); if (count($arDefaultValues) > 0) { $query = new Entity\Query("insert"); $query->setInsertParams($arDefaultValues, static::getTableName(), static::getMapArray()); $res = $query->exec(); return $res; } else { return false; } }
/** * Добавляет новое событие в DB * * @param array $arPost * * @return bool|int */ protected static function addEventFromPostToDB($arPost = null) { try { if (is_null($arPost)) { throw new Exception\ArgumentNullException('$arPost'); } elseif (!is_array($arPost)) { throw new Exception\ArgumentTypeException('$arPost', 'array'); } } catch (Exception\ArgumentNullException $e1) { $e1->showException(); return false; } catch (Exception\ArgumentTypeException $e2) { $e2->showException(); } $query = new Query('insert'); $query->setInsertParams($arPost, Tables\EventsTable::getTableName(), Tables\EventsTable::getMapArray()); $res = $query->exec(); if ($res->getInsertId() > 0) { return $res->getInsertId(); } else { return false; } }
protected static function addAccount($arData) { msDebug($arData); $arAccount = $arData['ACCOUNT']; $query = new Entity\Query('insert'); $query->setInsertParams($arAccount, Tables\AccountsTable::getTableName(), Tables\AccountsTable::getMapArray()); $res = $query->exec(); $accountID = $res->getInsertId(); if ($accountID) { if ($arAccount['ACCOUNT_TYPE_ID'] == static::$a_debet_card || $arAccount['ACCOUNT_TYPE_ID'] == static::$a_deposit || $arAccount['ACCOUNT_TYPE_ID'] == static::$a_bank || $arAccount['ACCOUNT_TYPE_ID'] == static::$a_credit_card || $arAccount['ACCOUNT_TYPE_ID'] == static::$a_credit) { $arBank = $arData['BANK']; $arBank['ACCOUNT_ID'] = $accountID; $query = new Entity\Query('insert'); $query->setInsertParams($arBank, Tables\AccountBankTable::getTableName(), Tables\AccountBankTable::getMapArray()); $res = $query->exec(); $bankID = $res->getInsertId(); if (!$bankID) { static::deleteAccount($accountID, true); return false; } } elseif ($arAccount['ACCOUNT_TYPE_ID'] == static::$a_emoney) { $arEMoney = $arData['EMONEY']; $arEMoney['ACCOUNT_ID'] = $accountID; $query = new Entity\Query('insert'); $query->setInsertParams($arEMoney, Tables\AccountEmoneyTable::getTableName(), Tables\AccountEmoneyTable::getMapArray()); $res = $query->exec(); $emoneyID = $res->getInsertId(); if (!$emoneyID) { static::deleteAccount($accountID, true); return false; } } elseif ($arAccount['ACCOUNT_TYPE_ID'] == static::$a_mne || $arAccount['ACCOUNT_TYPE_ID'] == static::$a_i) { $arDebts = $arData['DEBT']; $arDebts['ACCOUNT_ID'] = $accountID; $query = new Entity\Query('insert'); $query->setInsertParams($arDebts, Tables\AccountDebtsTable::getTableName(), Tables\AccountDebtsTable::getMapArray()); $res = $query->exec(); $debtsID = $res->getInsertId(); if (!$debtsID) { static::deleteAccount($accountID, true); return false; } } elseif ($arAccount['ACCOUNT_TYPE_ID'] == static::$a_estate) { $arEstate = $arData['ESTATE']; $arEstate['ACCOUNT_ID'] = $accountID; $query = new Entity\Query('insert'); $query->setInsertParams($arEstate, Tables\AccountRealEstateTable::getTableName(), Tables\AccountRealEstateTable::getMapArray()); $res = $query->exec(); $estateID = $res->getInsertId(); if (!$estateID) { static::deleteAccount($accountID, true); return false; } } elseif ($arAccount['ACCOUNT_TYPE_ID'] == static::$a_car) { $arCar = $arData['CAR']; $arCar['ACCOUNT_ID'] = $accountID; $query = new Entity\Query('insert'); $query->setInsertParams($arCar, Tables\AccountCarTable::getTableName(), Tables\AccountCarTable::getMapArray()); $res = $query->exec(); $carID = $res->getInsertId(); if (!$carID) { static::deleteAccount($accountID, true); return false; } } return true; } else { return false; } }
/** * Функция высчитывает данные о пройденном расстоянии от выбранной даты или за все время * * @param int $carID * @param string $date */ protected static function updateDayOdometer($carID = null, $date = null) { $dateHelper = new DateHelper(); $arResult = array(); if (is_null($carID)) { $carID = MyCar::getDefaultCarID(); } if (is_null($date)) { //TODO: Проверить работу кода $arRes = Tables\RoutsTable::getList(array('select' => array('ID', 'DATE', 'ODO'), 'filter' => array('MY_CAR_ID' => $carID, '>ODO' => 0), 'order' => array('DATE' => 'ASC', 'ID' => 'ASC'))); $arResult['BUY_ODO'] = MyCar::getBuyCarOdo($carID); $arResult['MAX_DATE_ODO'] = array(); $bFirst = true; foreach ($arRes as $ar_res) { if ($bFirst) { $bFirst = false; $arResult['FIRST_DAY'] = $ar_res['DATE']; } $arResult['ROUTS'][$ar_res['ID']]['DATE'] = $ar_res['DATE']; $arResult['ROUTS'][$ar_res['ID']]['ODO'] = $ar_res['ODO']; if (!isset($arResult['MAX_DATE_ODO'][$ar_res['DATE']]) || $ar_res['ODO'] > $arResult['MAX_DATE_ODO'][$ar_res['DATE']]) { $arResult['MAX_DATE_ODO'][$ar_res['DATE']] = $ar_res['ODO']; } } $arResult['LAST_DAY'] = date('d.m.Y'); $lastOdo = $arResult['BUY_ODO']; $arResult['DAY_ODO'] = array(); foreach ($arResult['MAX_DATE_ODO'] as $day => $odo) { $arResult['DAY_ODO'][$day] = round($odo - $lastOdo, 1); $lastOdo = $odo; } $arResult['ODO_ALL_DAYS'] = array(); $now_day = $arResult['FIRST_DAY']; while ($now_day !== $arResult['LAST_DAY']) { if (isset($arResult['DAY_ODO'][$now_day])) { $arResult['ODO_ALL_DAYS'][$now_day] = $arResult['DAY_ODO'][$now_day]; } else { $arResult['ODO_ALL_DAYS'][$now_day] = 0; } $now_day = $dateHelper->strToTime($now_day, '+1 day', 'site'); } } else { $arResult['FIRST_DAY'] = $date; $arResult['LAST_DAY'] = date('d.m.Y'); $arResult['BUY_ODO'] = MyCar::getBuyCarOdo($carID); //TODO: Проверить работу кода $arRes = Tables\RoutsTable::getList(array('select' => array('ID', 'DATE', 'ODO'), 'filter' => array('MY_CAR_ID' => $carID, '>=DATE' => $date, '>ODO' => 0), 'order' => array('DATE' => 'ASC', 'ID' => 'ASC'))); $arResult['MAX_DATE_ODO'] = array(); foreach ($arRes as $ar_res) { $arResult['ROUTS'][$ar_res['ID']]['DATE'] = $ar_res['DATE']; $arResult['ROUTS'][$ar_res['ID']]['ODO'] = $ar_res['ODO']; if (!isset($arResult['MAX_DATE_ODO'][$ar_res['DATE']]) || $ar_res['ODO'] > $arResult['MAX_DATE_ODO'][$ar_res['DATE']]) { $arResult['MAX_DATE_ODO'][$ar_res['DATE']] = $ar_res['ODO']; } } //TODO: Проверить работу кода $arRes2 = Tables\RoutsTable::getList(array('select' => array('ID', 'DATE', 'ODO'), 'filter' => array('MY_CAR_ID' => $carID, '<DATE' => $date, '>ODO' => 0), 'order' => array('DATE' => 'DESC', 'ID' => 'DESC'))); if ($arRes2) { $lastOdo = $arRes2[0]['ODO']; $arResult['LAST_RES'] = $arRes2[0]; } else { $lastOdo = $arResult['BUY_ODO']; } $arResult['LAST_ODO'] = $lastOdo; $arResult['DAY_ODO'] = array(); foreach ($arResult['MAX_DATE_ODO'] as $day => $odo) { $arResult['DAY_ODO'][$day] = round($odo - $lastOdo, 1); $lastOdo = $odo; } $arResult['ODO_ALL_DAYS'] = array(); $now_day = $arResult['FIRST_DAY']; while ($now_day !== $arResult['LAST_DAY']) { if (isset($arResult['DAY_ODO'][$now_day])) { $arResult['ODO_ALL_DAYS'][$now_day] = $arResult['DAY_ODO'][$now_day]; } else { $arResult['ODO_ALL_DAYS'][$now_day] = 0; } $now_day = $dateHelper->strToTime($now_day, '+1 day', 'site'); } } //TODO: Проверить работу кода $arRes2 = Tables\OdoTable::getList(array('select' => array('ID', 'DATE', 'ODO'), 'filter' => array('MY_CAR_ID' => $carID, '>=DATE' => $arResult['FIRST_DAY']), 'order' => array('DATE' => 'ASC'))); $arResult['ODO_TABLE'] = array(); foreach ($arRes2 as $ar_res) { $arResult['ODO_TABLE'][$ar_res['DATE']] = array('ID' => $ar_res['ID'], 'ODO' => $ar_res['ODO']); } $arResult['UPDATED'] = $arResult['INSERTED'] = array(); foreach ($arResult['ODO_ALL_DAYS'] as $day => $odo) { if (isset($arResult['ODO_TABLE'][$day])) { if ($odo != $arResult['ODO_TABLE'][$day]['ODO']) { $query = new Query('update'); $query->setUpdateParams(array('ODO' => $odo), $arResult['ODO_TABLE'][$day]['ID'], Tables\OdoTable::getTableName(), Tables\OdoTable::getMapArray()); $res = $query->exec(); $arResult['UPDATED'][$day] = $res->getResult(); } } else { $query = new Query('insert'); $arInsert[0] = array('MY_CAR_ID' => $carID, 'DATE' => $day, 'ODO' => $odo); $query->setInsertParams($arInsert, Tables\OdoTable::getTableName(), Tables\OdoTable::getMapArray()); $res = $query->exec(); $arResult['INSERTED'][$day] = $res->getInsertId(); } } }
public static function addSection($arSection) { /* Создание узла – самое простое действие над деревом. Для того, что бы его осуществить нам потребуется уровень и правый ключ родительского узла (узел в который добавляется новый), либо максимальный правый ключ, если у нового узла не будет родительского.*/ $helper = new SqlHelper(); $className = static::getClassName(); if (!($arSection = self::checkFields($arSection))) { return false; } /* Пусть $right_key – правый ключ родительского узла, или максимальный правый ключ плюс единица (если родительского узла нет, то узел с максимальным правым ключом не будет обновляться, соответственно, чтобы небыло повторов, берем число на единицу большее). $level – уровень родительского узла, либо 0, если родительского нет.*/ if ($arSection['PARENT_SECTION_ID'] == 0) { $query = new Query('select'); $sql = "SELECT\n\tMAX(" . $helper->wrapQuotes('RIGHT_MARGIN') . ") as RIGHT_MARGIN\nFROM\n\t" . $helper->wrapQuotes(static::getTableName()); $query->setQueryBuildParts($sql); $res = $query->exec(); if ($ar_res = $res->fetch()) { $right_key = $ar_res['RIGHT_MARGIN'] + 1; $level = 0; } } else { $arParent = static::getInfo($arSection['PARENT_SECTION_ID']); $right_key = $arParent['RIGHT_MARGIN']; $level = $arParent['DEPTH_LEVEL']; //1. Обновляем ключи существующего дерева, узлы стоящие за родительским узлом: $query = new Query('update'); $sql = "UPDATE\n\t" . $helper->wrapQuotes(static::getTableName()) . "\nSET\n\t" . $helper->wrapQuotes('LEFT_MARGIN') . " = " . $helper->wrapQuotes('LEFT_MARGIN') . " + 2,\n\t" . $helper->wrapQuotes('RIGHT_MARGIN') . " = " . $helper->wrapQuotes('RIGHT_MARGIN') . " + 2\nWHERE\n\t" . $helper->wrapQuotes('LEFT_MARGIN') . " > " . $right_key; $query->setQueryBuildParts($sql); $res = $query->exec(); /* Но мы обновили только те узлы в которых изменяются оба ключа, при этом родительскую ветку (не узел, а все родительские узлы) мы не трогали, так как в них изменяется только правый ключ. Следует иметь в виду, что если у нас не будет родительского узла, то есть новый узел будет корневым, то данное обновление проводить нельзя.*/ } //2. Обновляем родительскую ветку: $query = new Query('update'); $sql = "UPDATE\n\t" . $helper->wrapQuotes(static::getTableName()) . "\nSET\n\t" . $helper->wrapQuotes('RIGHT_MARGIN') . " = " . $helper->wrapQuotes('RIGHT_MARGIN') . " + 2\nWHERE\n\t" . $helper->wrapQuotes('RIGHT_MARGIN') . " >= " . $right_key . "\n\tAND\n\t" . $helper->wrapQuotes('LEFT_MARGIN') . " < " . $right_key; $query->setQueryBuildParts($sql); $res = $query->exec(); //3. Теперь добавляем новый узел : $query = new Query('insert'); $arSection['LEFT_MARGIN'] = $right_key; $arSection['RIGHT_MARGIN'] = $right_key + 1; $arSection['DEPTH_LEVEL'] = $level + 1; if (isset($arSection['ID'])) { unset($arSection['ID']); } $query->setInsertParams($arSection, static::getTableName(), $className::getMapArray()); $res = $query->exec(); $insertID = $res->getInsertId(); $arSection['ID'] = $insertID; static::sortAddingSection($arSection); if ($insertID > 0) { return $insertID; } else { return false; } }
public static function createNewPoint($arPoint = array()) { if (!isset($arPoint['NAME'])) { $arPoint['NAME'] = 'ПТ'; $arPoint['AUTO'] = true; } else { $arPoint['AUTO'] = false; } if (!isset($arPoint['TYPE'])) { $arPoint['TYPE'] = static::getDefaultPointTypeID(); } if (!isset($arPoint['LON']) || strlen($arPoint['LON']) < 2 || (!isset($arPoint['LAT']) || strlen($arPoint['LAT']) < 2)) { if (isset($arPoint['ADDRESS']) && strlen($arPoint['ADDRESS']) > 3) { if ($arCoords = static::getCoordsByAddressYandex($arPoint['ADDRESS'])) { $arPoint['LON'] = $arCoords['lon']; $arPoint['LAT'] = $arCoords['lat']; } else { //TODO:Вывод ошибки о том, что данные не добавлены, так как нет ответа яндекс return false; } } } if ($arPoint['AUTO']) { $arPoint['NAME'] .= ' (' . $arPoint['LON'] . ', ' . $arPoint['LAT'] . ')'; } $arAdd[] = array('NAME' => $arPoint['NAME'], 'POINT_TYPES_ID' => $arPoint['TYPE'], 'ADDRESS' => $arPoint['ADDRESS'], 'LATITUDE' => $arPoint['LAT'], 'LONGITUDE' => $arPoint['LON']); $query = new Query('insert'); $query->setInsertParams($arAdd, Tables\PointsTable::getTableName(), Tables\PointsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { return false; } }