Version 2.0.1
This commit is contained in:
@@ -40,8 +40,7 @@
|
||||
<!-- EVENT dmzx_mchat_acp_custom_page_before -->
|
||||
|
||||
<dl>
|
||||
<dt><label for="mchat_custom_page">{L_MCHAT_CUSTOM_PAGE}{L_COLON}</label><br />
|
||||
<span>{L_MCHAT_CUSTOM_PAGE_EXPLAIN}</span></dt>
|
||||
<dt><label for="mchat_custom_page">{L_MCHAT_CUSTOM_PAGE}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="mchat_custom_page" value="1"<!-- IF MCHAT_CUSTOM_PAGE --> id="mchat_custom_page" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="mchat_custom_page" value="0"<!-- IF not MCHAT_CUSTOM_PAGE --> id="mchat_custom_page" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
@@ -82,6 +81,14 @@
|
||||
|
||||
<!-- EVENT dmzx_mchat_acp_message_num_archive_after -->
|
||||
|
||||
<dl>
|
||||
<dt><label for="mchat_archive_sort">{L_MCHAT_ARCHIVE_SORT}{L_COLON}</label></dt>
|
||||
<dd>
|
||||
<label><input type="radio" class="radio" name="mchat_archive_sort" value="0"<!-- IF MCHAT_ARCHIVE_SORT == 0 --> id="mchat_archive_sort" checked="checked"<!-- ENDIF --> /> {L_MCHAT_ARCHIVE_SORT_TOP_BOTTOM}</label><br />
|
||||
<label><input type="radio" class="radio" name="mchat_archive_sort" value="1"<!-- IF MCHAT_ARCHIVE_SORT == 1 --> id="mchat_archive_sort" checked="checked"<!-- ENDIF --> /> {L_MCHAT_ARCHIVE_SORT_BOTTOM_TOP}</label><br />
|
||||
<label><input type="radio" class="radio" name="mchat_archive_sort" value="2"<!-- IF MCHAT_ARCHIVE_SORT == 2 --> id="mchat_archive_sort" checked="checked"<!-- ENDIF --> /> {L_MCHAT_ARCHIVE_SORT_USER}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{L_MCHAT_SETTINGS_MESSAGES}</legend>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"name": "dmzx/mchat",
|
||||
"type": "phpbb-extension",
|
||||
"description": "mChat Extension",
|
||||
"description": "mChat",
|
||||
"homepage": "https://github.com/kasimi/mChat",
|
||||
"version": "2.0.0",
|
||||
"time": "2016-10-20",
|
||||
"version": "2.0.1",
|
||||
"time": "2017-02-03",
|
||||
"keywords": ["phpbb", "extension", "mchat"],
|
||||
"license": "GPL-2.0",
|
||||
"authors": [
|
||||
@@ -39,10 +39,9 @@
|
||||
"phpbb/phpbb": ">=3.1.8-RC1,<3.3.0@dev"
|
||||
},
|
||||
"version-check": {
|
||||
"host": "kasimi.github.io",
|
||||
"directory": "/mChat",
|
||||
"filename": "mchat_version.json",
|
||||
"ssl": true
|
||||
"host": "www.phpbb.com",
|
||||
"directory": "/customise/db/extension/mchat_extension",
|
||||
"filename": "version_check"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +76,7 @@ services:
|
||||
- '@request'
|
||||
- '@user'
|
||||
- '@dmzx.mchat.settings'
|
||||
- '@dmzx.mchat.functions'
|
||||
- '%core.root_path%'
|
||||
- '%core.php_ext%'
|
||||
tags:
|
||||
|
||||
@@ -91,7 +91,8 @@ class acp_controller
|
||||
settings $settings,
|
||||
$mchat_table,
|
||||
$mchat_log_table,
|
||||
$root_path, $php_ext
|
||||
$root_path,
|
||||
$php_ext
|
||||
)
|
||||
{
|
||||
$this->functions = $functions;
|
||||
@@ -137,6 +138,9 @@ class acp_controller
|
||||
}
|
||||
}
|
||||
|
||||
// Remove leading & trailing | characters to not break allowed BBCodes
|
||||
$mchat_new_config['mchat_bbcode_disallowed'] = trim($mchat_new_config['mchat_bbcode_disallowed'], '|');
|
||||
|
||||
// Don't allow changing pruning settings for non founders
|
||||
if (!$is_founder)
|
||||
{
|
||||
@@ -194,8 +198,8 @@ class acp_controller
|
||||
{
|
||||
if ($is_founder && $this->request->is_set_post('mchat_purge') && $this->request->variable('mchat_purge_confirm', false) && check_form_key('acp_mchat'))
|
||||
{
|
||||
$this->db->sql_query('TRUNCATE TABLE ' . $this->mchat_table);
|
||||
$this->db->sql_query('TRUNCATE TABLE ' . $this->mchat_log_table);
|
||||
$this->db->sql_query('DELETE FROM ' . $this->mchat_table);
|
||||
$this->db->sql_query('DELETE FROM ' . $this->mchat_log_table);
|
||||
$this->cache->destroy('sql', $this->mchat_log_table);
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_MCHAT_TABLE_PURGED', false, array($this->user->data['username']));
|
||||
trigger_error($this->user->lang('MCHAT_PURGED') . adm_back_link($u_action));
|
||||
|
||||
@@ -308,9 +308,10 @@ class functions
|
||||
/**
|
||||
* Prune messages
|
||||
*
|
||||
* @param int|array $user_ids
|
||||
* @return array
|
||||
*/
|
||||
public function mchat_prune()
|
||||
public function mchat_prune($user_ids = array())
|
||||
{
|
||||
$prune_num = (int) $this->settings->cfg('mchat_prune_num');
|
||||
$prune_mode = (int) $this->settings->cfg('mchat_prune_mode');
|
||||
@@ -325,7 +326,17 @@ class functions
|
||||
'FROM' => array($this->mchat_table => 'm'),
|
||||
);
|
||||
|
||||
if ($this->settings->prune_modes[$prune_mode] === 'messages')
|
||||
if ($user_ids)
|
||||
{
|
||||
if (!is_array($user_ids))
|
||||
{
|
||||
$user_ids = array($user_ids);
|
||||
}
|
||||
|
||||
$sql_array['WHERE'] = $this->db->sql_in_set('m.user_id', $user_ids);
|
||||
$offset = 0;
|
||||
}
|
||||
else if ($this->settings->prune_modes[$prune_mode] === 'messages')
|
||||
{
|
||||
// Skip fixed number of messages, delete all others
|
||||
$sql_array['ORDER_BY'] = 'm.message_id DESC';
|
||||
@@ -355,10 +366,13 @@ class functions
|
||||
*
|
||||
* @event dmzx.mchat.prune_before
|
||||
* @var array prune_ids Array of message IDs that are about to be pruned
|
||||
* @var array user_ids Array of user IDs that are being pruned
|
||||
* @since 2.0.0-RC6
|
||||
* @changed 2.0.1 Added user_ids
|
||||
*/
|
||||
$vars = array(
|
||||
'prune_ids',
|
||||
'user_ids',
|
||||
);
|
||||
extract($this->dispatcher->trigger_event('dmzx.mchat.prune_before', compact($vars)));
|
||||
|
||||
@@ -368,8 +382,12 @@ class functions
|
||||
$this->db->sql_query('DELETE FROM ' . $this->mchat_log_table . ' WHERE ' . $this->db->sql_in_set('message_id', $prune_ids));
|
||||
$this->cache->destroy('sql', $this->mchat_log_table);
|
||||
|
||||
// Only add a log entry if message pruning was not triggered by user pruning
|
||||
if (!$user_ids)
|
||||
{
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_MCHAT_TABLE_PRUNED', false, array($this->user->data['username'], count($prune_ids)));
|
||||
}
|
||||
}
|
||||
|
||||
return $prune_ids;
|
||||
}
|
||||
@@ -672,7 +690,7 @@ class functions
|
||||
return array();
|
||||
}
|
||||
|
||||
$sql = 'SELECT p.post_id, p.post_subject, f.forum_name
|
||||
$sql = 'SELECT p.post_id, p.post_subject, f.forum_id, f.forum_name
|
||||
FROM ' . POSTS_TABLE . ' p, ' . FORUMS_TABLE . ' f
|
||||
WHERE p.forum_id = f.forum_id
|
||||
AND ' . $this->db->sql_in_set('p.post_id', $post_ids);
|
||||
@@ -687,6 +705,7 @@ class functions
|
||||
{
|
||||
$post_subjects[$row['post_id']] = array(
|
||||
'post_subject' => $row['post_subject'],
|
||||
'forum_id' => $row['forum_id'],
|
||||
'forum_name' => $row['forum_name'],
|
||||
);
|
||||
}
|
||||
@@ -812,14 +831,13 @@ class functions
|
||||
/**
|
||||
* Returns user ID & name of the specified message
|
||||
*
|
||||
* @param $message_id
|
||||
* @param int $message_id
|
||||
* @return array
|
||||
*/
|
||||
public function mchat_author_for_message($message_id)
|
||||
{
|
||||
$sql = 'SELECT u.user_id, u.username, m.message_time, m.forum_id, m.post_id
|
||||
$sql = 'SELECT m.user_id, m.message_time, m.post_id
|
||||
FROM ' . $this->mchat_table . ' m
|
||||
LEFT JOIN ' . USERS_TABLE . ' u ON m.user_id = u.user_id
|
||||
WHERE m.message_id = ' . (int) $message_id;
|
||||
$result = $this->db->sql_query($sql);
|
||||
$row = $this->db->sql_fetchrow($result);
|
||||
|
||||
@@ -423,7 +423,13 @@ class mchat
|
||||
|
||||
$author = $this->functions->mchat_author_for_message($message_id);
|
||||
|
||||
if (!$author || $author['post_id'] || !$this->auth_message('edit', $author['user_id'], $author['message_time']))
|
||||
if (!$author)
|
||||
{
|
||||
throw new http_exception(410, 'MCHAT_MESSAGE_DELETED');
|
||||
}
|
||||
|
||||
// If post_id is not 0 it's a notification and notifications can't be edited
|
||||
if ($author['post_id'] || !$this->auth_message('edit', $author['user_id'], $author['message_time']))
|
||||
{
|
||||
throw new http_exception(403, 'NO_AUTH_OPERATION');
|
||||
}
|
||||
@@ -483,7 +489,12 @@ class mchat
|
||||
|
||||
$author = $this->functions->mchat_author_for_message($message_id);
|
||||
|
||||
if (!$author || !$this->auth_message('delete', $author['user_id'], $author['message_time']))
|
||||
if (!$author)
|
||||
{
|
||||
throw new http_exception(410, 'MCHAT_MESSAGE_DELETED');
|
||||
}
|
||||
|
||||
if (!$this->auth_message('delete', $author['user_id'], $author['message_time']))
|
||||
{
|
||||
throw new http_exception(403, 'NO_AUTH_OPERATION');
|
||||
}
|
||||
@@ -797,7 +808,7 @@ class mchat
|
||||
'MCHAT_ARCHIVE' => $this->auth->acl_get('u_mchat_archive'),
|
||||
'MCHAT_RULES' => $this->user->lang('MCHAT_RULES_MESSAGE') || $this->settings->cfg('mchat_rules'),
|
||||
'MCHAT_WHOIS_REFRESH_EXPLAIN' => $this->user->lang('MCHAT_WHO_IS_REFRESH_EXPLAIN', $this->settings->cfg('mchat_whois_refresh')),
|
||||
'MCHAT_SESSION_TIMELEFT' => $this->user->lang('MCHAT_SESSION_ENDS', gmdate('H:i:s', (int) $this->settings->cfg('mchat_timeout'))),
|
||||
'MCHAT_SESSION_TIMELEFT' => $this->user->lang('MCHAT_SESSION_ENDS', gmdate($this->settings->cfg('mchat_timeout') >= 3600 ? 'H:i:s' : 'i:s', $this->settings->cfg('mchat_timeout'))),
|
||||
'MCHAT_LOG_ID' => $this->functions->get_latest_log_id(),
|
||||
'MCHAT_STATIC_MESS' => htmlspecialchars_decode($static_message),
|
||||
'A_MCHAT_MESS_LONG' => addslashes($this->user->lang('MCHAT_MESS_LONG', $this->settings->cfg('mchat_max_message_lngth'))),
|
||||
@@ -835,7 +846,7 @@ class mchat
|
||||
{
|
||||
$this->template->assign_block_vars('mchaturl', array(
|
||||
'ACTION' => $action,
|
||||
'URL' => $this->helper->route('dmzx_mchat_action_' . $action . '_controller'),
|
||||
'URL' => $this->helper->route('dmzx_mchat_action_' . $action . '_controller', array(), false),
|
||||
'IS_LAST' => $i + 1 === count($actions),
|
||||
));
|
||||
}
|
||||
@@ -926,18 +937,15 @@ class mchat
|
||||
$md_manager = $this->extension_manager->create_extension_metadata_manager('dmzx/mchat', $this->template);
|
||||
$meta = $md_manager->get_metadata();
|
||||
|
||||
$author_names = array();
|
||||
$author_homepages = array();
|
||||
|
||||
foreach (array_slice($meta['authors'], 0, 2) as $author)
|
||||
{
|
||||
$author_names[] = $author['name'];
|
||||
$author_homepages[] = sprintf('<a href="%1$s" title="%2$s">%2$s</a>', $author['homepage'], $author['name']);
|
||||
}
|
||||
|
||||
$this->template->assign_vars(array(
|
||||
'MCHAT_DISPLAY_NAME' => $meta['extra']['display-name'],
|
||||
'MCHAT_AUTHOR_NAMES' => implode(' & ', $author_names),
|
||||
'MCHAT_AUTHOR_HOMEPAGES' => implode(' & ', $author_homepages),
|
||||
));
|
||||
}
|
||||
@@ -1004,8 +1012,24 @@ class mchat
|
||||
return;
|
||||
}
|
||||
|
||||
// Reverse the array if messages appear at the bottom
|
||||
if ($page !== 'archive' && !$this->settings->cfg('mchat_message_top'))
|
||||
// At this point the rows are sorted by ID bottom to top.
|
||||
// We need to reverse the array if they need to be sorted top to bottom.
|
||||
$reverse = false;
|
||||
$mchat_message_top = $this->settings->cfg('mchat_message_top');
|
||||
if ($page === 'archive')
|
||||
{
|
||||
$mchat_archive_sort = $this->settings->cfg('mchat_archive_sort');
|
||||
if ($mchat_archive_sort == settings::ARCHIVE_SORT_TOP_BOTTOM || $mchat_archive_sort == settings::ARCHIVE_SORT_USER && !$mchat_message_top)
|
||||
{
|
||||
$reverse = true;
|
||||
}
|
||||
}
|
||||
else if (!$mchat_message_top)
|
||||
{
|
||||
$reverse = true;
|
||||
}
|
||||
|
||||
if ($reverse)
|
||||
{
|
||||
$rows = array_reverse($rows);
|
||||
}
|
||||
@@ -1021,12 +1045,12 @@ class mchat
|
||||
$user_avatars = array();
|
||||
|
||||
// Cache avatars
|
||||
$display_avatar = $this->display_avatars();
|
||||
foreach ($rows as $row)
|
||||
{
|
||||
if (!isset($user_avatars[$row['user_id']]))
|
||||
{
|
||||
$display_avatar = $this->display_avatars() && $row['user_avatar'];
|
||||
$user_avatars[$row['user_id']] = !$display_avatar ? '' : phpbb_get_user_avatar(array(
|
||||
$user_avatars[$row['user_id']] = !$display_avatar || !$row['user_avatar'] ? '' : phpbb_get_user_avatar(array(
|
||||
'avatar' => $row['user_avatar'],
|
||||
'avatar_type' => $row['user_avatar_type'],
|
||||
'avatar_width' => $row['user_avatar_width'] >= $row['user_avatar_height'] ? 40 : 0,
|
||||
@@ -1056,7 +1080,16 @@ class mchat
|
||||
|
||||
$message_age = time() - $row['message_time'];
|
||||
$minutes_ago = $this->get_minutes_ago($message_age);
|
||||
$absolute_datetime = $this->user->format_date($row['message_time'], $this->settings->cfg('mchat_date'), true);
|
||||
// If relative time is selected, also display "today" / "yesterday", else display absolute time.
|
||||
if ($this->settings->cfg('mchat_relative_time'))
|
||||
{
|
||||
$datetime = $this->user->format_date($row['message_time'], $this->settings->cfg('mchat_date'), false);
|
||||
}
|
||||
else
|
||||
{
|
||||
$datetime = $this->user->format_date($row['message_time'], $this->settings->cfg('mchat_date'), true);
|
||||
}
|
||||
|
||||
$is_poster = $row['user_id'] != ANONYMOUS && $this->user->data['user_id'] == $row['user_id'];
|
||||
|
||||
@@ -1080,7 +1113,7 @@ class mchat
|
||||
'MCHAT_U_PERMISSIONS' => append_sid("{$board_url}{$this->root_path}adm/index.{$this->php_ext}", 'i=permissions&mode=setting_user_global&user_id%5B0%5D=' . $row['user_id'], true, $this->user->session_id),
|
||||
'MCHAT_MESSAGE' => generate_text_for_display($row['message'], $row['bbcode_uid'], $row['bbcode_bitfield'], $row['bbcode_options']),
|
||||
'MCHAT_TIME' => $minutes_ago === -1 ? $datetime : $this->user->lang('MCHAT_MINUTES_AGO', $minutes_ago),
|
||||
'MCHAT_DATETIME' => $datetime,
|
||||
'MCHAT_DATETIME' => $absolute_datetime,
|
||||
'MCHAT_MINUTES_AGO' => $minutes_ago,
|
||||
'MCHAT_RELATIVE_UPDATE' => 60 - $message_age % 60,
|
||||
'MCHAT_MESSAGE_TIME' => $row['message_time'],
|
||||
@@ -1215,8 +1248,12 @@ class mchat
|
||||
'#' => 'p' . $row['post_id'],
|
||||
));
|
||||
|
||||
// We prefer $post_data because it was fetched from the forums table just now.
|
||||
// $row might contain outdated data if a post was moved to a new forum.
|
||||
$forum_id = isset($post_data['forum_id']) ? $post_data['forum_id'] : $row['forum_id'];
|
||||
|
||||
$viewforum_url = append_sid($board_url . 'viewforum.' . $this->php_ext, array(
|
||||
'f' => $row['forum_id'],
|
||||
'f' => $forum_id,
|
||||
));
|
||||
|
||||
if ($post_data)
|
||||
@@ -1491,7 +1528,8 @@ class mchat
|
||||
// Must not exceed character limit
|
||||
if ($this->settings->cfg('mchat_max_message_lngth'))
|
||||
{
|
||||
if (utf8_strlen($message) > $this->settings->cfg('mchat_max_message_lngth'))
|
||||
$message_without_entities = htmlspecialchars_decode($message, ENT_COMPAT);
|
||||
if (utf8_strlen($message_without_entities) > $this->settings->cfg('mchat_max_message_lngth'))
|
||||
{
|
||||
throw new http_exception(400, 'MCHAT_MESS_LONG', array($this->settings->cfg('mchat_max_message_lngth')));
|
||||
}
|
||||
|
||||
@@ -68,6 +68,13 @@ class settings
|
||||
/** @var bool */
|
||||
public $is_phpbb32;
|
||||
|
||||
/**
|
||||
* Possible values of the global setting mchat_archive_sort
|
||||
*/
|
||||
const ARCHIVE_SORT_TOP_BOTTOM = 0;
|
||||
const ARCHIVE_SORT_BOTTOM_TOP = 1;
|
||||
const ARCHIVE_SORT_USER = 2;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@@ -98,6 +105,7 @@ class settings
|
||||
public function initialize_global_settings()
|
||||
{
|
||||
$global_settings = array(
|
||||
'mchat_archive_sort' => array('default' => self::ARCHIVE_SORT_BOTTOM_TOP),
|
||||
'mchat_bbcode_disallowed' => array('default' => '', 'validation' => array('string', false, 0, 255)),
|
||||
'mchat_custom_height' => array('default' => 350, 'validation' => array('num', false, 50, 1000)),
|
||||
'mchat_custom_page' => array('default' => 1),
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
namespace dmzx\mchat\event;
|
||||
|
||||
use dmzx\mchat\core\functions;
|
||||
use dmzx\mchat\core\settings;
|
||||
use phpbb\auth\auth;
|
||||
use phpbb\request\request_interface;
|
||||
@@ -33,6 +34,9 @@ class acp_listener implements EventSubscriberInterface
|
||||
/** @var settings */
|
||||
protected $settings;
|
||||
|
||||
/** @var functions */
|
||||
protected $functions;
|
||||
|
||||
/** @var string */
|
||||
protected $root_path;
|
||||
|
||||
@@ -46,6 +50,7 @@ class acp_listener implements EventSubscriberInterface
|
||||
* @param request_interface $request
|
||||
* @param user $user
|
||||
* @param settings $settings
|
||||
* @param functions $functions
|
||||
* @param string $root_path
|
||||
* @param string $php_ext
|
||||
*/
|
||||
@@ -54,6 +59,7 @@ class acp_listener implements EventSubscriberInterface
|
||||
request_interface $request,
|
||||
user $user,
|
||||
settings $settings,
|
||||
functions $functions,
|
||||
$root_path,
|
||||
$php_ext
|
||||
)
|
||||
@@ -62,6 +68,7 @@ class acp_listener implements EventSubscriberInterface
|
||||
$this->request = $request;
|
||||
$this->user = $user;
|
||||
$this->settings = $settings;
|
||||
$this->functions = $functions;
|
||||
$this->root_path = $root_path;
|
||||
$this->php_ext = $php_ext;
|
||||
}
|
||||
@@ -75,6 +82,8 @@ class acp_listener implements EventSubscriberInterface
|
||||
'core.permissions' => 'permissions',
|
||||
'core.acp_users_prefs_modify_sql' => 'acp_users_prefs_modify_sql',
|
||||
'core.acp_users_prefs_modify_template_data' => 'acp_users_prefs_modify_template_data',
|
||||
'core.acp_users_overview_before' => 'acp_users_overview_before',
|
||||
'core.delete_user_after' => 'delete_user_after',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -200,4 +209,28 @@ class acp_listener implements EventSubscriberInterface
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Event $event
|
||||
*/
|
||||
public function acp_users_overview_before($event)
|
||||
{
|
||||
$this->user->add_lang_ext('dmzx/mchat', 'mchat_acp');
|
||||
|
||||
$this->template->assign_vars(array(
|
||||
'L_RETAIN_POSTS' => $this->user->lang('MCHAT_RETAIN_MESSAGES', $this->user->lang('RETAIN_POSTS')),
|
||||
'L_DELETE_POSTS' => $this->user->lang('MCHAT_DELETE_MESSAGES', $this->user->lang('DELETE_POSTS')),
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Event $event
|
||||
*/
|
||||
public function delete_user_after($event)
|
||||
{
|
||||
if ($event['mode'] == 'remove')
|
||||
{
|
||||
$this->functions->mchat_prune($event['user_ids']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ $lang = array_merge($lang, array(
|
||||
'MCHAT_NOJAVASCRIPT' => 'Please enable JavaScript to use mChat.',
|
||||
'MCHAT_NOMESSAGE' => 'No messages',
|
||||
'MCHAT_NOMESSAGEINPUT' => 'You have not entered a message',
|
||||
'MCHAT_MESSAGE_DELETED' => 'This message has been deleted.',
|
||||
'MCHAT_OK' => 'OK',
|
||||
'MCHAT_PAUSE' => 'Paused',
|
||||
'MCHAT_PERMISSIONS' => 'Change user’s permissions',
|
||||
@@ -83,6 +84,7 @@ $lang = array_merge($lang, array(
|
||||
'MCHAT_CHARACTER_COUNT' => '<strong>{current}</strong> characters',
|
||||
'MCHAT_CHARACTER_COUNT_LIMIT' => '<strong>{current}</strong> out of {max} characters',
|
||||
'MCHAT_SESSION_ENDS_JS' => 'Chat session ends in {timeleft}',
|
||||
'MCHAT_MENTION' => ' @{username} ',
|
||||
|
||||
// Custom translations for administrators
|
||||
'MCHAT_RULES_MESSAGE' => '',
|
||||
|
||||
@@ -62,7 +62,7 @@ $lang = array_merge($lang, array(
|
||||
'MCHAT_ACP_GLOBALUSERSETTINGS_TITLE' => 'mChat Global user settings',
|
||||
'MCHAT_VERSION' => 'Version',
|
||||
'MCHAT_RULES' => 'Rules',
|
||||
'MCHAT_RULES_EXPLAIN' => 'Enter the rules of the forum here. HTML code is allowed. <em>You are limited to 255 characters.</em><br />This message can be translated: edit the MCHAT_RULES_MESSAGE language key in /ext/dmzx/mchat/language/XX/mchat.php.',
|
||||
'MCHAT_RULES_EXPLAIN' => 'Enter the rules here. HTML code is allowed. <em>You are limited to 255 characters.</em><br />This message can be translated: edit the MCHAT_RULES_MESSAGE language key in /ext/dmzx/mchat/language/XX/mchat.php.',
|
||||
'MCHAT_CONFIG_SAVED' => 'mChat configuration has been updated',
|
||||
'MCHAT_AVATARS' => 'Display avatars',
|
||||
'MCHAT_AVATARS_EXPLAIN' => 'If set to yes, resized user avatars will be displayed',
|
||||
@@ -91,14 +91,17 @@ $lang = array_merge($lang, array(
|
||||
'MCHAT_MESSAGE_NUM_INDEX_EXPLAIN' => '<em>You are limited from 5 to 50. Default is 10.</em>',
|
||||
'MCHAT_MESSAGE_NUM_ARCHIVE' => 'Number of messages to display on the archive page',
|
||||
'MCHAT_MESSAGE_NUM_ARCHIVE_EXPLAIN' => 'The maximum number of messages to show per page on the archive page.<br /><em>You are limited from 10 to 100. Default is 25.</em>',
|
||||
'MCHAT_ARCHIVE_SORT' => 'Message sorting',
|
||||
'MCHAT_ARCHIVE_SORT_TOP_BOTTOM' => 'Always sort messages top to bottom',
|
||||
'MCHAT_ARCHIVE_SORT_BOTTOM_TOP' => 'Always sort messages bottom to top',
|
||||
'MCHAT_ARCHIVE_SORT_USER' => 'Sort messages depending on the user’s <em>Location of new messages</em> preference',
|
||||
'MCHAT_FLOOD_TIME' => 'Flood time',
|
||||
'MCHAT_FLOOD_TIME_EXPLAIN' => 'The number of seconds a user must wait before posting another message in the chat.<br /><em>You are limited from 0 to 60 seconds. Default is 0. Set to 0 to disable.</em>',
|
||||
'MCHAT_EDIT_DELETE_LIMIT' => 'Time limit for editing and deleting messages',
|
||||
'MCHAT_EDIT_DELETE_LIMIT_EXPLAIN' => 'Messages older than the specified number of seconds cannot be edited or deleted by the author any more.<br />Users who have <em>edit/delete permission as well as moderator permission are exempt</em> from this time limit.<br />Set to 0 to allow unlimited editing and deleting.',
|
||||
'MCHAT_MAX_MESSAGE_LENGTH' => 'Maximum message length',
|
||||
'MCHAT_MAX_MESSAGE_LENGTH_EXPLAIN' => 'Maximum number of characters allowed per message posted.<br /><em>You are limited from 0 to 1000. Default is 500. Set to 0 to disable.</em>',
|
||||
'MCHAT_CUSTOM_PAGE' => 'Enable custom Page',
|
||||
'MCHAT_CUSTOM_PAGE_EXPLAIN' => 'Allow the use of the custom page',
|
||||
'MCHAT_CUSTOM_PAGE' => 'Enable custom page',
|
||||
'MCHAT_CUSTOM_HEIGHT' => 'Custom page height',
|
||||
'MCHAT_CUSTOM_HEIGHT_EXPLAIN' => 'The height of the chat box in pixels on the custom page.<br /><em>You are limited from 50 to 1000. Default is 350.</em>',
|
||||
'MCHAT_BBCODES_DISALLOWED' => 'Disallowed bbcodes',
|
||||
@@ -119,6 +122,10 @@ $lang = array_merge($lang, array(
|
||||
'MCHAT_PURGE_CONFIRM' => 'Confirm deleting all messages',
|
||||
'MCHAT_PURGED' => 'All mChat messages have been successfully deleted',
|
||||
|
||||
// '%1$s' contains 'Retain posts' and 'Delete posts' respectively
|
||||
'MCHAT_RETAIN_MESSAGES' => '%1$s and retain mChat messages',
|
||||
'MCHAT_DELETE_MESSAGES' => '%1$s and delete mChat messages',
|
||||
|
||||
// Error reporting
|
||||
'TOO_LONG_MCHAT_BBCODE_DISALLOWED' => 'The disallowed bbcodes value is too long.',
|
||||
'TOO_SMALL_MCHAT_CUSTOM_HEIGHT' => 'The custom height value is too small.',
|
||||
@@ -145,5 +152,5 @@ $lang = array_merge($lang, array(
|
||||
'TOO_SMALL_MCHAT_WHOIS_REFRESH' => 'The whois refresh value is too small.',
|
||||
'TOO_LARGE_MCHAT_WHOIS_REFRESH' => 'The whois refresh value is too large.',
|
||||
|
||||
'MCHAT_30X_REMNANTS' => 'The installation as been aborted.<br />There are remnant modules from the mChat MOD for phpBB 3.0.x in the database. The mChat extension does not work correctly with these modules present.<br />You need to entirely uninstall the mChat MOD before being able to install the mChat extension. Specifically, the modules with the following IDs need to be deleted from the %1$smodules table: %2$s',
|
||||
'MCHAT_30X_REMNANTS' => 'The installation has been aborted.<br />There are remnant modules from the mChat MOD for phpBB 3.0.x in the database. The mChat extension does not work correctly with these modules present.<br />You need to entirely uninstall the mChat MOD before being able to install the mChat extension. Specifically, the modules with the following IDs need to be deleted from the %1$smodules table: %2$s',
|
||||
));
|
||||
|
||||
@@ -60,7 +60,7 @@ $lang = array_merge($lang, array(
|
||||
'ACL_U_MCHAT_LOCATION' => 'Can customise <em>Location of mChat on the index page</em>',
|
||||
'ACL_U_MCHAT_MESSAGE_TOP' => 'Can customise <em>Location of new chat messages</em>',
|
||||
'ACL_U_MCHAT_PAUSE_ON_INPUT' => 'Can customise <em>Pause on input</em>',
|
||||
'ACL_U_MCHAT_POSTS' => 'Can customise <em>Display new post</em>',
|
||||
'ACL_U_MCHAT_POSTS' => 'Can customise <em>Display new posts</em>',
|
||||
'ACL_U_MCHAT_RELATIVE_TIME' => 'Can customise <em>Display relative time</em>',
|
||||
'ACL_U_MCHAT_SOUND' => 'Can customise <em>Play sounds</em>',
|
||||
'ACL_U_MCHAT_WHOIS_INDEX' => 'Can customise <em>Display who is chatting below the chat</em>',
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
namespace dmzx\mchat\migrations;
|
||||
|
||||
use \phpbb\db\migration\migration;
|
||||
use phpbb\db\migration\migration;
|
||||
|
||||
class mchat_2_0_0 extends migration
|
||||
{
|
||||
|
||||
@@ -135,28 +135,39 @@ class mchat_2_0_0_rc3 extends migration
|
||||
array('module.add', array(
|
||||
'acp',
|
||||
'ACP_CAT_DOT_MODS',
|
||||
'ACP_CAT_MCHAT'
|
||||
'ACP_CAT_MCHAT',
|
||||
)),
|
||||
|
||||
// Add ACP preferences module
|
||||
array('module.add', array(
|
||||
'acp',
|
||||
'ACP_CAT_MCHAT',
|
||||
array('module_basename' => '\dmzx\mchat\acp\acp_mchat_module'),
|
||||
array(
|
||||
'module_basename' => '\dmzx\mchat\acp\acp_mchat_module',
|
||||
'modes' => array(
|
||||
'globalsettings',
|
||||
'globalusersettings',
|
||||
),
|
||||
),
|
||||
)),
|
||||
|
||||
// Add UCP category
|
||||
array('module.add', array(
|
||||
'ucp',
|
||||
0,
|
||||
'UCP_MCHAT_CONFIG'
|
||||
'UCP_MCHAT_CONFIG',
|
||||
)),
|
||||
|
||||
// Add UCP preferences module
|
||||
array('module.add', array(
|
||||
'ucp',
|
||||
'UCP_MCHAT_CONFIG',
|
||||
array('module_basename' => '\dmzx\mchat\ucp\ucp_mchat_module'),
|
||||
array(
|
||||
'module_basename' => '\dmzx\mchat\ucp\ucp_mchat_module',
|
||||
'modes' => array(
|
||||
'configuration',
|
||||
),
|
||||
),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
32
migrations/mchat_2_0_1.php
Normal file
32
migrations/mchat_2_0_1.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* @package phpBB Extension - mChat
|
||||
* @copyright (c) 2017 kasimi - https://kasimi.net
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
namespace dmzx\mchat\migrations;
|
||||
|
||||
use dmzx\mchat\core\settings;
|
||||
use phpbb\db\migration\migration;
|
||||
|
||||
class mchat_2_0_1 extends migration
|
||||
{
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\dmzx\mchat\migrations\mchat_2_0_0',
|
||||
);
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.update', array('mchat_version', '2.0.1')),
|
||||
array('config.add', array('mchat_archive_sort', settings::ARCHIVE_SORT_BOTTOM_TOP)),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1,2 @@
|
||||
<!-- INCLUDECSS @dmzx_mchat/mchat.css -->
|
||||
<!-- INCLUDECSS @dmzx_mchat/mchat_custom.css -->
|
||||
11
styles/Modern-silver/theme/mchat_custom.css
Normal file
11
styles/Modern-silver/theme/mchat_custom.css
Normal file
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
*
|
||||
* @package phpBB Extension - mChat
|
||||
* @copyright (c) 2016 kasimi - https://kasimi.net
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
.mchat-wrapper {
|
||||
height: 100%;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -4,7 +4,7 @@
|
||||
* @copyright (c) 2009 Shapoval Andrey Vladimirovich (AllCity) ~ http://allcity.net.ru/
|
||||
* @copyright (c) 2013 Rich McGirr (RMcGirr83) http://rmcgirr83.org
|
||||
* @copyright (c) 2015 dmzx - http://www.dmzx-web.net
|
||||
* @copyright (c) 2016 kasimi - mail@kasimi.net
|
||||
* @copyright (c) 2016 kasimi - https://kasimi.net
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
*
|
||||
*/
|
||||
@@ -72,11 +72,35 @@ jQuery.fn.reverse = function(reverse) {
|
||||
return reverse === 'undefined' || reverse ? jQuery(this.toArray().reverse()) : this;
|
||||
};
|
||||
|
||||
function StorageWrapper(storage, prefix) {
|
||||
this.prefix = prefix;
|
||||
try {
|
||||
this.storage = window[storage];
|
||||
this.storage.setItem(prefix, prefix);
|
||||
this.storage.removeItem(prefix);
|
||||
} catch (e) {
|
||||
this.storage = false;
|
||||
}
|
||||
}
|
||||
|
||||
StorageWrapper.prototype.get = function(key) {
|
||||
return this.storage && this.storage.getItem(this.prefix + key);
|
||||
};
|
||||
|
||||
StorageWrapper.prototype.set = function(key, value) {
|
||||
this.storage && this.storage.setItem(this.prefix + key, value);
|
||||
};
|
||||
|
||||
StorageWrapper.prototype.remove = function(key) {
|
||||
return this.storage && this.storage.removeItem(this.prefix + key);
|
||||
};
|
||||
|
||||
jQuery(function($) {
|
||||
|
||||
"use strict";
|
||||
|
||||
$.extend(mChat, {
|
||||
storage: new StorageWrapper('localStorage', mChat.cookie + 'mchat_'),
|
||||
ajaxRequest: function(mode, sendHiddenFields, data) {
|
||||
var deferred = $.Deferred();
|
||||
if (sendHiddenFields) {
|
||||
@@ -88,10 +112,17 @@ jQuery(function($) {
|
||||
timeout: Math.min(mChat.refreshTime, 10000),
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
data: data
|
||||
}).done(function(json, status, xhr) {
|
||||
var data = {
|
||||
data: data,
|
||||
additionalData: {
|
||||
mode: mode,
|
||||
deferred: deferred
|
||||
}
|
||||
}).done(mChat.ajaxDone).fail(deferred.reject);
|
||||
return deferred.promise().fail(mChat.ajaxFail);
|
||||
},
|
||||
ajaxDone: function(json, status, xhr) {
|
||||
var data = {
|
||||
mode: this.additionalData.mode,
|
||||
json: json,
|
||||
status: status,
|
||||
xhr: xhr,
|
||||
@@ -99,14 +130,14 @@ jQuery(function($) {
|
||||
};
|
||||
$(mChat).trigger('mchat_ajax_done_before', [data]);
|
||||
if (data.handle) {
|
||||
if (json[mode]) {
|
||||
deferred.resolve(data.json, data.status, data.xhr);
|
||||
if (json[this.additionalData.mode]) {
|
||||
this.additionalData.deferred.resolve(data.json, data.status, data.xhr);
|
||||
} else {
|
||||
deferred.reject(data.xhr, data.status, mChat.lang.parserErr);
|
||||
this.additionalData.deferred.reject(data.xhr, data.status, mChat.lang.parserErr);
|
||||
}
|
||||
}
|
||||
}).fail(deferred.reject);
|
||||
return deferred.promise().fail(function(xhr, textStatus, errorThrown) {
|
||||
},
|
||||
ajaxFail: function(xhr, textStatus, errorThrown) {
|
||||
if (mChat.pageIsUnloading) {
|
||||
return;
|
||||
}
|
||||
@@ -114,7 +145,7 @@ jQuery(function($) {
|
||||
console.log('AJAX error. status: ' + textStatus + ', message: ' + errorThrown + ' (' + xhr.responseText + ')');
|
||||
}
|
||||
var data = {
|
||||
mode: mode,
|
||||
mode: this.additionalData.mode,
|
||||
xhr: xhr,
|
||||
textStatus: textStatus,
|
||||
errorThrown: errorThrown,
|
||||
@@ -140,22 +171,19 @@ jQuery(function($) {
|
||||
phpbb.alert(mChat.lang.err, responseText);
|
||||
}
|
||||
data.updateSession();
|
||||
});
|
||||
},
|
||||
sound: function(file) {
|
||||
if (!mChat.pageIsUnloading && !localStorage.getItem(mChat.cookie + 'mchat_no_sound')) {
|
||||
var data = {
|
||||
audio: mChat.cached('sound-' + file).get(0),
|
||||
file: file,
|
||||
play: true
|
||||
play: !mChat.pageIsUnloading && mChat.cached('user-sound').is(':checked')
|
||||
};
|
||||
$(mChat).trigger('mchat_sound_before', [data]);
|
||||
if (data.play && data.audio.duration) {
|
||||
if (data.play && data.audio && data.audio.duration) {
|
||||
data.audio.pause();
|
||||
data.audio.currentTime = 0;
|
||||
data.audio.play();
|
||||
}
|
||||
}
|
||||
},
|
||||
titleAlert: function() {
|
||||
var data = {
|
||||
@@ -171,9 +199,9 @@ jQuery(function($) {
|
||||
var $elem = mChat.cached(name);
|
||||
$elem.stop().slideToggle(200, function() {
|
||||
if ($elem.is(':visible')) {
|
||||
localStorage.setItem(mChat.cookie + 'mchat_show_' + name, 'yes');
|
||||
mChat.storage.set('show_' + name, 'yes');
|
||||
} else {
|
||||
localStorage.removeItem(mChat.cookie + 'mchat_show_' + name);
|
||||
mChat.storage.remove('show_' + name);
|
||||
}
|
||||
});
|
||||
},
|
||||
@@ -214,15 +242,15 @@ jQuery(function($) {
|
||||
mChat.pauseSession();
|
||||
var originalInputValue = mChat.cached('input').val();
|
||||
var inputValue = originalInputValue;
|
||||
var color = localStorage.getItem(mChat.cookie + 'mchat_color');
|
||||
var color = mChat.storage.get('color');
|
||||
if (color && inputValue.indexOf('[color=') === -1) {
|
||||
inputValue = '[color=#' + color + '] ' + inputValue + ' [/color]';
|
||||
}
|
||||
mChat.cached('input').val('').focus();
|
||||
mChat.cached('input').val('').trigger('update.autogrow').focus();
|
||||
mChat.refresh(inputValue).done(function() {
|
||||
mChat.resetSession();
|
||||
}).fail(function() {
|
||||
mChat.cached('input').val(originalInputValue);
|
||||
mChat.cached('input').val(originalInputValue).trigger('update.autogrow');
|
||||
}).always(function() {
|
||||
mChat.cached('add').prop('disabled', false);
|
||||
setTimeout(function() {
|
||||
@@ -320,7 +348,7 @@ jQuery(function($) {
|
||||
handleWhoisResponse: function(json) {
|
||||
var $whois = $(json.whois);
|
||||
var $userlist = $whois.find('#mchat-userlist');
|
||||
if (localStorage.getItem(mChat.cookie + 'mchat_show_userlist')) {
|
||||
if (mChat.storage.get('show_userlist')) {
|
||||
$userlist.show();
|
||||
}
|
||||
mChat.cached('whois').replaceWith($whois);
|
||||
@@ -484,8 +512,9 @@ jQuery(function($) {
|
||||
var selector = '.mchat-time[data-mchat-relative-update]';
|
||||
clearInterval($message.find(selector).addBack(selector).data('mchat-relative-interval'));
|
||||
},
|
||||
timeLeftRegex: /\d\d:(\d\d:\d\d)/,
|
||||
timeLeft: function(sessionTime) {
|
||||
return (new Date(sessionTime * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
|
||||
return (new Date(sessionTime * 1000)).toUTCString().match(mChat.timeLeftRegex)[mChat.timeout >= 3600000 ? 0 : 1];
|
||||
},
|
||||
countDown: function() {
|
||||
mChat.sessionTime -= 1;
|
||||
@@ -562,25 +591,30 @@ jQuery(function($) {
|
||||
mention: function() {
|
||||
var $container = $(this).closest('.mchat-message');
|
||||
var username = $container.data('mchat-username');
|
||||
if (mChat.allowBBCodes) {
|
||||
var usercolor = $container.data('mchat-usercolor');
|
||||
var profileUrl = $container.find(".mchat-message-header a[class^='username']").prop('href');
|
||||
if (usercolor) {
|
||||
username = '[b][color=' + usercolor + ']' + username + '[/color][/b]';
|
||||
} else if (mChat.allowBBCodes) {
|
||||
username = '[b]' + username + '[/b]';
|
||||
username = '[url=' + profileUrl + '][b][color=' + usercolor + ']' + username + '[/color][/b][/url]';
|
||||
} else {
|
||||
username = '[url=' + profileUrl + '][b]' + username + '[/b][/url]';
|
||||
}
|
||||
insert_text('@ ' + username + ', ');
|
||||
}
|
||||
insert_text(mChat.lang.mention.format({username: username}));
|
||||
},
|
||||
quote: function() {
|
||||
var $container = $(this).closest('.mchat-message');
|
||||
var username = $container.data('mchat-username');
|
||||
var quote = $container.data('mchat-message');
|
||||
insert_text('[quote="' + username + '"] ' + quote + '[/quote]');
|
||||
mChat.cached('input').trigger('update.autogrow');
|
||||
},
|
||||
like: function() {
|
||||
var $container = $(this).closest('.mchat-message');
|
||||
var username = $container.data('mchat-username');
|
||||
var quote = $container.data('mchat-message');
|
||||
insert_text('[i]' + mChat.lang.likes + '[/i][quote="' + username + '"] ' + quote + '[/quote]');
|
||||
mChat.cached('input').trigger('update.autogrow');
|
||||
},
|
||||
ip: function() {
|
||||
popup(this.href, 750, 500);
|
||||
@@ -618,13 +652,13 @@ jQuery(function($) {
|
||||
}, 1);
|
||||
}
|
||||
|
||||
mChat.cached('user-sound').prop('checked', mChat.playSound && !localStorage.getItem(mChat.cookie + 'mchat_no_sound')).change(function() {
|
||||
mChat.cached('user-sound').prop('checked', mChat.playSound && !mChat.storage.get('no_sound')).change(function() {
|
||||
if (this.checked) {
|
||||
localStorage.removeItem(mChat.cookie + 'mchat_no_sound');
|
||||
mChat.storage.remove('no_sound');
|
||||
} else {
|
||||
localStorage.setItem(mChat.cookie + 'mchat_no_sound', 'yes');
|
||||
mChat.storage.set('no_sound', 'yes');
|
||||
}
|
||||
}).change();
|
||||
});
|
||||
|
||||
$.each(mChat.removeBBCodes.split('|'), function(i, bbcode) {
|
||||
var bbCodeClass = '.bbcode-' + bbcode.replaceMany({
|
||||
@@ -639,7 +673,7 @@ jQuery(function($) {
|
||||
$('#bbpalette,#abbc3_bbpalette,#color_wheel').prop('onclick', null).attr('data-mchat-toggle', 'colour');
|
||||
|
||||
$.each(['userlist', 'smilies', 'bbcodes', 'colour'], function(i, elem) {
|
||||
if (localStorage.getItem(mChat.cookie + 'mchat_show_' + elem)) {
|
||||
if (mChat.storage.get('show_' + elem)) {
|
||||
mChat.cached(elem).toggle();
|
||||
}
|
||||
});
|
||||
@@ -693,17 +727,17 @@ jQuery(function($) {
|
||||
e.stopImmediatePropagation();
|
||||
var $this = $(this);
|
||||
var newColor = $this.data('color');
|
||||
if (localStorage.getItem(mChat.cookie + 'mchat_color') === newColor) {
|
||||
localStorage.removeItem(mChat.cookie + 'mchat_color');
|
||||
if (mChat.storage.get('color') === newColor) {
|
||||
mChat.storage.remove('color');
|
||||
} else {
|
||||
localStorage.setItem(mChat.cookie + 'mchat_color', newColor);
|
||||
mChat.storage.set('color', newColor);
|
||||
mChat.cached('colour').find('.colour-palette a').removeClass('remember-color');
|
||||
}
|
||||
$this.toggleClass('remember-color');
|
||||
}
|
||||
});
|
||||
|
||||
var color = localStorage.getItem(mChat.cookie + 'mchat_color');
|
||||
var color = mChat.storage.get('color');
|
||||
if (color) {
|
||||
mChat.cached('colour').find('.colour-palette a[data-color="' + color + '"]').addClass('remember-color');
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
delConfirm : '{LA_MCHAT_DELCONFIRM}',
|
||||
sessOut : '{LA_MCHAT_SESSION_OUT}',
|
||||
sessEnds : '{LA_MCHAT_SESSION_ENDS_JS}',
|
||||
mention : '{LA_MCHAT_MENTION}',
|
||||
refreshYes : '{A_MCHAT_REFRESH_YES}',
|
||||
refreshNo : '{LA_MCHAT_REFRESH_NO}',
|
||||
charCount : '<!-- IF MCHAT_MESSAGE_LNGTH -->{LA_MCHAT_CHARACTER_COUNT_LIMIT}<!-- ELSE -->{LA_MCHAT_CHARACTER_COUNT}<!-- ENDIF -->',
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -30,3 +30,11 @@ ul.mchat-buttons > li {
|
||||
.mchat-footer label {
|
||||
padding-left: 3px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 700px), only screen and (max-device-width: 700px) {
|
||||
|
||||
#mchat-body {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -7,6 +7,18 @@
|
||||
*
|
||||
*/
|
||||
|
||||
.forabg.mchat-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.mchat-wrapper .collapse-box h2 a {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.mchat-wrapper .collapse-box h2 a:before {
|
||||
content: '' !important;
|
||||
}
|
||||
|
||||
.icon-mchat > a:before {
|
||||
content: '\f086';
|
||||
font-family: 'FontAwesome';
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
@@ -1,4 +1,4 @@
|
||||
<!-- IF not MCHAT_IS_ARCHIVE_PAGE -->
|
||||
<!-- IF (MCHAT_CUSTOM_HEIGHT or MCHAT_INDEX_HEIGHT) and not MCHAT_IS_ARCHIVE_PAGE -->
|
||||
<style>
|
||||
#mchat-messages {
|
||||
height: <!-- IF MCHAT_IS_CUSTOM_PAGE -->{MCHAT_CUSTOM_HEIGHT}<!-- ELSE -->{MCHAT_INDEX_HEIGHT}<!-- ENDIF -->px;
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="mchat-main">
|
||||
<div id="mchat-main"<!-- IF MCHAT_MESSAGE_TOP --> class="mchat-messages-top"<!-- ENDIF -->>
|
||||
<!-- IF MCHAT_STATIC_MESS and not MCHAT_IS_ARCHIVE_PAGE -->
|
||||
<ul class="topiclist forums">
|
||||
<li class="row mchat-static">{MCHAT_STATIC_MESS}</li>
|
||||
|
||||
@@ -12,8 +12,16 @@
|
||||
<!-- ENDIF -->
|
||||
<div class="mchat-message-wrapper">
|
||||
<!-- INCLUDE @dmzx_mchat/mchat_messages_icons.html -->
|
||||
<div class="mchat-message-header">{mchatrow.MCHAT_USERNAME_FULL} • <span class="mchat-time" title="{mchatrow.MCHAT_DATETIME}"<!-- IF mchatrow.MCHAT_MINUTES_AGO != -1 --> data-mchat-minutes-ago="{mchatrow.MCHAT_MINUTES_AGO}" data-mchat-relative-update="{mchatrow.MCHAT_RELATIVE_UPDATE}"<!-- ENDIF -->>{mchatrow.MCHAT_TIME}</span></div>
|
||||
<div class="mchat-text">{mchatrow.MCHAT_MESSAGE}</div>
|
||||
<div class="mchat-message-header">
|
||||
<!-- EVENT dmzx_mchat_messages_header_before -->
|
||||
{mchatrow.MCHAT_USERNAME_FULL} • <span class="mchat-time" title="{mchatrow.MCHAT_DATETIME}"<!-- IF mchatrow.MCHAT_MINUTES_AGO != -1 --> data-mchat-minutes-ago="{mchatrow.MCHAT_MINUTES_AGO}" data-mchat-relative-update="{mchatrow.MCHAT_RELATIVE_UPDATE}"<!-- ENDIF -->>{mchatrow.MCHAT_TIME}</span>
|
||||
<!-- EVENT dmzx_mchat_messages_header_after -->
|
||||
</div>
|
||||
<div class="mchat-text">
|
||||
<!-- EVENT dmzx_mchat_messages_text_before -->
|
||||
{mchatrow.MCHAT_MESSAGE}
|
||||
<!-- EVENT dmzx_mchat_messages_text_after -->
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<!-- END mchatrow -->
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!-- EVENT dmzx_mchat_messages_icons_before -->
|
||||
|
||||
<!-- IF not S_IS_BOT -->
|
||||
<!-- DEFINE $MCHAT_ALLOW_MENTION = MCHAT_ALLOW_USE and not mchatrow.MCHAT_IS_POSTER and not MCHAT_IS_ARCHIVE_PAGE -->
|
||||
<!-- DEFINE $MCHAT_ALLOW_QUOTE = MCHAT_ALLOW_USE and S_BBCODE_ALLOWED and MCHAT_ALLOW_QUOTE and not MCHAT_IS_ARCHIVE_PAGE -->
|
||||
@@ -23,3 +24,5 @@
|
||||
</ul>
|
||||
<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- EVENT dmzx_mchat_messages_icons_after -->
|
||||
|
||||
@@ -69,7 +69,6 @@
|
||||
</li>
|
||||
<!-- IF MCHAT_TIMEOUT --><li><span id="mchat-session">{MCHAT_SESSION_TIMELEFT}</span></li><!-- ENDIF -->
|
||||
<!-- IF not MCHAT_SOUND_DISABLED --><li class="mchat-sound"><input type="checkbox" id="mchat-user-sound"<!-- IF MCHAT_SOUND --> checked="checked"<!-- ENDIF --> /><label for="mchat-user-sound">{L_MCHAT_USESOUND}</label></li><!-- ENDIF -->
|
||||
<li><span class="mchat-copyright" title="{MCHAT_AUTHOR_NAMES}">©</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
@@ -337,8 +337,13 @@ textarea#mchat-input {
|
||||
content: '';
|
||||
}
|
||||
|
||||
.mchat-footer label {
|
||||
#mchat-user-sound {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#mchat-user-sound + label {
|
||||
padding-right: 0;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
#mchat-legend {
|
||||
@@ -383,6 +388,7 @@ textarea#mchat-input {
|
||||
|
||||
#mchat-input {
|
||||
width: 95% !important;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<!-- DEFINE $MCHAT_USE_WHITE_MESSAGE_ICONS = TRUE -->
|
||||
Reference in New Issue
Block a user