diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 77585b07c..7d2e66091 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,6 +27,7 @@ variables: MEMCACHED_NAMESPACE: $CI_COMMIT_SHORT_SHA COMPOSER_HOME: ${CI_PROJECT_DIR}/.composer CYPRESS_CACHE_FOLDER: ${CI_PROJECT_DIR}/node_modules/.cypress-cache + GIT_SUBMODULE_STRATEGY: recursive phpstan: stage: analyze diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..3cc757b85 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "public/static/assets"] + path = public/static/assets + url = ../website-static-assets.git diff --git a/Makefile b/Makefile index 25ae8b68e..29cbb8301 100644 --- a/Makefile +++ b/Makefile @@ -103,5 +103,5 @@ twig-flush: .PHONY: update update: - git pull + git pull --recurse-submodules composer install --no-dev --optimize-autoloader --no-progress diff --git a/lib/config.php b/lib/config.php index 1b212af2d..2fa1b5ff7 100644 --- a/lib/config.php +++ b/lib/config.php @@ -292,6 +292,7 @@ defined('DEBUG_TRACE') or define('DEBUG_TRACE', ''); // ------------------------------------------------------------------------ // IRC settings +defined('IRC_PUBLIC_SERVER') or define('IRC_PUBLIC_SERVER', 'irc.' . SITE_HOST); defined('DISABLE_IRC') or define('DISABLE_IRC', false); defined('IRC_HTTP_SOCKET_ADDRESS') or define('IRC_HTTP_SOCKET_ADDRESS', 'http://localhost:51011/'); @@ -786,6 +787,7 @@ defined('VALID_PAGE') or define('VALID_PAGE', [ 'user', 'userhistory', 'view', + 'webirc', ]); // Maximum length of a custom user title. diff --git a/public/static/assets b/public/static/assets new file mode 160000 index 000000000..90f16704d --- /dev/null +++ b/public/static/assets @@ -0,0 +1 @@ +Subproject commit 90f16704d2962642a34fbb201041370959354098 diff --git a/public/static/highlight.mp3 b/public/static/highlight.mp3 new file mode 120000 index 000000000..c74b5ef8e --- /dev/null +++ b/public/static/highlight.mp3 @@ -0,0 +1 @@ +assets/kiwi/static/highlight.mp3 \ No newline at end of file diff --git a/public/static/highlight.ogg b/public/static/highlight.ogg new file mode 120000 index 000000000..b8cf0b506 --- /dev/null +++ b/public/static/highlight.ogg @@ -0,0 +1 @@ +assets/kiwi/static/highlight.ogg \ No newline at end of file diff --git a/public/static/irc/IRCApplet.class b/public/static/irc/IRCApplet.class deleted file mode 100644 index 3da0719b7..000000000 Binary files a/public/static/irc/IRCApplet.class and /dev/null differ diff --git a/public/static/irc/english.lng b/public/static/irc/english.lng deleted file mode 100644 index 4b7b2dd2a..000000000 --- a/public/static/irc/english.lng +++ /dev/null @@ -1,93 +0,0 @@ -# -# This java file is a part of the -# -# - Plouf's Java IRC Client - -# -# Copyright (C) 2004 Philippe Detournay -# -# This file is licensed under the GPL license -# -# All contacts : theplouf@yahoo.com -# -# -# Syntax : -# Comments begin with the # character. This character must be the first character of the line. -# A data line has three parts : the data id, the data id description, the data string. -# - Data id : An hexadecimal figure identifying the string. -# - Data description : Begins by [ and ends by ]. The description is not parsed and -# can be any string. -# - Data string : The string itself. Parameters are specified using the %i syntax. -# -# Trailing spaces can be added using the \s escape character. - -0001 [INTERPRETOR_NOT_ON_CHANNEL] Not on a channel -0002 [INTERPRETOR_UNKNOWN_DCC] %1 : unknown dcc subcommand -0003 [INTERPRETOR_INSUFFICIENT_PARAMETERS] %1 : insufficient parameters -0004 [INTERPRETOR_BAD_CONTEXT] %1 : unable to perform in current context -0005 [INTERPRETOR_CANNOT_CTCP_IN_DCCCHAT] Cannot send CTCP codes via DCC Chat -0006 [INTERPRETOR_UNKNOWN_CONFIG] %1 : unknown config subcommand -0007 [INTERPRETOR_TIMESTAMP_ON] Timestamp enabled -0008 [INTERPRETOR_TIMESTAMP_OFF] Timestamp disabled -0009 [INTERPRETOR_SMILEYS_ON] Graphical smileys enabled -000a [INTERPRETOR_SMILEYS_OFF] Graphical smileys disabled -000b [INTERPRETOR_IGNORE_ON] Now ignoring %1 -000c [INTERPRETOR_IGNORE_OFF] Not ignoring %1 anymore -000d [INTERPRETOR_MULTISERVER_DISABLED] Multiserver support is disabled - -0101 [DCC_WAITING_INCOMING] Waiting for incoming connection... -0102 [DCC_UNABLE_TO_OPEN_CONNECTION] Unable to open connection : %1 -0103 [DCC_CONNECTION_ESTABLISHED] DCC Connection established -0104 [DCC_CONNECTION_CLOSED] Connection closed -0105 [DCC_ERROR] Error : %1 -0106 [DCC_UNABLE_TO_SEND_TO] %1 : unable to send to %2 -0107 [DCC_BAD_CONTEXT] Unable to execute command from current context -0108 [DCC_NOT_CONNECTED] Not connected -0109 [DCC_UNABLE_PASSIVE_MODE] Unable to initialize passive mode -010a [CTCP_PING_REPLY] [%1 PING reply] : %2 seconds -010b [DCC_STREAM_CLOSED] Stream closed - -0201 [IDENT_FAILED_LAUNCH] Failed to launch Ident server : %1 -0202 [IDENT_REQUEST] Ident request from %1 -0203 [IDENT_ERROR] Error occurred -0204 [IDENT_REPLIED] Replied %1 -0205 [IDENT_DEFAULT_USER] default user -0206 [IDENT_NO_USER] No user for request -0207 [IDENT_RUNNING_ON_PORT] Ident server running on port %1 -0208 [IDENT_LEAVING] Ident server leaving : %1 -0209 [IDENT_NONE] none -020a [IDENT_UNKNOWN] unknown -020b [IDENT_UNDEFINED] Undefined result - -0301 [FILE_SAVEAS] Save file as - -0401 [ABOUT_ABOUT] About -0402 [ABOUT_PROGRAMMING] Programming -0403 [ABOUT_DESIGN] Design -0404 [ABOUT_THANKS] Thanks to -0405 [ABOUT_SUPPORT] for support, ideas and testing -0406 [ABOUT_GPL] This software is licensed under the GPL license - -0501 [SERVER_UNABLE_TO_CONNECT] Unable to connect : %1 -0502 [SERVER_UNABLE_TO_CONNECT_STILL] Unable to connect to %1 : currently trying to connect to %2 -0503 [SERVER_DISCONNECTING] Disconnecting from %1 -0504 [SERVER_CONNECTING] Connecting... -0505 [SERVER_NOT_CONNECTED] Not connected -0506 [SERVER_LOGIN] Logging in... -0507 [SERVER_DISCONNECTED] Disconnected from %1 -0508 [SERVER_ERROR] Error : %1 -0509 [SERVER_AUTOREJOIN_ATTEMPT] Attempting to rejoin channel %1... -050a [SERVER_AUTOREJOIN_FAILED] Unable to rejoin channel %1 - -071a [GUI_CHANGE_NICK] Change nick to -071b [GUI_COPY_WINDOW] Copy text -071c [GUI_DCC_CHAT_WARNING_TITLE] Warning -071d [GUI_DCC_CHAT_WARNING_TEXT] Do you want to accept DCC chat from %1? - -0801 [ASL_MALE] Boy, %1 years old, %2 -0802 [ASL_FEMALE] Girl, %1 years old, %2 -0803 [ASL_UNKNOWN] %1 years old from %2 - -0901 [REPLY_IDLE] %1 has been idle for %2 -0902 [REPLY_SIGNON] %1 connected on %2 - -ffff [ERROR_NOT_DEFINED] Undefined string diff --git a/public/static/irc/irc.jar b/public/static/irc/irc.jar deleted file mode 100644 index e2d686550..000000000 Binary files a/public/static/irc/irc.jar and /dev/null differ diff --git a/public/static/irc/sbox-english.lng b/public/static/irc/sbox-english.lng deleted file mode 100644 index 21e3935ec..000000000 --- a/public/static/irc/sbox-english.lng +++ /dev/null @@ -1,75 +0,0 @@ -# -# This java file is a part of the -# -# - Plouf's Java IRC Client - -# -# Copyright (C) 2004 Philippe Detournay -# -# This file is licensed under the GPL license -# -# All contacts : theplouf@yahoo.com -# -# -# Syntax : -# Comments begin with the # character. This character must be the first character of the line. -# A data line has three parts : the data id, the data id description, the data string. -# - Data id : An hexadecimal figure identifying the string. -# - Data description : Begins by [ and ends by ]. The description is not parsed and -# can be any string. -# - Data string : The string itself. Parameters are specified using the %i syntax. -# -# Trailing spaces can be added using the \s escape character. - -8601 [SOURCE_YOU_KICKED] You've been kicked out of %1 by %2 -8602 [SOURCE_STATUS] Status -8603 [SOURCE_CHANLIST] Channels for %1 -8604 [SOURCE_CHANLIST_RETREIVING] Retrieving channels... -8605 [SOURCE_HAS_JOINED] %1 has joined %2 -8606 [SOURCE_HAS_LEFT] %1 has left %2 -8607 [SOURCE_HAS_BEEN_KICKED_BY] %1 has been kicked by %2 -8608 [SOURCE_HAS_QUIT] %1 has quit -8609 [SOURCE_TOPIC_IS] Topic is %1 -860a [SOURCE_CHANGED_TOPIC] %1 changed topic to %2 -860b [SOURCE_CHANNEL_MODE] %1 sets channel mode to %2 -860c [SOURCE_CHANNEL_MODE_IS] Channel mode is %1 -860d [SOURCE_USER_MODE] %1 sets mode %2 on %3 -860e [SOURCE_KNOWN_AS] %1 is now known as %2 -860f [SOURCE_YOUR_MODE] Mode changed to %1 -8610 [SOURCE_YOUR_NICK] Your nick is now %1 -8611 [SOURCE_INFO] Infos -8612 [SOURCE_AWAY] %1 is away -8613 [SOURCE_YOU_INVITED] %1 invites you to join %2 -8614 [SOURCE_YOU_JOINED_AS] You're talking in %1 as %2 - -8701 [GUI_WHOIS] Whois -8702 [GUI_QUERY] Query -8703 [GUI_KICK] Kick -8704 [GUI_BAN] Ban -8705 [GUI_KICKBAN] Kick + Ban -8706 [GUI_OP] Op -8707 [GUI_DEOP] DeOp -8708 [GUI_VOICE] Voice -8709 [GUI_DEVOICE] DeVoice -870a [GUI_PING] Ping -870b [GUI_VERSION] Version -870c [GUI_TIME] Time -870d [GUI_FINGER] Finger -870e [GUI_RETREIVING_FILE] Receiving file (%1 bytes) -870f [GUI_SENDING_FILE] Sending file (%1 bytes) -8710 [GUI_TERMINATED] %1 terminated -8711 [GUI_FAILED] %1 failed -8712 [GUI_CLOSE] Close -8713 [GUI_DISCONNECT] Disconnect -8714 [GUI_CHANNELS] Channels -8715 [GUI_HELP] Help -8716 [GUI_PRIVATE] private -8717 [GUI_PUBLIC] public -8718 [GUI_CONNECT] Connect -8719 [GUI_ABOUT] About -871a [GUI_CHANGE_NICK] New nick -871c [GUI_FONT] Font -871d [GUI_FONT_WINDOW] Select font -871e [GUI_FONT_WINDOW_OK] Ok -871f [GUI_ENTER_TEXT_HERE] Enter text here... - -ffff [ERROR_NOT_DEFINED] Undefined string diff --git a/public/static/irc/sbox.jar b/public/static/irc/sbox.jar deleted file mode 100644 index 6825f5203..000000000 Binary files a/public/static/irc/sbox.jar and /dev/null differ diff --git a/sections/chat/index.php b/sections/chat/index.php index 78115ec2a..4966d3473 100644 --- a/sections/chat/index.php +++ b/sections/chat/index.php @@ -1,74 +1,6 @@ IRCKey(); -if (empty($IRCKey)) { -?> -
-
-

