forked from kasimi/mChat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ext.php
90 lines (76 loc) · 2.72 KB
/
ext.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
/**
*
* @package phpBB Extension - mChat
* @copyright (c) 2016 dmzx - http://www.dmzx-web.net
* @copyright (c) 2016 kasimi - https://kasimi.net
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace dmzx\mchat;
use phpbb\extension\base;
class ext extends base
{
/**
* Requires phpBB 3.1.7-PL1 due to usage of \phpbb\session:update_session_infos()
* Requires phpBB 3.1.8-RC1 due to HTTPS in version check
* Requires phpBB 3.2.0 due to EoL of phpBB 3.1
*
* @return bool
* @access public
*/
public function is_enableable()
{
$config = $this->container->get('config');
// Here we check if any modules from the mChat MOD for phpBB 3.0.x are still in the database.
// This is_enableable() method is called multiple times during the installation but we only
// need to do the following check once. Checking for the absence of the mchat_version value
// in the config guarantees that we're in the very first step of the installation process.
// Any later call of this method doesn't need to check this again and in fact will wrongly
// detect the extension's modules as being remnants.
if (empty($config['mchat_version']))
{
$table_prefix = $this->container->getParameter('core.table_prefix');
$module_ids = $this->get_old_module_ids($table_prefix);
if ($module_ids)
{
$lang = $this->container->get('language');
$lang->add_lang('mchat_acp', 'dmzx/mchat');
$php_ext = $this->container->getParameter('core.php_ext');
$error_msg = $lang->lang('MCHAT_30X_REMNANTS', $table_prefix, implode($lang->lang('COMMA_SEPARATOR'), $module_ids)) . adm_back_link(append_sid('index.' . $php_ext, ['i' => 'acp_extensions', 'mode' => 'main']));
trigger_error($error_msg, E_USER_WARNING);
}
}
return phpbb_version_compare(PHPBB_VERSION, '3.2.0', '>=') && phpbb_version_compare(PHP_VERSION, '5.4.7', '>=');
}
/**
* This method checks whether the phpbb_modules table contains remnants of the 3.0 MOD.
* It returns an array of the modules' IDs, or an empty array if no old modules are found.
*
* @param string $table_prefix
* @return array
*/
protected function get_old_module_ids($table_prefix)
{
$db = $this->container->get('dbal.conn');
$mchat_30x_module_langnames = [
'ACP_CAT_MCHAT',
'ACP_MCHAT_CONFIG',
'ACP_USER_MCHAT',
'UCP_CAT_MCHAT',
'UCP_MCHAT_CONFIG',
];
$sql = 'SELECT module_id
FROM ' . $table_prefix . 'modules
WHERE ' . $db->sql_in_set('module_langname', $mchat_30x_module_langnames);
$result = $db->sql_query($sql);
$rows = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);
$module_ids = [];
foreach ($rows as $row)
{
$module_ids[] = $row['module_id'];
}
return $module_ids;
}
}