' . drupal_render_children($element) . '';
}
/**
* Theme callback for the modules tabbed form.
*/
function theme_module_filter_system_modules_tabs($variables) {
if (module_exists('views_ui')) {
// Hack to get consistent style with views ctools dropbutton.
if (module_load_include('inc', 'views_ui', 'includes/admin')) {
foreach (views_ui_get_admin_css() as $file => $options) {
drupal_add_css($file, $options);
}
}
}
$form = $variables['form'];
if (!module_exists('page_actions')) {
$form['actions']['#prefix'] = '
';
$form['actions']['#suffix'] = '
';
}
$header = array(
array('data' => '', 'class' => array('checkbox')),
array('data' => t('Name'), 'class' => array('name')),
array('data' => t('Description'), 'class' => array('description')),
array('data' => t('Links'), 'class' => array('links')),
);
if (variable_get('module_filter_version_column', 0)) {
array_splice($header, 2, 0, array(array('data' => t('Version'), 'class' => array('version'))));
}
$package_ids = array('all');
$enabled['all'] = array();
if (variable_get('module_filter_track_recent_modules', 1)) {
$recent_modules = array_filter(variable_get('module_filter_recent_modules', array()), 'module_filter_recent_filter');
// Save the filtered results.
variable_set('module_filter_recent_modules', $recent_modules);
$package_ids[] = 'recent';
$enabled['recent'] = array();
}
// Determine what modules are new (within a week).
$new_modules = module_filter_new_modules();
$package_ids[] = 'new';
$enabled['new'] = array();
$rows = array();
$flip = array('even' => 'odd', 'odd' => 'even');
foreach (element_children($form['modules']) as $package) {
$package_id = module_filter_get_id($package);
$package_ids[] = $package_id;
// Package title and header.
$rows[] = array('data' => array(array('data' => '' . $form['modules'][$package]['#title'] . '
', 'colspan' => 4)), 'id' => $package_id . '-package', 'class' => array('admin-package-title'));
$rows[] = array('data' => $header, 'class' => array('admin-package-header'));
$stripe = 'odd';
$enabled[$package_id] = array();
foreach (element_children($form['modules'][$package]) as $key) {
$module = &$form['modules'][$package][$key];
$is_enabled = isset($module['enable']['#default_value']) ? $module['enable']['#default_value'] : '';
$enabled['all'][] = $enabled[$package_id][] = $is_enabled;
if (isset($recent_modules[$key])) {
$enabled['recent'][] = $is_enabled;
}
if (isset($new_modules[$key])) {
$enabled['new'][] = $is_enabled;
}
$row = array();
$version = !empty($module['version']['#markup']);
$requires = !empty($module['#requires']);
$required_by = !empty($module['#required_by']);
$toggle_enable = '';
if (isset($module['enable']['#type']) && $module['enable']['#type'] == 'checkbox') {
unset($module['enable']['#title']);
$class = ($is_enabled ? 'enabled' : 'off');
if (!empty($module['enable']['#disabled'])) {
$class .= ' disabled';
}
$toggle_enable = '';
}
$row[] = array('class' => array('checkbox'), 'data' => $toggle_enable . drupal_render($module['enable']));
$label = '');
if (variable_get('module_filter_version_column', 0) && $version) {
$row[] = array('class' => array('version'), 'data' => drupal_render($module['version']));
}
// Add the description, along with any modules it requires.
if (empty($module['description']['#markup'])) {
$module['description']['#markup'] = '' . t('No description available.') . '';
}
$description = '' . drupal_render($module['description']) . '';
if ($requires || $required_by || (!variable_get('module_filter_version_column', 0) && $version)) {
$description .= '';
if (!variable_get('module_filter_version_column', 0) && $version) {
$description .= '
' . t('Version: !module-version', array('!module-version' => drupal_render($module['version']))) . '
';
}
if ($requires) {
$description .= '
' . t('Requires: !module-list', array('!module-list' => implode(', ', $module['#requires']))) . '
';
}
if ($required_by) {
$description .= '
' . t('Required by: !module-list', array('!module-list' => implode(', ', $module['#required_by']))) . '
';
}
$description .= '
';
}
$row[] = array('data' => '' . $description . '
', 'class' => array('description'));
$operations = (module_exists('ctools')) ? theme('module_filter_operations', array('links' => $module['links'], 'dropbutton' => TRUE)) : theme('module_filter_operations', array('links' => $module['links']));
$row[] = array('data' => '' . $operations . '
', 'class' => array('links'));
$class = array(module_filter_get_id($package) . '-tab', 'module', $stripe);
if (isset($recent_modules[$key])) {
$class[] = 'recent-module';
}
if (isset($new_modules[$key])) {
$class[] = 'new-module';
}
$rows[] = array('data' => $row, 'no_striping' => TRUE, 'class' => $class);
$stripe = $flip[$stripe];
}
// Set the package as printed.
$form['modules'][$package]['#printed'] = TRUE;
}
//Get packages and count number of modules
$enabled_counts = array();
foreach ($enabled as $package_id => $value) {
$enabled_counts[$package_id] = array(
'enabled' => count(array_filter($value)),
'total' => count($value),
);
}
drupal_add_js(array(
'moduleFilter' => array(
'packageIDs' => $package_ids,
'enabledCounts' => $enabled_counts,
)
), 'setting');
// Add first and last class to rows.
$rows[0]['class'][] = 'first';
$rows[count($rows) - 1]['class'][] = 'last';
$output = '';
$output .= '
' . drupal_render($form['module_filter']);
$output .= theme('table', array('header' => $header, 'rows' => $rows));
$output .= drupal_render_children($form);
$output .= '
';
$output .= '
';
return $output;
}
/**
* Theme function for module filter operations.
* @param $variables
* @return
* HTML for admin status operations.
*/
function theme_module_filter_operations(&$vars) {
$links = &$vars['links'];
$dropbutton = $vars['dropbutton'];
$operations = array();
foreach (element_children($links) as $key) {
if ($dropbutton) {
hide($links[$key]);
if (!empty($links[$key]['#href'])) {
$operations[$key] = array(
'title' => $links[$key]['#title'],
'href' => $links[$key]['#href'],
);
if (isset($links[$key]['#options'])) {
$operations[$key] += $links[$key]['#options'];
}
}
}
else {
$data = drupal_render($links[$key]);
if (!empty($data)) {
$operations[$key] = array('data' => $data);
}
}
}
if (!empty($operations)) {
if ($dropbutton) {
return '' . theme('links__ctools_dropbutton', array('title' => t('Operations'), 'links' => $operations, 'attributes' => array('class' => array('links')))) . '
';
}
return '' . theme('item_list', array('items' => $operations, 'attributes' => array('class' => array('links', 'inline')))) . '
';
}
}