config = $config;
$this->template = $template;
$this->log = $log;
$this->user = $user;
$this->cache = $cache;
$this->request = $request;
$this->phpbb_extension_manager = $phpbb_extension_manager;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
}
/**
* Display the options a user can configure for this extension
*
* @return null
* @access public
*/
public function display_options()
{
add_form_key('acp_mchat');
$mchat_config = array(
'mchat_archive_limit' => array('default' => 25, 'validation' => array('num', false, 25, 50)),
'mchat_avatars' => array('default' => 1, 'validation' => array()),
'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, 'validation' => array()),
'mchat_date' => array('default' => 'D M d, Y g:i a', 'validation' => array('string', false, 0, 255)),
'mchat_edit_delete_limit' => array('default' => 0, 'validation' => array()),
'mchat_flood_time' => array('default' => 0, 'validation' => array('num', false, 0, 30)),
'mchat_index_height' => array('default' => 250, 'validation' => array('num', false, 50, 1000)),
'mchat_live_updates' => array('default' => 1, 'validation' => array()),
'mchat_location' => array('default' => 0, 'validation' => array()),
'mchat_max_message_lngth' => array('default' => 500, 'validation' => array('num', false, 0, 500)),
'mchat_message_limit' => array('default' => 10, 'validation' => array('num', false, 10, 30)),
'mchat_message_num' => array('default' => 10, 'validation' => array('num', false, 10, 50)),
'mchat_message_top' => array('default' => 1, 'validation' => array()),
'mchat_new_posts_edit' => array('default' => 0, 'validation' => array()),
'mchat_new_posts_quote' => array('default' => 0, 'validation' => array()),
'mchat_new_posts_reply' => array('default' => 0, 'validation' => array()),
'mchat_new_posts_topic' => array('default' => 0, 'validation' => array()),
'mchat_on_index' => array('default' => 1, 'validation' => array()),
'mchat_on_portal' => array('default' => 1, 'validation' => array()),
'mchat_override_min_post_chars' => array('default' => 0, 'validation' => array()),
'mchat_override_smilie_limit' => array('default' => 0, 'validation' => array()),
'mchat_pause_on_input' => array('default' => 0, 'validation' => array()),
'mchat_prune' => array('default' => 0, 'validation' => array()),
'mchat_prune_num' => array('default' => 0, 'validation' => array()),
'mchat_refresh' => array('default' => 10, 'validation' => array('num', false, 5, 60)),
'mchat_rules' => array('default' => '', 'validation' => array('string', false, 0, 255)),
'mchat_static_message' => array('default' => '', 'validation' => array('string', false, 0, 255)),
'mchat_stats_index' => array('default' => 0, 'validation' => array()),
'mchat_timeout' => array('default' => 0, 'validation' => array('num', false, 0, (int) $this->config['session_length'])),
'mchat_whois' => array('default' => 1, 'validation' => array()),
'mchat_whois_refresh' => array('default' => 60, 'validation' => array('num', false, 30, 300)),
);
if ($this->request->is_set_post('submit'))
{
if (!function_exists('validate_data'))
{
include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
}
$mchat_new_config = array();
$validation = array();
foreach ($mchat_config as $key => $value)
{
$mchat_new_config[$key] = $this->request->variable($key, $value['default'], is_string($value['default']));
if (!empty($value['validation']))
{
$validation[$key] = $value['validation'];
}
}
$error = validate_data($mchat_new_config, $validation);
if (!check_form_key('acp_mchat'))
{
$error[] = 'FORM_INVALID';
}
// Replace "error" strings with their real, localised form
// The /e modifier is deprecated since PHP 5.5.0
//$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$this->user->lang('\\1'))) ? \$this->user->lang('\\1') : '\\1'", $error);
foreach ($error as $i => $err)
{
$lang = $this->user->lang($err);
if (!empty($lang))
{
$error[$i] = $lang;
}
}
if (empty($error))
{
// Set the options the user configured
foreach ($mchat_new_config as $config_name => $config_value)
{
$this->config->set($config_name, $config_value);
}
// Add an entry into the log table
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'LOG_MCHAT_CONFIG_UPDATE');
trigger_error($this->user->lang('MCHAT_CONFIG_SAVED') . adm_back_link($this->u_action));
}
}
$dateformat_options = '';
foreach ($this->user->lang['dateformats'] as $format => $null)
{
$dateformat_options .= '';
}
$s_custom = false;
$dateformat_options .= '';
$template_variables = array();
foreach ($mchat_config as $key => $value)
{
$template_variables[strtoupper($key)] = $this->config[$key];
}
$this->template->assign_vars(array_merge($template_variables, array(
'MCHAT_ERROR' => !empty($error) ? implode('
', $error) : '',
'MCHAT_VERSION' => $this->config['mchat_version'],
'L_MCHAT_BBCODES_DISALLOWED_EXPLAIN' => sprintf($this->user->lang('MCHAT_BBCODES_DISALLOWED_EXPLAIN'), 'phpbb_root_path}adm/index.$this->php_ext", 'i=bbcodes', true, $this->user->session_id) . '">', ''),
'L_MCHAT_TIMEOUT_EXPLAIN' => sprintf($this->user->lang('MCHAT_USER_TIMEOUT_EXPLAIN'),'phpbb_root_path}adm/index.$this->php_ext", 'i=board&mode=load', true, $this->user->session_id) . '">', '', $this->config['session_length']),
'S_MCHAT_DATEFORMAT_OPTIONS' => $dateformat_options,
'S_CUSTOM_DATEFORMAT' => $s_custom,
'U_ACTION' => $this->u_action,
)));
// Version check
$this->user->add_lang(array('install', 'acp/extensions', 'migrator'));
$ext_name = 'dmzx/mchat';
$md_manager = new \phpbb\extension\metadata_manager($ext_name, $this->config, $this->phpbb_extension_manager, $this->template, $this->user, $this->phpbb_root_path);
try
{
$this->metadata = $md_manager->get_metadata('all');
}
catch(\phpbb\extension\exception $e)
{
trigger_error($e, E_USER_WARNING);
}
$md_manager->output_template_data();
try
{
$updates_available = $this->version_check($md_manager, $this->request->variable('versioncheck_force', false));
$this->template->assign_vars(array(
'S_UP_TO_DATE' => empty($updates_available),
'S_VERSIONCHECK' => true,
'UP_TO_DATE_MSG' => $this->user->lang(empty($updates_available) ? 'UP_TO_DATE' : 'NOT_UP_TO_DATE', $md_manager->get_metadata('display-name')),
));
foreach ($updates_available as $branch => $version_data)
{
$this->template->assign_block_vars('updates_available', $version_data);
}
}
catch (\RuntimeException $e)
{
$this->template->assign_vars(array(
'S_VERSIONCHECK_STATUS' => $e->getCode(),
'VERSIONCHECK_FAIL_REASON' => $e->getMessage() !== $this->user->lang('VERSIONCHECK_FAIL') ? $e->getMessage() : '',
));
}
}
protected function version_check(\phpbb\extension\metadata_manager $md_manager, $force_update = false, $force_cache = false)
{
$meta = $md_manager->get_metadata('all');
if (!isset($meta['extra']['version-check']))
{
throw new \RuntimeException($this->user->lang('NO_VERSIONCHECK'), 1);
}
$version_check = $meta['extra']['version-check'];
$version_helper = new \phpbb\version_helper($this->cache, $this->config, new \phpbb\file_downloader(), $this->user);
$version_helper->set_current_version($meta['version']);
$version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename']);
$version_helper->force_stability($this->config['extension_force_unstable'] ? 'unstable' : null);
return $updates = $version_helper->get_suggested_updates($force_update, $force_cache);
}
/**
* Set page url
*
* @param string $u_action Custom form action
* @return null
* @access public
*/
public function set_page_url($u_action)
{
$this->u_action = $u_action;
}
}