/** * Lists all the available extensions and dumps to the template * * @param $src_extension_manager An instance of the extension manager * @return null */ public function list_available_exts(\src\extension\manager $src_extension_manager) { $uninstalled = array_diff_key($src_extension_manager->all_available(), $src_extension_manager->all_configured()); $available_extension_meta_data = array(); foreach ($uninstalled as $name => $location) { $md_manager = $src_extension_manager->create_extension_metadata_manager($name, $this->template); try { $meta = $md_manager->get_metadata('all'); $available_extension_meta_data[$name] = array('META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'), 'META_VERSION' => $meta['version']); $force_update = $this->request->variable('versioncheck_force', false); $updates = $this->version_check($md_manager, $force_update, !$force_update); $available_extension_meta_data[$name]['S_UP_TO_DATE'] = empty($updates); $available_extension_meta_data[$name]['S_VERSIONCHECK'] = true; $available_extension_meta_data[$name]['U_VERSIONCHECK_FORCE'] = $this->u_action . '&action=details&versioncheck_force=1&ext_name=' . urlencode($md_manager->get_metadata('name')); } catch (\src\extension\exception $e) { $this->template->assign_block_vars('disabled', array('META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), 'S_VERSIONCHECK' => false)); } catch (\RuntimeException $e) { $available_extension_meta_data[$name]['S_VERSIONCHECK'] = false; } } uasort($available_extension_meta_data, array($this, 'sort_extension_meta_data_table')); foreach ($available_extension_meta_data as $name => $block_vars) { $block_vars['U_DETAILS'] = $this->u_action . '&action=details&ext_name=' . urlencode($name); $this->template->assign_block_vars('disabled', $block_vars); $this->output_actions('disabled', array('ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . urlencode($name))); } }