Пример #1
0
 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;
     }
 }
Пример #2
0
 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;
     }
 }
Пример #3
0
 /**
  * Функция получает с курсы валют по отношению к базовой на указанную дату или на сегодня
  *
  * @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();
         }
     }
 }
Пример #4
0
 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;
         }
     }
 }
Пример #5
0
 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;
         }
     }
 }
Пример #6
0
 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();
     }
 }
Пример #7
0
 public static function deleteTs($tsID = null)
 {
     try {
         if (is_null($tsID)) {
             throw new Exception\ArgumentNullException('tsID');
         }
     } catch (Exception\ArgumentNullException $e) {
         $e->showException();
         return false;
     }
     $query = new Query('delete');
     $query->setDeleteParams($tsID, null, Tables\TsTable::getTableName(), Tables\TsTable::getMapArray(), Tables\TsTable::getTableLinks());
     $res = $query->exec();
     if ($res->getResult()) {
         return true;
     } else {
         return false;
     }
 }
Пример #8
0
 /**
  * Добавляет новое событие в 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;
     }
 }
Пример #9
0
 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;
     }
 }
Пример #10
0
 private static function getValues($tariffID, $date = null, $type = 'hourly')
 {
     if (is_null($date)) {
         $arDate = explode('.', date('d.m.Y'));
     } else {
         if ($date = DateHelper::validateDate($date)) {
             $arDate = explode('.', $date);
         } else {
             $arDate = explode('.', date('d.m.Y'));
         }
     }
     $query = new Query('select');
     $sqlHelper = new SqlHelper();
     $valuesHourlyTableName = ValuesHourlyTable::getTableName();
     $sql = "SELECT " . $sqlHelper->getSumFunction("VALUE") . " , " . $sqlHelper->getSumFunction("COST");
     if ($type == 'hourly') {
         $sql .= " , " . $sqlHelper->wrapQuotes("HOUR");
     }
     if ($type == 'hourly' || $type == 'daily') {
         $sql .= " , " . $sqlHelper->wrapQuotes("DAY");
     }
     if ($type == 'hourly' || $type == 'daily' || $type == 'monthly') {
         $sql .= " , " . $sqlHelper->wrapQuotes("MONTH");
     }
     $sql .= " , " . $sqlHelper->wrapQuotes("YEAR");
     $sql .= " FROM " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . " WHERE " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . "." . $sqlHelper->wrapQuotes("TARIFF_ID") . " =" . intval($tariffID);
     if ($type == 'hourly') {
         $sql .= " AND " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . "." . $sqlHelper->wrapQuotes("DAY") . " =" . intval($arDate[0]);
     }
     if ($type == 'hourly' || $type == 'daily') {
         $sql .= " AND " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . "." . $sqlHelper->wrapQuotes("MONTH") . " =" . intval($arDate[1]);
     }
     if ($type == 'hourly' || $type == 'daily' || $type == 'monthly') {
         $sql .= " AND " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . "." . $sqlHelper->wrapQuotes("YEAR") . " =" . intval($arDate[2]);
     }
     if ($type == 'hourly') {
         $sql .= " GROUP BY " . $sqlHelper->wrapQuotes("HOUR") . " ";
     } elseif ($type == 'daily') {
         $sql .= " GROUP BY " . $sqlHelper->wrapQuotes("DAY") . " ";
     } elseif ($type == 'monthly') {
         $sql .= " GROUP BY " . $sqlHelper->wrapQuotes("MONTH") . " ";
     } elseif ($type == 'yearly') {
         $sql .= " GROUP BY " . $sqlHelper->wrapQuotes("YEAR") . " ";
     }
     $query->setQueryBuildParts($sql);
     $res = $query->exec();
     if ($res->getResult()) {
         $arResult = array();
         $i = 0;
         while ($ar_res = $res->fetch()) {
             $arResult[$i] = array('SUM_VALUE' => round($ar_res['SUM_VALUE'], 2), 'SUM_COST' => round($ar_res['SUM_COST'], 2), 'YEAR' => intval($ar_res['YEAR']));
             if (isset($ar_res['HOUR'])) {
                 $arResult[$i]['HOUR'] = intval($ar_res['HOUR']);
             }
             if (isset($ar_res['DAY'])) {
                 $arResult[$i]['DAY'] = intval($ar_res['DAY']);
             }
             if (isset($ar_res['MONTH'])) {
                 $arResult[$i]['MONTH'] = intval($ar_res['MONTH']);
             }
             $i++;
         }
         return $arResult;
     } else {
         return false;
     }
 }
Пример #11
0
 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;
         }
     }
 }
Пример #12
0
 /**
  * Возвращает массив данных обо всех автомобилях
  *
  * @param bool $bActive
  *
  * @return array
  */
 public static function getListCar($bActive = true)
 {
     $helper = new SqlHelper();
     $sql = "SELECT\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('ID') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('ACTIVE') . " AS " . $helper->wrapQuotes('ACTIVE') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('SORT') . " AS " . $helper->wrapQuotes('SORT') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('NAME') . ",\n\t";
     $sql .= $helper->wrapQuotes('brand') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('BRAND_ID') . ",\n\t";
     $sql .= $helper->wrapQuotes('brand') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('BRAND_NAME') . ",\n\t";
     $sql .= $helper->wrapQuotes('brand') . "." . $helper->wrapQuotes('CODE') . " AS " . $helper->wrapQuotes('BRAND_CODE') . ",\n\t";
     $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('MODEL_ID') . ",\n\t";
     $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('MODEL_NAME') . ",\n\t";
     $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('BRANDS_ID') . " AS " . $helper->wrapQuotes('MODEL_BRANDS_ID') . ",\n\t";
     $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('CODE') . " AS " . $helper->wrapQuotes('MODEL_CODE') . ",\n\t";
     $sql .= $helper->wrapQuotes('gear') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('GEARBOX_ID') . ",\n\t";
     $sql .= $helper->wrapQuotes('gear') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('GEARBOX_NAME') . ",\n\t";
     $sql .= $helper->wrapQuotes('gear') . "." . $helper->wrapQuotes('CODE') . " AS " . $helper->wrapQuotes('GEARBOX_CODE') . ",\n\t";
     $sql .= $helper->wrapQuotes('body') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('BODY_ID') . ",\n\t";
     $sql .= $helper->wrapQuotes('body') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('BODY_NAME') . ",\n\t";
     $sql .= $helper->wrapQuotes('body') . "." . $helper->wrapQuotes('CODE') . " AS " . $helper->wrapQuotes('BODY_CODE') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('YEAR') . " AS " . $helper->wrapQuotes('YEAR') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('VIN') . " AS " . $helper->wrapQuotes('VIN') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_NUMBER') . " AS " . $helper->wrapQuotes('CAR_NUMBER') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('ENGINE_CAPACITY') . " AS " . $helper->wrapQuotes('ENGINE_CAPACITY') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('INTERVAL_TS') . " AS " . $helper->wrapQuotes('INTERVAL_TS') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('COST') . " AS " . $helper->wrapQuotes('COST') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('MILEAGE') . " AS " . $helper->wrapQuotes('MILEAGE') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CREDIT') . " AS " . $helper->wrapQuotes('CREDIT') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CREDIT_COST') . " AS " . $helper->wrapQuotes('CREDIT_COST') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('DATE_OSAGO_END') . " AS " . $helper->wrapQuotes('DATE_OSAGO_END') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('DATE_GTO_END') . " AS " . $helper->wrapQuotes('DATE_GTO_END') . ",\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('DEFAULT') . " AS " . $helper->wrapQuotes('DEFAULT') . "\n";
     $sql .= "FROM\n\t";
     $sql .= $helper->wrapQuotes('ms_icar_my_car') . " AS " . $helper->wrapQuotes('car') . " ,\n\t";
     $sql .= $helper->wrapQuotes('ms_icar_car_brand') . " AS " . $helper->wrapQuotes('brand') . " ,\n\t";
     $sql .= $helper->wrapQuotes('ms_icar_car_model') . " AS " . $helper->wrapQuotes('model') . " ,\n\t";
     $sql .= $helper->wrapQuotes('ms_icar_car_gearbox') . " AS " . $helper->wrapQuotes('gear') . " ,\n\t";
     $sql .= $helper->wrapQuotes('ms_icar_car_body') . " AS " . $helper->wrapQuotes('body') . "\n";
     $sql .= "WHERE\n\t";
     if ($bActive) {
         $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('ACTIVE') . " = 'Y' AND\n\t";
     }
     $sql .= $helper->wrapQuotes('brand') . "." . $helper->wrapQuotes('ID') . " = " . $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_BRANDS_ID') . " AND\n\t";
     $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('ID') . " = " . $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_MODEL_ID') . " AND\n\t";
     $sql .= $helper->wrapQuotes('gear') . "." . $helper->wrapQuotes('ID') . " = " . $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_GEARBOX_ID') . " AND\n\t";
     $sql .= $helper->wrapQuotes('body') . "." . $helper->wrapQuotes('ID') . " = " . $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_BODY_ID') . "\n";
     $sql .= "ORDER BY\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('SORT') . " ASC,\n\t";
     $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('NAME') . " ASC";
     $query = new Query('select');
     $query->setQueryBuildParts($sql);
     $res = $query->exec();
     $arResult = array();
     $i = 0;
     while ($ar_res = $res->fetch()) {
         foreach ($ar_res as $key => $value) {
             if (!is_numeric($key)) {
                 $arResult[$i][$key] = $value;
             }
         }
         $i++;
     }
     $arResult = static::fetchCarData($arResult);
     return $arResult;
 }
