Идеи для: Главный модуль

Рейтинг: 0  
Новая
Предложил Дубровин Павел 07.09.2017 14:36:25

Редактирование почтовых шаблонов контент-менеджером

Дать возможность получения прав на создание/редактирование почтовых шаблонов без открытия прав на настройки главного модуля.
Например, у контент-менеджера есть возможность создать почтовый шаблон при работе с веб-формой, но нет возможности с этим шаблоном работать.
Рейтинг: 1.2237  
Новая
Предложил Калинин Никита 06.09.2017 18:00:05

Loader::requireModule

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

При наличии обработки исключений "где-то выше" надоело писать if:
if (!Loader::includeModule('...')) {
    throw new LoaderException('Module ... not installed');
}
Рейтинг: 0  
Новая
Предложил Кротов Дмитрий 18.08.2017 21:41:05

bitrix:main.file.input - Поддержка массивов в "INPUT_NAME"

При вызове компонента bitrix:main.file.input есть возможность передавать параметр "INPUT_NAME", но почему-то в этом параметре нельзя передать массив, хотя массив в качестве имени инпута - это нормальная ситуация, причём часто встречающаяся.
Пример - форма добавления элемента в инфоблок (bitrix:iblock.element.add.form), инпуты свойств там имеют имена вида PROPERTY[227][0]. Следует отметить, что если в шаблоне переопределить $arParams["INPUT_NAME"] и скормить ему массив - всё работает.
Было бы неплохо исправить подобное отношение bitrix:main.file.input к массивам в "INPUT_NAME".
Рейтинг: 0.6776  
Новая
Предложил Kirill 17.08.2017 11:24:48

Изменить Яндекс-карту на Google на странице "Скорость сайта" (Яндекс заблокирован в Украине)

Т.к. все сервисы Яндекса заблокированы в Украине, снова обращаюсь с предложением сделать альтернативы используемым в CMS сервисам Яндекса. Если Украина второй рынок для Битрикс, то как бы Вам не хотелось, игнорировать эти изменения нельзя – тяжело объяснить клиентам, почему часть описываемых им плюшек платного Битрикса у них не работает.

В частности страница "Скорость сайта"  ( /bitrix/admin/site_speed.php ) использует Яндекс-карту для отображения скорости и распределения композитных кликов – т.е. у всех моих клиентов она не отображается.

---
Аналогично прошу поддержать идею альтернативного Яндексу сервиса перевода символьных кодов разделов и элементов инфоблоков: https://idea.1c-bitrix.ru/24243/

ps
Повторюсь, клиенты в большинстве своем VPN не используют
Рейтинг: 0.6191  
Новая
Предложил Кирсанов Анатолий 25.07.2017 00:53:13

Поддержка отложенного выбора шаблона сайта

В настоящий момент есть всего один штатный способ определить шаблон сайта - настройки сайта.

Также можно поиграть с предикатами для шаблонов на основе констант, определяемых до подключения Битрикс (наиболее прямой путь здесь вообще SITE_TEMPLATE_ID, но тогда настройки сайта не требуются вовсе).

Главным образом идея возникла из-за страницы ошибки 404. Да, по ней уже сломано немало копий (1, 2). Не так давно и Битрикс предложила "решение" и даже отчиталась о внедрении соответствующей идеи.

Увы, при таком подходе буфер вывода частично (как в \Bitrix\Iblock\Component\Tools::process404) или полностью очищается, делая ненужной работу части страницы. А Битрикс итак тяжел из-за обилия функционала. Стоит ли делать лишнюю работу?

Есть прямой путь для решения такой и других проблем со сменой шаблона сайта уже после его выбора по настройкам сайта - явная установка шаблона на d7. Да так, чтобы эта установка сработала и в конце страницы.

Альтернативы "для старта":
  • Программная установка шаблона сайта на d7 до вывода визуального пролога (API для этого).
  • Событие (старое или новое на d7) для участия в выборе шаблона сайта.

Но их есть смысл делать только если планировать завершить дело отложенным выбором шаблона сайта. Тогда не придется городить огород с описанными выше решениями. Да и красиво упакованный в process404 костыль от Битрикс тоже будет не очень то и нужен.

По мотивам обращения в поддержку 1562681.
Рейтинг: 0  
Внедрено
Предложил Ганин Дмитрий 26.06.2017 21:49:01

Баг в админке

Добрый вечер!
При установке bitrix версии standart выскакивает ошибка (версия php 7.1)



