/** * Parses extensions selection section * * @param string $ext_type Extension type: 'Module' or 'Plugin' * @param array $default_list A list of recommended extensions (checked by default) * @param array $selected_list A list of previously selected extensions */ function cot_install_parse_extensions($ext_type, $default_list = array(), $selected_list = array()) { global $t, $cfg, $L; $ext_type_lc = strtolower($ext_type); $ext_type_uc = strtoupper($ext_type); $ext_list = cot_extension_list_info($cfg["{$ext_type_lc}s_dir"]); $ext_type_lc == 'plugin' ? uasort($ext_list, 'cot_extension_catcmp') : ksort($ext_list); $prev_cat = ''; $block_name = $ext_type_lc == 'plugin' ? "{$ext_type_uc}_CAT.{$ext_type_uc}_ROW" : "{$ext_type_uc}_ROW"; foreach ($ext_list as $f => $info) { if (is_array($info)) { $code = $f; if ($ext_type_lc == 'plugin' && $prev_cat != $info['Category']) { if ($prev_cat != '') { // Render previous category $t->parse("MAIN.STEP_4.{$ext_type_uc}_CAT"); } // Assign a new one $prev_cat = $info['Category']; $t->assign('PLUGIN_CAT_TITLE', $L['ext_cat_' . $info['Category']]); } if (!empty($info['Requires_modules']) || !empty($info['Requires_plugins'])) { $modules_list = empty($info['Requires_modules']) ? $L['None'] : implode(', ', explode(',', $info['Requires_modules'])); $plugins_list = empty($info['Requires_plugins']) ? $L['None'] : implode(', ', explode(',', $info['Requires_plugins'])); $requires = cot_rc('install_code_requires', array('modules_list' => $modules_list, 'plugins_list' => $plugins_list)); } else { $requires = ''; } if (!empty($info['Recommends_modules']) || !empty($info['Recommends_plugins'])) { $modules_list = empty($info['Recommends_modules']) ? $L['None'] : implode(', ', explode(',', $info['Recommends_modules'])); $plugins_list = empty($info['Recommends_plugins']) ? $L['None'] : implode(', ', explode(',', $info['Recommends_plugins'])); $recommends = cot_rc('install_code_recommends', array('modules_list' => $modules_list, 'plugins_list' => $plugins_list)); } else { $recommends = ''; } if (count($selected_list) > 0) { $checked = in_array($code, $selected_list); } else { $checked = in_array($code, $default_list); } $type = $ext_type == 'Module' ? 'module' : 'plug'; $L['info_name'] = ''; $L['info_desc'] = ''; if (file_exists(cot_langfile($code, $type))) { include cot_langfile($code, $type); } $t->assign(array("{$ext_type_uc}_ROW_CHECKBOX" => cot_checkbox($checked, "install_{$ext_type_lc}s[{$code}]"), "{$ext_type_uc}_ROW_TITLE" => empty($L['info_name']) ? $info['Name'] : $L['info_name'], "{$ext_type_uc}_ROW_DESCRIPTION" => empty($L['info_desc']) ? $info['Description'] : $L['info_desc'], "{$ext_type_uc}_ROW_REQUIRES" => $requires, "{$ext_type_uc}_ROW_RECOMMENDS" => $recommends)); $t->parse("MAIN.STEP_4.{$block_name}"); } } if ($ext_type_lc == 'plugin' && $prev_cat != '') { // Render last category $t->parse("MAIN.STEP_4.{$ext_type_uc}_CAT"); } }
foreach ($db->query("SELECT SUM(pl_active) AS sum, COUNT(*) AS cnt, pl_code FROM {$db_plugins} GROUP BY pl_code")->fetchAll() as $row) { $totalactives[$row['pl_code']] = (int) $row['sum']; $totalinstalleds[$row['pl_code']] = (int) $row['cnt']; } $installed_vers = array(); foreach ($db->query("SELECT ct_version, ct_code FROM {$db_core}")->fetchAll() as $row) { $installed_vers[$row['ct_code']] = $row['ct_version']; } foreach (array('module', 'plug') as $type) { $sql = $db->query("SELECT DISTINCT(config_cat), COUNT(*) FROM {$db_config}\n\t\t\tWHERE config_owner='{$type}' GROUP BY config_cat"); while ($row = $sql->fetch(PDO::FETCH_NUM)) { $cfgentries[$row['config_cat']] = $row[0]; } $sql->closeCursor(); $dir = $type == 'module' ? $cfg['modules_dir'] : $cfg['plugins_dir']; $extensions = cot_extension_list_info($dir); $ctplug = $type == 'module' ? '0' : '1'; if ($only_installed) { // Filter only installed exts $tmp = array(); $installed_exts = $db->query("SELECT ct_code FROM {$db_core} WHERE ct_plug = {$ctplug}")->fetchAll(PDO::FETCH_COLUMN); foreach ($extensions as $key => $val) { if (in_array($key, $installed_exts)) { $tmp[$key] = $val; } } $extensions = $tmp; } // Find missing extensions $extlist = count($extensions) > 0 ? "ct_code NOT IN('" . implode("','", array_keys($extensions)) . "')" : '1'; $sql = $db->query("SELECT * FROM {$db_core} WHERE {$extlist} AND ct_plug = {$ctplug}");