'messages', 1 => 'hours', 24 => 'days', 168 => 'weeks', ]; /** * 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 * * @param user $user * @param language $lang * @param config $config * @param db_text $config_text * @param auth $auth * @param dispatcher_interface $dispatcher * @param string $root_path * @param string $php_ext * @param string $mchat_table * @param string $mchat_log_table * @param string $mchat_sessions_table */ public function __construct( user $user, language $lang, config $config, db_text $config_text, auth $auth, dispatcher_interface $dispatcher, $root_path, $php_ext, $mchat_table, $mchat_log_table, $mchat_sessions_table ) { $this->user = $user; $this->lang = $lang; $this->config = $config; $this->config_text = $config_text; $this->auth = $auth; $this->dispatcher = $dispatcher; $this->root_path = $root_path; $this->php_ext = $php_ext; $this->mchat_table = $mchat_table; $this->mchat_log_table = $mchat_log_table; $this->mchat_sessions_table = $mchat_sessions_table; } /** * @return array */ public function initialize_global_settings() { $global_settings = [ 'mchat_archive_sort' => ['default' => self::ARCHIVE_SORT_BOTTOM_TOP], 'mchat_bbcode_disallowed' => ['default' => '', 'validation' => ['string', false, 0, 255]], 'mchat_custom_height' => ['default' => 350, 'validation' => ['num', false, 50, 1000]], 'mchat_custom_page' => ['default' => 1], 'mchat_edit_delete_limit' => ['default' => 0], 'mchat_flood_time' => ['default' => 0, 'validation' => ['num', false, 0, 3600]], 'mchat_flood_messages' => ['default' => 0, 'validation' => ['num', false, 0, 100]], 'mchat_index_height' => ['default' => 250, 'validation' => ['num', false, 50, 1000]], 'mchat_live_updates' => ['default' => 1], 'mchat_log_enabled' => ['default' => 1], 'mchat_max_input_height' => ['default' => 150, 'validation' => ['num', false, 0, 1000]], 'mchat_max_message_lngth' => ['default' => 500], 'mchat_message_num_archive' => ['default' => 25, 'validation' => ['num', false, 10, 100]], 'mchat_message_num_custom' => ['default' => 10], 'mchat_message_num_index' => ['default' => 10], 'mchat_navbar_link_count' => ['default' => 1], 'mchat_override_min_post_chars' => ['default' => 0], 'mchat_override_smilie_limit' => ['default' => 0], 'mchat_posts_auth_check' => ['default' => 0], 'mchat_posts_edit' => ['default' => 0], 'mchat_posts_quote' => ['default' => 0], 'mchat_posts_reply' => ['default' => 0], 'mchat_posts_topic' => ['default' => 0], 'mchat_posts_login' => ['default' => 0], 'mchat_prune' => ['default' => 0], 'mchat_prune_gc' => ['default' => strtotime('1 day', 0)], 'mchat_prune_mode' => ['default' => 0], 'mchat_prune_num' => ['default' => 0], 'mchat_refresh' => ['default' => 10, 'validation' => ['num', false, 2, 3600]], 'mchat_timeout' => ['default' => 0, 'validation' => ['num', false, 0, (int) $this->cfg('session_length')]], 'mchat_whois_refresh' => ['default' => 60, 'validation' => ['num', false, 10, 300]], ]; /** * Event to modify global settings data * * @event dmzx.mchat.global_settings_modify * @var array global_settings Array containing global settings data * @since 2.0.0-RC7 */ $vars = [ 'global_settings', ]; extract($this->dispatcher->trigger_event('dmzx.mchat.global_settings_modify', compact($vars))); return $global_settings; } /** * @return array */ public function initialize_global_text_settings() { $global_text_settings = [ 'mchat_rules' => ['default' => ''], 'mchat_static_message' => ['default' => ''], ]; /** * Event to modify global text settings data * * @event dmzx.mchat.global_text_settings_modify * @var array global_text_settings Array containing global text settings data * @since 2.0.2 */ $vars = [ 'global_text_settings', ]; extract($this->dispatcher->trigger_event('dmzx.mchat.global_text_settings_modify', compact($vars))); return $global_text_settings; } /** * @return array */ public function initialize_ucp_settings() { $ucp_settings = [ 'mchat_avatars' => ['default' => 1], 'mchat_capital_letter' => ['default' => 1], 'mchat_character_count' => ['default' => 1], 'mchat_date' => ['default' => 'D M d, Y g:i a', 'validation' => ['string', false, 0, 64]], 'mchat_index' => ['default' => 1], 'mchat_location' => ['default' => 1], 'mchat_message_top' => ['default' => 1], 'mchat_posts' => ['default' => 1], 'mchat_relative_time' => ['default' => 1], 'mchat_sound' => ['default' => 1], 'mchat_stats_index' => ['default' => 0], 'mchat_whois_index' => ['default' => 1], ]; /** * Event to modify UCP settings data * * @event dmzx.mchat.ucp_settings_modify * @var array ucp_settings Array containing UCP settings data * @since 2.0.0-RC7 */ $vars = [ 'ucp_settings', ]; extract($this->dispatcher->trigger_event('dmzx.mchat.ucp_settings_modify', compact($vars))); return $ucp_settings; } /** * @return array */ public function global_settings() { if (empty($this->global_settings)) { $this->global_settings = $this->initialize_global_settings(); } return $this->global_settings; } /** * @return array */ public function global_text_settings() { if (empty($this->global_text_settings)) { $this->global_text_settings = $this->initialize_global_text_settings(); } return $this->global_text_settings; } /** * @return array */ public function global_text_values() { if (empty($this->global_text_values)) { $global_text_values = $this->config_text->get_array(array_keys($this->global_text_settings())); /** * Event to modify global text values * * @event dmzx.mchat.global_text_values_modify * @var array global_text_values Array containing global text values * @since 2.0.2 */ $vars = [ 'global_text_values', ]; extract($this->dispatcher->trigger_event('dmzx.mchat.global_text_values_modify', compact($vars))); $this->global_text_values = $global_text_values; } return $this->global_text_values; } /** * @return array */ public function ucp_settings() { if (empty($this->ucp_settings)) { $this->ucp_settings = $this->initialize_ucp_settings(); } return $this->ucp_settings; } /** * @param string $config * @param bool $force_global * @return string */ public function cfg($config, $force_global = false) { return $this->cfg_user($config, $this->user->data, $this->auth, $force_global); } /** * @param string $config * @param array $user_data * @param auth $auth * @param bool $force_global * @return string */ public function cfg_user($config, $user_data, $auth, $force_global = false) { if (!$force_global) { $ucp_settings = $this->ucp_settings(); if (isset($ucp_settings[$config]) && $auth->acl_get('u_' . $config)) { return $user_data['user_' . $config]; } } $global_text_settings = $this->global_text_settings(); if (isset($global_text_settings[$config])) { $global_text_values = $this->global_text_values(); return $global_text_values[$config]; } return $this->config[$config]; } /** * @param string $config * @param mixed $value * @param bool $volatile */ public function set_cfg($config, $value, $volatile = false) { $global_text_settings = $this->global_text_settings(); if (isset($global_text_settings[$config])) { $this->global_text_values[$config] = $value; if (!$volatile) { $this->config_text->set($config, $value); } return; } if ($volatile) { $this->config[$config] = $value; } else { $this->config->set($config, $value); } } /** * @return string */ public function get_table_mchat() { return $this->mchat_table; } /** * @return string */ public function get_table_mchat_log() { return $this->mchat_log_table; } /** * @return string */ public function get_table_mchat_sessions() { return $this->mchat_sessions_table; } /** * @param string $selected * @return array */ public function get_date_template_data($selected) { $dateformat_options = ''; $dateformats = $this->lang->lang_raw('dateformats'); foreach (array_keys($dateformats) as $format) { $dateformat_options .= ''; } $s_custom = false; $dateformat_options .= ''; $ucp_settings = $this->ucp_settings(); return [ 'S_MCHAT_DATEFORMAT_OPTIONS' => $dateformat_options, 'MCHAT_DEFAULT_DATEFORMAT' => $ucp_settings['mchat_date']['default'], 'S_MCHAT_CUSTOM_DATEFORMAT' => $s_custom, ]; } /** * @return string */ public function get_enabled_post_notifications_lang() { $enabled_notifications_lang = []; foreach (['topic', 'reply', 'quote', 'edit', 'login'] as $notification) { if ($this->cfg('mchat_posts_' . $notification)) { $enabled_notifications_lang[] = $this->lang->lang('MCHAT_POSTS_' . strtoupper($notification)); } } return implode($this->lang->lang('COMMA_SEPARATOR'), $enabled_notifications_lang); } /** * @return string */ public function get_current_page() { $page = $this->user->page['page_name']; // Remove app.php if URL rewriting is enabled in the ACP if ($this->config['enable_mod_rewrite']) { $app_php = 'app.' . $this->php_ext . '/'; if (($app_position = strpos($page, $app_php)) !== false) { $page = substr($page, $app_position + strlen($app_php)); } } return generate_board_url() . '/' . $page; } /** * @param string $path * @param bool $absolute_url * @param bool $append_ext * @return string */ public function url($path, $absolute_url = false, $append_ext = true) { if ($absolute_url && !$this->board_url) { $this->board_url = generate_board_url() . '/'; } $url = ($absolute_url ? $this->board_url : $this->root_path) . $path; if ($append_ext) { $url .= '.' . $this->php_ext; } return $url; } /** * @param string $file * @param string $function */ public function include_functions($file, $function) { if (!function_exists($function)) { include($this->root_path . 'includes/functions_' . $file . '.' . $this->php_ext); } } }