Skip to content
Open

Dev #15

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
f0ec10c
#1 partly fixed, need to test before accept on various samples of data
pytnik89 Sep 28, 2017
2ced48d
Merge pull request #2 from pytnik89/iss-1
aak74 Sep 28, 2017
e5fc031
В классе IbElementOrSection добавлено описание
aak74 Oct 2, 2017
aefe620
#3 В классе IbElementOrSection добавлено описание
aak74 Oct 2, 2017
2f6a7dc
Merge branch 'master' of github.com:aak74/bx-data
aak74 Oct 2, 2017
028b043
в DbElement добавлена функция query, в которой может выполняться обыч…
aak74 Nov 24, 2017
b04417f
добавлен queryExecute
aak74 Nov 27, 2017
ad431a3
#6 update возвращает id исправленного элемента
aak74 Dec 1, 2017
79b8f74
added phpmd.ruleset, return getInsertedId
aak74 Jan 15, 2018
451567d
:books: some docs
aak74 Jan 29, 2018
7b7a6db
Сделана возможность работы с подключением к БД отличным от default
aak74 Mar 20, 2018
8ae3e48
Сделано преобразование дат в строку и обратно
aak74 Mar 20, 2018
c603e31
обработана ситуация с пустым значением даты
aak74 Mar 20, 2018
5e89319
#7 Добавлен класс DbQuery
aak74 Mar 21, 2018
22eaa2e
Добавлена обработка полей в query
aak74 Apr 11, 2018
00e15a3
Добавлено поле fieldsIgnore
aak74 Apr 13, 2018
3372f28
Merge pull request #9 from aak74/dev
aak74 Dec 5, 2018
7f678c7
Update composer.json
aak74 Dec 5, 2018
abf44ce
Update HlElement.php
aak74 Dec 18, 2018
4571e09
Update composer.json
aak74 Dec 21, 2018
72b4ffe
Исправлена опечатка в upsert
Dec 29, 2018
6a96270
Merge pull request #10 from nikehin/dev
aak74 Dec 29, 2018
cac5b53
Update composer.json
aak74 Dec 29, 2018
e83f521
Merge remote-tracking branch 'origin/master' into dev
Dec 29, 2018
5dc6025
Merge branch 'master' of https://github.com/aak74/bx-data into dev
Dec 29, 2018
9c50ac6
И снова исправлена "опечатка" в upsert
Dec 29, 2018
97dbf09
Merge pull request #11 from nikehin/dev
aak74 Dec 29, 2018
526dcb0
getOperand: not like fix for string and numeric types
Jan 21, 2019
c1e144c
Merge pull request #12 from fearoff/master
aak74 Jan 21, 2019
31ea057
Update composer.json
aak74 Jan 21, 2019
9378017
changed package type
Jan 24, 2019
104116f
Update composer.json
aak74 Jan 24, 2019
a47e7e9
fix composer.json
Jan 24, 2019
ab5adc3
Merge branch 'master' of github.com:aak74/bx-data
Jan 24, 2019
acbbc6f
getOperand: not in operand added
Jan 25, 2019
2d661b3
Merge branch 'master' of https://github.com/aak74/bx-data
Jan 25, 2019
3a66b49
Merge pull request #13 from fearoff/master
aak74 Jan 25, 2019
51e6e2e
Update composer.json
aak74 Jan 25, 2019
038beca
Обработка limit для getList() битрикса в IbElementOrSection
Feb 21, 2019
e49b734
getList инфоблока при filter[group] = [] возвращает количество, а не …
Mar 14, 2019
4efd03e
Merge branch 'dev' of https://github.com/smozzh/bx-data into dev
Mar 14, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.{json,yml,todo,md}]
indent_size = 2

[*.md]
trim_trailing_whitespace = false
insert_final_newline = false
5 changes: 2 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@ language: php

php:
- 5.4
- 5.5
- 5.6
- 7.0
- 7.1

before_script:
- composer self-update
- composer install --prefer-source --no-interaction
- composer install --prefer-dist --no-interaction

script: phpunit
script: vendor/bin/phpunit