Пример #13
0
 public static function checkTable()
 {
     /* ОСНОВНЫЕ ПРАВИЛА ХРАНЕНИЯ ДЕРЕВА КАТАЛОГОВ
      *
      * 1. Левый ключ ВСЕГДА меньше правого;
      * 2. Наименьший левый ключ ВСЕГДА равен 1;
      * 3. Наибольший правый ключ ВСЕГДА равен двойному числу узлов;
      * 4. Разница между правым и левым ключом ВСЕГДА нечетное число;
      * 5. Если уровень узла нечетное число то тогда левый ключ ВСЕГДА нечетное число, то же самое и для четных чисел;
      * 6. Ключи ВСЕГДА уникальны, вне зависимости от того правый он или левый;
      */
     $bError = false;
     //$className = static::getClassName();
     //TODO: Невозможно сравнивать с полем. Нужно доделать, чтобы можно было. См. коммент ниже
     /*
     $res1 = $className::getList(array(
     	'select' => array('ID'),
     	'filter' => array('LEFT_MARGIN'=>'RIGHT_MARGIN')
     ));
     */
     $helper = new SqlHelper();
     //1. Левый ключ ВСЕГДА меньше правого;
     //Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк;
     $sql1 = "SELECT " . $helper->wrapQuotes('ID') . " FROM " . $helper->wrapQuotes(static::getTableName()) . " WHERE " . $helper->wrapQuotes('LEFT_MARGIN') . " >= " . $helper->wrapQuotes('RIGHT_MARGIN');
     $query1 = new Query('select');
     $query1->setQueryBuildParts($sql1);
     $res1 = $query1->exec();
     if ($res1->getResult()) {
         while ($ar_res1 = $res1->fetch()) {
             $arResult['RULE1'][] = $ar_res1;
         }
         $bError = true;
     }
     //2. Наименьший левый ключ ВСЕГДА равен 1;
     //3. Наибольший правый ключ ВСЕГДА равен двойному числу узлов;
     //Получаем количество записей (узлов), минимальный левый ключ и максимальный правый ключ, проверяем значения.
     $sql2 = "SELECT COUNT(" . $helper->wrapQuotes('ID') . ") as COUNT, MIN(" . $helper->wrapQuotes('LEFT_MARGIN') . ") as MIN, MAX(" . $helper->wrapQuotes('RIGHT_MARGIN') . ") as MAX FROM " . $helper->wrapQuotes(static::getTableName());
     $query2 = new Query('select');
     $query2->setQueryBuildParts($sql2);
     $res2 = $query2->exec();
     if ($ar_res2 = $res2->fetch()) {
         if ($ar_res2['MIN'] != 1) {
             $bError = true;
             $arResult['RULE2']['MIN'] = $ar_res2['MIN'];
         }
         $double = $ar_res2['COUNT'] * 2;
         if ($ar_res2['MAX'] != $double) {
             $bError = true;
             $arResult['RULE3']['COUNT'] = $ar_res2['COUNT'];
             $arResult['RULE3']['DOUBLE'] = $double;
             $arResult['RULE3']['MAX'] = $ar_res2['MAX'];
         }
     } else {
         $bError = true;
         $arResult['RULE2'] = false;
         $arResult['RULE3'] = false;
     }
     //4. Разница между правым и левым ключом ВСЕГДА нечетное число;
     //Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк;
     $sql4 = "SELECT " . $helper->wrapQuotes('ID') . ", MOD((" . $helper->wrapQuotes('RIGHT_MARGIN') . " - " . $helper->wrapQuotes('LEFT_MARGIN') . ") / 2) AS REMAINDER FROM " . $helper->wrapQuotes(static::getTableName()) . " WHERE REMAINDER = 0";
     $query4 = new Query('select');
     $query4->setQueryBuildParts($sql4);
     $res4 = $query4->exec();
     if ($res4->getResult()) {
         $bError = true;
         while ($ar_res4 = $res4->fetch()) {
             $arResult['RULE4'][] = $ar_res4;
         }
     }
     //5. Если уровень узла нечетное число то тогда левый ключ ВСЕГДА нечетное число, то же самое и для четных чисел;
     //Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк;
     $sql5 = "SELECT " . $helper->wrapQuotes('ID') . ", MOD((" . $helper->wrapQuotes('LEFT_MARGIN') . " – " . $helper->wrapQuotes('DEPTH_LEVEL') . " + 2) / 2) AS REMAINDER FROM " . $helper->wrapQuotes(static::getTableName()) . " WHERE REMAINDER = 1";
     $query5 = new Query('select');
     $query5->setQueryBuildParts($sql5);
     $res5 = $query5->exec();
     if ($res5->getResult()) {
         $bError = true;
         while ($ar_res5 = $res5->fetch()) {
             $arResult['RULE5'][] = $ar_res5;
         }
     }
     //6. Ключи ВСЕГДА уникальны, вне зависимости от того правый он или левый;
     /*
     			Здесь, я думаю, потребуется некоторое пояснение запроса. Выборка по сути осуществляется из одной таблицы,
     			но в разделе FROM эта таблица "виртуально" продублирована 3 раза: из первой мы выбираем все записи по
     			порядку и начинаем сравнивать с записями второй таблицы (раздел WHERE) в результате мы получаем все записи
     			неповторяющихся значений. Для того, что бы определить сколько раз запись не повторялась в таблице,
     			производим группировку (раздел GROUP BY) и получаем число "не повторов" (COUNT(t1.id)). По условию,
     			если все ключи уникальны, то число не повторов будет меньше на одну единицу чем общее количество записей.
     			Для того, чтобы определить количество записей в таблице, берем максимальный правый ключ (MAX(t3.right_key)),
     			так как его значение - двойное число записей, но так как в условии отбора для записи с максимальным правым
     			ключом - максимальный правый ключ будет другим, вводится третья таблица, при этом число "неповторов"
     			увеличивается умножением его на количество записей. SQRT(4*rep +1) - решение уравнения x^2 + x = rep.
     			Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов
     			неправильных строк;
     */
     $sql6 = "SELECT t1." . $helper->wrapQuotes('ID') . ", COUNT(t1." . $helper->wrapQuotes('ID') . ") AS rep, MAX(t3." . $helper->wrapQuotes('RIGHT_MARGIN') . ") AS max_right FROM " . $helper->wrapQuotes(static::getTableName()) . " AS t1, " . $helper->wrapQuotes(static::getTableName()) . " AS t2, " . $helper->wrapQuotes(static::getTableName()) . " AS t3 WHERE t1." . $helper->wrapQuotes('LEFT_MARGIN') . " <> t2." . $helper->wrapQuotes('LEFT_MARGIN') . " AND t1." . $helper->wrapQuotes('LEFT_MARGIN') . " <> t2." . $helper->wrapQuotes('RIGHT_MARGIN') . " AND t1." . $helper->wrapQuotes('RIGHT_MARGIN') . " <> t2." . $helper->wrapQuotes('LEFT_MARGIN') . " AND t1." . $helper->wrapQuotes('RIGHT_MARGIN') . " <> t2." . $helper->wrapQuotes('RIGHT_MARGIN') . " GROUP BY t1." . $helper->wrapQuotes('ID') . " HAVING max_right <> SQRT(4 * rep + 1) + 1";
     $query6 = new Query('select');
     $query6->setQueryBuildParts($sql6);
     $res6 = $query6->exec();
     if ($res6->getResult()) {
         $bError = true;
         while ($ar_res6 = $res6->fetch()) {
             $arResult['RULE6'][] = $ar_res6;
         }
     }
     if ($bError) {
         return $arResult;
     } else {
         return false;
     }
 }