А все из-за того, что переменная (1) $arSqlWhere определен как строка, а далее код работает с ней как с массивом (2). Лечится заменой на $arSqlWhere =  []; // на что как бы намекает название переменной
Рейтинг: 0  
Ответил Жуков Евгений 27.06.2017 13:02:30
Исправлено в main 16.5.9.

P.S. Сообщения об ошибках продукта, подобных этой, необходимо отправлять в техподдержку, а не на сайт идей.
Рейтинг: 0.2071  
Новая
Предложил Казаков Алексей 26.06.2017 17:17:22

Сделать отложенный вызов событий CEvent

Метод CEvent::Send() отправляет почтовые шаблоны по типу почтового события. Вернее, помещает их в очередь и потом выполняется либо по крону, либо на хитах.

Очень удобно, но хотелось бы иметь возможность выполнять отложенную отправку писем. А то сейчас приходится использовать агенты или городить какой-то сервис очередей - не очень правильно и удобно.

Кейс:
на сайте происходит какое-то событие, которое подразумевает отправку письма. Но хотелось бы, чтоб это письмо ушло не сейчас сразу, а, к примеру, через час, или вообще в конкретно заданное время (+-, само собой, с поправкой на регулярность запуска событий CEvent)
Рейтинг: 0  
Новая
Предложил Ганин Дмитрий 17.06.2017 13:38:42

Не хватает класса в главном модуле

В методе Bitrix\Main\Security\CurrentUser::createFromArray(array $data)

есть проверка входного массива данных:
 if (!isset($data["USER_ID"]) || !Main\Type\Int::isInteger($data["USER_ID"]))
   throw new Main\ArgumentOutOfRangeException("data");
Во первых в системе нет класса Bitrix\Main\Type\Int - редакция стандарт, скачивал сегодня новую для проверки наличия этого класса там - не нашел.
Во вторых $data["USER_ID"] (по крайней мере из вызова \Bitrix\Main\Security\Authentication::getUserBySession() ) имеет тип string, соответственно всегда будет вылетать исключение.
Рейтинг: 1.057  
На голосовании
Предложил Masiutin Maxim 17.05.2017 11:54:14

Возможность удаления с диска кода неиспользуемых модулей

Предлагаю добавить возможность удаления кода неиспользуемых модулей из /bitrix/modules/

Нам доступен 31 модуль, но используем мы лишь малую часть из всего числа модулей. Если удалить их код на диске из /bitrix/modules/ - то перестаёт правильно работать система обновлений, т.к. возникает ошибка при проверке версии отсутствующих модулей (а точнее, модуля "Highload-блоки";), проблема в коде PHP, но если его немного исправить, то обновления проходят нормально. https://idea.1c-bitrix.ru/to-do-a-normal-update-without-the-illegal-string-offset-version-0-and-/

После вышеуказанного исправления, программа обновлений предлагает загрузить отсутствующие модули, в списке предлагаемых к обновлению модулей отображает их как «новый».

Возможность удаления кода неиспользуемых модулей из /bitrix/modules/ путем удаления администратором соответствующих файлов и папок на диске, или просто через shell или средствами «Битрикс Управление Сайтом» должна нормально восприниматься данной системой, а вышеуказанное исправление должно войти в стандартный состав «из коробки».
Рейтинг: 0  
На голосовании
Предложил Masiutin Maxim 14.05.2017 14:38:34