branches:
only:
Expand Down
7 changes: 3 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
{
"name": "aak74/bx-data",
"version": "0.3.7",
"version": "0.6.3",
"description": "Классы для удобного доступа к данным в 1C-Bitrix",
"license": "MIT",
"keywords": ["bitrix", "1c-bitrix", "classes", "akop", "highload blocks", "битрикс", "1С-битрикс"],
"type": "bitrix-d7-module",
"type": "library",
"authors": [
{
"name": "Andrew Kopylov",
"email": "[email protected]"
}
],
"require": {
"php": ">=5.4.0",
"composer/installers": "^1.0"
"php": ">=5.6.0"
},
"require-dev": {
"phpunit/phpunit": "4.*"
Expand Down
29 changes: 26 additions & 3 deletions doc/classes/Element/HlElement.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@ namespace App\Model;

class Model extends \Akop\Element\HlElement
{
protected $entityName = 'Model';
protected $entityName = 'Model';
}
```

## Типичный getList

### Код
```PHP
<?php
$models = new \App\Model\Model;
Expand All @@ -28,8 +30,7 @@ $result = $models->getList([
]);
```

## Формируется запрос вида:

### Формируется запрос вида:
```SQL
SELECT
`model`.`ID` AS `ID`,
Expand All @@ -41,3 +42,25 @@ LEFT JOIN `b_hlbd_auto_brand` `model_brandname_` ON `model`.`UF_BRAND` = `model_
WHERE `model`.`UF_BRAND` = 120
ORDER BY `model`.`UF_NAME` ASC
```

## Выборка с ИЛИ
### Код
```PHP
<?php
$models = new \App\Model\Model;

$result = $models->getList([
'filter' => [
'LOGIC' => 'OR',
'brandId' => 120,
'<id' => 30,
],
]);
```

### Формируется запрос вида:
```SQL
SELECT *
FROM `b_hlbd_auto_model` `model`
WHERE `model`.`UF_BRAND` = 120 OR `model`.`ID` < 30
```
16 changes: 16 additions & 0 deletions doc/functions/add.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# add
## Описание
```php
add(array $params) : integer;
```
Добавляет строку в модель.
Возвращает `id` вставленной записи или `false` в случае неудачи.

## Пример
```php
add([
'name' => 'Renault',
'active' => 'Y',
'sort' => '200'
]);
```
8 changes: 4 additions & 4 deletions doc/functions/all.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,20 @@ getRow(array $params = [])
```
Возвращает **одну строку** в соответствии с переданным параметром.

## add
## [add](add.md)
```php
add(array $params)
```
Добавляет строку.

## update
## [update](update.md)
```php
update($primaryKey, array $params)
```
Обновляетвляет строку.

## upsert
## [upsert](upsert.md)
```php
upsert(array $filter, array $params)
```
Обновляет строку если найдена строка в соответствии с фильтром. Если такой строки нет, то добавляет строку.
Обновляет строку если найдена строка в соответствии с фильтром. Если такой строки нет, то добавляет строку.
19 changes: 19 additions & 0 deletions doc/functions/update.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# update
## Описание
```php
update($id, array $params) : integer;
```
Обновляет строку в модели.
Возвращает `id` измененной записи.

## Пример
```php
update(
1,
[
'name' => 'Renault',
'active' => 'Y',
'sort' => '200'
]
);
```
22 changes: 22 additions & 0 deletions doc/functions/upsert.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# upsert
## Описание
```php
upsert(array $filter, array $params) : integer;
```
Обновляет или добавляет строку в модели.
Ищет строку, которая соотвествует фильтру. Если строка найдена, то обновляет ее. Если строка не найдена, то добавляет запись.
Возвращает `id` измененной (вставленной) записи.

## Пример
```php
upsert(
[
'name' => 'Renault',
],
[
'name' => 'Renault',
'active' => 'Y',
'sort' => '200'
]
);
```
27 changes: 27 additions & 0 deletions phpmd.ruleset.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0"?>
<ruleset name="My first PHPMD rule set"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="
http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>
My custom rule set that checks my code...
</description>

<!-- Import the entire unused code rule set -->
<rule ref="rulesets/unusedcode.xml" />
<rule ref="rulesets/naming.xml">
<exclude name="ShortVariable" />
</rule>
<rule ref="rulesets/unusedcode.xml" />
<rule ref="rulesets/design.xml" />
<rule ref="rulesets/controversial.xml" />

<rule ref="rulesets/codesize.xml/CyclomaticComplexity" />

<rule ref="rulesets/cleancode.xml">
<exclude name="StaticAccess" />
</rule>
</ruleset>
90 changes: 75 additions & 15 deletions src/Element/AbstractElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@ class AbstractElement implements ElementInterface
use ParamTrait;

protected $fieldsBase = [];
protected $dateFormat = 'd.m.Y';
protected $dateTimeFormat = 'd.m.Y H:i:s';
protected $dates = [];
protected $fields = ["ID"];
protected $reversedFields = [];
protected $compressedFields = [];
protected $primaryKey = "ID";
protected $isAssoc = true;
protected $fieldsStripTags = [];
protected $fieldsIgnore = [];

private $errorMesage = '';
private $lastOperation = false;
Expand Down Expand Up @@ -133,7 +138,14 @@ public function upsert(array $filter, array $params)
"filter" => $filter,
));

$primaryKey = $item[$this->primaryKey] || $item[strtolower($this->primaryKey)];
$primaryKey = null;
if ($item[$this->primaryKey]) {
$primaryKey = $item[$this->primaryKey];
}
if ($item[strtolower($this->primaryKey)]) {
$primaryKey = $item[strtolower($this->primaryKey)];
}

if ($item && $primaryKey) {
$this->update($primaryKey, $params);
return $primaryKey;
Expand Down Expand Up @@ -200,16 +212,6 @@ private function compressField($fieldName, $fieldValue)
: $fieldValue;
}

/*
private function uncompressFields(array $fields)
{
foreach ($fields as $fieldName => $fieldValue) {
$result[$fieldName] = $this->uncompressField($fieldName, $fieldValue);
}
return $result;
}
*/

private function uncompressField($fieldName, $fieldValue)
{
return (in_array($fieldName, $this->compressedFields))
Expand All @@ -234,25 +236,77 @@ protected function setErrorMessage($message)
}

/**
* Возвращает набор данных с переименованными полями
* Если поля были сжаты, то разжимает их
* Возвращает обработанный набор данных
* - Переименовывает поля
* - Если поля были сжаты, то разжимает их
* - Если поля указаны в массиве дат, то значение преобразуются в строку
* @param [array] $item набор данных
* @return [array]
*/
protected function getRenamed($item)
protected function getProcessed($item)
{
if (!empty($this->reversedFields)) {
foreach ($item as $key => $value) {
$fieldName = (isset($this->reversedFields[$key]))
? $this->reversedFields[$key]
: $key;

$result[$fieldName] = $this->uncompressField($fieldName, $value);
$value = $this->uncompressField($fieldName, $value);
$value = $this->convertDateFromDB($fieldName, $value);
$result[$fieldName] = $this->stripTags($fieldName, $value);
}
}
return $result;
}

/**
* Удалят html теги
*/
private function stripTags($fieldName, $value)
{
return (!empty($value) && in_array($fieldName, $this->fieldsStripTags))
? strip_tags($value)
: $value;
}

/**
* Если поле указано в массиве дат, то возвращает вместо объекта строку
* Для того, чтобы избежать это преобразование достаточно не заполнять массив дат
*/
private function convertDateFromDB($fieldName, $value)
{
// \Akop\Util::pre([$fieldName, $value, $this->dates, in_array($fieldName, $this->dates)], 'convertDateFromDB');
return (!empty($value) && in_array($fieldName, $this->dates))
? $value->toString()
: $value;
}

/**
* Преобразует строку в объект дата, пригодный для сохранения в БД
*/
private function convertDateToDB($fieldName, $value)
{
if (in_array($fieldName, $this->dates) && !empty($value)) {
if ($this->isTimeProbably($value)) {
$dt = new \Bitrix\Main\Type\DateTime($value, $this->dateTimeFormat);
return $dt->format('Y-m-d H:i:s');
}
$dt = new \Bitrix\Main\Type\DateTime($value, $this->dateFormat);
return $dt->format('Y-m-d');
}
return $value;
}

/**
* Является ли строка временем (предположительно)
* так как используется очень ограниченно, то такое условие вполне достаточно
* При особых DateFormat следует переопределить функцию
*/
protected function isTimeProbably($value)
{
return (strlen($value) > 10);
}

protected function updateValueForReverse($value)
{
return $value;
Expand All @@ -277,4 +331,10 @@ private function reverseFields()
}
}
}

protected function getLastId()
{
global $DB;
return $DB->LastID();
}
}
Loading