Пример #14
0
 /**
  * Обновляет значение расхода для указанной записи
  *
  * @param int   $primary
  * @param array $arUpdate
  *
  * @return bool
  */
 protected static function updateExpence($primary = null, $arUpdate = null)
 {
     try {
         if (is_null($primary)) {
             throw new Exception\ArgumentNullException('primary');
         }
         if (is_null($arUpdate)) {
             throw new Exception\ArgumentNullException('arUpdate');
         } elseif (!is_array($arUpdate)) {
             throw new Exception\ArgumentTypeException('arUpdate', 'array');
         }
     } catch (Exception\ArgumentNullException $e) {
         $e->showException();
         return false;
     } catch (Exception\ArgumentTypeException $e2) {
         $e2->showException();
         return false;
     }
     $query = new Query('update');
     $query->setUpdateParams($arUpdate, $primary, Tables\FuelTable::getTableName(), Tables\FuelTable::getMapArray());
     $res = $query->exec();
     if ($res->getResult()) {
         return true;
     } else {
         return false;
     }
 }
Пример #15
0
 /**
  * Функция высчитывает данные о пройденном расстоянии от выбранной даты или за все время
  *
  * @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();
         }
     }
 }
Пример #16
0
 private function sqlMassDelete($query = null)
 {
     try {
         if (is_null($query)) {
             throw new Exception\ArgumentNullException('query');
         }
     } catch (Exception\ArgumentNullException $e) {
         $e->showException();
         return false;
     }
     $helper = new Lib\SqlHelper();
     $arMap = $query->getTableMap();
     $primaryId = $query->getDeletePrimary();
     $arTableLinks = $query->getTableLinks();
     $tableName = $query->getTableName();
     foreach ($arTableLinks as $field => $arLinked) {
         foreach ($arLinked as $linkTable => $linkField) {
             if (is_array($linkField)) {
                 foreach ($linkField as $linkF) {
                     $arRes = Lib\Tools::runTableClassFunction($linkTable, 'getListFunc', array(array('select' => array('ID'), 'filter' => array($linkF => $primaryId))));
                     if ($arRes) {
                         foreach ($arRes as $delID) {
                             $deleteQuery = new Query('delete');
                             $deleteQuery->setDeleteParams($delID, true, null, Lib\Tools::runTableClassFunction($linkTable, 'getTableMap'), Lib\Tools::runTableClassFunction($linkTable, 'getTableLinks'));
                             $deleteQuery->exec();
                         }
                     }
                 }
             } else {
                 $arRes = Lib\Tools::runTableClassFunction($linkTable, 'getListFunc', array(array('select' => array('ID'), 'filter' => array($linkField => $primaryId))));
                 if ($arRes) {
                     foreach ($arRes as $delID) {
                         $deleteQuery = new Query('delete');
                         $deleteQuery->setDeleteParams($delID, true, Lib\Tools::runTableClassFunction($linkTable, 'getTableName'), Lib\Tools::runTableClassFunction($linkTable, 'getTableMap'), Lib\Tools::runTableClassFunction($linkTable, 'getTableLinks'));
                         $deleteQuery->exec();
                     }
                 }
             }
         }
     }
     foreach ($arMap as $field => $objData) {
         if ($objData->isPrimary()) {
             $primaryField = $objData->getColumnName();
             $primaryObj = $objData;
             break;
         }
     }
     $sql = "DELETE FROM " . $helper->wrapQuotes($tableName);
     $sql .= " WHERE " . $helper->wrapQuotes($tableName) . ".";
     $sql .= $helper->wrapQuotes($primaryField) . " = ";
     if ($primaryObj instanceof IntegerField || $primaryObj instanceof FloatField) {
         $sql .= $primaryId;
     } else {
         $sql .= "'" . $primaryId . "'";
     }
     $sql .= " LIMIT 1";
     $delQuery = new Query('delete');
     $delQuery->setQueryBuildParts($sql);
     $res = $delQuery->exec();
 }
Пример #17
0
 protected static function deleteAccount($primary, $confirm = null)
 {
     $query = new Entity\Query('delete');
     $query->setDeleteParams($primary, $confirm, Tables\AccountsTable::getTableName(), Tables\AccountsTable::getMapArray(), Tables\AccountsTable::getTableLinks());
     $res = $query->exec();
 }
Пример #18
0
 public static function checkTableLinks()
 {
     $bLinks = false;
     $helper = new SqlHelper();
     $arLinks = static::getTableLinks();
     $tableName = static::getTableName();
     foreach ($arLinks as $field => $arLink) {
         $sql = "SELECT\n\t" . 't.' . $helper->wrapQuotes($field) . "\n";
         $sql .= "FROM\n\t" . $helper->wrapQuotes($tableName) . " t";
         $where = "WHERE\n\t";
         $t = 0;
         $bFirst = true;
         foreach ($arLink as $tableName => $fieldName) {
             $t++;
             if ($bFirst) {
                 $bFirst = false;
             } else {
                 $where .= " AND\n\t";
             }
             $sql .= ",\n\t";
             $sql .= $helper->wrapQuotes($tableName) . " t" . $t;
             $where .= "t" . $t . "." . $helper->wrapQuotes($fieldName) . " = t." . $helper->wrapQuotes($field);
         }
         $sql .= "\n" . $where;
         $query = new Entity\Query("select");
         $query->setQueryBuildParts($sql);
         $res = $query->exec();
         if ($ar_res = $res->fetch()) {
             $bLinks = true;
         }
     }
     return $bLinks;
 }
Пример #19
0
 public static function increasePointPopular($pointID = null)
 {
     try {
         if (is_null($pointID)) {
             throw new Exception\ArgumentNullException('pointID');
         }
     } catch (Exception\ArgumentNullException $e) {
         $e->showException();
         return false;
     }
     if (static::checkNeedIncreasePointPopular($pointID)) {
         $helper = new SqlHelper();
         $query = new Query('update');
         $sql = "UPDATE " . $helper->wrapQuotes(Tables\PointsTable::getTableName()) . " SET " . $helper->wrapQuotes('POPULAR') . " = " . $helper->wrapQuotes('POPULAR') . " + 1 WHERE ID = " . $pointID;
         $query->setQueryBuildParts($sql);
         $res = $query->exec();
         if ($res->getResult()) {
             return true;
         } else {
             return false;
         }
     }
 }