Мы в процессе переноса большого сообщества на Discourse из vb3.
Многие имена пользователей — около 1200 — содержат восклицательный знак «!», и я не смог найти никакой опции для его повторного включения.
Мы уже включили «юникодные имена пользователей», но безрезультатно.
Есть ли какое-то готовое решение этой проблемы?
Я не принимал это решение, но существует множество систем, где символ ! недопустим в имени пользователя. Скорее всего, если вы попытаетесь разрешить его в плагине (или в форке, что было бы очень-очень плохой идеей, если вы когда-нибудь захотите обновить Discourse), это вызовет трудности.
Символ ! имеет особое значение во многих контекстах, и я подозреваю, что если вы просто измените валидатор имен пользователей, то сломается множество других вещей.
Понимаю. Тем не менее, это вопрос, который нужно решить. Все остальные BB-решения допускают этот символ в имени пользователя, и это распространено в игровых сообществах. Имя пользователя и ID пользователя должны быть разделены, чтобы избежать подобных ограничений. У нас около 95 000 участников, и обращение к 1 200 из них с просьбой сменить имя пользователя станет настоящей головной болью. Спасибо за помощь в любом случае!
Я сделал десятки, возможно, более сотни импортов. Я внимательно слежу за людьми, которые спрашивают об импортах здесь. Впервые я помню, чтобы кто-то жаловался на это.
Вы можете сказать всем, чтобы они попробовали войти как под своим именем пользователя, так и под своим адресом электронной почты (многие из них даже об этом не знают). Скорее всего, у вас есть и другие имена пользователей, которые изменились.
Вероятно, ограничений будет гораздо больше, чем только восклицательные знаки. Это кажется очень странным ограничением, поскольку эти символы можно использовать в любом другом месте.
Стоит отметить, что имена и имена пользователей — это не одно и то же. Имена пользователей используются в путях URL, например:
https://meta.discourse.org/u/pfaffman/summary
Восклицательный знак не является допустимым символом в URL, тогда как такие символы, как ? и &, имеют специальное назначение в структуре URL и поэтому также не могут входить в состав имени пользователя. Это не специфично для Discourse — любая система, использующая имя пользователя в структуре URL, должна соблюдать это правило.
Имя пользователя не может содержать восклицательный знак, но имя может, и вы можете отдавать ему приоритет в интерфейсе.
Кроме того, имена пользователей предназначены для использования в @упоминаниях, поэтому ожидается, что они будут простыми и удобными для ввода; именно поэтому по умолчанию разрешены только символы ASCII (хотя это можно расширить до Unicode с помощью настройки unicode_usernames, хотя знаки препинания всё равно запрещены).
Обратите внимание, что этот скрипт миграции использует базовый класс не массового скрипта миграции, который делает это для каждой записи пользователя, генерируемой методом, на который вы сослались:
который удаляет любые недопустимые символы из имён пользователей.
В коде есть множество мест, где предполагаются определённые вещи об именах пользователей (@упоминания, изменение имён пользователей и т. д.), поэтому мы и вводим эти ограничения.
Как сказал Стивен, имена пользователей — это не место для проявления индивидуальности пользователя; для этого есть поля имени и флера
Тем не менее, существует довольно много пограничных случаев, которые трудно обрабатывать при такой настройке.
Имена не являются уникальными; если мы отдадим приоритет имени в макете, вы можете представить, как это будет выглядеть на форуме, полном незрелых подростков, которые весь день играют и троллят
Конечно, можно сказать, что это вопрос низкого приоритета, но это всё же что-то, что явно требует обдумывания и доработки. Это точно не «фича» и не то, что даёт преимущество перед возможностью выбрать уникальное имя без жёстких ограничений, как в любом другом bb-софте, существующем уже давно.
Не могли бы вы поделиться проектами с открытым исходным кодом в области CMS, которые вы использовали? Мы можем изучить их и посмотреть, как они обрабатывают постоянные ссылки и ссылки на пользователей, и перенять их опыт.
Хотя… интересно, являются ли системы управления контентом точно такой же категорией, как форумы сообщества?
Кроме того, упоминание о кодировании специальных символов не является чем-то уникальным для CMS — это просто стандартное кодирование: Percent-encoding - Glossary | MDN
В vBulletin 3 этой функции нет, а в vBulletin 5… Я даже не знаю, есть ли она вообще, так как это ПО явно отстало в плане современных возможностей.
Когда вы упоминаете кого-то в Discourse, появляется автодополнение. Не нужно беспокоиться о том, чтобы вводить полное имя пользователя.
Редактирование: В конечном итоге это означает, что система должна декодировать список имен пользователей перед предложением, если вы действительно хотите этого, или кодировать ввод (частичное имя, вводимое пользователем), чтобы можно было корректно выполнить поиск по имени пользователя.
Я имею в виду, что мы можем спорить о том, сколько работы и усилий это потребует, но не о том, «возможно ли» это вообще.
В любом случае, не знаю, просто ли медиа плохо передают настроение, но все эти последние ответы кажутся немного «враждебными». Люди приходят на meta.discourse, чтобы попросить о помощи и предложить улучшения. Если вы не согласны, вы можете просто проигнорировать тему и двигаться дальше.
Также я забыл добавить: если для Discourse открыты PR, я могу попробовать поработать над этим в форке и открыть PR. Конечно, я не разработчик Ruby, но у меня есть несколько лет опыта работы в качестве инженера по программному обеспечению / платформенного инженера. Буду рад попробовать внести вклад
Просто обновляю информацию для потомков: символ ! не является запрещённым в URL, как упоминалось выше. Не знаю, откуда взялось это заблуждение.
Однако Ruby использует ? и ! в своих функциях, что, честно говоря, странно (по крайней мере, учитывая мой 20-летний опыт в разработке программного обеспечения), но у каждого языка свои особенности
Это может указывать на причину запрета !. Мне придётся глубже изучить исходный код Discourse, чтобы понять, была ли это конкретная проблема, которую не удалось решить, или же это просто чрезмерно строгое ограничение, призванное избежать потенциальных конфликтов между именами пользователей и Ruby в каких-то пограничных случаях.
Извините, что воскрешаю эту старую тему, но у меня та же проблема, и я предполагаю, что символы |, [ и ] также являются недопустимыми символами для имен пользователей и их каким-то образом нельзя разрешить?
Я собираюсь перенести старый игровой форум с phpBB3 на Discourse, и многие имена пользователей выглядят как Clan|Nickname или [Clan]Nickname.
Я бы отредактировал скрипт, чтобы он искал их и заменял на допустимый символ, например _ или -. Думаю, он просто их удалит. Вы можете посмотреть код предложенного имени пользователя.
Когда я мигрировал свой первый форум на Discourse, я заметил, что недопустимые символы, начиная с пробелов, но также и другие, заменялись на _. Однако на этом форуме самым распространённым недопустимым символом был пробел, и встречался он не очень часто, поэтому это не было такой проблемой, как сейчас. В любом случае, это не должно стать непреодолимым препятствием. Возможно, я введу старое имя пользователя в поле «Имя». Посмотрим, когда я решу другую проблему — мой контейнер для импорта не собирается…