IRC Rules - Please read these carefully!

-
-
-

- Please set your IRC Key on your profile first! For more information on IRC, please read the wiki article. -

-
-
- -
-
-

IRC Rules - Please read these carefully!

-
-
- render('rules/irc.twig'); ?> -
- - -
-
-
-username(); - $nick = preg_replace('/[^a-zA-Z0-9\[\]\\`\^\{\}\|_]/', '', $nick); - if (strlen($nick) == 0) { - $nick = SITE_NAME.'Guest????'; - } else { - if (is_numeric(substr($nick, 0, 1))) { - $nick = '_' . $nick; - } - } -?> -
-
-

IRC

-
-
-
-

If you have an IRC client, refer to this wiki article for information on how to connect. (IRC applet users are automatically identified with Drone.)

-
- - - - - - - - - - - - - - -
-
- 'webirc.php', +default => 'join.php', +}); diff --git a/sections/chat/join.php b/sections/chat/join.php new file mode 100644 index 000000000..ce1385c2e --- /dev/null +++ b/sections/chat/join.php @@ -0,0 +1,5 @@ +render('chat/index.twig', [ + 'user' => $Viewer, +]); diff --git a/sections/chat/webirc.php b/sections/chat/webirc.php new file mode 100644 index 000000000..a1c3b3257 --- /dev/null +++ b/sections/chat/webirc.php @@ -0,0 +1,24 @@ +disableIRC() && !$Viewer->IRCKey()) { + $ircKey = randomString(32); + $Viewer->setField('IRCKey', $ircKey)->modify(); +} + +$userMan = new Gazelle\Manager\User; +$ircNick = str_replace('.', '', $Viewer->username()); +if (!$ircNick || $userMan->findByUsername($ircNick)) { + $ircNick = str_replace('.', '_', $Viewer->username()); + if ($userMan->findByUsername($ircNick)) { + $ircNick = str_replace('.', '%2E', $Viewer->username()); + } +} + +if (is_numeric(substr($ircNick, 0, 1))) { + $ircNick = '_' . $ircNick; +} + +echo $Twig->render('chat/webirc.twig', [ + 'user' => $Viewer, + 'irc_nick' => $ircNick, +]); diff --git a/sections/recovery/save.php b/sections/recovery/save.php index f749ff0c0..16f4a62e4 100644 --- a/sections/recovery/save.php +++ b/sections/recovery/save.php @@ -83,7 +83,7 @@ recheck your spam folder), join the #recovery channel on IRC.

