Кирилл Гусарев, возьми самое длинное слово. Умножь его на 3. И читай чанк такой длинны. Найденные в нем слова помещай в список, и бери еще один рандом из этого списка.
Всё, рандом честный.
mascai, в спам оно из-за картинки не попадет. По крайней мере я такого не видел. В спам попадет например из-за отсутствия DKIM.
Вообще для проверки писем можно использовать внешние сервисы такие как этот например: https://www.mail-tester.com/?lang=ru - отправьте туда письмо и он напишет о всех проблемах с ним.
По картинкам:
1 Не надо их вставлять из resize_cache туда. Да и вообще из и /upload. Там в битрикс должны быть либо временные файлы, как в resize_cache, либо регистрируемые в битрикс. Это файлы связанный с сущнсотями битрикс через запись в таблице b_file. Они могут менять свои имена и исчезать.
Для писем вам нужно что-то что идентифицирует файл по пути к нему, а оно не должно быть из /upload, т.е. прикрепленным к какому-то элемент ИБ или из медиабиблиотеки.
2 Как выше написал Adamos почтовик может заблокировать файлы из внешних источников. Хотя я с таким не сталкивался - обычно все прекрасно выкачивает к себе тот же яндекс и со своих серверов отдает. Но если вдруг - можете использовать data url для картинок.
tgarl, держите: https://pastebin.com/32Rzg9bH - может чем-то поможет.
Там есть методы для массового удаления, деактивации скидок по пользователю например, или прототипу.
Это от новогоднего розыгрыша скидок, поэтому там есть что-то вроде getSpin ))
Код вообще не готовил к публикации и эта была временная штука, так что прошу простить вольности в нем.
mayton2019, потому что когда уже 6 раз написал "Скинь пожалуйста архив со всеми файлами, #^@#$% &%@!$ ты &!@^#&" вежливо, остается только крик.
Но это мое предположения. Чего там у ТС, я не знаю.
Дмитрий Грабко, или использует экстрасенсов боевых...
Ну можно придумать еще кучу угроз. Где-то стоит поставить точку в паранойе своей. Вон Гемотест продолжает себе работать. Не разорился ;)
Ясно что не хочется повторения.
Ну ок - давайте подумаем - "кто-то внутри начнет сливать". А как? Уведёт вашу авторизацию каким-то образом, в общем случае, имея доступ к сайту? Ну да - такое возможно и не ясно как от этого защититься. Придумайте лимит на стороне лаборатории, чтобы история не могла стать массовой. Добавьте на стороне лабы фильтрацию по IP. Что-то такое.
Adamos, для бизнеса это копейки. Для частного применения - тебя никто не будет ломать.
И у меня чо-то ни один сайт не взломали (который делал я), даже необновляемый, тупо потому что я всегда начинаю после разворачивания битрикс, с удаления модулей которые не будут использоваться и только потому волна мимо прошла. Не было там модуля vote )))
В целом решение кажется правильным с дополнением Adamos про "вообще не надо хранить у себя" - это выглядит логично.
А все рассуждения про то что если сайт взломают...
Не взламывают битрикс, если:
1 Нет простых паролей
2 Сам не оставил нигде бэкдоров, в т.ч. restore.php забытый в корне
3 Удалил все неиспользуемые модули (привет модуль vote!)
4 Вовремя обновляешься
Это 4 простых правила.
Артем, тоже плохое решение.
Давайте начнем с того, что плох сам подход когда за создание DOM элементов отвечает один актор (в вашем случае бэкенд), а за развешивание событий на них - другой (js на сайте). Это порождает высокую связность между бэкендом и фронтэндом. Связность это всегда плохо.
Именно по этой причине от jQuery отказались к концу десятых годов и массово стали переходить на реактивные фреймворки.
Но это не значит что на jsquery нельзя сделать нормально.
В принципе можно. Для начала вам придется помнить о том что все функции применительно к элементам должны быть одноразовыми. Т.е. вызов одной и той же функции не должен приводить к тому что она будет обрабатывать одни и те же элементы. Проще всего сделать это удаляя селектор на который трегирится функция. В вашем случае после получения ноды DOM удаляя с нее класс swiper-container, перед запуском Swiper.
Для Swiper это не оч. важно - кажется он умный и понимает что его второй раз трегирят на ноде, но для всех функций остальных это необходимо, чтобы разорвать связность между ними и историей запуска. После этого вы сможете вызывать на странице функции инициализации плагинов "безопасно", не боясь что на один элемент повиснут два, три или больше кликов.
Затем засуньте всю вашу инициализацию в одну функцию. Добейтесь чтобы она нормально работало в любое время не только на jQuery.ready и убедитесь что ее перевызов ничего не ломает.
Далее можете использовать ее и в ready и в ajax и где угодно.
Всё, рандом честный.