Всего 125 693 комментария

Наумов Алексей
23 апреля 2021, 16:09
0
Ну да, вот как-то не очень логично, посыл скорее ребятам, кто активно занят с miniShop2 сейчас.
Каждый раз костыли лепить не нравится)))

Ну а если мы удалим пользователя — мы удалим и информацию об оставленной электронной почте.

На мой взгляд было в 10 раз логичнее сохранять и почту и телефон в заказе, а если уже выставлена соответствующая настройка — регистрировать пользователя по этим данным!
Aleksandr Huz
23 апреля 2021, 16:04
0
Согласен, не очень логично, но и не критично.
Ну попадает заказ к одному анониму, ничего страшного, в заказе адрес и номер будет разный. Врятли, менеджеры переходят к пользователю, чтобы посмотреть его контактные данные.

А если это сильно смущает то можно удалять этого же пользователя, если его имя совпадает с почтой
Вешаем плагин на событие: OnUserSave
if($mode == 'new' && $user->get('username') == $user->Profile->get('email')) {
   $user->remove();
}
Но, только если при регистрации почта не используется как логин.

Конечно, это все костыли, и более правильно будет не создавать пользователя, но дать возможность решать это через системную настройку.
Кирилл
23 апреля 2021, 14:57
0
Спс, вопрос решил.
Евгений Шеронов
23 апреля 2021, 14:46
0
Пожалуйста, только тут лучше (float), иначе уже бизнес логика может пострадать))
(int)$_POST['price']
Евгений Шеронов
23 апреля 2021, 13:05
+2
Вроде к каждой статье пишут про безопасность, не?)

$sql = 'SELECT COUNT(id) FROM modxwb_ms2_order_products WHERE product_id = '.$_POST['id'];
Ну это прям призыв, чтобы пришли люди и грохнули сайт без каких-либо сложностей))

$modx->getObject('modResource', $_POST['id']);
И даже так (и вроде когда используется массив) (обсуждали уже где-то здесь) что-угодно можно пропихнуть.

Всегда когда работаем с целыми числами всего лишь нужно добавить (int) перед чем-угодно и спать спокойно.

А это открывает доступ к другим типам инъекций.
<input type="hidden" id="orderid" value="{$.get.msorder}">
Возможно, Fenom что-то там и порежет, но надеяться не стоит.
Евгений Шеронов
23 апреля 2021, 12:54
0
Спасибо!
Теперь по замечаниям.
1) Абсолютный путь в целом там и не нужен, оставлю относительный.
Но ещё более не секьюрно давать кому-то доступ в админку))
Там и без этого никаких проблем получить все системные настройки через Fenom.

2) Поправил, в следующем обновлении уже не должно всплывать.
Наумов Алексей
23 апреля 2021, 12:26
0
Да и вообще, если посмотреть код метода getCustomerId, увидим что:

— если email пустой, то сделаем его в формате «Получатель_заказа@мой сайт.ру». Класс… т.е. первый купивший Алексей зарегистируется на сайте и создаст пользователя с такой почтой, а заказ от второго Алексея внезапно попадет к первому, т.к. почта-то одинаковая…
Ладно, если мы на фронте этого не выводим всего… но в админке то выглядит так, как-будто все эти заказы от одного пользователя!
Кирилл
23 апреля 2021, 12:24
0
Случилась аналогичная ситуация, можно более подробно как решить
Sergey
23 апреля 2021, 12:20
0
Спасибо большое ))
Николай Савин
23 апреля 2021, 12:19
+1
Нет, я тоже затупил. Неверно подсказал. У вас данные хранятся не в заказе, а в адресе, это другая таблица. Нужно добавить ссылку.
$extfld_delivery_shop = $msOrder->Address->get('extfld_delivery_shop');
Sergey
23 апреля 2021, 12:17
0
Спасибо огромное, чет затупил )))
Николай Савин
23 апреля 2021, 12:15
+1
Да нет же
$extfld_delivery_shop = $msOrder->get('extfld_delivery_shop');
Sergey
23 апреля 2021, 12:13
0
У меня в msOrder поле для самовывоза
select id=«delivery_shop» name=«extfld_delivery_shop» value="{$form['extfld_delivery_shop']}" class=«form-control»

Нужно вот так?
$properties = $msOrder->get('properties');
$delshop = $properties['extfld_delivery_shop'];


И просто вывод {$delshop} )?
Артур Шевченко
23 апреля 2021, 12:11
0
Нет.
Артур Шевченко
23 апреля 2021, 10:04
+1
Нет, я не приемлю принцип «сдал и меня нет», я поддерживаю свои проекты. И стараюсь заранее все нюансы у заказчика узнать, чтобы доработок было минимум. Понятно, что потом аппетиты могут у заказчика вырасти, тогда и переделаем. А за то, что опытом делитесь респект!
Алексей Шумаев
23 апреля 2021, 09:58
0
Опыт — сын ошибок трудных (©), делюсь, пока минута есть.
Подзаработать потом, это хорошо; главное, чтобы проект не возвращался на доработку неожиданно, как будет что-то всплывать. А то техдолг накопится и через пару лет работа будет ради работы делаться. Ну или работать по принципу «сдал проект — и меня нет», тоже так себе подход )))
Артур Шевченко
23 апреля 2021, 09:51
0
Вечно эти опытные программисты находят изъяны и не дают насладиться маленьким триумфом от собственного роста? Я понял вас, спасибо. Что до повторной отправки, можно предусмотреть: пишем в поле comment ссылку domain.ru?msorder=2 и выводим это поле в таблице заказов. Логгирование ошибок в скрипте отправки есть, надо только возвращать false и наверное уведомлять админа. Про чтение json это прям сильно))) А вот когда вырастет, тогда можно будет переделать и ещё немного заработать ?
Алексей Шумаев
23 апреля 2021, 09:39
0
Ну да, как вариант — конкретная реализация от задачи.

Вангую немного на будущее:
— вдруг проект вырастет?
— вдруг выяснится, что народ закрывает страницу не дожидаясь отправки и не получает билеты, а потом жалуется?
— вдруг сбой отправки и вы об этом не узнаете, а повторной отправки не предусмотрено?
— вдруг надо будет ещё что-то делать вместе с отправкой билета?
Это я к тому, что лучше этот процесс перенести полностью на бэк, где вы его будете контролировать.

Чтобы БД не запрашивать (хотя для небольших проектов это не имеет особого значения, да и вообще — кому нужна БД — узкое место же :-) ) — можно в файлы json писать: есть файл -> читаем, получаем указанный заказ, отправляем, удаляем. Если отправка каких-то писем не удалась — пишем в лог и данный файл не удаляем. Однако, имхо, это немного извращение.