IRC details

-

Server: irc.orpheus.network
+

Server:
Port: 6667 or +7000 for SSL

diff --git a/templates/chat/index.twig b/templates/chat/index.twig new file mode 100644 index 000000000..f598f05cd --- /dev/null +++ b/templates/chat/index.twig @@ -0,0 +1,38 @@ +{{ header('Chat') }} +{% if user.disableIRC %} +
+
+

IRC Privileges Disabled

+
+
+ Your IRC privileges are disabled. +
+
+{% else %} +
+
+

IRC Rules - Please read these carefully!

+
+
+ {% include 'rules/irc.twig' %} +
+
+
+
+

Join the Chat

+
+
+
+

If you have an IRC client, refer to + this wiki article for information on how to connect.

+

Alternatively you can use our web client.

+

+ + + +

+
+
+
+{% endif %} +{{ footer() }} diff --git a/templates/chat/webirc.twig b/templates/chat/webirc.twig new file mode 100644 index 000000000..78006505e --- /dev/null +++ b/templates/chat/webirc.twig @@ -0,0 +1,89 @@ + + + + + + + + + {{ constant('SITE_NAME') }} Chat + + + + + + + +{% if user.disableIRC %} +
Your IRC privileges are disabled.
+{% else %} + + +
+ + +{% endif %} diff --git a/templates/index/page-header.twig b/templates/index/page-header.twig index 06c0462e7..beefeaeb1 100644 --- a/templates/index/page-header.twig +++ b/templates/index/page-header.twig @@ -92,7 +92,7 @@ - + diff --git a/templates/index/private-header.twig b/templates/index/private-header.twig index 342b4222e..2490dcd9e 100644 --- a/templates/index/private-header.twig +++ b/templates/index/private-header.twig @@ -4,7 +4,7 @@ - + {{ page_title }} diff --git a/templates/index/public-header.twig b/templates/index/public-header.twig index 879e96b24..0e4e5bef9 100644 --- a/templates/index/public-header.twig +++ b/templates/index/public-header.twig @@ -4,7 +4,7 @@ - + {{ page_title }} diff --git a/templates/register/create.twig b/templates/register/create.twig index 9cdd70e90..7d2d38c34 100644 --- a/templates/register/create.twig +++ b/templates/register/create.twig @@ -9,8 +9,8 @@ Since this is a new installation, you can log in directly without having to confirm your account. {% else %} An email has been sent to the address that you provided. After you confirm your email address, you will be able to log into your account. -If you do not receive a response within a couple of hours, you may try contacting staff on IRC. Join irc.orpheus.network, -channel #disabled. Depending on the timezone you may have to wait, but you will receive a response. +If you do not receive a response within a couple of hours, you may try contacting staff on IRC. Join {{ constant('IRC_PUBLIC_SERVER') }}, +channel #disabled. Depending on the timezone you may have to wait, but you will receive a response. {% endif %} {% else %} {% if invite %} diff --git a/templates/register/expired.twig b/templates/register/expired.twig index 0d52c0a86..431cf0903 100644 --- a/templates/register/expired.twig +++ b/templates/register/expired.twig @@ -30,7 +30,7 @@ account is still unconfirmed, a new email will be sent to the address you gave when signing up.

When all else fails, try contacting staff on IRC. Join -irc.orpheus.network, channel #disabled. Depending on the +{{ constant('IRC_PUBLIC_SERVER') }}, channel #disabled. Depending on the timezone you may have to wait, but you will receive a response. diff --git a/templates/register/no-invite.twig b/templates/register/no-invite.twig index 72d62f39f..5c10f4dab 100644 --- a/templates/register/no-invite.twig +++ b/templates/register/no-invite.twig @@ -26,7 +26,7 @@ correct it and try again.

  • The invitation has already been used, either by you or someone else. You should contact the person who invited you, and they can check their invitees. Otherwise you may try contacting staff on IRC. Join -irc.orpheus.network, channel #disabled. Depending on the +{{ constant('IRC_PUBLIC_SERVER') }}, channel #disabled. Depending on the timezone you may have to wait, but you will receive a response.