Сделать нормально обновление - без "Illegal string offset 'VERSION' (0)" и без хакерских eval(base64decode(фрагменты c конкатенацией в update_client.php - как делают трояны

При обновлении платформы "Битрикс Управление Сайтом", число обновлений отображалось правильно на закладке «Установка обновлений», но перейти на закладку «Список обновлений» было нельзя, при нажатии возникала ошибка в браузере, см. первый снимок экрана.


Одновременно с этим, незаметно в журнале ошибок PHP появлялась ошибка Illegal string offset “VERSION”. Ошибка была в файле update_system.php, из-за чего он, очевидно, прекращался, выводился не до конца, и, как результат, не выводил скрипты, с помощью которых можно переходить на другие закладки.

Illegal string offset 'VERSION' (0)
/home/site/public_html/bitrix/modules/main/admin/update_system.php:2022
#0: require_once(string)
/home/site/public_html/bitrix/admin/update_system.php:2
----------



Я в коде update_system.php добавил проверки существования массива “VERSION”, внес изменения, после чего ошибки прекратились, обновления проверились, на закладку «Список обновлений» перейти смог.

Почему не работал скрипт и почему не было массива “VERSION” – мне неизвестно. Скорее всего, что update_system.php не предусматривал варианта, при котором не будет массива “VERSION”, и поэтому не работал, когда не было массива “VERSION”. После того, как я добавил проверку наличия массива “VERSION”, как показано на снимках, всё заработало.

Предлагаю разработчикам "Битрикс Управление Сайтом" доработать update_system.php, чтобы когда нет массива “VERSION”, скрипт нормально отрабатывал.


P.S. Там же нашел файл update_client.php – думал сначала что это троян, у него там идут хакерские конкатенации, декодирование из base64 и eval() – так себя маскируют трояны. Какой смысл так делать?

P.S.S. И не даёт создать обращение через техподдержку http://www.1c-bitrix.ru/ , говорит "не выбрана категория обращения", предлагает приобрести тариф за 990 рублей, хотя у нас на www.ritlabs.com лицензия действующая. Если у вас на http://www.1c-bitrix.ru/ выбираю категорию "обновление", получаю ошибку "не выбрана категория", следовательно не даёт создать обращение. То есть фактически не могу создать ниодного обращения. Поэтому написал сюда.
Рейтинг: 3.9683  
На голосовании
Предложил Masiutin Maxim 04.05.2017 20:03:41

Ускорение всей работы «Битрикс Управление Сайтом» за счет ликвидации медленных некешируемых запросов к базе данных для сравнения времени активности групп пользователей и замену их быстрыми кешируемыми запросами

Предлагаю простой и надёжный метод ускорение всей работы «Битрикс Управление Сайтом» за счет ликвидации медленных некешируемых запросов к базе данных для сравнения времени активности групп пользователей и замену их быстрыми кешируемыми запросами.

Сейчас при авторизации пользователя или при получения списка групп, в которых он состоит, проверка срока действия принадлежности этого пользователя к той или иной группе производится сервером базы данных, за счет сравнения периода начала и окончания действия привязки к группе с результатом функции СУБД MySL NOW().
Вызов NOW() не даёт СУБД закешировать запрос. Если у нас больше ста тысяч пользователей, то каждая авторизация могла бы проходить быстрее, за счет использования кеша MySQL.
Предлагаю ускорить работу за счет того, что операции сравнения времени переложить на PHP, а база данных будет лишь возвращать эти данные без какого-либо сравнения, что позволит её закешировать запрос.

Ищем в коде места следующие места
((UG.DATE_ACTIVE_FROM IS NULL) OR (UG.DATE_ACTIVE_FROM <=
((UG.DATE_ACTIVE_TO IS NULL) OR (UG.DATE_ACTIVE_TO >=
(окончанием этих строк будет вызов функции Now())

-    Например в /bitrix/modules/main/classes/general/user.php – и изменяем код PHP, формирующий SQL-запросы, убираем даты из WHERE и добавляем их в начало SEL ECT
Таким образом, запрос и его обработка будут примерно такими:

      $strSql =
   "SELECT ".
   "UG.DATE_ACTIVE_FROM, ".
   "UG.DATE_ACTIVE_TO, ".
   "UG.GROUP_ID ".
   "FR OM b_user_group UG ".
   "WHERE UG.USER_ID = ".$ID." ";
 $res = $DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);
 $now_timestamp = time();
 while ($r = $res->Fetch())
 {
   if (array_key_exists("DATE_ACTIVE_FROM", $r))
   {
$from = $r["DATE_ACTIVE_FROM"];
if (strlen($from)>8)
     {
 $from_timestamp = strtotime($from);
 if ($from_timestamp > $now_timestamp) continue;
}
   }

   if (array_key_exists("DATE_ACTIVE_TO", $r))
   {
$to = $r["DATE_ACTIVE_TO"];
if (strlen($to)>8)
{
 $to_timestamp = strtotime($to);
 if ($to_timestamp < $now_timestamp) continue;
}
   }

   $arr[] = intval($r["GROUP_ID"]);
 }

… и так во всех местах.

Не забываем и про D7:
Находим метод public static function getUserGroupIds($userId)
убираем    
$nowTimeExpression = new SqlEx * pression(
static::getEntity()->getConnection()->getSqlHelper()->getCurrentDateTimeFunction()
   );


Далее по тексту, после
   $result = GroupTable::getList(array(
'select' => array('ID',

добавляем
'UserGroup:GROUP.DATE_ACTIVE_FROM',
'UserGroup:GROUP.DATE_ACTIVE_TO',
),

а также убираем следующие строки:

     array(
   'LOGIC' => 'OR',
   '=UserGroup:GROUP.DATE_ACTIVE_FROM' => null,
   '<=UserGroup:GROUP.DATE_ACTIVE_FROM' => $nowTimeExpression,
 ),
 array(
   'LOGIC' => 'OR',
   '=UserGroup:GROUP.DATE_ACTIVE_TO' => null,
        '>=UserGroup:GROUP.DATE_ACTIVE_TO' => $nowTimeExpression,
 ),



обработка массива будет немного отличаться, т.к. время начала возвращается не в строках, а в объектах. Вот такой будет обработка:

  $timetamp_now = time();
   while ($row = $result->fetch())
   {
if (array_key_exists("MAIN_GROUP_MAIN_USER_GROUP_GROUP_DATE_ACTIVE_FROM", $row))
{
 $from = $row["MAIN_GROUP_MAIN_USER_GROUP_GROUP_DATE_ACTIVE_FROM"];
 if (is_object($from))
 {
   $from_timestamp = $from->getTimestamp();
   if ($from_timestamp > $timetamp_now) continue;
 }
     }

if (array_key_exists("MAIN_GROUP_MAIN_USER_GROUP_GROUP_DATE_ACTIVE_TO", $row))
{
 $to = $row["MAIN_GROUP_MAIN_USER_GROUP_GROUP_DATE_ACTIVE_TO"];
if (is_object($to))
 {
   $to_timestamp = $to->getTimestamp();
   if ($to_timestamp < $timetamp_now) continue;
 }
}
$groups[] = intval($row['ID']);
   }

   sort($groups);

   return $groups;

 
Рейтинг: 1.6766  
На голосовании
Предложил Masiutin Maxim 04.05.2017 19:06:01

Ускорение всей работы «Битрикс Управление Сайтом» за счет ликвидации ненужных некешируемых запросов к базе данных для получения статуса IS_ONLINE при вызове CUser::GetByID

Предлагаю Ускорение всей работы «Битрикс Управление Сайтом» за счет ликвидации ненужных некешируемых запросов к базе данных для получения статуса IS_ONLINE при вызове CUser::GetByID


В различных местах «Битрикс Управление Сайтом» есть очень много вызовов CUser ::GetByID , которая, в свою очередь, вызывает CUser::GetList без arParams, то есть запрашивает все параметры пользователя, включая IS_ONLINE, который использует функцию NOW() и не даёт MySQL кешировать результат запроса. См. https://dev.1c-bitrix.ru/api_help/main/reference/cuser/getlist.php Цитирую «FIELDS (с версии ядра 11.0.13) - массив с идентификаторами полей для выборки. Если не указан или пустой, то выбираются все поля”  (в том числе IS_ONLINE). Однако в подавляющем большинстве случаев, при вызове CUser::GetByID нужно всего лишь несколько параметров, а не все, и тем более не IS_ONLINE. Остальные параметры запрашиваются впустую. Например, шаблон отображения файла на форуме вызывает CUser::GetByID чтобы отобразить лишь имя пользвоателя, а IS_ONLINE и NOW() не дают кешировать запрос, что замедляет отображение страниц форума. Особенно это критично, когда страницы форумов запрашивают роботы поисковиков в больших количествах.  
В \bitrix\modules\main\classes\mysql\user.php мы видим такой код:
    $arSelectFields['IS_ONLINE'] =  "IF(U.LAST_ACTIVITY_DATE > DATE_SUB(NOW(), INTERVAL ".$online_interval." SECOND), 'Y', 'N') IS_ONLINE";
В документации MySQL мы видим, что NOW() препятствует кешированию запроса: https://dev.mysql.com/doc/refman/5.5/en/query-cache-operation.html

Я предлагаю:
1. Добавить в CUser ::GetByID второй, необязательный параметр – массив названий полей. Если этот параметр не задан, то запрашиваются все поля, как и раньше. Если задан – то только запрашиваемые поля.
2. Проверить во всём коде «Битрикс Управление Сайтом» и во всех шаблонах все вызовы CUser ::GetByID и перечислить только нужные поля (если вариант №1 неприемлем, то можно все CUser ::GetByID заменть на CUser::GetList .
Опишем коротко где какие параметры нужны:
1. /bitrix/components/bitrix/forum.interface/templates/show_file/template.php  -- больше всего тормозов приходилось на этот шаблон. Ему нужны только следующие параметры: "ID", "NAME", "LAST_NAME", "SECOND_NAME", "TITLE", "EMAIL", "LOGIN"
2. /bitrix/modules/support/admin/ticket_dict_list.php - "NAME","LAST_NAME","LOGIN","ID"
3. /bitrix/modules/support/admin/ticket_edit.php - "LOGIN", "NAME", "LAST_NAME"
4. /bitrix/modules/support/classes/general/reminder.php - "ID", "LOGIN", "NAME", "LAST_NAME"
5. /bitrix/modules/support/classes/general/email.php – в одном месте только “EMAIL”, в другом – только „ID”
6. /bitrix/modules/support/classes/general/support.php  - "LOGIN", "NAME", "LAST_NAME", "EMAIL"
7. /bitrix/modules/forum/classes/general/user.php – в первом месте только PERSONAL_PHOTO, во втором месте "ID", "NAME", "LAST_NAME", "SECOND_NAME", "TITLE", "EMAIL", "LOGIN"
8. /bitrix/modules/main/classes/general/time.php - "AUTO_TIME_ZONE", "TIME_ZONE", "TIME_ZONE_OFFSET"
9. /bitrix/modules/main/classes/general/user.php – в первом месте только UF_DEPARTMENT, во втором - "ID", "PASSWORD", в третьем - "NAME", "LAST_NAME", "LOGIN", в четвёртом тоже "NAME", "LAST_NAME", "LOGIN", в пятом тоже "NAME", "LAST_NAME", "LOGIN"
10.   /bitrix/modules/main/classes/general/event_log.php – только ID

Если в других файлах где-то тоже есть вызовы без указания параметров – добавить их нетрудно.

Это я перечислил основные файлы – изменений немного, а выигрыш в скорости – существенный – плюс мы получаем нормальное кеширование средствами MySQL.
Рейтинг: 0.705  
На голосовании
Предложил Статиевский Данила 28.03.2017 06:49:47

Сделать выбор сайта для временного закрытия публичной части

Сейчас служебная процедура "Временное закрытие публичной части сайта" из настроек главного модуля не учитывает многосайтовость и закрывает публичную часть всех сайтов на системе управления.
Мне кажется, что достаточно очевидна необходимость выборочного закрытия публичной части для выборочных сайтов на одной системе управления.
Рейтинг: 2.2384  
На голосовании
Предложил Парыгин Никита 06.02.2017 10:10:14

Выпущены обновления для вашего Битрикса

У Битрикса есть удобная функция "Уведомлять по email об новых обновлениях". Хотелось бы что бы в этом письме, которое приходит на почту, была бы не только информация об количестве обновлений, версии, и сути нового обновления но ссылка на сайт или название сайта, с которого (для которого) оно отправлено.

У нас N сайтов на Битриксе и когда приходит такое сообщение не понятно от какого сайта и какой сайт обновлять)
Рейтинг: 0.0764  
На голосовании
Предложил Неслуховский Иван 06.02.2017 09:01:25

В визуальном редакторе поддерживать поиск по идентификаторам компонентов и выводить название/описание перед выбором

)Нынешний визредактор во многом уступает старому. В частности при выборе компонента приходится ориентироваться только на его русскоязычное название. Идентификатор компонента нельзя увидеть ни при наведении курсора, ни при нажатии на компонент в правом меню. Приходится располагать компонент в рабочем поле и смотреть настройки.

То же с поиском. Если я нашёл в документации компонент (условно говоря bitrix:sale.personal.section), я его никак не найду в списке компонентов.

Сейчас нигде не выводится краткое описание компонента, кроме настроек. Хотя это описание в первую очередь нужно для выбора компонента, потом оно уже не нужно.

Предлагаемые изменения:
  • выводить название компонента в подсказке при наведении курсора на иконку компонента (как в меню, так и в рабочем поле визуального редактора)
  • то же, но при нажатии на компонент. где-то внизу должно выводиться название
  • описание должно появляться во всплывающей подсказке
  • в поиске компонентов поиск должен идти также по идентификаторам
Рейтинг: 0.1863  
На голосовании
Предложил Неслуховский Иван 27.01.2017 20:12:14

На страницах "Командная PHP-строка" и "SQL запрос к базе данных" хранить библиотеку заготовок

Часто для обслуживания сайта требуется использование рутинных скриптов, которые используются лишь время от времени, а потому забываются, но каждый раз писать их где-то, потом находить сложно.
Если бы заготовки хранились прямо на сайте, это было бы удобно.
Рейтинг: 0  
В работе
Предложил Ганин Дмитрий 10.01.2017 12:25:50

Удалить дублирующий класс SystemException

В главном модуле есть класс SystemException, файл /bitrix/modules/main/lib/systemexception.php,  и его дубль в файле /bitrix/modules/main/lib/exception.php
Рейтинг: 0.0001  
Ответил Жуков Евгений 10.01.2017 13:30:54
Файла /bitrix/modules/main/lib/systemexception.php в продукте нет.

P.S. Проблему зафиксировали, именно с дистрибутивами. Поправим в ближайшее время.