Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Фильтр по >, >=, <, <= #342

Open
Ser1ous opened this issue Feb 17, 2019 · 8 comments
Open

Фильтр по >, >=, <, <= #342

Ser1ous opened this issue Feb 17, 2019 · 8 comments
Assignees
Labels

Comments

@Ser1ous
Copy link
Contributor

Ser1ous commented Feb 17, 2019

https://github.com/AgelxNash/DocLister/blob/master/assets/snippets/DocLister/core/filterDocLister.abstract.php#L153-L168
Эти фильтры приводят входящие данные к числу с плавающей точкой.
Но иногда встречаются задачи когда необходимо по дате фильтровать. И если мы превратим дату в число, то получим ошибку.
Данные:
https://monosnap.com/file/89D7un9U8OmUxYcnEUFeeMCYXZkg7x
Пример запроса:
https://monosnap.com/file/Qsdd50tPwBowMW4MEy8zdttGhyYQBg

@AgelxNash
Copy link
Owner

Возможно есть смысл разделить фильтры
gt lt elt egt будут работать с чистыми данными используя всего-лишь DBAPI::escape()
> < <= >= продолжат приводить данные к числу с плавающий точкой

Теоретически, обратная совместимость не должна пострадать. Не придется вводить новые фильтры

@AgelxNash AgelxNash self-assigned this Feb 17, 2019
@AgelxNash AgelxNash added the Bug label Feb 17, 2019
@Ser1ous
Copy link
Contributor Author

Ser1ous commented Feb 17, 2019

Мне другая мысль пришла, можно сделать валидацию на число, и если пришло число, то оставляем старый вариант, а если не число, то DBAPI::escape()

@AgelxNash
Copy link
Owner

@Pathologic что думаешь?

@Pathologic
Copy link
Collaborator

Мне нравится вариант @Ser1ous В целом это не принципиально, потому что в собственных фильтрах можно переопределить поведение.

@Ser1ous
Copy link
Contributor Author

Ser1ous commented Feb 18, 2019

@Pathologic у этой валидации есть один косяк, она слишком замудренная. Чтобы максимально предугадать вариант который может придти изобрели вот такой костыль. http://sandbox.onlinephpfunctions.com/code/12e007d7e9ee450a5304a13d904c14711546d5a0
Так как могут прислать разные извращённые цифры. Которые по логике человека могут работать, а по логике машины нет. И именно по этой причине и в текущей реализации есть str_replace. Хотя я считаю что это избыточно и по хорошему человек перед тем как отдать на фильтр данные должен их привести к нужному виду.

@AgelxNash
Copy link
Owner

AgelxNash commented Feb 18, 2019

Добавил в костыль еще одну группу данных для теста http://sandbox.onlinephpfunctions.com/code/9feb7816c2d1f2eaa491fffedce0685d63153d70

<?php
function test($str) {
    echo ((is_numeric($str) || is_numeric(trim(str_replace(',','.',$str)))) ? "float" : "string"),
        "\t",
        $str,
        PHP_EOL;
}

test('2010-02-15'); // string
test('2010.02.15'); // string
test('2010.02'); // float
test('2010,02'); // float

test(''); // string
test('0'); // float
test('10 '); // float
test('b3'); // string
test('4a'); // string

test('.10'); // float
test(',10'); // float
test(' 10'); // float
test('010'); // float

@Ser1ous
Copy link
Contributor Author

Ser1ous commented Feb 18, 2019

Ну и как теперь блин с этими костылями жить? Может не стоит за пользователей думать?

@AgelxNash
Copy link
Owner

В общем предлагаю не тыкать палочкой то, что уже работает более 5 лет еще с версии 1.1.1

Давайте просто добавим новые фильтры для gt, lt, elt, egt с префиксами
date, datetime, time, signed, unsigned

Заодно и конкретно в ТВ запихнуть еще целый комплект tvdate, tvdatetime,tvtime

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants